diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 21af52c..dac829f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -34,7 +34,7 @@ android { applicationId = "cn.super12138.todo" minSdk = 24 targetSdk = 36 - versionCode = 618 + versionCode = 633 versionName = "2.1.2" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" @@ -63,7 +63,9 @@ android { jvmTarget = "21" } aboutLibraries { - configPath = "$projectDir/licences" + collect { + configPath = file("$projectDir/licences") + } } buildFeatures { compose = true diff --git a/app/src/main/kotlin/cn/super12138/todo/logic/database/TodoDatabase.kt b/app/src/main/kotlin/cn/super12138/todo/logic/database/TodoDatabase.kt index b5d3873..eb4d58c 100644 --- a/app/src/main/kotlin/cn/super12138/todo/logic/database/TodoDatabase.kt +++ b/app/src/main/kotlin/cn/super12138/todo/logic/database/TodoDatabase.kt @@ -23,7 +23,7 @@ abstract class TodoDatabase : RoomDatabase() { Constants.DB_NAME ) .addMigrations(MIGRATION_2_3) - .fallbackToDestructiveMigration() + .fallbackToDestructiveMigration(false) .build() INSTANCE = instance diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/activities/MainActivity.kt b/app/src/main/kotlin/cn/super12138/todo/ui/activities/MainActivity.kt index ec1705b..216311e 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/activities/MainActivity.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/activities/MainActivity.kt @@ -44,7 +44,7 @@ class MainActivity : ComponentActivity() { isAppearanceLightNavigationBars = !darkTheme } } - + // 阻止截屏相关配置 LaunchedEffect(mainViewModel.appSecureMode) { if (mainViewModel.appSecureMode) { window.setFlags( diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoNavigation.kt b/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoNavigation.kt index aa2bbe0..12d5529 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoNavigation.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoNavigation.kt @@ -26,10 +26,10 @@ private const val INITIAL_OFFSET_FACTOR = 0.10f @OptIn(ExperimentalSharedTransitionApi::class) @Composable fun TodoNavigation( + modifier: Modifier = Modifier, navController: NavHostController = rememberNavController(), startDestination: String = TodoScreen.Main.name, - viewModel: MainViewModel, - modifier: Modifier = Modifier + viewModel: MainViewModel ) { SharedTransitionLayout { NavHost( @@ -131,10 +131,7 @@ fun TodoNavigation( } composable(TodoScreen.SettingsAboutSpecial.name) { - SettingsAboutSpecial( - viewModel = viewModel, - onNavigateUp = { navController.navigateUp() } - ) + SettingsAboutSpecial(viewModel = viewModel) } composable(TodoScreen.SettingsAboutLicence.name) { diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAbout.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAbout.kt index 5d48f06..b1fcf02 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAbout.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAbout.kt @@ -1,6 +1,5 @@ package cn.super12138.todo.ui.pages.settings -import android.content.Intent import android.widget.Toast import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize @@ -23,8 +22,8 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.stringResource -import androidx.core.net.toUri import cn.super12138.todo.R import cn.super12138.todo.constants.Constants import cn.super12138.todo.ui.components.LargeTopAppBarScaffold @@ -49,6 +48,8 @@ fun SettingsAbout( modifier = modifier.nestedScroll(scrollBehavior.nestedScrollConnection), ) { innerPadding -> val context = LocalContext.current + val uriHandler = LocalUriHandler.current + Column( modifier = Modifier .fillMaxSize() @@ -90,19 +91,13 @@ fun SettingsAbout( leadingIcon = Icons.Outlined.Person4, title = stringResource(R.string.pref_developer), description = stringResource(R.string.developer_name), - onClick = { - val intent = Intent(Intent.ACTION_VIEW, Constants.DEVELOPER_GITHUB.toUri()) - context.startActivity(intent) - } + onClick = { uriHandler.openUri(Constants.DEVELOPER_GITHUB) } ) SettingsItem( leadingIcon = GitHubIcon, title = stringResource(R.string.pref_view_on_github), description = stringResource(R.string.pref_view_on_github_desc), - onClick = { - val intent = Intent(Intent.ACTION_VIEW, Constants.GITHUB_REPO.toUri()) - context.startActivity(intent) - } + onClick = { uriHandler.openUri(Constants.GITHUB_REPO) } ) SettingsItem( leadingIcon = Icons.Outlined.Balance, diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAboutLicence.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAboutLicence.kt index 161838b..6627f4c 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAboutLicence.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAboutLicence.kt @@ -39,10 +39,11 @@ fun SettingsAboutLicence( Libs.Builder().withContext(context).build() } } + Column( modifier = Modifier - .fillMaxSize() .padding(innerPadding) + .fillMaxSize() ) { val listState = rememberLazyListState() LicenceList( diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAboutSpecial.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAboutSpecial.kt index c053e2c..fb46426 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAboutSpecial.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAboutSpecial.kt @@ -48,14 +48,14 @@ import cn.super12138.todo.utils.VibrationUtils @Composable fun SettingsAboutSpecial( viewModel: MainViewModel, - onNavigateUp: () -> Unit, + // onNavigateUp: () -> Unit, modifier: Modifier = Modifier ) { val configuration = LocalConfiguration.current val screenHeight = configuration.screenHeightDp.dp var showBanner by rememberSaveable { mutableStateOf(false) } Surface(color = SpecialDefaults.WallColor) { - Box(Modifier.fillMaxSize()) { + Box(modifier.fillMaxSize()) { AnimatedVisibility( visible = showBanner, enter = expandVertically(), diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/contrast/ContrastPicker.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/contrast/ContrastPicker.kt index 498b3ff..52c9c95 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/contrast/ContrastPicker.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/contrast/ContrastPicker.kt @@ -37,7 +37,8 @@ fun ContrastPicker( val context = LocalContext.current MoreContentSettingsItem( title = stringResource(R.string.pref_contrast_level), - description = stringResource(R.string.pref_contrast_level_desc) + description = stringResource(R.string.pref_contrast_level_desc), + modifier = modifier ) { var contrastState by rememberPrefFloatState( Constants.PREF_CONTRAST_LEVEL, diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/licence/LicenceItem.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/licence/LicenceItem.kt index 7f7243c..18b6605 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/licence/LicenceItem.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/licence/LicenceItem.kt @@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.FlowRow -import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -22,25 +21,26 @@ import androidx.compose.ui.graphics.Shape import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import com.mikepenz.aboutlibraries.entity.Library -import com.mikepenz.aboutlibraries.ui.compose.m3.LibraryColors -import com.mikepenz.aboutlibraries.ui.compose.m3.LibraryDefaults -import com.mikepenz.aboutlibraries.ui.compose.m3.LibraryPadding -import com.mikepenz.aboutlibraries.ui.compose.m3.util.author +import com.mikepenz.aboutlibraries.ui.compose.LibraryColors +import com.mikepenz.aboutlibraries.ui.compose.LibraryDefaults +import com.mikepenz.aboutlibraries.ui.compose.LibraryPadding +import com.mikepenz.aboutlibraries.ui.compose.m3.libraryColors +import com.mikepenz.aboutlibraries.ui.compose.util.author @OptIn(ExperimentalLayoutApi::class) @Composable fun LicenceItem( + modifier: Modifier = Modifier, library: Library, showAuthor: Boolean = true, showVersion: Boolean = true, showLicenseBadges: Boolean = true, colors: LibraryColors = LibraryDefaults.libraryColors(), padding: LibraryPadding = LibraryDefaults.libraryPadding(), - contentPadding: PaddingValues = LibraryDefaults.ContentPadding, + libraryPadding: LibraryPadding = LibraryDefaults.libraryPadding(), typography: Typography = MaterialTheme.typography, shape: Shape = MaterialTheme.shapes.large, - onClick: () -> Unit, - modifier: Modifier = Modifier + onClick: () -> Unit ) { Column( modifier = modifier @@ -48,7 +48,7 @@ fun LicenceItem( .background(colors.backgroundColor) .clip(shape) .clickable { onClick.invoke() } - .padding(contentPadding) + .padding(libraryPadding.contentPadding) ) { Row( verticalAlignment = Alignment.CenterVertically, diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/licence/LicenceList.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/licence/LicenceList.kt index c5f312f..eb338c7 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/licence/LicenceList.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/licence/LicenceList.kt @@ -1,6 +1,5 @@ package cn.super12138.todo.ui.pages.settings.components.licence -import android.util.Log import androidx.compose.foundation.layout.Column import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState @@ -25,7 +24,7 @@ import cn.super12138.todo.ui.components.BasicDialog import cn.super12138.todo.ui.components.LazyColumnCustomScrollBar import cn.super12138.todo.utils.VibrationUtils import com.mikepenz.aboutlibraries.Libs -import com.mikepenz.aboutlibraries.ui.compose.m3.util.htmlReadyLicenseContent +import com.mikepenz.aboutlibraries.ui.compose.util.htmlReadyLicenseContent @Composable fun LicenceList( @@ -33,10 +32,17 @@ fun LicenceList( libraries: Libs?, state: LazyListState = rememberLazyListState() ) { - val uriHandler = LocalUriHandler.current val view = LocalView.current - LazyColumnCustomScrollBar(state = state) { - LazyColumn(state = state) { + val uriHandler = LocalUriHandler.current + + LazyColumnCustomScrollBar( + state = state, + modifier = modifier + ) { + LazyColumn( + state = state, + modifier = modifier + ) { items(libraries?.libraries ?: listOf()) { library -> var openDialog by rememberSaveable { mutableStateOf(false) } @@ -47,11 +53,11 @@ fun LicenceList( if (!license?.htmlReadyLicenseContent.isNullOrBlank()) { openDialog = true } else if (!license?.url.isNullOrBlank()) { - license?.url?.also { + license.url?.also { try { uriHandler.openUri(it) } catch (t: Throwable) { - Log.e("Licence", "Failed to open the URL: $it") + throw Exception("Failed to open licence URL: $it", t) } } } @@ -65,9 +71,7 @@ fun LicenceList( text = { library.licenses.firstOrNull()?.licenseContent?.let { Column(Modifier.verticalScroll(rememberScrollState())) { - SelectionContainer { - Text(text = it) - } + SelectionContainer { Text(text = it) } } } },