refactor: 使用最新写法书写
This commit is contained in:
parent
03022a1d3d
commit
62e804973e
10 changed files with 43 additions and 43 deletions
|
|
@ -34,7 +34,7 @@ android {
|
||||||
applicationId = "cn.super12138.todo"
|
applicationId = "cn.super12138.todo"
|
||||||
minSdk = 24
|
minSdk = 24
|
||||||
targetSdk = 36
|
targetSdk = 36
|
||||||
versionCode = 618
|
versionCode = 633
|
||||||
versionName = "2.1.2"
|
versionName = "2.1.2"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
@ -63,7 +63,9 @@ android {
|
||||||
jvmTarget = "21"
|
jvmTarget = "21"
|
||||||
}
|
}
|
||||||
aboutLibraries {
|
aboutLibraries {
|
||||||
configPath = "$projectDir/licences"
|
collect {
|
||||||
|
configPath = file("$projectDir/licences")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
compose = true
|
compose = true
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ abstract class TodoDatabase : RoomDatabase() {
|
||||||
Constants.DB_NAME
|
Constants.DB_NAME
|
||||||
)
|
)
|
||||||
.addMigrations(MIGRATION_2_3)
|
.addMigrations(MIGRATION_2_3)
|
||||||
.fallbackToDestructiveMigration()
|
.fallbackToDestructiveMigration(false)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
INSTANCE = instance
|
INSTANCE = instance
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ class MainActivity : ComponentActivity() {
|
||||||
isAppearanceLightNavigationBars = !darkTheme
|
isAppearanceLightNavigationBars = !darkTheme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 阻止截屏相关配置
|
||||||
LaunchedEffect(mainViewModel.appSecureMode) {
|
LaunchedEffect(mainViewModel.appSecureMode) {
|
||||||
if (mainViewModel.appSecureMode) {
|
if (mainViewModel.appSecureMode) {
|
||||||
window.setFlags(
|
window.setFlags(
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,10 @@ private const val INITIAL_OFFSET_FACTOR = 0.10f
|
||||||
@OptIn(ExperimentalSharedTransitionApi::class)
|
@OptIn(ExperimentalSharedTransitionApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun TodoNavigation(
|
fun TodoNavigation(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
navController: NavHostController = rememberNavController(),
|
navController: NavHostController = rememberNavController(),
|
||||||
startDestination: String = TodoScreen.Main.name,
|
startDestination: String = TodoScreen.Main.name,
|
||||||
viewModel: MainViewModel,
|
viewModel: MainViewModel
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
) {
|
||||||
SharedTransitionLayout {
|
SharedTransitionLayout {
|
||||||
NavHost(
|
NavHost(
|
||||||
|
|
@ -131,10 +131,7 @@ fun TodoNavigation(
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(TodoScreen.SettingsAboutSpecial.name) {
|
composable(TodoScreen.SettingsAboutSpecial.name) {
|
||||||
SettingsAboutSpecial(
|
SettingsAboutSpecial(viewModel = viewModel)
|
||||||
viewModel = viewModel,
|
|
||||||
onNavigateUp = { navController.navigateUp() }
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(TodoScreen.SettingsAboutLicence.name) {
|
composable(TodoScreen.SettingsAboutLicence.name) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package cn.super12138.todo.ui.pages.settings
|
package cn.super12138.todo.ui.pages.settings
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
|
@ -23,8 +22,8 @@ import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.platform.LocalUriHandler
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.core.net.toUri
|
|
||||||
import cn.super12138.todo.R
|
import cn.super12138.todo.R
|
||||||
import cn.super12138.todo.constants.Constants
|
import cn.super12138.todo.constants.Constants
|
||||||
import cn.super12138.todo.ui.components.LargeTopAppBarScaffold
|
import cn.super12138.todo.ui.components.LargeTopAppBarScaffold
|
||||||
|
|
@ -49,6 +48,8 @@ fun SettingsAbout(
|
||||||
modifier = modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
modifier = modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
val uriHandler = LocalUriHandler.current
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
|
|
@ -90,19 +91,13 @@ fun SettingsAbout(
|
||||||
leadingIcon = Icons.Outlined.Person4,
|
leadingIcon = Icons.Outlined.Person4,
|
||||||
title = stringResource(R.string.pref_developer),
|
title = stringResource(R.string.pref_developer),
|
||||||
description = stringResource(R.string.developer_name),
|
description = stringResource(R.string.developer_name),
|
||||||
onClick = {
|
onClick = { uriHandler.openUri(Constants.DEVELOPER_GITHUB) }
|
||||||
val intent = Intent(Intent.ACTION_VIEW, Constants.DEVELOPER_GITHUB.toUri())
|
|
||||||
context.startActivity(intent)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
SettingsItem(
|
SettingsItem(
|
||||||
leadingIcon = GitHubIcon,
|
leadingIcon = GitHubIcon,
|
||||||
title = stringResource(R.string.pref_view_on_github),
|
title = stringResource(R.string.pref_view_on_github),
|
||||||
description = stringResource(R.string.pref_view_on_github_desc),
|
description = stringResource(R.string.pref_view_on_github_desc),
|
||||||
onClick = {
|
onClick = { uriHandler.openUri(Constants.GITHUB_REPO) }
|
||||||
val intent = Intent(Intent.ACTION_VIEW, Constants.GITHUB_REPO.toUri())
|
|
||||||
context.startActivity(intent)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
SettingsItem(
|
SettingsItem(
|
||||||
leadingIcon = Icons.Outlined.Balance,
|
leadingIcon = Icons.Outlined.Balance,
|
||||||
|
|
|
||||||
|
|
@ -39,10 +39,11 @@ fun SettingsAboutLicence(
|
||||||
Libs.Builder().withContext(context).build()
|
Libs.Builder().withContext(context).build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
|
||||||
.padding(innerPadding)
|
.padding(innerPadding)
|
||||||
|
.fillMaxSize()
|
||||||
) {
|
) {
|
||||||
val listState = rememberLazyListState()
|
val listState = rememberLazyListState()
|
||||||
LicenceList(
|
LicenceList(
|
||||||
|
|
|
||||||
|
|
@ -48,14 +48,14 @@ import cn.super12138.todo.utils.VibrationUtils
|
||||||
@Composable
|
@Composable
|
||||||
fun SettingsAboutSpecial(
|
fun SettingsAboutSpecial(
|
||||||
viewModel: MainViewModel,
|
viewModel: MainViewModel,
|
||||||
onNavigateUp: () -> Unit,
|
// onNavigateUp: () -> Unit,
|
||||||
modifier: Modifier = Modifier
|
modifier: Modifier = Modifier
|
||||||
) {
|
) {
|
||||||
val configuration = LocalConfiguration.current
|
val configuration = LocalConfiguration.current
|
||||||
val screenHeight = configuration.screenHeightDp.dp
|
val screenHeight = configuration.screenHeightDp.dp
|
||||||
var showBanner by rememberSaveable { mutableStateOf(false) }
|
var showBanner by rememberSaveable { mutableStateOf(false) }
|
||||||
Surface(color = SpecialDefaults.WallColor) {
|
Surface(color = SpecialDefaults.WallColor) {
|
||||||
Box(Modifier.fillMaxSize()) {
|
Box(modifier.fillMaxSize()) {
|
||||||
AnimatedVisibility(
|
AnimatedVisibility(
|
||||||
visible = showBanner,
|
visible = showBanner,
|
||||||
enter = expandVertically(),
|
enter = expandVertically(),
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,8 @@ fun ContrastPicker(
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
MoreContentSettingsItem(
|
MoreContentSettingsItem(
|
||||||
title = stringResource(R.string.pref_contrast_level),
|
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(
|
var contrastState by rememberPrefFloatState(
|
||||||
Constants.PREF_CONTRAST_LEVEL,
|
Constants.PREF_CONTRAST_LEVEL,
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.ExperimentalLayoutApi
|
import androidx.compose.foundation.layout.ExperimentalLayoutApi
|
||||||
import androidx.compose.foundation.layout.FlowRow
|
import androidx.compose.foundation.layout.FlowRow
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
|
||||||
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
|
||||||
|
|
@ -22,25 +21,26 @@ import androidx.compose.ui.graphics.Shape
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import com.mikepenz.aboutlibraries.entity.Library
|
import com.mikepenz.aboutlibraries.entity.Library
|
||||||
import com.mikepenz.aboutlibraries.ui.compose.m3.LibraryColors
|
import com.mikepenz.aboutlibraries.ui.compose.LibraryColors
|
||||||
import com.mikepenz.aboutlibraries.ui.compose.m3.LibraryDefaults
|
import com.mikepenz.aboutlibraries.ui.compose.LibraryDefaults
|
||||||
import com.mikepenz.aboutlibraries.ui.compose.m3.LibraryPadding
|
import com.mikepenz.aboutlibraries.ui.compose.LibraryPadding
|
||||||
import com.mikepenz.aboutlibraries.ui.compose.m3.util.author
|
import com.mikepenz.aboutlibraries.ui.compose.m3.libraryColors
|
||||||
|
import com.mikepenz.aboutlibraries.ui.compose.util.author
|
||||||
|
|
||||||
@OptIn(ExperimentalLayoutApi::class)
|
@OptIn(ExperimentalLayoutApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun LicenceItem(
|
fun LicenceItem(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
library: Library,
|
library: Library,
|
||||||
showAuthor: Boolean = true,
|
showAuthor: Boolean = true,
|
||||||
showVersion: Boolean = true,
|
showVersion: Boolean = true,
|
||||||
showLicenseBadges: Boolean = true,
|
showLicenseBadges: Boolean = true,
|
||||||
colors: LibraryColors = LibraryDefaults.libraryColors(),
|
colors: LibraryColors = LibraryDefaults.libraryColors(),
|
||||||
padding: LibraryPadding = LibraryDefaults.libraryPadding(),
|
padding: LibraryPadding = LibraryDefaults.libraryPadding(),
|
||||||
contentPadding: PaddingValues = LibraryDefaults.ContentPadding,
|
libraryPadding: LibraryPadding = LibraryDefaults.libraryPadding(),
|
||||||
typography: Typography = MaterialTheme.typography,
|
typography: Typography = MaterialTheme.typography,
|
||||||
shape: Shape = MaterialTheme.shapes.large,
|
shape: Shape = MaterialTheme.shapes.large,
|
||||||
onClick: () -> Unit,
|
onClick: () -> Unit
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
) {
|
||||||
Column(
|
Column(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
|
|
@ -48,7 +48,7 @@ fun LicenceItem(
|
||||||
.background(colors.backgroundColor)
|
.background(colors.backgroundColor)
|
||||||
.clip(shape)
|
.clip(shape)
|
||||||
.clickable { onClick.invoke() }
|
.clickable { onClick.invoke() }
|
||||||
.padding(contentPadding)
|
.padding(libraryPadding.contentPadding)
|
||||||
) {
|
) {
|
||||||
Row(
|
Row(
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package cn.super12138.todo.ui.pages.settings.components.licence
|
package cn.super12138.todo.ui.pages.settings.components.licence
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.LazyListState
|
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.ui.components.LazyColumnCustomScrollBar
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
import com.mikepenz.aboutlibraries.Libs
|
import com.mikepenz.aboutlibraries.Libs
|
||||||
import com.mikepenz.aboutlibraries.ui.compose.m3.util.htmlReadyLicenseContent
|
import com.mikepenz.aboutlibraries.ui.compose.util.htmlReadyLicenseContent
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun LicenceList(
|
fun LicenceList(
|
||||||
|
|
@ -33,10 +32,17 @@ fun LicenceList(
|
||||||
libraries: Libs?,
|
libraries: Libs?,
|
||||||
state: LazyListState = rememberLazyListState()
|
state: LazyListState = rememberLazyListState()
|
||||||
) {
|
) {
|
||||||
val uriHandler = LocalUriHandler.current
|
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
LazyColumnCustomScrollBar(state = state) {
|
val uriHandler = LocalUriHandler.current
|
||||||
LazyColumn(state = state) {
|
|
||||||
|
LazyColumnCustomScrollBar(
|
||||||
|
state = state,
|
||||||
|
modifier = modifier
|
||||||
|
) {
|
||||||
|
LazyColumn(
|
||||||
|
state = state,
|
||||||
|
modifier = modifier
|
||||||
|
) {
|
||||||
items(libraries?.libraries ?: listOf()) { library ->
|
items(libraries?.libraries ?: listOf()) { library ->
|
||||||
var openDialog by rememberSaveable { mutableStateOf(false) }
|
var openDialog by rememberSaveable { mutableStateOf(false) }
|
||||||
|
|
||||||
|
|
@ -47,11 +53,11 @@ fun LicenceList(
|
||||||
if (!license?.htmlReadyLicenseContent.isNullOrBlank()) {
|
if (!license?.htmlReadyLicenseContent.isNullOrBlank()) {
|
||||||
openDialog = true
|
openDialog = true
|
||||||
} else if (!license?.url.isNullOrBlank()) {
|
} else if (!license?.url.isNullOrBlank()) {
|
||||||
license?.url?.also {
|
license.url?.also {
|
||||||
try {
|
try {
|
||||||
uriHandler.openUri(it)
|
uriHandler.openUri(it)
|
||||||
} catch (t: Throwable) {
|
} 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 = {
|
text = {
|
||||||
library.licenses.firstOrNull()?.licenseContent?.let {
|
library.licenses.firstOrNull()?.licenseContent?.let {
|
||||||
Column(Modifier.verticalScroll(rememberScrollState())) {
|
Column(Modifier.verticalScroll(rememberScrollState())) {
|
||||||
SelectionContainer {
|
SelectionContainer { Text(text = it) }
|
||||||
Text(text = it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue