Optimize UI for Device info, User info and Password info

Change USB signal to Disable USB signal
Hide Master volume mute in work profile
This commit is contained in:
BinTianqi
2024-10-26 10:54:39 +08:00
parent 3a19b1acf9
commit 5e8ea061ca
11 changed files with 130 additions and 141 deletions

View File

@@ -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
}

View File

@@ -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()
}
},

View File

@@ -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))

View File

@@ -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())
}
}
}

View File

@@ -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()
}
}

View File

@@ -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))

View File

@@ -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()
}
},

View File

@@ -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))
}
}
}

View File

@@ -55,6 +55,8 @@
<string name="account">Hesap</string>
<string name="warning">Warning</string> <!--TODO-->
<string name="delete">Delete</string> <!--TODO-->
<string name="yes">Yes</string> <!--TODO-->
<string name="no">No</string> <!--TODO-->
<!--Permissions-->
<string name="click_to_activate">Etkinleştirmek İçin Tıklayın</string>
@@ -66,10 +68,10 @@
<string name="reset_device_policy">Reset device policy</string> <!--TODO-->
<string name="activate_device_admin">Cihaz Yöneticisini Etkinleştir</string>
<string name="device_info">Cihaz Bilgisi</string>
<string name="support_device_id_attestation">Cihaz Kimliği Doğrulama Desteği: %1$s</string>
<string name="support_unique_device_attestation">Benzersiz Cihaz Doğrulama Desteği: %1$s</string>
<string name="is_device_financed">Finansmanlı Cihaz: %1$s</string>
<string name="dpmrh">Cihaz Politikası Yönetim Rolü: %1$s</string>
<string name="support_device_id_attestation">Cihaz Kimliği Doğrulama Desteği</string>
<string name="support_unique_device_attestation">Benzersiz Cihaz Doğrulama Desteği</string>
<string name="financed_device">Finansmanlı Cihaz</string>
<string name="dpmrh">Cihaz Politikası Yönetim Rolü</string>
<!--es: encryption status-->
<string name="es_inactive">Devre Dışı</string>
@@ -77,7 +79,7 @@
<string name="es_unsupported">Desteklenmiyor</string>
<string name="es_active_default_key">Aktif(Varsayılan Anahtar)</string>
<string name="es_active_per_user">Aktif(Kullanıcı Başına)</string>
<string name="activated_device_admin">Aktif Cihaz Yöneticileri: %1$s</string>
<string name="activated_device_admin">Aktif Cihaz Yöneticileri</string>
<string name="enrollment_specific_id">Kayıt Özel Kimliği</string>
<string name="org_name">Organizasyon Adı</string>
<string name="disable_account_management">Hesap Yönetimini Devre Dışı Bırak</string>
@@ -130,7 +132,7 @@
<string name="backup_service">Yedekleme servisi</string>
<string name="disable_bt_contact_share">Bluetooth kişi paylaşımını devre dışı bırak</string>
<string name="common_criteria_mode">Ortak kriter modu</string>
<string name="usb_signal">USB sinyali</string>
<string name="disable_usb_signal">USB sinyali</string> <!--TODO-->
<string name="keyguard">Ekran kilidi</string>
<string name="lock_now">Ekranı şimdi kilitle</string>
<string name="evict_credential_encryptoon_key">Kimlik doğrulama şifreleme anahtarını çıkar</string>
@@ -185,7 +187,7 @@
<string name="wipe_silently">Sessizce sil</string>
<string name="wipe_data_warning">All data on your device will be ERASED</string> <!--TODO-->
<string name="wipe_work_profile_warning">Your work profile will be DELETED</string> <!--TODO-->
<string name="encrypt_status_is">Şifreleme durumu: %1$s</string>
<string name="encryption_status">Encryption status</string> <!--TODO-->
<string name="frp_policy">FRP politikası</string>
<string name="factory_reset_protection_policy">Fabrika ayarlarına sıfırlama koruma politikası</string>
<string name="frp_policy_not_supported">FRP politikası bu cihazda desteklenmiyor</string>
@@ -440,16 +442,15 @@
<string name="start_user_session_msg">Kullanıcı oturumunu başlat mesajı</string>
<string name="end_user_session_msg">Kullanıcı oturumunu sonlandır mesajı</string>
<string name="user_info">Kullanıcı bilgisi</string>
<string name="is_user_unlocked">Kullanıcı kilidi açıldı: %1$s</string>
<string name="is_support_multi_user">Çoklu kullanıcı desteği: %1$s</string>
<string name="is_system_user">Sistem kullanıcısı: %1$s</string>
<string name="is_admin_user">Yönetici kullanıcısı: %1$s</string>
<string name="is_headless_system_user">Başsız sistem kullanıcısı: %1$s</string>
<string name="user_can_logout">Kullanıcı çıkış yapabilir: %1$s</string>
<string name="is_ephemeral_user">Geçici kullanıcı: %1$s</string>
<string name="is_affiliated_user">Bağlı kullanıcı: %1$s</string>
<string name="user_id_is">Kullanıcı ID: %1$s</string>
<string name="user_serial_number_is">Kullanıcı seri numarası: %1$s</string>
<string name="support_multiuser">Çoklu kullanıcı desteği</string>
<string name="system_user">Sistem kullanıcısı</string>
<string name="admin_user">Yönetici kullanıcısı</string>
<string name="headless_system_user">Başsız sistem kullanıcısı</string>
<string name="logout_enabled">Logout enabled</string> <!--TODO-->
<string name="ephemeral_user">Geçici kullanıcı</string>
<string name="affiliated_user">Bağlı kullanıcı</string>
<string name="user_id">Kullanıcı ID</string>
<string name="user_serial_number">Kullanıcı seri numarası</string>
<string name="user_operation">Kullanıcı işlemi</string>
<string name="serial_number">Seri numarası</string>
<string name="use_uid">UID kullan</string>
@@ -491,10 +492,9 @@
<string name="password_complexity_low">Düşük (Hareket şifresi ve karakter tekrarı izinli)</string>
<string name="password_complexity_medium">Orta (Tekrar yasak, en az 4 karakter)</string>
<string name="password_complexity_high">Yüksek (Tekrar yasak, en az 6 karakter)</string>
<string name="current_password_complexity_is">Mevcut şifre karmaşıklığı: %1$s</string>
<string name="is_password_sufficient">Şifre karmaşıklığı yeterli mi: %1$s</string>
<string name="password_failed_attempts_is">Başarısız şifre denemeleri: %1$s</string>
<string name="is_using_unified_password">Birleşik şifre: %1$s</string>
<string name="current_password_complexity">Mevcut şifre karmaşıklığı</string>
<string name="password_sufficient">Şifre karmaşıklığı yeterli mi</string>
<string name="unified_password">Birleşik şifre</string>
<string name="reset_password_token">Şifre sıfırlama jetonu</string>
<string name="token">Token</string> <!--TODO-->
<string name="token_must_longer_than_32_byte">The token must be longer than 32-byte</string> <!--TODO-->

View File

@@ -52,6 +52,8 @@
<string name="account">账户</string>
<string name="warning">警告</string>
<string name="delete">删除</string>
<string name="yes"></string>
<string name="no"></string>
<!--Permissions-->
<string name="click_to_activate">点击以激活</string>
@@ -63,16 +65,16 @@
<string name="dhizuku_will_be_deactivated">Dhizuku将被停用</string>
<string name="activate_device_admin">激活Device admin</string>
<string name="device_info">设备信息</string>
<string name="support_device_id_attestation">支持设备ID认证%1$s</string>
<string name="support_unique_device_attestation">支持唯一设备认证%1$s</string>
<string name="is_device_financed">Financed device: %1$s</string>
<string name="dpmrh">设备策略管理器角色(DPMRH)%1$s</string>
<string name="support_device_id_attestation">支持设备ID认证</string>
<string name="support_unique_device_attestation">支持唯一设备认证</string>
<string name="financed_device">Financed device</string>
<string name="dpmrh">设备策略管理器角色</string>
<string name="es_inactive">未使用</string>
<string name="es_active">正在使用</string>
<string name="es_unsupported">不支持</string>
<string name="es_active_default_key">使用默认密钥</string>
<string name="es_active_per_user">每个用户分别加密</string>
<string name="activated_device_admin">激活的Device admin: %1$s</string>
<string name="activated_device_admin">激活的Device admin</string>
<string name="enrollment_specific_id">设备注册专用ID</string>
<string name="org_name">组织名称</string>
<string name="disable_account_management">禁用账号管理</string>
@@ -125,7 +127,7 @@
<string name="backup_service">备份服务</string>
<string name="disable_bt_contact_share">禁止蓝牙分享联系人</string>
<string name="common_criteria_mode">通用标准模式</string>
<string name="usb_signal">USB信号</string>
<string name="disable_usb_signal">禁用USB信号</string>
<string name="keyguard">锁屏</string>
<string name="lock_now">立即锁屏</string>
<string name="evict_credential_encryptoon_key">移除凭证加密密钥</string>
@@ -180,7 +182,7 @@
<string name="wipe_silently">静默清除</string>
<string name="wipe_data_warning">你的设备上的所有数据将会被清除</string>
<string name="wipe_work_profile_warning">你的工作资料将会被删除</string>
<string name="encrypt_status_is">加密状态%1$s</string>
<string name="encryption_status">加密状态</string>
<string name="frp_policy">FRP策略</string>
<string name="factory_reset_protection_policy">恢复出厂设置保护策略</string>
<string name="frp_policy_not_supported">这个设备不支持恢复出厂设置保护策略</string>
@@ -432,16 +434,15 @@
<string name="start_user_session_msg">用户会话开始消息</string>
<string name="end_user_session_msg">用户会话结束消息</string>
<string name="user_info">用户信息</string>
<string name="is_user_unlocked">用户已解锁:%1$s</string>
<string name="is_support_multi_user">支持多用户:%1$s</string>
<string name="is_system_user">系统用户:%1$s</string>
<string name="is_admin_user">管理员用户:%1$s</string>
<string name="is_headless_system_user">无头系统用户: %1$s</string>
<string name="user_can_logout">用户可以退出 : %1$s</string>
<string name="is_ephemeral_user">临时用户: %1$s</string>
<string name="is_affiliated_user">附属用户: %1$s</string>
<string name="user_id_is">当前UserID%1$s</string>
<string name="user_serial_number_is">当前用户序列号:%1$s</string>
<string name="support_multiuser">支持多用户</string>
<string name="system_user">系统用户</string>
<string name="admin_user">管理员用户</string>
<string name="headless_system_user">无头系统用户</string>
<string name="logout_enabled">用户可登出</string>
<string name="ephemeral_user">临时用户</string>
<string name="affiliated_user">附属用户</string>
<string name="user_id">当前UserID</string>
<string name="user_serial_number">当前用户序列号</string>
<string name="user_operation">用户操作</string>
<string name="serial_number">序列号</string>
<string name="use_uid">使用UID</string>
@@ -483,10 +484,9 @@
<string name="password_complexity_low">低(允许图案和连续性)</string>
<string name="password_complexity_medium">无连续性至少4位</string>
<string name="password_complexity_high">无连续性至少6位</string>
<string name="current_password_complexity_is">当前密码复杂度%1$s</string>
<string name="is_password_sufficient">密码达到要求:%1$s</string>
<string name="password_failed_attempts_is">密码已错误次数:%1$s</string>
<string name="is_using_unified_password">个人与工作应用密码一致:%1$s</string>
<string name="current_password_complexity">当前密码复杂度</string>
<string name="password_sufficient">密码符合复杂度要求</string>
<string name="unified_password">一致的密码</string>
<string name="reset_password_token">密码重置令牌</string>
<string name="token">令牌</string>
<string name="token_must_longer_than_32_byte">令牌必须大于32字节</string>

View File

@@ -55,6 +55,8 @@
<string name="account">Account</string>
<string name="warning">Warning</string>
<string name="delete">Delete</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<!--Permissions-->
<string name="click_to_activate">Click to activate</string>
@@ -68,17 +70,17 @@
<string name="activate_device_admin_command" translatable="false">dpm set-active-admin com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver</string>
<string name="activate_device_owner_command" translatable="false">dpm set-device-owner com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver</string>
<string name="device_info">Device info</string>
<string name="support_device_id_attestation">Support Device ID attestation: %1$s</string>
<string name="support_unique_device_attestation">Support unique device attestation: %1$s</string>
<string name="is_device_financed">Financed device: %1$s</string>
<string name="dpmrh">Device policy management role holder: %1$s</string>
<string name="support_device_id_attestation">Support Device ID attestation</string>
<string name="support_unique_device_attestation">Support unique device attestation</string>
<string name="financed_device">Financed device</string>
<string name="dpmrh">Device policy management role holder</string>
<!--es: encryption status-->
<string name="es_inactive">Inactive</string>
<string name="es_active">Active</string>
<string name="es_unsupported">Unsupported</string>
<string name="es_active_default_key">Active(default key)</string>
<string name="es_active_per_user">Active(per-user)</string>
<string name="activated_device_admin">Active device admins: %1$s</string>
<string name="activated_device_admin">Active device admins</string>
<string name="enrollment_specific_id">Enrollment specific ID</string>
<string name="org_name">Organization name</string>
<string name="disable_account_management">Disable account management</string>
@@ -134,7 +136,7 @@
<string name="backup_service">Backup service</string>
<string name="disable_bt_contact_share">Disable bluetooth contact sharing</string>
<string name="common_criteria_mode">Common criteria mode</string>
<string name="usb_signal">USB signal</string>
<string name="disable_usb_signal">Disable USB signal</string>
<string name="keyguard">Keyguard</string>
<string name="lock_now">Lock screen now</string>
<string name="evict_credential_encryptoon_key">Evict credential encryption key</string>
@@ -188,7 +190,7 @@
<string name="wipe_silently">Wipe silently</string>
<string name="wipe_data_warning">All data on your device will be ERASED</string>
<string name="wipe_work_profile_warning">Your work profile will be DELETED</string>
<string name="encrypt_status_is">Encrypt status: %1$s</string>
<string name="encryption_status">Encryption status</string>
<string name="frp_policy">FRP policy</string>
<string name="factory_reset_protection_policy">Factory reset protection policy</string>
<string name="frp_policy_not_supported">FRP policy is not supported on this device</string>
@@ -445,16 +447,15 @@
<string name="start_user_session_msg">Start user session message</string>
<string name="end_user_session_msg">End user session message</string>
<string name="user_info">User info</string>
<string name="is_user_unlocked">User unlocked: %1$s</string>
<string name="is_support_multi_user">Support multiuser: %1$s</string>
<string name="is_system_user">System user: %1$s</string>
<string name="is_admin_user">Admin user: %1$s</string>
<string name="is_headless_system_user">Headless system user: %1$s</string>
<string name="user_can_logout">User can logout: %1$s</string>
<string name="is_ephemeral_user">Ephemeral user: %1$s</string>
<string name="is_affiliated_user">Affiliated user: %1$s</string>
<string name="user_id_is">UserID%1$s</string>
<string name="user_serial_number_is">User serial number: %1$s</string>
<string name="support_multiuser">Support multiuser</string>
<string name="system_user">System user</string>
<string name="admin_user">Admin user</string>
<string name="headless_system_user">Headless system user</string>
<string name="logout_enabled">Logout enabled</string>
<string name="ephemeral_user">Ephemeral user</string>
<string name="affiliated_user">Affiliated user</string>
<string name="user_id">UserID</string>
<string name="user_serial_number">User serial number</string>
<string name="user_operation">User operation</string>
<string name="serial_number">Serial number</string>
<string name="use_uid">Use UID</string>
@@ -496,10 +497,9 @@
<string name="password_complexity_low">Low (Gesture password and characters repetition allowed)</string>
<string name="password_complexity_medium">Medium (Repetition disallowed, 4 characters at least)</string>
<string name="password_complexity_high">High (Repetition disallowed, 6 characters at least)</string>
<string name="current_password_complexity_is">Current password complexity: %1$s</string>
<string name="is_password_sufficient">Is password complexity sufficient: %1$s</string>
<string name="password_failed_attempts_is">Password failed attempts: %1$s</string>
<string name="is_using_unified_password">Unified password: %1$s</string>
<string name="current_password_complexity">Current password complexity</string>
<string name="password_sufficient">Password complexity sufficient</string>
<string name="unified_password">Unified password</string>
<string name="reset_password_token">Reset password token</string>
<string name="token">Token</string>
<string name="token_must_longer_than_32_byte">The token must be longer than 32-byte</string>