mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-24 03:16:00 +00:00
In-app docs for some feature
This commit is contained in:
@@ -85,6 +85,7 @@ import com.bintianqi.owndroid.fileUriFlow
|
||||
import com.bintianqi.owndroid.getFile
|
||||
import com.bintianqi.owndroid.selectedPackage
|
||||
import com.bintianqi.owndroid.ui.Animations
|
||||
import com.bintianqi.owndroid.ui.InfoCard
|
||||
import com.bintianqi.owndroid.ui.Information
|
||||
import com.bintianqi.owndroid.ui.ListItem
|
||||
import com.bintianqi.owndroid.ui.NavIcon
|
||||
@@ -295,8 +296,7 @@ private fun Home(
|
||||
else -> R.string.unknown
|
||||
}
|
||||
),
|
||||
style = typography.headlineMedium,
|
||||
modifier = Modifier.padding(start = 5.dp)
|
||||
style = typography.headlineMedium
|
||||
)
|
||||
},
|
||||
text = {
|
||||
@@ -306,10 +306,11 @@ private fun Home(
|
||||
3 -> blockUninstall
|
||||
else -> false
|
||||
}
|
||||
Text(
|
||||
text = stringResource(R.string.current_state, stringResource(if(enabled) R.string.enabled else R.string.disabled)),
|
||||
modifier = Modifier.padding(start = 5.dp, top = 5.dp, bottom = 5.dp)
|
||||
)
|
||||
Column {
|
||||
Text(stringResource(R.string.current_state, stringResource(if(enabled) R.string.enabled else R.string.disabled)))
|
||||
Spacer(Modifier.padding(vertical = 4.dp))
|
||||
if(appControlAction == 1) Text(stringResource(R.string.info_suspend_app))
|
||||
}
|
||||
},
|
||||
confirmButton = {
|
||||
TextButton(
|
||||
@@ -374,6 +375,7 @@ private fun UserCtrlDisabledPkg(pkgName:String) {
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
InfoCard(R.string.info_disable_user_control)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
@@ -799,6 +801,7 @@ private fun KeepUninstalledApp(pkgName: String) {
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
InfoCard(R.string.info_keep_uninstalled_apps)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,6 +63,7 @@ import com.bintianqi.owndroid.R
|
||||
import com.bintianqi.owndroid.ui.Animations
|
||||
import com.bintianqi.owndroid.ui.CheckBoxItem
|
||||
import com.bintianqi.owndroid.ui.CopyTextButton
|
||||
import com.bintianqi.owndroid.ui.InfoCard
|
||||
import com.bintianqi.owndroid.ui.SubPageItem
|
||||
import com.bintianqi.owndroid.ui.SwitchItem
|
||||
import com.bintianqi.owndroid.ui.TopBar
|
||||
@@ -271,6 +272,7 @@ private fun SuspendPersonalApp() {
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
InfoCard(R.string.info_profile_maximum_time_off)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -321,6 +323,7 @@ private fun IntentFilter() {
|
||||
) {
|
||||
Text(stringResource(R.string.clear_cross_profile_filters))
|
||||
}
|
||||
InfoCard(R.string.info_cross_profile_intent_filter)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -111,6 +111,7 @@ import com.bintianqi.owndroid.formatFileSize
|
||||
import com.bintianqi.owndroid.selectedPackage
|
||||
import com.bintianqi.owndroid.ui.Animations
|
||||
import com.bintianqi.owndroid.ui.CheckBoxItem
|
||||
import com.bintianqi.owndroid.ui.InfoCard
|
||||
import com.bintianqi.owndroid.ui.ListItem
|
||||
import com.bintianqi.owndroid.ui.RadioButtonItem
|
||||
import com.bintianqi.owndroid.ui.SubPageItem
|
||||
@@ -241,14 +242,23 @@ private fun Switches() {
|
||||
val dpm = context.getDPM()
|
||||
val receiver = context.getReceiver()
|
||||
val deviceOwner = context.isDeviceOwner
|
||||
Column(modifier = Modifier.fillMaxSize().padding(start = 20.dp, end = 16.dp)) {
|
||||
var dialog by remember { mutableIntStateOf(0) }
|
||||
Column(modifier = Modifier.fillMaxSize()) {
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if(VERSION.SDK_INT>=30 && (deviceOwner || dpm.isOrgProfile(receiver))) {
|
||||
SwitchItem(R.string.lockdown_admin_configured_network, "", R.drawable.wifi_password_fill0,
|
||||
{ dpm.hasLockdownAdminConfiguredNetworks(receiver) }, { dpm.setConfiguredNetworksLockdownState(receiver,it) }, padding = false
|
||||
{ dpm.hasLockdownAdminConfiguredNetworks(receiver) }, { dpm.setConfiguredNetworksLockdownState(receiver,it) },
|
||||
onClickBlank = { dialog = 1 }
|
||||
)
|
||||
}
|
||||
}
|
||||
if(dialog != 0) AlertDialog(
|
||||
text = { Text(stringResource(R.string.info_lockdown_admin_configured_network)) },
|
||||
confirmButton = {
|
||||
TextButton(onClick = { dialog = 0 }) { Text(stringResource(R.string.confirm)) }
|
||||
},
|
||||
onDismissRequest = { dialog = 0 }
|
||||
)
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
@@ -292,6 +302,7 @@ private fun WifiSecLevel() {
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
InfoCard(R.string.info_minimum_wifi_security_level)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -418,6 +429,7 @@ private fun PrivateDNS() {
|
||||
Text(stringResource(R.string.set_to_opportunistic))
|
||||
}
|
||||
}
|
||||
InfoCard(R.string.info_private_dns_mode_oppertunistic)
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
var inputHost by remember { mutableStateOf(dpm.getGlobalPrivateDnsHost(receiver) ?: "") }
|
||||
OutlinedTextField(
|
||||
@@ -450,6 +462,8 @@ private fun PrivateDNS() {
|
||||
) {
|
||||
Text(stringResource(R.string.set_dns_host))
|
||||
}
|
||||
InfoCard(R.string.info_set_private_dns_host)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -522,6 +536,7 @@ fun AlwaysOnVPNPackage(navCtrl: NavHostController) {
|
||||
) {
|
||||
Text(stringResource(R.string.clear_current_config))
|
||||
}
|
||||
InfoCard(R.string.info_always_on_vpn)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
@@ -621,6 +636,7 @@ private fun RecommendedGlobalProxy() {
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
InfoCard(R.string.info_recommended_global_proxy)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -667,6 +683,7 @@ private fun NetworkLog() {
|
||||
Text(stringResource(R.string.delete_logs))
|
||||
}
|
||||
}
|
||||
InfoCard(R.string.info_network_log)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import android.app.admin.DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Build.VERSION
|
||||
import android.os.UserManager
|
||||
import android.widget.Toast
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.foundation.ScrollState
|
||||
@@ -83,6 +84,7 @@ import com.bintianqi.owndroid.toggle
|
||||
import com.bintianqi.owndroid.ui.Animations
|
||||
import com.bintianqi.owndroid.ui.CardItem
|
||||
import com.bintianqi.owndroid.ui.CheckBoxItem
|
||||
import com.bintianqi.owndroid.ui.InfoCard
|
||||
import com.bintianqi.owndroid.ui.Information
|
||||
import com.bintianqi.owndroid.ui.RadioButtonItem
|
||||
import com.bintianqi.owndroid.ui.SubPageItem
|
||||
@@ -200,6 +202,7 @@ private fun Home(navCtrl:NavHostController, scrollState: ScrollState) {
|
||||
},
|
||||
text = {
|
||||
val focusMgr = LocalFocusManager.current
|
||||
val um = context.getSystemService(Context.USER_SERVICE) as UserManager
|
||||
Column {
|
||||
OutlinedTextField(
|
||||
value = input,
|
||||
@@ -217,13 +220,18 @@ private fun Home(navCtrl:NavHostController, scrollState: ScrollState) {
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = { focusMgr.clearFocus() }),
|
||||
textStyle = typography.bodyLarge,
|
||||
modifier = Modifier.fillMaxWidth().padding(bottom = 5.dp)
|
||||
modifier = Modifier.fillMaxWidth().padding(bottom = 8.dp)
|
||||
)
|
||||
when(dialog) {
|
||||
4 -> Text(stringResource(R.string.max_pwd_fail_desc))
|
||||
5 -> Text(stringResource(R.string.pwd_history_desc))
|
||||
}
|
||||
Text(stringResource(R.string.zero_means_no_restriction))
|
||||
Text(stringResource(
|
||||
when(dialog) {
|
||||
1 -> R.string.info_screen_timeout
|
||||
2 -> R.string.info_required_strong_auth_timeout
|
||||
3 -> R.string.info_password_expiration_timeout
|
||||
4 -> if(um.isSystemUser) R.string.info_max_failed_password_system_user else R.string.info_max_failed_password_other_user
|
||||
5 -> R.string.info_password_history_length
|
||||
else -> R.string.password
|
||||
}
|
||||
))
|
||||
}
|
||||
},
|
||||
confirmButton = {
|
||||
@@ -435,6 +443,7 @@ private fun ResetPassword() {
|
||||
Text(stringResource(R.string.reset_password))
|
||||
}
|
||||
}
|
||||
InfoCard(R.string.info_reset_password)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
if(confirmDialog) {
|
||||
|
||||
@@ -102,9 +102,8 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
|
||||
SwitchItem(
|
||||
R.string.dhizuku, "", null,
|
||||
{ sharedPref.getBoolean("dhizuku", false) },
|
||||
{
|
||||
toggleDhizukuMode(it, context)
|
||||
}
|
||||
{ toggleDhizukuMode(it, context) },
|
||||
onClickBlank = { dialog = 4 }
|
||||
)
|
||||
}
|
||||
SubPageItem(
|
||||
@@ -154,6 +153,7 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
|
||||
1 -> R.string.enrollment_specific_id
|
||||
2 -> R.string.org_name
|
||||
3 -> R.string.org_id
|
||||
4 -> R.string.dhizuku
|
||||
else -> R.string.permission
|
||||
}
|
||||
))
|
||||
@@ -163,35 +163,41 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
|
||||
LaunchedEffect(Unit) {
|
||||
if(dialog == 1) input = dpm.enrollmentSpecificId
|
||||
}
|
||||
OutlinedTextField(
|
||||
value = input,
|
||||
onValueChange = { input = it }, readOnly = dialog == 1, modifier = Modifier.fillMaxWidth(),
|
||||
label = {
|
||||
Text(stringResource(
|
||||
when(dialog){
|
||||
1 -> R.string.enrollment_specific_id
|
||||
2 -> R.string.org_name
|
||||
3 -> R.string.org_id
|
||||
else -> R.string.permission
|
||||
Column {
|
||||
if(dialog != 4) OutlinedTextField(
|
||||
value = input,
|
||||
onValueChange = { input = it }, readOnly = dialog == 1,
|
||||
label = {
|
||||
Text(stringResource(
|
||||
when(dialog){
|
||||
1 -> R.string.enrollment_specific_id
|
||||
2 -> R.string.org_name
|
||||
3 -> R.string.org_id
|
||||
else -> R.string.permission
|
||||
}
|
||||
))
|
||||
},
|
||||
trailingIcon = {
|
||||
if(dialog == 1) IconButton(onClick = { writeClipBoard(context, input) }) {
|
||||
Icon(painter = painterResource(R.drawable.content_copy_fill0), contentDescription = stringResource(R.string.copy))
|
||||
}
|
||||
))
|
||||
},
|
||||
trailingIcon = {
|
||||
if(dialog == 1) IconButton(onClick = { writeClipBoard(context, input) }) {
|
||||
Icon(painter = painterResource(R.drawable.content_copy_fill0), contentDescription = stringResource(R.string.copy))
|
||||
}
|
||||
},
|
||||
supportingText = {
|
||||
if(dialog == 3) Text(stringResource(R.string.length_6_to_64))
|
||||
},
|
||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions { focusMgr.clearFocus() },
|
||||
textStyle = typography.bodyLarge
|
||||
)
|
||||
},
|
||||
supportingText = {
|
||||
if(dialog == 3) Text(stringResource(R.string.length_6_to_64))
|
||||
},
|
||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions { focusMgr.clearFocus() },
|
||||
textStyle = typography.bodyLarge,
|
||||
modifier = Modifier.fillMaxWidth().padding(bottom = if(dialog == 2) 0.dp else 10.dp)
|
||||
)
|
||||
if(dialog == 1) Text(stringResource(R.string.info_enrollment_specific_id))
|
||||
if(dialog == 3) Text(stringResource(R.string.info_org_id))
|
||||
if(dialog == 4) Text(stringResource(R.string.info_dhizuku))
|
||||
}
|
||||
},
|
||||
onDismissRequest = { dialog = 0 },
|
||||
dismissButton = {
|
||||
TextButton(
|
||||
if(dialog != 4) TextButton(
|
||||
onClick = { dialog = 0 }
|
||||
) {
|
||||
Text(stringResource(R.string.cancel))
|
||||
@@ -261,6 +267,8 @@ private fun LockScreenInfo() {
|
||||
value = infoText,
|
||||
label = { Text(stringResource(R.string.device_owner_lock_screen_info)) },
|
||||
onValueChange = { infoText = it },
|
||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions { focusMgr.clearFocus() },
|
||||
modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp)
|
||||
)
|
||||
Button(
|
||||
@@ -283,6 +291,8 @@ private fun LockScreenInfo() {
|
||||
) {
|
||||
Text(text = stringResource(R.string.reset))
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
InfoCard(R.string.info_lock_screen_info)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -366,6 +376,7 @@ private fun ProfileOwner() {
|
||||
Text(stringResource(R.string.deactivate))
|
||||
}
|
||||
}
|
||||
InfoCard(R.string.profile_owner)
|
||||
}
|
||||
if(deactivateDialog && VERSION.SDK_INT >= 24) {
|
||||
AlertDialog(
|
||||
@@ -469,6 +480,7 @@ fun DeviceInfo() {
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getDPM()
|
||||
val receiver = context.getReceiver()
|
||||
var dialog by remember { mutableIntStateOf(0) }
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)) {
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.device_info), style = typography.headlineLarge)
|
||||
@@ -489,16 +501,21 @@ fun DeviceInfo() {
|
||||
if(VERSION.SDK_INT >= 24) { encryptionStatus[DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE_PER_USER] = R.string.es_active_per_user }
|
||||
CardItem(R.string.encryption_status, encryptionStatus[dpm.storageEncryptionStatus] ?: R.string.unknown)
|
||||
if(VERSION.SDK_INT >= 28) {
|
||||
CardItem(R.string.support_device_id_attestation, dpm.isDeviceIdAttestationSupported.yesOrNo())
|
||||
CardItem(R.string.support_device_id_attestation, dpm.isDeviceIdAttestationSupported.yesOrNo()) { dialog = 1 }
|
||||
}
|
||||
if (VERSION.SDK_INT >= 30) {
|
||||
CardItem(R.string.support_unique_device_attestation, dpm.isUniqueDeviceAttestationSupported.yesOrNo())
|
||||
CardItem(R.string.support_unique_device_attestation, dpm.isUniqueDeviceAttestationSupported.yesOrNo()) { dialog = 2 }
|
||||
}
|
||||
val adminList = dpm.activeAdmins
|
||||
if(adminList != null) {
|
||||
CardItem(R.string.activated_device_admin, adminList.map { it.flattenToShortString() }.joinToString("\n"))
|
||||
}
|
||||
}
|
||||
if(dialog != 0) AlertDialog(
|
||||
text = { Text(stringResource(if(dialog == 1) R.string.info_device_id_attestation else R.string.info_unique_device_attestation)) },
|
||||
confirmButton = { TextButton(onClick = { dialog = 0 }) { Text(stringResource(R.string.confirm)) } },
|
||||
onDismissRequest = { dialog = 0 }
|
||||
)
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
@@ -547,6 +564,7 @@ private fun SupportMsg() {
|
||||
Text(text = stringResource(R.string.reset))
|
||||
}
|
||||
}
|
||||
InfoCard(R.string.info_short_support_message)
|
||||
Spacer(Modifier.padding(vertical = 8.dp))
|
||||
OutlinedTextField(
|
||||
value = longMsg,
|
||||
@@ -577,6 +595,7 @@ private fun SupportMsg() {
|
||||
Text(text = stringResource(R.string.reset))
|
||||
}
|
||||
}
|
||||
InfoCard(R.string.info_long_support_message)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
@@ -591,8 +610,6 @@ private fun TransferOwnership() {
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.transfer_ownership), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Text(text = stringResource(R.string.transfer_ownership_desc))
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
OutlinedTextField(
|
||||
value = component, onValueChange = { component = it }, label = { Text(stringResource(R.string.target_component_name)) },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
@@ -616,7 +633,8 @@ private fun TransferOwnership() {
|
||||
) {
|
||||
Text(stringResource(R.string.transfer))
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
InfoCard(R.string.info_transfer_ownership)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ import android.app.admin.SystemUpdatePolicy.TYPE_POSTPONE
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.icu.text.IDNA
|
||||
import android.net.Uri
|
||||
import android.os.Build.VERSION
|
||||
import android.os.UserManager
|
||||
@@ -116,6 +117,7 @@ import com.bintianqi.owndroid.selectedPackage
|
||||
import com.bintianqi.owndroid.toggle
|
||||
import com.bintianqi.owndroid.ui.Animations
|
||||
import com.bintianqi.owndroid.ui.CheckBoxItem
|
||||
import com.bintianqi.owndroid.ui.InfoCard
|
||||
import com.bintianqi.owndroid.ui.Information
|
||||
import com.bintianqi.owndroid.ui.ListItem
|
||||
import com.bintianqi.owndroid.ui.RadioButtonItem
|
||||
@@ -261,30 +263,31 @@ private fun Switches() {
|
||||
val deviceOwner = context.isDeviceOwner
|
||||
val profileOwner = context.isProfileOwner
|
||||
val um = context.getSystemService(Context.USER_SERVICE) as UserManager
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(start = 20.dp, end = 16.dp)) {
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
var dialog by remember { mutableIntStateOf(0) }
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())) {
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if(deviceOwner || profileOwner) {
|
||||
SwitchItem(R.string.disable_cam,"", R.drawable.photo_camera_fill0,
|
||||
{ dpm.getCameraDisabled(null) }, { dpm.setCameraDisabled(receiver,it) }, padding = false
|
||||
{ dpm.getCameraDisabled(null) }, { dpm.setCameraDisabled(receiver,it) }
|
||||
)
|
||||
}
|
||||
if(deviceOwner || profileOwner) {
|
||||
SwitchItem(R.string.disable_screen_capture, "", R.drawable.screenshot_fill0,
|
||||
{ dpm.getScreenCaptureDisabled(null) }, { dpm.setScreenCaptureDisabled(receiver,it) }, padding = false
|
||||
{ dpm.getScreenCaptureDisabled(null) }, { dpm.setScreenCaptureDisabled(receiver,it) }
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT >= 34 && (deviceOwner || (profileOwner && dpm.isAffiliatedUser))) {
|
||||
SwitchItem(R.string.disable_status_bar, "", R.drawable.notifications_fill0,
|
||||
{ dpm.isStatusBarDisabled}, { dpm.setStatusBarDisabled(receiver,it) }, padding = false
|
||||
{ dpm.isStatusBarDisabled}, { dpm.setStatusBarDisabled(receiver,it) }
|
||||
)
|
||||
}
|
||||
if(deviceOwner || (VERSION.SDK_INT >= 23 && profileOwner && um.isSystemUser) || dpm.isOrgProfile(receiver)) {
|
||||
if(VERSION.SDK_INT >= 30) {
|
||||
SwitchItem(R.string.auto_time, "", R.drawable.schedule_fill0,
|
||||
{ dpm.getAutoTimeEnabled(receiver) }, { dpm.setAutoTimeEnabled(receiver,it) }, padding = false
|
||||
{ dpm.getAutoTimeEnabled(receiver) }, { dpm.setAutoTimeEnabled(receiver,it) }
|
||||
)
|
||||
SwitchItem(R.string.auto_timezone, "", R.drawable.globe_fill0,
|
||||
{ dpm.getAutoTimeZoneEnabled(receiver) }, { dpm.setAutoTimeZoneEnabled(receiver,it) }, padding = false
|
||||
{ dpm.getAutoTimeZoneEnabled(receiver) }, { dpm.setAutoTimeZoneEnabled(receiver,it) }
|
||||
)
|
||||
}else{
|
||||
SwitchItem(R.string.require_auto_time, "", R.drawable.schedule_fill0, { dpm.autoTimeRequired}, { dpm.setAutoTimeRequired(receiver,it) }, padding = false)
|
||||
@@ -292,32 +295,49 @@ private fun Switches() {
|
||||
}
|
||||
if(deviceOwner || (profileOwner && (VERSION.SDK_INT < 24 || (VERSION.SDK_INT >= 24 && !dpm.isManagedProfile(receiver))))) {
|
||||
SwitchItem(R.string.master_mute, "", R.drawable.volume_up_fill0,
|
||||
{ dpm.isMasterVolumeMuted(receiver) }, { dpm.setMasterVolumeMuted(receiver,it) }, padding = false
|
||||
{ dpm.isMasterVolumeMuted(receiver) }, { dpm.setMasterVolumeMuted(receiver,it) }
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT >= 26 && (deviceOwner || profileOwner)) {
|
||||
SwitchItem(R.string.backup_service, "", R.drawable.backup_fill0,
|
||||
{ dpm.isBackupServiceEnabled(receiver) }, { dpm.setBackupServiceEnabled(receiver,it) }, padding = false
|
||||
{ dpm.isBackupServiceEnabled(receiver) }, { dpm.setBackupServiceEnabled(receiver,it) },
|
||||
onClickBlank = { dialog = 1 }
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT >= 24 && profileOwner && dpm.isManagedProfile(receiver)) {
|
||||
SwitchItem(R.string.disable_bt_contact_share, "", R.drawable.account_circle_fill0,
|
||||
{ dpm.getBluetoothContactSharingDisabled(receiver) }, { dpm.setBluetoothContactSharingDisabled(receiver,it) }, padding = false
|
||||
{ dpm.getBluetoothContactSharingDisabled(receiver) }, { dpm.setBluetoothContactSharingDisabled(receiver,it) },
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT >= 30 && deviceOwner) {
|
||||
SwitchItem(R.string.common_criteria_mode , "",R.drawable.security_fill0,
|
||||
{ dpm.isCommonCriteriaModeEnabled(receiver) }, { dpm.setCommonCriteriaModeEnabled(receiver,it) }, padding = false
|
||||
{ dpm.isCommonCriteriaModeEnabled(receiver) }, { dpm.setCommonCriteriaModeEnabled(receiver,it) },
|
||||
onClickBlank = { dialog = 2 }
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT >= 31 && (deviceOwner || dpm.isOrgProfile(receiver)) && dpm.canUsbDataSignalingBeDisabled()) {
|
||||
SwitchItem(
|
||||
R.string.disable_usb_signal, "", R.drawable.usb_fill0, { !dpm.isUsbDataSignalingEnabled },
|
||||
{ dpm.isUsbDataSignalingEnabled = !it }, padding = false
|
||||
{ dpm.isUsbDataSignalingEnabled = !it },
|
||||
)
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
if(dialog != 0) AlertDialog(
|
||||
text = {
|
||||
Text(stringResource(
|
||||
when(dialog) {
|
||||
1 -> R.string.info_backup_service
|
||||
2 -> R.string.info_common_criteria_mode
|
||||
else -> R.string.options
|
||||
}
|
||||
))
|
||||
},
|
||||
confirmButton = {
|
||||
TextButton(onClick = { dialog = 0 }) { Text(stringResource(R.string.confirm)) }
|
||||
},
|
||||
onDismissRequest = { dialog = 0 }
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
@@ -329,9 +349,9 @@ private fun Keyguard() {
|
||||
val profileOwner = context.isProfileOwner
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())) {
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.keyguard), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if(VERSION.SDK_INT >= 23) {
|
||||
Text(text = stringResource(R.string.keyguard), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -355,7 +375,8 @@ private fun Keyguard() {
|
||||
Text(stringResource(R.string.enable))
|
||||
}
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 15.dp))
|
||||
InfoCard(R.string.info_disable_keyguard)
|
||||
Spacer(Modifier.padding(vertical = 12.dp))
|
||||
}
|
||||
Text(text = stringResource(R.string.lock_now), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 2.dp))
|
||||
@@ -377,6 +398,9 @@ private fun Keyguard() {
|
||||
) {
|
||||
Text(stringResource(R.string.lock_now))
|
||||
}
|
||||
if(VERSION.SDK_INT >= 26 && profileOwner && dpm.isManagedProfile(receiver)) {
|
||||
InfoCard(R.string.info_evict_credential_encryption_key)
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
@@ -420,7 +444,7 @@ private fun RebootDialog(status: MutableState<Boolean>) {
|
||||
AlertDialog(
|
||||
onDismissRequest = { status.value = false },
|
||||
title = { Text(stringResource(R.string.reboot)) },
|
||||
text = { Text(stringResource(R.string.confirm_reboot)) },
|
||||
text = { Text(stringResource(R.string.info_reboot)) },
|
||||
dismissButton = {
|
||||
TextButton(onClick = { status.value = false }) {
|
||||
Text(stringResource(R.string.cancel))
|
||||
@@ -431,7 +455,7 @@ private fun RebootDialog(status: MutableState<Boolean>) {
|
||||
onClick = { dpm.reboot(receiver) },
|
||||
colors = ButtonDefaults.textButtonColors(contentColor = colorScheme.error)
|
||||
) {
|
||||
Text(stringResource(R.string.reboot))
|
||||
Text(stringResource(R.string.confirm))
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -445,35 +469,28 @@ private fun EditTime() {
|
||||
val dpm = context.getDPM()
|
||||
val receiver = context.getReceiver()
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var inputTime by remember { mutableStateOf("") }
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())) {
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.edit_time), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
var inputTime by remember { mutableStateOf("") }
|
||||
Text(text = stringResource(R.string.from_epoch_to_target_time))
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
OutlinedTextField(
|
||||
value = inputTime,
|
||||
label = { Text(stringResource(R.string.time_unit_ms)) },
|
||||
onValueChange = { inputTime = it},
|
||||
onValueChange = { inputTime = it },
|
||||
supportingText = { Text(stringResource(R.string.info_edit_time)) },
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus() }),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = { dpm.setTime(receiver,inputTime.toLong()) },
|
||||
onClick = { dpm.setTime(receiver, inputTime.toLong()) },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
enabled = inputTime != ""
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
Button(
|
||||
onClick = { inputTime = System.currentTimeMillis().toString() },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.get_current_time))
|
||||
}
|
||||
}
|
||||
}
|
||||
@SuppressLint("NewApi")
|
||||
@@ -553,6 +570,7 @@ private fun PermissionPolicy() {
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
InfoCard(R.string.info_permission_policy)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -595,8 +613,7 @@ private fun MTEPolicy() {
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Information { Text(stringResource(R.string.mte_policy_desc)) }
|
||||
InfoCard(R.string.info_mte_policy)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
@@ -641,6 +658,7 @@ private fun NearbyStreamingPolicy() {
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
InfoCard(R.string.info_nearby_app_streaming_policy)
|
||||
var notificationPolicy by remember { mutableIntStateOf(dpm.nearbyNotificationStreamingPolicy) }
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.nearby_notification_streaming), style = typography.titleLarge)
|
||||
@@ -675,6 +693,7 @@ private fun NearbyStreamingPolicy() {
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
InfoCard(R.string.info_nearby_notification_streaming_policy)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
@@ -840,6 +859,7 @@ private fun LockTaskMode(navCtrl: NavHostController) {
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
InfoCard(R.string.info_lock_task_packages)
|
||||
var startLockTaskApp by rememberSaveable { mutableStateOf("") }
|
||||
var startLockTaskActivity by rememberSaveable { mutableStateOf("") }
|
||||
var specifyActivity by rememberSaveable { mutableStateOf(false) }
|
||||
@@ -909,6 +929,7 @@ private fun LockTaskMode(navCtrl: NavHostController) {
|
||||
) {
|
||||
Text(stringResource(R.string.start))
|
||||
}
|
||||
InfoCard(R.string.info_start_lock_task_mode)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
@@ -1040,6 +1061,7 @@ private fun SecurityLogs() {
|
||||
Text(stringResource(R.string.delete_logs))
|
||||
}
|
||||
}
|
||||
InfoCard(R.string.info_security_log)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
@@ -1074,6 +1096,7 @@ private fun SecurityLogs() {
|
||||
) {
|
||||
Text(stringResource(R.string.pre_reboot_security_logs))
|
||||
}
|
||||
InfoCard(R.string.info_pre_reboot_security_log)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1113,7 +1136,8 @@ private fun DisableAccountManagement() {
|
||||
dpm.setAccountManagementDisabled(receiver, inputText, true)
|
||||
inputText = ""
|
||||
refreshList()
|
||||
}
|
||||
},
|
||||
enabled = inputText != ""
|
||||
) {
|
||||
Icon(imageVector = Icons.Default.Add, contentDescription = stringResource(R.string.add))
|
||||
}
|
||||
@@ -1122,6 +1146,8 @@ private fun DisableAccountManagement() {
|
||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = { focusMgr.clearFocus() })
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
InfoCard(R.string.info_disable_account_management)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1216,11 +1242,9 @@ fun FactoryResetProtection() {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
if(unsupported) {
|
||||
Information {
|
||||
Text(stringResource(R.string.frp_policy_not_supported))
|
||||
}
|
||||
}
|
||||
if(unsupported) Text(stringResource(R.string.frp_policy_not_supported))
|
||||
Spacer(Modifier.padding(vertical = 6.dp))
|
||||
InfoCard(R.string.info_frp_policy)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
@@ -1280,7 +1304,7 @@ private fun WipeData() {
|
||||
Text("WipeData")
|
||||
}
|
||||
}
|
||||
if (VERSION.SDK_INT >= 34 && (context.isDeviceOwner || dpm.isOrgProfile(receiver))) {
|
||||
if (VERSION.SDK_INT >= 34 && context.isDeviceOwner) {
|
||||
Button(
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
@@ -1302,7 +1326,10 @@ private fun WipeData() {
|
||||
Text(text = stringResource(R.string.warning), color = colorScheme.error)
|
||||
},
|
||||
text = {
|
||||
Text(text = stringResource(R.string.wipe_data_warning), color = colorScheme.error)
|
||||
Text(
|
||||
text = stringResource(if(userManager.isSystemUser) R.string.wipe_data_warning else R.string.info_wipe_data_in_managed_user),
|
||||
color = colorScheme.error
|
||||
)
|
||||
},
|
||||
onDismissRequest = { warning = false },
|
||||
confirmButton = {
|
||||
|
||||
@@ -72,6 +72,7 @@ import com.bintianqi.owndroid.toggle
|
||||
import com.bintianqi.owndroid.ui.Animations
|
||||
import com.bintianqi.owndroid.ui.CardItem
|
||||
import com.bintianqi.owndroid.ui.CheckBoxItem
|
||||
import com.bintianqi.owndroid.ui.InfoCard
|
||||
import com.bintianqi.owndroid.ui.ListItem
|
||||
import com.bintianqi.owndroid.ui.SubPageItem
|
||||
import com.bintianqi.owndroid.ui.SwitchItem
|
||||
@@ -295,6 +296,7 @@ private fun UserOperation() {
|
||||
) {
|
||||
Text(stringResource(R.string.delete))
|
||||
}
|
||||
InfoCard(R.string.info_user_operation)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
@@ -412,6 +414,7 @@ private fun AffiliationID() {
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
InfoCard(R.string.info_affiliated_id)
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user