switch Material you theme and black theme without relaunch app

This commit is contained in:
BinTianqi
2024-05-12 21:24:03 +08:00
parent 2009baac40
commit bbb6875be9
16 changed files with 85 additions and 96 deletions

View File

@@ -40,21 +40,23 @@ import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.dpm.* import com.bintianqi.owndroid.dpm.*
import com.bintianqi.owndroid.ui.Animations import com.bintianqi.owndroid.ui.Animations
import com.bintianqi.owndroid.ui.theme.OwnDroidTheme import com.bintianqi.owndroid.ui.theme.OwnDroidTheme
import com.bintianqi.owndroid.ui.theme.SetDarkTheme
import com.bintianqi.owndroid.ui.theme.bgColor
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
var backToHome = false var backToHome = false
@ExperimentalMaterial3Api @ExperimentalMaterial3Api
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
@SuppressLint("UnrememberedMutableState")
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge() enableEdgeToEdge()
WindowCompat.setDecorFitsSystemWindows(window, false) WindowCompat.setDecorFitsSystemWindows(window, false)
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
registerActivityResult(this) registerActivityResult(this)
val sharedPref = applicationContext.getSharedPreferences("data", Context.MODE_PRIVATE)
setContent { setContent {
OwnDroidTheme { val materialYou = mutableStateOf(sharedPref.getBoolean("material_you",true))
MyScaffold() val blackTheme = mutableStateOf(sharedPref.getBoolean("black_theme", false))
OwnDroidTheme(materialYou.value, blackTheme.value){
MyScaffold(materialYou, blackTheme)
} }
} }
} }
@@ -63,7 +65,7 @@ class MainActivity : ComponentActivity() {
@SuppressLint("UnrememberedMutableState") @SuppressLint("UnrememberedMutableState")
@ExperimentalMaterial3Api @ExperimentalMaterial3Api
@Composable @Composable
fun MyScaffold(){ fun MyScaffold(materialYou:MutableState<Boolean>, blackTheme:MutableState<Boolean>){
val navCtrl = rememberNavController() val navCtrl = rememberNavController()
val myContext = LocalContext.current val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
@@ -72,7 +74,6 @@ fun MyScaffold(){
val focusMgr = LocalFocusManager.current val focusMgr = LocalFocusManager.current
val pkgName = mutableStateOf("") val pkgName = mutableStateOf("")
val dialogStatus = mutableIntStateOf(0) val dialogStatus = mutableIntStateOf(0)
SetDarkTheme()
LaunchedEffect(Unit){ LaunchedEffect(Unit){
while(true){ while(true){
if(backToHome){ navCtrl.navigateUp(); backToHome=false } if(backToHome){ navCtrl.navigateUp(); backToHome=false }
@@ -84,7 +85,7 @@ fun MyScaffold(){
startDestination = "HomePage", startDestination = "HomePage",
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background(bgColor) .background(colorScheme.background)
.imePadding() .imePadding()
.pointerInput(Unit) {detectTapGestures(onTap = {focusMgr.clearFocus()})}, .pointerInput(Unit) {detectTapGestures(onTap = {focusMgr.clearFocus()})},
enterTransition = Animations.navHostEnterTransition, enterTransition = Animations.navHostEnterTransition,
@@ -100,7 +101,7 @@ fun MyScaffold(){
composable(route = "UserRestriction", content = { UserRestriction(navCtrl)}) composable(route = "UserRestriction", content = { UserRestriction(navCtrl)})
composable(route = "UserManage", content = { UserManage(navCtrl)}) composable(route = "UserManage", content = { UserManage(navCtrl)})
composable(route = "Password", content = { Password(navCtrl)}) composable(route = "Password", content = { Password(navCtrl)})
composable(route = "AppSetting", content = { AppSetting(navCtrl)}) composable(route = "AppSetting", content = { AppSetting(navCtrl, materialYou, blackTheme)})
composable(route = "Network", content = {Network(navCtrl)}) composable(route = "Network", content = {Network(navCtrl)})
composable(route = "PackageSelector"){PackageSelector(navCtrl, pkgName)} composable(route = "PackageSelector"){PackageSelector(navCtrl, pkgName)}
composable(route = "PermissionPicker"){PermissionPicker(navCtrl)} composable(route = "PermissionPicker"){PermissionPicker(navCtrl)}
@@ -131,7 +132,10 @@ private fun HomePage(navCtrl:NavHostController, pkgName: MutableState<String>){
LaunchedEffect(Unit){ pkgName.value = "" } LaunchedEffect(Unit){ pkgName.value = "" }
Column(modifier = Modifier.statusBarsPadding().verticalScroll(rememberScrollState())) { Column(modifier = Modifier.statusBarsPadding().verticalScroll(rememberScrollState())) {
Spacer(Modifier.padding(vertical = 25.dp)) Spacer(Modifier.padding(vertical = 25.dp))
Text(text = stringResource(R.string.app_name), style = typography.headlineLarge, modifier = Modifier.padding(start = 10.dp), color = colorScheme.onBackground) Text(
text = stringResource(R.string.app_name), style = typography.headlineLarge,
modifier = Modifier.padding(start = 10.dp), color = colorScheme.onBackground
)
Spacer(Modifier.padding(vertical = 8.dp)) Spacer(Modifier.padding(vertical = 8.dp))
Row( Row(
modifier = Modifier modifier = Modifier

View File

@@ -2,7 +2,6 @@ package com.bintianqi.owndroid
import android.Manifest import android.Manifest
import android.os.Build.VERSION import android.os.Build.VERSION
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
@@ -17,7 +16,6 @@ import androidx.navigation.NavHostController
import com.bintianqi.owndroid.dpm.applySelectedPermission import com.bintianqi.owndroid.dpm.applySelectedPermission
import com.bintianqi.owndroid.dpm.selectedPermission import com.bintianqi.owndroid.dpm.selectedPermission
import com.bintianqi.owndroid.ui.NavIcon import com.bintianqi.owndroid.ui.NavIcon
import com.bintianqi.owndroid.ui.theme.bgColor
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@@ -27,12 +25,12 @@ fun PermissionPicker(navCtrl: NavHostController){
TopAppBar( TopAppBar(
title = {Text(text = stringResource(R.string.permission_picker))}, title = {Text(text = stringResource(R.string.permission_picker))},
navigationIcon = {NavIcon{navCtrl.navigateUp()}}, navigationIcon = {NavIcon{navCtrl.navigateUp()}},
colors = TopAppBarDefaults.topAppBarColors(containerColor = bgColor) colors = TopAppBarDefaults.topAppBarColors(containerColor = MaterialTheme.colorScheme.background)
) )
} }
){ paddingValues-> ){ paddingValues->
LazyColumn( LazyColumn(
modifier = Modifier.fillMaxSize().padding(top = paddingValues.calculateTopPadding()).background(bgColor) modifier = Modifier.fillMaxSize().padding(top = paddingValues.calculateTopPadding())
){ ){
items(permissionList()){ items(permissionList()){
Column( Column(

View File

@@ -10,6 +10,7 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.material3.MaterialTheme.colorScheme
import androidx.compose.material3.MaterialTheme.typography import androidx.compose.material3.MaterialTheme.typography
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@@ -22,7 +23,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import com.bintianqi.owndroid.ui.NavIcon import com.bintianqi.owndroid.ui.NavIcon
import com.bintianqi.owndroid.ui.theme.bgColor
import com.google.accompanist.drawablepainter.rememberDrawablePainter import com.google.accompanist.drawablepainter.rememberDrawablePainter
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -124,14 +124,14 @@ fun PackageSelector(navCtrl:NavHostController, pkgName: MutableState<String>){
title = { title = {
Text(text = stringResource(R.string.pkg_selector)) Text(text = stringResource(R.string.pkg_selector))
}, },
navigationIcon = {NavIcon{navCtrl.navigateUp()}}, navigationIcon = { NavIcon{navCtrl.navigateUp()} },
colors = TopAppBarDefaults.topAppBarColors(containerColor = bgColor) colors = TopAppBarDefaults.topAppBarColors(containerColor = colorScheme.background)
) )
} }
){paddingValues-> ){paddingValues->
LazyColumn( LazyColumn(
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.fillMaxSize().background(bgColor).padding(top = paddingValues.calculateTopPadding()), modifier = Modifier.fillMaxSize().padding(top = paddingValues.calculateTopPadding()),
state = scrollState state = scrollState
){ ){
items(1){ items(1){

View File

@@ -3,19 +3,21 @@ package com.bintianqi.owndroid
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import androidx.compose.foundation.background import android.os.Build.VERSION
import androidx.compose.foundation.layout.* import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.MaterialTheme.colorScheme
import androidx.compose.material3.MaterialTheme.typography import androidx.compose.material3.MaterialTheme.typography
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -24,12 +26,13 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.ui.* import com.bintianqi.owndroid.ui.Animations
import com.bintianqi.owndroid.ui.theme.SetDarkTheme import com.bintianqi.owndroid.ui.SubPageItem
import com.bintianqi.owndroid.ui.theme.bgColor import com.bintianqi.owndroid.ui.SwitchItem
import com.bintianqi.owndroid.ui.TopBar
@Composable @Composable
fun AppSetting(navCtrl:NavHostController){ fun AppSetting(navCtrl:NavHostController, materialYou: MutableState<Boolean>, blackTheme: MutableState<Boolean>){
val localNavCtrl = rememberNavController() val localNavCtrl = rememberNavController()
val backStackEntry by localNavCtrl.currentBackStackEntryAsState() val backStackEntry by localNavCtrl.currentBackStackEntryAsState()
/*val titleMap = mapOf( /*val titleMap = mapOf(
@@ -51,10 +54,10 @@ fun AppSetting(navCtrl:NavHostController){
exitTransition = Animations.navHostExitTransition, exitTransition = Animations.navHostExitTransition,
popEnterTransition = Animations.navHostPopEnterTransition, popEnterTransition = Animations.navHostPopEnterTransition,
popExitTransition = Animations.navHostPopExitTransition, popExitTransition = Animations.navHostPopExitTransition,
modifier = Modifier.background(bgColor).padding(top = it.calculateTopPadding()) modifier = Modifier.padding(top = it.calculateTopPadding())
){ ){
composable(route = "Home"){Home(localNavCtrl)} composable(route = "Home"){Home(localNavCtrl)}
composable(route = "Settings"){Settings()} composable(route = "Settings"){Settings(materialYou, blackTheme)}
composable(route = "About"){About()} composable(route = "About"){About()}
} }
} }
@@ -69,24 +72,28 @@ private fun Home(navCtrl: NavHostController){
} }
@Composable @Composable
private fun Settings(){ private fun Settings(materialYou:MutableState<Boolean>, blackTheme:MutableState<Boolean>){
val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE) val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE)
SetDarkTheme()
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())) { Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())) {
if(VERSION.SDK_INT>=31){
SwitchItem( SwitchItem(
R.string.dynamic_color, stringResource(R.string.dynamic_color_desc),null, R.string.material_you_color, stringResource(R.string.dynamic_color_desc), null,
{sharedPref.getBoolean("dynamicColor",false)},{sharedPref.edit().putBoolean("dynamicColor",it).apply()} { sharedPref.getBoolean("material_you",true) },
) {
if(colorScheme.background.toArgb()!=Color(0xFF000000).toArgb()){ sharedPref.edit().putBoolean("material_you",it).apply()
SwitchItem( materialYou.value = it
R.string.blackTheme, stringResource(R.string.blackTheme_desc),null, }
{sharedPref.getBoolean("blackTheme",false)},{sharedPref.edit().putBoolean("blackTheme",it).apply()}
) )
} }
Box(modifier = Modifier.padding(10.dp)){ if(isSystemInDarkTheme()){
Information { SwitchItem(
Text(text = stringResource(R.string.need_relaunch)) R.string.amoled_black, stringResource(R.string.blackTheme_desc), null,
{ sharedPref.getBoolean("black_theme",false) },
{
sharedPref.edit().putBoolean("black_theme",it).apply()
blackTheme.value = it
} }
)
} }
} }
} }

View File

@@ -52,7 +52,6 @@ import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.* import com.bintianqi.owndroid.*
import com.bintianqi.owndroid.R import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.ui.* import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import java.io.IOException import java.io.IOException
import java.io.InputStream import java.io.InputStream
@@ -122,8 +121,7 @@ fun ApplicationManage(navCtrl:NavHostController, pkgName: MutableState<String>,
enterTransition = Animations.navHostEnterTransition, enterTransition = Animations.navHostEnterTransition,
exitTransition = Animations.navHostExitTransition, exitTransition = Animations.navHostExitTransition,
popEnterTransition = Animations.navHostPopEnterTransition, popEnterTransition = Animations.navHostPopEnterTransition,
popExitTransition = Animations.navHostPopExitTransition, popExitTransition = Animations.navHostPopExitTransition
modifier = Modifier.background(bgColor)
){ ){
composable(route = "Home"){Home(localNavCtrl, pkgName.value, dialogStatus)} composable(route = "Home"){Home(localNavCtrl, pkgName.value, dialogStatus)}
composable(route = "UserControlDisabled"){UserCtrlDisabledPkg(pkgName.value)} composable(route = "UserControlDisabled"){UserCtrlDisabledPkg(pkgName.value)}

View File

@@ -9,7 +9,6 @@ import android.os.Build.VERSION
import android.widget.Toast import android.widget.Toast
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.background
import androidx.compose.foundation.focusable import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
@@ -17,9 +16,12 @@ import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.* import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme.colorScheme import androidx.compose.material3.MaterialTheme.colorScheme
import androidx.compose.material3.MaterialTheme.typography import androidx.compose.material3.MaterialTheme.typography
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
@@ -36,7 +38,6 @@ import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.R import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.ui.* import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
@Composable @Composable
fun ManagedProfile(navCtrl: NavHostController) { fun ManagedProfile(navCtrl: NavHostController) {
@@ -65,7 +66,7 @@ fun ManagedProfile(navCtrl: NavHostController) {
exitTransition = Animations.navHostExitTransition, exitTransition = Animations.navHostExitTransition,
popEnterTransition = Animations.navHostPopEnterTransition, popEnterTransition = Animations.navHostPopEnterTransition,
popExitTransition = Animations.navHostPopExitTransition, popExitTransition = Animations.navHostPopExitTransition,
modifier = Modifier.background(bgColor).padding(top = it.calculateTopPadding()) modifier = Modifier.padding(top = it.calculateTopPadding())
){ ){
composable(route = "Home"){Home(localNavCtrl)} composable(route = "Home"){Home(localNavCtrl)}
composable(route = "OrgOwnedWorkProfile"){OrgOwnedProfile()} composable(route = "OrgOwnedWorkProfile"){OrgOwnedProfile()}

View File

@@ -45,7 +45,6 @@ import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.toText import com.bintianqi.owndroid.toText
import com.bintianqi.owndroid.ui.* import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
var ssidSet = mutableSetOf<WifiSsid>() var ssidSet = mutableSetOf<WifiSsid>()
@Composable @Composable
@@ -85,7 +84,7 @@ fun Network(navCtrl: NavHostController){
exitTransition = Animations.navHostExitTransition, exitTransition = Animations.navHostExitTransition,
popEnterTransition = Animations.navHostPopEnterTransition, popEnterTransition = Animations.navHostPopEnterTransition,
popExitTransition = Animations.navHostPopExitTransition, popExitTransition = Animations.navHostPopExitTransition,
modifier = Modifier.background(bgColor).padding(top = it.calculateTopPadding()) modifier = Modifier.padding(top = it.calculateTopPadding())
){ ){
composable(route = "Home"){Home(localNavCtrl,scrollState)} composable(route = "Home"){Home(localNavCtrl,scrollState)}
composable(route = "Switches"){Switches()} composable(route = "Switches"){Switches()}

View File

@@ -36,7 +36,6 @@ import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.R import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.ui.* import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
@Composable @Composable
fun Password(navCtrl: NavHostController){ fun Password(navCtrl: NavHostController){
@@ -78,7 +77,7 @@ fun Password(navCtrl: NavHostController){
exitTransition = Animations.navHostExitTransition, exitTransition = Animations.navHostExitTransition,
popEnterTransition = Animations.navHostPopEnterTransition, popEnterTransition = Animations.navHostPopEnterTransition,
popExitTransition = Animations.navHostPopExitTransition, popExitTransition = Animations.navHostPopExitTransition,
modifier = Modifier.background(bgColor).padding(top = it.calculateTopPadding()) modifier = Modifier.padding(top = it.calculateTopPadding())
){ ){
composable(route = "Home"){Home(localNavCtrl,scrollState)} composable(route = "Home"){Home(localNavCtrl,scrollState)}
composable(route = "PasswordInfo"){PasswordInfo()} composable(route = "PasswordInfo"){PasswordInfo()}

View File

@@ -36,7 +36,6 @@ import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.R import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.ui.* import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -82,7 +81,7 @@ fun DpmPermissions(navCtrl:NavHostController){
exitTransition = Animations.navHostExitTransition, exitTransition = Animations.navHostExitTransition,
popEnterTransition = Animations.navHostPopEnterTransition, popEnterTransition = Animations.navHostPopEnterTransition,
popExitTransition = Animations.navHostPopExitTransition, popExitTransition = Animations.navHostPopExitTransition,
modifier = Modifier.background(bgColor).padding(top = it.calculateTopPadding()) modifier = Modifier.padding(top = it.calculateTopPadding())
){ ){
composable(route = "Home"){Home(localNavCtrl,scrollState)} composable(route = "Home"){Home(localNavCtrl,scrollState)}
composable(route = "Shizuku"){ShizukuActivate()} composable(route = "Shizuku"){ShizukuActivate()}

View File

@@ -44,7 +44,6 @@ import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.* import com.bintianqi.owndroid.*
import com.bintianqi.owndroid.R import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.ui.* import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import java.util.Date import java.util.Date
@@ -91,7 +90,7 @@ fun SystemManage(navCtrl:NavHostController){
exitTransition = Animations.navHostExitTransition, exitTransition = Animations.navHostExitTransition,
popEnterTransition = Animations.navHostPopEnterTransition, popEnterTransition = Animations.navHostPopEnterTransition,
popExitTransition = Animations.navHostPopExitTransition, popExitTransition = Animations.navHostPopExitTransition,
modifier = Modifier.background(bgColor).padding(top = it.calculateTopPadding()) modifier = Modifier.padding(top = it.calculateTopPadding())
){ ){
composable(route = "Home"){Home(localNavCtrl,scrollState)} composable(route = "Home"){Home(localNavCtrl,scrollState)}
composable(route = "Switches"){Switches()} composable(route = "Switches"){Switches()}
@@ -610,6 +609,7 @@ private fun CaCert(){
} }
exist = myDpm.hasCaCertInstalled(myComponent, caCertByteArray) exist = myDpm.hasCaCertInstalled(myComponent, caCertByteArray)
} }
uriPath = fileUri?.path?:""
} }
} }
LaunchedEffect(exist){ while(true){ refresh();delay(500) } } LaunchedEffect(exist){ while(true){ refresh();delay(500) } }

View File

@@ -43,7 +43,6 @@ import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.* import com.bintianqi.owndroid.*
import com.bintianqi.owndroid.R import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.ui.* import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
var affiliationID = mutableSetOf<String>() var affiliationID = mutableSetOf<String>()
@@ -84,7 +83,7 @@ fun UserManage(navCtrl:NavHostController) {
exitTransition = Animations.navHostExitTransition, exitTransition = Animations.navHostExitTransition,
popEnterTransition = Animations.navHostPopEnterTransition, popEnterTransition = Animations.navHostPopEnterTransition,
popExitTransition = Animations.navHostPopExitTransition, popExitTransition = Animations.navHostPopExitTransition,
modifier = Modifier.background(bgColor).padding(top = it.calculateTopPadding()) modifier = Modifier.padding(top = it.calculateTopPadding())
){ ){
composable(route = "Home"){Home(localNavCtrl,scrollState)} composable(route = "Home"){Home(localNavCtrl,scrollState)}
composable(route = "UserInfo"){CurrentUserInfo()} composable(route = "UserInfo"){CurrentUserInfo()}

View File

@@ -11,7 +11,6 @@ import androidx.activity.ComponentActivity
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.foundation.ScrollState import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
@@ -39,7 +38,6 @@ import com.bintianqi.owndroid.ui.Animations
import com.bintianqi.owndroid.ui.SubPageItem import com.bintianqi.owndroid.ui.SubPageItem
import com.bintianqi.owndroid.ui.SwitchItem import com.bintianqi.owndroid.ui.SwitchItem
import com.bintianqi.owndroid.ui.TopBar import com.bintianqi.owndroid.ui.TopBar
import com.bintianqi.owndroid.ui.theme.bgColor
private data class Restriction( private data class Restriction(
val restriction:String, val restriction:String,
@@ -84,7 +82,7 @@ fun UserRestriction(navCtrl: NavHostController){
exitTransition = Animations.navHostExitTransition, exitTransition = Animations.navHostExitTransition,
popEnterTransition = Animations.navHostPopEnterTransition, popEnterTransition = Animations.navHostPopEnterTransition,
popExitTransition = Animations.navHostPopExitTransition, popExitTransition = Animations.navHostPopExitTransition,
modifier = Modifier.background(bgColor).padding(top = it.calculateTopPadding()) modifier = Modifier.padding(top = it.calculateTopPadding())
){ ){
composable(route = "Internet"){Internet()} composable(route = "Internet"){Internet()}
composable(route = "Home"){Home(localNavCtrl,scrollState)} composable(route = "Home"){Home(localNavCtrl,scrollState)}

View File

@@ -5,9 +5,7 @@ import android.widget.Toast
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.animation.animateContentSize import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.LocalIndication
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.* import androidx.compose.material3.*
@@ -25,7 +23,6 @@ import androidx.compose.ui.unit.dp
import androidx.navigation.NavBackStackEntry import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import com.bintianqi.owndroid.R import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.ui.theme.bgColor
import com.bintianqi.owndroid.writeClipBoard import com.bintianqi.owndroid.writeClipBoard
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -173,8 +170,12 @@ fun TopBar(
TopAppBar( TopAppBar(
//Text(text = stringResource(titleMap[backStackEntry?.destination?.route]?:R.string.user_restrict)) //Text(text = stringResource(titleMap[backStackEntry?.destination?.route]?:R.string.user_restrict))
title = title, title = title,
navigationIcon = {NavIcon{if(backStackEntry?.destination?.route=="Home"){navCtrl.navigateUp()}else{localNavCtrl.navigateUp()}}}, navigationIcon = {
colors = TopAppBarDefaults.topAppBarColors(containerColor = bgColor) NavIcon{
if(backStackEntry?.destination?.route=="Home"){ navCtrl.navigateUp() }else{ localNavCtrl.navigateUp() }
}
},
colors = TopAppBarDefaults.topAppBarColors(containerColor = colorScheme.background)
) )
} }

View File

@@ -2,11 +2,9 @@ package com.bintianqi.owndroid.ui.theme
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.os.Build
import android.os.Build.VERSION import android.os.Build.VERSION
import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.material3.MaterialTheme.colorScheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect import androidx.compose.runtime.SideEffect
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@@ -79,41 +77,31 @@ private val LightColorScheme = lightColorScheme(
scrim = md_theme_light_scrim scrim = md_theme_light_scrim
) )
var bgColor = Color(0xFF000000)
@Composable
fun SetDarkTheme(){
val dark = isSystemInDarkTheme()
val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE)
val bg = colorScheme.background
val lightBg = colorScheme.primary.copy(alpha = 0.05F)
bgColor = if(dark){
if(sharedPref.getBoolean("blackTheme",true)){ Color(0xFF000000) }else{ bg }
}else{
lightBg
}
}
@Composable @Composable
fun OwnDroidTheme( fun OwnDroidTheme(
darkTheme: Boolean = isSystemInDarkTheme(), materialYou: Boolean,
blackTheme: Boolean,
content: @Composable () -> Unit content: @Composable () -> Unit
) { ) {
SetDarkTheme() val darkTheme = isSystemInDarkTheme()
val context = LocalContext.current val context = LocalContext.current
val sharedPref = context.getSharedPreferences("data", Context.MODE_PRIVATE) val sharedPref = context.getSharedPreferences("data", Context.MODE_PRIVATE)
if(!sharedPref.contains("dynamicColor")&&VERSION.SDK_INT>=32){ if(!sharedPref.contains("dynamicColor")&&VERSION.SDK_INT>=32){
sharedPref.edit().putBoolean("dynamicColor",true).apply() sharedPref.edit().putBoolean("dynamicColor",true).apply()
} }
val dynamicColor = sharedPref.getBoolean("dynamicColor",false) var colorScheme = when {
val colorScheme = when { materialYou && VERSION.SDK_INT>=31 -> {
dynamicColor && VERSION.SDK_INT >= Build.VERSION_CODES.S -> { if(darkTheme){ dynamicDarkColorScheme(context) }else{ dynamicLightColorScheme(context) }
if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
} }
darkTheme -> DarkColorScheme darkTheme -> DarkColorScheme
else -> LightColorScheme else -> LightColorScheme
} }
if(darkTheme&&blackTheme){
colorScheme = colorScheme.copy(background = Color.Black)
}
if(!darkTheme){
colorScheme = colorScheme.copy(background = colorScheme.primary.copy(alpha = 0.05f))
}
val view = LocalView.current val view = LocalView.current
SideEffect { SideEffect {
val window = (view.context as Activity).window val window = (view.context as Activity).window

View File

@@ -472,15 +472,14 @@
<!--Settings&About--> <!--Settings&About-->
<string name="setting">设置</string> <string name="setting">设置</string>
<string name="dynamic_color">动态取</string> <string name="material_you_color">Material you 颜</string>
<string name="dynamic_color_desc">安卓12+</string> <string name="dynamic_color_desc">安卓12+</string>
<string name="about">关于</string> <string name="about">关于</string>
<string name="about_desc">使用安卓的Device admin、Device owner、Profile owner全方位掌控你的设备</string> <string name="about_desc">使用安卓的Device admin、Device owner、Profile owner全方位掌控你的设备</string>
<string name="user_guide">使用教程</string> <string name="user_guide">使用教程</string>
<string name="source_code">源代码</string> <string name="source_code">源代码</string>
<string name="blackTheme">纯黑夜间主题</string> <string name="amoled_black">纯黑夜间主题</string>
<string name="blackTheme_desc">需要打开夜间模式</string> <string name="blackTheme_desc">需要打开夜间模式</string>
<string name="need_relaunch">需要重启应用</string>
<!--AndroidPermission--> <!--AndroidPermission-->
<string name="permission_READ_EXTERNAL_STORAGE">读取外部存储</string> <string name="permission_READ_EXTERNAL_STORAGE">读取外部存储</string>

View File

@@ -487,15 +487,14 @@
<!--Settings&About--> <!--Settings&About-->
<string name="setting">Settings</string> <string name="setting">Settings</string>
<string name="dynamic_color">Dynamic color</string> <string name="material_you_color">Material you color</string>
<string name="dynamic_color_desc">Android 12+</string> <string name="dynamic_color_desc">Android 12+</string>
<string name="about">About</string> <string name="about">About</string>
<string name="about_desc">Use Device admin, Profile owner and Device owner privilege to take full control of your device. </string> <string name="about_desc">Use Device admin, Profile owner and Device owner privilege to take full control of your device. </string>
<string name="user_guide">User guide</string> <string name="user_guide">User guide</string>
<string name="source_code">Source code</string> <string name="source_code">Source code</string>
<string name="blackTheme">Black theme</string> <string name="amoled_black">Black theme</string>
<string name="blackTheme_desc">Require dark mode on</string> <string name="blackTheme_desc">Require dark mode on</string>
<string name="need_relaunch">Require restart this app</string>
<!--AndroidPermission--> <!--AndroidPermission-->
<string name="permission_READ_EXTERNAL_STORAGE">Read external storage</string> <string name="permission_READ_EXTERNAL_STORAGE">Read external storage</string>