add animations to UserRestriction page

This commit is contained in:
BinTianqi
2024-02-07 21:33:26 +08:00
parent 3d74867fee
commit 62a4376851
8 changed files with 143 additions and 179 deletions

View File

@@ -330,8 +330,9 @@ fun ApplicationManage(){
if(count>0) { listText += "\n" } if(count>0) { listText += "\n" }
} }
} }
refreshList() var inited by remember{mutableStateOf(false)}
Text(text = listText, style = bodyTextStyle) if(!inited){refreshList(); inited=true}
Text(text = if(listText!=""){listText}else{""}, style = bodyTextStyle)
Row(modifier = Modifier.fillMaxWidth(),horizontalArrangement = Arrangement.SpaceBetween){ Row(modifier = Modifier.fillMaxWidth(),horizontalArrangement = Arrangement.SpaceBetween){
Button( Button(
onClick = { onClick = {
@@ -372,8 +373,9 @@ fun ApplicationManage(){
imeListText = "" imeListText = ""
for(eachIme in imeList){ imeListText += "$eachIme \n" } for(eachIme in imeList){ imeListText += "$eachIme \n" }
} }
refreshList() var inited by remember{mutableStateOf(false)}
Text(text = imeListText, style = bodyTextStyle) if(!inited){refreshList();inited=true}
Text(text = if(imeListText!=""){imeListText}else{""}, style = bodyTextStyle)
Row(modifier = Modifier.fillMaxWidth(),horizontalArrangement = Arrangement.SpaceBetween){ Row(modifier = Modifier.fillMaxWidth(),horizontalArrangement = Arrangement.SpaceBetween){
Button( Button(
onClick = { onClick = {

View File

@@ -121,29 +121,50 @@ fun DeviceControl(){
Button( Button(
onClick = { Toast.makeText(myContext, if(myDpm.setKeyguardDisabled(myComponent,true)){"成功"}else{"失败"}, Toast.LENGTH_SHORT).show() }, onClick = { Toast.makeText(myContext, if(myDpm.setKeyguardDisabled(myComponent,true)){"成功"}else{"失败"}, Toast.LENGTH_SHORT).show() },
enabled = isDeviceOwner(myDpm)|| (isProfileOwner(myDpm)&&myDpm.isAffiliatedUser), enabled = isDeviceOwner(myDpm)|| (isProfileOwner(myDpm)&&myDpm.isAffiliatedUser),
modifier = if(isWear){Modifier}else{Modifier.fillMaxWidth(0.48F)} modifier = if(isWear){Modifier}else{Modifier.fillMaxWidth(0.49F)}
) { ) {
Text("禁用") Text("禁用")
} }
Button( Button(
onClick = { Toast.makeText(myContext, if(myDpm.setKeyguardDisabled(myComponent,false)){"成功"}else{"失败"}, Toast.LENGTH_SHORT).show() }, onClick = { Toast.makeText(myContext, if(myDpm.setKeyguardDisabled(myComponent,false)){"成功"}else{"失败"}, Toast.LENGTH_SHORT).show() },
enabled = isDeviceOwner(myDpm)|| (isProfileOwner(myDpm)&&myDpm.isAffiliatedUser), enabled = isDeviceOwner(myDpm)|| (isProfileOwner(myDpm)&&myDpm.isAffiliatedUser),
modifier = if(isWear){Modifier}else{Modifier.fillMaxWidth(0.92F)} modifier = if(isWear){Modifier}else{Modifier.fillMaxWidth(0.96F)}
) { ) {
Text("启用") Text("启用")
} }
}} }}
} }
Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = sections()) { Column(modifier = sections()){
if(VERSION.SDK_INT>=24){ Text(text = "锁屏", style = typography.titleLarge)
Button(onClick = {myDpm.reboot(myComponent)}, enabled = isDeviceOwner(myDpm), var flag by remember{mutableIntStateOf(0)}
modifier = if(isWear){Modifier}else{Modifier.fillMaxWidth(0.48F)}) { if(VERSION.SDK_INT>=26){ CheckBoxItem("需要重新输入密码",{flag==FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY},{flag = if(flag==0){1}else{0} }) }
Text("重启") Button(
onClick = {myDpm.lockNow()},
enabled = myDpm.isAdminActive(myComponent),
modifier = Modifier.fillMaxWidth()
) {
Text("立即锁屏")
}
}
if(VERSION.SDK_INT>=24){
Column(modifier = sections()){
Button(
onClick = {
val result = myDpm.requestBugreport(myComponent)
Toast.makeText(myContext, if(result){"成功"}else{"失败"}, Toast.LENGTH_SHORT).show()
},
modifier = Modifier.fillMaxWidth()
) {
Text("请求错误报告")
} }
Button(onClick = {myDpm.lockNow()}, enabled = myDpm.isAdminActive(myComponent), Button(
modifier = if(isWear){Modifier}else{Modifier.fillMaxWidth(0.92F)}) { onClick = {myDpm.reboot(myComponent)},
Text("锁屏") enabled = isDeviceOwner(myDpm),
modifier = Modifier.fillMaxWidth()
) {
Text("重启")
} }
} }
} }

View File

@@ -7,6 +7,7 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build.VERSION import android.os.Build.VERSION
import android.os.Bundle import android.os.Bundle
import android.os.UserManager
import android.widget.Toast import android.widget.Toast
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
@@ -43,6 +44,7 @@ import java.io.FileNotFoundException
import java.io.IOException import java.io.IOException
lateinit var getCaCert: ActivityResultLauncher<Intent> lateinit var getCaCert: ActivityResultLauncher<Intent>
lateinit var createUser:ActivityResultLauncher<Intent>
var caCert = byteArrayOf() var caCert = byteArrayOf()
@ExperimentalMaterial3Api @ExperimentalMaterial3Api
@@ -65,6 +67,13 @@ class MainActivity : ComponentActivity() {
catch(e:IOException){ Toast.makeText(applicationContext, "IO异常", Toast.LENGTH_SHORT).show() } catch(e:IOException){ Toast.makeText(applicationContext, "IO异常", Toast.LENGTH_SHORT).show() }
}else{ Toast.makeText(applicationContext, "空URI", Toast.LENGTH_SHORT).show() } }else{ Toast.makeText(applicationContext, "空URI", Toast.LENGTH_SHORT).show() }
} }
createUser = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
when(it.resultCode){
UserManager.USER_CREATION_FAILED_NO_MORE_USERS->Toast.makeText(applicationContext, "用户太多了", Toast.LENGTH_SHORT).show();
UserManager.USER_CREATION_FAILED_NOT_PERMITTED->Toast.makeText(applicationContext, "不是管理员用户", Toast.LENGTH_SHORT).show();
else->Toast.makeText(applicationContext, "成功", Toast.LENGTH_SHORT).show()
}
}
setContent { setContent {
AndroidOwnerTheme { AndroidOwnerTheme {
MyScaffold() MyScaffold()

View File

@@ -10,7 +10,6 @@ import android.net.wifi.WifiSsid
import android.os.Build.VERSION import android.os.Build.VERSION
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import android.telephony.TelephonyManager.UNKNOWN_CARRIER_ID import android.telephony.TelephonyManager.UNKNOWN_CARRIER_ID
import android.telephony.data.ApnSetting
import android.telephony.data.ApnSetting.* import android.telephony.data.ApnSetting.*
import android.widget.Toast import android.widget.Toast
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
@@ -316,7 +315,7 @@ fun Network(){
var persistent by remember{mutableStateOf(false)} var persistent by remember{mutableStateOf(false)}
var protocol by remember{mutableIntStateOf(-1)} var protocol by remember{mutableIntStateOf(-1)}
var roamingProtocol by remember{mutableIntStateOf(-1)} var roamingProtocol by remember{mutableIntStateOf(-1)}
var id by remember{mutableStateOf(0)} var id by remember{mutableIntStateOf(0)}
if(inputNum!="0"){ if(inputNum!="0"){
val current = setting[inputNum.toInt()-1] val current = setting[inputNum.toInt()-1]

View File

@@ -269,36 +269,23 @@ fun DpmPermissions(navCtrl:NavHostController){
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
keyboardActions = KeyboardActions(onDone = {focusManager.clearFocus()}) keyboardActions = KeyboardActions(onDone = {focusManager.clearFocus()})
) )
if(isWear){ Row(modifier = Modifier.fillMaxWidth(),horizontalArrangement = Arrangement.SpaceBetween){
Button(onClick={focusManager.clearFocus() Button(onClick={focusManager.clearFocus()
myDpm.setAccountManagementDisabled(myComponent,inputText,true) myDpm.setAccountManagementDisabled(myComponent,inputText,true)
noManageAccount=myDpm.accountTypesWithManagementDisabled noManageAccount=myDpm.accountTypesWithManagementDisabled
refreshList() refreshList()
},modifier = Modifier.fillMaxWidth()){ },modifier = Modifier.fillMaxWidth(0.49f)){
Text("添加至列表") Text("列表")
} }
Button(onClick={focusManager.clearFocus() Button(
myDpm.setAccountManagementDisabled(myComponent,inputText,false) onClick={focusManager.clearFocus()
noManageAccount=myDpm.accountTypesWithManagementDisabled
refreshList()
},modifier = Modifier.fillMaxWidth()){
Text("从列表中移除")
}}else{
Row(modifier = Modifier.fillMaxWidth(),horizontalArrangement = Arrangement.SpaceBetween){
Button(onClick={focusManager.clearFocus()
myDpm.setAccountManagementDisabled(myComponent,inputText,true)
noManageAccount=myDpm.accountTypesWithManagementDisabled
refreshList()
},modifier = Modifier.fillMaxWidth(0.48f)){
Text("添加至列表")
}
Button(onClick={focusManager.clearFocus()
myDpm.setAccountManagementDisabled(myComponent,inputText,false) myDpm.setAccountManagementDisabled(myComponent,inputText,false)
noManageAccount=myDpm.accountTypesWithManagementDisabled noManageAccount=myDpm.accountTypesWithManagementDisabled
refreshList() refreshList()
},modifier = Modifier.fillMaxWidth(0.92F)){ },
Text("从列表中移除") modifier = Modifier.fillMaxWidth(0.96F)
} ){
Text("从列表中移除")
} }
} }
} }

View File

@@ -1,12 +1,10 @@
package com.binbin.androidowner package com.binbin.androidowner
import android.app.admin.DevicePolicyManager import android.app.admin.DevicePolicyManager
import android.app.admin.DevicePolicyManager.InstallSystemUpdateCallback
import android.app.admin.SystemUpdateInfo import android.app.admin.SystemUpdateInfo
import android.app.admin.SystemUpdatePolicy import android.app.admin.SystemUpdatePolicy
import android.content.ComponentName import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.Intent
import android.os.Build.VERSION import android.os.Build.VERSION
import android.widget.Toast import android.widget.Toast
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
@@ -26,7 +24,6 @@ import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import java.util.Date import java.util.Date
import java.util.concurrent.Executors
@Composable @Composable
fun SysUpdatePolicy(){ fun SysUpdatePolicy(){

View File

@@ -10,13 +10,7 @@ import android.os.UserManager
import android.widget.Toast import android.widget.Toast
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Arrangement
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.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
@@ -28,12 +22,7 @@ import androidx.compose.material3.MaterialTheme.colorScheme
import androidx.compose.material3.MaterialTheme.typography import androidx.compose.material3.MaterialTheme.typography
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextField import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable import androidx.compose.runtime.*
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
@@ -144,7 +133,7 @@ fun UserManage(navCtrl:NavHostController){
} }
}, },
enabled = isDeviceOwner(myDpm)&&VERSION.SDK_INT>=28, enabled = isDeviceOwner(myDpm)&&VERSION.SDK_INT>=28,
modifier = Modifier.fillMaxWidth(0.48F) modifier = Modifier.fillMaxWidth(0.49F)
){ ){
Text(if(isWear){"启动"}else{"在后台启动"}) Text(if(isWear){"启动"}else{"在后台启动"})
} }
@@ -159,7 +148,7 @@ fun UserManage(navCtrl:NavHostController){
} }
}, },
enabled = isDeviceOwner(myDpm), enabled = isDeviceOwner(myDpm),
modifier = Modifier.fillMaxWidth(0.92F) modifier = Modifier.fillMaxWidth(0.96F)
) { ) {
Text("切换") Text("切换")
} }
@@ -178,7 +167,7 @@ fun UserManage(navCtrl:NavHostController){
} }
}, },
enabled = isDeviceOwner(myDpm)&&VERSION.SDK_INT>=28, enabled = isDeviceOwner(myDpm)&&VERSION.SDK_INT>=28,
modifier = Modifier.fillMaxWidth(0.48F) modifier = Modifier.fillMaxWidth(0.49F)
) { ) {
Text("停止") Text("停止")
} }
@@ -193,7 +182,7 @@ fun UserManage(navCtrl:NavHostController){
} }
}, },
enabled = isDeviceOwner(myDpm), enabled = isDeviceOwner(myDpm),
modifier = Modifier.fillMaxWidth(0.92F) modifier = Modifier.fillMaxWidth(0.96F)
) { ) {
Text("移除") Text("移除")
} }
@@ -205,13 +194,10 @@ fun UserManage(navCtrl:NavHostController){
Column(modifier = sections()) { Column(modifier = sections()) {
Text(text = "工作资料", style = typography.titleLarge) Text(text = "工作资料", style = typography.titleLarge)
Row( Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween){
modifier = if(isWear){ Modifier.fillMaxWidth().horizontalScroll(rememberScrollState())}else{Modifier.fillMaxWidth()},
horizontalArrangement = Arrangement.SpaceBetween
){
Button( Button(
onClick = { createWorkProfile(myContext)}, onClick = { createWorkProfile(myContext)},
modifier = Modifier.fillMaxWidth(0.48F) modifier = Modifier.fillMaxWidth(0.49F)
) { ) {
Text("创建") Text("创建")
} }
@@ -224,7 +210,7 @@ fun UserManage(navCtrl:NavHostController){
} }
}, },
enabled = isProfileOwner(myDpm)||isDeviceOwner(myDpm), enabled = isProfileOwner(myDpm)||isDeviceOwner(myDpm),
modifier = Modifier.fillMaxWidth(0.95F) modifier = Modifier.fillMaxWidth(0.96F)
) { ) {
Text(text = "启用") Text(text = "启用")
} }
@@ -253,49 +239,29 @@ fun UserManage(navCtrl:NavHostController){
RadioButtonItem("启用所有系统应用",{selectedFlag==DevicePolicyManager.LEAVE_ALL_SYSTEM_APPS_ENABLED},{selectedFlag=DevicePolicyManager.LEAVE_ALL_SYSTEM_APPS_ENABLED}) RadioButtonItem("启用所有系统应用",{selectedFlag==DevicePolicyManager.LEAVE_ALL_SYSTEM_APPS_ENABLED},{selectedFlag=DevicePolicyManager.LEAVE_ALL_SYSTEM_APPS_ENABLED})
} }
var newUserHandle: UserHandle? by remember{ mutableStateOf(null) } var newUserHandle: UserHandle? by remember{ mutableStateOf(null) }
Row( Button(
modifier = if(isWear){ if(newUserHandle==null){Modifier.fillMaxWidth()}else{ onClick = {
Modifier newUserHandle=myDpm.createAndManageUser(myComponent,userName,myComponent,null,selectedFlag)
.fillMaxWidth() focusMgr.clearFocus()
.horizontalScroll(rememberScrollState())} }else{Modifier.fillMaxWidth()}, Toast.makeText(myContext, if(newUserHandle!=null){"成功"}else{"失败"}, Toast.LENGTH_SHORT).show()
horizontalArrangement = Arrangement.SpaceBetween },
enabled = isDeviceOwner(myDpm),
modifier = Modifier.fillMaxWidth()
) { ) {
Button( Text("创建(Owner)")
onClick = {
newUserHandle=myDpm.createAndManageUser(myComponent,userName,myComponent,null,selectedFlag)
focusMgr.clearFocus()
Toast.makeText(myContext, if(newUserHandle!=null){"成功"}else{"失败"}, Toast.LENGTH_SHORT).show()
},
enabled = isDeviceOwner(myDpm),
modifier = if(isWear){
if(newUserHandle==null){Modifier.fillMaxWidth()}else{Modifier}
}else{
if(newUserHandle==null){Modifier.fillMaxWidth()}else{Modifier.fillMaxWidth(0.4F)}
}
) {
Text("创建")
}
if(newUserHandle!=null){
Spacer(Modifier.padding(horizontal = 4.dp))
Button(
onClick = {
if(myDpm.switchUser(myComponent,newUserHandle)){
Toast.makeText(myContext, "成功", Toast.LENGTH_SHORT).show()
navCtrl.navigate("HomePage")
} else{
Toast.makeText(myContext, "失败", Toast.LENGTH_SHORT).show()
}
},
modifier = if(isWear){Modifier}else{Modifier.fillMaxWidth(0.97F)}
) {
Text("切换至新用户")
}
}
} }
Button(
onClick = {
val intent = UserManager.createUserCreationIntent(userName,null,null,null)
createUser.launch(intent)
},
modifier = Modifier.fillMaxWidth()
) {
Text("创建(Intent)")
}
Text(text = "尽量用Device owner模式创建Intent模式可能没有效果", style = bodyTextStyle)
if(newUserHandle!=null){ Text(text = "新用户的序列号:${userManager.getSerialNumberForUser(newUserHandle)}", style = bodyTextStyle) } if(newUserHandle!=null){ Text(text = "新用户的序列号:${userManager.getSerialNumberForUser(newUserHandle)}", style = bodyTextStyle) }
} }
}else{
Text(text = "创建用户需安卓7", style = bodyTextStyle)
} }
UserSessionMessage("用户名","用户名",true,myDpm,myContext,{null},{msg -> myDpm.setProfileName(myComponent, msg.toString())}) UserSessionMessage("用户名","用户名",true,myDpm,myContext,{null},{msg -> myDpm.setProfileName(myComponent, msg.toString())})
if(VERSION.SDK_INT>=28){ if(VERSION.SDK_INT>=28){

View File

@@ -9,12 +9,13 @@ import android.widget.Toast
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.background 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.rememberScrollState
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme.colorScheme import androidx.compose.material3.MaterialTheme.colorScheme
import androidx.compose.material3.MaterialTheme.typography import androidx.compose.material3.MaterialTheme.typography
@@ -38,7 +39,6 @@ private data class Restriction(
@DrawableRes val ico:Int @DrawableRes val ico:Int
) )
@Composable @Composable
fun UserRestriction(){ fun UserRestriction(){
val myContext = LocalContext.current val myContext = LocalContext.current
@@ -52,75 +52,66 @@ fun UserRestriction(){
val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE) val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE)
val isWear = sharedPref.getBoolean("isWear",false) val isWear = sharedPref.getBoolean("isWear",false)
val bodyTextStyle = if(isWear){typography.bodyMedium}else{typography.bodyLarge} val bodyTextStyle = if(isWear){typography.bodyMedium}else{typography.bodyLarge}
LazyColumn(horizontalAlignment = Alignment.CenterHorizontally){ Column(modifier = Modifier.verticalScroll(rememberScrollState()), horizontalAlignment = Alignment.CenterHorizontally){
items(1){ Text(text = "打开开关后会禁用对应的功能",modifier = Modifier.padding(3.dp), style = bodyTextStyle)
Text(text = "打开开关后会禁用对应的功能",modifier = Modifier.padding(3.dp), style = bodyTextStyle) if(VERSION.SDK_INT<24){
if(VERSION.SDK_INT<24){ Text(text = "所有的用户限制都需要API24你的设备低于API24无法使用。", style = bodyTextStyle, color = colorScheme.error)
Text(text = "所有的用户限制都需要API24你的设备低于API24无法使用。", style = bodyTextStyle, color = colorScheme.error) }
} if(isProfileOwner(myDpm)){
if(isProfileOwner(myDpm)){ Text(text = "Profile owner无法使用部分功能", style = bodyTextStyle)
Text(text = "Profile owner无法使用部分功能", style = bodyTextStyle) }
} if(isWear){
if(isWear){ Text(text = "部分功能在手表上无效", style = typography.bodyMedium)
Text(text = "部分功能在手表上无效", style = typography.bodyMedium) }
SectionTab("网络和互联网",{internetVisible}, { internetVisible=!internetVisible})
AnimatedVisibility(internetVisible) {
Column {
for(internetItem in RestrictionData().internet()){
UserRestrictionItem(internetItem.restriction,internetItem.name,internetItem.desc,internetItem.ico)
}
} }
} }
SectionTab("更多连接",{connectivityVisible}) { connectivityVisible=!connectivityVisible }
items(1){ SectionTab("网络和互联网",{internetVisible}, { internetVisible=!internetVisible}) } AnimatedVisibility(connectivityVisible) {
items(RestrictionData().internet()){data-> Column {
if(internetVisible){ for(connectivityItem in RestrictionData().connectivity()){
UserRestrictionItem(data.restriction,data.name,data.desc,data.ico) UserRestrictionItem(connectivityItem.restriction,connectivityItem.name,connectivityItem.desc,connectivityItem.ico)
}
} }
} }
SectionTab("应用",{applicationVisible}) { applicationVisible=!applicationVisible }
items(1){ SectionTab("更多连接",{connectivityVisible}) { connectivityVisible=!connectivityVisible } } AnimatedVisibility(applicationVisible) {
items(RestrictionData().connectivity()){data-> Column {
if(connectivityVisible){ for(applicationItem in RestrictionData().application()){
UserRestrictionItem(data.restriction,data.name,data.desc,data.ico) UserRestrictionItem(applicationItem.restriction,applicationItem.name,applicationItem.desc,applicationItem.ico)
}
} }
} }
SectionTab("用户",{userVisible}) { userVisible=!userVisible }
items(1){ SectionTab("应用",{applicationVisible}) { applicationVisible=!applicationVisible } } AnimatedVisibility(userVisible) {
items(RestrictionData().application()){data-> Column {
if(applicationVisible){ for(userItem in RestrictionData().user()){
UserRestrictionItem(data.restriction,data.name,data.desc,data.ico) UserRestrictionItem(userItem.restriction,userItem.name,userItem.desc,userItem.ico)
}
} }
} }
SectionTab("媒体",{mediaVisible}) { mediaVisible=!mediaVisible }
items(1){ SectionTab("用户",{userVisible}) { userVisible=!userVisible } } AnimatedVisibility(mediaVisible) {
items(RestrictionData().user()){data-> Column {
if(userVisible){ for(mediaItem in RestrictionData().media()){
UserRestrictionItem(data.restriction,data.name,data.desc,data.ico) UserRestrictionItem(mediaItem.restriction,mediaItem.name,mediaItem.desc,mediaItem.ico)
}
} }
} }
SectionTab("其他",{otherVisible}) { otherVisible=!otherVisible }
items(1){ SectionTab("媒体",{mediaVisible}) { mediaVisible=!mediaVisible } } AnimatedVisibility(otherVisible) {
items(RestrictionData().media()){data-> Column {
if(mediaVisible){ for(otherItem in RestrictionData().other()){
UserRestrictionItem(data.restriction,data.name,data.desc,data.ico) UserRestrictionItem(otherItem.restriction,otherItem.name,otherItem.desc,otherItem.ico)
}
} }
} }
Spacer(Modifier.padding(vertical = 30.dp))
items(1){ SectionTab("其他",{otherVisible}) { otherVisible=!otherVisible } }
items(RestrictionData().other()){data->
if(otherVisible){
UserRestrictionItem(data.restriction,data.name,data.desc,data.ico)
}
}
items(1){
Spacer(Modifier.padding(vertical = 5.dp))
Column(modifier = Modifier.padding(horizontal = if(!isWear){10.dp}else{3.dp})) {
if(VERSION.SDK_INT<24){ Text(text = "以下功能需要安卓7或以上数据漫游、修改用户头像、更换壁纸", style = bodyTextStyle) }
if(VERSION.SDK_INT<26){ Text(text = "以下功能需要安卓8或以上蓝牙、自动填充服务、添加/移除工作资料", style = bodyTextStyle) }
if(VERSION.SDK_INT<28){ Text(text = "以下功能需要安卓9或以上飞行模式、位置信息、调整亮度、修改语言、修改日期时间、修改屏幕超时、打印、分享至工作应用、切换用户", style = bodyTextStyle) }
if(VERSION.SDK_INT<29){ Text(text = "以下功能需要安卓10或以上配置私人DNS、内容捕获、内容建议", style = bodyTextStyle) }
if(VERSION.SDK_INT<31){ Text(text = "以下功能需要安卓12或以上切换摄像头使用权限、切换麦克风使用权限", style = bodyTextStyle) }
if(VERSION.SDK_INT<33){ Text(text = "以下功能需要安卓13或以上添加WiFi配置、分享设备管理器配置的WiFi、WiFi共享", style = bodyTextStyle) }
if(VERSION.SDK_INT<34){ Text(text = "以下功能需要安卓14或以上2G信号、启用设备管理器、超宽频段无线电", style = bodyTextStyle) }
}
Spacer(Modifier.padding(vertical = 30.dp))
}
} }
} }
@@ -129,9 +120,7 @@ fun SectionTab(txt:String,getSection:()->Boolean,setSection:()->Unit){
val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE) val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE)
Text( Text(
text = txt, text = txt,
color = if(getSection()){ color = if(getSection()){ colorScheme.onTertiaryContainer }else{ colorScheme.onPrimaryContainer },
colorScheme.onTertiaryContainer}else{
colorScheme.onPrimaryContainer},
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
style = if(!sharedPref.getBoolean("isWear",false)){typography.headlineMedium}else{typography.titleLarge}, style = if(!sharedPref.getBoolean("isWear",false)){typography.headlineMedium}else{typography.titleLarge},
modifier = Modifier modifier = Modifier
@@ -139,13 +128,7 @@ fun SectionTab(txt:String,getSection:()->Boolean,setSection:()->Unit){
.padding(horizontal = if(!sharedPref.getBoolean("isWear",false)){8.dp}else{4.dp}, .padding(horizontal = if(!sharedPref.getBoolean("isWear",false)){8.dp}else{4.dp},
vertical = if(!sharedPref.getBoolean("isWear",false)){5.dp}else{2.dp}) vertical = if(!sharedPref.getBoolean("isWear",false)){5.dp}else{2.dp})
.clip(RoundedCornerShape(15.dp)) .clip(RoundedCornerShape(15.dp))
.background( .background(color = if (getSection()){ colorScheme.tertiaryContainer }else{ colorScheme.primaryContainer }.copy(0.8F))
color = if (getSection()) {
colorScheme.tertiaryContainer.copy(alpha = 0.8F)
} else {
colorScheme.primaryContainer.copy(alpha = 0.8F)
}
)
.clickable(onClick = setSection) .clickable(onClick = setSection)
.padding(vertical = if(!sharedPref.getBoolean("isWear",false)){8.dp}else{3.dp}) .padding(vertical = if(!sharedPref.getBoolean("isWear",false)){8.dp}else{3.dp})
) )