From 692c25638b46aea2b1432cd681ba8054ea7347ea Mon Sep 17 00:00:00 2001 From: SkyD666 Date: Wed, 14 Aug 2024 23:58:14 +0800 Subject: [PATCH] [optimize|build] Modify download screen entrance; optimize code; update dependencies --- app/build.gradle.kts | 6 +- .../com/skyd/anivu/model/bean/MoreBean.kt | 4 +- .../worker/download/DownloadTorrentWorker.kt | 2 +- .../skyd/anivu/ui/activity/MainActivity.kt | 157 +++++++++++++++++- .../ui/component/deeplink/DeepLinkData.kt | 8 + .../com/skyd/anivu/ui/screen/MainScreen.kt | 126 -------------- .../ui/screen/download/DownloadScreen.kt | 13 +- .../skyd/anivu/ui/screen/media/MediaScreen.kt | 16 +- .../skyd/anivu/ui/screen/more/MoreScreen.kt | 40 +++-- 9 files changed, 202 insertions(+), 170 deletions(-) create mode 100644 app/src/main/java/com/skyd/anivu/ui/component/deeplink/DeepLinkData.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3277ce5c..a928e8c6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -22,7 +22,7 @@ android { minSdk = 24 targetSdk = 35 versionCode = 21 - versionName = "2.1-alpha12" + versionName = "2.1-alpha13" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" @@ -184,8 +184,8 @@ dependencies { implementation("com.google.android.material:material:1.12.0") implementation("com.google.accompanist:accompanist-permissions:0.34.0") - implementation("com.google.dagger:hilt-android:2.51.1") - ksp("com.google.dagger:hilt-android-compiler:2.51.1") + implementation("com.google.dagger:hilt-android:2.52") + ksp("com.google.dagger:hilt-android-compiler:2.52") implementation("androidx.hilt:hilt-navigation-compose:1.2.0") implementation("androidx.profileinstaller:profileinstaller:1.3.1") diff --git a/app/src/main/java/com/skyd/anivu/model/bean/MoreBean.kt b/app/src/main/java/com/skyd/anivu/model/bean/MoreBean.kt index f8893c9c..3612430a 100644 --- a/app/src/main/java/com/skyd/anivu/model/bean/MoreBean.kt +++ b/app/src/main/java/com/skyd/anivu/model/bean/MoreBean.kt @@ -1,13 +1,13 @@ package com.skyd.anivu.model.bean -import androidx.annotation.DrawableRes import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.vector.ImageVector import com.skyd.anivu.base.BaseBean data class MoreBean( val title: String, - @DrawableRes val icon: Int, + val icon: ImageVector, val iconTint: Color, val shape: Shape, val shapeColor: Color, diff --git a/app/src/main/java/com/skyd/anivu/model/worker/download/DownloadTorrentWorker.kt b/app/src/main/java/com/skyd/anivu/model/worker/download/DownloadTorrentWorker.kt index 191cc038..d14195fd 100644 --- a/app/src/main/java/com/skyd/anivu/model/worker/download/DownloadTorrentWorker.kt +++ b/app/src/main/java/com/skyd/anivu/model/worker/download/DownloadTorrentWorker.kt @@ -293,7 +293,7 @@ class DownloadTorrentWorker(context: Context, parameters: WorkerParameters) : 0, Intent( Intent.ACTION_VIEW, - DOWNLOAD_SCREEN_DEEP_LINK.toUri(), + DOWNLOAD_SCREEN_DEEP_LINK.deepLink.toUri(), applicationContext, MainActivity::class.java ), diff --git a/app/src/main/java/com/skyd/anivu/ui/activity/MainActivity.kt b/app/src/main/java/com/skyd/anivu/ui/activity/MainActivity.kt index 45be4d68..25fca957 100644 --- a/app/src/main/java/com/skyd/anivu/ui/activity/MainActivity.kt +++ b/app/src/main/java/com/skyd/anivu/ui/activity/MainActivity.kt @@ -13,16 +13,38 @@ import androidx.compose.animation.fadeOut import androidx.compose.animation.scaleIn import androidx.compose.animation.scaleOut import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Storage +import androidx.compose.material3.Button +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.core.util.Consumer +import androidx.navigation.NavController import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -30,11 +52,12 @@ import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import androidx.navigation.navDeepLink import com.google.accompanist.permissions.rememberMultiplePermissionsState +import com.skyd.anivu.R import com.skyd.anivu.base.BaseComposeActivity import com.skyd.anivu.ext.toDecodedUrl +import com.skyd.anivu.ui.local.LocalNavController import com.skyd.anivu.ui.screen.MAIN_SCREEN_ROUTE import com.skyd.anivu.ui.screen.MainScreen -import com.skyd.anivu.ui.screen.RequestStoragePermissionScreen import com.skyd.anivu.ui.screen.about.ABOUT_SCREEN_ROUTE import com.skyd.anivu.ui.screen.about.AboutScreen import com.skyd.anivu.ui.screen.about.update.UpdateDialog @@ -45,6 +68,7 @@ import com.skyd.anivu.ui.screen.download.DOWNLOAD_LINK_KEY import com.skyd.anivu.ui.screen.download.DOWNLOAD_SCREEN_DEEP_LINK import com.skyd.anivu.ui.screen.download.DOWNLOAD_SCREEN_ROUTE import com.skyd.anivu.ui.screen.download.DownloadScreen +import com.skyd.anivu.ui.screen.download.openDownloadScreen import com.skyd.anivu.ui.screen.filepicker.EXTENSION_NAME_KEY import com.skyd.anivu.ui.screen.filepicker.FILE_PICKER_ID_KEY import com.skyd.anivu.ui.screen.filepicker.FILE_PICKER_SCREEN_ROUTE @@ -95,11 +119,14 @@ import com.skyd.anivu.ui.screen.settings.transmission.TRANSMISSION_SCREEN_ROUTE import com.skyd.anivu.ui.screen.settings.transmission.TransmissionScreen import com.skyd.anivu.ui.screen.settings.transmission.proxy.PROXY_SCREEN_ROUTE import com.skyd.anivu.ui.screen.settings.transmission.proxy.ProxyScreen -import com.skyd.anivu.ui.local.LocalNavController import dagger.hilt.android.AndroidEntryPoint +private val deepLinks = listOf(DOWNLOAD_SCREEN_DEEP_LINK) + @AndroidEntryPoint class MainActivity : BaseComposeActivity() { + private var needHandleOnCreateIntent = true + override fun onCreate(savedInstanceState: Bundle?) { installSplashScreen() super.onCreate(savedInstanceState) @@ -108,7 +135,59 @@ class MainActivity : BaseComposeActivity() { CompositionLocalProvider( LocalNavController provides rememberNavController(), ) { - MainContent() + MainContent(onHandleIntent = { IntentHandler() }) + } + } + } + + @Composable + private fun IntentHandler() { + val navController = LocalNavController.current + if (needHandleOnCreateIntent) { + LaunchedEffect(Unit) { + needHandleOnCreateIntent = false + handleIntent(intent = intent, navController = navController) + } + } + + DisposableEffect(navController) { + val listener = Consumer { newIntent -> + handleIntent(intent = newIntent, navController = navController) + } + addOnNewIntentListener(listener) + onDispose { removeOnNewIntentListener(listener) } + } + } + + private fun handleIntent(intent: Intent?, navController: NavController) { + intent ?: return + val data = intent.data + if (Intent.ACTION_VIEW == intent.action && data != null) { + val scheme = data.scheme + var url: String? = null + when (scheme) { + "anivu" -> { + navController.navigate( + data, + deepLinks.firstOrNull { + data.toString().startsWith(it.deepLink) + }?.navOptions + ) + } + + "magnet" -> url = data.toString() + "http", "https" -> { + val path = data.path + if (path != null && path.endsWith(".torrent")) { + url = data.toString() + } + } + } + if (url != null) { + openDownloadScreen( + navController = navController, + downloadLink = url, + ) } } } @@ -186,7 +265,7 @@ private fun MainNavHost() { composable( route = DOWNLOAD_SCREEN_ROUTE, arguments = listOf(navArgument(DOWNLOAD_LINK_KEY) { nullable = true }), - deepLinks = listOf(navDeepLink { uriPattern = DOWNLOAD_SCREEN_DEEP_LINK }), + deepLinks = listOf(navDeepLink { uriPattern = DOWNLOAD_SCREEN_DEEP_LINK.deepLink }), ) { DownloadScreen(downloadLink = it.arguments?.getString(DOWNLOAD_LINK_KEY)) } @@ -194,7 +273,9 @@ private fun MainNavHost() { route = "$READ_SCREEN_ROUTE/{$ARTICLE_ID_KEY}", arguments = listOf(navArgument(ARTICLE_ID_KEY) { type = NavType.StringType }), ) { - ReadScreen(articleId = it.arguments?.getString(ARTICLE_ID_KEY).orEmpty().toDecodedUrl()) + ReadScreen( + articleId = it.arguments?.getString(ARTICLE_ID_KEY).orEmpty().toDecodedUrl() + ) } composable( route = SEARCH_SCREEN_ROUTE, @@ -222,7 +303,7 @@ private fun MainNavHost() { } @Composable -private fun MainContent() { +private fun MainContent(onHandleIntent: @Composable () -> Unit) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { var permissionGranted by remember { mutableStateOf(Environment.isExternalStorageManager()) @@ -233,6 +314,7 @@ private fun MainContent() { if (permissionGranted) { MainNavHost() + onHandleIntent() } else { RequestStoragePermissionScreen( shouldShowRationale = false, @@ -255,6 +337,7 @@ private fun MainContent() { ) if (storagePermissionState.allPermissionsGranted) { MainNavHost() + onHandleIntent() } else { RequestStoragePermissionScreen( shouldShowRationale = storagePermissionState.shouldShowRationale, @@ -273,4 +356,66 @@ private fun MainContent() { onError = { openUpdateDialog = false }, ) } +} + +@Composable +fun RequestStoragePermissionScreen( + shouldShowRationale: Boolean, + onPermissionRequest: () -> Unit +) { + Scaffold { padding -> + Column( + modifier = Modifier + .padding(padding) + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(horizontal = 30.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer(Modifier.height(50.dp)) + + Text( + text = stringResource(R.string.storage_permission_request_screen_title), + style = MaterialTheme.typography.titleLarge, + textAlign = TextAlign.Center, + ) + + Icon( + modifier = Modifier + .padding(30.dp) + .size(110.dp), + imageVector = Icons.Rounded.Storage, + contentDescription = null, + ) + + val textToShow = if (shouldShowRationale) { + // If the user has denied the permission but the rationale can be shown, + // then gently explain why the app requires this permission + stringResource(R.string.storage_permission_request_screen_rationale) + } else { + // If it's the first time the user lands on this feature, or the user + // doesn't want to be asked again for this permission, explain that the + // permission is required + stringResource(R.string.storage_permission_request_screen_first_tip) + } + Text( + text = textToShow, + style = MaterialTheme.typography.bodyMedium, + textAlign = TextAlign.Center, + ) + + Spacer( + modifier = Modifier + .weight(1f) + .padding(vertical = 20.dp) + ) + + Button( + modifier = Modifier.padding(vertical = 30.dp), + onClick = onPermissionRequest, + ) { + Text(stringResource(R.string.storage_permission_request_screen_request_permission)) + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/skyd/anivu/ui/component/deeplink/DeepLinkData.kt b/app/src/main/java/com/skyd/anivu/ui/component/deeplink/DeepLinkData.kt new file mode 100644 index 00000000..dfb26296 --- /dev/null +++ b/app/src/main/java/com/skyd/anivu/ui/component/deeplink/DeepLinkData.kt @@ -0,0 +1,8 @@ +package com.skyd.anivu.ui.component.deeplink + +import androidx.navigation.NavOptions + +data class DeepLinkData( + val deepLink: String, + val navOptions: NavOptions? = null, +) diff --git a/app/src/main/java/com/skyd/anivu/ui/screen/MainScreen.kt b/app/src/main/java/com/skyd/anivu/ui/screen/MainScreen.kt index 398c887a..89eed458 100644 --- a/app/src/main/java/com/skyd/anivu/ui/screen/MainScreen.kt +++ b/app/src/main/java/com/skyd/anivu/ui/screen/MainScreen.kt @@ -1,25 +1,17 @@ package com.skyd.anivu.ui.screen -import android.content.Intent -import androidx.activity.ComponentActivity import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Movie import androidx.compose.material.icons.filled.RssFeed @@ -27,10 +19,7 @@ import androidx.compose.material.icons.filled.Widgets import androidx.compose.material.icons.outlined.Movie import androidx.compose.material.icons.outlined.RssFeed import androidx.compose.material.icons.outlined.Widgets -import androidx.compose.material.icons.rounded.Storage -import androidx.compose.material3.Button import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.NavigationRail @@ -38,19 +27,10 @@ import androidx.compose.material3.NavigationRailItem import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import androidx.core.util.Consumer import androidx.navigation.NavController import androidx.navigation.NavDestination.Companion.hierarchy import androidx.navigation.NavGraph.Companion.findStartDestination @@ -59,14 +39,11 @@ import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import com.skyd.anivu.R -import com.skyd.anivu.ext.activity import com.skyd.anivu.ext.isCompact import com.skyd.anivu.model.preference.appearance.NavigationBarLabelPreference import com.skyd.anivu.ui.local.LocalMediaLibLocation -import com.skyd.anivu.ui.local.LocalNavController import com.skyd.anivu.ui.local.LocalNavigationBarLabel import com.skyd.anivu.ui.local.LocalWindowSizeClass -import com.skyd.anivu.ui.screen.download.openDownloadScreen import com.skyd.anivu.ui.screen.feed.FEED_SCREEN_ROUTE import com.skyd.anivu.ui.screen.feed.FeedScreen import com.skyd.anivu.ui.screen.media.MEDIA_SCREEN_ROUTE @@ -76,59 +53,15 @@ import com.skyd.anivu.ui.screen.more.MoreScreen const val MAIN_SCREEN_ROUTE = "mainScreen" -private fun handleIntent(intent: Intent?, navController: NavController) { - intent ?: return - val data = intent.data - if (Intent.ACTION_VIEW == intent.action && data != null) { - val scheme = data.scheme - var url: String? = null - when (scheme) { - "anivu" -> navController.navigate(data) - "magnet" -> url = data.toString() - "http", "https" -> { - val path = data.path - if (path != null && path.endsWith(".torrent")) { - url = data.toString() - } - } - } - if (url != null) { - openDownloadScreen( - navController = navController, - downloadLink = url, - ) - } - } -} - -private var needHandleIntent by mutableStateOf(true) - @Composable fun MainScreen() { val windowSizeClass = LocalWindowSizeClass.current - val navController = LocalNavController.current val mainNavController = rememberNavController() - val context = LocalContext.current val navigationBarOrRail: @Composable () -> Unit = @Composable { NavigationBarOrRail(navController = mainNavController) } - if (needHandleIntent) { - LaunchedEffect(Unit) { - needHandleIntent = false - handleIntent(intent = context.activity.intent, navController = navController) - } - } - - DisposableEffect(navController) { - val listener = Consumer { newIntent -> - handleIntent(intent = newIntent, navController = navController) - } - (context.activity as ComponentActivity).addOnNewIntentListener(listener) - onDispose { (context.activity as ComponentActivity).removeOnNewIntentListener(listener) } - } - Scaffold( bottomBar = { if (windowSizeClass.isCompact) { @@ -235,63 +168,4 @@ private fun NavigationBarOrRail(navController: NavController) { } } } -} - -@Composable -fun RequestStoragePermissionScreen(shouldShowRationale: Boolean, onPermissionRequest: () -> Unit) { - Scaffold { padding -> - Column( - modifier = Modifier - .padding(padding) - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(horizontal = 30.dp), - horizontalAlignment = Alignment.CenterHorizontally - ) { - Spacer(Modifier.height(50.dp)) - - Text( - text = stringResource(R.string.storage_permission_request_screen_title), - style = MaterialTheme.typography.titleLarge, - textAlign = TextAlign.Center, - ) - - Icon( - modifier = Modifier - .padding(30.dp) - .size(110.dp), - imageVector = Icons.Rounded.Storage, - contentDescription = null, - ) - - val textToShow = if (shouldShowRationale) { - // If the user has denied the permission but the rationale can be shown, - // then gently explain why the app requires this permission - stringResource(R.string.storage_permission_request_screen_rationale) - } else { - // If it's the first time the user lands on this feature, or the user - // doesn't want to be asked again for this permission, explain that the - // permission is required - stringResource(R.string.storage_permission_request_screen_first_tip) - } - Text( - text = textToShow, - style = MaterialTheme.typography.bodyMedium, - textAlign = TextAlign.Center, - ) - - Spacer( - modifier = Modifier - .weight(1f) - .padding(vertical = 20.dp) - ) - - Button( - modifier = Modifier.padding(vertical = 30.dp), - onClick = onPermissionRequest, - ) { - Text(stringResource(R.string.storage_permission_request_screen_request_permission)) - } - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/skyd/anivu/ui/screen/download/DownloadScreen.kt b/app/src/main/java/com/skyd/anivu/ui/screen/download/DownloadScreen.kt index 89e82e15..fb5ce6fb 100644 --- a/app/src/main/java/com/skyd/anivu/ui/screen/download/DownloadScreen.kt +++ b/app/src/main/java/com/skyd/anivu/ui/screen/download/DownloadScreen.kt @@ -27,7 +27,7 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavController -import androidx.navigation.NavOptions +import androidx.navigation.navOptions import com.skyd.anivu.R import com.skyd.anivu.base.mvi.getDispatcher import com.skyd.anivu.ext.navigate @@ -38,24 +38,27 @@ import com.skyd.anivu.model.worker.download.doIfMagnetOrTorrentLink import com.skyd.anivu.ui.component.AniVuFloatingActionButton import com.skyd.anivu.ui.component.AniVuTopBar import com.skyd.anivu.ui.component.AniVuTopBarStyle +import com.skyd.anivu.ui.component.deeplink.DeepLinkData import com.skyd.anivu.ui.component.dialog.TextFieldDialog const val DOWNLOAD_SCREEN_ROUTE = "downloadScreen" -const val DOWNLOAD_SCREEN_DEEP_LINK = "anivu://download.screen" +val DOWNLOAD_SCREEN_DEEP_LINK = DeepLinkData( + deepLink = "anivu://download.screen", + navOptions = navOptions { launchSingleTop = true }, +) const val DOWNLOAD_LINK_KEY = "downloadLink" fun openDownloadScreen( navController: NavController, - downloadLink: String?, - navOptions: NavOptions? = null, + downloadLink: String? = null, ) { navController.navigate( DOWNLOAD_SCREEN_ROUTE, Bundle().apply { putString(DOWNLOAD_LINK_KEY, downloadLink) }, - navOptions = navOptions, + navOptions = navOptions { launchSingleTop = true }, ) } diff --git a/app/src/main/java/com/skyd/anivu/ui/screen/media/MediaScreen.kt b/app/src/main/java/com/skyd/anivu/ui/screen/media/MediaScreen.kt index 25a9fa2c..6dcd9db3 100644 --- a/app/src/main/java/com/skyd/anivu/ui/screen/media/MediaScreen.kt +++ b/app/src/main/java/com/skyd/anivu/ui/screen/media/MediaScreen.kt @@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Download import androidx.compose.material.icons.outlined.Edit import androidx.compose.material.icons.outlined.FileOpen import androidx.compose.material.icons.outlined.MyLocation @@ -66,13 +65,12 @@ import com.skyd.anivu.ui.component.AniVuTopBar import com.skyd.anivu.ui.component.AniVuTopBarStyle import com.skyd.anivu.ui.component.dialog.TextFieldDialog import com.skyd.anivu.ui.component.dialog.WaitingDialog -import com.skyd.anivu.ui.screen.download.openDownloadScreen +import com.skyd.anivu.ui.local.LocalNavController +import com.skyd.anivu.ui.local.LocalWindowSizeClass import com.skyd.anivu.ui.screen.filepicker.ListenToFilePicker import com.skyd.anivu.ui.screen.filepicker.openFilePicker import com.skyd.anivu.ui.screen.media.list.GroupInfo import com.skyd.anivu.ui.screen.media.list.MediaList -import com.skyd.anivu.ui.local.LocalNavController -import com.skyd.anivu.ui.local.LocalWindowSizeClass import kotlinx.coroutines.launch import java.io.File import kotlin.math.min @@ -138,16 +136,6 @@ fun MediaScreen(path: String, viewModel: MediaViewModel = hiltViewModel()) { imageVector = Icons.Outlined.Refresh, contentDescription = stringResource(id = R.string.refresh), ) - AniVuIconButton( - onClick = { - openDownloadScreen( - navController = navController, - downloadLink = null, - ) - }, - imageVector = Icons.Outlined.Download, - contentDescription = stringResource(R.string.download_screen_name), - ) } ) }, diff --git a/app/src/main/java/com/skyd/anivu/ui/screen/more/MoreScreen.kt b/app/src/main/java/com/skyd/anivu/ui/screen/more/MoreScreen.kt index 55470979..30a2b176 100644 --- a/app/src/main/java/com/skyd/anivu/ui/screen/more/MoreScreen.kt +++ b/app/src/main/java/com/skyd/anivu/ui/screen/more/MoreScreen.kt @@ -20,6 +20,11 @@ import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Download +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Settings +import androidx.compose.material.icons.outlined.SwapVert import androidx.compose.material3.ColorScheme import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -34,7 +39,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Density @@ -48,12 +52,14 @@ import com.skyd.anivu.ui.component.AniVuTopBar import com.skyd.anivu.ui.component.AniVuTopBarStyle import com.skyd.anivu.ui.component.shape.CloverShape import com.skyd.anivu.ui.component.shape.CurlyCornerShape +import com.skyd.anivu.ui.component.shape.RoundedCornerStarShape import com.skyd.anivu.ui.component.shape.SquircleShape +import com.skyd.anivu.ui.local.LocalNavController +import com.skyd.anivu.ui.local.LocalWindowSizeClass import com.skyd.anivu.ui.screen.about.ABOUT_SCREEN_ROUTE +import com.skyd.anivu.ui.screen.download.openDownloadScreen import com.skyd.anivu.ui.screen.settings.SETTINGS_SCREEN_ROUTE import com.skyd.anivu.ui.screen.settings.data.importexport.IMPORT_EXPORT_SCREEN_ROUTE -import com.skyd.anivu.ui.local.LocalNavController -import com.skyd.anivu.ui.local.LocalWindowSizeClass const val MORE_SCREEN_ROUTE = "moreScreen" @@ -135,7 +141,7 @@ fun More1Item( ) { Icon( modifier = Modifier.size(35.dp), - painter = painterResource(id = data.icon), + imageVector = data.icon, contentDescription = null, tint = data.iconTint ) @@ -162,27 +168,35 @@ private fun getMoreBeanList( ): MutableList { return mutableListOf( MoreBean( - title = context.getString(R.string.import_export_screen_name), - icon = R.drawable.ic_swap_vert_24, + title = context.getString(R.string.download_screen_name), + icon = Icons.Outlined.Download, iconTint = colorScheme.onPrimary, - shape = SquircleShape, + shape = RoundedCornerStarShape, shapeColor = colorScheme.primary, - action = { navController.navigate(IMPORT_EXPORT_SCREEN_ROUTE) }, + action = { openDownloadScreen(navController) }, ), MoreBean( - title = context.getString(R.string.settings_screen_name), - icon = R.drawable.ic_settings_24, + title = context.getString(R.string.import_export_screen_name), + icon = Icons.Outlined.SwapVert, iconTint = colorScheme.onSecondary, shape = CloverShape, shapeColor = colorScheme.secondary, + action = { navController.navigate(IMPORT_EXPORT_SCREEN_ROUTE) }, + ), + MoreBean( + title = context.getString(R.string.settings_screen_name), + icon = Icons.Outlined.Settings, + iconTint = colorScheme.onTertiary, + shape = SquircleShape, + shapeColor = colorScheme.tertiary, action = { navController.navigate(SETTINGS_SCREEN_ROUTE) }, ), MoreBean( title = context.getString(R.string.about_screen_name), - icon = R.drawable.ic_info_24, - iconTint = colorScheme.onTertiary, + icon = Icons.Outlined.Info, + iconTint = colorScheme.onPrimary, shape = CurlyCornerShape(amp = with(density) { 1.6.dp.toPx() }, count = 10), - shapeColor = colorScheme.tertiary, + shapeColor = colorScheme.primary, action = { navController.navigate(ABOUT_SCREEN_ROUTE) } ), )