From 8c72d19847ebfd4914b861310a15856fa310df0a Mon Sep 17 00:00:00 2001 From: BinTianqi <1220958406@qq.com> Date: Fri, 19 Jan 2024 09:45:14 +0800 Subject: [PATCH] system bars'color will follow the app --- app/build.gradle.kts | 2 +- app/src/main/AndroidManifest.xml | 1 + .../com/binbin/androidowner/DeviceControl.kt | 2 +- .../com/binbin/androidowner/MainActivity.kt | 34 ++++----- .../androidowner/{Security.kt => Password.kt} | 0 .../com/binbin/androidowner/Permissions.kt | 4 +- .../com/binbin/androidowner/UserRestrict.kt | 12 ++- .../com/binbin/androidowner/ui/theme/Color.kt | 64 ++++++++++++++-- .../com/binbin/androidowner/ui/theme/Theme.kt | 74 ++++++++++++++---- app/src/main/res/values/strings.xml | 75 ++++++++++--------- app/src/main/res/values/themes.xml | 6 +- 11 files changed, 183 insertions(+), 91 deletions(-) rename app/src/main/java/com/binbin/androidowner/{Security.kt => Password.kt} (100%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 70881f1..51c06d9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -59,7 +59,7 @@ dependencies { implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") - implementation("androidx.compose.material3:material3") + implementation("androidx.compose.material3:material3:1.1.1") implementation("androidx.navigation:navigation-compose:2.7.6") implementation("com.google.accompanist:accompanist-systemuicontroller:0.33.2-alpha") testImplementation("junit:junit:4.13.2") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9beacf0..35d5d93 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,6 +18,7 @@ diff --git a/app/src/main/java/com/binbin/androidowner/DeviceControl.kt b/app/src/main/java/com/binbin/androidowner/DeviceControl.kt index 4e5f296..bacd21c 100644 --- a/app/src/main/java/com/binbin/androidowner/DeviceControl.kt +++ b/app/src/main/java/com/binbin/androidowner/DeviceControl.kt @@ -121,7 +121,7 @@ private fun DeviceCtrlItem( Row( modifier = Modifier .fillMaxWidth() - .padding(5.dp) + .padding(horizontal = 6.dp, vertical = 4.dp) .clip(RoundedCornerShape(15)) .background(color = MaterialTheme.colorScheme.primaryContainer) .padding(8.dp), diff --git a/app/src/main/java/com/binbin/androidowner/MainActivity.kt b/app/src/main/java/com/binbin/androidowner/MainActivity.kt index cb5ddeb..1477cc9 100644 --- a/app/src/main/java/com/binbin/androidowner/MainActivity.kt +++ b/app/src/main/java/com/binbin/androidowner/MainActivity.kt @@ -5,7 +5,6 @@ import android.app.admin.DevicePolicyManager import android.content.ComponentName import android.content.Context import android.os.Bundle -import android.view.View import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.background @@ -14,7 +13,6 @@ import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons @@ -49,24 +47,18 @@ import com.google.accompanist.systemuicontroller.rememberSystemUiController class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { WindowCompat.setDecorFitsSystemWindows(window, false) - window.decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) - window.decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE) - //getWindow().setStatusBarColor(Color.White) super.onCreate(savedInstanceState) val context = applicationContext val dpm = context.getSystemService(DEVICE_POLICY_SERVICE) as DevicePolicyManager val adminComponent = ComponentName(context,MyDeviceAdminReceiver::class.java) setContent { val sysUiCtrl = rememberSystemUiController() - val sf = MaterialTheme.colorScheme.surface val useDarkIcon = !isSystemInDarkTheme() - SideEffect { - sysUiCtrl.run { - setNavigationBarColor(sf,useDarkIcon) - setStatusBarColor(Color.White.copy(alpha = 0F),useDarkIcon) - } - } AndroidOwnerTheme { + SideEffect { + sysUiCtrl.setNavigationBarColor(Color.Transparent,useDarkIcon) + sysUiCtrl.setStatusBarColor(Color.Transparent,useDarkIcon) + } MyScaffold(dpm,adminComponent,context) } } @@ -128,7 +120,6 @@ fun MyScaffold(mainDpm:DevicePolicyManager, mainComponent:ComponentName, mainCon startDestination = "HomePage", modifier = Modifier .padding(top = it.calculateTopPadding()) - .navigationBarsPadding() ){ composable(route = "HomePage", content = { HomePage(navCtrl,mainDpm,mainComponent)}) composable(route = "DeviceControl", content = { DeviceControl(mainDpm,mainComponent)}) @@ -144,7 +135,8 @@ fun MyScaffold(mainDpm:DevicePolicyManager, mainComponent:ComponentName, mainCon fun HomePage(navCtrl:NavHostController,myDpm:DevicePolicyManager,myComponent:ComponentName){ val isda = myDpm.isAdminActive(myComponent) val isdo = myDpm.isDeviceOwnerApp("com.binbin.androidowner") - val activated = if(isdo){"Device Owner 已激活"}else if(isda){"Device Admin已激活"}else{"未激活"} + val activateType = if(isdo){"Device Owner"}else if(isda){"Device Admin"}else{""} + val isActivated = if(isdo||isda){"已激活"}else{"未激活"} Column { Row( modifier = Modifier @@ -153,7 +145,7 @@ fun HomePage(navCtrl:NavHostController,myDpm:DevicePolicyManager,myComponent:Com .clip(RoundedCornerShape(15)) .background(color = MaterialTheme.colorScheme.tertiaryContainer) .clickable(onClick = { navCtrl.navigate("Permissions") }) - .padding(horizontal = 5.dp, vertical = 12.dp), + .padding(horizontal = 5.dp, vertical = 14.dp), verticalAlignment = Alignment.CenterVertically ) { Icon( @@ -168,14 +160,16 @@ fun HomePage(navCtrl:NavHostController,myDpm:DevicePolicyManager,myComponent:Com ) Column { Text( - text = stringResource(R.string.permission), + text = isActivated, style = MaterialTheme.typography.headlineSmall, color = MaterialTheme.colorScheme.onTertiaryContainer ) - Text( - text = activated, - color = MaterialTheme.colorScheme.onTertiaryContainer - ) + if(activateType!=""){ + Text( + text = activateType, + color = MaterialTheme.colorScheme.onTertiaryContainer + ) + } } } HomePageItem(R.string.device_ctrl, R.drawable.mobile_phone_fill0, R.string.device_ctrl_desc, "DeviceControl", navCtrl) diff --git a/app/src/main/java/com/binbin/androidowner/Security.kt b/app/src/main/java/com/binbin/androidowner/Password.kt similarity index 100% rename from app/src/main/java/com/binbin/androidowner/Security.kt rename to app/src/main/java/com/binbin/androidowner/Password.kt diff --git a/app/src/main/java/com/binbin/androidowner/Permissions.kt b/app/src/main/java/com/binbin/androidowner/Permissions.kt index 28cd7ac..3800115 100644 --- a/app/src/main/java/com/binbin/androidowner/Permissions.kt +++ b/app/src/main/java/com/binbin/androidowner/Permissions.kt @@ -50,7 +50,7 @@ fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName, myCon modifier = Modifier .fillMaxWidth() .padding(bottom = 10.dp) - .clip(RoundedCornerShape(8)) + .clip(RoundedCornerShape(15)) .background(color = MaterialTheme.colorScheme.primaryContainer) .padding(10.dp), horizontalArrangement = Arrangement.SpaceBetween, @@ -83,7 +83,7 @@ fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName, myCon modifier = Modifier .fillMaxWidth() .padding(bottom = 10.dp) - .clip(RoundedCornerShape(8)) + .clip(RoundedCornerShape(15)) .background(color = MaterialTheme.colorScheme.primaryContainer) .padding(10.dp), horizontalArrangement = Arrangement.SpaceBetween, diff --git a/app/src/main/java/com/binbin/androidowner/UserRestrict.kt b/app/src/main/java/com/binbin/androidowner/UserRestrict.kt index ad3200f..a58c950 100644 --- a/app/src/main/java/com/binbin/androidowner/UserRestrict.kt +++ b/app/src/main/java/com/binbin/androidowner/UserRestrict.kt @@ -18,6 +18,7 @@ import androidx.compose.material.icons.outlined.Info import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Switch +import androidx.compose.material3.SwitchDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -84,8 +85,8 @@ private fun UserRestrictionItem(restriction:String, itemName:Int, restrictionDes Row( modifier = Modifier .fillMaxWidth() - .padding(vertical = 5.dp, horizontal = 8.dp) - .clip(RoundedCornerShape(10)) + .padding(vertical = 4.dp, horizontal = 8.dp) + .clip(RoundedCornerShape(20)) .background(color = MaterialTheme.colorScheme.secondaryContainer) .padding(5.dp), verticalAlignment = Alignment.CenterVertically, @@ -98,7 +99,7 @@ private fun UserRestrictionItem(restriction:String, itemName:Int, restrictionDes painter = painterResource(leadIcon), contentDescription = null, modifier = Modifier.padding(horizontal = 8.dp), - tint = MaterialTheme.colorScheme.onPrimaryContainer + tint = MaterialTheme.colorScheme.secondary ) Column( modifier = Modifier.align(Alignment.CenterVertically) @@ -107,7 +108,7 @@ private fun UserRestrictionItem(restriction:String, itemName:Int, restrictionDes text = stringResource(itemName), style = MaterialTheme.typography.titleLarge ) - if(restrictionDescription!=""){Text(restrictionDescription)} + if(restrictionDescription!=""){Text(text = restrictionDescription, color = MaterialTheme.colorScheme.onSecondaryContainer)} } } if(isdo&&VERSION.SDK_INT>=24){ @@ -124,12 +125,9 @@ private fun UserRestrictionItem(restriction:String, itemName:Int, restrictionDes myDpm.clearUserRestriction(myComponent,restriction) } strictState = myDpm.getUserRestrictions(myComponent).getBoolean(restriction) - }, enabled = isdo ) - }else{ - } } } diff --git a/app/src/main/java/com/binbin/androidowner/ui/theme/Color.kt b/app/src/main/java/com/binbin/androidowner/ui/theme/Color.kt index e27e96b..eab553d 100644 --- a/app/src/main/java/com/binbin/androidowner/ui/theme/Color.kt +++ b/app/src/main/java/com/binbin/androidowner/ui/theme/Color.kt @@ -2,10 +2,62 @@ package com.binbin.androidowner.ui.theme import androidx.compose.ui.graphics.Color -val Purple80 = Color(0xFFD0BCFF) -val PurpleGrey80 = Color(0xFFCCC2DC) -val Pink80 = Color(0xFFEFB8C8) +val md_theme_light_primary = Color(0xFF006A65) +val md_theme_light_onPrimary = Color(0xFFFFFFFF) +val md_theme_light_primaryContainer = Color(0xFF70F7EE) +val md_theme_light_onPrimaryContainer = Color(0xFF00201E) +val md_theme_light_secondary = Color(0xFF4A6361) +val md_theme_light_onSecondary = Color(0xFFFFFFFF) +val md_theme_light_secondaryContainer = Color(0xFFCCE8E5) +val md_theme_light_onSecondaryContainer = Color(0xFF051F1E) +val md_theme_light_tertiary = Color(0xFF48607B) +val md_theme_light_onTertiary = Color(0xFFFFFFFF) +val md_theme_light_tertiaryContainer = Color(0xFFD0E4FF) +val md_theme_light_onTertiaryContainer = Color(0xFF001D34) +val md_theme_light_error = Color(0xFFBA1A1A) +val md_theme_light_errorContainer = Color(0xFFFFDAD6) +val md_theme_light_onError = Color(0xFFFFFFFF) +val md_theme_light_onErrorContainer = Color(0xFF410002) +val md_theme_light_background = Color(0xFFFAFDFB) +val md_theme_light_onBackground = Color(0xFF191C1C) +val md_theme_light_surface = Color(0xFFFAFDFB) +val md_theme_light_onSurface = Color(0xFF191C1C) +val md_theme_light_surfaceVariant = Color(0xFFDAE5E3) +val md_theme_light_onSurfaceVariant = Color(0xFF3F4947) +val md_theme_light_outline = Color(0xFF6F7978) +val md_theme_light_inverseOnSurface = Color(0xFFEFF1F0) +val md_theme_light_inverseSurface = Color(0xFF2D3130) +val md_theme_light_inversePrimary = Color(0xFF4FDAD1) +val md_theme_light_surfaceTint = Color(0xFF006A65) +val md_theme_light_outlineVariant = Color(0xFFBEC9C7) +val md_theme_light_scrim = Color(0xFF000000) -val Purple40 = Color(0xFF6650a4) -val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) \ No newline at end of file +val md_theme_dark_primary = Color(0xFF4FDAD1) +val md_theme_dark_onPrimary = Color(0xFF003734) +val md_theme_dark_primaryContainer = Color(0xFF00504C) +val md_theme_dark_onPrimaryContainer = Color(0xFF70F7EE) +val md_theme_dark_secondary = Color(0xFFB0CCC9) +val md_theme_dark_onSecondary = Color(0xFF1C3533) +val md_theme_dark_secondaryContainer = Color(0xFF324B49) +val md_theme_dark_onSecondaryContainer = Color(0xFFCCE8E5) +val md_theme_dark_tertiary = Color(0xFFB0C9E7) +val md_theme_dark_onTertiary = Color(0xFF18324A) +val md_theme_dark_tertiaryContainer = Color(0xFF304962) +val md_theme_dark_onTertiaryContainer = Color(0xFFD0E4FF) +val md_theme_dark_error = Color(0xFFFFB4AB) +val md_theme_dark_errorContainer = Color(0xFF93000A) +val md_theme_dark_onError = Color(0xFF690005) +val md_theme_dark_onErrorContainer = Color(0xFFFFDAD6) +val md_theme_dark_background = Color(0xFF191C1C) +val md_theme_dark_onBackground = Color(0xFFE0E3E2) +val md_theme_dark_surface = Color(0xFF191C1C) +val md_theme_dark_onSurface = Color(0xFFE0E3E2) +val md_theme_dark_surfaceVariant = Color(0xFF3F4947) +val md_theme_dark_onSurfaceVariant = Color(0xFFBEC9C7) +val md_theme_dark_outline = Color(0xFF889391) +val md_theme_dark_inverseOnSurface = Color(0xFF191C1C) +val md_theme_dark_inverseSurface = Color(0xFFE0E3E2) +val md_theme_dark_inversePrimary = Color(0xFF006A65) +val md_theme_dark_surfaceTint = Color(0xFF4FDAD1) +val md_theme_dark_outlineVariant = Color(0xFF3F4947) +val md_theme_dark_scrim = Color(0xFF000000) diff --git a/app/src/main/java/com/binbin/androidowner/ui/theme/Theme.kt b/app/src/main/java/com/binbin/androidowner/ui/theme/Theme.kt index ed545b8..5d610fa 100644 --- a/app/src/main/java/com/binbin/androidowner/ui/theme/Theme.kt +++ b/app/src/main/java/com/binbin/androidowner/ui/theme/Theme.kt @@ -16,25 +16,67 @@ import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat private val DarkColorScheme = darkColorScheme( - primary = Purple80, - secondary = PurpleGrey80, - tertiary = Pink80 + primary = md_theme_dark_primary, + onPrimary = md_theme_dark_onPrimary, + primaryContainer = md_theme_dark_primaryContainer, + onPrimaryContainer = md_theme_dark_onPrimaryContainer, + secondary = md_theme_dark_secondary, + onSecondary = md_theme_dark_onSecondary, + secondaryContainer = md_theme_dark_secondaryContainer, + onSecondaryContainer = md_theme_dark_onSecondaryContainer, + tertiary = md_theme_dark_tertiary, + onTertiary = md_theme_dark_onTertiary, + tertiaryContainer = md_theme_dark_tertiaryContainer, + onTertiaryContainer = md_theme_dark_onTertiaryContainer, + error = md_theme_dark_error, + errorContainer = md_theme_dark_errorContainer, + onError = md_theme_dark_onError, + onErrorContainer = md_theme_dark_onErrorContainer, + background = md_theme_dark_background, + onBackground = md_theme_dark_onBackground, + surface = md_theme_dark_surface, + onSurface = md_theme_dark_onSurface, + surfaceVariant = md_theme_dark_surfaceVariant, + onSurfaceVariant = md_theme_dark_onSurfaceVariant, + outline = md_theme_dark_outline, + inverseOnSurface = md_theme_dark_inverseOnSurface, + inverseSurface = md_theme_dark_inverseSurface, + inversePrimary = md_theme_dark_inversePrimary, + surfaceTint = md_theme_dark_surfaceTint, + outlineVariant = md_theme_dark_outlineVariant, + scrim = md_theme_dark_scrim ) private val LightColorScheme = lightColorScheme( - primary = Purple40, - secondary = PurpleGrey40, - tertiary = Pink40 - - /* Other default colors to override - background = Color(0xFFFFFBFE), - surface = Color(0xFFFFFBFE), - onPrimary = Color.White, - onSecondary = Color.White, - onTertiary = Color.White, - onBackground = Color(0xFF1C1B1F), - onSurface = Color(0xFF1C1B1F), - */ + primary = md_theme_light_primary, + onPrimary = md_theme_light_onPrimary, + primaryContainer = md_theme_light_primaryContainer, + onPrimaryContainer = md_theme_light_onPrimaryContainer, + secondary = md_theme_light_secondary, + onSecondary = md_theme_light_onSecondary, + secondaryContainer = md_theme_light_secondaryContainer, + onSecondaryContainer = md_theme_light_onSecondaryContainer, + tertiary = md_theme_light_tertiary, + onTertiary = md_theme_light_onTertiary, + tertiaryContainer = md_theme_light_tertiaryContainer, + onTertiaryContainer = md_theme_light_onTertiaryContainer, + error = md_theme_light_error, + errorContainer = md_theme_light_errorContainer, + onError = md_theme_light_onError, + onErrorContainer = md_theme_light_onErrorContainer, + background = md_theme_light_background, + onBackground = md_theme_light_onBackground, + surface = md_theme_light_surface, + onSurface = md_theme_light_onSurface, + surfaceVariant = md_theme_light_surfaceVariant, + onSurfaceVariant = md_theme_light_onSurfaceVariant, + outline = md_theme_light_outline, + inverseOnSurface = md_theme_light_inverseOnSurface, + inverseSurface = md_theme_light_inverseSurface, + inversePrimary = md_theme_light_inversePrimary, + surfaceTint = md_theme_light_surfaceTint, + outlineVariant = md_theme_light_outlineVariant, + scrim = md_theme_light_scrim ) @Composable diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a9ee006..b492c09 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,55 +1,59 @@ Android Owner - 蓝牙 - 飞行模式 - 配置Wi-Fi - 调试功能 - 配置位置信息 - 配置移动数据 - 创建窗口 - 允许 - 禁止 - 是否禁止: - 调整音量 - 调整亮度 - 安装应用 - 短信 - 控制应用 - 包括清空存储空间、清空缓存 - 包括Toast和浮动通知 - 权限 + 设备控制 - UI控制 - 应用管理 - 用户限制 - - 授权与取消授权DeviceAdmin或DeviceOwner - 控制一些软件、硬件 - 目前没啥功能 - 非DeviceOwner勿入 - 限制一些功能 - 自动填充服务 - 切换相机 - 蓝牙分享 禁用相机 禁止截屏 - 全局静音 对AOSP的录屏也起作用 隐藏状态栏 也许只能隐藏状态栏上的通知图标 自动设置时间 自动设置时区 + 全局静音 备份服务 - 隐藏 + + 应用管理 停用 - 防卸载 + 隐藏 如果隐藏,有可能是没安装 - 有时候不能用 禁止用户控制 阻止清除应用数据和缓存 - 密码 + 允许 + 禁止 + 是否禁止: + 包括清空存储空间、清空缓存 + 包括Toast和浮动通知 + 权限 + UI控制 + + 授权与取消授权DeviceAdmin或DeviceOwner + 控制一些软件、硬件 + 非DeviceOwner勿入 + 限制一些功能 + 防卸载 + 有时候不能用 + + 用户限制 + 配置移动数据 + 配置Wi-Fi + 蓝牙 + 蓝牙分享 + 飞行模式 + 配置位置信息 + 调整亮度 + 调试功能 + 创建窗口 + 调整音量 + 安装应用 + 切换相机 + 短信 + 控制应用 + 自动填充服务 安装未知来源应用 + + 密码 锁屏密码相关操作 + 留空可以清除密码,纯数字将使用PIN码 最大密码错误次数 达到该限制会恢复出厂设置 错误次数 @@ -59,5 +63,4 @@ 密码历史记录长度 用户输入的密码不能与历史记录中的任何密码相同,0为无限制 历史记录长度 - 留空可以清除密码,纯数字将使用PIN码 \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 27e05a6..daf5c27 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,5 +1,7 @@ - - \ No newline at end of file