From de780635e43b2eed82cf3cfa32a22ddea92754d9 Mon Sep 17 00:00:00 2001 From: tarsin Date: Sun, 4 Jun 2023 15:25:30 +0800 Subject: [PATCH] Implement BaseScreen --- .../hippo/ehviewer/ui/settings/BaseScreen.kt | 66 +++++++++++++++++++ .../ehviewer/ui/settings/PreferenceTokens.kt | 10 +++ .../ehviewer/ui/settings/SettingsActivity.kt | 5 ++ 3 files changed, 81 insertions(+) create mode 100644 app/src/main/java/com/hippo/ehviewer/ui/settings/PreferenceTokens.kt diff --git a/app/src/main/java/com/hippo/ehviewer/ui/settings/BaseScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/settings/BaseScreen.kt index 3d0fd3a16..02b5899a7 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/settings/BaseScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/settings/BaseScreen.kt @@ -1,20 +1,61 @@ package com.hippo.ehviewer.ui.settings import android.app.Activity +import androidx.annotation.StringRes +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Adb import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material.icons.filled.Download +import androidx.compose.material.icons.filled.Info +import androidx.compose.material.icons.filled.Security import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import com.hippo.ehviewer.R +import com.hippo.ehviewer.ui.login.LocalNavController +import com.hippo.ehviewer.ui.settings.PreferenceTokens.PreferenceHeaderHeight +import com.hippo.ehviewer.ui.settings.PreferenceTokens.PreferenceIconPadding +import com.hippo.ehviewer.ui.settings.PreferenceTokens.PreferenceIconSize +import com.hippo.ehviewer.ui.settings.PreferenceTokens.PreferenceTextPadding + +@Composable +fun PreferenceHeader(icon: Painter, @StringRes title: Int, childRouteName: String) { + val navController = LocalNavController.current + Row( + modifier = Modifier.clickable { navController.navigate(childRouteName) }.fillMaxWidth().height(PreferenceHeaderHeight), + verticalAlignment = Alignment.CenterVertically, + ) { + Spacer(modifier = Modifier.size(PreferenceIconPadding)) + Icon(painter = icon, contentDescription = null, modifier = Modifier.size(PreferenceIconSize), tint = MaterialTheme.colorScheme.primary) + Spacer(modifier = Modifier.size(PreferenceIconPadding)) + Spacer(modifier = Modifier.size(PreferenceTextPadding)) + Text(text = stringResource(id = title)) + Spacer(modifier = Modifier.size(PreferenceTextPadding)) + } +} + +@Composable +fun PreferenceHeader(icon: ImageVector, @StringRes title: Int, childRouteName: String) = PreferenceHeader(icon = rememberVectorPainter(image = icon), title = title, childRouteName = childRouteName) @Composable fun BaseScreen() { @@ -32,6 +73,31 @@ fun BaseScreen() { }, ) { Column(modifier = Modifier.padding(it)) { + PreferenceHeader( + icon = painterResource(id = R.drawable.v_sad_panda_primary_x24), + title = R.string.settings_eh, + childRouteName = EH_SETTINGS_SCREEN, + ) + PreferenceHeader( + icon = Icons.Default.Download, + title = R.string.settings_download, + childRouteName = DOWNLOAD_SETTINGS_SCREEN, + ) + PreferenceHeader( + icon = Icons.Default.Security, + title = R.string.settings_privacy, + childRouteName = SECURITY_SETTINGS_SCREEN, + ) + PreferenceHeader( + icon = Icons.Default.Adb, + title = R.string.settings_advanced, + childRouteName = ADVANCED_SETTINGS_SCREEN, + ) + PreferenceHeader( + icon = Icons.Default.Info, + title = R.string.settings_about, + childRouteName = ABOUT_SETTINGS_SCREEN, + ) } } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/settings/PreferenceTokens.kt b/app/src/main/java/com/hippo/ehviewer/ui/settings/PreferenceTokens.kt new file mode 100644 index 000000000..bbdd7ca98 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/ui/settings/PreferenceTokens.kt @@ -0,0 +1,10 @@ +package com.hippo.ehviewer.ui.settings + +import androidx.compose.ui.unit.dp + +object PreferenceTokens { + val PreferenceHeaderHeight = 56.dp + val PreferenceIconSize = 24.dp + val PreferenceIconPadding = 16.dp + val PreferenceTextPadding = 8.dp +} diff --git a/app/src/main/java/com/hippo/ehviewer/ui/settings/SettingsActivity.kt b/app/src/main/java/com/hippo/ehviewer/ui/settings/SettingsActivity.kt index 12ca7487b..70bb63859 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/settings/SettingsActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/settings/SettingsActivity.kt @@ -33,3 +33,8 @@ class SettingsActivity : EhActivity() { } const val BASE_SETTINGS_SCREEN = "Base" +const val EH_SETTINGS_SCREEN = "Eh" +const val DOWNLOAD_SETTINGS_SCREEN = "Download" +const val SECURITY_SETTINGS_SCREEN = "Security" +const val ADVANCED_SETTINGS_SCREEN = "Advanced" +const val ABOUT_SETTINGS_SCREEN = "About"