New user restrictions

Fix GitHub actions build.yml
This commit is contained in:
BinTianqi
2025-01-24 19:03:32 +08:00
parent 6893ef58aa
commit 4640f6d1f2
9 changed files with 130 additions and 121 deletions

View File

@@ -1,12 +1,18 @@
name: Build APK
on:
workflow_dispatch:
push:
branches: ["master", "dev"]
paths-ignore:
- '**.md'
tags-ignore:
- '**'
concurrency:
group: "main"
cancel-in-progress: false
jobs:
build:
name: Build
@@ -62,6 +68,7 @@ jobs:
upload-telegram:
name: Upload Builds
runs-on: ubuntu-latest
if: github.ref_name == 'dev'
needs: build
steps:
- name: Download Artifacts

View File

@@ -274,22 +274,22 @@ fun Home(activity: FragmentActivity, vm: MyViewModel) {
composable(route = "UserRestriction") { UserRestriction(navCtrl) }
composable(route = "UR-Internet") {
MyScaffold(R.string.network_and_internet, 0.dp, navCtrl) { RestrictionData.internet.forEach { UserRestrictionItem(it) } }
MyScaffold(R.string.network_and_internet, 0.dp, navCtrl) { RestrictionData.internet.forEach { UserRestrictionItem(it, vm) } }
}
composable(route = "UR-Connectivity") {
MyScaffold(R.string.connectivity, 0.dp, navCtrl) { RestrictionData.connectivity.forEach { UserRestrictionItem(it) } }
MyScaffold(R.string.connectivity, 0.dp, navCtrl) { RestrictionData.connectivity.forEach { UserRestrictionItem(it, vm) } }
}
composable(route = "UR-Applications") {
MyScaffold(R.string.applications, 0.dp, navCtrl) { RestrictionData.applications.forEach { UserRestrictionItem(it) } }
MyScaffold(R.string.applications, 0.dp, navCtrl) { RestrictionData.applications.forEach { UserRestrictionItem(it, vm) } }
}
composable(route = "UR-Users") {
MyScaffold(R.string.users, 0.dp, navCtrl) { RestrictionData.users.forEach { UserRestrictionItem(it) } }
MyScaffold(R.string.users, 0.dp, navCtrl) { RestrictionData.users.forEach { UserRestrictionItem(it, vm) } }
}
composable(route = "UR-Media") {
MyScaffold(R.string.media, 0.dp, navCtrl) { RestrictionData.media.forEach { UserRestrictionItem(it) } }
MyScaffold(R.string.media, 0.dp, navCtrl) { RestrictionData.media.forEach { UserRestrictionItem(it, vm) } }
}
composable(route = "UR-Other") {
MyScaffold(R.string.other, 0.dp, navCtrl) { RestrictionData.other.forEach { UserRestrictionItem(it) } }
MyScaffold(R.string.other, 0.dp, navCtrl) { RestrictionData.other.forEach { UserRestrictionItem(it, vm) } }
}
composable(route = "Users") { Users(navCtrl) }

View File

@@ -2,6 +2,7 @@ package com.bintianqi.owndroid
import android.content.Context
import android.os.Build
import android.os.Bundle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.flow.MutableStateFlow
@@ -11,6 +12,7 @@ class MyViewModel: ViewModel() {
val theme = MutableStateFlow(ThemeSettings())
val installedPackages = mutableListOf<PackageInfo>()
val selectedPackage = MutableStateFlow("")
val userRestrictions = MutableStateFlow(Bundle())
var initialized = false
fun initialize(context: Context) {

View File

@@ -11,11 +11,14 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavHostController
import com.bintianqi.owndroid.MyViewModel
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.ui.FunctionItem
import com.bintianqi.owndroid.ui.MyScaffold
@@ -24,7 +27,8 @@ import com.bintianqi.owndroid.ui.SwitchItem
data class Restriction(
val id: String,
@StringRes val name: Int,
@DrawableRes val icon: Int
@DrawableRes val icon: Int,
val requiresApi: Int = 0
)
@Composable
@@ -50,21 +54,23 @@ fun UserRestriction(navCtrl:NavHostController) {
@RequiresApi(24)
@Composable
fun UserRestrictionItem(restriction: Restriction) {
fun UserRestrictionItem(restriction: Restriction, vm: MyViewModel) {
val context = LocalContext.current
val dpm = context.getDPM()
val receiver = context.getReceiver()
val userRestrictions by vm.userRestrictions.collectAsStateWithLifecycle()
Box(modifier = Modifier.padding(start = 22.dp, end = 16.dp)) {
SwitchItem(
restriction.name, restriction.id, restriction.icon,
{ dpm.getUserRestrictions(receiver).getBoolean(restriction.id) },
userRestrictions.getBoolean(restriction.id),
{
val dpm = context.getDPM()
val receiver = context.getReceiver()
try {
if(it) {
dpm.addUserRestriction(receiver, restriction.id)
} else {
dpm.clearUserRestriction(receiver, restriction.id)
}
vm.userRestrictions.value = dpm.getUserRestrictions(receiver)
} catch(_: SecurityException) {
if(context.isProfileOwner) {
Toast.makeText(context, R.string.require_device_owner, Toast.LENGTH_SHORT).show()
@@ -75,109 +81,84 @@ fun UserRestrictionItem(restriction: Restriction) {
}
}
@Suppress("InlinedApi")
object RestrictionData {
val internet: List<Restriction> get() {
val list = mutableListOf<Restriction>()
list += Restriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, R.string.config_mobile_network, R.drawable.signal_cellular_alt_fill0)
list += Restriction(UserManager.DISALLOW_CONFIG_WIFI, R.string.config_wifi, R.drawable.wifi_fill0)
if(VERSION.SDK_INT>=24) list += Restriction(UserManager.DISALLOW_DATA_ROAMING, R.string.data_roaming, R.drawable.network_cell_fill0)
if(VERSION.SDK_INT>=34) {
list += Restriction(UserManager.DISALLOW_CELLULAR_2G, R.string.cellular_2g, R.drawable.network_cell_fill0)
list += Restriction(UserManager.DISALLOW_ULTRA_WIDEBAND_RADIO, R.string.ultra_wideband_radio, R.drawable.wifi_tethering_fill0)
}
if(VERSION.SDK_INT>=33) {
list += Restriction(UserManager.DISALLOW_ADD_WIFI_CONFIG, R.string.add_wifi_conf, R.drawable.wifi_fill0)
list += Restriction(UserManager.DISALLOW_CHANGE_WIFI_STATE, R.string.change_wifi_state, R.drawable.wifi_fill0)
list += Restriction(UserManager.DISALLOW_WIFI_DIRECT, R.string.wifi_direct, R.drawable.wifi_tethering_fill0)
list += Restriction(UserManager.DISALLOW_WIFI_TETHERING, R.string.wifi_tethering, R.drawable.wifi_tethering_fill0)
list += Restriction(UserManager.DISALLOW_SHARING_ADMIN_CONFIGURED_WIFI, R.string.share_admin_wifi, R.drawable.share_fill0)
}
if(VERSION.SDK_INT>=23) list += Restriction(UserManager.DISALLOW_NETWORK_RESET, R.string.network_reset, R.drawable.reset_wrench_fill0)
list += Restriction(UserManager.DISALLOW_CONFIG_TETHERING, R.string.config_tethering, R.drawable.wifi_tethering_fill0)
list += Restriction(UserManager.DISALLOW_CONFIG_VPN, R.string.config_vpn, R.drawable.vpn_key_fill0)
if(VERSION.SDK_INT>=29) list += Restriction(UserManager.DISALLOW_CONFIG_PRIVATE_DNS, R.string.config_private_dns, R.drawable.dns_fill0)
if(VERSION.SDK_INT>=28) list += Restriction(UserManager.DISALLOW_AIRPLANE_MODE, R.string.airplane_mode, R.drawable.airplanemode_active_fill0)
list += Restriction(UserManager.DISALLOW_CONFIG_CELL_BROADCASTS, R.string.config_cell_broadcasts, R.drawable.cell_tower_fill0)
list += Restriction(UserManager.DISALLOW_SMS, R.string.sms, R.drawable.sms_fill0)
list += Restriction(UserManager.DISALLOW_OUTGOING_CALLS, R.string.outgoing_calls, R.drawable.phone_forwarded_fill0)
return list
}
val connectivity: List<Restriction> get() {
val list = mutableListOf<Restriction>()
if(VERSION.SDK_INT>=26) {
list += Restriction(UserManager.DISALLOW_BLUETOOTH, R.string.bluetooth, R.drawable.bluetooth_fill0)
list += Restriction(UserManager.DISALLOW_BLUETOOTH_SHARING, R.string.bt_share, R.drawable.bluetooth_searching_fill0)
}
list += Restriction(UserManager.DISALLOW_SHARE_LOCATION, R.string.share_location, R.drawable.location_on_fill0)
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, R.drawable.sd_card_fill0)
if(VERSION.SDK_INT>=28) list += Restriction(UserManager.DISALLOW_PRINTING, R.string.printing, R.drawable.print_fill0)
return list
}
val applications: List<Restriction> get() {
val list = mutableListOf<Restriction>()
list += Restriction(UserManager.DISALLOW_INSTALL_APPS, R.string.install_app, R.drawable.android_fill0)
if(VERSION.SDK_INT>=29) list += Restriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY, R.string.install_unknown_src_globally, R.drawable.android_fill0)
list += Restriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES, R.string.inst_unknown_src, R.drawable.android_fill0)
list += Restriction(UserManager.DISALLOW_UNINSTALL_APPS, R.string.uninstall_app, R.drawable.delete_fill0)
list += Restriction(UserManager.DISALLOW_APPS_CONTROL, R.string.apps_ctrl, R.drawable.apps_fill0)
if(VERSION.SDK_INT>=34) list += Restriction(UserManager.DISALLOW_CONFIG_DEFAULT_APPS, R.string.config_default_apps, R.drawable.apps_fill0)
return list
}
val media: List<Restriction> get() {
val list = mutableListOf<Restriction>()
if(VERSION.SDK_INT>=28) {
list += Restriction(UserManager.DISALLOW_CONFIG_BRIGHTNESS, R.string.config_brightness, R.drawable.brightness_5_fill0)
list += Restriction(UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT, R.string.config_scr_timeout, R.drawable.screen_lock_portrait_fill0)
list += Restriction(UserManager.DISALLOW_AMBIENT_DISPLAY, R.string.ambient_display, R.drawable.brightness_5_fill0)
}
list += Restriction(UserManager.DISALLOW_ADJUST_VOLUME, R.string.adjust_volume, R.drawable.volume_up_fill0)
list += Restriction(UserManager.DISALLOW_UNMUTE_MICROPHONE, R.string.unmute_microphone, R.drawable.mic_fill0)
if(VERSION.SDK_INT>=31) {
list += Restriction(UserManager.DISALLOW_CAMERA_TOGGLE, R.string.camera_toggle, R.drawable.cameraswitch_fill0)
list += Restriction(UserManager.DISALLOW_MICROPHONE_TOGGLE, R.string.microphone_toggle, R.drawable.mic_fill0)
}
return list
}
val users: List<Restriction> get() {
val list = mutableListOf<Restriction>()
list += Restriction(UserManager.DISALLOW_ADD_USER, R.string.add_user, R.drawable.account_circle_fill0)
list += Restriction(UserManager.DISALLOW_REMOVE_USER, R.string.remove_user, R.drawable.account_circle_fill0)
if(VERSION.SDK_INT>=28) list += Restriction(UserManager.DISALLOW_USER_SWITCH, R.string.switch_user, R.drawable.account_circle_fill0)
if(VERSION.SDK_INT>=24) list += Restriction(UserManager.DISALLOW_SET_USER_ICON, R.string.set_user_icon, R.drawable.account_circle_fill0)
list += Restriction(UserManager.DISALLOW_CROSS_PROFILE_COPY_PASTE, R.string.cross_profile_copy, R.drawable.content_paste_fill0)
if(VERSION.SDK_INT>=28) {
list += Restriction(UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, R.string.share_into_managed_profile, R.drawable.share_fill0)
list += Restriction(UserManager.DISALLOW_UNIFIED_PASSWORD, R.string.unified_pwd, R.drawable.work_fill0)
}
return list
}
val other: List<Restriction> get() {
val list = mutableListOf<Restriction>()
if(VERSION.SDK_INT>=26) list += Restriction(UserManager.DISALLOW_AUTOFILL, R.string.autofill, R.drawable.password_fill0)
list += Restriction(UserManager.DISALLOW_CONFIG_CREDENTIALS, R.string.config_credentials, R.drawable.android_fill0)
if(VERSION.SDK_INT>=29) {
list += Restriction(UserManager.DISALLOW_CONTENT_CAPTURE, R.string.content_capture, R.drawable.screenshot_fill0)
list += Restriction(UserManager.DISALLOW_CONTENT_SUGGESTIONS, R.string.content_suggestions, R.drawable.sms_fill0)
}
list += Restriction(UserManager.DISALLOW_CREATE_WINDOWS, R.string.create_windows, R.drawable.web_asset)
if(VERSION.SDK_INT>=24) list += Restriction(UserManager.DISALLOW_SET_WALLPAPER, R.string.set_wallpaper, R.drawable.wallpaper_fill0)
if(VERSION.SDK_INT>=34) list += Restriction(UserManager.DISALLOW_GRANT_ADMIN, R.string.grant_admin, R.drawable.security_fill0)
if(VERSION.SDK_INT>=23) list += Restriction(UserManager.DISALLOW_FUN, R.string.`fun`, R.drawable.stadia_controller_fill0)
list += Restriction(UserManager.DISALLOW_MODIFY_ACCOUNTS, R.string.modify_accounts, R.drawable.manage_accounts_fill0)
if(VERSION.SDK_INT>=28) {
list += Restriction(UserManager.DISALLOW_CONFIG_LOCALE, R.string.config_locale, R.drawable.language_fill0)
list += Restriction(UserManager.DISALLOW_CONFIG_DATE_TIME, R.string.config_date_time, R.drawable.schedule_fill0)
}
if(VERSION.SDK_INT>=28) list += Restriction(UserManager.DISALLOW_SYSTEM_ERROR_DIALOGS, R.string.sys_err_dialog, R.drawable.warning_fill0)
list += Restriction(UserManager.DISALLOW_FACTORY_RESET, R.string.factory_reset, R.drawable.android_fill0)
if(VERSION.SDK_INT>=23) list += Restriction(UserManager.DISALLOW_SAFE_BOOT, R.string.safe_boot, R.drawable.security_fill0)
list += Restriction(UserManager.DISALLOW_DEBUGGING_FEATURES, R.string.debug_features, R.drawable.adb_fill0)
return list
}
fun getAllRestrictions(): List<Restriction> =
internet + connectivity + media + applications + users + other
val internet = listOf(
Restriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, R.string.config_mobile_network, R.drawable.signal_cellular_alt_fill0),
Restriction(UserManager.DISALLOW_CONFIG_WIFI, R.string.config_wifi, R.drawable.wifi_fill0),
Restriction(UserManager.DISALLOW_DATA_ROAMING, R.string.data_roaming, R.drawable.network_cell_fill0, 24),
Restriction(UserManager.DISALLOW_CELLULAR_2G, R.string.cellular_2g, R.drawable.network_cell_fill0, 34),
Restriction(UserManager.DISALLOW_ULTRA_WIDEBAND_RADIO, R.string.ultra_wideband_radio, R.drawable.wifi_tethering_fill0, 34),
Restriction(UserManager.DISALLOW_ADD_WIFI_CONFIG, R.string.add_wifi_conf, R.drawable.wifi_fill0, 33),
Restriction(UserManager.DISALLOW_CHANGE_WIFI_STATE, R.string.change_wifi_state, R.drawable.wifi_fill0, 33),
Restriction(UserManager.DISALLOW_WIFI_DIRECT, R.string.wifi_direct, R.drawable.wifi_tethering_fill0),
Restriction(UserManager.DISALLOW_WIFI_TETHERING, R.string.wifi_tethering, R.drawable.wifi_tethering_fill0, 33),
Restriction(UserManager.DISALLOW_SHARING_ADMIN_CONFIGURED_WIFI, R.string.share_admin_wifi, R.drawable.share_fill0, 33),
Restriction(UserManager.DISALLOW_NETWORK_RESET, R.string.network_reset, R.drawable.reset_wrench_fill0, 23),
Restriction(UserManager.DISALLOW_CONFIG_TETHERING, R.string.config_tethering, R.drawable.wifi_tethering_fill0),
Restriction(UserManager.DISALLOW_CONFIG_VPN, R.string.config_vpn, R.drawable.vpn_key_fill0),
Restriction(UserManager.DISALLOW_CONFIG_PRIVATE_DNS, R.string.config_private_dns, R.drawable.dns_fill0, 29),
Restriction(UserManager.DISALLOW_AIRPLANE_MODE, R.string.airplane_mode, R.drawable.airplanemode_active_fill0, 28),
Restriction(UserManager.DISALLOW_CONFIG_CELL_BROADCASTS, R.string.config_cell_broadcasts, R.drawable.cell_tower_fill0),
Restriction(UserManager.DISALLOW_SMS, R.string.sms, R.drawable.sms_fill0),
Restriction(UserManager.DISALLOW_OUTGOING_CALLS, R.string.outgoing_calls, R.drawable.phone_forwarded_fill0),
Restriction(UserManager.DISALLOW_SIM_GLOBALLY, R.string.download_esim, R.drawable.sim_card_download_fill0)
)
val connectivity = listOf(
Restriction(UserManager.DISALLOW_BLUETOOTH, R.string.bluetooth, R.drawable.bluetooth_fill0, 26),
Restriction(UserManager.DISALLOW_BLUETOOTH_SHARING, R.string.bt_share, R.drawable.bluetooth_searching_fill0, 26),
Restriction(UserManager.DISALLOW_SHARE_LOCATION, R.string.share_location, R.drawable.location_on_fill0),
Restriction(UserManager.DISALLOW_CONFIG_LOCATION, R.string.config_location, R.drawable.location_on_fill0, 28),
Restriction(UserManager.DISALLOW_NEAR_FIELD_COMMUNICATION_RADIO, R.string.nfc, R.drawable.nfc_fill0, 35),
Restriction(UserManager.DISALLOW_OUTGOING_BEAM, R.string.outgoing_beam, R.drawable.nfc_fill0, 22),
Restriction(UserManager.DISALLOW_USB_FILE_TRANSFER, R.string.usb_file_transfer, R.drawable.usb_fill0),
Restriction(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA, R.string.mount_physical_media, R.drawable.sd_card_fill0),
Restriction(UserManager.DISALLOW_PRINTING, R.string.printing, R.drawable.print_fill0, 28)
)
val applications = listOf(
Restriction(UserManager.DISALLOW_INSTALL_APPS, R.string.install_app, R.drawable.android_fill0),
Restriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY, R.string.install_unknown_src_globally, R.drawable.android_fill0, 29),
Restriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES, R.string.inst_unknown_src, R.drawable.android_fill0),
Restriction(UserManager.DISALLOW_UNINSTALL_APPS, R.string.uninstall_app, R.drawable.delete_fill0),
Restriction(UserManager.DISALLOW_APPS_CONTROL, R.string.apps_ctrl, R.drawable.apps_fill0),
Restriction(UserManager.DISALLOW_CONFIG_DEFAULT_APPS, R.string.config_default_apps, R.drawable.apps_fill0, 34)
)
val media = listOf(
Restriction(UserManager.DISALLOW_CONFIG_BRIGHTNESS, R.string.config_brightness, R.drawable.brightness_5_fill0, 28),
Restriction(UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT, R.string.config_scr_timeout, R.drawable.screen_lock_portrait_fill0, 28),
Restriction(UserManager.DISALLOW_AMBIENT_DISPLAY, R.string.ambient_display, R.drawable.brightness_5_fill0, 28),
Restriction(UserManager.DISALLOW_ADJUST_VOLUME, R.string.adjust_volume, R.drawable.volume_up_fill0),
Restriction(UserManager.DISALLOW_UNMUTE_MICROPHONE, R.string.unmute_microphone, R.drawable.mic_fill0),
Restriction(UserManager.DISALLOW_CAMERA_TOGGLE, R.string.camera_toggle, R.drawable.cameraswitch_fill0, 31),
Restriction(UserManager.DISALLOW_MICROPHONE_TOGGLE, R.string.microphone_toggle, R.drawable.mic_fill0, 31)
)
val users = listOf(
Restriction(UserManager.DISALLOW_ADD_USER, R.string.add_user, R.drawable.account_circle_fill0),
Restriction(UserManager.DISALLOW_REMOVE_USER, R.string.remove_user, R.drawable.account_circle_fill0),
Restriction(UserManager.DISALLOW_USER_SWITCH, R.string.switch_user, R.drawable.account_circle_fill0, 28),
Restriction(UserManager.DISALLOW_ADD_PRIVATE_PROFILE, R.string.create_private_space, R.drawable.lock_fill0, 35),
Restriction(UserManager.DISALLOW_SET_USER_ICON, R.string.set_user_icon, R.drawable.account_circle_fill0, 24),
Restriction(UserManager.DISALLOW_CROSS_PROFILE_COPY_PASTE, R.string.cross_profile_copy, R.drawable.content_paste_fill0),
Restriction(UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, R.string.share_into_managed_profile, R.drawable.share_fill0, 28),
Restriction(UserManager.DISALLOW_UNIFIED_PASSWORD, R.string.unified_pwd, R.drawable.work_fill0, 28)
)
val other = listOf(
Restriction(UserManager.DISALLOW_AUTOFILL, R.string.autofill, R.drawable.password_fill0, 26),
Restriction(UserManager.DISALLOW_CONFIG_CREDENTIALS, R.string.config_credentials, R.drawable.android_fill0),
Restriction(UserManager.DISALLOW_CONTENT_CAPTURE, R.string.content_capture, R.drawable.screenshot_fill0, 29),
Restriction(UserManager.DISALLOW_CONTENT_SUGGESTIONS, R.string.content_suggestions, R.drawable.sms_fill0, 29),
Restriction(UserManager.DISALLOW_ASSIST_CONTENT, R.string.assist_content, R.drawable.info_fill0, 35),
Restriction(UserManager.DISALLOW_CREATE_WINDOWS, R.string.create_windows, R.drawable.web_asset),
Restriction(UserManager.DISALLOW_SET_WALLPAPER, R.string.set_wallpaper, R.drawable.wallpaper_fill0, 24),
Restriction(UserManager.DISALLOW_GRANT_ADMIN, R.string.grant_admin, R.drawable.security_fill0, 34),
Restriction(UserManager.DISALLOW_FUN, R.string.`fun`, R.drawable.stadia_controller_fill0, 23),
Restriction(UserManager.DISALLOW_MODIFY_ACCOUNTS, R.string.modify_accounts, R.drawable.manage_accounts_fill0),
Restriction(UserManager.DISALLOW_CONFIG_LOCALE, R.string.config_locale, R.drawable.language_fill0, 28),
Restriction(UserManager.DISALLOW_CONFIG_DATE_TIME, R.string.config_date_time, R.drawable.schedule_fill0, 28),
Restriction(UserManager.DISALLOW_SYSTEM_ERROR_DIALOGS, R.string.sys_err_dialog, R.drawable.warning_fill0, 28),
Restriction(UserManager.DISALLOW_FACTORY_RESET, R.string.factory_reset, R.drawable.android_fill0),
Restriction(UserManager.DISALLOW_SAFE_BOOT, R.string.safe_boot, R.drawable.security_fill0, 23),
Restriction(UserManager.DISALLOW_DEBUGGING_FEATURES, R.string.debug_features, R.drawable.adb_fill0)
)
fun getAllRestrictions() = internet + connectivity + media + applications + users + other
}

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="m480,680 l160,-160 -56,-56 -64,62v-166h-80v166l-64,-62 -56,56 160,160ZM240,880q-33,0 -56.5,-23.5T160,800v-480l240,-240h320q33,0 56.5,23.5T800,160v640q0,33 -23.5,56.5T720,880L240,880ZM240,800h480v-640L434,160L240,354v446ZM240,800h480,-480Z"
android:fillColor="#000000"/>
</vector>

View File

@@ -90,7 +90,6 @@
<string name="add_delegated_admin">Add delegated admin</string>
<string name="dhizuku_will_be_deactivated">Dhizuku будет деактивирован</string>
<string name="reset_device_policy">Сбросить политику устройства</string>
<string name="activate_device_admin">Активировать администратора устройства</string>
<string name="device_info">Информация об устройстве</string>
<string name="support_device_id_attestation">Поддержка аттестации идентификатора устройства</string>
<string name="support_unique_device_attestation">Поддержка аттестации уникального устройства</string>
@@ -133,7 +132,6 @@
<string name="shizuku_not_started">Shizuku не запущен. </string>
<string name="activate_device_owner">Активировать владельца устройства</string>
<string name="activate_org_profile">Активировать рабочий профиль, принадлежащий организации</string>
<string name="shizuku_service_disconnected">Служба Shizuku отключена</string>
<string name="accounts">Accounts</string> <!--TODO-->
<!--Системные-->
@@ -463,6 +461,7 @@
<string name="config_cell_broadcasts">Настроить сотовые оповещения</string>
<string name="sms">SMS</string>
<string name="outgoing_calls">Исходящие вызовы</string>
<string name="download_esim">Download eSIM</string> <!--TODO-->
<string name="bluetooth">Bluetooth</string>
<string name="bt_share">Обмен данными по Bluetooth</string>
@@ -489,6 +488,7 @@
<string name="add_user">Добавить пользователя</string>
<string name="remove_user">Удалить пользователя</string>
<string name="switch_user">Переключить пользователя</string>
<string name="create_private_space">Create private space</string> <!--TODO-->
<string name="set_user_icon">Установить значок пользователя</string>
<string name="cross_profile_copy">Копирование между профилями</string>
<string name="share_into_managed_profile">Поделиться в управляемом профиле</string>
@@ -498,6 +498,7 @@
<string name="config_credentials">Настроить учетные данные</string>
<string name="content_capture">Захват контента</string>
<string name="content_suggestions">Рекомендации по контенту</string>
<string name="assist_content">Assist content</string> <!--TODO-->
<string name="create_windows">Создать окна</string>
<string name="set_wallpaper">Установить обои</string>
<string name="grant_admin">Предоставить права администратора</string>
@@ -626,6 +627,7 @@
<string name="authenticate">Аутентифицировать</string>
<string name="lock_in_background">Блокировать при переключении в фоновый режим</string>
<string name="clear_storage">Очистить хранилище</string>
<string name="skipped_authentication">Skipped authentication because it is unavailable.</string> <!--TODO-->
<!--TODO-->
<string name="api_key">API key</string>

View File

@@ -90,7 +90,6 @@
<string name="add_delegated_admin">Add delegated admin</string>
<string name="dhizuku_will_be_deactivated">Dhizuku will be deactivated</string> <!--TODO-->
<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</string>
<string name="support_unique_device_attestation">Benzersiz Cihaz Doğrulama Desteği</string>
@@ -135,7 +134,6 @@
<string name="shizuku_not_started">Shizuku Başlatılmadı. </string>
<string name="activate_device_owner">Cihaz Sahibini Etkinleştir</string>
<string name="activate_org_profile">Kuruluş Profili Sahibini Etkinleştir</string>
<string name="shizuku_service_disconnected">Shizuku Hizmeti Bağlantısı Kesildi</string>
<string name="accounts">Accounts</string> <!--TODO-->
<!--System-->
@@ -463,6 +461,7 @@
<string name="config_cell_broadcasts">Hücre yayınlarını yapılandır</string>
<string name="sms">SMS</string>
<string name="outgoing_calls">Giden aramalar</string>
<string name="download_esim">Download eSIM</string> <!--TODO-->
<string name="bluetooth">Bluetooth</string>
<string name="bt_share">Bluetooth paylaşımı</string>
@@ -489,6 +488,7 @@
<string name="add_user">Kullanıcı ekle</string>
<string name="remove_user">Kullanıcıyı kaldır</string>
<string name="switch_user">Kullanıcıyı değiştir</string>
<string name="create_private_space">Create private space</string> <!--TODO-->
<string name="set_user_icon">Kullanıcı simgesini ayarla</string>
<string name="cross_profile_copy">Profil geçişli kopyalama</string>
<string name="share_into_managed_profile">Yönetilen profile paylaş</string>
@@ -498,6 +498,7 @@
<string name="config_credentials">Kimlik bilgilerini yapılandır</string>
<string name="content_capture">İçerik yakalama</string>
<string name="content_suggestions">İçerik önerileri</string>
<string name="assist_content">Assist content</string> <!--TODO-->
<string name="create_windows">Pencere oluştur</string>
<string name="set_wallpaper">Duvar kağıdı ayarla</string>
<string name="grant_admin">Cihaz yöneticisi yetkisi ver</string>
@@ -622,6 +623,7 @@
<string name="authenticate">Doğrula</string>
<string name="lock_in_background">Arka plana geçince kilitle</string>
<string name="clear_storage">Depolamayı temizle</string>
<string name="skipped_authentication">Skipped authentication because it is unavailable.</string> <!--TODO-->
<!--TODO-->
<string name="api_key">API key</string>

View File

@@ -85,7 +85,6 @@
<string name="add_delegated_admin">添加委托管理员</string>
<string name="reset_device_policy">重置设备策略</string>
<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认证</string>
<string name="support_unique_device_attestation">支持唯一设备认证</string>
@@ -128,7 +127,6 @@
<string name="shizuku_not_started">服务未启动</string>
<string name="activate_device_owner">激活Device owner</string>
<string name="activate_org_profile">激活由组织拥有的工作资料</string>
<string name="shizuku_service_disconnected">Shizuku服务断开连接</string>
<string name="accounts">账号</string>
<!--System-->
@@ -449,6 +447,7 @@
<string name="config_cell_broadcasts">配置小区广播</string>
<string name="sms">短信</string>
<string name="outgoing_calls">拨出电话</string>
<string name="download_esim">下载eSIM</string>
<string name="bluetooth">蓝牙</string>
<string name="bt_share">蓝牙分享</string>
@@ -475,6 +474,7 @@
<string name="add_user">添加用户</string>
<string name="remove_user">移除用户</string>
<string name="switch_user">切换用户</string>
<string name="create_private_space">创建私密空间</string>
<string name="set_user_icon">修改用户头像</string>
<string name="cross_profile_copy">跨用户复制</string>
<string name="share_into_managed_profile">分享至工作应用</string>
@@ -484,6 +484,7 @@
<string name="config_credentials">配置凭据</string>
<string name="content_capture">内容捕获</string>
<string name="content_suggestions">内容建议</string>
<string name="assist_content">辅助内容</string>
<string name="create_windows">创建窗口</string>
<string name="set_wallpaper">更换壁纸</string>
<string name="grant_admin">启用设备管理器</string>
@@ -608,6 +609,7 @@
<string name="authenticate">验证</string>
<string name="lock_in_background">处于后台时锁定</string>
<string name="clear_storage">清除存储空间</string>
<string name="skipped_authentication">验证已跳过,因为不可用</string>
<string name="api_key">API密钥</string>
<string name="api_key_exist">API密钥已存在设置新的密钥将会覆盖当前密钥</string>

View File

@@ -484,11 +484,13 @@
<string name="config_cell_broadcasts">Configure cell broadcasts</string>
<string name="sms">SMS</string>
<string name="outgoing_calls">Outgoing calls</string>
<string name="download_esim">Download eSIM</string>
<string name="bluetooth">Bluetooth</string>
<string name="bt_share">Bluetooth sharing</string>
<string name="share_location">Share location</string>
<string name="config_location">Configure location</string>
<string name="nfc" translatable="false">NFC</string>
<string name="outgoing_beam">Outgoing Beam</string>
<string name="usb_file_transfer">USB file transfer</string>
<string name="mount_physical_media">Mount physical media</string>
@@ -510,6 +512,7 @@
<string name="add_user">Add user</string>
<string name="remove_user">Remove user</string>
<string name="switch_user">Switch user</string>
<string name="create_private_space">Create private space</string>
<string name="set_user_icon">Set user icon</string>
<string name="cross_profile_copy">Cross profile copy</string>
<string name="share_into_managed_profile">Share into managed profile</string>
@@ -519,6 +522,7 @@
<string name="config_credentials">Configure credentials</string>
<string name="content_capture">Content capture</string>
<string name="content_suggestions">Content suggestions</string>
<string name="assist_content">Assist content</string>
<string name="create_windows">Create windows</string>
<string name="set_wallpaper">Set wallpaper</string>
<string name="grant_admin">Grant device admin</string>