compose: menu: Encapsulate menu with screens
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -15,7 +15,7 @@ import androidx.navigation3.runtime.rememberNavBackStack
|
||||
import androidx.navigation3.runtime.rememberSavedStateNavEntryDecorator
|
||||
import androidx.navigation3.ui.NavDisplay
|
||||
import androidx.navigation3.ui.rememberSceneSetupNavEntryDecorator
|
||||
import com.aurora.store.compose.ui.commons.BlacklistScreen
|
||||
import com.aurora.store.compose.ui.blacklist.BlacklistScreen
|
||||
import com.aurora.store.compose.ui.details.AppDetailsScreen
|
||||
import com.aurora.store.compose.ui.dev.DevProfileScreen
|
||||
import com.aurora.store.compose.ui.commons.PermissionRationaleScreen
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package com.aurora.store.compose.ui.commons
|
||||
package com.aurora.store.compose.ui.blacklist
|
||||
|
||||
import android.content.pm.PackageInfo
|
||||
import android.net.Uri
|
||||
@@ -46,10 +46,10 @@ import com.aurora.Constants
|
||||
import com.aurora.extensions.toast
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.compose.composables.BlackListComposable
|
||||
import com.aurora.store.compose.menu.BlacklistMenu
|
||||
import com.aurora.store.compose.menu.items.BlacklistMenuItem
|
||||
import com.aurora.store.compose.ui.blacklist.menu.BlacklistMenu
|
||||
import com.aurora.store.compose.ui.blacklist.menu.MenuItem
|
||||
import com.aurora.store.util.PackageUtil
|
||||
import com.aurora.store.viewmodel.all.BlacklistViewModel
|
||||
import com.aurora.store.viewmodel.blacklist.BlacklistViewModel
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.Calendar
|
||||
@@ -130,13 +130,13 @@ private fun ScreenContent(
|
||||
fun SetupMenu() {
|
||||
BlacklistMenu { menuItem ->
|
||||
when (menuItem) {
|
||||
BlacklistMenuItem.SELECT_ALL -> onBlacklistAll()
|
||||
BlacklistMenuItem.REMOVE_ALL -> onWhitelistAll()
|
||||
BlacklistMenuItem.IMPORT -> {
|
||||
MenuItem.SELECT_ALL -> onBlacklistAll()
|
||||
MenuItem.REMOVE_ALL -> onWhitelistAll()
|
||||
MenuItem.IMPORT -> {
|
||||
docImportLauncher.launch(arrayOf(Constants.JSON_MIME_TYPE))
|
||||
}
|
||||
|
||||
BlacklistMenuItem.EXPORT -> {
|
||||
MenuItem.EXPORT -> {
|
||||
docExportLauncher.launch(
|
||||
"aurora_store_apps_${Calendar.getInstance().time.time}.json"
|
||||
)
|
||||
@@ -3,7 +3,7 @@
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package com.aurora.store.compose.menu
|
||||
package com.aurora.store.compose.ui.blacklist.menu
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
@@ -21,23 +21,22 @@ import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.compose.menu.items.BlacklistMenuItem
|
||||
|
||||
/**
|
||||
* Menu for the blacklist screen
|
||||
* @param modifier The modifier to be applied to the composable
|
||||
* @param onMenuItemClicked Callback when a menu item has been clicked
|
||||
* @see BlacklistMenuItem
|
||||
* @see MenuItem
|
||||
*/
|
||||
@Composable
|
||||
fun BlacklistMenu(
|
||||
modifier: Modifier = Modifier,
|
||||
isExpanded: Boolean = false,
|
||||
onMenuItemClicked: (blacklistMenuItem: BlacklistMenuItem) -> Unit = {}
|
||||
onMenuItemClicked: (menuItem: MenuItem) -> Unit = {}
|
||||
) {
|
||||
var expanded by remember { mutableStateOf(isExpanded) }
|
||||
fun onClick(blacklistMenuItem: BlacklistMenuItem) {
|
||||
onMenuItemClicked(blacklistMenuItem)
|
||||
fun onClick(menuItem: MenuItem) {
|
||||
onMenuItemClicked(menuItem)
|
||||
expanded = false
|
||||
}
|
||||
|
||||
@@ -51,19 +50,19 @@ fun BlacklistMenu(
|
||||
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
|
||||
DropdownMenuItem(
|
||||
text = { Text(text = stringResource(R.string.action_select_all)) },
|
||||
onClick = { onClick(BlacklistMenuItem.SELECT_ALL) }
|
||||
onClick = { onClick(MenuItem.SELECT_ALL) }
|
||||
)
|
||||
DropdownMenuItem(
|
||||
text = { Text(text = stringResource(R.string.action_remove_all)) },
|
||||
onClick = { onClick(BlacklistMenuItem.REMOVE_ALL) }
|
||||
onClick = { onClick(MenuItem.REMOVE_ALL) }
|
||||
)
|
||||
DropdownMenuItem(
|
||||
text = { Text(text = stringResource(R.string.action_import)) },
|
||||
onClick = { onClick(BlacklistMenuItem.IMPORT) }
|
||||
onClick = { onClick(MenuItem.IMPORT) }
|
||||
)
|
||||
DropdownMenuItem(
|
||||
text = { Text(text = stringResource(R.string.action_export)) },
|
||||
onClick = { onClick(BlacklistMenuItem.EXPORT) }
|
||||
onClick = { onClick(MenuItem.EXPORT) }
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,12 @@
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package com.aurora.store.compose.menu.items
|
||||
package com.aurora.store.compose.ui.blacklist.menu
|
||||
|
||||
/**
|
||||
* Valid menu items for the purpose of handling clicks
|
||||
*/
|
||||
enum class BlacklistMenuItem {
|
||||
enum class MenuItem {
|
||||
SELECT_ALL,
|
||||
REMOVE_ALL,
|
||||
IMPORT,
|
||||
@@ -62,8 +62,8 @@ import com.aurora.store.compose.composables.ProgressComposable
|
||||
import com.aurora.store.compose.composables.ErrorComposable
|
||||
import com.aurora.store.compose.preview.AppPreviewProvider
|
||||
import com.aurora.store.compose.preview.coilPreviewProvider
|
||||
import com.aurora.store.compose.menu.AppDetailsMenu
|
||||
import com.aurora.store.compose.menu.items.AppDetailsMenuItem
|
||||
import com.aurora.store.compose.ui.details.menu.AppDetailsMenu
|
||||
import com.aurora.store.compose.ui.details.menu.MenuItem
|
||||
import com.aurora.store.compose.navigation.Screen
|
||||
import com.aurora.store.compose.ui.details.components.Actions
|
||||
import com.aurora.store.compose.ui.details.components.Changelog
|
||||
@@ -259,14 +259,14 @@ private fun ScreenContentApp(
|
||||
fun SetupMenu() {
|
||||
AppDetailsMenu(isInstalled = app.isInstalled, isFavorite = isFavorite) { menuItem ->
|
||||
when (menuItem) {
|
||||
AppDetailsMenuItem.FAVORITE -> onFavorite()
|
||||
AppDetailsMenuItem.MANUAL_DOWNLOAD -> {
|
||||
MenuItem.FAVORITE -> onFavorite()
|
||||
MenuItem.MANUAL_DOWNLOAD -> {
|
||||
showExtraPane(ExtraScreen.ManualDownload)
|
||||
}
|
||||
AppDetailsMenuItem.SHARE -> context.share(app.displayName, app.packageName)
|
||||
AppDetailsMenuItem.APP_INFO -> context.appInfo(app.packageName)
|
||||
AppDetailsMenuItem.PLAY_STORE -> context.browse("$SHARE_URL${app.packageName}")
|
||||
AppDetailsMenuItem.ADD_TO_HOME -> {
|
||||
MenuItem.SHARE -> context.share(app.displayName, app.packageName)
|
||||
MenuItem.APP_INFO -> context.appInfo(app.packageName)
|
||||
MenuItem.PLAY_STORE -> context.browse("$SHARE_URL${app.packageName}")
|
||||
MenuItem.ADD_TO_HOME -> {
|
||||
ShortcutManagerUtil.requestPinShortcut(context, app.packageName)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package com.aurora.store.compose.menu
|
||||
package com.aurora.store.compose.ui.details.menu
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
@@ -25,14 +25,13 @@ import com.aurora.gplayapi.data.models.App
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.compose.composables.TopAppBarComposable
|
||||
import com.aurora.store.compose.preview.AppPreviewProvider
|
||||
import com.aurora.store.compose.menu.items.AppDetailsMenuItem
|
||||
|
||||
/**
|
||||
* Menu for the app details screen
|
||||
* @param app App for which this menu should be inflated
|
||||
* @param modifier The modifier to be applied to the composable
|
||||
* @param onMenuItemClicked Callback when a menu item has been clicked
|
||||
* @see AppDetailsMenuItem
|
||||
* @see MenuItem
|
||||
*/
|
||||
@Composable
|
||||
fun AppDetailsMenu(
|
||||
@@ -40,15 +39,15 @@ fun AppDetailsMenu(
|
||||
isInstalled: Boolean = false,
|
||||
isFavorite: Boolean = false,
|
||||
isExpanded: Boolean = false,
|
||||
onMenuItemClicked: (appDetailsMenuItem: AppDetailsMenuItem) -> Unit = {}
|
||||
onMenuItemClicked: (menuItem: MenuItem) -> Unit = {}
|
||||
) {
|
||||
var expanded by remember { mutableStateOf(isExpanded) }
|
||||
fun onClick(appDetailsMenuItem: AppDetailsMenuItem) {
|
||||
onMenuItemClicked(appDetailsMenuItem)
|
||||
fun onClick(menuItem: MenuItem) {
|
||||
onMenuItemClicked(menuItem)
|
||||
expanded = false
|
||||
}
|
||||
|
||||
IconButton(onClick = { onClick(AppDetailsMenuItem.FAVORITE) }) {
|
||||
IconButton(onClick = { onClick(MenuItem.FAVORITE) }) {
|
||||
Icon(
|
||||
painter = if (isFavorite) {
|
||||
painterResource(R.drawable.ic_favorite_checked)
|
||||
@@ -59,7 +58,7 @@ fun AppDetailsMenu(
|
||||
)
|
||||
}
|
||||
|
||||
IconButton(onClick = { onClick(AppDetailsMenuItem.SHARE) }) {
|
||||
IconButton(onClick = { onClick(MenuItem.SHARE) }) {
|
||||
Icon(
|
||||
painter = painterResource(R.drawable.ic_share),
|
||||
contentDescription = stringResource(R.string.action_share)
|
||||
@@ -76,11 +75,11 @@ fun AppDetailsMenu(
|
||||
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
|
||||
DropdownMenuItem(
|
||||
text = { Text(text = stringResource(R.string.title_manual_download)) },
|
||||
onClick = { onClick(AppDetailsMenuItem.MANUAL_DOWNLOAD) }
|
||||
onClick = { onClick(MenuItem.MANUAL_DOWNLOAD) }
|
||||
)
|
||||
DropdownMenuItem(
|
||||
text = { Text(text = stringResource(R.string.title_download_playstore)) },
|
||||
onClick = { onClick(AppDetailsMenuItem.PLAY_STORE) }
|
||||
onClick = { onClick(MenuItem.PLAY_STORE) }
|
||||
)
|
||||
|
||||
// Inflate actions available only when app is installed below
|
||||
@@ -88,11 +87,11 @@ fun AppDetailsMenu(
|
||||
|
||||
DropdownMenuItem(
|
||||
text = { Text(text = stringResource(R.string.action_info)) },
|
||||
onClick = { onClick(AppDetailsMenuItem.APP_INFO) }
|
||||
onClick = { onClick(MenuItem.APP_INFO) }
|
||||
)
|
||||
DropdownMenuItem(
|
||||
text = { Text(text = stringResource(R.string.action_home_screen)) },
|
||||
onClick = { onClick(AppDetailsMenuItem.ADD_TO_HOME) }
|
||||
onClick = { onClick(MenuItem.ADD_TO_HOME) }
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,12 @@
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package com.aurora.store.compose.menu.items
|
||||
package com.aurora.store.compose.ui.details.menu
|
||||
|
||||
/**
|
||||
* Valid menu items for app details screen for handling clicks
|
||||
*/
|
||||
enum class AppDetailsMenuItem {
|
||||
enum class MenuItem {
|
||||
FAVORITE,
|
||||
SHARE,
|
||||
MANUAL_DOWNLOAD,
|
||||
@@ -36,8 +36,8 @@ import com.aurora.store.compose.composables.DownloadComposable
|
||||
import com.aurora.store.compose.composables.ErrorComposable
|
||||
import com.aurora.store.compose.composables.ProgressComposable
|
||||
import com.aurora.store.compose.composables.TopAppBarComposable
|
||||
import com.aurora.store.compose.menu.DownloadsMenu
|
||||
import com.aurora.store.compose.menu.items.DownloadsMenuItem
|
||||
import com.aurora.store.compose.ui.downloads.menu.DownloadsMenu
|
||||
import com.aurora.store.compose.ui.downloads.menu.MenuItem
|
||||
import com.aurora.store.data.room.download.Download
|
||||
import com.aurora.store.viewmodel.downloads.DownloadsViewModel
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
@@ -111,9 +111,9 @@ private fun ScreenContent(
|
||||
fun SetupMenu() {
|
||||
DownloadsMenu { menuItem ->
|
||||
when (menuItem) {
|
||||
DownloadsMenuItem.CANCEL_ALL -> onCancelAll()
|
||||
DownloadsMenuItem.FORCE_CLEAR_ALL -> onForceClearAll()
|
||||
DownloadsMenuItem.CLEAR_FINISHED -> onClearFinished()
|
||||
MenuItem.CANCEL_ALL -> onCancelAll()
|
||||
MenuItem.FORCE_CLEAR_ALL -> onForceClearAll()
|
||||
MenuItem.CLEAR_FINISHED -> onClearFinished()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package com.aurora.store.compose.menu
|
||||
package com.aurora.store.compose.ui.downloads.menu
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
@@ -21,22 +21,22 @@ import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.compose.menu.items.DownloadsMenuItem
|
||||
import com.aurora.store.compose.ui.downloads.menu.MenuItem
|
||||
|
||||
/**
|
||||
* Menu for the blacklist screen
|
||||
* @param modifier The modifier to be applied to the composable
|
||||
* @param onMenuItemClicked Callback when a menu item has been clicked
|
||||
* @see DownloadsMenuItem
|
||||
* @see MenuItem
|
||||
*/
|
||||
@Composable
|
||||
fun DownloadsMenu(
|
||||
modifier: Modifier = Modifier,
|
||||
isExpanded: Boolean = false,
|
||||
onMenuItemClicked: (menuItem: DownloadsMenuItem) -> Unit = {}
|
||||
onMenuItemClicked: (menuItem: MenuItem) -> Unit = {}
|
||||
) {
|
||||
var expanded by remember { mutableStateOf(isExpanded) }
|
||||
fun onClick(menuItem: DownloadsMenuItem) {
|
||||
fun onClick(menuItem: MenuItem) {
|
||||
onMenuItemClicked(menuItem)
|
||||
expanded = false
|
||||
}
|
||||
@@ -51,15 +51,15 @@ fun DownloadsMenu(
|
||||
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
|
||||
DropdownMenuItem(
|
||||
text = { Text(text = stringResource(R.string.download_cancel_all)) },
|
||||
onClick = { onClick(DownloadsMenuItem.CANCEL_ALL) }
|
||||
onClick = { onClick(MenuItem.CANCEL_ALL) }
|
||||
)
|
||||
DropdownMenuItem(
|
||||
text = { Text(text = stringResource(R.string.download_clear_finished)) },
|
||||
onClick = { onClick(DownloadsMenuItem.CLEAR_FINISHED) }
|
||||
onClick = { onClick(MenuItem.CLEAR_FINISHED) }
|
||||
)
|
||||
DropdownMenuItem(
|
||||
text = { Text(text = stringResource(R.string.download_force_clear_all)) },
|
||||
onClick = { onClick(DownloadsMenuItem.FORCE_CLEAR_ALL) }
|
||||
onClick = { onClick(MenuItem.FORCE_CLEAR_ALL) }
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,12 @@
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package com.aurora.store.compose.menu.items
|
||||
package com.aurora.store.compose.ui.downloads.menu
|
||||
|
||||
/**
|
||||
* Valid menu items for the purpose of handling clicks
|
||||
*/
|
||||
enum class DownloadsMenuItem {
|
||||
enum class MenuItem {
|
||||
CANCEL_ALL,
|
||||
FORCE_CLEAR_ALL,
|
||||
CLEAR_FINISHED
|
||||
@@ -1,23 +1,9 @@
|
||||
/*
|
||||
* Aurora Store
|
||||
* Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
|
||||
*
|
||||
* Aurora Store is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Aurora Store is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Aurora Store. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2025 The Calyx Institute
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package com.aurora.store.viewmodel.all
|
||||
package com.aurora.store.viewmodel.blacklist
|
||||
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageInfo
|
||||
@@ -105,7 +91,7 @@ class BlacklistViewModel @Inject constructor(
|
||||
fun blacklist(packageName: String) {
|
||||
blacklist.add(packageName)
|
||||
blacklistProvider.blacklist(packageName)
|
||||
AuroraApp.events.send(BusEvent.Blacklisted(packageName))
|
||||
AuroraApp.Companion.events.send(BusEvent.Blacklisted(packageName))
|
||||
}
|
||||
|
||||
fun blacklistAll() {
|
||||
Reference in New Issue
Block a user