Skip to content

Commit d05048f

Browse files
authored
dropdown click position, locales (#41)
* dropdown click pos * comment unimplemented settings options * full row clickable for tooggeable settings * more locale * Update EditScreen.kt * Update DrawerScreen.kt
1 parent 7329254 commit d05048f

File tree

12 files changed

+188
-134
lines changed

12 files changed

+188
-134
lines changed

app/src/main/java/io/github/wiiznokes/gitnote/helper/UiHelper.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package io.github.wiiznokes.gitnote.helper
22

33
import android.content.Context
44
import android.widget.Toast
5+
import androidx.annotation.PluralsRes
56
import androidx.annotation.StringRes
67
import kotlinx.coroutines.CoroutineScope
78
import kotlinx.coroutines.Dispatchers
@@ -23,4 +24,8 @@ class UiHelper(
2324
fun getString(@StringRes resId: Int, vararg formatArgs: Any?): String {
2425
return context.getString(resId, *formatArgs)
2526
}
27+
28+
fun getQuantityString(@PluralsRes resId: Int, quantity: Int, vararg formatArgs: Any?): String {
29+
return context.resources.getQuantityString(resId, quantity, formatArgs)
30+
}
2631
}

app/src/main/java/io/github/wiiznokes/gitnote/ui/component/CustomDropDown.kt

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package io.github.wiiznokes.gitnote.ui.component
22

3+
import android.util.Log
34
import androidx.compose.foundation.background
5+
import androidx.compose.foundation.gestures.detectTapGestures
6+
import androidx.compose.foundation.layout.Box
7+
import androidx.compose.foundation.layout.offset
48
import androidx.compose.foundation.shape.CornerBasedShape
59
import androidx.compose.material3.DropdownMenu
610
import androidx.compose.material3.DropdownMenuItem
@@ -10,12 +14,23 @@ import androidx.compose.material3.Text
1014
import androidx.compose.material3.surfaceColorAtElevation
1115
import androidx.compose.runtime.Composable
1216
import androidx.compose.runtime.MutableState
17+
import androidx.compose.runtime.getValue
18+
import androidx.compose.runtime.mutableStateOf
19+
import androidx.compose.runtime.remember
20+
import androidx.compose.runtime.setValue
1321
import androidx.compose.ui.Modifier
1422
import androidx.compose.ui.draw.clip
23+
import androidx.compose.ui.geometry.Offset
1524
import androidx.compose.ui.graphics.Color
25+
import androidx.compose.ui.input.pointer.pointerInput
26+
import androidx.compose.ui.platform.LocalContext
27+
import androidx.compose.ui.unit.DpOffset
28+
import androidx.compose.ui.unit.IntOffset
1629
import androidx.compose.ui.unit.dp
30+
import androidx.core.util.TypedValueCompat.pxToDp
1731

1832

33+
private val TAG = "CustomDropDown"
1934
data class CustomDropDownModel(
2035
val text: String,
2136
val onClick: () -> Unit
@@ -28,13 +43,19 @@ fun CustomDropDown(
2843
options: List<CustomDropDownModel?>,
2944
containerColor: Color = MaterialTheme.colorScheme.surfaceColorAtElevation(15.dp),
3045
contentColor: Color = MaterialTheme.colorScheme.onSurface,
31-
onDismissRequest: (() -> Unit)? = null
46+
onDismissRequest: (() -> Unit)? = null,
47+
clickPosition: MutableState<Offset> = remember {
48+
mutableStateOf(Offset.Zero)
49+
}
3250
) {
51+
val m = LocalContext.current.resources.displayMetrics
52+
val x = pxToDp(clickPosition.value.x, m).dp
53+
val y = pxToDp(clickPosition.value.y, m).dp
54+
val offset = DpOffset(x, y)
3355

3456
MaterialTheme(
3557
shapes = MaterialTheme.shapes.copy(extraSmall = shape)
3658
) {
37-
3859
DropdownMenu(
3960
expanded = expanded.value,
4061
onDismissRequest = {
@@ -44,6 +65,7 @@ fun CustomDropDown(
4465
modifier = Modifier
4566
.background(containerColor)
4667
.clip(shape = shape),
68+
offset = offset,
4769
) {
4870

4971
options.filterNotNull().forEach { model ->
@@ -59,6 +81,5 @@ fun CustomDropDown(
5981
)
6082
}
6183
}
62-
6384
}
6485
}

app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/app/DrawerScreen.kt

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ import androidx.compose.runtime.remember
4040
import androidx.compose.runtime.rememberCoroutineScope
4141
import androidx.compose.runtime.saveable.rememberSaveable
4242
import androidx.compose.ui.Alignment
43+
import androidx.compose.ui.ExperimentalComposeUiApi
4344
import androidx.compose.ui.Modifier
45+
import androidx.compose.ui.geometry.Offset
46+
import androidx.compose.ui.input.pointer.pointerInteropFilter
4447
import androidx.compose.ui.platform.LocalLayoutDirection
4548
import androidx.compose.ui.res.stringResource
4649
import androidx.compose.ui.text.style.TextDecoration
@@ -69,7 +72,7 @@ data class DrawerFolderModel(
6972
)
7073

7174

72-
@OptIn(ExperimentalFoundationApi::class)
75+
@OptIn(ExperimentalFoundationApi::class, ExperimentalComposeUiApi::class)
7376
@Composable
7477
fun DrawerScreen(
7578
vm: GridViewModel,
@@ -142,18 +145,30 @@ fun DrawerScreen(
142145
mutableStateOf(false)
143146
}
144147

145-
CustomDropDown(
146-
expanded = dropDownExpanded,
147-
shape = MaterialTheme.shapes.medium,
148-
options = listOf(
149-
CustomDropDownModel(
150-
text = stringResource(R.string.delete_this_folder),
151-
onClick = {
152-
vm.deleteFolder(noteFolder.relativePath)
153-
}
148+
val clickPosition = remember {
149+
mutableStateOf(Offset.Zero)
150+
}
151+
152+
// todo: impl options
153+
/*
154+
// need this box for clickPosition
155+
Box {
156+
CustomDropDown(
157+
expanded = dropDownExpanded,
158+
shape = MaterialTheme.shapes.medium,
159+
options = listOf(
160+
CustomDropDownModel(
161+
text = stringResource(R.string.delete_this_folder),
162+
onClick = {
163+
vm.deleteFolder(noteFolder.relativePath)
164+
}
165+
),
154166
),
167+
clickPosition = clickPosition
155168
)
156-
)
169+
}
170+
171+
*/
157172

158173
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
159174

@@ -167,7 +182,11 @@ fun DrawerScreen(
167182
onClick = {
168183
vm.openFolder(noteFolder.relativePath)
169184
}
170-
),
185+
)
186+
.pointerInteropFilter {
187+
clickPosition.value = Offset(it.x, it.y)
188+
false
189+
},
171190
horizontalArrangement = Arrangement.SpaceBetween,
172191
verticalAlignment = Alignment.CenterVertically
173192
) {

app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/app/EditScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ fun EditScreen(
157157

158158
// bug: https://issuetracker.google.com/issues/224005027
159159
//AnimatedVisibility(visible = currentNoteFolderRelativePath.isNotEmpty()) {
160-
if (vm.name.value.text.isNotEmpty() && vm.content.value.text.isNotEmpty()) {
160+
if (vm.name.value.text.isNotEmpty()) {
161161
FloatingActionButton(
162162
modifier = Modifier,
163163
containerColor = MaterialTheme.colorScheme.primary,

0 commit comments

Comments
 (0)