mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 11:05:59 +00:00
add animations to UserRestriction page
This commit is contained in:
@@ -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 = {
|
||||||
|
|||||||
@@ -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("重启")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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("从列表中移除")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(){
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
@@ -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})
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user