diff --git a/Guide.md b/Guide.md
index 270dab1..337e7fd 100644
--- a/Guide.md
+++ b/Guide.md
@@ -623,7 +623,7 @@ adb shell pm remove-user USER_ID
如果是受管理的用户,只能管理受管理用户中的应用
-除了安装应用,所有的操作都需要应用的包名,你可以通过ADB命令查看已安装应用的包名
+除了安装应用,所有的操作都需要应用的包名,你可以通过ADB命令查看所有已安装应用的包名
```shell
adb shell pm list packages
@@ -830,7 +830,7 @@ Profile owner无法禁用部分功能,工作资料中部分功能无效,wear
- (24) 修改用户头像
- 跨用户复制(包括工作资料)
- (28) 分享至工作应用
-- (28) 个人和工作密码相同
+- (28) 个人和工作密码相同(只能被工作资料Profile owner设置)
### 其他
diff --git a/app/src/main/java/com/binbin/androidowner/MainActivity.kt b/app/src/main/java/com/binbin/androidowner/MainActivity.kt
index 67f34a3..b41f8cd 100644
--- a/app/src/main/java/com/binbin/androidowner/MainActivity.kt
+++ b/app/src/main/java/com/binbin/androidowner/MainActivity.kt
@@ -165,7 +165,7 @@ private fun HomePage(navCtrl:NavHostController){
if(activateType!=""){ Text(text = activateType, color = colorScheme.onPrimary, modifier = Modifier.padding(start = 2.dp)) }
}
}
- HomePageItem(R.string.device_ctrl, R.drawable.mobile_phone_fill0, "SystemManage", navCtrl)
+ HomePageItem(R.string.system_manage, R.drawable.mobile_phone_fill0, "SystemManage", navCtrl)
if(VERSION.SDK_INT>=24&&(isDeviceOwner(myDpm))||isProfileOwner(myDpm)){ HomePageItem(R.string.network, R.drawable.wifi_fill0, "Network",navCtrl) }
if(
(VERSION.SDK_INT<24&&!isDeviceOwner(myDpm))||(
@@ -175,11 +175,11 @@ private fun HomePage(navCtrl:NavHostController){
){
HomePageItem(R.string.work_profile, R.drawable.work_fill0, "ManagedProfile",navCtrl)
}
- HomePageItem(R.string.app_manage, R.drawable.apps_fill0, "ApplicationManage", navCtrl)
+ HomePageItem(R.string.app_manager, R.drawable.apps_fill0, "ApplicationManage", navCtrl)
if(VERSION.SDK_INT>=24){
HomePageItem(R.string.user_restrict, R.drawable.person_off, "UserRestriction", navCtrl)
}
- HomePageItem(R.string.user_manage,R.drawable.manage_accounts_fill0,"UserManage",navCtrl)
+ HomePageItem(R.string.user_manager,R.drawable.manage_accounts_fill0,"UserManage",navCtrl)
HomePageItem(R.string.password_and_keyguard, R.drawable.password_fill0, "Password",navCtrl)
HomePageItem(R.string.setting, R.drawable.settings_fill0, "AppSetting",navCtrl)
Spacer(Modifier.padding(vertical = 20.dp))
diff --git a/app/src/main/java/com/binbin/androidowner/dpm/ApplicationManage.kt b/app/src/main/java/com/binbin/androidowner/dpm/ApplicationManage.kt
index a057f5d..56c0eb3 100644
--- a/app/src/main/java/com/binbin/androidowner/dpm/ApplicationManage.kt
+++ b/app/src/main/java/com/binbin/androidowner/dpm/ApplicationManage.kt
@@ -93,7 +93,7 @@ fun ApplicationManage(navCtrl:NavHostController){
navigationIcon = {NavIcon{if(backStackEntry?.destination?.route=="Home"){navCtrl.navigateUp()}else{localNavCtrl.navigateUp()}}},
colors = TopAppBarDefaults.topAppBarColors(containerColor = colorScheme.surfaceVariant)
)*/
- TopBar(backStackEntry, navCtrl, localNavCtrl){Text(text = stringResource(titleMap[backStackEntry?.destination?.route] ?: R.string.app_manage))}
+ TopBar(backStackEntry, navCtrl, localNavCtrl){Text(text = stringResource(titleMap[backStackEntry?.destination?.route] ?: R.string.app_manager))}
}
){ paddingValues->
Column(modifier = Modifier.fillMaxSize().padding(top = paddingValues.calculateTopPadding())){
@@ -483,8 +483,6 @@ private fun CrossProfileWidget(pkgName: String){
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.cross_profile_widget), style = typography.headlineLarge)
Spacer(Modifier.padding(vertical = 5.dp))
- Text(text = stringResource(R.string.cross_profile_widget_desc))
- Spacer(Modifier.padding(vertical = 5.dp))
Text(text = stringResource(R.string.app_list_is))
SelectionContainer(modifier = Modifier.horizontalScroll(rememberScrollState()).animateContentSize(Animations().animateListSize)){
Text(text = if(list==""){stringResource(R.string.none)}else{list})
diff --git a/app/src/main/java/com/binbin/androidowner/dpm/ManagedProfile.kt b/app/src/main/java/com/binbin/androidowner/dpm/ManagedProfile.kt
index d76fc9e..63da861 100644
--- a/app/src/main/java/com/binbin/androidowner/dpm/ManagedProfile.kt
+++ b/app/src/main/java/com/binbin/androidowner/dpm/ManagedProfile.kt
@@ -154,7 +154,7 @@ private fun OrgOwnedProfile(){
color = colorScheme.onTertiaryContainer
)
}
- CopyTextButton(myContext, R.string.copy_code, stringResource(R.string.activate_org_profile_command, Binder.getCallingUid()/100000))
+ CopyTextButton(myContext, R.string.copy_command, stringResource(R.string.activate_org_profile_command, Binder.getCallingUid()/100000))
}
}
}
diff --git a/app/src/main/java/com/binbin/androidowner/dpm/Password.kt b/app/src/main/java/com/binbin/androidowner/dpm/Password.kt
index b353305..962ec04 100644
--- a/app/src/main/java/com/binbin/androidowner/dpm/Password.kt
+++ b/app/src/main/java/com/binbin/androidowner/dpm/Password.kt
@@ -326,8 +326,6 @@ private fun PasswordComplexity(){
){
Text(stringResource(R.string.require_set_new_password))
}
- Spacer(Modifier.padding(vertical = 5.dp))
- Information{Text(text = stringResource(R.string.password_ordered_desc))}
Spacer(Modifier.padding(vertical = 30.dp))
}
}
@@ -617,8 +615,6 @@ private fun PasswordQuality(){
) {
Text(stringResource(R.string.apply))
}
- Spacer(Modifier.padding(vertical = 5.dp))
- Information{Text(text = stringResource(R.string.password_ordered_desc))}
Spacer(Modifier.padding(vertical = 30.dp))
}
}
diff --git a/app/src/main/java/com/binbin/androidowner/dpm/Permissions.kt b/app/src/main/java/com/binbin/androidowner/dpm/Permissions.kt
index 58de0f3..57286cb 100644
--- a/app/src/main/java/com/binbin/androidowner/dpm/Permissions.kt
+++ b/app/src/main/java/com/binbin/androidowner/dpm/Permissions.kt
@@ -130,7 +130,7 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState){
SubPageItem(R.string.account_types_management_disabled,"",R.drawable.account_circle_fill0){localNavCtrl.navigate("NoManagementAccount")}
}
if(VERSION.SDK_INT>=24&&isDeviceOwner(myDpm)){
- SubPageItem(R.string.owner_lockscr_info,"",R.drawable.screen_lock_portrait_fill0){localNavCtrl.navigate("LockScreenInfo")}
+ SubPageItem(R.string.device_owner_lock_screen_info,"",R.drawable.screen_lock_portrait_fill0){localNavCtrl.navigate("LockScreenInfo")}
}
if(VERSION.SDK_INT>=24&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm))){
SubPageItem(R.string.support_msg,"",R.drawable.chat_fill0){localNavCtrl.navigate("SupportMsg")}
@@ -151,10 +151,10 @@ private fun LockScreenInfo(){
val focusMgr = LocalFocusManager.current
var infoText by remember{mutableStateOf(myDpm.deviceOwnerLockScreenInfo?.toString() ?: "")}
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
- Text(text = stringResource(R.string.owner_lockscr_info), style = typography.headlineLarge)
+ Text(text = stringResource(R.string.device_owner_lock_screen_info), style = typography.headlineLarge)
OutlinedTextField(
value = infoText,
- label = {Text(stringResource(R.string.owner_lockscr_info))},
+ label = {Text(stringResource(R.string.device_owner_lock_screen_info))},
onValueChange = { infoText=it },
modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 4.dp)
)
@@ -214,7 +214,7 @@ private fun DeviceAdmin(navCtrl: NavHostController){
SelectionContainer {
Text(text = stringResource(R.string.activate_device_admin_command))
}
- CopyTextButton(myContext, R.string.copy_code, stringResource(R.string.activate_device_admin_command))
+ CopyTextButton(myContext, R.string.copy_command, stringResource(R.string.activate_device_admin_command))
}
}
}
@@ -241,7 +241,7 @@ private fun ProfileOwner(){
SelectionContainer{
Text(text = stringResource(R.string.activate_profile_owner_command))
}
- CopyTextButton(myContext, R.string.copy_code, stringResource(R.string.activate_profile_owner_command))
+ CopyTextButton(myContext, R.string.copy_command, stringResource(R.string.activate_profile_owner_command))
}
}
}
@@ -271,7 +271,7 @@ private fun DeviceOwner(navCtrl: NavHostController){
SelectionContainer{
Text(text = stringResource(R.string.activate_device_owner_command))
}
- CopyTextButton(myContext, R.string.copy_code, stringResource(R.string.activate_device_owner_command))
+ CopyTextButton(myContext, R.string.copy_command, stringResource(R.string.activate_device_owner_command))
}
}
}
diff --git a/app/src/main/java/com/binbin/androidowner/dpm/ShizukuActivate.kt b/app/src/main/java/com/binbin/androidowner/dpm/ShizukuActivate.kt
index 6eefe6e..962ba8f 100644
--- a/app/src/main/java/com/binbin/androidowner/dpm/ShizukuActivate.kt
+++ b/app/src/main/java/com/binbin/androidowner/dpm/ShizukuActivate.kt
@@ -48,9 +48,6 @@ fun ShizukuActivate(){
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val focusMgr = LocalFocusManager.current
- val sharedPref = LocalContext.current.getSharedPreferences("data", MODE_PRIVATE)
- val isWear = sharedPref.getBoolean("isWear",false)
- val bodyTextStyle = if(isWear){ typography.bodyMedium }else{ typography.bodyLarge }
val filesDir = myContext.filesDir
LaunchedEffect(Unit){ extractRish(myContext) }
val coScope = rememberCoroutineScope()
@@ -64,7 +61,7 @@ fun ShizukuActivate(){
if(Binder.getCallingUid()/100000!=0){
Row{
Icon(imageVector = Icons.Rounded.Warning, contentDescription = null, tint = colorScheme.onErrorContainer)
- Text(text = stringResource(R.string.not_primary_user_not_support_shizuku), style = bodyTextStyle, color = colorScheme.onErrorContainer)
+ Text(text = stringResource(R.string.not_primary_user_not_support_shizuku), color = colorScheme.onErrorContainer)
}
}
Button(
@@ -150,7 +147,7 @@ fun ShizukuActivate(){
){
Column {
Text(text = stringResource(R.string.org_owned_work_profile), style = typography.titleLarge, color = colorScheme.onPrimaryContainer)
- Text(text = stringResource(R.string.input_userid_of_work_profile), style = bodyTextStyle)
+ Text(text = stringResource(R.string.input_userid_of_work_profile))
var inputUserID by remember{mutableStateOf("")}
OutlinedTextField(
value = inputUserID, onValueChange = {inputUserID=it},
@@ -182,7 +179,7 @@ fun ShizukuActivate(){
}
SelectionContainer(modifier = Modifier.align(Alignment.Start).horizontalScroll(outputTextScrollState)){
- Text(text = outputText, style = bodyTextStyle, softWrap = false, modifier = Modifier.padding(4.dp))
+ Text(text = outputText, softWrap = false, modifier = Modifier.padding(4.dp))
}
Spacer(Modifier.padding(vertical = 30.dp))
diff --git a/app/src/main/java/com/binbin/androidowner/dpm/SystemManage.kt b/app/src/main/java/com/binbin/androidowner/dpm/SystemManage.kt
index 9b5fabf..e30360b 100644
--- a/app/src/main/java/com/binbin/androidowner/dpm/SystemManage.kt
+++ b/app/src/main/java/com/binbin/androidowner/dpm/SystemManage.kt
@@ -78,7 +78,7 @@ fun SystemManage(navCtrl:NavHostController){
TopBar(backStackEntry,navCtrl,localNavCtrl){
if(backStackEntry?.destination?.route=="Home"&&scrollState.maxValue>80){
Text(
- text = stringResource(R.string.device_ctrl),
+ text = stringResource(R.string.system_manage),
modifier = Modifier.alpha((maxOf(scrollState.value-30,0)).toFloat()/80)
)
}
@@ -116,7 +116,7 @@ private fun Home(navCtrl: NavHostController,scrollState: ScrollState){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState)){
- Text(text = stringResource(R.string.device_ctrl), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 5.dp, start = 15.dp))
+ Text(text = stringResource(R.string.system_manage), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 5.dp, start = 15.dp))
if(isDeviceOwner(myDpm)||isProfileOwner(myDpm)){
SubPageItem(R.string.options,"",R.drawable.tune_fill0){navCtrl.navigate("Switches")}
}
@@ -168,7 +168,7 @@ private fun Switches(){
)
}
if(isDeviceOwner(myDpm)||isProfileOwner(myDpm)){
- SwitchItem(R.string.disable_scrcap, stringResource(R.string.aosp_scrrec_also_work),R.drawable.screenshot_fill0,
+ SwitchItem(R.string.disable_screenshot, stringResource(R.string.also_disable_aosp_screen_record),R.drawable.screenshot_fill0,
{myDpm.getScreenCaptureDisabled(null)},{myDpm.setScreenCaptureDisabled(myComponent,it) }
)
}
@@ -437,7 +437,7 @@ private fun NearbyStreamingPolicy(){
}
var notificationPolicy by remember{mutableIntStateOf(myDpm.nearbyNotificationStreamingPolicy)}
Spacer(Modifier.padding(vertical = 10.dp))
- Text(text = stringResource(R.string.nearby_notifi_streaming), style = typography.titleLarge)
+ Text(text = stringResource(R.string.nearby_notification_streaming), style = typography.titleLarge)
Spacer(Modifier.padding(vertical = 3.dp))
RadioButtonItem(stringResource(R.string.decide_by_user),{notificationPolicy == NEARBY_STREAMING_NOT_CONTROLLED_BY_POLICY},{notificationPolicy = NEARBY_STREAMING_NOT_CONTROLLED_BY_POLICY})
RadioButtonItem(stringResource(R.string.enabled),{notificationPolicy == NEARBY_STREAMING_ENABLED},{notificationPolicy = NEARBY_STREAMING_ENABLED})
@@ -666,7 +666,7 @@ private fun SecurityLogs(){
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
- Text(text = stringResource(R.string.retrieve_security_logs), style = typography.headlineLarge)
+ Text(text = stringResource(R.string.security_logs), style = typography.headlineLarge)
Spacer(Modifier.padding(vertical = 5.dp))
Text(text = stringResource(R.string.developing))
SwitchItem(R.string.enable,"",null,{myDpm.isSecurityLoggingEnabled(myComponent)},{myDpm.setSecurityLoggingEnabled(myComponent,it)})
diff --git a/app/src/main/java/com/binbin/androidowner/dpm/UserManage.kt b/app/src/main/java/com/binbin/androidowner/dpm/UserManage.kt
index a18da00..bab8d5c 100644
--- a/app/src/main/java/com/binbin/androidowner/dpm/UserManage.kt
+++ b/app/src/main/java/com/binbin/androidowner/dpm/UserManage.kt
@@ -69,7 +69,7 @@ fun UserManage(navCtrl:NavHostController) {
TopBar(backStackEntry,navCtrl,localNavCtrl){
if(backStackEntry?.destination?.route=="Home"&&scrollState.maxValue>80){
Text(
- text = stringResource(R.string.user_manage),
+ text = stringResource(R.string.user_manager),
modifier = Modifier.alpha((maxOf(scrollState.value-30,0)).toFloat()/80)
)
}
@@ -101,7 +101,7 @@ private fun Home(navCtrl: NavHostController,scrollState: ScrollState){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState)){
- Text(text = stringResource(R.string.user_manage), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 5.dp, start = 15.dp))
+ Text(text = stringResource(R.string.user_manager), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 5.dp, start = 15.dp))
SubPageItem(R.string.user_info,"",R.drawable.person_fill0){navCtrl.navigate("UserInfo")}
SubPageItem(R.string.user_operation,"",R.drawable.sync_alt_fill0){navCtrl.navigate("UserOperation")}
if(VERSION.SDK_INT>=24&&isDeviceOwner(myDpm)){
@@ -379,8 +379,6 @@ private fun AffiliationID(){
) {
Text(stringResource(R.string.apply))
}
- Spacer(Modifier.padding(vertical = 5.dp))
- Information{Text(text = stringResource(R.string.affiliation_id_desc))}
Spacer(Modifier.padding(vertical = 30.dp))
}
}
@@ -501,7 +499,7 @@ private fun UserIcon(){
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.change_user_icon), style = typography.headlineLarge)
Spacer(Modifier.padding(vertical = 5.dp))
- Text(text = stringResource(R.string.pick_a_rect_picture))
+ Text(text = stringResource(R.string.pick_a_square_image))
Spacer(Modifier.padding(vertical = 5.dp))
CheckBoxItem(stringResource(R.string.file_picker_instead_gallery),{getContent},{getContent=!getContent})
Spacer(Modifier.padding(vertical = 5.dp))
diff --git a/app/src/main/java/com/binbin/androidowner/dpm/UserRestriction.kt b/app/src/main/java/com/binbin/androidowner/dpm/UserRestriction.kt
index 9b13008..d4bca34 100644
--- a/app/src/main/java/com/binbin/androidowner/dpm/UserRestriction.kt
+++ b/app/src/main/java/com/binbin/androidowner/dpm/UserRestriction.kt
@@ -250,7 +250,7 @@ private class RestrictionData{
if(VERSION.SDK_INT>=28){list += Restriction(UserManager.DISALLOW_CONFIG_LOCATION,R.string.config_location,"",R.drawable.location_on_fill0)}
if(VERSION.SDK_INT>=22){list += Restriction(UserManager.DISALLOW_OUTGOING_BEAM,R.string.outgoing_beam,"",R.drawable.nfc_fill0)}
list += Restriction(UserManager.DISALLOW_USB_FILE_TRANSFER,R.string.usb_file_transfer,"",R.drawable.usb_fill0)
- list += Restriction(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA,R.string.mount_physical_media, myContext.getString(R.string.mount_physical_media_desc),R.drawable.sd_card_fill0)
+ list += Restriction(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA,R.string.mount_physical_media, "", R.drawable.sd_card_fill0)
if(VERSION.SDK_INT>=28){list += Restriction(UserManager.DISALLOW_PRINTING,R.string.printing,"",R.drawable.print_fill0)}
return list
}
diff --git a/app/src/main/res/resources.properties b/app/src/main/res/resources.properties
index 465ad7e..63b46f9 100644
--- a/app/src/main/res/resources.properties
+++ b/app/src/main/res/resources.properties
@@ -1 +1 @@
-unqualifiedResLocale=zh-CN
\ No newline at end of file
+unqualifiedResLocale=en
\ No newline at end of file
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
new file mode 100644
index 0000000..6afdb5a
--- /dev/null
+++ b/app/src/main/res/values-zh/strings.xml
@@ -0,0 +1,489 @@
+
+
+ 禁用
+ 启用
+ 禁用
+ 启用
+ 成功
+ 失败
+ 添加
+ 移除
+ 安装
+ 卸载
+ 取消
+ 确定
+ 已激活
+ 未激活
+ 激活
+ 停用
+ 黑名单
+ 白名单
+ 允许
+ 拒绝
+ 允许
+ 拒绝
+ 当前状态:%1$s
+ 自动
+ 密码
+ 原因
+ 自定义
+ 未知
+ 重置
+ 时间(ms)
+ 无
+ 无日志
+ 默认
+ 应用
+ 由用户决定
+ 不支持
+ 功能开发中
+ 请再试一次
+ 效果未知
+ 选项
+ 复制代码
+
+
+ Device admin
+ Profile owner
+ Device owner
+ 激活Device admin
+ adb shell dpm set-active-admin com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
+ adb shell dpm set-profile-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
+ adb shell dpm set-device-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
+ 设备信息
+ Financed device: %1$s
+ 设备策略管理器角色(DPMRH):%1$s
+ 未使用
+ 正在使用
+ 不支持
+ 使用默认密钥
+ 每个用户分别加密
+ 激活的Device admin: %1$s
+ 设备唯一标识码
+ 需要设置组织ID
+ 组织名称
+ 不受管理的账号
+ 账号类型
+ 转移所有权
+ 把Device owner或Profile owner权限转移到另一个应用。目标必须是Device admin
+ 目标包名
+ 目标类名
+ 锁屏提示信息
+ 提供支持的消息
+ 提供支持的短消息
+ 如果你禁用了某个功能,用户尝试使用这个功能时会看见这个消息(可多行)
+ 提供支持的长消息
+ 转移
+ 在这里激活Android Owner
+
+
+ 暂不支持在非主用户中使用Shizuku
+ 检查Shizuku
+ 请输入工作资料的UserID
+ 列出Owners
+ 服务未启动
+ 已授权(Shell)
+ 已授权(Root)
+ 激活Profile owner
+ 激活Device owner
+
+
+ 系统
+ 禁用相机
+ 禁止截屏
+ 禁用状态栏
+ 对AOSP的录屏也起作用
+ 自动设置时间
+ 自动设置时区
+ 全局静音
+ 备份服务
+ 禁止蓝牙分享联系人
+ 通用标准模式
+ Common Criteria
+ USB信号
+ 锁屏
+ 禁用需要无密码
+ 立即锁屏
+ 需要重新输入密码
+ 请求错误报告
+ 重启
+ 修改时间
+ 从Epoch(1970/1/1 00:00:00 UTC)到你想设置的时间(毫秒)
+ 获取当前时间
+ 权限策略
+ 自动允许
+ 自动拒绝
+ MTE策略
+ MTE:内存标记拓展,安卓14和ARMv9的高端功能
+ 附近App共享
+ 附近共享策略
+ 附近通知共享
+ 在足够安全时启用
+ 锁定任务功能
+ 禁用全部
+ 允许状态栏信息
+ 允许通知
+ 允许返回主屏幕
+ 允许打开后台应用概览
+ 允许全局行为(比如长按电源键对话框)
+ 允许锁屏
+ 阻止启动未允许的应用
+ 白名单应用
+ 包名
+ 不存在
+ Ca证书
+ 请选择Ca证书
+ 证书已安装:%1$s
+ 选择证书...
+ 卸载所有用户证书
+ 安全日志
+ 重启前安全日志
+ 清除数据
+ 清除外部存储
+ 清除受保护的数据
+ 清除eUICC(eSIM)
+ 静默清除
+ 将会删除工作资料
+ API34或以上将不能在系统用户中使用WipeData
+
+
+ 安全补丁: %1$s
+ 暂无系统更新
+ 系统更新策略
+ 准备好后立即更新
+ 在某段时间里更新
+ 延迟30天
+ 开始时间
+ 结束时间
+ 请输入一天中的分钟(0~1440)
+ 系统更新接收时间: %1$s
+
+
+ 网络
+ 最小WiFi安全等级
+ 开放
+ 优先网络服务
+ WiFi锁定
+ WiFi SSID策略
+ SSID列表:
+ 不能为空
+ 已经存在
+ 请选择策略
+ 私人DNS
+ 指定主机名
+ 主机不支持
+ 设为自动
+ DNS主机名
+ 无效主机名
+ 安全错误
+ 设置DNS主机
+ 收集网络日志
+ 收集
+ WiFi密钥对
+ 密钥对
+ APN设置
+ 一共有%1$s个APN设置
+ 选择一个你要修改的APN设置(1~%1$s)或者输入0以新建APN设置
+ 当前没有APN设置,你可以新建一个APN设置
+ 上一步
+ 下一步
+ 名称
+ 用户名
+ 资料ID
+ 验证类型
+ APN类型
+ 位掩码
+ 描述
+ MMS代理
+ 地址
+ 端口
+ 代理
+ 网络类型
+ 持久的
+ 协议
+ 漫游协议
+ 更新
+
+
+ 工作资料
+ Profile owner(工作资料)
+ 工作资料已激活
+ 创建工作资料
+ 由组织拥有的工作资料:%1$s
+ 组织拥有的工作资料
+ 跳过加密
+ 创建
+ 挂起个人应用
+ 资料关闭时间
+ 工作资料处于关闭状态的时间达到该限制后会挂起个人应用,0为无限制
+ 个人应用已经因此挂起:%1$s
+ 不能少于72小时
+ Intent过滤器
+ 添加(工作到个人)
+ 添加(个人到工作)
+ 清除所有过滤器
+ 组织ID
+ 长度应在6~64个字符之间
+ 设置组织ID后才能获取设备唯一标识码
+
+
+ 应用管理
+ 应用选择器
+ 加载中
+ 显示用户应用
+ 显示系统应用
+ 显示priv-app
+ 显示apex应用
+ 权限选择器
+ 挂起
+ 隐藏
+ 如果隐藏,有可能是没安装
+ VPN保持打开
+ 权限
+ 作用域: 工作资料
+ 应用详情
+ 未安装
+ 防卸载
+ 有时候无法正确获取防卸载状态
+ 禁止用户控制
+ 用户将无法清除应用的存储空间和缓存
+ 应用列表:
+ 清空列表
+ 权限管理
+ 跨资料应用
+ 跨资料微件
+ 凭据管理策略
+ 白名单和系统应用
+ 许可的无障碍应用
+ 许可的输入法
+ 保持卸载的应用
+ 数据清除
+ 清除应用存储
+ 设为默认拨号应用
+ 卸载应用
+ 静默卸载
+ 请求卸载
+ 安装应用
+ 选择APK...
+ 静默安装
+ 请求安装
+
+
+ 用户限制
+ Profile owner无法使用部分功能
+ 打开开关后会禁用对应的功能
+ 工作资料中部分功能无效
+ 网络和互联网
+ 更多连接
+ 应用
+ 用户
+ 媒体
+ 其他
+ 需要DeviceOwner
+ 配置移动数据
+ 配置Wi-Fi
+ 数据漫游
+ 使用2G(GSM)
+ 超宽频段无线电
+ 添加WiFi配置
+ 修改WiFi状态
+ WiFi直连
+ WiFi共享
+ 分享设备管理器配置的WiFi
+ 重置网络
+ 配置网络共享
+ 配置VPN
+ 配置私人DNS
+ 飞行模式
+ 配置小区广播
+ 短信
+ 拨出电话
+
+ 蓝牙
+ 蓝牙分享
+ 分享位置
+ 配置位置信息
+ Beam发送
+ USB文件传输
+ 挂载物理媒体
+ 打印
+
+ 安装未知来源应用(全局)
+ 安装未知来源应用
+ 控制应用
+ 清空缓存/清空内部存储
+ 修改默认App
+
+ 调整亮度
+ 修改屏幕超时
+ 息屏显示
+ 调整音量
+ 取消麦克风静音
+ 切换摄像头使用权限
+ 切换麦克风使用权限
+
+ 添加用户
+ 移除用户
+ 切换用户
+ 修改用户头像
+ 跨用户复制
+ 分享至工作应用
+ 个人和工作密码相同
+
+ 自动填充服务
+ 配置凭据
+ 内容捕获
+ 内容建议
+ 创建窗口
+ 可能包括Toast和浮动通知
+ 更换壁纸
+ 启用设备管理器
+ 娱乐
+ 会影响谷歌商店的游戏
+ 修改账号设置
+ 修改语言
+ 修改日期、时间
+ 系统报错对话框
+ 恢复出厂设置
+ 安全模式
+ 调试功能
+
+
+ 用户管理
+ 修改用户名
+ 用户会话开始消息
+ 用户会话结束消息
+ 用户信息
+ 用户已解锁:%1$s
+ 支持多用户:%1$s
+ 系统用户:%1$s
+ 管理员用户:%1$s
+ 无头系统用户: %1$s
+ 用户可以退出 : %1$s
+ 临时用户: %1$s
+ 附属用户: %1$s
+ 当前UserID:%1$s
+ 当前用户序列号:%1$s
+ 用户操作
+ 序列号
+ 使用UID
+ 登出当前用户
+ 在后台启动
+ 切换
+ 停止
+ 移除
+ 创建用户
+ 用户名
+ 跳过创建用户向导
+ 临时用户
+ 启用所有系统应用
+ 新用户的序列号:%1$s
+ 附属用户ID
+ 有空字符串
+ 更换用户头像
+ 尽量选择正方形的图片,以免产生问题
+ 使用文件选择器而不是相册
+ 选择图片...
+ 未知结果(失败)
+ 失败:受管理的资料
+ 失败:当前用户
+ 用户会话消息
+
+
+ 密码与锁屏
+ 密码信息
+ 留空可以清除密码,纯数字将使用PIN码
+ 最大密码错误次数
+ 达到该限制会恢复出厂设置,0为无限制
+ 错误次数
+ 密码失效超时时间
+ 屏幕超时
+ 超时后锁屏(毫秒),0为由用户决定
+ 超时后用户需重新设置密码(毫秒),0为无限制
+ 密码历史记录长度
+ 无(允许不设密码)
+ 低(允许图案和连续性)
+ 中(无连续性,至少4位)
+ 高(无连续性,至少6位)
+ 当前密码复杂度:%1$s
+ 密码达到要求:%1$s
+ 密码已错误次数:%1$s
+ 个人与工作应用密码一致:%1$s
+ 密码重置令牌
+ 清除
+ 设置
+ 请先设置令牌
+ 没有密码时会自动激活令牌
+ 重置密码
+ 启动(boot)时不要求密码
+ 不允许其他设备管理员重置密码直至用户输入一次密码
+ 需要4位密码
+ 使用令牌重置密码
+ 重置密码(弃用)
+ 密码复杂度要求
+ 要求设置新密码
+ 锁屏功能
+ 启用全部
+ 禁用小工具(安卓5以下)
+ 禁用相机
+ 禁用通知
+ 禁用未经编辑的通知
+ 禁用可信代理
+ 禁用指纹解锁
+ 禁止远程输入(弃用)
+ 禁用人脸解锁
+ 禁用虹膜解锁(?)
+ 禁用生物识别
+ 禁用快捷方式
+ 未指定
+ 需要密码或图案,不管复杂度
+ 至少1个字母
+ 至少1个数字
+ 数字字母各至少一个
+ 生物识别(弱)
+ 复杂数字(无连续性)
+ 密码质量要求
+ 设置密码复杂度将会取代密码质量
+ 已弃用,请使用上面的”密码复杂度要求“。点击展开
+ 在这里激活密码重置令牌
+
+
+ 设置
+ 动态取色
+ 安卓12+
+ 关于
+ 使用安卓的Device admin、Device owner 、Profile owner,全方位掌控你的设备
+ 使用教程
+ 源代码
+ 纯黑夜间主题
+ 需要打开夜间模式
+ 需要重启应用
+
+
+ 读取外部存储
+ 写入外部存储
+ 读取音频
+ 读取视频
+ 读取图片
+ 相机
+ 录音
+ 读取联系人
+ 写入联系人
+ 读取日历
+ 写入日历
+ 粗略位置
+ 准确位置
+ 后台获取位置
+ 打电话
+ 读取手机状态
+ 读取短信
+ 接收短信
+ 发送短信
+ 读取通话记录
+ 写入通话记录
+ 身体传感器
+ 后台使用身体传感器
+ 查看使用情况
+ 发送通知
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 32d076c..d6b6703 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,503 +1,503 @@
Android Owner
- 禁用
- 启用
- 禁用
- 启用
- 成功
- 失败
- 添加
- 移除
- 安装
- 卸载
- 取消
- 确定
- 已激活
- 未激活
- 激活
- 停用
- 黑名单
- 白名单
- 允许
- 拒绝
- 允许
- 拒绝
- 当前状态:%1$s
- 自动
- 密码
- 原因
- 自定义
- 未知
- 重置
- 时间(ms)
- 无
- 无日志
- 默认
- 应用
- 由用户决定
- 不支持
- 功能开发中
- 请再试一次
- 效果未知
- 选项
- 复制代码
+ Disabled
+ Enabled
+ Disable
+ Enable
+ Success
+ Fail
+ Add
+ Remove
+ Install
+ Uninstall
+ Cancel
+ Confirm
+ Activated
+ Deactivated
+ Activate
+ Deactivate
+ Blacklist
+ Whitelist
+ Granted
+ Denied
+ Grant
+ Deny
+ Current status: %1$s
+ Auto
+ Password
+ Reason
+ Custom
+ Unknown
+ Reset
+ Time(ms)
+ None
+ No logs
+ Default
+ Apply
+ Decide by user
+ Unsupported
+ Developing
+ Try again
+ Unknown effect
+ Options
+ Copy Command
+ Package name
+ Not exist
Device admin
Profile owner
Device owner
- 激活Device admin
+ Activate Device admin
adb shell dpm set-active-admin com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
adb shell dpm set-profile-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
adb shell dpm set-device-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
- 设备信息
- 企业资产 : %1$s
- 设备策略管理器角色(DPMRH):%1$s
- 未使用
- 正在使用
- 不支持
- 使用默认密钥
- 每个用户分别加密
- 激活的Device admin: %1$s
- 设备唯一标识码
- 需要设置组织ID
- 组织名称
- 不受管理的账号
- 账号类型
- 转移所有权
- 把Device owner或Profile owner权限转移到另一个应用。目标必须是Device admin
- 目标包名
- 目标类名
- 锁屏提示信息
- 提供支持的消息
- 提供支持的短消息
- 如果你禁用了某个功能,用户尝试使用这个功能时会看见这个消息(可多行)
- 提供支持的长消息
- 转移
- 在这里激活Android Owner
+ Device info
+ Financed device: %1$s
+ Device policy manager role holder:%1$s
+
+ Inactive
+ Active
+ Unsupported
+ Active(default key)
+ Active(per-user)
+ Activated device admin: %1$s
+ Enrollment specific ID
+ Require organization ID
+ Organization name
+ Account types with management disabled
+ Account types:
+ Transform Ownership
+ Transform device owner or profile owner privilege to another app. The target app must be a device admin.
+ Target package name
+ Target class name
+ Lockscreen info
+ Support Message
+ Short message
+ When you try to use functions disabled by this app, the support message will show.
+ Long message
+ Transform
+ Activate Android Owner here.
- Shizuku
- 暂不支持在非主用户中使用Shizuku
- 检查Shizuku
- 请输入工作资料的UserID
- 列出Owners
- 服务未启动
-
+ Shizuku
+ You can only use this feature in the primary user.
+ Check permission
+ Enter UserID of work profile
+ List owners
+ Shizuku not started.
+
dpm mark-profile-owner-on-organization-owned-device --user %1$s com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
- dpm set-device-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
- dpm set-profile-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
- dpm set-active-admin com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
- 已授权(Shell)
- 已授权(Root)
- 激活Profile owner
- 激活Device owner
+ dpm set-device-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
+ dpm set-profile-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
+ dpm set-active-admin com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
+ Permission granted (Shell)
+ Permission granted (Root)
+ Activate profile owner
+ Activate device owner
- 系统
- 禁用相机
- 禁止截屏
- 禁用状态栏
- 对AOSP的录屏也起作用
- 自动设置时间
- 自动设置时区
- 全局静音
- 备份服务
- 禁止蓝牙分享联系人
- 通用标准模式
- Common Criteria
- USB信号
- 锁屏
- 禁用需要无密码
- 立即锁屏
- 需要重新输入密码
- 请求错误报告
- 重启
- 修改时间
- 从Epoch(1970/1/1 00:00:00 UTC)到你想设置的时间(毫秒)
- 获取当前时间
- 权限策略
- 自动允许
- 自动拒绝
- MTE策略
- MTE:内存标记拓展,安卓14和ARMv9的高端功能
- 附近App共享
- 附近共享策略
- 附近通知共享
- 在足够安全时启用
- 锁定任务功能
- 禁用全部
- 允许状态栏信息
- 允许通知
- 允许返回主屏幕
- 允许打开后台应用概览
- 允许全局行为(比如长按电源键对话框)
- 允许锁屏
- 阻止启动未允许的应用
- 白名单应用
- 包名
- 不存在
- Ca证书
- 请选择Ca证书(.0)
- 证书已安装:%1$s
- 选择证书...
- 卸载所有用户证书
- 收集安全日志
- 安全日志
- 重启前安全日志
- 清除数据
- 清除外部存储
- 清除受保护的数据
- 清除eUICC(eSIM)
- 静默清除
- 将会删除工作资料
- API34或以上将不能在系统用户中使用WipeData
+ System manager
+ Disable camera
+ Disable screenshot
+ Disable status bar
+ Also disable screen record in AOSP.
+ Auto time
+ Auto timezone
+ Master mute
+ Backup service
+ Disable bluetooth contact sharing
+ Common criteria mode
+ Unknown effect
+ USB signal
+ Keyguard
+ Disable keyguard require no password is set.
+ Lock screen now
+ Require re-enter password
+ Request bug report
+ Reboot
+ Edit time
+ From Epoch(1970/1/1 00:00:00 UTC) to the time you want to set(ms)
+ Current time
+ Permission policy
+ Auto grant
+ Auto deny
+ MTE policy
+ MTE: Memory Tagging Extension, require Android 14 and ARMv9
+ Nearby App streaming policy
+ Nearby streaming policy
+ Nearby notification streaming policy
+ Same managed account only
+ Lock task feature
+ Disable all
+
+ Allow system info
+ Allow notifications
+ Allow home
+ Allow overview
+ Allow global actions
+ Allow keyguard
+ Block activity start in task
+ Whitelisted app
+ Ca certification
+ Please select a certification
+ Cert installed: %1$s
+ Select cert...
+ Uninstall all user cert
+ Security logs
+ Pre-reboot security logs
+ Wipe data
+ Wipe external storage
+ Wipe protected data
+ Wipe eUICC(eSIM)
+ Wipe silently
+ Work profile will be deleted.
+ You cannot use WipeData in system user.
- 安全补丁: %1$s
- 暂无系统更新
- 系统更新策略
- 准备好后立即更新
- 在某段时间里更新
- 延迟30天
- 开始时间
- 结束时间
- 请输入一天中的分钟(0~1440)
- 系统更新接收时间: %1$s
+ Security patch: %1$s
+ There\'s no system update
+ System update policy
+ Automatic
+ Install windowed
+ Postpone 30 days
+ Start time
+ End time
+ Please enter minutes in a day(0~1440)
+ Update received time: %1$s
- 网络
- 最小WiFi安全等级
- 开放
- 优先网络服务
- WiFi锁定
- WiFi SSID策略
- SSID列表:
- 不能为空
- 已经存在
- 请选择策略
- 私人DNS
- 指定主机名
- 主机不支持DNS over TLS
- 设为自动
- DNS主机名
- 无效主机名
- 安全错误
- 设置DNS主机
- 收集网络日志
- 收集
- WiFi密钥对
- 密钥对
- APN设置
- 一共有%1$s个APN设置
- 选择一个你要修改的APN设置(1~%1$s)或者输入0以新建APN设置
- 当前没有APN设置,你可以新建一个APN设置
- 上一步
- 下一步
- 名称
- 用户名
- 资料ID
- 验证类型
- APN类型
- 位掩码
- 描述
- MMS代理
- 地址
- 端口
- 代理
- 网络类型
- 持久的
- 协议
- 漫游协议
- 更新
+ Network
+ Min WiFi security level
+ Open
+ Preferential network service
+ WiFi lockdown
+ WiFi SSID policy
+ SSID list:
+ Cannot be empty
+ Already exist
+ Please select a policy
+ PrivateDNS
+ Provide hostname
+ Host not serving
+ Set to auto
+ DNS hostname
+ Invalid hostname
+ Security Exception
+ Set DNS host
+ Network logs
+ Retrieve
+ WiFi keypair
+ Keypair
+ APN settings
+ APN settings amount: %1$s
+ Select a APN setting you want to edit (1~%1$s) or enter 0 to create a new APN setting.
+ No APN settings. Will create a new one.
+ Previous step
+ Next step
+ Name
+ User name
+ Profile ID
+ Auth type
+ APN type
+ Bitmask
+ Description
+ MMS proxy
+ Address
+ Port
+ Proxy
+ Network type
+ Persistent
+ Protocol
+ Roaming protocol
+ Update
- 工作资料
- Profile owner(工作资料)
- 工作资料已激活
- 创建工作资料
- 由组织拥有的工作资料:%1$s
- 组织拥有的工作资料
- adb shell \"dpm mark-profile-owner-on-organization-owned-device --user %1$s com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver\"
- 跳过加密
- 创建
- 挂起个人应用
- 资料关闭时间
- 工作资料处于关闭状态的时间达到该限制后会挂起个人应用,0为无限制
- 个人应用已经因此挂起:%1$s
- 不能少于72小时
- Intent过滤器
- 添加(工作到个人)
- 添加(个人到工作)
- 清除所有过滤器
- 组织ID
- 长度应在6~64个字符之间
- 设置组织ID后才能获取设备唯一标识码
+ Work Profile
+ Profile owner (Work profile)
+ Work profile activated
+ Create work profile
+ Organization owned work profile: %1$s
+ Organization work profile
+
+ adb shell \"dpm mark-profile-owner-on-organization-owned-device --user %1$s com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver\"
+
+ Skip encryption
+ Create
+ Suspend personal app
+ Max time off
+ Personal apps will be suspended after the work profile is closed for this amount of time. 0 means no limit.
+ Personal app suspended because of this: %1$s
+ Cannot less than 72 hours
+ Intent filter
+ Add(work to personal)
+ Add(personal to work)
+ Clear all filters
+ Organization ID
+ The length should be between 6~64 characters
+ You can get device specific ID after set this.
-
- 应用管理
- 应用选择器
- 加载中
- 显示用户应用
- 显示系统应用
- 显示priv-app
- 显示apex应用
- 权限选择器
- 挂起
- 隐藏
- 如果隐藏,有可能是没安装
- VPN保持打开
- 权限
- 作用域: 工作资料
- 应用详情
- 未安装
- 防卸载
- 有时候无法正确获取防卸载状态
- 禁止用户控制
- 用户将无法清除应用的存储空间和缓存
- 应用列表:
- 清空列表
- 权限管理
- 跨资料应用
- 跨资料微件
- (跨资料桌面小部件提供者)
- 凭据管理策略
- 白名单和系统应用
- 许可的无障碍应用
- 许可的输入法
- 保持卸载的应用
- 数据清除
- 清除应用存储
- 设为默认拨号应用
- 卸载应用
- 静默卸载
- 请求卸载
- 安装应用
- 选择APK...
- 静默安装
- 请求安装
+
+ App manager
+ Package selector
+ Loading
+ Show user apps
+ Show system apps
+ Show priv-apps
+ Show apex apps
+ Permission picker
+ Suspend
+ Hide
+ Non-existent apps is hidden
+ Always-on VPN
+ Permission
+ Scope: work profile
+ App info
+ Not installed
+ Block uninstall
+ Sometimes it shows a wrong status
+
+ Disable user control
+ If you set this, you cannot clear storage or cache of the app.
+ App list:
+ Clear list
+ Permission manage
+ Cross profile package
+ Cross profile widget
+ Credential manage policy
+ Whitelist and system app
+ Permitted accessibility app
+ Permitted IME
+ Keep uninstalled packages
+ Clear data
+ Clear app data
+ Set default dialer
+ Uninstall app
+ Silent uninstall
+ Request uninstall
+ Install app
+ Select APK...
+ Silent install
+ Request install
- 用户限制
- Profile owner无法使用部分功能
- 打开开关后会禁用对应的功能
- 工作资料中部分功能无效
- 网络和互联网
- 更多连接
- 应用
- 用户
- 媒体
- 其他
- 需要DeviceOwner
- 配置移动数据
- 配置Wi-Fi
- 数据漫游
- 使用2G(GSM)
- 超宽频段无线电
- 添加WiFi配置
- 修改WiFi状态
- WiFi直连
- WiFi共享
- 分享设备管理器配置的WiFi
- 重置网络
- 配置网络共享
- 配置VPN
- 配置私人DNS
- 飞行模式
- 配置小区广播
- 短信
- 拨出电话
+ User restriction
+ Profile owner can use limited function
+ Turn on a switch to disable that function.
+ Functions in work profile is limited.
+ Network
+ Other connection
+ Applications
+ User
+ Media
+ Other
+ Require device owner
+ Configure mobile network
+ Configure WiFi
+ Data roaming
+ 2G cellular
+ Ultra wideband radio
+ Add WiFi config
+ Change WiFi status
+ WiFi direct
+ WiFi tethering
+ Share admin configured WiFi
+ Reset network
+ Configure tethering
+ Configure VPN
+ Configure private DNS
+ Airplane mode
+ Configure cell broadcasts
+ SMS
+ Outgoing calls
- 蓝牙
- 蓝牙分享
- 分享位置
- 配置位置信息
- Beam发送
- USB文件传输
- 挂载物理媒体
- 包括TF卡和USB-OTG
- 打印
+ Bluetooth
+ Bluetooth sharing
+ Share location
+ Configure location
+ Outgoing Beam
+ USB file transfer
+ Mount physical media
+ Print
- 安装未知来源应用(全局)
- 安装未知来源应用
- 控制应用
- 清空缓存/清空内部存储
- 修改默认App
+ Install unknown sources globally
+ Install unknown sources
+ Apps control
+ Clear app data or cache
+ Configure default apps
- 调整亮度
- 修改屏幕超时
- 息屏显示
- 调整音量
- 取消麦克风静音
- 切换摄像头使用权限
- 切换麦克风使用权限
+ Configure brightness
+ Configure screen timeout
+ Ambient display
+ Adjust volume
+ Unmute microphone
+ Camera toggle
+ Microphone toggle
- 添加用户
- 移除用户
- 切换用户
- 修改用户头像
- 跨用户复制
- 分享至工作应用
- 个人和工作密码相同
+ Add user
+ Remove user
+ Switch user
+ Set user icon
+ Cross profile copy
+ Share into managed profile
+ Unified password
- 自动填充服务
- 配置凭据
- 内容捕获
- 内容建议
- 创建窗口
- 可能包括Toast和浮动通知
- 更换壁纸
- 启用设备管理器
- 娱乐
- 会影响谷歌商店的游戏
- 修改账号设置
- 修改语言
- 修改日期、时间
- 系统报错对话框
- 恢复出厂设置
- 安全模式
- 调试功能
+ Autofill
+ Configure credentials
+ Content capture
+ Content suggestions
+ Create windows
+ e.g. toasts, notifications banner
+ Set wallpaper
+ Grant device admin
+ Fun
+ May disable games
+ Modify accounts
+ Configure locale
+ Configure date or time
+ System error dialog
+ Factory reset
+ Safe boot
+ Debug features
- 用户管理
- 修改用户名
- 用户会话开始消息
- 用户会话结束消息
- 用户信息
- 用户已解锁:%1$s
- 支持多用户:%1$s
- 系统用户:%1$s
- 管理员用户:%1$s
- 无头系统用户: %1$s
- 用户可以退出 : %1$s
- 临时用户: %1$s
- 附属用户: %1$s
- 当前UserID:%1$s
- 当前用户序列号:%1$s
- 用户操作
- 序列号
- 使用UID
- 登出当前用户
- 在后台启动
- 切换
- 停止
- 移除
- 创建用户
- 用户名
- 跳过创建用户向导
- 临时用户
- 启用所有系统应用
- 新用户的序列号:%1$s
- 附属用户ID
- 有空字符串
- 如果多用户,附属用户ID相同时可以让其他用户附属于主用户
- 更换用户头像
- 尽量选择正方形的图片,以免产生问题
- 使用文件选择器而不是相册
- 选择图片...
- 未知结果(失败)
- 失败:受管理的资料
- 失败:当前用户
- 用户会话消息
+ User manager
+ Edit username
+ 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
+ User operation
+ Serial number
+ Use UID
+ Logout current user
+ Start in background
+ Switch
+ Stop
+ Remove
+ Create user
+ Username
+ Skip wizard
+ Ephemeral user
+ Enable all system app
+ Serial number of this user: %1$s
+ Affiliation ID
+ Include empty string
+ Change user icon
+ You should pick a square image
+ Use file picker instead of gallery
+ Select image...
+ Unknown result(may failed)
+ Failed: managed profile
+ Failed: current user
+ User session message
- 密码与锁屏
- 密码信息
- 留空可以清除密码,纯数字将使用PIN码
- 最大密码错误次数
- 达到该限制会恢复出厂设置,0为无限制
- 错误次数
- 密码失效超时时间
- 屏幕超时
- 超时后锁屏(毫秒),0为由用户决定
- 超时后用户需重新设置密码(毫秒),0为无限制
- 密码历史记录长度
- 无(允许不设密码)
- 低(允许图案和连续性)
- 中(无连续性,至少4位)
- 高(无连续性,至少6位)
- 当前密码复杂度:%1$s
- 密码达到要求:%1$s
- 密码已错误次数:%1$s
- 个人与工作应用密码一致:%1$s
- 密码重置令牌
- 清除
- 设置
- 请先设置令牌
- 没有密码时会自动激活令牌
- 重置密码
- 启动(boot)时不要求密码
- 不允许其他设备管理员重置密码直至用户输入一次密码
- 需要4位密码
- 使用令牌重置密码
- 重置密码(弃用)
- 密码复杂度要求
- 连续性:密码重复(6666)或密码递增递减(4321、2468)
- 要求设置新密码
- 锁屏功能
- 启用全部
- 禁用小工具(安卓5以下)
- 禁用相机
- 禁用通知
- 禁用未经编辑的通知
- 禁用可信代理
- 禁用指纹解锁
- 禁止远程输入(弃用)
- 禁用人脸解锁
- 禁用虹膜解锁(?)
- 禁用生物识别
- 禁用快捷方式
- 未指定
- 需要密码或图案,不管复杂度
- 至少1个字母
- 至少1个数字
- 数字字母各至少一个
- 生物识别(弱)
- 复杂数字(无连续性)
- 密码质量要求
- 设置密码复杂度将会取代密码质量
- 已弃用,请使用上面的”密码复杂度要求“。点击展开
- 在这里激活密码重置令牌
+ Password and keyguard
+ Password Info
+ Keep empty to remove password
+ Max failed password
+ When reach this limit, the device will factory reset
+ Max number of fail
+ Password timeout
+ Screen timeout
+ Enter 0 to allow user decision, unit: millisecond
+ When reach this limit, user should set a new password. Enter 0 to allow user decision, unit: millisecond
+ Password history length
+ None
+ Low
+ Medium
+ High
+ Current password complexity: %1$s
+ is password sufficient: %1$s
+ Password failed attempts: %1$s
+ Unified password: %1$s
+ Reset password token
+ Clear
+ Set
+ Please set a token
+ Token will be automatically activated if no password is set.
+ Reset password
+ Do not ask credentials on boot
+ Require entry
+ Require at least 4 digit password
+ Reset password with token
+ Reset password
+ Required password complexity
+ Require set new password
+ Keyguard features
+ Enable all
+ Disable widget
+ Disable camera
+ Disable notification
+ Disable unredacted notification
+ Disable trust agents
+ Disable fingerprint
+ Disable remote input
+ Disable face
+ Disable iris
+ Disable biometrics
+ Disable shortcuts
+ Unspecified
+ Require a password
+ Alphabetic
+ Numeric
+ Alphanumeric
+ Biometrics
+ Numeric complex
+ Required password quality
+ Set password complexity will disable password complexity.
+ Deprecated. Use required password complexity instead.
+ Activate reset password token here.
- 设置
- 动态取色
- 安卓12+
- 关于
- 使用安卓的Device admin、Device owner 、Profile owner,全方位掌控你的设备
- 使用教程
- 源代码
- 纯黑夜间主题
- 需要打开夜间模式
- 需要重启应用
+ Settings
+ Dynamic color
+ Android 12+
+ About
+ Use device admin, profile owner and device owner privilege to take full control of your device.
+ User guide
+ Source code
+ Black theme
+ Require dark mode on
+ Require restart this app
- 读取外部存储
- 写入外部存储
- 读取音频
- 读取视频
- 读取图片
- 相机
- 录音
- 读取联系人
- 写入联系人
- 读取日历
- 写入日历
- 粗略位置
- 准确位置
- 后台获取位置
- 打电话
- 读取手机状态
- 读取短信
- 接收短信
- 发送短信
- 读取通话记录
- 写入通话记录
- 传感器
- 后台使用传感器
- 查看使用情况
- 发送通知
+ Read external storage
+ Write external storage
+ Read media (audio)
+ Read media (video)
+ Read media (images)
+ Camera
+ Microphone
+ Read contacts
+ Write contacts
+ Read calendar
+ Write calendar
+ Access coarse location
+ Access fine location
+ Access location in background
+ Call phone
+ Read phone state
+ Read SMS
+ Receive SMS
+ Send SMS
+ Read call log
+ Write call log
+ Access body sensors
+ Access body sensors in background
+ Activity recognition
+ Post notifications