From 5e8ea061caa5972cb307688a76303a60f4d049a4 Mon Sep 17 00:00:00 2001 From: BinTianqi Date: Sat, 26 Oct 2024 10:54:39 +0800 Subject: [PATCH] Optimize UI for Device info, User info and Password info Change USB signal to Disable USB signal Hide Master volume mute in work profile --- .../main/java/com/bintianqi/owndroid/Utils.kt | 6 +++ .../bintianqi/owndroid/dpm/ManagedProfile.kt | 2 +- .../com/bintianqi/owndroid/dpm/Network.kt | 2 +- .../com/bintianqi/owndroid/dpm/Password.kt | 22 ++++---- .../com/bintianqi/owndroid/dpm/Permissions.kt | 53 ++++++------------- .../bintianqi/owndroid/dpm/SystemManager.kt | 14 ++--- .../com/bintianqi/owndroid/dpm/UserManager.kt | 29 +++++----- .../com/bintianqi/owndroid/ui/Components.kt | 17 ++++++ app/src/main/res/values-tr/strings.xml | 42 +++++++-------- app/src/main/res/values-zh-rCN/strings.xml | 42 +++++++-------- app/src/main/res/values/strings.xml | 42 +++++++-------- 11 files changed, 130 insertions(+), 141 deletions(-) diff --git a/app/src/main/java/com/bintianqi/owndroid/Utils.kt b/app/src/main/java/com/bintianqi/owndroid/Utils.kt index dc244ca..2707ac1 100644 --- a/app/src/main/java/com/bintianqi/owndroid/Utils.kt +++ b/app/src/main/java/com/bintianqi/owndroid/Utils.kt @@ -14,6 +14,7 @@ import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts +import androidx.annotation.StringRes import com.bintianqi.owndroid.dpm.addDeviceAdmin import com.bintianqi.owndroid.dpm.createManagedProfile import kotlinx.coroutines.flow.MutableStateFlow @@ -121,3 +122,8 @@ fun formatFileSize(bytes: Long): String { else -> "$bytes bytes" } } + +@StringRes +fun Boolean.yesOrNo(): Int { + return if(this) R.string.yes else R.string.no +} diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/ManagedProfile.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/ManagedProfile.kt index e43e928..6637749 100644 --- a/app/src/main/java/com/bintianqi/owndroid/dpm/ManagedProfile.kt +++ b/app/src/main/java/com/bintianqi/owndroid/dpm/ManagedProfile.kt @@ -192,7 +192,7 @@ private fun CreateWorkProfile() { if(VERSION.SDK_INT >= 24) { intent.putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, skipEncrypt) } if(VERSION.SDK_INT >= 33) { intent.putExtra(EXTRA_PROVISIONING_ALLOW_OFFLINE, offlineProvisioning) } createManagedProfile.launch(intent) - } catch(e:ActivityNotFoundException) { + } catch(_:ActivityNotFoundException) { Toast.makeText(context, R.string.unsupported, Toast.LENGTH_SHORT).show() } }, diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/Network.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/Network.kt index fed6e39..3702ed1 100644 --- a/app/src/main/java/com/bintianqi/owndroid/dpm/Network.kt +++ b/app/src/main/java/com/bintianqi/owndroid/dpm/Network.kt @@ -162,7 +162,7 @@ fun Network(navCtrl: NavHostController) { val mac = dpm.getWifiMacAddress(receiver) OutlinedTextField( value = mac ?: stringResource(R.string.none), - onValueChange = {}, readOnly = true, modifier = Modifier.fillMaxWidth(), textStyle = typography.titleMedium, + onValueChange = {}, readOnly = true, modifier = Modifier.fillMaxWidth(), textStyle = typography.bodyLarge, trailingIcon = { if(mac != null) IconButton(onClick = { writeClipBoard(context, mac) }) { Icon(painter = painterResource(R.drawable.content_copy_fill0), contentDescription = stringResource(R.string.copy)) diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/Password.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/Password.kt index e1445b8..3084454 100644 --- a/app/src/main/java/com/bintianqi/owndroid/dpm/Password.kt +++ b/app/src/main/java/com/bintianqi/owndroid/dpm/Password.kt @@ -81,11 +81,13 @@ import androidx.navigation.compose.rememberNavController import com.bintianqi.owndroid.R import com.bintianqi.owndroid.toggle import com.bintianqi.owndroid.ui.Animations +import com.bintianqi.owndroid.ui.CardItem import com.bintianqi.owndroid.ui.CheckBoxItem import com.bintianqi.owndroid.ui.Information import com.bintianqi.owndroid.ui.RadioButtonItem import com.bintianqi.owndroid.ui.SubPageItem import com.bintianqi.owndroid.ui.TopBar +import com.bintianqi.owndroid.yesOrNo @Composable fun Password(navCtrl: NavHostController) { @@ -265,24 +267,18 @@ private fun PasswordInfo() { Spacer(Modifier.padding(vertical = 5.dp)) if(VERSION.SDK_INT >= 29) { val passwordComplexity = mapOf( - PASSWORD_COMPLEXITY_NONE to stringResource(R.string.password_complexity_none), - PASSWORD_COMPLEXITY_LOW to stringResource(R.string.password_complexity_low), - PASSWORD_COMPLEXITY_MEDIUM to stringResource(R.string.password_complexity_medium), - PASSWORD_COMPLEXITY_HIGH to stringResource(R.string.password_complexity_high) + PASSWORD_COMPLEXITY_NONE to R.string.password_complexity_none, + PASSWORD_COMPLEXITY_LOW to R.string.password_complexity_low, + PASSWORD_COMPLEXITY_MEDIUM to R.string.password_complexity_medium, + PASSWORD_COMPLEXITY_HIGH to R.string.password_complexity_high ) - val pwdComplex = passwordComplexity[dpm.passwordComplexity] - Text(text = stringResource(R.string.current_password_complexity_is, pwdComplex?:stringResource(R.string.unknown))) + CardItem(R.string.current_password_complexity, passwordComplexity[dpm.passwordComplexity] ?: R.string.unknown) } if(deviceOwner || profileOwner) { - Text(stringResource(R.string.is_password_sufficient, dpm.isActivePasswordSufficient)) - } - if(context.isDeviceAdmin) { - val pwdFailedAttempts = dpm.currentFailedPasswordAttempts - Text(text = stringResource(R.string.password_failed_attempts_is, pwdFailedAttempts)) + CardItem(R.string.password_sufficient, dpm.isActivePasswordSufficient.yesOrNo()) } if(VERSION.SDK_INT >= 28 && profileOwner && dpm.isManagedProfile(receiver)) { - val unifiedPwd = dpm.isUsingUnifiedPassword(receiver) - Text(stringResource(R.string.is_using_unified_password, unifiedPwd)) + CardItem(R.string.unified_password, dpm.isUsingUnifiedPassword(receiver).yesOrNo()) } } } diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/Permissions.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/Permissions.kt index f5f1889..e924005 100644 --- a/app/src/main/java/com/bintianqi/owndroid/dpm/Permissions.kt +++ b/app/src/main/java/com/bintianqi/owndroid/dpm/Permissions.kt @@ -29,7 +29,6 @@ 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 import androidx.compose.ui.unit.dp import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost @@ -40,6 +39,7 @@ import com.bintianqi.owndroid.R import com.bintianqi.owndroid.backToHomeStateFlow import com.bintianqi.owndroid.ui.* import com.bintianqi.owndroid.writeClipBoard +import com.bintianqi.owndroid.yesOrNo import com.rosan.dhizuku.api.Dhizuku import com.rosan.dhizuku.api.DhizukuRequestPermissionListener import kotlinx.coroutines.launch @@ -480,50 +480,29 @@ fun DeviceInfo() { Text(text = stringResource(R.string.device_info), style = typography.headlineLarge) Spacer(Modifier.padding(vertical = 5.dp)) if(VERSION.SDK_INT>=34 && (context.isDeviceOwner || dpm.isOrgProfile(receiver))) { - val financed = dpm.isDeviceFinanced - Text(stringResource(R.string.is_device_financed, financed)) + CardItem(R.string.financed_device, dpm.isDeviceFinanced.yesOrNo()) } - Spacer(Modifier.padding(vertical = 2.dp)) if(VERSION.SDK_INT >= 33) { val dpmRole = dpm.devicePolicyManagementRoleHolderPackage - Text(stringResource(R.string.dpmrh, if(dpmRole == null) stringResource(R.string.none) else "")) - if(dpmRole!=null) { - SelectionContainer(modifier = Modifier.horizontalScroll(rememberScrollState())) { - Text(text = dpmRole) - } - } + CardItem(R.string.dpmrh, if(dpmRole == null) stringResource(R.string.none) else dpmRole) } - Spacer(Modifier.padding(vertical = 2.dp)) val encryptionStatus = mutableMapOf( - DevicePolicyManager.ENCRYPTION_STATUS_INACTIVE to stringResource(R.string.es_inactive), - DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE to stringResource(R.string.es_active), - DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED to stringResource(R.string.es_unsupported) + DevicePolicyManager.ENCRYPTION_STATUS_INACTIVE to R.string.es_inactive, + DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE to R.string.es_active, + DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED to R.string.es_unsupported ) - if(VERSION.SDK_INT >= 23) { encryptionStatus[DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY] = stringResource(R.string.es_active_default_key) } - if(VERSION.SDK_INT >= 24) { encryptionStatus[DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE_PER_USER] = stringResource(R.string.es_active_per_user) } - Text(stringResource(R.string.encrypt_status_is, encryptionStatus[dpm.storageEncryptionStatus] ?: "")) - Spacer(Modifier.padding(vertical = 2.dp)) + if(VERSION.SDK_INT >= 23) { encryptionStatus[DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY] = R.string.es_active_default_key } + if(VERSION.SDK_INT >= 24) { encryptionStatus[DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE_PER_USER] = R.string.es_active_per_user } + CardItem(R.string.encryption_status, encryptionStatus[dpm.storageEncryptionStatus] ?: R.string.unknown) if(VERSION.SDK_INT >= 28) { - Text(stringResource(R.string.support_device_id_attestation, dpm.isDeviceIdAttestationSupported)) + CardItem(R.string.support_device_id_attestation, dpm.isDeviceIdAttestationSupported.yesOrNo()) } - Spacer(Modifier.padding(vertical = 2.dp)) if (VERSION.SDK_INT >= 30) { - Text(stringResource(R.string.support_unique_device_attestation, dpm.isUniqueDeviceAttestationSupported)) + CardItem(R.string.support_unique_device_attestation, dpm.isUniqueDeviceAttestationSupported.yesOrNo()) } - Spacer(Modifier.padding(vertical = 2.dp)) val adminList = dpm.activeAdmins - if(adminList!=null) { - var adminListText = "" - Text(text = stringResource(R.string.activated_device_admin, adminList.size)) - var count = adminList.size - for(each in adminList) { - count -= 1 - adminListText += "${each.packageName}/${each.className}" - if(count>0) {adminListText += "\n"} - } - SelectionContainer(modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp).horizontalScroll(rememberScrollState())) { - Text(text = adminListText) - } + if(adminList != null) { + CardItem(R.string.activated_device_admin, adminList.map { it.flattenToShortString() }.joinToString("\n")) } } } @@ -692,9 +671,9 @@ private fun TransformOwnership() { Button( onClick = { try { - dpm.transferOwnership(receiver,ComponentName(pkg, cls),null) + dpm.transferOwnership(receiver, ComponentName(pkg, cls),null) Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show() - }catch(e:IllegalArgumentException) { + } catch(_:IllegalArgumentException) { Toast.makeText(context, R.string.failed, Toast.LENGTH_SHORT).show() } }, @@ -712,7 +691,7 @@ private fun activateDeviceAdmin(inputContext:Context,inputComponent:ComponentNam intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, inputComponent) intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, inputContext.getString(R.string.activate_device_admin_here)) addDeviceAdmin.launch(intent) - }catch(e:ActivityNotFoundException) { + } catch(_:ActivityNotFoundException) { Toast.makeText(inputContext, R.string.unsupported, Toast.LENGTH_SHORT).show() } } diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/SystemManager.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/SystemManager.kt index 968b457..4b546ad 100644 --- a/app/src/main/java/com/bintianqi/owndroid/dpm/SystemManager.kt +++ b/app/src/main/java/com/bintianqi/owndroid/dpm/SystemManager.kt @@ -282,7 +282,7 @@ private fun Switches() { SwitchItem(R.string.require_auto_time, "", R.drawable.schedule_fill0, { dpm.autoTimeRequired}, { dpm.setAutoTimeRequired(receiver,it) }, padding = false) } } - if(deviceOwner || profileOwner) { + if(deviceOwner || (profileOwner && (VERSION.SDK_INT < 24 || (VERSION.SDK_INT >= 24 && !dpm.isManagedProfile(receiver))))) { SwitchItem(R.string.master_mute, "", R.drawable.volume_up_fill0, { dpm.isMasterVolumeMuted(receiver) }, { dpm.setMasterVolumeMuted(receiver,it) }, padding = false ) @@ -302,16 +302,10 @@ private fun Switches() { { dpm.isCommonCriteriaModeEnabled(receiver) }, { dpm.setCommonCriteriaModeEnabled(receiver,it) }, padding = false ) } - if(VERSION.SDK_INT >= 31 && (deviceOwner || dpm.isOrgProfile(receiver))) { + if(VERSION.SDK_INT >= 31 && (deviceOwner || dpm.isOrgProfile(receiver)) && dpm.canUsbDataSignalingBeDisabled()) { SwitchItem( - R.string.usb_signal, "", R.drawable.usb_fill0, { dpm.isUsbDataSignalingEnabled }, - { - if(dpm.canUsbDataSignalingBeDisabled()) { - dpm.isUsbDataSignalingEnabled = it - } else { - Toast.makeText(context, R.string.unsupported, Toast.LENGTH_SHORT).show() - } - }, padding = false + R.string.disable_usb_signal, "", R.drawable.usb_fill0, { !dpm.isUsbDataSignalingEnabled }, + { dpm.isUsbDataSignalingEnabled = !it }, padding = false ) } Spacer(Modifier.padding(vertical = 30.dp)) diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/UserManager.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/UserManager.kt index 5b1956b..dd71f4f 100644 --- a/app/src/main/java/com/bintianqi/owndroid/dpm/UserManager.kt +++ b/app/src/main/java/com/bintianqi/owndroid/dpm/UserManager.kt @@ -56,7 +56,6 @@ 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.os.UserManagerCompat import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -67,11 +66,13 @@ import com.bintianqi.owndroid.fileUriFlow import com.bintianqi.owndroid.getFile import com.bintianqi.owndroid.toggle import com.bintianqi.owndroid.ui.Animations +import com.bintianqi.owndroid.ui.CardItem import com.bintianqi.owndroid.ui.CheckBoxItem import com.bintianqi.owndroid.ui.SubPageItem import com.bintianqi.owndroid.ui.SwitchItem import com.bintianqi.owndroid.ui.TopBar import com.bintianqi.owndroid.uriToStream +import com.bintianqi.owndroid.yesOrNo @Composable fun UserManage(navCtrl: NavHostController) { @@ -171,24 +172,20 @@ private fun CurrentUserInfo() { Spacer(Modifier.padding(vertical = 10.dp)) Text(text = stringResource(R.string.user_info), style = typography.headlineLarge) Spacer(Modifier.padding(vertical = 5.dp)) - Text(stringResource(R.string.is_user_unlocked, UserManagerCompat.isUserUnlocked(context))) - if(VERSION.SDK_INT >= 24) { Text(stringResource(R.string.is_support_multi_user, UserManager.supportsMultipleUsers())) } - if(VERSION.SDK_INT >= 23) { Text(text = stringResource(R.string.is_system_user, userManager.isSystemUser)) } - if(VERSION.SDK_INT >= 34) { Text(text = stringResource(R.string.is_admin_user, userManager.isAdminUser)) } - if(VERSION.SDK_INT >= 31) { Text(text = stringResource(R.string.is_headless_system_user, UserManager.isHeadlessSystemUserMode())) } - Spacer(Modifier.padding(vertical = 5.dp)) + if(VERSION.SDK_INT >= 24) CardItem(R.string.support_multiuser, UserManager.supportsMultipleUsers().yesOrNo()) + if(VERSION.SDK_INT >= 23) CardItem(R.string.system_user, userManager.isSystemUser.yesOrNo()) + if(VERSION.SDK_INT >= 34) CardItem(R.string.admin_user, userManager.isAdminUser.yesOrNo()) + if(VERSION.SDK_INT >= 31) CardItem(R.string.headless_system_user, UserManager.isHeadlessSystemUserMode().yesOrNo()) if (VERSION.SDK_INT >= 28) { - val logoutable = dpm.isLogoutEnabled - Text(text = stringResource(R.string.user_can_logout, logoutable)) + CardItem(R.string.logout_enabled, dpm.isLogoutEnabled.yesOrNo()) if(context.isDeviceOwner || context.isProfileOwner) { - val ephemeralUser = dpm.isEphemeralUser(receiver) - Text(text = stringResource(R.string.is_ephemeral_user, ephemeralUser)) + CardItem(R.string.ephemeral_user, dpm.isEphemeralUser(receiver).yesOrNo()) } - Text(text = stringResource(R.string.is_affiliated_user, dpm.isAffiliatedUser)) + CardItem(R.string.affiliated_user, dpm.isAffiliatedUser.yesOrNo()) } - Spacer(Modifier.padding(vertical = 5.dp)) - Text(text = stringResource(R.string.user_id_is, Binder.getCallingUid() / 100000)) - Text(text = stringResource(R.string.user_serial_number_is, userManager.getSerialNumberForUser(Process.myUserHandle()))) + CardItem(R.string.user_id, (Binder.getCallingUid() / 100000).toString()) + CardItem(R.string.user_serial_number, userManager.getSerialNumberForUser(Process.myUserHandle()).toString()) + Spacer(Modifier.padding(vertical = 30.dp)) } } @@ -270,7 +267,7 @@ private fun UserOperation() { try{ val result = dpm.stopUser(receiver,userHandleById) Toast.makeText(context, userOperationResultCode(result,context), Toast.LENGTH_SHORT).show() - }catch(e:IllegalArgumentException) { + }catch(_: IllegalArgumentException) { Toast.makeText(context, R.string.failed, Toast.LENGTH_SHORT).show() } }, diff --git a/app/src/main/java/com/bintianqi/owndroid/ui/Components.kt b/app/src/main/java/com/bintianqi/owndroid/ui/Components.kt index c913cbb..2e76b4f 100644 --- a/app/src/main/java/com/bintianqi/owndroid/ui/Components.kt +++ b/app/src/main/java/com/bintianqi/owndroid/ui/Components.kt @@ -7,6 +7,7 @@ import androidx.compose.animation.animateContentSize import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material3.* import androidx.compose.material3.MaterialTheme.colorScheme import androidx.compose.material3.MaterialTheme.typography @@ -18,6 +19,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.navigation.NavBackStackEntry import androidx.navigation.NavHostController @@ -223,3 +225,18 @@ fun CopyTextButton(@StringRes label: Int, content: String) { } } } + +@Composable +fun CardItem(@StringRes title: Int, @StringRes text: Int) { + CardItem(title, stringResource(text)) +} + +@Composable +fun CardItem(@StringRes title: Int, text: String) { + Card(modifier = Modifier.fillMaxWidth().padding(vertical = 6.dp)) { + Text(text = stringResource(title), style = typography.titleLarge, modifier = Modifier.padding(start = 8.dp, top = 6.dp)) + SelectionContainer { + Text(text = text, modifier = Modifier.padding(start = 8.dp, bottom = 6.dp)) + } + } +} diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e1c7e81..d97e1b5 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -55,6 +55,8 @@ Hesap Warning Delete + Yes + No Etkinleştirmek İçin Tıklayın @@ -66,10 +68,10 @@ Reset device policy Cihaz Yöneticisini Etkinleştir Cihaz Bilgisi - Cihaz Kimliği Doğrulama Desteği: %1$s - Benzersiz Cihaz Doğrulama Desteği: %1$s - Finansmanlı Cihaz: %1$s - Cihaz Politikası Yönetim Rolü: %1$s + Cihaz Kimliği Doğrulama Desteği + Benzersiz Cihaz Doğrulama Desteği + Finansmanlı Cihaz + Cihaz Politikası Yönetim Rolü Devre Dışı @@ -77,7 +79,7 @@ Desteklenmiyor Aktif(Varsayılan Anahtar) Aktif(Kullanıcı Başına) - Aktif Cihaz Yöneticileri: %1$s + Aktif Cihaz Yöneticileri Kayıt Özel Kimliği Organizasyon Adı Hesap Yönetimini Devre Dışı Bırak @@ -130,7 +132,7 @@ Yedekleme servisi Bluetooth kişi paylaşımını devre dışı bırak Ortak kriter modu - USB sinyali + USB sinyali Ekran kilidi Ekranı şimdi kilitle Kimlik doğrulama şifreleme anahtarını çıkar @@ -185,7 +187,7 @@ Sessizce sil All data on your device will be ERASED Your work profile will be DELETED - Şifreleme durumu: %1$s + Encryption status FRP politikası Fabrika ayarlarına sıfırlama koruma politikası FRP politikası bu cihazda desteklenmiyor @@ -440,16 +442,15 @@ Kullanıcı oturumunu başlat mesajı Kullanıcı oturumunu sonlandır mesajı Kullanıcı bilgisi - Kullanıcı kilidi açıldı: %1$s - Çoklu kullanıcı desteği: %1$s - Sistem kullanıcısı: %1$s - Yönetici kullanıcısı: %1$s - Başsız sistem kullanıcısı: %1$s - Kullanıcı çıkış yapabilir: %1$s - Geçici kullanıcı: %1$s - Bağlı kullanıcı: %1$s - Kullanıcı ID: %1$s - Kullanıcı seri numarası: %1$s + Çoklu kullanıcı desteği + Sistem kullanıcısı + Yönetici kullanıcısı + Başsız sistem kullanıcısı + Logout enabled + Geçici kullanıcı + Bağlı kullanıcı + Kullanıcı ID + Kullanıcı seri numarası Kullanıcı işlemi Seri numarası UID kullan @@ -491,10 +492,9 @@ Düşük (Hareket şifresi ve karakter tekrarı izinli) Orta (Tekrar yasak, en az 4 karakter) Yüksek (Tekrar yasak, en az 6 karakter) - Mevcut şifre karmaşıklığı: %1$s - Şifre karmaşıklığı yeterli mi: %1$s - Başarısız şifre denemeleri: %1$s - Birleşik şifre: %1$s + Mevcut şifre karmaşıklığı + Şifre karmaşıklığı yeterli mi + Birleşik şifre Şifre sıfırlama jetonu Token The token must be longer than 32-byte diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index aabf13c..d3a460b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -52,6 +52,8 @@ 账户 警告 删除 + + 点击以激活 @@ -63,16 +65,16 @@ Dhizuku将被停用 激活Device admin 设备信息 - 支持设备ID认证:%1$s - 支持唯一设备认证:%1$s - Financed device: %1$s - 设备策略管理器角色(DPMRH):%1$s + 支持设备ID认证 + 支持唯一设备认证 + Financed device + 设备策略管理器角色 未使用 正在使用 不支持 使用默认密钥 每个用户分别加密 - 激活的Device admin: %1$s + 激活的Device admin 设备注册专用ID 组织名称 禁用账号管理 @@ -125,7 +127,7 @@ 备份服务 禁止蓝牙分享联系人 通用标准模式 - USB信号 + 禁用USB信号 锁屏 立即锁屏 移除凭证加密密钥 @@ -180,7 +182,7 @@ 静默清除 你的设备上的所有数据将会被清除 你的工作资料将会被删除 - 加密状态:%1$s + 加密状态 FRP策略 恢复出厂设置保护策略 这个设备不支持恢复出厂设置保护策略 @@ -432,16 +434,15 @@ 用户会话开始消息 用户会话结束消息 用户信息 - 用户已解锁:%1$s - 支持多用户:%1$s - 系统用户:%1$s - 管理员用户:%1$s - 无头系统用户: %1$s - 用户可以退出 : %1$s - 临时用户: %1$s - 附属用户: %1$s - 当前UserID:%1$s - 当前用户序列号:%1$s + 支持多用户 + 系统用户 + 管理员用户 + 无头系统用户 + 用户可登出 + 临时用户 + 附属用户 + 当前UserID + 当前用户序列号 用户操作 序列号 使用UID @@ -483,10 +484,9 @@ 低(允许图案和连续性) 中(无连续性,至少4位) 高(无连续性,至少6位) - 当前密码复杂度:%1$s - 密码达到要求:%1$s - 密码已错误次数:%1$s - 个人与工作应用密码一致:%1$s + 当前密码复杂度 + 密码符合复杂度要求 + 一致的密码 密码重置令牌 令牌 令牌必须大于32字节 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b78e15c..69b990a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -55,6 +55,8 @@ Account Warning Delete + Yes + No Click to activate @@ -68,17 +70,17 @@ dpm set-active-admin com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver dpm set-device-owner com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver Device info - Support Device ID attestation: %1$s - Support unique device attestation: %1$s - Financed device: %1$s - Device policy management role holder: %1$s + Support Device ID attestation + Support unique device attestation + Financed device + Device policy management role holder Inactive Active Unsupported Active(default key) Active(per-user) - Active device admins: %1$s + Active device admins Enrollment specific ID Organization name Disable account management @@ -134,7 +136,7 @@ Backup service Disable bluetooth contact sharing Common criteria mode - USB signal + Disable USB signal Keyguard Lock screen now Evict credential encryption key @@ -188,7 +190,7 @@ Wipe silently All data on your device will be ERASED Your work profile will be DELETED - Encrypt status: %1$s + Encryption status FRP policy Factory reset protection policy FRP policy is not supported on this device @@ -445,16 +447,15 @@ Start user session message End user session message User info - User unlocked: %1$s - Support multiuser: %1$s - System user: %1$s - Admin user: %1$s - Headless system user: %1$s - User can logout: %1$s - Ephemeral user: %1$s - Affiliated user: %1$s - UserID:%1$s - User serial number: %1$s + Support multiuser + System user + Admin user + Headless system user + Logout enabled + Ephemeral user + Affiliated user + UserID + User serial number User operation Serial number Use UID @@ -496,10 +497,9 @@ Low (Gesture password and characters repetition allowed) Medium (Repetition disallowed, 4 characters at least) High (Repetition disallowed, 6 characters at least) - Current password complexity: %1$s - Is password complexity sufficient: %1$s - Password failed attempts: %1$s - Unified password: %1$s + Current password complexity + Password complexity sufficient + Unified password Reset password token Token The token must be longer than 32-byte