From a46b34991271f9b0b9738d87ab7086cec815191a Mon Sep 17 00:00:00 2001 From: BinTianqi <1220958406@qq.com> Date: Sun, 25 Feb 2024 10:10:48 +0800 Subject: [PATCH] fix TextField focus bug --- .../binbin/androidowner/ApplicationManage.kt | 7 ++-- .../com/binbin/androidowner/DeviceControl.kt | 16 ++++---- .../com/binbin/androidowner/ManagedProfile.kt | 14 +++---- .../java/com/binbin/androidowner/Network.kt | 41 ++++++++++--------- .../java/com/binbin/androidowner/Password.kt | 11 ++--- .../com/binbin/androidowner/Permissions.kt | 15 +++---- .../binbin/androidowner/ShizukuActivate.kt | 10 +++-- .../binbin/androidowner/SystemUpdatePolicy.kt | 5 ++- .../main/java/com/binbin/androidowner/User.kt | 9 ++-- 9 files changed, 62 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/com/binbin/androidowner/ApplicationManage.kt b/app/src/main/java/com/binbin/androidowner/ApplicationManage.kt index 2e15156..520f78c 100644 --- a/app/src/main/java/com/binbin/androidowner/ApplicationManage.kt +++ b/app/src/main/java/com/binbin/androidowner/ApplicationManage.kt @@ -21,6 +21,7 @@ import android.provider.Settings import android.widget.Toast import androidx.activity.ComponentActivity import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.KeyboardActions @@ -69,7 +70,7 @@ fun ApplicationManage(){ onValueChange = { pkgName = it }, label = { Text("包名") }, modifier = Modifier.fillMaxWidth().padding(horizontal = 4.dp), - keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Ascii, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}) ) } @@ -80,7 +81,7 @@ fun ApplicationManage(){ onValueChange = { pkgName = it }, label = { Text("包名") }, modifier = Modifier.fillMaxWidth().padding(horizontal = 2.dp,vertical = 2.dp), - keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Ascii, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}) ) }else{Spacer(Modifier.padding(vertical = 2.dp))} @@ -233,7 +234,7 @@ fun ApplicationManage(){ onValueChange = {inputPermission = it}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Ascii, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp) ) Text("当前状态:$currentState", style = bodyTextStyle) Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween){ diff --git a/app/src/main/java/com/binbin/androidowner/DeviceControl.kt b/app/src/main/java/com/binbin/androidowner/DeviceControl.kt index 5e92327..a970bda 100644 --- a/app/src/main/java/com/binbin/androidowner/DeviceControl.kt +++ b/app/src/main/java/com/binbin/androidowner/DeviceControl.kt @@ -11,6 +11,7 @@ import android.util.Log import android.widget.Toast import androidx.activity.ComponentActivity import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.focusable import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -174,7 +175,7 @@ fun SystemManage(){ keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), enabled = isDeviceOwner(myDpm)||(VERSION.SDK_INT>=30&&isProfileOwner(myDpm)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile), - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp) ) if(isWear){ Button( @@ -384,7 +385,7 @@ fun SystemManage(){ label = {Text("包名")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(vertical = 3.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 3.dp) ) Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween){ Button( @@ -535,12 +536,12 @@ fun SystemManage(){ var silent by remember{mutableStateOf(false)} var reason by remember{mutableStateOf("")} Text(text = "清除数据",style = typography.titleLarge,modifier = Modifier.padding(6.dp),color = colorScheme.onErrorContainer) - CheckBoxItem("清除外部存储",{externalStorage},{externalStorage=!externalStorage}, colorScheme.onErrorContainer) + CheckBoxItem("清除外部存储",{externalStorage},{externalStorage=!externalStorage;confirmed=false}, colorScheme.onErrorContainer) if(VERSION.SDK_INT>=22&&isDeviceOwner(myDpm)){ - CheckBoxItem("清除受保护的数据",{protectionData},{protectionData=!protectionData}, colorScheme.onErrorContainer) + CheckBoxItem("清除受保护的数据",{protectionData},{protectionData=!protectionData;confirmed=false}, colorScheme.onErrorContainer) } - if(VERSION.SDK_INT>=28){ CheckBoxItem("清除eUICC",{euicc},{euicc=!euicc}, colorScheme.onErrorContainer) } - if(VERSION.SDK_INT>=29){ CheckBoxItem("静默清除",{silent},{silent=!silent}, colorScheme.onErrorContainer) } + if(VERSION.SDK_INT>=28){ CheckBoxItem("清除eUICC",{euicc},{euicc=!euicc;confirmed=false}, colorScheme.onErrorContainer) } + if(VERSION.SDK_INT>=29){ CheckBoxItem("静默清除",{silent},{silent=!silent;confirmed=false}, colorScheme.onErrorContainer) } AnimatedVisibility(!silent&&VERSION.SDK_INT>=28) { OutlinedTextField( value = reason, onValueChange = {reason=it}, @@ -548,7 +549,7 @@ fun SystemManage(){ enabled = !confirmed, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(vertical = 3.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 3.dp) ) } Button( @@ -558,6 +559,7 @@ fun SystemManage(){ if(externalStorage){flag += WIPE_EXTERNAL_STORAGE} if(protectionData&&VERSION.SDK_INT>=22){flag += WIPE_RESET_PROTECTION_DATA} if(euicc&&VERSION.SDK_INT>=28){flag += WIPE_EUICC} + if(reason==""){silent = true} if(silent&&VERSION.SDK_INT>=29){flag += WIPE_SILENTLY} confirmed=!confirmed }, diff --git a/app/src/main/java/com/binbin/androidowner/ManagedProfile.kt b/app/src/main/java/com/binbin/androidowner/ManagedProfile.kt index d35fb99..a462553 100644 --- a/app/src/main/java/com/binbin/androidowner/ManagedProfile.kt +++ b/app/src/main/java/com/binbin/androidowner/ManagedProfile.kt @@ -2,16 +2,12 @@ package com.binbin.androidowner import android.app.admin.DevicePolicyManager import android.app.admin.DevicePolicyManager.* -import android.content.ActivityNotFoundException -import android.content.ComponentName -import android.content.Context -import android.content.Intent -import android.content.IntentFilter -import android.content.pm.PackageManager.NameNotFoundException +import android.content.* import android.os.Build.VERSION import android.widget.Toast import androidx.activity.ComponentActivity import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.KeyboardActions @@ -142,7 +138,7 @@ fun ManagedProfile() { Text(text = "工作资料处于关闭状态的时间达到该限制后会挂起个人应用,0为无限制", style = bodyTextStyle) Text(text = "个人应用已经因此挂起:${myDpm.getPersonalAppsSuspendedReasons(myComponent)==PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT}") OutlinedTextField( - value = time, onValueChange = {time=it}, modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp), + value = time, onValueChange = {time=it}, modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp), label = {Text("时间(ms)")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}) @@ -169,7 +165,7 @@ fun ManagedProfile() { label = {Text("Action")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Ascii, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp) ) Button( onClick = { @@ -212,7 +208,7 @@ fun ManagedProfile() { label = {Text("组织ID")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Ascii, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp) ) AnimatedVisibility(orgId.length !in 6..64) { Text(text = "长度应在6~64个字符之间", style = bodyTextStyle) diff --git a/app/src/main/java/com/binbin/androidowner/Network.kt b/app/src/main/java/com/binbin/androidowner/Network.kt index 90e74ea..55d6d55 100644 --- a/app/src/main/java/com/binbin/androidowner/Network.kt +++ b/app/src/main/java/com/binbin/androidowner/Network.kt @@ -15,6 +15,7 @@ import android.util.Log import android.widget.Toast import androidx.activity.ComponentActivity import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.KeyboardActions @@ -129,7 +130,7 @@ fun Network(){ onValueChange = {inputSsid = it}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp) ) Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween){ Button( @@ -203,7 +204,7 @@ fun Network(){ label = {Text("DNS主机名")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp) ) Button( onClick = { @@ -267,7 +268,7 @@ fun Network(){ onValueChange = {keyPair = it}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp) ) val isExist = try{myDpm.isKeyPairGrantedToWifiAuth(keyPair)}catch(e:java.lang.IllegalArgumentException){false} Text("已存在:$isExist") @@ -314,7 +315,7 @@ fun Network(){ onValueChange = {inputNum = it}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp), + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp), enabled = !nextStep ) }else{ @@ -387,7 +388,7 @@ fun Network(){ label = {Text("名称")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically){ Text(text = "启用", style = typography.titleLarge) @@ -401,7 +402,7 @@ fun Network(){ label = {Text("用户名")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) if(VERSION.SDK_INT>=33){ @@ -412,7 +413,7 @@ fun Network(){ label = {Text("ID")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) } @@ -432,7 +433,7 @@ fun Network(){ label = {Text("ID")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) } @@ -443,7 +444,7 @@ fun Network(){ label = {Text("位掩码")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) Text(text = "描述", style = typography.titleLarge) @@ -453,7 +454,7 @@ fun Network(){ label = {Text("文本")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) Text(text = "MMS代理", style = typography.titleLarge) @@ -464,7 +465,7 @@ fun Network(){ label = {Text("地址")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) } TextField( @@ -473,7 +474,7 @@ fun Network(){ label = {Text("端口")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) Text(text = "代理", style = typography.titleLarge) @@ -484,7 +485,7 @@ fun Network(){ label = {Text("地址")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) } TextField( @@ -493,7 +494,7 @@ fun Network(){ label = {Text("端口")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) Text(text = "MMSC", style = typography.titleLarge) @@ -503,7 +504,7 @@ fun Network(){ label = {Text("Uri")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) if(VERSION.SDK_INT>=33){ @@ -514,7 +515,7 @@ fun Network(){ label = {Text("IPV4")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) TextField( value = mtuV6, @@ -522,7 +523,7 @@ fun Network(){ label = {Text("IPV6")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) } @@ -539,7 +540,7 @@ fun Network(){ label = {Text("位掩码")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) Text(text = "OperatorNumeric", style = typography.titleLarge) @@ -549,7 +550,7 @@ fun Network(){ label = {Text("ID")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) Text(text = "密码", style = typography.titleLarge) @@ -559,7 +560,7 @@ fun Network(){ label = {Text("密码")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(top = 2.dp, bottom = 4.dp) ) if(VERSION.SDK_INT>=33){ diff --git a/app/src/main/java/com/binbin/androidowner/Password.kt b/app/src/main/java/com/binbin/androidowner/Password.kt index 1f9789e..273e8b2 100644 --- a/app/src/main/java/com/binbin/androidowner/Password.kt +++ b/app/src/main/java/com/binbin/androidowner/Password.kt @@ -10,14 +10,11 @@ import android.os.Build.VERSION import android.widget.Toast import androidx.activity.ComponentActivity import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.clickable -import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.* import androidx.compose.foundation.layout.* -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 import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Check import androidx.compose.material3.* @@ -27,10 +24,8 @@ import androidx.compose.runtime.* 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.LocalContext import androidx.compose.ui.platform.LocalFocusManager -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType @@ -155,7 +150,7 @@ fun Password(){ label = { Text("密码")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.padding(vertical = if(isWear){0.dp}else{5.dp}).fillMaxWidth() + modifier = Modifier.focusable().padding(vertical = if(isWear){0.dp}else{5.dp}).fillMaxWidth() ) Text(text = stringResource(R.string.reset_pwd_desc), modifier = Modifier.padding(vertical = 3.dp),style=bodyTextStyle) var resetPwdFlag by remember{ mutableIntStateOf(0) } @@ -451,7 +446,7 @@ private fun PasswordItem( keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), enabled = isDeviceOwner(myDpm), - modifier = Modifier.fillMaxWidth(), + modifier = Modifier.focusable().fillMaxWidth(), trailingIcon = { Icon( imageVector = Icons.Outlined.Check, contentDescription = "OK", diff --git a/app/src/main/java/com/binbin/androidowner/Permissions.kt b/app/src/main/java/com/binbin/androidowner/Permissions.kt index 16e7b78..6a80680 100644 --- a/app/src/main/java/com/binbin/androidowner/Permissions.kt +++ b/app/src/main/java/com/binbin/androidowner/Permissions.kt @@ -8,6 +8,7 @@ import android.content.Intent import android.os.Build.VERSION import android.widget.Toast import androidx.activity.ComponentActivity +import androidx.compose.foundation.focusable import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -215,7 +216,7 @@ fun DpmPermissions(navCtrl:NavHostController){ var orgName by remember{mutableStateOf(try{myDpm.getOrganizationName(myComponent).toString()}catch(e:SecurityException){""})} Text(text = "组织名称", style = typography.titleLarge, color = titleColor) OutlinedTextField( - value = orgName, onValueChange = {orgName=it}, modifier = Modifier.fillMaxWidth().padding(vertical = 3.dp), + value = orgName, onValueChange = {orgName=it}, modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 3.dp), label = {Text("组织名称")}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusManager.clearFocus()}) @@ -254,7 +255,7 @@ fun DpmPermissions(navCtrl:NavHostController){ value = inputText, onValueChange = {inputText=it}, label = {Text("账号类型")}, - modifier = Modifier.fillMaxWidth().padding(bottom = 4.dp), + modifier = Modifier.focusable().fillMaxWidth().padding(bottom = 4.dp), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusManager.clearFocus()}) ) @@ -303,13 +304,13 @@ fun DpmPermissions(navCtrl:NavHostController){ Text(text = "把Device owner或Profile owner权限转移到另一个应用。目标必须是Device admin", style = bodyTextStyle) OutlinedTextField( value = pkg, onValueChange = {pkg = it}, label = {Text("目标包名")}, - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp), + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next), keyboardActions = KeyboardActions(onNext = {focusManager.moveFocus(FocusDirection.Down)}) ) OutlinedTextField( value = cls, onValueChange = {cls = it}, label = {Text("目标类名")}, - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp), + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusManager.clearFocus()}) ) @@ -393,7 +394,7 @@ fun DeviceOwnerInfo( value = if(inputContent!=null){ inputContent.toString() }else{""}, label = {Text(stringResource(textfield))}, onValueChange = { inputContent=it }, - modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 4.dp) ) Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) { Button( @@ -432,7 +433,3 @@ fun activateDeviceAdmin(inputContext:Context,inputComponent:ComponentName){ Toast.makeText(inputContext,"不支持",Toast.LENGTH_SHORT).show() } } - -fun activateShizuku(){ - -} diff --git a/app/src/main/java/com/binbin/androidowner/ShizukuActivate.kt b/app/src/main/java/com/binbin/androidowner/ShizukuActivate.kt index b23cb64..c6705f9 100644 --- a/app/src/main/java/com/binbin/androidowner/ShizukuActivate.kt +++ b/app/src/main/java/com/binbin/androidowner/ShizukuActivate.kt @@ -5,11 +5,10 @@ import android.content.ComponentName import android.content.Context import android.content.Context.MODE_PRIVATE import android.content.pm.PackageManager -import android.os.Binder import android.os.Build.VERSION -import android.os.UserManager import android.widget.Toast import androidx.activity.ComponentActivity +import androidx.compose.foundation.focusable import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -19,9 +18,12 @@ import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Warning -import androidx.compose.material3.* +import androidx.compose.material3.Button +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme.colorScheme import androidx.compose.material3.MaterialTheme.typography +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -99,7 +101,7 @@ fun ShizukuActivate(){ label = {Text("UserID")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp) + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp) ) Button( onClick = { diff --git a/app/src/main/java/com/binbin/androidowner/SystemUpdatePolicy.kt b/app/src/main/java/com/binbin/androidowner/SystemUpdatePolicy.kt index 413bd3b..4f5a0de 100644 --- a/app/src/main/java/com/binbin/androidowner/SystemUpdatePolicy.kt +++ b/app/src/main/java/com/binbin/androidowner/SystemUpdatePolicy.kt @@ -8,6 +8,7 @@ import android.content.Context import android.os.Build.VERSION import android.widget.Toast import androidx.activity.ComponentActivity +import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.* import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions @@ -71,7 +72,7 @@ fun SysUpdatePolicy(){ onValueChange = {windowedPolicyStart=it}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth(0.5F) + modifier = Modifier.focusable().fillMaxWidth(0.5F) ) Spacer(Modifier.padding(horizontal = 3.dp)) OutlinedTextField( @@ -80,7 +81,7 @@ fun SysUpdatePolicy(){ label = {Text("结束时间")}, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth() + modifier = Modifier.focusable().fillMaxWidth() ) } Spacer(Modifier.padding(vertical = 3.dp)) diff --git a/app/src/main/java/com/binbin/androidowner/User.kt b/app/src/main/java/com/binbin/androidowner/User.kt index 87875d8..25f8c92 100644 --- a/app/src/main/java/com/binbin/androidowner/User.kt +++ b/app/src/main/java/com/binbin/androidowner/User.kt @@ -12,6 +12,7 @@ import android.os.UserManager import android.provider.MediaStore import android.widget.Toast import androidx.activity.ComponentActivity +import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.KeyboardActions @@ -87,7 +88,7 @@ fun UserManage() { }, label = {Text(if(useUid){"UID"}else{"序列号"})}, enabled = isDeviceOwner(myDpm), - modifier = Modifier.fillMaxWidth().padding(vertical = 3.dp), + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 3.dp), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}) ) @@ -184,7 +185,7 @@ fun UserManage() { value = userName, onValueChange = {userName=it}, label = {Text("用户名")}, - modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp), + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 4.dp), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}) ) @@ -226,7 +227,7 @@ fun UserManage() { value = input, onValueChange = {input = it}, label = {Text("ID")}, - modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp), + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}) ) @@ -336,7 +337,7 @@ private fun UserSessionMessage(text:String, textField:String, profileOwner:Boole label = {Text(textField)}, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}), - modifier = Modifier.fillMaxWidth().padding(vertical = 6.dp), + modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 6.dp), enabled = isDeviceOwner(myDpm)||(isProfileOwner(myDpm)&&profileOwner) ) Row(modifier = Modifier.fillMaxWidth(),horizontalArrangement = Arrangement.SpaceBetween) {