From 3a19b1acf986f32a8c3062312e913bb4329ee3bb Mon Sep 17 00:00:00 2001 From: BinTianqi Date: Sat, 26 Oct 2024 09:10:42 +0800 Subject: [PATCH] Set organization name and organization id in dialog ManageSpaceActivity: use dialog --- app/src/main/AndroidManifest.xml | 2 +- .../bintianqi/owndroid/ManageSpaceActivity.kt | 89 ++++------ .../com/bintianqi/owndroid/dpm/Password.kt | 1 + .../com/bintianqi/owndroid/dpm/Permissions.kt | 167 ++++++++---------- app/src/main/res/values-tr/strings.xml | 4 +- app/src/main/res/values-zh-rCN/strings.xml | 4 +- app/src/main/res/values/strings.xml | 4 +- 7 files changed, 106 insertions(+), 165 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0506601..9bfdde6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,7 +50,7 @@ + android:theme="@style/Theme.Transparent"> = 31 && (deviceOwner || profileOwner)) dpm.enrollmentSpecificId else "" Column(modifier = Modifier.fillMaxSize().verticalScroll(listScrollState)) { Text( @@ -131,13 +129,13 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) { SubPageItem(R.string.shizuku,"") { localNavCtrl.navigate("Shizuku") } SubPageItem(R.string.device_info, "", R.drawable.perm_device_information_fill0) { localNavCtrl.navigate("DeviceInfo") } if((VERSION.SDK_INT >= 26 && deviceOwner) || (VERSION.SDK_INT>=24 && profileOwner)) { - SubPageItem(R.string.org_name, "", R.drawable.corporate_fare_fill0) { localNavCtrl.navigate("OrgName") } + SubPageItem(R.string.org_name, "", R.drawable.corporate_fare_fill0) { dialog = 2 } } if(VERSION.SDK_INT >= 31 && (profileOwner || deviceOwner)) { - SubPageItem(R.string.org_id, "", R.drawable.corporate_fare_fill0) { localNavCtrl.navigate("OrgID") } + SubPageItem(R.string.org_id, "", R.drawable.corporate_fare_fill0) { dialog = 3 } } if(enrollmentSpecificId != "") { - SubPageItem(R.string.enrollment_specific_id, "", R.drawable.id_card_fill0) { enrollmentIdDialog = true } + SubPageItem(R.string.enrollment_specific_id, "", R.drawable.id_card_fill0) { dialog = 1 } } if(deviceOwner || profileOwner) { SubPageItem(R.string.disable_account_management, "", R.drawable.account_circle_fill0) { localNavCtrl.navigate("DisableAccountManagement") } @@ -153,27 +151,76 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) { } Spacer(Modifier.padding(vertical = 30.dp)) } - if(enrollmentIdDialog) AlertDialog( - title = { Text(stringResource(R.string.enrollment_specific_id)) }, - text = { - val esid = dpm.enrollmentSpecificId - OutlinedTextField( - value = esid, - onValueChange = {}, readOnly = true, modifier = Modifier.fillMaxWidth(), - trailingIcon = { - IconButton(onClick = { writeClipBoard(context, esid) }) { - Icon(painter = painterResource(R.drawable.content_copy_fill0), contentDescription = stringResource(R.string.copy)) + if(dialog != 0) { + var input by remember { mutableStateOf("") } + AlertDialog( + title = { + Text(stringResource( + when(dialog){ + 1 -> R.string.enrollment_specific_id + 2 -> R.string.org_name + 3 -> R.string.org_id + else -> R.string.permission } + )) + }, + text = { + val focusMgr = LocalFocusManager.current + LaunchedEffect(Unit) { + if(dialog == 1) input = dpm.enrollmentSpecificId + } + OutlinedTextField( + value = input, + onValueChange = { input = it }, readOnly = dialog == 1, modifier = Modifier.fillMaxWidth(), + label = { + Text(stringResource( + when(dialog){ + 1 -> R.string.enrollment_specific_id + 2 -> R.string.org_name + 3 -> R.string.org_id + else -> R.string.permission + } + )) + }, + trailingIcon = { + if(dialog == 1) IconButton(onClick = { writeClipBoard(context, input) }) { + Icon(painter = painterResource(R.drawable.content_copy_fill0), contentDescription = stringResource(R.string.copy)) + } + }, + supportingText = { + if(dialog == 3) Text(stringResource(R.string.length_6_to_64)) + }, + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), + keyboardActions = KeyboardActions { focusMgr.clearFocus() }, + textStyle = typography.bodyLarge + ) + }, + onDismissRequest = { dialog = 0 }, + dismissButton = { + TextButton( + onClick = { dialog = 0 } + ) { + Text(stringResource(R.string.cancel)) + } + }, + confirmButton = { + TextButton( + onClick = { + try { + if(dialog == 2) dpm.setOrganizationName(receiver, input) + if(dialog == 3) dpm.setOrganizationId(input) + dialog = 0 + } catch(_: IllegalStateException) { + Toast.makeText(context, R.string.failed, Toast.LENGTH_SHORT).show() + } + }, + enabled = (dialog == 3 && input.length in 6..64) || dialog != 3 + ) { + Text(stringResource(R.string.confirm)) } - ) - }, - onDismissRequest = { enrollmentIdDialog = false }, - confirmButton = { - TextButton(onClick = { enrollmentIdDialog = false }) { - Text(stringResource(R.string.confirm)) } - } - ) + ) + } } private fun toggleDhizukuMode(status: Boolean, context: Context) { @@ -481,78 +528,6 @@ fun DeviceInfo() { } } -@SuppressLint("NewApi") -@Composable -private fun OrgID() { - val context = LocalContext.current - val dpm = context.getDPM() - val focusMgr = LocalFocusManager.current - Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())) { - var orgId by remember { mutableStateOf("") } - Spacer(Modifier.padding(vertical = 10.dp)) - Text(text = stringResource(R.string.org_id), style = typography.headlineLarge) - Spacer(Modifier.padding(vertical = 5.dp)) - OutlinedTextField( - value = orgId, onValueChange = { orgId=it }, - label = { Text(stringResource(R.string.org_id)) }, - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Ascii, imeAction = ImeAction.Done), - keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus() }), - modifier = Modifier.fillMaxWidth() - ) - Spacer(Modifier.padding(vertical = 2.dp)) - AnimatedVisibility(orgId.length !in 6..64) { - Text(text = stringResource(R.string.length_6_to_64)) - } - Spacer(Modifier.padding(vertical = 5.dp)) - Button( - onClick = { - try { - dpm.setOrganizationId(orgId) - Toast.makeText(context, R.string.success,Toast.LENGTH_SHORT).show() - } catch(e: IllegalStateException) { - Toast.makeText(context, R.string.failed,Toast.LENGTH_SHORT).show() - } - }, - enabled = orgId.length in 6..64, - modifier = Modifier.fillMaxWidth() - ) { - Text(stringResource(R.string.apply)) - } - } -} - -@SuppressLint("NewApi") -@Composable -private fun OrgName() { - val context = LocalContext.current - val dpm = context.getDPM() - val receiver = context.getReceiver() - val focusMgr = LocalFocusManager.current - Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)) { - var orgName by remember { mutableStateOf(try{dpm.getOrganizationName(receiver).toString() }catch(e:SecurityException) {""}) } - Spacer(Modifier.padding(vertical = 10.dp)) - Text(text = stringResource(R.string.org_name), style = typography.headlineLarge) - Spacer(Modifier.padding(vertical = 5.dp)) - OutlinedTextField( - value = orgName, onValueChange = { orgName = it }, modifier = Modifier.fillMaxWidth().padding(vertical = 3.dp), - label = { Text(stringResource(R.string.org_name)) }, - keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), - keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus() }) - ) - Spacer(Modifier.padding(vertical = 5.dp)) - Button( - onClick = { - focusMgr.clearFocus() - dpm.setOrganizationName(receiver,orgName) - Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show() - }, - modifier = Modifier.fillMaxWidth() - ) { - Text(stringResource(R.string.apply)) - } - } -} - @SuppressLint("NewApi") @Composable private fun SupportMsg() { diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 1ee51a5..e1c7e81 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -554,10 +554,8 @@ OwnDroid\'u biyometri ile doğrula Arka plana geçince kilitle Depolamayı koru - Depolama korunuyor - OwnDroid\'un depolamasını temizleyemezsiniz + Depolama korunuyor Depolamayı temizle - Depolama başarıyla temizlendi\nUygulama kapanacak Automation API Debug mode diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 59721c9..aabf13c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -546,10 +546,8 @@ 使用生物识别进行验证 处于后台时锁定 保护存储空间 - 存储空间受到保护 - 你不能清除OwnDroid的存储空间 + 存储空间受到保护,你不能清除OwnDroid的存储空间 清除存储空间 - 清除存储空间成功\n应用即将退出 自动化API 调试模式 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a565f19..b78e15c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -559,10 +559,8 @@ Authenticate OwnDroid with biometrics Lock when switch to background Protect storage - Storage is protected - You can\'t clear storage of OwnDroid + Storage is protected, you can\'t clear storage of OwnDroid Clear storage - Clear storage success\nApplication will exit Automation API Debug mode