Put three dots dropdown menu in a separate file

This commit is contained in:
Shinokuni 2024-07-09 21:39:46 +02:00
parent 9c95e0d63c
commit 3109fed97e
5 changed files with 83 additions and 72 deletions

View File

@ -5,17 +5,11 @@ import androidx.compose.animation.core.LinearOutSlowInEasing
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -30,6 +24,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import com.readrops.app.R import com.readrops.app.R
import com.readrops.app.util.components.ThreeDotsMenu
import com.readrops.app.util.theme.MediumSpacer import com.readrops.app.util.theme.MediumSpacer
import com.readrops.app.util.theme.spacing import com.readrops.app.util.theme.spacing
import com.readrops.db.entities.Feed import com.readrops.db.entities.Feed
@ -46,7 +41,6 @@ fun FolderExpandableItem(
onDeleteFolder: () -> Unit onDeleteFolder: () -> Unit
) { ) {
var isFolderExpanded by remember { mutableStateOf(false) } var isFolderExpanded by remember { mutableStateOf(false) }
var isDropDownMenuExpanded by remember { mutableStateOf(false) }
LaunchedEffect(isExpanded) { LaunchedEffect(isExpanded) {
isFolderExpanded = isExpanded isFolderExpanded = isExpanded
@ -94,37 +88,18 @@ fun FolderExpandableItem(
) )
} }
Box { ThreeDotsMenu(
IconButton( items = mapOf(
onClick = { isDropDownMenuExpanded = isDropDownMenuExpanded.not() } 1 to stringResource(id = R.string.update),
) { 2 to stringResource(id = R.string.delete)
Icon( ),
imageVector = Icons.Default.MoreVert, onItemClick = { index ->
contentDescription = null, when (index) {
) 1 -> onUpdateFolder()
else -> onDeleteFolder()
}
} }
)
DropdownMenu(
expanded = isDropDownMenuExpanded,
onDismissRequest = { isDropDownMenuExpanded = false },
) {
DropdownMenuItem(
text = { Text(text = "Update") },
onClick = {
isDropDownMenuExpanded = false
onUpdateFolder()
}
)
DropdownMenuItem(
text = { Text(text = stringResource(R.string.delete)) },
onClick = {
isDropDownMenuExpanded = false
onDeleteFolder()
}
)
}
}
} }
} }

View File

@ -1,7 +1,6 @@
package com.readrops.app.notifications package com.readrops.app.notifications
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@ -9,9 +8,6 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@ -37,6 +33,7 @@ import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow import cafe.adriel.voyager.navigator.currentOrThrow
import com.readrops.app.R import com.readrops.app.R
import com.readrops.app.util.components.AndroidScreen import com.readrops.app.util.components.AndroidScreen
import com.readrops.app.util.components.ThreeDotsMenu
import com.readrops.app.util.theme.MediumSpacer import com.readrops.app.util.theme.MediumSpacer
import com.readrops.app.util.theme.spacing import com.readrops.app.util.theme.spacing
import com.readrops.db.entities.account.Account import com.readrops.db.entities.account.Account
@ -72,37 +69,18 @@ class NotificationsScreen(val account: Account) : AndroidScreen() {
} }
}, },
actions = { actions = {
Box { ThreeDotsMenu(
IconButton( items = mapOf(
onClick = { isDropDownMenuExpanded = isDropDownMenuExpanded.not() } 1 to if (state.allFeedNotificationsEnabled) {
) { stringResource(id = R.string.disable_all)
Icon( } else {
imageVector = Icons.Default.MoreVert, stringResource(id = R.string.enable_all)
contentDescription = null, }
) ),
onItemClick = {
screenModel.setAllFeedsNotificationsState(!state.allFeedNotificationsEnabled)
} }
)
DropdownMenu(
expanded = isDropDownMenuExpanded,
onDismissRequest = { isDropDownMenuExpanded = false },
) {
DropdownMenuItem(
text = {
Text(
text = if (state.allFeedNotificationsEnabled) {
stringResource(id = R.string.disable_all)
} else {
stringResource(id = R.string.enable_all)
}
)
},
onClick = {
isDropDownMenuExpanded = false
screenModel.setAllFeedsNotificationsState(enabled = !state.allFeedNotificationsEnabled)
}
)
}
}
}, },
scrollBehavior = topAppBarScrollBehavior scrollBehavior = topAppBarScrollBehavior
) )
@ -121,7 +99,6 @@ class NotificationsScreen(val account: Account) : AndroidScreen() {
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(horizontal = MaterialTheme.spacing.mediumSpacing) .padding(horizontal = MaterialTheme.spacing.mediumSpacing)
) { ) {
Text( Text(
text = stringResource(id = R.string.enable_notifications) text = stringResource(id = R.string.enable_notifications)

View File

@ -0,0 +1,57 @@
package com.readrops.app.util.components
import androidx.compose.foundation.layout.Box
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
@Composable
fun ThreeDotsMenu(
items: Map<Int, String>,
onItemClick: (Int) -> Unit,
modifier: Modifier = Modifier
) {
var isExpanded by remember { mutableStateOf(false) }
Box(
modifier = modifier
) {
IconButton(
onClick = { isExpanded = !isExpanded }
) {
Icon(
imageVector = Icons.Default.MoreVert,
contentDescription = null,
)
}
DropdownMenu(
expanded = isExpanded,
onDismissRequest = { isExpanded = !isExpanded },
) {
for ((index, value) in items) {
DropdownMenuItem(
text = {
Text(
text = value
)
},
onClick = {
isExpanded = false
onItemClick(index)
}
)
}
}
}
}

View File

@ -171,4 +171,5 @@
<string name="open_source_libraries">Bibliothèques Open source</string> <string name="open_source_libraries">Bibliothèques Open source</string>
<string name="make_donation">Faire une donation</string> <string name="make_donation">Faire une donation</string>
<string name="other_accounts">Autres comptes</string> <string name="other_accounts">Autres comptes</string>
<string name="update">Mettre à jour</string>
</resources> </resources>

View File

@ -180,4 +180,5 @@
<string name="app_changelog_url" translatable="false">https://github.com/readrops/Readrops/blob/develop/CHANGELOG.md</string> <string name="app_changelog_url" translatable="false">https://github.com/readrops/Readrops/blob/develop/CHANGELOG.md</string>
<string name="app_issues_url" translatable="false">https://github.com/readrops/Readrops/issues</string> <string name="app_issues_url" translatable="false">https://github.com/readrops/Readrops/issues</string>
<string name="other_accounts">Other accounts</string> <string name="other_accounts">Other accounts</string>
<string name="update">Update</string>
</resources> </resources>