Hide some functions when unavailable

This commit is contained in:
BinTianqi
2024-09-07 10:44:59 +08:00
parent 4799a15909
commit 3d5b9efd96
7 changed files with 58 additions and 51 deletions

View File

@@ -183,12 +183,14 @@ private fun HomePage(navCtrl:NavHostController) {
val dpm = context.getDPM() val dpm = context.getDPM()
val receiver = context.getReceiver() val receiver = context.getReceiver()
val sharedPref = context.getSharedPreferences("data", Context.MODE_PRIVATE) val sharedPref = context.getSharedPreferences("data", Context.MODE_PRIVATE)
var activated by remember { mutableStateOf(false) }
var activateType by remember { mutableStateOf("") } var activateType by remember { mutableStateOf("") }
val deviceAdmin = context.isDeviceAdmin val deviceAdmin = context.isDeviceAdmin
val deviceOwner = context.isDeviceOwner val deviceOwner = context.isDeviceOwner
val profileOwner = context.isProfileOwner val profileOwner = context.isProfileOwner
val refreshStatus by dhizukuErrorStatus.collectAsState() val refreshStatus by dhizukuErrorStatus.collectAsState()
LaunchedEffect(refreshStatus) { LaunchedEffect(refreshStatus) {
activated = context.isDeviceAdmin
activateType = if(sharedPref.getBoolean("dhizuku", false)) context.getString(R.string.dhizuku) + " - " else "" activateType = if(sharedPref.getBoolean("dhizuku", false)) context.getString(R.string.dhizuku) + " - " else ""
activateType += context.getString( activateType += context.getString(
if(deviceOwner) { R.string.device_owner } if(deviceOwner) { R.string.device_owner }
@@ -217,14 +219,14 @@ private fun HomePage(navCtrl:NavHostController) {
) { ) {
Spacer(modifier = Modifier.padding(start = 22.dp)) Spacer(modifier = Modifier.padding(start = 22.dp))
Icon( Icon(
painter = painterResource(if(deviceAdmin) R.drawable.check_circle_fill1 else R.drawable.block_fill0), painter = painterResource(if(activated) R.drawable.check_circle_fill1 else R.drawable.block_fill0),
contentDescription = null, contentDescription = null,
tint = colorScheme.onPrimary tint = colorScheme.onPrimary
) )
Spacer(modifier = Modifier.padding(start = 10.dp)) Spacer(modifier = Modifier.padding(start = 10.dp))
Column { Column {
Text( Text(
text = stringResource(if(deviceAdmin) R.string.activated else R.string.deactivated), text = stringResource(if(activated) R.string.activated else R.string.deactivated),
style = typography.headlineSmall, style = typography.headlineSmall,
color = colorScheme.onPrimary, color = colorScheme.onPrimary,
modifier = Modifier.padding(bottom = 2.dp) modifier = Modifier.padding(bottom = 2.dp)

View File

@@ -62,6 +62,7 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme.typography import androidx.compose.material3.MaterialTheme.typography
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
@@ -110,6 +111,7 @@ import com.bintianqi.owndroid.ui.RadioButtonItem
import com.bintianqi.owndroid.ui.SubPageItem import com.bintianqi.owndroid.ui.SubPageItem
import com.bintianqi.owndroid.ui.SwitchItem import com.bintianqi.owndroid.ui.SwitchItem
import com.bintianqi.owndroid.ui.TopBar import com.bintianqi.owndroid.ui.TopBar
import com.bintianqi.owndroid.writeClipBoard
@Composable @Composable
fun Network(navCtrl: NavHostController) { fun Network(navCtrl: NavHostController) {
@@ -157,7 +159,18 @@ fun Network(navCtrl: NavHostController) {
onDismissRequest = { wifiMacDialog.value = false }, onDismissRequest = { wifiMacDialog.value = false },
confirmButton = { TextButton(onClick = { wifiMacDialog.value = false }) { Text(stringResource(R.string.confirm)) } }, confirmButton = { TextButton(onClick = { wifiMacDialog.value = false }) { Text(stringResource(R.string.confirm)) } },
title = { Text(stringResource(R.string.wifi_mac_addr)) }, title = { Text(stringResource(R.string.wifi_mac_addr)) },
text = { SelectionContainer { Text(dpm.getWifiMacAddress(receiver)?: stringResource(R.string.none)) } }, text = {
val mac = dpm.getWifiMacAddress(receiver)
OutlinedTextField(
value = mac ?: stringResource(R.string.none),
onValueChange = {}, readOnly = true, modifier = Modifier.fillMaxWidth(), textStyle = typography.titleMedium,
trailingIcon = {
if(mac != null) IconButton(onClick = { writeClipBoard(context, mac) }) {
Icon(painter = painterResource(R.drawable.content_copy_fill0), contentDescription = stringResource(R.string.copy))
}
}
)
},
modifier = Modifier.fillMaxWidth() modifier = Modifier.fillMaxWidth()
) )
} }
@@ -222,7 +235,7 @@ private fun Switches() {
Spacer(Modifier.padding(vertical = 5.dp)) Spacer(Modifier.padding(vertical = 5.dp))
if(VERSION.SDK_INT >= 33 && deviceOwner) { if(VERSION.SDK_INT >= 33 && deviceOwner) {
SwitchItem( SwitchItem(
R.string.preferential_network_service, stringResource(R.string.developing), R.drawable.globe_fill0, R.string.preferential_network_service, "", R.drawable.globe_fill0,
{ dpm.isPreferentialNetworkServiceEnabled }, { dpm.isPreferentialNetworkServiceEnabled = it }, padding = false { dpm.isPreferentialNetworkServiceEnabled }, { dpm.isPreferentialNetworkServiceEnabled = it }, padding = false
) )
} }

View File

@@ -167,7 +167,7 @@ private fun Home(navCtrl:NavHostController, scrollState: ScrollState) {
if(VERSION.SDK_INT >= 26 && (deviceOwner || profileOwner)) { if(VERSION.SDK_INT >= 26 && (deviceOwner || profileOwner)) {
SubPageItem(R.string.required_strong_auth_timeout, "", R.drawable.fingerprint_off_fill0) { navCtrl.navigate("RequiredStrongAuthTimeout") } SubPageItem(R.string.required_strong_auth_timeout, "", R.drawable.fingerprint_off_fill0) { navCtrl.navigate("RequiredStrongAuthTimeout") }
} }
if(deviceOwner || profileOwner) { if(VERSION.SDK_INT < 31 && (deviceOwner || profileOwner)) {
SubPageItem(R.string.required_password_quality, "", R.drawable.password_fill0) { navCtrl.navigate("RequirePasswordQuality") } SubPageItem(R.string.required_password_quality, "", R.drawable.password_fill0) { navCtrl.navigate("RequirePasswordQuality") }
} }
Spacer(Modifier.padding(vertical = 30.dp)) Spacer(Modifier.padding(vertical = 30.dp))
@@ -736,9 +736,6 @@ private fun PasswordQuality() {
Spacer(Modifier.padding(vertical = 10.dp)) Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.required_password_quality), style = typography.headlineLarge) Text(text = stringResource(R.string.required_password_quality), style = typography.headlineLarge)
Spacer(Modifier.padding(vertical = 5.dp)) Spacer(Modifier.padding(vertical = 5.dp))
Text(text = stringResource(R.string.password_complexity_instead_password_quality))
if(VERSION.SDK_INT >= 31) { Text(text = stringResource(R.string.password_quality_deprecated_desc), color = colorScheme.error) }
Spacer(Modifier.padding(vertical = 5.dp))
for(index in 1..6) { for(index in 1..6) {
RadioButtonItem(passwordQuality[index].second, selectedItem == passwordQuality[index].first, { selectedItem = passwordQuality[index].first }) RadioButtonItem(passwordQuality[index].second, selectedItem == passwordQuality[index].first, { selectedItem = passwordQuality[index].first })
} }

View File

@@ -26,6 +26,7 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
@@ -38,6 +39,7 @@ import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.R import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.backToHomeStateFlow import com.bintianqi.owndroid.backToHomeStateFlow
import com.bintianqi.owndroid.ui.* import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.writeClipBoard
import com.rosan.dhizuku.api.Dhizuku import com.rosan.dhizuku.api.Dhizuku
import com.rosan.dhizuku.api.DhizukuRequestPermissionListener import com.rosan.dhizuku.api.DhizukuRequestPermissionListener
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -74,7 +76,6 @@ fun DpmPermissions(navCtrl:NavHostController) {
composable(route = "DeviceOwner") { DeviceOwner() } composable(route = "DeviceOwner") { DeviceOwner() }
composable(route = "DeviceInfo") { DeviceInfo() } composable(route = "DeviceInfo") { DeviceInfo() }
composable(route = "OrgID") { OrgID() } composable(route = "OrgID") { OrgID() }
composable(route = "SpecificID") { SpecificID() }
composable(route = "OrgName") { OrgName() } composable(route = "OrgName") { OrgName() }
composable(route = "DisableAccountManagement") { DisableAccountManagement() } composable(route = "DisableAccountManagement") { DisableAccountManagement() }
composable(route = "LockScreenInfo") { LockScreenInfo() } composable(route = "LockScreenInfo") { LockScreenInfo() }
@@ -84,6 +85,7 @@ fun DpmPermissions(navCtrl:NavHostController) {
} }
} }
@SuppressLint("NewApi")
@Composable @Composable
private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) { private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
val context = LocalContext.current val context = LocalContext.current
@@ -93,6 +95,8 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
val deviceAdmin = context.isDeviceAdmin val deviceAdmin = context.isDeviceAdmin
val deviceOwner = context.isDeviceOwner val deviceOwner = context.isDeviceOwner
val profileOwner = context.isProfileOwner val profileOwner = context.isProfileOwner
var enrollmentIdDialog by remember { mutableStateOf(false) }
val enrollmentSpecificId = if(VERSION.SDK_INT >= 31 && (deviceOwner || profileOwner)) dpm.enrollmentSpecificId else ""
Column(modifier = Modifier.fillMaxSize().verticalScroll(listScrollState)) { Column(modifier = Modifier.fillMaxSize().verticalScroll(listScrollState)) {
Text( Text(
text = stringResource(R.string.permission), text = stringResource(R.string.permission),
@@ -112,9 +116,9 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
R.string.device_admin, stringResource(if(deviceAdmin) R.string.activated else R.string.deactivated), R.string.device_admin, stringResource(if(deviceAdmin) R.string.activated else R.string.deactivated),
operation = { localNavCtrl.navigate("DeviceAdmin") } operation = { localNavCtrl.navigate("DeviceAdmin") }
) )
if(!deviceOwner) { if(profileOwner) {
SubPageItem( SubPageItem(
R.string.profile_owner, stringResource(if(profileOwner) R.string.activated else R.string.deactivated), R.string.profile_owner, stringResource(R.string.activated),
operation = { localNavCtrl.navigate("ProfileOwner") } operation = { localNavCtrl.navigate("ProfileOwner") }
) )
} }
@@ -131,7 +135,9 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
} }
if(VERSION.SDK_INT >= 31 && (profileOwner || deviceOwner)) { 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) { localNavCtrl.navigate("OrgID") }
SubPageItem(R.string.enrollment_specific_id, "", R.drawable.id_card_fill0) { localNavCtrl.navigate("SpecificID") } }
if(enrollmentSpecificId != "") {
SubPageItem(R.string.enrollment_specific_id, "", R.drawable.id_card_fill0) { enrollmentIdDialog = true }
} }
if(deviceOwner || profileOwner) { if(deviceOwner || profileOwner) {
SubPageItem(R.string.disable_account_management, "", R.drawable.account_circle_fill0) { localNavCtrl.navigate("DisableAccountManagement") } SubPageItem(R.string.disable_account_management, "", R.drawable.account_circle_fill0) { localNavCtrl.navigate("DisableAccountManagement") }
@@ -147,6 +153,27 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
} }
Spacer(Modifier.padding(vertical = 30.dp)) 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))
}
}
)
},
onDismissRequest = { enrollmentIdDialog = false },
confirmButton = {
TextButton(onClick = { enrollmentIdDialog = false }) {
Text(stringResource(R.string.confirm))
}
}
)
} }
private fun toggleDhizukuMode(status: Boolean, context: Context) { private fun toggleDhizukuMode(status: Boolean, context: Context) {
@@ -466,7 +493,7 @@ private fun OrgID() {
Text(text = stringResource(R.string.org_id), style = typography.headlineLarge) Text(text = stringResource(R.string.org_id), style = typography.headlineLarge)
Spacer(Modifier.padding(vertical = 5.dp)) Spacer(Modifier.padding(vertical = 5.dp))
OutlinedTextField( OutlinedTextField(
value = orgId, onValueChange = {orgId=it}, value = orgId, onValueChange = { orgId=it },
label = { Text(stringResource(R.string.org_id)) }, label = { Text(stringResource(R.string.org_id)) },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Ascii, imeAction = ImeAction.Done), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Ascii, imeAction = ImeAction.Done),
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus() }), keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus() }),
@@ -479,35 +506,18 @@ private fun OrgID() {
Spacer(Modifier.padding(vertical = 5.dp)) Spacer(Modifier.padding(vertical = 5.dp))
Button( Button(
onClick = { onClick = {
dpm.setOrganizationId(orgId) try {
Toast.makeText(context, R.string.success,Toast.LENGTH_SHORT).show() 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, enabled = orgId.length in 6..64,
modifier = Modifier.fillMaxWidth() modifier = Modifier.fillMaxWidth()
) { ) {
Text(stringResource(R.string.apply)) Text(stringResource(R.string.apply))
} }
Spacer(Modifier.padding(vertical = 5.dp))
Information{ Text(text = stringResource(R.string.get_specific_id_after_set_org_id)) }
}
}
@SuppressLint("NewApi")
@Composable
private fun SpecificID() {
val context = LocalContext.current
val dpm = context.getDPM()
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)) {
val specificId = dpm.enrollmentSpecificId
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.enrollment_specific_id), style = typography.headlineLarge)
Spacer(Modifier.padding(vertical = 5.dp))
if(specificId != "") {
SelectionContainer(modifier = Modifier.horizontalScroll(rememberScrollState())) { Text(specificId) }
CopyTextButton(R.string.copy, specificId)
}else{
Text(stringResource(R.string.require_set_org_id))
}
} }
} }

View File

@@ -79,7 +79,6 @@
<string name="es_active_per_user">Aktif(Kullanıcı Başına)</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: %1$s</string>
<string name="enrollment_specific_id">Kayıt Özel Kimliği</string> <string name="enrollment_specific_id">Kayıt Özel Kimliği</string>
<string name="require_set_org_id">Organizasyon Kimliği Gerekli</string>
<string name="org_name">Organizasyon Adı</string> <string name="org_name">Organizasyon Adı</string>
<string name="disable_account_management">Hesap Yönetimini Devre Dışı Bırak</string> <string name="disable_account_management">Hesap Yönetimini Devre Dışı Bırak</string>
<string name="account_types_are">Hesap Türleri: </string> <string name="account_types_are">Hesap Türleri: </string>
@@ -244,7 +243,6 @@
<string name="log_file_size_is">Log file size: %1$s</string> <!--TODO--> <string name="log_file_size_is">Log file size: %1$s</string> <!--TODO-->
<string name="delete_logs">Delete logs</string> <!--TODO--> <string name="delete_logs">Delete logs</string> <!--TODO-->
<string name="export_logs">Export logs</string> <!--TODO--> <string name="export_logs">Export logs</string> <!--TODO-->
<string name="retrieve">Geri al</string>
<string name="wifi_auth_keypair">WiFi anahtar çifti</string> <string name="wifi_auth_keypair">WiFi anahtar çifti</string>
<string name="keypair">Anahtar çifti</string> <string name="keypair">Anahtar çifti</string>
<string name="override_apn_settings">APN ayarlarını geçersiz kıl</string> <string name="override_apn_settings">APN ayarlarını geçersiz kıl</string>
@@ -290,7 +288,6 @@
<string name="clear_cross_profile_filters">Tüm filtreleri temizle</string> <string name="clear_cross_profile_filters">Tüm filtreleri temizle</string>
<string name="org_id">Kuruluş Kimliği</string> <string name="org_id">Kuruluş Kimliği</string>
<string name="length_6_to_64">Uzunluk 6 ile 64 karakter arasında olmalıdır</string> <string name="length_6_to_64">Uzunluk 6 ile 64 karakter arasında olmalıdır</string>
<string name="get_specific_id_after_set_org_id">Bunu ayarladıktan sonra cihaz spesifik Kimlik alabilirsiniz. </string>
<string name="delete_work_profile">Delete work profile</string> <!--TODO--> <string name="delete_work_profile">Delete work profile</string> <!--TODO-->
<!--AppManager--> <!--AppManager-->
@@ -532,8 +529,6 @@
<string name="password_quality_biometrics_weak">Biyometrik (Zayıf)</string> <string name="password_quality_biometrics_weak">Biyometrik (Zayıf)</string>
<string name="password_quality_numeric_complex">Sayısal karmaşık (Tekrar eden karakter yok)</string> <string name="password_quality_numeric_complex">Sayısal karmaşık (Tekrar eden karakter yok)</string>
<string name="required_password_quality">Gereken şifre kalitesi</string> <string name="required_password_quality">Gereken şifre kalitesi</string>
<string name="password_complexity_instead_password_quality">Şifre karmaşıklığı ayarlamak şifre kalitesi ayarlarını devre dışı bırakacaktır.</string>
<string name="password_quality_deprecated_desc">Kullanım dışı. Bunun yerine "Gereken şifre karmaşıklığı" kullanın.</string>
<string name="activate_reset_password_token_here">Şifre sıfırlama jetonunu burada etkinleştirin.</string> <string name="activate_reset_password_token_here">Şifre sıfırlama jetonunu burada etkinleştirin.</string>
<!--Settings&About--> <!--Settings&About-->

View File

@@ -74,7 +74,6 @@
<string name="es_active_per_user">每个用户分别加密</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: %1$s</string>
<string name="enrollment_specific_id">设备注册专用ID</string> <string name="enrollment_specific_id">设备注册专用ID</string>
<string name="require_set_org_id">需要设置组织ID</string>
<string name="org_name">组织名称</string> <string name="org_name">组织名称</string>
<string name="disable_account_management">禁用账号管理</string> <string name="disable_account_management">禁用账号管理</string>
<string name="account_types_are">账号类型:</string> <string name="account_types_are">账号类型:</string>
@@ -239,7 +238,6 @@
<string name="log_file_size_is">日志文件大小:%1$s</string> <string name="log_file_size_is">日志文件大小:%1$s</string>
<string name="delete_logs">删除日志</string> <string name="delete_logs">删除日志</string>
<string name="export_logs">导出日志</string> <string name="export_logs">导出日志</string>
<string name="retrieve">收集</string>
<string name="wifi_auth_keypair">WiFi密钥对</string> <string name="wifi_auth_keypair">WiFi密钥对</string>
<string name="keypair">密钥对</string> <string name="keypair">密钥对</string>
<string name="override_apn_settings">APN设置</string> <string name="override_apn_settings">APN设置</string>
@@ -285,7 +283,6 @@
<string name="clear_cross_profile_filters">清除所有过滤器</string> <string name="clear_cross_profile_filters">清除所有过滤器</string>
<string name="org_id">组织ID</string> <string name="org_id">组织ID</string>
<string name="length_6_to_64">长度应在6~64个字符之间</string> <string name="length_6_to_64">长度应在6~64个字符之间</string>
<string name="get_specific_id_after_set_org_id">设置组织ID后才能获取设备唯一标识码</string>
<string name="delete_work_profile">删除工作资料</string> <string name="delete_work_profile">删除工作资料</string>
<!--AppManage--> <!--AppManage-->
@@ -524,8 +521,6 @@
<string name="password_quality_biometrics_weak">生物识别(弱)</string> <string name="password_quality_biometrics_weak">生物识别(弱)</string>
<string name="password_quality_numeric_complex">复杂数字(无连续性)</string> <string name="password_quality_numeric_complex">复杂数字(无连续性)</string>
<string name="required_password_quality">密码质量要求</string> <string name="required_password_quality">密码质量要求</string>
<string name="password_complexity_instead_password_quality">设置密码复杂度将会取代密码质量</string>
<string name="password_quality_deprecated_desc">已弃用,请使用上面的”密码复杂度要求“</string>
<string name="activate_reset_password_token_here">在这里激活密码重置令牌</string> <string name="activate_reset_password_token_here">在这里激活密码重置令牌</string>
<!--Settings&About--> <!--Settings&About-->

View File

@@ -80,7 +80,6 @@
<string name="es_active_per_user">Active(per-user)</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: %1$s</string>
<string name="enrollment_specific_id">Enrollment specific ID</string> <string name="enrollment_specific_id">Enrollment specific ID</string>
<string name="require_set_org_id">Require organization ID</string>
<string name="org_name">Organization name</string> <string name="org_name">Organization name</string>
<string name="disable_account_management">Disable account management</string> <string name="disable_account_management">Disable account management</string>
<string name="account_types_are">Account types: </string> <string name="account_types_are">Account types: </string>
@@ -248,7 +247,6 @@
<string name="log_file_size_is">Log file size: %1$s</string> <string name="log_file_size_is">Log file size: %1$s</string>
<string name="delete_logs">Delete logs</string> <string name="delete_logs">Delete logs</string>
<string name="export_logs">Export logs</string> <string name="export_logs">Export logs</string>
<string name="retrieve">Retrieve</string>
<string name="wifi_auth_keypair">WiFi keypair</string> <string name="wifi_auth_keypair">WiFi keypair</string>
<string name="keypair">Keypair</string> <string name="keypair">Keypair</string>
<string name="override_apn_settings">APN settings</string> <string name="override_apn_settings">APN settings</string>
@@ -297,7 +295,6 @@
<string name="clear_cross_profile_filters">Clear all filters</string> <string name="clear_cross_profile_filters">Clear all filters</string>
<string name="org_id">Organization ID</string> <string name="org_id">Organization ID</string>
<string name="length_6_to_64">The length should be between 6~64 characters</string> <string name="length_6_to_64">The length should be between 6~64 characters</string>
<string name="get_specific_id_after_set_org_id">You can get device specific ID after set this. </string>
<string name="delete_work_profile">Delete work profile</string> <string name="delete_work_profile">Delete work profile</string>
<!--AppManager--> <!--AppManager-->
@@ -537,8 +534,6 @@
<string name="password_quality_biometrics_weak">Biometrics (Weak)</string> <string name="password_quality_biometrics_weak">Biometrics (Weak)</string>
<string name="password_quality_numeric_complex">Numeric complex (No repeating characters)</string> <string name="password_quality_numeric_complex">Numeric complex (No repeating characters)</string>
<string name="required_password_quality">Required password quality</string> <string name="required_password_quality">Required password quality</string>
<string name="password_complexity_instead_password_quality">Set password complexity will disable password quality settings. </string>
<string name="password_quality_deprecated_desc">Deprecated. Use "Required password complexity" instead. </string>
<string name="activate_reset_password_token_here">Activate reset password token here. </string> <string name="activate_reset_password_token_here">Activate reset password token here. </string>
<!--Settings&About--> <!--Settings&About-->