simplify code of modifiers

This commit is contained in:
BinTianqi
2024-01-23 14:19:41 +08:00
parent 587f3d5b1c
commit c11c93f70c
8 changed files with 89 additions and 266 deletions

View File

@@ -12,14 +12,15 @@ import android.net.Uri
import android.os.Build.VERSION
import android.util.Log
import android.widget.Toast
import androidx.compose.foundation.background
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.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Switch
@@ -32,7 +33,6 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat.startActivity
@@ -46,7 +46,8 @@ fun ApplicationManage(myDpm:DevicePolicyManager, myComponent:ComponentName,myCon
Column(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
.navigationBarsPadding()
.verticalScroll(rememberScrollState()),
horizontalAlignment = Alignment.CenterHorizontally
) {
TextField(
@@ -80,12 +81,7 @@ fun ApplicationManage(myDpm:DevicePolicyManager, myComponent:ComponentName,myCon
/*AppManageItem(R.string.block_unins,R.string.sometimes_not_available,myDpm, {myDpm.isUninstallBlocked(myComponent,pkgName)},
{b -> myDpm.setUninstallBlocked(myComponent,pkgName,b)})*/
Row(
modifier = Modifier
.fillMaxWidth()
.padding(5.dp)
.clip(RoundedCornerShape(15))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(8.dp),
modifier = sections(),
horizontalArrangement = Arrangement.SpaceAround
) {
Button(onClick = {myDpm.setUninstallBlocked(myComponent,pkgName,false)}, enabled = isDeviceOwner(myDpm)|| isProfileOwner(myDpm)) {
@@ -95,36 +91,38 @@ fun ApplicationManage(myDpm:DevicePolicyManager, myComponent:ComponentName,myCon
Text("防卸载")
}
}
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 5.dp, vertical = 4.dp)
.clip(RoundedCornerShape(14.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp)
) {
Column(modifier = sections()) {
Text(text = "许可的输入法", style = MaterialTheme.typography.titleLarge)
val imeList = myDpm.getPermittedInputMethods(myComponent)
var imeListText = ""
if (imeList != null) {
var imeList = mutableListOf<String>()
var imeListText by remember{ mutableStateOf("") }
val refreshList = {
if(isProfileOwner(myDpm) || isDeviceOwner(myDpm)){
if(myDpm.getPermittedInputMethods(myComponent)!=null){
imeList = myDpm.getPermittedInputMethods(myComponent)!!
}
}
imeListText = ""
for(eachIme in imeList){
imeListText += "$eachIme \n"
//Log.e("",eachIme)
Log.e("",eachIme)
}
}
refreshList()
Text(imeListText)
Button(
onClick = {
imeList?.plus(pkgName)
imeList.plus(pkgName)
myDpm.setPermittedInputMethods(myComponent, imeList)
refreshList()
}
) {
Text("设为许可的输入法")
}
Button(
onClick = {
imeList?.remove(pkgName)
imeList.remove(pkgName)
myDpm.setPermittedInputMethods(myComponent,imeList)
refreshList()
}
) {
Text("从列表中移除")
@@ -153,12 +151,7 @@ private fun AppManageItem(
isEnabled = getMethod()
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(5.dp)
.clip(RoundedCornerShape(15))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(8.dp),
modifier = sections(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {

View File

@@ -4,9 +4,7 @@ import android.app.admin.DevicePolicyManager
import android.content.ComponentName
import android.content.Context
import android.os.Build.VERSION
import android.os.UserManager
import android.widget.Toast
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -15,7 +13,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
@@ -31,7 +28,6 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
@@ -42,7 +38,6 @@ fun DeviceControl(myDpm: DevicePolicyManager, myComponent: ComponentName,myConte
Column(
modifier = Modifier
.verticalScroll(rememberScrollState())
.padding(bottom = 20.dp)
.navigationBarsPadding()
) {
if(isDeviceOwner(myDpm)){
@@ -76,12 +71,7 @@ fun DeviceControl(myDpm: DevicePolicyManager, myComponent: ComponentName,myConte
}
if(VERSION.SDK_INT>=28){
Row(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 6.dp, vertical = 4.dp)
.clip(RoundedCornerShape(15))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(vertical = 5.dp),
modifier = sections(),
horizontalArrangement = Arrangement.SpaceEvenly
) {
Button(
@@ -114,12 +104,7 @@ fun DeviceControl(myDpm: DevicePolicyManager, myComponent: ComponentName,myConte
Row(
horizontalArrangement = Arrangement.SpaceAround,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 4.dp, horizontal = 6.dp)
.clip(RoundedCornerShape(15))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(vertical = 4.dp),
modifier = sections(),
) {
if(VERSION.SDK_INT>=24){
Button(onClick = {myDpm.reboot(myComponent)}, enabled = isDeviceOwner(myDpm)) {
@@ -161,14 +146,7 @@ fun DeviceControl(myDpm: DevicePolicyManager, myComponent: ComponentName,myConte
if(isDeviceOwner(myDpm)){
SysUpdatePolicy(myDpm,myComponent,myContext)
}
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 6.dp)
.clip(RoundedCornerShape(16.dp))
.background(color = MaterialTheme.colorScheme.errorContainer)
.padding(8.dp)
) {
Column(modifier = sections(MaterialTheme.colorScheme.errorContainer)) {
var flag by remember{ mutableIntStateOf(0) }
var confirmed by remember{ mutableStateOf(false) }
Text(text = "清除数据",style = MaterialTheme.typography.titleLarge,modifier = Modifier.padding(6.dp))
@@ -214,7 +192,7 @@ fun DeviceControl(myDpm: DevicePolicyManager, myComponent: ComponentName,myConte
}
}
}
Spacer(Modifier.padding(vertical = 20.dp))
Spacer(Modifier.padding(vertical = 30.dp))
}
}
@@ -229,12 +207,7 @@ private fun DeviceCtrlItem(
){
var isEnabled by remember{ mutableStateOf(false) }
Row(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 6.dp, vertical = 4.dp)
.clip(RoundedCornerShape(15))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(8.dp),
modifier = sections(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
@@ -263,7 +236,8 @@ private fun DeviceCtrlItem(
onCheckedChange = {
setMethod(!isEnabled)
isEnabled=getMethod()
}
},
modifier = Modifier.padding(end = 5.dp)
)
}
}

View File

@@ -33,6 +33,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
@@ -72,6 +73,7 @@ class MainActivity : ComponentActivity() {
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Composable
fun MyScaffold(mainDpm:DevicePolicyManager, mainComponent:ComponentName, mainContext:Context){
val focusMgr = LocalFocusManager.current
val navCtrl = rememberNavController()
val backStackEntry by navCtrl.currentBackStackEntryAsState()
val topBarNameMap = mapOf(
@@ -110,6 +112,7 @@ fun MyScaffold(mainDpm:DevicePolicyManager, mainComponent:ComponentName, mainCon
navCtrl.graph.findStartDestination().id
) { saveState = true }
}
focusMgr.clearFocus()
})
.padding(5.dp)
)
@@ -240,3 +243,14 @@ fun isDeviceOwner(dpm:DevicePolicyManager): Boolean {
fun isProfileOwner(dpm:DevicePolicyManager): Boolean {
return dpm.isProfileOwnerApp("com.binbin.androidowner")
}
@SuppressLint("ModifierFactoryExtensionFunction")
@Composable
fun sections(bgColor:Color=MaterialTheme.colorScheme.primaryContainer):Modifier{
return Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(14.dp))
.background(color = bgColor)
.padding(vertical = 6.dp, horizontal = 10.dp)
}

View File

@@ -7,7 +7,6 @@ import android.content.Context
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
import android.os.Build.VERSION
import android.widget.Toast
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -16,7 +15,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
@@ -38,7 +36,6 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.FocusManager
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalFocusManager
@@ -64,21 +61,11 @@ fun Password(myDpm:DevicePolicyManager,myComponent:ComponentName,myContext:Conte
Text(
text = "以下操作可能会造成不可挽回的损失,请先备份好数据。执行操作时一定要谨慎!!!",
color = MaterialTheme.colorScheme.onErrorContainer,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(15))
.background(color = MaterialTheme.colorScheme.errorContainer)
.padding(8.dp)
modifier = sections(MaterialTheme.colorScheme.errorContainer)
)
if(myDpm.isDeviceOwnerApp("com.binbin.androidowner")){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(15))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(8.dp)
modifier = sections()
) {
if(VERSION.SDK_INT>=29){
val pwdComplex = myDpm.passwordComplexity
@@ -98,12 +85,7 @@ fun Password(myDpm:DevicePolicyManager,myComponent:ComponentName,myContext:Conte
if(VERSION.SDK_INT>=26){
Column(
horizontalAlignment = Alignment.Start,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(10))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(8.dp)
modifier = sections()
) {
Text(text = "密码重置令牌", style = MaterialTheme.typography.titleLarge)
Row {
@@ -144,12 +126,7 @@ fun Password(myDpm:DevicePolicyManager,myComponent:ComponentName,myContext:Conte
}
}
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(16.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp)
modifier = sections()
) {
TextField(
value = newPwd,
@@ -215,14 +192,7 @@ fun Password(myDpm:DevicePolicyManager,myComponent:ComponentName,myContext:Conte
{myDpm.getPasswordHistoryLength(null).toString()},{ic -> myDpm.setPasswordHistoryLength(myComponent, ic.toInt()) })
if(VERSION.SDK_INT>=31){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(16.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp)
) {
Column(modifier = sections()) {
val passwordComplexity = mapOf(
DevicePolicyManager.PASSWORD_COMPLEXITY_NONE to "无复杂度(允许不设密码)",
DevicePolicyManager.PASSWORD_COMPLEXITY_LOW to "低复杂度(允许图案和连续性)",
@@ -254,12 +224,7 @@ fun Password(myDpm:DevicePolicyManager,myComponent:ComponentName,myContext:Conte
}
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(16.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp)
modifier = sections()
) {
val passwordQuality = mapOf(
DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED to "未指定",
@@ -300,7 +265,7 @@ fun Password(myDpm:DevicePolicyManager,myComponent:ComponentName,myContext:Conte
}
}
Spacer(Modifier.padding(vertical = 20.dp))
Spacer(Modifier.padding(vertical = 30.dp))
}
}
@@ -315,14 +280,7 @@ fun PasswordItem(
getMethod:()->String,
setMethod:(ic:String)->Unit
){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(10))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp)
) {
Column(modifier = sections()) {
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(myDpm)){getMethod()}else{""}) }
var inputContentEdited by remember{ mutableStateOf(false) }
var ableToApply by remember{ mutableStateOf(true) }

View File

@@ -7,7 +7,6 @@ import android.content.Intent
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
import android.os.Build.VERSION
import android.widget.Toast
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -15,7 +14,6 @@ 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.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.text.selection.SelectionContainer
@@ -31,12 +29,10 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.FocusManager
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat.startActivity
import androidx.navigation.NavGraph.Companion.findStartDestination
@@ -50,18 +46,11 @@ fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName, myCon
val isdo = myDpm.isDeviceOwnerApp("com.binbin.androidowner")
val focusManager = LocalFocusManager.current
Column(
modifier = Modifier
.padding(horizontal = 8.dp)
.verticalScroll(rememberScrollState()),
modifier = Modifier.verticalScroll(rememberScrollState()),
horizontalAlignment = Alignment.CenterHorizontally
) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 5.dp)
.clip(RoundedCornerShape(15))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp),
modifier = sections(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
@@ -90,12 +79,7 @@ fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName, myCon
}
if(!isda){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 5.dp)
.clip(RoundedCornerShape(15.dp))
.background(color = MaterialTheme.colorScheme.tertiaryContainer)
.padding(10.dp),
modifier = sections(MaterialTheme.colorScheme.tertiaryContainer),
horizontalAlignment = Alignment.Start
) {
Text("你可以在adb shell中使用以下命令激活Device Admin")
@@ -107,12 +91,7 @@ fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName, myCon
}
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 5.dp)
.clip(RoundedCornerShape(15))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp),
modifier = sections(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
@@ -137,12 +116,7 @@ fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName, myCon
}
if(!isProfileOwner(myDpm)){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 5.dp)
.clip(RoundedCornerShape(15.dp))
.background(color = MaterialTheme.colorScheme.tertiaryContainer)
.padding(10.dp),
modifier = sections(MaterialTheme.colorScheme.tertiaryContainer),
horizontalAlignment = Alignment.Start
) {
if(!isDeviceOwner(myDpm)){
@@ -159,12 +133,7 @@ fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName, myCon
}
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 5.dp)
.clip(RoundedCornerShape(15))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp),
modifier = sections(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
@@ -191,22 +160,12 @@ fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName, myCon
Text(
text = "注意!在这里撤销权限不会清除配置。比如:被停用的应用会保持停用状态",
color = MaterialTheme.colorScheme.onErrorContainer,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 5.dp)
.clip(RoundedCornerShape(15))
.background(color = MaterialTheme.colorScheme.errorContainer)
.padding(6.dp)
modifier = sections(MaterialTheme.colorScheme.errorContainer)
)
}
if(!isdo&&!isProfileOwner(myDpm)){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 5.dp)
.clip(RoundedCornerShape(15.dp))
.background(color = MaterialTheme.colorScheme.tertiaryContainer)
.padding(10.dp),
modifier = sections(MaterialTheme.colorScheme.tertiaryContainer),
horizontalAlignment = Alignment.Start
) {
Text("你可以在adb shell中使用以下命令激活Device Owner")
@@ -221,12 +180,7 @@ fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName, myCon
}
if(VERSION.SDK_INT>=30){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 5.dp)
.clip(RoundedCornerShape(15.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(8.dp)
modifier = sections()
) {
Text(text = "设备信息", style = MaterialTheme.typography.titleLarge)
val orgDevice = myDpm.isOrganizationOwnedDeviceWithManagedProfile
@@ -245,33 +199,22 @@ fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName, myCon
}
}
if(VERSION.SDK_INT>=31&&(isProfileOwner(myDpm)|| isDeviceOwner(myDpm))){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 5.dp)
.clip(RoundedCornerShape(15.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(8.dp)
) {
val specificId = myDpm.enrollmentSpecificId
Column(modifier = sections()) {
val specificId:String = myDpm.enrollmentSpecificId
Text(text = "设备唯一标识码", style = MaterialTheme.typography.titleLarge)
Text("(恢复出厂设置不变)")
Text("(如果下面没有一长串数字字母组合,说明你的设备不支持)")
Text(specificId)
Button(onClick = {myDpm.setOrganizationId(specificId)}, enabled = specificId!="") {
Text("设置为组织ID")
if(specificId!=""){
Text(specificId)
Button(onClick = {myDpm.setOrganizationId(specificId)}, enabled = specificId!="") {
Text("设置为组织ID")
}
}else{
Text("你的设备不支持")
}
}
}
if(isDeviceOwner(myDpm) || isProfileOwner(myDpm)){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 5.dp)
.clip(RoundedCornerShape(15.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(8.dp)
) {
Column(modifier = sections()) {
Text(text = "不受控制的账号类型", style = MaterialTheme.typography.titleLarge)
Text("作用未知")
var noManageAccount = myDpm.accountTypesWithManagementDisabled?.toMutableList()
@@ -283,7 +226,6 @@ fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName, myCon
accountlist+="$eachAccount \n"
}
}
}
refreshList()
if(accountlist!=""){
@@ -339,14 +281,7 @@ fun DeviceOwnerInfo(
input:()->CharSequence?,
output:(content:String?)->Unit
){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 5.dp)
.clip(RoundedCornerShape(12.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp)
) {
Column(modifier = sections()) {
Text(text = stringResource(name), style = MaterialTheme.typography.titleLarge)
if(desc!=R.string.place_holder){Text(text = stringResource(desc),modifier = Modifier.padding(top = 6.dp))}
var inputContent by remember{ mutableStateOf(input()) }

View File

@@ -7,14 +7,12 @@ import android.content.ComponentName
import android.content.Context
import android.os.Build.VERSION
import android.widget.Toast
import androidx.compose.foundation.background
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.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.Button
@@ -28,7 +26,6 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
@@ -40,16 +37,8 @@ import java.util.Date
fun SysUpdatePolicy(myDpm:DevicePolicyManager,myComponent:ComponentName,myContext: Context){
val focusMgr = LocalFocusManager.current
Column {
Spacer(Modifier.padding(vertical = 5.dp))
if(VERSION.SDK_INT>=26){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 6.dp)
.clip(RoundedCornerShape(10.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(8.dp)
) {
Column(modifier = sections()) {
val sysUpdateInfo = if(isDeviceOwner(myDpm)){myDpm.getPendingSystemUpdate(myComponent)}else{null}
if(sysUpdateInfo!=null){
Text("Update first available: ${Date(sysUpdateInfo.receivedTime)}")
@@ -65,15 +54,7 @@ fun SysUpdatePolicy(myDpm:DevicePolicyManager,myComponent:ComponentName,myContex
}
}
}
Spacer(Modifier.padding(vertical = 5.dp))
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 6.dp)
.clip(RoundedCornerShape(16.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(8.dp)
) {
Column(modifier = sections()) {
var selectedPolicy by remember{ mutableStateOf(myDpm.systemUpdatePolicy?.policyType) }
Text(text = "系统更新策略", style = MaterialTheme.typography.titleLarge)
RadioButtonItem("准备好后立即更新",{selectedPolicy==SystemUpdatePolicy.TYPE_INSTALL_AUTOMATIC},{selectedPolicy=SystemUpdatePolicy.TYPE_INSTALL_AUTOMATIC})
@@ -143,6 +124,5 @@ fun SysUpdatePolicy(myDpm:DevicePolicyManager,myComponent:ComponentName,myContex
}
}*/
Spacer(Modifier.padding(vertical = 5.dp))
}
}

View File

@@ -1,6 +1,5 @@
package com.binbin.androidowner
import android.app.Activity
import android.app.admin.DevicePolicyManager
import android.content.ComponentName
import android.content.Context
@@ -11,14 +10,11 @@ import android.os.Build.VERSION_CODES
import android.os.UserHandle
import android.os.UserManager
import android.widget.Toast
import androidx.compose.foundation.background
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.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
@@ -33,11 +29,9 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp
import androidx.core.app.ActivityCompat.startActivityForResult
import androidx.core.content.ContextCompat.startActivity
import androidx.core.os.UserManagerCompat
@@ -50,14 +44,7 @@ fun UserManage(myDpm:DevicePolicyManager,myComponent:ComponentName,myContext: Co
//val myUM = myContext.getSystemService(Context.USER_SERVICE)
val currentUser = android.os.Process.myUserHandle()
val userList = Test.returnUsers(myContext)
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(16.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp)
) {
Column(modifier = sections()) {
Text(text = "用户信息", style = MaterialTheme.typography.titleLarge)
Text("用户个数:${userList.size}")
Spacer(Modifier.padding(vertical = 5.dp))
@@ -83,14 +70,7 @@ fun UserManage(myDpm:DevicePolicyManager,myComponent:ComponentName,myContext: Co
Text("切换用户后或设备重启后会删除临时用户")
}
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(14.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp)
) {
Column(modifier = sections()) {
Text(text = "用户操作", style = MaterialTheme.typography.titleLarge)
if(VERSION.SDK_INT>28){
var resultForLogout by remember{ mutableIntStateOf(-1) }
@@ -135,14 +115,7 @@ fun UserManage(myDpm:DevicePolicyManager,myComponent:ComponentName,myContext: Co
}
if(VERSION.SDK_INT>=24){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(14.dp))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp)
) {
Column(modifier = sections()) {
var userName by remember{ mutableStateOf("") }
Text(text = "创建用户", style = MaterialTheme.typography.titleLarge)
TextField(
@@ -207,12 +180,7 @@ fun UserSessionMessage(
setMsg:(msg:CharSequence?)->Unit
){
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp)
.clip(RoundedCornerShape(10))
.background(color = MaterialTheme.colorScheme.primaryContainer)
.padding(10.dp)
modifier = sections()
) {
val focusMgr = LocalFocusManager.current
var msg by remember{ mutableStateOf(if(isDeviceOwner(myDpm)||(isProfileOwner(myDpm)&&profileOwner)){ if(get()==null){""}else{get().toString()} }else{""}) }

View File

@@ -44,7 +44,6 @@ fun UserRestriction(myDpm: DevicePolicyManager, myComponent: ComponentName,myCon
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.verticalScroll(verticalScrolling)
.padding(bottom = 20.dp)
.navigationBarsPadding()
) {
Text("打开开关后会禁用对应的功能")
@@ -178,7 +177,7 @@ fun UserRestriction(myDpm: DevicePolicyManager, myComponent: ComponentName,myCon
if(VERSION.SDK_INT<34){
Text("以下功能需要安卓14或以上2G信号、启用设备管理器、超宽频段无线电")
}
Spacer(Modifier.padding(vertical = 20.dp))
Spacer(Modifier.padding(vertical = 30.dp))
}
}
@@ -193,7 +192,13 @@ fun SectionTab(txt:String,getSection:()->Boolean,setSection:()->Unit){
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 6.dp)
.clip(RoundedCornerShape(15))
.background(color = if(getSection()){MaterialTheme.colorScheme.tertiaryContainer}else{MaterialTheme.colorScheme.primaryContainer})
.background(
color = if (getSection()) {
MaterialTheme.colorScheme.tertiaryContainer
} else {
MaterialTheme.colorScheme.primaryContainer
}
)
.clickable(onClick = setSection)
.padding(vertical = 8.dp)
)
@@ -210,12 +215,7 @@ private fun UserRestrictionItem(
){
var strictState by remember{ mutableStateOf(false) }
Row(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 4.dp, horizontal = 8.dp)
.clip(RoundedCornerShape(20))
.background(color = MaterialTheme.colorScheme.secondaryContainer)
.padding(5.dp),
modifier = sections(MaterialTheme.colorScheme.secondaryContainer),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
){
@@ -260,7 +260,8 @@ private fun UserRestrictionItem(
}
strictState = myDpm.getUserRestrictions(myComponent).getBoolean(restriction)
},
enabled = isDeviceOwner(myDpm)|| isProfileOwner(myDpm)
enabled = isDeviceOwner(myDpm)|| isProfileOwner(myDpm),
modifier = Modifier.padding(end = 5.dp)
)
}
}