mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 19:15:58 +00:00
rename variables
This commit is contained in:
@@ -59,7 +59,7 @@ class MainActivity : ComponentActivity() {
|
||||
val materialYou = mutableStateOf(sharedPref.getBoolean("material_you",true))
|
||||
val blackTheme = mutableStateOf(sharedPref.getBoolean("black_theme", false))
|
||||
OwnDroidTheme(materialYou.value, blackTheme.value){
|
||||
MyScaffold(materialYou, blackTheme)
|
||||
Home(materialYou, blackTheme)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -68,11 +68,11 @@ class MainActivity : ComponentActivity() {
|
||||
@SuppressLint("UnrememberedMutableState")
|
||||
@ExperimentalMaterial3Api
|
||||
@Composable
|
||||
fun MyScaffold(materialYou:MutableState<Boolean>, blackTheme:MutableState<Boolean>){
|
||||
fun Home(materialYou:MutableState<Boolean>, blackTheme:MutableState<Boolean>){
|
||||
val navCtrl = rememberNavController()
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
val pkgName = mutableStateOf("")
|
||||
@@ -111,26 +111,26 @@ fun MyScaffold(materialYou:MutableState<Boolean>, blackTheme:MutableState<Boolea
|
||||
}
|
||||
LaunchedEffect(Unit){
|
||||
val profileInited = sharedPref.getBoolean("ManagedProfileActivated",false)
|
||||
val profileNotActivated = !profileInited&&isProfileOwner(myDpm)&&(VERSION.SDK_INT<24||(VERSION.SDK_INT>=24&&myDpm.isManagedProfile(myComponent)))
|
||||
val profileNotActivated = !profileInited&&isProfileOwner(dpm)&&(VERSION.SDK_INT<24||(VERSION.SDK_INT>=24&&dpm.isManagedProfile(receiver)))
|
||||
if(profileNotActivated){
|
||||
myDpm.setProfileEnabled(myComponent)
|
||||
dpm.setProfileEnabled(receiver)
|
||||
sharedPref.edit().putBoolean("ManagedProfileActivated",true).apply()
|
||||
Toast.makeText(myContext, R.string.work_profile_activated, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.work_profile_activated, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun HomePage(navCtrl:NavHostController, pkgName: MutableState<String>){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val activateType = stringResource(
|
||||
if(isDeviceOwner(myDpm)){R.string.device_owner}
|
||||
else if(isProfileOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=24&&myDpm.isManagedProfile(myComponent)){R.string.work_profile_owner}else{R.string.profile_owner}
|
||||
if(isDeviceOwner(dpm)){R.string.device_owner}
|
||||
else if(isProfileOwner(dpm)){
|
||||
if(VERSION.SDK_INT>=24&&dpm.isManagedProfile(receiver)){R.string.work_profile_owner}else{R.string.profile_owner}
|
||||
}
|
||||
else if(myDpm.isAdminActive(myComponent)){R.string.device_admin}else{R.string.click_to_activate}
|
||||
else if(dpm.isAdminActive(receiver)){R.string.device_admin}else{R.string.click_to_activate}
|
||||
)
|
||||
LaunchedEffect(Unit){ pkgName.value = "" }
|
||||
Column(modifier = Modifier.background(colorScheme.background).statusBarsPadding().verticalScroll(rememberScrollState())) {
|
||||
@@ -152,14 +152,14 @@ private fun HomePage(navCtrl:NavHostController, pkgName: MutableState<String>){
|
||||
) {
|
||||
Spacer(modifier = Modifier.padding(start = 22.dp))
|
||||
Icon(
|
||||
painter = painterResource(if(myDpm.isAdminActive(myComponent)){ R.drawable.check_circle_fill1 }else{ R.drawable.block_fill0 }),
|
||||
painter = painterResource(if(dpm.isAdminActive(receiver)){ R.drawable.check_circle_fill1 }else{ R.drawable.block_fill0 }),
|
||||
contentDescription = null,
|
||||
tint = colorScheme.onPrimary
|
||||
)
|
||||
Spacer(modifier = Modifier.padding(start = 10.dp))
|
||||
Column {
|
||||
Text(
|
||||
text = stringResource(if(myDpm.isAdminActive(myComponent)){R.string.activated}else{R.string.deactivated}),
|
||||
text = stringResource(if(dpm.isAdminActive(receiver)){R.string.activated}else{R.string.deactivated}),
|
||||
style = typography.headlineSmall,
|
||||
color = colorScheme.onPrimary,
|
||||
modifier = Modifier.padding(bottom = 2.dp)
|
||||
@@ -168,11 +168,11 @@ private fun HomePage(navCtrl:NavHostController, pkgName: MutableState<String>){
|
||||
}
|
||||
}
|
||||
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(dpm))||isProfileOwner(dpm)){ HomePageItem(R.string.network, R.drawable.wifi_fill0, "Network",navCtrl) }
|
||||
if(
|
||||
(VERSION.SDK_INT<24&&!isDeviceOwner(myDpm))||(
|
||||
VERSION.SDK_INT>=24&&(myDpm.isProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE)||
|
||||
(isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent)))
|
||||
(VERSION.SDK_INT<24&&!isDeviceOwner(dpm))||(
|
||||
VERSION.SDK_INT>=24&&(dpm.isProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE)||
|
||||
(isProfileOwner(dpm)&&dpm.isManagedProfile(receiver)))
|
||||
)
|
||||
){
|
||||
HomePageItem(R.string.work_profile, R.drawable.work_fill0, "ManagedProfile",navCtrl)
|
||||
@@ -189,12 +189,12 @@ private fun HomePage(navCtrl:NavHostController, pkgName: MutableState<String>){
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun HomePageItem(name:Int, imgVector:Int, navTo:String, myNav:NavHostController){
|
||||
fun HomePageItem(name:Int, imgVector:Int, navTo:String, navCtrl:NavHostController){
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.clip(RoundedCornerShape(25))
|
||||
.clickable(onClick = {myNav.navigate(navTo)})
|
||||
.clickable(onClick = {navCtrl.navigate(navTo)})
|
||||
.padding(vertical = 13.dp),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
|
||||
@@ -16,9 +16,9 @@ import com.bintianqi.owndroid.dpm.isProfileOwner
|
||||
class Receiver : DeviceAdminReceiver() {
|
||||
override fun onEnabled(context: Context, intent: Intent) {
|
||||
super.onEnabled(context, intent)
|
||||
val myDpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(context, this::class.java)
|
||||
if(myDpm.isAdminActive(myComponent)||isProfileOwner(myDpm)||isDeviceOwner(myDpm)){
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context, this::class.java)
|
||||
if(dpm.isAdminActive(receiver)||isProfileOwner(dpm)||isDeviceOwner(dpm)){
|
||||
Toast.makeText(context, context.getString(R.string.onEnabled), Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,8 +100,8 @@ private fun Settings(materialYou:MutableState<Boolean>, blackTheme:MutableState<
|
||||
|
||||
@Composable
|
||||
private fun About(){
|
||||
val myContext = LocalContext.current
|
||||
val pkgInfo = myContext.packageManager.getPackageInfo(myContext.packageName,0)
|
||||
val context = LocalContext.current
|
||||
val pkgInfo = context.packageManager.getPackageInfo(context.packageName,0)
|
||||
val verCode = pkgInfo.versionCode
|
||||
val verName = pkgInfo.versionName
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())){
|
||||
@@ -113,8 +113,8 @@ private fun About(){
|
||||
Text(text = stringResource(R.string.about_desc))
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
}
|
||||
SubPageItem(R.string.user_guide,"",R.drawable.open_in_new){shareLink(myContext, "https://github.com/BinTianqi/AndroidOwner/blob/master/Guide.md")}
|
||||
SubPageItem(R.string.source_code,"",R.drawable.open_in_new){shareLink(myContext, "https://github.com/BinTianqi/AndroidOwner")}
|
||||
SubPageItem(R.string.user_guide,"",R.drawable.open_in_new){shareLink(context, "https://github.com/BinTianqi/AndroidOwner/blob/master/Guide.md")}
|
||||
SubPageItem(R.string.source_code,"",R.drawable.open_in_new){shareLink(context, "https://github.com/BinTianqi/AndroidOwner")}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -77,8 +77,8 @@ fun registerActivityResult(context: ComponentActivity){
|
||||
}
|
||||
createManagedProfile = context.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {}
|
||||
addDeviceAdmin = context.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||
val myDpm = context.applicationContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
if(myDpm.isAdminActive(ComponentName(context.applicationContext, Receiver::class.java))){
|
||||
val dpm = context.applicationContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
if(dpm.isAdminActive(ComponentName(context.applicationContext, Receiver::class.java))){
|
||||
backToHome = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,7 +97,9 @@ fun ApplicationManage(navCtrl:NavHostController, pkgName: MutableState<String>,
|
||||
TopBar(backStackEntry, navCtrl, localNavCtrl){Text(text = stringResource(titleMap[backStackEntry?.destination?.route] ?: R.string.app_manager))}
|
||||
}
|
||||
){ paddingValues->
|
||||
Column(modifier = Modifier.fillMaxSize().padding(top = paddingValues.calculateTopPadding())){
|
||||
Column(
|
||||
modifier = Modifier.fillMaxSize().padding(top = paddingValues.calculateTopPadding())
|
||||
) {
|
||||
if(backStackEntry?.destination?.route!="InstallApp"){
|
||||
TextField(
|
||||
value = pkgName.value,
|
||||
@@ -147,107 +149,109 @@ fun ApplicationManage(navCtrl:NavHostController, pkgName: MutableState<String>,
|
||||
|
||||
@Composable
|
||||
private fun Home(navCtrl:NavHostController, pkgName: String, dialogStatus: MutableIntState){
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext, Receiver::class.java)
|
||||
Column(
|
||||
modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context, Receiver::class.java)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if(VERSION.SDK_INT>=24&&isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent)){
|
||||
if(VERSION.SDK_INT>=24&&isProfileOwner(dpm)&&dpm.isManagedProfile(receiver)){
|
||||
Text(text = stringResource(R.string.scope_is_work_profile), textAlign = TextAlign.Center,modifier = Modifier.fillMaxWidth())
|
||||
}
|
||||
SubPageItem(R.string.app_info,"",R.drawable.open_in_new){
|
||||
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
||||
intent.setData(Uri.parse("package:$pkgName"))
|
||||
startActivity(myContext,intent,null)
|
||||
startActivity(context, intent, null)
|
||||
}
|
||||
if(VERSION.SDK_INT>=24&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=24&&(isDeviceOwner(dpm)||isProfileOwner(dpm))){
|
||||
val getSuspendStatus = {
|
||||
try{ myDpm.isPackageSuspended(myComponent, pkgName) }
|
||||
try{ dpm.isPackageSuspended(receiver, pkgName) }
|
||||
catch(e:NameNotFoundException){ false }
|
||||
catch(e:IllegalArgumentException){ false }
|
||||
}
|
||||
SwitchItem(
|
||||
title = R.string.suspend, desc = "", icon = R.drawable.block_fill0,
|
||||
getState = getSuspendStatus,
|
||||
onCheckedChange = { myDpm.setPackagesSuspended(myComponent, arrayOf(pkgName), it) },
|
||||
onCheckedChange = { dpm.setPackagesSuspended(receiver, arrayOf(pkgName), it) },
|
||||
onClickBlank = {
|
||||
dialogGetStatus = getSuspendStatus
|
||||
dialogConfirmButtonAction = { myDpm.setPackagesSuspended(myComponent, arrayOf(pkgName), true) }
|
||||
dialogDismissButtonAction = { myDpm.setPackagesSuspended(myComponent, arrayOf(pkgName), false) }
|
||||
dialogConfirmButtonAction = { dpm.setPackagesSuspended(receiver, arrayOf(pkgName), true) }
|
||||
dialogDismissButtonAction = { dpm.setPackagesSuspended(receiver, arrayOf(pkgName), false) }
|
||||
dialogStatus.intValue = 1
|
||||
}
|
||||
)
|
||||
}
|
||||
if(isDeviceOwner(myDpm)||isProfileOwner(myDpm)){
|
||||
if(isDeviceOwner(dpm) || isProfileOwner(dpm)){
|
||||
SwitchItem(
|
||||
title = R.string.hide, desc = stringResource(R.string.isapphidden_desc), icon = R.drawable.visibility_off_fill0,
|
||||
getState = { myDpm.isApplicationHidden(myComponent,pkgName) },
|
||||
onCheckedChange = { myDpm.setApplicationHidden(myComponent, pkgName, it) },
|
||||
getState = { dpm.isApplicationHidden(receiver,pkgName) },
|
||||
onCheckedChange = { dpm.setApplicationHidden(receiver, pkgName, it) },
|
||||
onClickBlank = {
|
||||
dialogGetStatus = { myDpm.isApplicationHidden(myComponent,pkgName) }
|
||||
dialogConfirmButtonAction = { myDpm.setApplicationHidden(myComponent, pkgName, true) }
|
||||
dialogDismissButtonAction = { myDpm.setApplicationHidden(myComponent, pkgName, false) }
|
||||
dialogGetStatus = { dpm.isApplicationHidden(receiver,pkgName) }
|
||||
dialogConfirmButtonAction = { dpm.setApplicationHidden(receiver, pkgName, true) }
|
||||
dialogDismissButtonAction = { dpm.setApplicationHidden(receiver, pkgName, false) }
|
||||
dialogStatus.intValue = 2
|
||||
}
|
||||
)
|
||||
}
|
||||
if(isDeviceOwner(myDpm)||isProfileOwner(myDpm)){
|
||||
if(isDeviceOwner(dpm) || isProfileOwner(dpm)) {
|
||||
SwitchItem(
|
||||
title = R.string.block_uninstall, desc = "", icon = R.drawable.delete_forever_fill0,
|
||||
getState = { myDpm.isUninstallBlocked(myComponent,pkgName) },
|
||||
onCheckedChange = { myDpm.setUninstallBlocked(myComponent,pkgName,it) },
|
||||
getState = { dpm.isUninstallBlocked(receiver,pkgName) },
|
||||
onCheckedChange = { dpm.setUninstallBlocked(receiver,pkgName,it) },
|
||||
onClickBlank = {
|
||||
dialogGetStatus = { myDpm.isUninstallBlocked(myComponent,pkgName) }
|
||||
dialogConfirmButtonAction = { myDpm.setUninstallBlocked(myComponent,pkgName,true) }
|
||||
dialogDismissButtonAction = { myDpm.setUninstallBlocked(myComponent,pkgName,false) }
|
||||
dialogGetStatus = { dpm.isUninstallBlocked(receiver,pkgName) }
|
||||
dialogConfirmButtonAction = { dpm.setUninstallBlocked(receiver,pkgName,true) }
|
||||
dialogDismissButtonAction = { dpm.setUninstallBlocked(receiver,pkgName,false) }
|
||||
dialogStatus.intValue = 3
|
||||
}
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT>=24&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=24&&(isDeviceOwner(dpm)||isProfileOwner(dpm))){
|
||||
val setAlwaysOnVpn: (Boolean)->Unit = {
|
||||
try {
|
||||
myDpm.setAlwaysOnVpnPackage(myComponent, pkgName, it)
|
||||
dpm.setAlwaysOnVpnPackage(receiver, pkgName, it)
|
||||
} catch(e: UnsupportedOperationException) {
|
||||
Toast.makeText(myContext, R.string.unsupported, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.unsupported, Toast.LENGTH_SHORT).show()
|
||||
} catch(e: NameNotFoundException) {
|
||||
Toast.makeText(myContext, R.string.not_installed, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.not_installed, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
SwitchItem(
|
||||
title = R.string.always_on_vpn, desc = "", icon = R.drawable.vpn_key_fill0,
|
||||
getState = {pkgName == myDpm.getAlwaysOnVpnPackage(myComponent)},
|
||||
getState = {pkgName == dpm.getAlwaysOnVpnPackage(receiver)},
|
||||
onCheckedChange = setAlwaysOnVpn,
|
||||
onClickBlank = {
|
||||
dialogGetStatus = { pkgName == myDpm.getAlwaysOnVpnPackage(myComponent) }
|
||||
dialogGetStatus = { pkgName == dpm.getAlwaysOnVpnPackage(receiver) }
|
||||
dialogConfirmButtonAction = { setAlwaysOnVpn(true) }
|
||||
dialogDismissButtonAction = { setAlwaysOnVpn(false) }
|
||||
dialogStatus.intValue = 4
|
||||
}
|
||||
)
|
||||
}
|
||||
if((VERSION.SDK_INT>=33&&isProfileOwner(myDpm))||(VERSION.SDK_INT>=30&&isDeviceOwner(myDpm))){
|
||||
if((VERSION.SDK_INT>=33&&isProfileOwner(dpm))||(VERSION.SDK_INT>=30&&isDeviceOwner(dpm))){
|
||||
SubPageItem(R.string.ucd,"",R.drawable.do_not_touch_fill0){navCtrl.navigate("UserControlDisabled")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=23&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=23&&(isDeviceOwner(dpm)||isProfileOwner(dpm))){
|
||||
SubPageItem(R.string.permission_manage,"",R.drawable.key_fill0){navCtrl.navigate("PermissionManage")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=30&&isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent)){
|
||||
if(VERSION.SDK_INT>=30&&isProfileOwner(dpm)&&dpm.isManagedProfile(receiver)){
|
||||
SubPageItem(R.string.cross_profile_package,"",R.drawable.work_fill0){navCtrl.navigate("CrossProfilePackage")}
|
||||
}
|
||||
if(isProfileOwner(myDpm)){
|
||||
if(isProfileOwner(dpm)){
|
||||
SubPageItem(R.string.cross_profile_widget,"",R.drawable.widgets_fill0){navCtrl.navigate("CrossProfileWidget")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=34&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=34&&isDeviceOwner(dpm)){
|
||||
SubPageItem(R.string.credential_manage_policy,"",R.drawable.license_fill0){navCtrl.navigate("CredentialManagePolicy")}
|
||||
}
|
||||
if(isProfileOwner(myDpm)||isDeviceOwner(myDpm)){
|
||||
if(isProfileOwner(dpm)||isDeviceOwner(dpm)){
|
||||
SubPageItem(R.string.permitted_accessibility_app,"",R.drawable.settings_accessibility_fill0){navCtrl.navigate("Accessibility")}
|
||||
}
|
||||
if(isDeviceOwner(myDpm)||isProfileOwner(myDpm)){
|
||||
if(isDeviceOwner(dpm)||isProfileOwner(dpm)){
|
||||
SubPageItem(R.string.permitted_ime,"",R.drawable.keyboard_fill0){navCtrl.navigate("IME")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=28&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=28&&isDeviceOwner(dpm)){
|
||||
SubPageItem(R.string.keep_uninstalled_pkgs,"",R.drawable.delete_fill0){navCtrl.navigate("KeepUninstalled")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=28){
|
||||
@@ -268,14 +272,14 @@ private fun Home(navCtrl:NavHostController, pkgName: String, dialogStatus: Mutab
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun UserCtrlDisabledPkg(pkgName:String){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
var pkgList = myDpm.getUserControlDisabledPackages(myComponent)
|
||||
var pkgList = dpm.getUserControlDisabledPackages(receiver)
|
||||
var listText by remember{mutableStateOf("")}
|
||||
val refresh = {
|
||||
pkgList = myDpm.getUserControlDisabledPackages(myComponent)
|
||||
pkgList = dpm.getUserControlDisabledPackages(receiver)
|
||||
listText = pkgList.toText()
|
||||
}
|
||||
var inited by remember{mutableStateOf(false)}
|
||||
@@ -295,10 +299,10 @@ private fun UserCtrlDisabledPkg(pkgName:String){
|
||||
onClick = {
|
||||
if(pkgName!=""){
|
||||
pkgList.add(pkgName)
|
||||
myDpm.setUserControlDisabledPackages(myComponent,pkgList)
|
||||
dpm.setUserControlDisabledPackages(receiver,pkgList)
|
||||
refresh()
|
||||
}else{
|
||||
Toast.makeText(myContext, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.49F)
|
||||
@@ -309,10 +313,10 @@ private fun UserCtrlDisabledPkg(pkgName:String){
|
||||
onClick = {
|
||||
val result = if(pkgName!=""){pkgList.remove(pkgName)}else{false}
|
||||
if(result){
|
||||
myDpm.setUserControlDisabledPackages(myComponent,pkgList)
|
||||
dpm.setUserControlDisabledPackages(receiver,pkgList)
|
||||
refresh()
|
||||
}else{
|
||||
Toast.makeText(myContext, R.string.not_exist, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.not_exist, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.96F)
|
||||
@@ -321,7 +325,7 @@ private fun UserCtrlDisabledPkg(pkgName:String){
|
||||
}
|
||||
}
|
||||
Button(
|
||||
onClick = { myDpm.setUserControlDisabledPackages(myComponent, listOf()); refresh() },
|
||||
onClick = { dpm.setUserControlDisabledPackages(receiver, listOf()); refresh() },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
Text(stringResource(R.string.clear_list))
|
||||
@@ -333,12 +337,12 @@ private fun UserCtrlDisabledPkg(pkgName:String){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun PermissionManage(pkgName: String, navCtrl: NavHostController){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var inputPermission by remember{mutableStateOf(selectedPermission)}
|
||||
var currentState by remember{mutableStateOf(myContext.getString(R.string.unknown))}
|
||||
var currentState by remember{mutableStateOf(context.getString(R.string.unknown))}
|
||||
val grantState = mapOf(
|
||||
PERMISSION_GRANT_STATE_DEFAULT to stringResource(R.string.decide_by_user),
|
||||
PERMISSION_GRANT_STATE_GRANTED to stringResource(R.string.granted),
|
||||
@@ -351,7 +355,7 @@ private fun PermissionManage(pkgName: String, navCtrl: NavHostController){
|
||||
}
|
||||
}
|
||||
LaunchedEffect(pkgName) {
|
||||
if(pkgName!=""){currentState = grantState[myDpm.getPermissionGrantState(myComponent,pkgName,inputPermission)]!!}
|
||||
if(pkgName!=""){currentState = grantState[dpm.getPermissionGrantState(receiver,pkgName,inputPermission)]!!}
|
||||
}
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -362,7 +366,7 @@ private fun PermissionManage(pkgName: String, navCtrl: NavHostController){
|
||||
label = { Text(stringResource(R.string.permission))},
|
||||
onValueChange = {
|
||||
inputPermission = it; selectedPermission = inputPermission
|
||||
currentState = grantState[myDpm.getPermissionGrantState(myComponent,pkgName,inputPermission)]!!
|
||||
currentState = grantState[dpm.getPermissionGrantState(receiver,pkgName,inputPermission)]!!
|
||||
},
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Ascii, imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}),
|
||||
@@ -381,8 +385,8 @@ private fun PermissionManage(pkgName: String, navCtrl: NavHostController){
|
||||
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween){
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.setPermissionGrantState(myComponent,pkgName,inputPermission, PERMISSION_GRANT_STATE_GRANTED)
|
||||
currentState = grantState[myDpm.getPermissionGrantState(myComponent,pkgName,inputPermission)]!!
|
||||
dpm.setPermissionGrantState(receiver,pkgName,inputPermission, PERMISSION_GRANT_STATE_GRANTED)
|
||||
currentState = grantState[dpm.getPermissionGrantState(receiver,pkgName,inputPermission)]!!
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.49F)
|
||||
) {
|
||||
@@ -390,8 +394,8 @@ private fun PermissionManage(pkgName: String, navCtrl: NavHostController){
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.setPermissionGrantState(myComponent,pkgName,inputPermission, PERMISSION_GRANT_STATE_DENIED)
|
||||
currentState = grantState[myDpm.getPermissionGrantState(myComponent,pkgName,inputPermission)]!!
|
||||
dpm.setPermissionGrantState(receiver,pkgName,inputPermission, PERMISSION_GRANT_STATE_DENIED)
|
||||
currentState = grantState[dpm.getPermissionGrantState(receiver,pkgName,inputPermission)]!!
|
||||
},
|
||||
Modifier.fillMaxWidth(0.96F)
|
||||
) {
|
||||
@@ -400,8 +404,8 @@ private fun PermissionManage(pkgName: String, navCtrl: NavHostController){
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.setPermissionGrantState(myComponent,pkgName,inputPermission, PERMISSION_GRANT_STATE_DEFAULT)
|
||||
currentState = grantState[myDpm.getPermissionGrantState(myComponent,pkgName,inputPermission)]!!
|
||||
dpm.setPermissionGrantState(receiver,pkgName,inputPermission, PERMISSION_GRANT_STATE_DEFAULT)
|
||||
currentState = grantState[dpm.getPermissionGrantState(receiver,pkgName,inputPermission)]!!
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -414,15 +418,15 @@ private fun PermissionManage(pkgName: String, navCtrl: NavHostController){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun CrossProfilePkg(pkgName: String){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.cross_profile_package), style = typography.headlineLarge)
|
||||
var list by remember{mutableStateOf("")}
|
||||
val refresh = {
|
||||
crossProfilePkg = myDpm.getCrossProfilePackages(myComponent)
|
||||
crossProfilePkg = dpm.getCrossProfilePackages(receiver)
|
||||
list = crossProfilePkg.toText()
|
||||
}
|
||||
LaunchedEffect(Unit){refresh()}
|
||||
@@ -435,7 +439,7 @@ private fun CrossProfilePkg(pkgName: String){
|
||||
onClick = {
|
||||
if(pkgName!=""){
|
||||
crossProfilePkg.add(pkgName)}
|
||||
myDpm.setCrossProfilePackages(myComponent, crossProfilePkg)
|
||||
dpm.setCrossProfilePackages(receiver, crossProfilePkg)
|
||||
refresh()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.49F)
|
||||
@@ -446,7 +450,7 @@ private fun CrossProfilePkg(pkgName: String){
|
||||
onClick = {
|
||||
if(pkgName!=""){
|
||||
crossProfilePkg.remove(pkgName)}
|
||||
myDpm.setCrossProfilePackages(myComponent, crossProfilePkg)
|
||||
dpm.setCrossProfilePackages(receiver, crossProfilePkg)
|
||||
refresh()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.96F)
|
||||
@@ -460,14 +464,14 @@ private fun CrossProfilePkg(pkgName: String){
|
||||
|
||||
@Composable
|
||||
private fun CrossProfileWidget(pkgName: String){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
var pkgList: MutableList<String>
|
||||
var list by remember{mutableStateOf("")}
|
||||
val refresh = {
|
||||
pkgList = myDpm.getCrossProfileWidgetProviders(myComponent)
|
||||
pkgList = dpm.getCrossProfileWidgetProviders(receiver)
|
||||
list = pkgList.toText()
|
||||
}
|
||||
LaunchedEffect(Unit){refresh()}
|
||||
@@ -482,7 +486,7 @@ private fun CrossProfileWidget(pkgName: String){
|
||||
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween){
|
||||
Button(
|
||||
onClick = {
|
||||
if(pkgName!=""){myDpm.addCrossProfileWidgetProvider(myComponent,pkgName)}
|
||||
if(pkgName!=""){dpm.addCrossProfileWidgetProvider(receiver,pkgName)}
|
||||
refresh()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.49F)
|
||||
@@ -491,7 +495,7 @@ private fun CrossProfileWidget(pkgName: String){
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
if(pkgName!=""){myDpm.removeCrossProfileWidgetProvider(myComponent,pkgName)}
|
||||
if(pkgName!=""){dpm.removeCrossProfileWidgetProvider(receiver,pkgName)}
|
||||
refresh()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.96F)
|
||||
@@ -506,14 +510,14 @@ private fun CrossProfileWidget(pkgName: String){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun CredentialManagePolicy(pkgName: String){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var policy:PackagePolicy?
|
||||
var policyType by remember{mutableIntStateOf(-1)}
|
||||
var credentialListText by remember{mutableStateOf("")}
|
||||
val refreshPolicy = {
|
||||
policy = myDpm.credentialManagerPolicy
|
||||
policy = dpm.credentialManagerPolicy
|
||||
policyType = policy?.policyType ?: -1
|
||||
credentialList = policy?.packageNames ?: mutableSetOf()
|
||||
credentialList = credentialList.toMutableSet()
|
||||
@@ -564,13 +568,13 @@ private fun CredentialManagePolicy(pkgName: String){
|
||||
focusMgr.clearFocus()
|
||||
try{
|
||||
if(policyType!=-1&&credentialList.isNotEmpty()){
|
||||
myDpm.credentialManagerPolicy = PackagePolicy(policyType, credentialList)
|
||||
dpm.credentialManagerPolicy = PackagePolicy(policyType, credentialList)
|
||||
}else{
|
||||
myDpm.credentialManagerPolicy = null
|
||||
dpm.credentialManagerPolicy = null
|
||||
}
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}catch(e:java.lang.IllegalArgumentException){
|
||||
Toast.makeText(myContext, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
}finally {
|
||||
refreshPolicy()
|
||||
credentialListText = credentialList.toText()
|
||||
@@ -586,16 +590,16 @@ private fun CredentialManagePolicy(pkgName: String){
|
||||
|
||||
@Composable
|
||||
private fun PermittedAccessibility(pkgName: String){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.permitted_accessibility_app), style = typography.headlineLarge)
|
||||
var listText by remember{ mutableStateOf("") }
|
||||
LaunchedEffect(Unit){
|
||||
val getList = myDpm.getPermittedAccessibilityServices(myComponent)
|
||||
val getList = dpm.getPermittedAccessibilityServices(receiver)
|
||||
if(getList!=null){ permittedAccessibility = getList }
|
||||
listText = permittedAccessibility.toText()
|
||||
}
|
||||
@@ -623,11 +627,11 @@ private fun PermittedAccessibility(pkgName: String){
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
Toast.makeText(
|
||||
myContext,
|
||||
if(myDpm.setPermittedAccessibilityServices(myComponent, permittedAccessibility)){R.string.success}else{R.string.fail},
|
||||
context,
|
||||
if(dpm.setPermittedAccessibilityServices(receiver, permittedAccessibility)){R.string.success}else{R.string.fail},
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
val getList = myDpm.getPermittedAccessibilityServices(myComponent)
|
||||
val getList = dpm.getPermittedAccessibilityServices(receiver)
|
||||
if(getList!=null){ permittedAccessibility = getList }
|
||||
listText = permittedAccessibility.toText()
|
||||
},
|
||||
@@ -641,16 +645,16 @@ private fun PermittedAccessibility(pkgName: String){
|
||||
|
||||
@Composable
|
||||
private fun PermittedIME(pkgName: String){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.permitted_ime), style = typography.headlineLarge)
|
||||
var imeListText by remember{ mutableStateOf("") }
|
||||
LaunchedEffect(Unit){
|
||||
val getList = myDpm.getPermittedInputMethods(myComponent)
|
||||
val getList = dpm.getPermittedInputMethods(receiver)
|
||||
if(getList!=null){ permittedIme = getList }
|
||||
imeListText = permittedIme.toText()
|
||||
}
|
||||
@@ -678,11 +682,11 @@ private fun PermittedIME(pkgName: String){
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
Toast.makeText(
|
||||
myContext,
|
||||
if(myDpm.setPermittedInputMethods(myComponent, permittedIme)){R.string.success}else{R.string.fail},
|
||||
context,
|
||||
if(dpm.setPermittedInputMethods(receiver, permittedIme)){R.string.success}else{R.string.fail},
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
val getList = myDpm.getPermittedInputMethods(myComponent)
|
||||
val getList = dpm.getPermittedInputMethods(receiver)
|
||||
if(getList!=null){ permittedIme = getList }
|
||||
imeListText = permittedIme.toText()
|
||||
},
|
||||
@@ -697,16 +701,16 @@ private fun PermittedIME(pkgName: String){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun KeepUninstalledApp(pkgName: String){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.keep_uninstalled_pkgs), style = typography.headlineLarge)
|
||||
var listText by remember{mutableStateOf("")}
|
||||
LaunchedEffect(Unit){
|
||||
val getList = myDpm.getKeepUninstalledPackages(myComponent)
|
||||
val getList = dpm.getKeepUninstalledPackages(receiver)
|
||||
if(getList!=null){ keepUninstallPkg = getList }
|
||||
listText = keepUninstallPkg.toText()
|
||||
}
|
||||
@@ -739,11 +743,11 @@ private fun KeepUninstalledApp(pkgName: String){
|
||||
Button(
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
myDpm.setKeepUninstalledPackages(myComponent, keepUninstallPkg)
|
||||
val getList = myDpm.getKeepUninstalledPackages(myComponent)
|
||||
dpm.setKeepUninstalledPackages(receiver, keepUninstallPkg)
|
||||
val getList = dpm.getKeepUninstalledPackages(receiver)
|
||||
if(getList!=null){ keepUninstallPkg = getList }
|
||||
listText = keepUninstallPkg.toText()
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
@@ -755,7 +759,7 @@ private fun KeepUninstalledApp(pkgName: String){
|
||||
|
||||
@Composable
|
||||
private fun UninstallApp(pkgName: String){
|
||||
val myContext = LocalContext.current
|
||||
val context = LocalContext.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.uninstall_app), style = typography.headlineLarge)
|
||||
@@ -763,9 +767,9 @@ private fun UninstallApp(pkgName: String){
|
||||
Column(modifier = Modifier.fillMaxWidth()){
|
||||
Button(
|
||||
onClick = {
|
||||
val intent = Intent(myContext, PackageInstallerReceiver::class.java)
|
||||
val intentSender = PendingIntent.getBroadcast(myContext, 8, intent, PendingIntent.FLAG_IMMUTABLE).intentSender
|
||||
val pkgInstaller = myContext.packageManager.packageInstaller
|
||||
val intent = Intent(context, PackageInstallerReceiver::class.java)
|
||||
val intentSender = PendingIntent.getBroadcast(context, 8, intent, PendingIntent.FLAG_IMMUTABLE).intentSender
|
||||
val pkgInstaller = context.packageManager.packageInstaller
|
||||
pkgInstaller.uninstall(pkgName, intentSender)
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -776,7 +780,7 @@ private fun UninstallApp(pkgName: String){
|
||||
onClick = {
|
||||
val intent = Intent(Intent.ACTION_UNINSTALL_PACKAGE)
|
||||
intent.setData(Uri.parse("package:$pkgName"))
|
||||
myContext.startActivity(intent)
|
||||
context.startActivity(intent)
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -788,7 +792,7 @@ private fun UninstallApp(pkgName: String){
|
||||
|
||||
@Composable
|
||||
private fun InstallApp(){
|
||||
val myContext = LocalContext.current
|
||||
val context = LocalContext.current
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -812,7 +816,7 @@ private fun InstallApp(){
|
||||
Spacer(Modifier.padding(vertical = 3.dp))
|
||||
Column(modifier = Modifier.fillMaxWidth()){
|
||||
Button(
|
||||
onClick = { uriToStream(myContext, fileUri){stream -> installPackage(myContext,stream)} },
|
||||
onClick = { uriToStream(context, fileUri){stream -> installPackage(context,stream)} },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.silent_install))
|
||||
@@ -822,7 +826,7 @@ private fun InstallApp(){
|
||||
val intent = Intent(Intent.ACTION_INSTALL_PACKAGE)
|
||||
intent.setData(fileUri)
|
||||
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
myContext.startActivity(intent)
|
||||
context.startActivity(intent)
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -836,9 +840,9 @@ private fun InstallApp(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun ClearAppData(pkgName: String){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -848,13 +852,13 @@ private fun ClearAppData(pkgName: String){
|
||||
val onClear = DevicePolicyManager.OnClearApplicationUserDataListener { pkg: String, succeed: Boolean ->
|
||||
Looper.prepare()
|
||||
focusMgr.clearFocus()
|
||||
val toastText = if(pkg!=""){"$pkg\n"}else{""} + myContext.getString(R.string.clear_data) + myContext.getString(if(succeed){R.string.success}else{R.string.fail})
|
||||
Toast.makeText(myContext, toastText, Toast.LENGTH_SHORT).show()
|
||||
val toastText = if(pkg!=""){"$pkg\n"}else{""} + context.getString(R.string.clear_data) + context.getString(if(succeed){R.string.success}else{R.string.fail})
|
||||
Toast.makeText(context, toastText, Toast.LENGTH_SHORT).show()
|
||||
Looper.loop()
|
||||
}
|
||||
myDpm.clearApplicationUserData(myComponent,pkgName,executor,onClear)
|
||||
dpm.clearApplicationUserData(receiver, pkgName, executor, onClear)
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth().padding(horizontal = 10.dp)
|
||||
) {
|
||||
Text(stringResource(R.string.clear_app_data))
|
||||
@@ -865,20 +869,20 @@ private fun ClearAppData(pkgName: String){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun DefaultDialerApp(pkgName: String){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
try{
|
||||
myDpm.setDefaultDialerApplication(pkgName)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setDefaultDialerApplication(pkgName)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}catch(e:IllegalArgumentException){
|
||||
Toast.makeText(myContext, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth().padding(horizontal = 10.dp)
|
||||
) {
|
||||
Text(stringResource(R.string.set_default_dialer))
|
||||
|
||||
@@ -80,24 +80,24 @@ fun ManagedProfile(navCtrl: NavHostController) {
|
||||
|
||||
@Composable
|
||||
private fun Home(navCtrl: NavHostController){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext, Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context, Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())){
|
||||
Text(text = stringResource(R.string.work_profile), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 5.dp, start = 15.dp))
|
||||
if(VERSION.SDK_INT>=30&&isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent)){
|
||||
if(VERSION.SDK_INT>=30&&isProfileOwner(dpm)&&dpm.isManagedProfile(receiver)){
|
||||
SubPageItem(R.string.org_owned_work_profile,"",R.drawable.corporate_fare_fill0){navCtrl.navigate("OrgOwnedWorkProfile")}
|
||||
}
|
||||
if(VERSION.SDK_INT<24||(VERSION.SDK_INT>=24&&myDpm.isProvisioningAllowed(ACTION_PROVISION_MANAGED_PROFILE))){
|
||||
if(VERSION.SDK_INT<24||(VERSION.SDK_INT>=24&&dpm.isProvisioningAllowed(ACTION_PROVISION_MANAGED_PROFILE))){
|
||||
SubPageItem(R.string.create_work_profile,"",R.drawable.work_fill0){navCtrl.navigate("CreateWorkProfile")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=30&&isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile){
|
||||
if(VERSION.SDK_INT>=30&&isProfileOwner(dpm)&&dpm.isManagedProfile(receiver)&&dpm.isOrganizationOwnedDeviceWithManagedProfile){
|
||||
SubPageItem(R.string.suspend_personal_app,"",R.drawable.block_fill0){navCtrl.navigate("SuspendPersonalApp")}
|
||||
}
|
||||
if(isProfileOwner(myDpm)&&(VERSION.SDK_INT<24||(VERSION.SDK_INT>=24&&myDpm.isManagedProfile(myComponent)))){
|
||||
if(isProfileOwner(dpm)&&(VERSION.SDK_INT<24||(VERSION.SDK_INT>=24&&dpm.isManagedProfile(receiver)))){
|
||||
SubPageItem(R.string.intent_filter,"",R.drawable.filter_alt_fill0){navCtrl.navigate("IntentFilter")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=31&&(isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent))){
|
||||
if(VERSION.SDK_INT>=31&&(isProfileOwner(dpm)&&dpm.isManagedProfile(receiver))){
|
||||
SubPageItem(R.string.org_id,"",R.drawable.corporate_fare_fill0){navCtrl.navigate("OrgID")}
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
@@ -106,8 +106,8 @@ private fun Home(navCtrl: NavHostController){
|
||||
|
||||
@Composable
|
||||
private fun CreateWorkProfile(){
|
||||
val myContext = LocalContext.current
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.create_work_profile), style = typography.headlineLarge)
|
||||
@@ -122,15 +122,15 @@ private fun CreateWorkProfile(){
|
||||
try {
|
||||
val intent = Intent(ACTION_PROVISION_MANAGED_PROFILE)
|
||||
if(VERSION.SDK_INT>=23){
|
||||
intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME,myComponent)
|
||||
intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME,receiver)
|
||||
}else{
|
||||
intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, myContext.packageName)
|
||||
intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, context.packageName)
|
||||
}
|
||||
if(VERSION.SDK_INT>=24){intent.putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION,skipEncrypt)}
|
||||
if(VERSION.SDK_INT>=33){intent.putExtra(EXTRA_PROVISIONING_ALLOW_OFFLINE,true)}
|
||||
createManagedProfile.launch(intent)
|
||||
}catch(e:ActivityNotFoundException){
|
||||
Toast.makeText(myContext, R.string.unsupported, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.unsupported, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -143,15 +143,15 @@ private fun CreateWorkProfile(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun OrgOwnedProfile(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.org_owned_work_profile), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Text(text = stringResource(R.string.is_org_owned_profile,myDpm.isOrganizationOwnedDeviceWithManagedProfile))
|
||||
Text(text = stringResource(R.string.is_org_owned_profile,dpm.isOrganizationOwnedDeviceWithManagedProfile))
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if(!myDpm.isOrganizationOwnedDeviceWithManagedProfile){
|
||||
if(!dpm.isOrganizationOwnedDeviceWithManagedProfile){
|
||||
SelectionContainer {
|
||||
Text(
|
||||
text = stringResource(R.string.activate_org_profile_command, Binder.getCallingUid()/100000),
|
||||
@@ -166,8 +166,8 @@ private fun OrgOwnedProfile(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun OrgID(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
var orgId by remember{mutableStateOf("")}
|
||||
@@ -188,8 +188,8 @@ private fun OrgID(){
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.setOrganizationId(orgId)
|
||||
Toast.makeText(myContext, R.string.success,Toast.LENGTH_SHORT).show()
|
||||
dpm.setOrganizationId(orgId)
|
||||
Toast.makeText(context, R.string.success,Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = orgId.length in 6..64,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -204,22 +204,22 @@ private fun OrgID(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun SuspendPersonalApp(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
SwitchItem(
|
||||
R.string.suspend_personal_app,"",null,{myDpm.getPersonalAppsSuspendedReasons(myComponent)!=PERSONAL_APPS_NOT_SUSPENDED},
|
||||
{myDpm.setPersonalAppsSuspended(myComponent,it)}
|
||||
R.string.suspend_personal_app,"",null,{dpm.getPersonalAppsSuspendedReasons(receiver)!=PERSONAL_APPS_NOT_SUSPENDED},
|
||||
{dpm.setPersonalAppsSuspended(receiver,it)}
|
||||
)
|
||||
var time by remember{mutableStateOf("")}
|
||||
time = myDpm.getManagedProfileMaximumTimeOff(myComponent).toString()
|
||||
time = dpm.getManagedProfileMaximumTimeOff(receiver).toString()
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.profile_max_time_off), style = typography.titleLarge)
|
||||
Text(text = stringResource(R.string.profile_max_time_out_desc))
|
||||
Text(text = stringResource(R.string.personal_app_suspended_because_timeout, myDpm.getPersonalAppsSuspendedReasons(myComponent)==PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT))
|
||||
Text(text = stringResource(R.string.personal_app_suspended_because_timeout, dpm.getPersonalAppsSuspendedReasons(receiver)==PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT))
|
||||
OutlinedTextField(
|
||||
value = time, onValueChange = {time=it}, modifier = Modifier.focusable().fillMaxWidth().padding(vertical = 2.dp),
|
||||
label = {Text(stringResource(R.string.time_unit_ms))},
|
||||
@@ -229,8 +229,8 @@ private fun SuspendPersonalApp(){
|
||||
Text(text = stringResource(R.string.cannot_less_than_72_hours))
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.setManagedProfileMaximumTimeOff(myComponent,time.toLong())
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setManagedProfileMaximumTimeOff(receiver,time.toLong())
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -241,9 +241,9 @@ private fun SuspendPersonalApp(){
|
||||
|
||||
@Composable
|
||||
private fun IntentFilter(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
var action by remember{mutableStateOf("")}
|
||||
@@ -260,8 +260,8 @@ private fun IntentFilter(){
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.addCrossProfileIntentFilter(myComponent, IntentFilter(action), FLAG_PARENT_CAN_ACCESS_MANAGED)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.addCrossProfileIntentFilter(receiver, IntentFilter(action), FLAG_PARENT_CAN_ACCESS_MANAGED)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -269,8 +269,8 @@ private fun IntentFilter(){
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.addCrossProfileIntentFilter(myComponent, IntentFilter(action), FLAG_MANAGED_CAN_ACCESS_PARENT)
|
||||
Toast.makeText(myContext, R.string.success,Toast.LENGTH_SHORT).show()
|
||||
dpm.addCrossProfileIntentFilter(receiver, IntentFilter(action), FLAG_MANAGED_CAN_ACCESS_PARENT)
|
||||
Toast.makeText(context, R.string.success,Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -279,8 +279,8 @@ private fun IntentFilter(){
|
||||
Spacer(Modifier.padding(vertical = 2.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.clearCrossProfileIntentFilters(myComponent)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.clearCrossProfileIntentFilters(receiver)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
|
||||
@@ -100,13 +100,13 @@ fun Network(navCtrl: NavHostController){
|
||||
|
||||
@Composable
|
||||
private fun Home(navCtrl:NavHostController,scrollState: ScrollState){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext, Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context, Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState)){
|
||||
Text(text = stringResource(R.string.network), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 5.dp, start = 15.dp))
|
||||
if(VERSION.SDK_INT>=24&&isDeviceOwner(myDpm)){
|
||||
val wifimac = myDpm.getWifiMacAddress(myComponent)
|
||||
if(VERSION.SDK_INT>=24&&isDeviceOwner(dpm)){
|
||||
val wifimac = dpm.getWifiMacAddress(receiver)
|
||||
Text(text = "WiFi MAC: $wifimac", modifier = Modifier.padding(start = 15.dp))
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 3.dp))
|
||||
@@ -116,19 +116,19 @@ private fun Home(navCtrl:NavHostController,scrollState: ScrollState){
|
||||
if(VERSION.SDK_INT>=33){
|
||||
SubPageItem(R.string.min_wifi_security_level,"",R.drawable.wifi_password_fill0){navCtrl.navigate("MinWifiSecurityLevel")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=33&&(isDeviceOwner(myDpm)||(isProfileOwner(myDpm)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile))){
|
||||
if(VERSION.SDK_INT>=33&&(isDeviceOwner(dpm)||(isProfileOwner(dpm)&&dpm.isOrganizationOwnedDeviceWithManagedProfile))){
|
||||
SubPageItem(R.string.wifi_ssid_policy,"",R.drawable.wifi_fill0){navCtrl.navigate("WifiSsidPolicy")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=29&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=29&&isDeviceOwner(dpm)){
|
||||
SubPageItem(R.string.private_dns,"",R.drawable.dns_fill0){navCtrl.navigate("PrivateDNS")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=26&&(isDeviceOwner(myDpm)||(isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent)))){
|
||||
if(VERSION.SDK_INT>=26&&(isDeviceOwner(dpm)||(isProfileOwner(dpm)&&dpm.isManagedProfile(receiver)))){
|
||||
SubPageItem(R.string.retrieve_net_logs,"",R.drawable.description_fill0){navCtrl.navigate("NetLog")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=31&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=31&&(isDeviceOwner(dpm)||isProfileOwner(dpm))){
|
||||
SubPageItem(R.string.wifi_keypair,"",R.drawable.key_fill0){navCtrl.navigate("WifiKeypair")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=28&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=28&&isDeviceOwner(dpm)){
|
||||
SubPageItem(R.string.apn_settings,"",R.drawable.cell_tower_fill0){navCtrl.navigate("APN")}
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
@@ -137,20 +137,20 @@ private fun Home(navCtrl:NavHostController,scrollState: ScrollState){
|
||||
|
||||
@Composable
|
||||
private fun Switches(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize()){
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if(VERSION.SDK_INT>=33&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=33&&isDeviceOwner(dpm)){
|
||||
SwitchItem(
|
||||
R.string.preferential_network_service, stringResource(R.string.developing),R.drawable.globe_fill0,
|
||||
{myDpm.isPreferentialNetworkServiceEnabled},{myDpm.isPreferentialNetworkServiceEnabled = it}
|
||||
{dpm.isPreferentialNetworkServiceEnabled},{dpm.isPreferentialNetworkServiceEnabled = it}
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT>=30&&(isDeviceOwner(myDpm)||(isProfileOwner(myDpm)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile))){
|
||||
if(VERSION.SDK_INT>=30&&(isDeviceOwner(dpm)||(isProfileOwner(dpm)&&dpm.isOrganizationOwnedDeviceWithManagedProfile))){
|
||||
SwitchItem(R.string.wifi_lockdown,"",R.drawable.wifi_password_fill0,
|
||||
{myDpm.hasLockdownAdminConfiguredNetworks(myComponent)},{myDpm.setConfiguredNetworksLockdownState(myComponent,it)}
|
||||
{dpm.hasLockdownAdminConfiguredNetworks(receiver)},{dpm.setConfiguredNetworksLockdownState(receiver,it)}
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -159,10 +159,10 @@ private fun Switches(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun WifiSecLevel(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
var selectedWifiSecLevel by remember{mutableIntStateOf(myDpm.minimumRequiredWifiSecurityLevel)}
|
||||
var selectedWifiSecLevel by remember{mutableIntStateOf(dpm.minimumRequiredWifiSecurityLevel)}
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.min_wifi_security_level), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
@@ -172,10 +172,10 @@ private fun WifiSecLevel(){
|
||||
RadioButtonItem("WPA3-192bit", {selectedWifiSecLevel==WIFI_SECURITY_ENTERPRISE_192}, {selectedWifiSecLevel= WIFI_SECURITY_ENTERPRISE_192})
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
enabled = isDeviceOwner(myDpm)||(isProfileOwner(myDpm)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile),
|
||||
enabled = isDeviceOwner(dpm)||(isProfileOwner(dpm)&&dpm.isOrganizationOwnedDeviceWithManagedProfile),
|
||||
onClick = {
|
||||
myDpm.minimumRequiredWifiSecurityLevel=selectedWifiSecLevel
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.minimumRequiredWifiSecurityLevel=selectedWifiSecLevel
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
@@ -187,16 +187,16 @@ private fun WifiSecLevel(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun WifiSsidPolicy(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
var policy = myDpm.wifiSsidPolicy
|
||||
var policy = dpm.wifiSsidPolicy
|
||||
var selectedPolicyType by remember{mutableIntStateOf(policy?.policyType ?: -1)}
|
||||
var inputSsid by remember{mutableStateOf("")}
|
||||
var ssidList by remember{mutableStateOf("")}
|
||||
val refreshPolicy = {
|
||||
policy = myDpm.wifiSsidPolicy
|
||||
policy = dpm.wifiSsidPolicy
|
||||
selectedPolicyType = policy?.policyType ?: -1
|
||||
ssidSet = policy?.ssids ?: mutableSetOf()
|
||||
}
|
||||
@@ -230,9 +230,9 @@ private fun WifiSsidPolicy(){
|
||||
Button(
|
||||
onClick = {
|
||||
if(inputSsid==""){
|
||||
Toast.makeText(myContext, R.string.cannot_be_empty, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.cannot_be_empty, Toast.LENGTH_SHORT).show()
|
||||
}else if(WifiSsid.fromBytes(inputSsid.toByteArray()) in ssidSet){
|
||||
Toast.makeText(myContext, R.string.already_exist, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.already_exist, Toast.LENGTH_SHORT).show()
|
||||
}else{
|
||||
ssidSet.add(WifiSsid.fromBytes(inputSsid.toByteArray()))
|
||||
ssidList = ssidSet.toText()
|
||||
@@ -246,13 +246,13 @@ private fun WifiSsidPolicy(){
|
||||
Button(
|
||||
onClick = {
|
||||
if(inputSsid==""){
|
||||
Toast.makeText(myContext, R.string.cannot_be_empty, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.cannot_be_empty, Toast.LENGTH_SHORT).show()
|
||||
}else if(WifiSsid.fromBytes(inputSsid.toByteArray()) in ssidSet){
|
||||
ssidSet.remove(WifiSsid.fromBytes(inputSsid.toByteArray()))
|
||||
inputSsid = ""
|
||||
ssidList = ssidSet.toText()
|
||||
}else{
|
||||
Toast.makeText(myContext, R.string.not_exist, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.not_exist, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.96F)
|
||||
@@ -265,16 +265,16 @@ private fun WifiSsidPolicy(){
|
||||
focusMgr.clearFocus()
|
||||
if(selectedPolicyType==-1){
|
||||
if(policy==null&&ssidSet.isNotEmpty()){
|
||||
Toast.makeText(myContext, R.string.please_select_a_policy, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.please_select_a_policy, Toast.LENGTH_SHORT).show()
|
||||
}else{
|
||||
myDpm.wifiSsidPolicy = null
|
||||
dpm.wifiSsidPolicy = null
|
||||
refreshPolicy()
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}else{
|
||||
myDpm.wifiSsidPolicy = if(ssidSet.size==0){ null }else{ WifiSsidPolicy(selectedPolicyType, ssidSet) }
|
||||
dpm.wifiSsidPolicy = if(ssidSet.size==0){ null }else{ WifiSsidPolicy(selectedPolicyType, ssidSet) }
|
||||
refreshPolicy()
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -288,9 +288,9 @@ private fun WifiSsidPolicy(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun PrivateDNS(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -306,16 +306,16 @@ private fun PrivateDNS(){
|
||||
PRIVATE_DNS_SET_ERROR_HOST_NOT_SERVING to stringResource(R.string.host_not_serving_dns_tls),
|
||||
PRIVATE_DNS_SET_ERROR_FAILURE_SETTING to stringResource(R.string.fail)
|
||||
)
|
||||
var status by remember{mutableStateOf(dnsStatus[myDpm.getGlobalPrivateDnsMode(myComponent)])}
|
||||
var status by remember{mutableStateOf(dnsStatus[dpm.getGlobalPrivateDnsMode(receiver)])}
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Text(text = stringResource(R.string.current_state, status?:stringResource(R.string.unknown)))
|
||||
AnimatedVisibility(visible = myDpm.getGlobalPrivateDnsMode(myComponent)!=PRIVATE_DNS_MODE_OPPORTUNISTIC) {
|
||||
AnimatedVisibility(visible = dpm.getGlobalPrivateDnsMode(receiver)!=PRIVATE_DNS_MODE_OPPORTUNISTIC) {
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
val result = myDpm.setGlobalPrivateDnsModeOpportunistic(myComponent)
|
||||
Toast.makeText(myContext, operationResult[result], Toast.LENGTH_SHORT).show()
|
||||
status = dnsStatus[myDpm.getGlobalPrivateDnsMode(myComponent)]
|
||||
val result = dpm.setGlobalPrivateDnsModeOpportunistic(receiver)
|
||||
Toast.makeText(context, operationResult[result], Toast.LENGTH_SHORT).show()
|
||||
status = dnsStatus[dpm.getGlobalPrivateDnsMode(receiver)]
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -323,7 +323,7 @@ private fun PrivateDNS(){
|
||||
}
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
var inputHost by remember{mutableStateOf(myDpm.getGlobalPrivateDnsHost(myComponent) ?: "")}
|
||||
var inputHost by remember{mutableStateOf(dpm.getGlobalPrivateDnsHost(receiver) ?: "")}
|
||||
OutlinedTextField(
|
||||
value = inputHost,
|
||||
onValueChange = {inputHost=it},
|
||||
@@ -338,14 +338,14 @@ private fun PrivateDNS(){
|
||||
focusMgr.clearFocus()
|
||||
val result: Int
|
||||
try{
|
||||
result = myDpm.setGlobalPrivateDnsModeSpecifiedHost(myComponent,inputHost)
|
||||
Toast.makeText(myContext, operationResult[result], Toast.LENGTH_SHORT).show()
|
||||
result = dpm.setGlobalPrivateDnsModeSpecifiedHost(receiver,inputHost)
|
||||
Toast.makeText(context, operationResult[result], Toast.LENGTH_SHORT).show()
|
||||
}catch(e:IllegalArgumentException){
|
||||
Toast.makeText(myContext, R.string.invalid_hostname, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.invalid_hostname, Toast.LENGTH_SHORT).show()
|
||||
}catch(e:SecurityException){
|
||||
Toast.makeText(myContext, R.string.security_exception, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.security_exception, Toast.LENGTH_SHORT).show()
|
||||
}finally {
|
||||
status = dnsStatus[myDpm.getGlobalPrivateDnsMode(myComponent)]
|
||||
status = dnsStatus[dpm.getGlobalPrivateDnsMode(receiver)]
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -358,26 +358,26 @@ private fun PrivateDNS(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun NetLog(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.retrieve_net_logs), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Text(text = stringResource(R.string.developing))
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
SwitchItem(R.string.enable,"",null,{myDpm.isNetworkLoggingEnabled(myComponent)},{myDpm.setNetworkLoggingEnabled(myComponent,it)})
|
||||
SwitchItem(R.string.enable,"",null,{dpm.isNetworkLoggingEnabled(receiver)},{dpm.setNetworkLoggingEnabled(receiver,it)})
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
val log = myDpm.retrieveNetworkLogs(myComponent,1234567890)
|
||||
val log = dpm.retrieveNetworkLogs(receiver,1234567890)
|
||||
if(log!=null){
|
||||
for(i in log){ Log.d("NetLog",i.toString()) }
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}else{
|
||||
Log.d("NetLog",myContext.getString(R.string.none))
|
||||
Toast.makeText(myContext, R.string.none, Toast.LENGTH_SHORT).show()
|
||||
Log.d("NetLog",context.getString(R.string.none))
|
||||
Toast.makeText(context, R.string.none, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -390,8 +390,8 @@ private fun NetLog(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun WifiKeypair(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
var keyPair by remember{mutableStateOf("")}
|
||||
@@ -407,14 +407,14 @@ private fun WifiKeypair(){
|
||||
modifier = Modifier.focusable().fillMaxWidth()
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
val isExist = try{myDpm.isKeyPairGrantedToWifiAuth(keyPair)}catch(e:java.lang.IllegalArgumentException){false}
|
||||
val isExist = try{dpm.isKeyPairGrantedToWifiAuth(keyPair)}catch(e:java.lang.IllegalArgumentException){false}
|
||||
Text(stringResource(R.string.already_exist)+":$isExist")
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween){
|
||||
Button(
|
||||
onClick = {
|
||||
val result = myDpm.grantKeyPairToWifiAuth(keyPair)
|
||||
Toast.makeText(myContext, if(result){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
val result = dpm.grantKeyPairToWifiAuth(keyPair)
|
||||
Toast.makeText(context, if(result){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.49F)
|
||||
) {
|
||||
@@ -422,8 +422,8 @@ private fun WifiKeypair(){
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
val result = myDpm.revokeKeyPairFromWifiAuth(keyPair)
|
||||
Toast.makeText(myContext, if(result){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
val result = dpm.revokeKeyPairFromWifiAuth(keyPair)
|
||||
Toast.makeText(context, if(result){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.96F)
|
||||
) {
|
||||
@@ -436,12 +436,12 @@ private fun WifiKeypair(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun APN(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
val setting = myDpm.getOverrideApns(myComponent)
|
||||
val setting = dpm.getOverrideApns(receiver)
|
||||
var inputNum by remember{mutableStateOf("0")}
|
||||
var nextStep by remember{mutableStateOf(false)}
|
||||
val builder = Builder()
|
||||
@@ -450,7 +450,7 @@ private fun APN(){
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Text(text = stringResource(id = R.string.developing))
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
SwitchItem(R.string.enable,"",null,{myDpm.isOverrideApnEnabled(myComponent)},{myDpm.setOverrideApnsEnabled(myComponent,it)})
|
||||
SwitchItem(R.string.enable,"",null,{dpm.isOverrideApnEnabled(receiver)},{dpm.setOverrideApnsEnabled(receiver,it)})
|
||||
Text(text = stringResource(R.string.total_apn_amount, setting.size))
|
||||
if(setting.size>0){
|
||||
Text(text = stringResource(R.string.select_a_apn_or_create, setting.size))
|
||||
@@ -569,7 +569,7 @@ private fun APN(){
|
||||
RadioButtonItem("PAP/CHAP",{selectedAuthType==AUTH_TYPE_PAP_OR_CHAP},{selectedAuthType=AUTH_TYPE_PAP_OR_CHAP})
|
||||
|
||||
if(VERSION.SDK_INT>=29){
|
||||
val ts = myContext.getSystemService(ComponentActivity.TELEPHONY_SERVICE) as TelephonyManager
|
||||
val ts = context.getSystemService(ComponentActivity.TELEPHONY_SERVICE) as TelephonyManager
|
||||
carrierId = ts.simCarrierId.toString()
|
||||
Text(text = "CarrierID", style = typography.titleLarge)
|
||||
TextField(
|
||||
@@ -772,7 +772,7 @@ private fun APN(){
|
||||
AnimatedVisibility(finalStep) {
|
||||
if(inputNum=="0"){
|
||||
Button(
|
||||
onClick = {myDpm.addOverrideApn(myComponent,result)},
|
||||
onClick = {dpm.addOverrideApn(receiver,result)},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.create))
|
||||
@@ -781,8 +781,8 @@ private fun APN(){
|
||||
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween){
|
||||
Button(
|
||||
onClick = {
|
||||
val success = myDpm.updateOverrideApn(myComponent,id,result)
|
||||
Toast.makeText(myContext, if(success){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
val success = dpm.updateOverrideApn(receiver,id,result)
|
||||
Toast.makeText(context, if(success){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
Modifier.fillMaxWidth(0.49F)
|
||||
){
|
||||
@@ -790,8 +790,8 @@ private fun APN(){
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
val success = myDpm.removeOverrideApn(myComponent,id)
|
||||
Toast.makeText(myContext, if(success){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
val success = dpm.removeOverrideApn(receiver,id)
|
||||
Toast.makeText(context, if(success){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
Modifier.fillMaxWidth(0.96F)
|
||||
){
|
||||
|
||||
@@ -118,9 +118,9 @@ private fun Home(navCtrl:NavHostController,scrollState: ScrollState){
|
||||
|
||||
@Composable
|
||||
private fun PasswordInfo(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext, Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context, Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.password_info), style = typography.headlineLarge)
|
||||
@@ -132,18 +132,18 @@ private fun PasswordInfo(){
|
||||
PASSWORD_COMPLEXITY_MEDIUM to stringResource(R.string.password_complexity_medium),
|
||||
PASSWORD_COMPLEXITY_HIGH to stringResource(R.string.password_complexity_high)
|
||||
)
|
||||
val pwdComplex = passwordComplexity[myDpm.passwordComplexity]
|
||||
val pwdComplex = passwordComplexity[dpm.passwordComplexity]
|
||||
Text(text = stringResource(R.string.current_password_complexity_is, pwdComplex?:stringResource(R.string.unknown)))
|
||||
}
|
||||
if(isDeviceOwner(myDpm)|| isProfileOwner(myDpm)){
|
||||
Text(stringResource(R.string.is_password_sufficient, myDpm.isActivePasswordSufficient))
|
||||
if(isDeviceOwner(dpm)|| isProfileOwner(dpm)){
|
||||
Text(stringResource(R.string.is_password_sufficient, dpm.isActivePasswordSufficient))
|
||||
}
|
||||
if(myDpm.isAdminActive(myComponent)){
|
||||
val pwdFailedAttempts = myDpm.currentFailedPasswordAttempts
|
||||
if(dpm.isAdminActive(receiver)){
|
||||
val pwdFailedAttempts = dpm.currentFailedPasswordAttempts
|
||||
Text(text = stringResource(R.string.password_failed_attempts_is, pwdFailedAttempts))
|
||||
}
|
||||
if(VERSION.SDK_INT>=28&&isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent)){
|
||||
val unifiedPwd = myDpm.isUsingUnifiedPassword(myComponent)
|
||||
if(VERSION.SDK_INT>=28&&isProfileOwner(dpm)&&dpm.isManagedProfile(receiver)){
|
||||
val unifiedPwd = dpm.isUsingUnifiedPassword(receiver)
|
||||
Text(stringResource(R.string.is_using_unified_password, unifiedPwd))
|
||||
}
|
||||
}
|
||||
@@ -152,49 +152,49 @@ private fun PasswordInfo(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun ResetPasswordToken(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val myByteArray by remember{ mutableStateOf(byteArrayOf(1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0)) }
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val tokenByteArray by remember{ mutableStateOf(byteArrayOf(1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0)) }
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.reset_password_token), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
if(myDpm.clearResetPasswordToken(myComponent)){ Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}else{ Toast.makeText(myContext, R.string.fail, Toast.LENGTH_SHORT).show() }
|
||||
if(dpm.clearResetPasswordToken(receiver)){ Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}else{ Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show() }
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm)
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm)
|
||||
) {
|
||||
Text(stringResource(R.string.clear))
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
try {
|
||||
if(myDpm.setResetPasswordToken(myComponent, myByteArray)){
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
if(dpm.setResetPasswordToken(receiver, tokenByteArray)){
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}else{
|
||||
Toast.makeText(myContext, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}catch(e:SecurityException){
|
||||
Toast.makeText(myContext, R.string.security_exception, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.security_exception, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.set))
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
if(!myDpm.isResetPasswordTokenActive(myComponent)){
|
||||
try{ activateToken(myContext) }
|
||||
catch(e:NullPointerException){ Toast.makeText(myContext, R.string.please_set_a_token, Toast.LENGTH_SHORT).show() }
|
||||
}else{ Toast.makeText(myContext, R.string.token_already_activated, Toast.LENGTH_SHORT).show() }
|
||||
if(!dpm.isResetPasswordTokenActive(receiver)){
|
||||
try{ activateToken(context) }
|
||||
catch(e:NullPointerException){ Toast.makeText(context, R.string.please_set_a_token, Toast.LENGTH_SHORT).show() }
|
||||
}else{ Toast.makeText(context, R.string.token_already_activated, Toast.LENGTH_SHORT).show() }
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.activate))
|
||||
@@ -206,12 +206,12 @@ private fun ResetPasswordToken(){
|
||||
|
||||
@Composable
|
||||
private fun ResetPassword(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var newPwd by remember{ mutableStateOf("") }
|
||||
val myByteArray by remember{ mutableStateOf(byteArrayOf(1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0)) }
|
||||
val tokenByteArray by remember{ mutableStateOf(byteArrayOf(1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0)) }
|
||||
var confirmed by remember{ mutableStateOf(false) }
|
||||
var resetPwdFlag by remember{ mutableIntStateOf(0) }
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
@@ -221,7 +221,7 @@ private fun ResetPassword(){
|
||||
OutlinedTextField(
|
||||
value = newPwd,
|
||||
onValueChange = {newPwd=it},
|
||||
enabled = !confirmed&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm)||myDpm.isAdminActive(myComponent)),
|
||||
enabled = !confirmed&&(isDeviceOwner(dpm)||isProfileOwner(dpm)||dpm.isAdminActive(receiver)),
|
||||
label = { Text(stringResource(R.string.password))},
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password, imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}),
|
||||
@@ -242,9 +242,9 @@ private fun ResetPassword(){
|
||||
Button(
|
||||
onClick = {
|
||||
if(newPwd.length>=4||newPwd.isEmpty()){ confirmed=!confirmed
|
||||
}else{ Toast.makeText(myContext, R.string.require_4_digit_password, Toast.LENGTH_SHORT).show() }
|
||||
}else{ Toast.makeText(context, R.string.require_4_digit_password, Toast.LENGTH_SHORT).show() }
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm) || isProfileOwner(myDpm) || myDpm.isAdminActive(myComponent),
|
||||
enabled = isDeviceOwner(dpm) || isProfileOwner(dpm) || dpm.isAdminActive(receiver),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
colors = ButtonDefaults.buttonColors(
|
||||
containerColor = if(confirmed){ colorScheme.primary }else{ colorScheme.error },
|
||||
@@ -257,13 +257,13 @@ private fun ResetPassword(){
|
||||
if(VERSION.SDK_INT>=26){
|
||||
Button(
|
||||
onClick = {
|
||||
val resetSuccess = myDpm.resetPasswordWithToken(myComponent,newPwd,myByteArray,resetPwdFlag)
|
||||
if(resetSuccess){ Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show();newPwd=""}
|
||||
else{ Toast.makeText(myContext, R.string.fail, Toast.LENGTH_SHORT).show() }
|
||||
val resetSuccess = dpm.resetPasswordWithToken(receiver,newPwd,tokenByteArray,resetPwdFlag)
|
||||
if(resetSuccess){ Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show();newPwd=""}
|
||||
else{ Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show() }
|
||||
confirmed=false
|
||||
},
|
||||
colors = ButtonDefaults.buttonColors(containerColor = colorScheme.error, contentColor = colorScheme.onError),
|
||||
enabled = confirmed&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm)),
|
||||
enabled = confirmed&&(isDeviceOwner(dpm)||isProfileOwner(dpm)),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.reset_password_with_token))
|
||||
@@ -271,9 +271,9 @@ private fun ResetPassword(){
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
val resetSuccess = myDpm.resetPassword(newPwd,resetPwdFlag)
|
||||
if(resetSuccess){ Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show(); newPwd=""}
|
||||
else{ Toast.makeText(myContext, R.string.fail, Toast.LENGTH_SHORT).show() }
|
||||
val resetSuccess = dpm.resetPassword(newPwd,resetPwdFlag)
|
||||
if(resetSuccess){ Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show(); newPwd=""}
|
||||
else{ Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show() }
|
||||
confirmed=false
|
||||
},
|
||||
enabled = confirmed,
|
||||
@@ -289,8 +289,8 @@ private fun ResetPassword(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun PasswordComplexity(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val passwordComplexity = mapOf(
|
||||
PASSWORD_COMPLEXITY_NONE to stringResource(R.string.password_complexity_none),
|
||||
PASSWORD_COMPLEXITY_LOW to stringResource(R.string.password_complexity_low),
|
||||
@@ -298,8 +298,8 @@ private fun PasswordComplexity(){
|
||||
PASSWORD_COMPLEXITY_HIGH to stringResource(R.string.password_complexity_high)
|
||||
).toList()
|
||||
var selectedItem by remember{ mutableIntStateOf(passwordComplexity[0].first) }
|
||||
if(isDeviceOwner(myDpm) || isProfileOwner(myDpm)){
|
||||
selectedItem=myDpm.requiredPasswordComplexity
|
||||
if(isDeviceOwner(dpm) || isProfileOwner(dpm)){
|
||||
selectedItem=dpm.requiredPasswordComplexity
|
||||
}
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -313,17 +313,17 @@ private fun PasswordComplexity(){
|
||||
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.requiredPasswordComplexity = selectedItem
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.requiredPasswordComplexity = selectedItem
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)|| isProfileOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm)|| isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(text = stringResource(R.string.apply))
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {myContext.startActivity(Intent(ACTION_SET_NEW_PASSWORD))},
|
||||
onClick = {context.startActivity(Intent(ACTION_SET_NEW_PASSWORD))},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
Text(stringResource(R.string.require_set_new_password))
|
||||
@@ -334,11 +334,11 @@ private fun PasswordComplexity(){
|
||||
|
||||
@Composable
|
||||
private fun ScreenTimeout(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(myDpm)){myDpm.getMaximumTimeToLock(myComponent).toString()}else{""}) }
|
||||
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(dpm)){dpm.getMaximumTimeToLock(receiver).toString()}else{""}) }
|
||||
var ableToApply by remember{ mutableStateOf(inputContent!="") }
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -355,12 +355,12 @@ private fun ScreenTimeout(){
|
||||
},
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}),
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.focusable().fillMaxWidth()
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {focusMgr.clearFocus() ; myDpm.setMaximumTimeToLock(myComponent,inputContent.toLong())},
|
||||
onClick = {focusMgr.clearFocus() ; dpm.setMaximumTimeToLock(receiver,inputContent.toLong())},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
Text(stringResource(R.string.apply))
|
||||
@@ -370,11 +370,11 @@ private fun ScreenTimeout(){
|
||||
|
||||
@Composable
|
||||
private fun MaxFailedPasswordForWipe(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(myDpm)){myDpm.getMaximumFailedPasswordsForWipe(myComponent).toString()}else{""}) }
|
||||
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(dpm)){dpm.getMaximumFailedPasswordsForWipe(receiver).toString()}else{""}) }
|
||||
var ableToApply by remember{ mutableStateOf(inputContent!=""&&inputContent!="0") }
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -391,12 +391,12 @@ private fun MaxFailedPasswordForWipe(){
|
||||
},
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}),
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.focusable().fillMaxWidth()
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {focusMgr.clearFocus() ; myDpm.setMaximumFailedPasswordsForWipe(myComponent,inputContent.toInt())},
|
||||
onClick = {focusMgr.clearFocus() ; dpm.setMaximumFailedPasswordsForWipe(receiver,inputContent.toInt())},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
Text(stringResource(R.string.apply))
|
||||
@@ -406,11 +406,11 @@ private fun MaxFailedPasswordForWipe(){
|
||||
|
||||
@Composable
|
||||
private fun PasswordExpiration(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(myDpm)){myDpm.getPasswordExpirationTimeout(myComponent).toString()}else{""}) }
|
||||
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(dpm)){dpm.getPasswordExpirationTimeout(receiver).toString()}else{""}) }
|
||||
var ableToApply by remember{ mutableStateOf(inputContent!="") }
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -427,12 +427,12 @@ private fun PasswordExpiration(){
|
||||
},
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}),
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.focusable().fillMaxWidth()
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {focusMgr.clearFocus() ; myDpm.setPasswordExpirationTimeout(myComponent,inputContent.toLong())},
|
||||
onClick = {focusMgr.clearFocus() ; dpm.setPasswordExpirationTimeout(receiver,inputContent.toLong())},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
Text(stringResource(R.string.apply))
|
||||
@@ -442,11 +442,11 @@ private fun PasswordExpiration(){
|
||||
|
||||
@Composable
|
||||
private fun PasswordHistoryLength(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(myDpm)){myDpm.getPasswordHistoryLength(myComponent).toString()}else{""}) }
|
||||
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(dpm)){dpm.getPasswordHistoryLength(receiver).toString()}else{""}) }
|
||||
var ableToApply by remember{ mutableStateOf(inputContent!="") }
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -463,12 +463,12 @@ private fun PasswordHistoryLength(){
|
||||
},
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}),
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.focusable().fillMaxWidth()
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {focusMgr.clearFocus() ; myDpm.setPasswordHistoryLength(myComponent,inputContent.toInt())},
|
||||
onClick = {focusMgr.clearFocus() ; dpm.setPasswordHistoryLength(receiver,inputContent.toInt())},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
Text(stringResource(R.string.apply))
|
||||
@@ -478,9 +478,9 @@ private fun PasswordHistoryLength(){
|
||||
|
||||
@Composable
|
||||
private fun KeyguardDisabledFeatures(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
var state by remember{mutableIntStateOf(-1)}
|
||||
var shortcuts by remember{mutableStateOf(false)}
|
||||
var biometrics by remember{mutableStateOf(false)}
|
||||
@@ -494,7 +494,7 @@ private fun KeyguardDisabledFeatures(){
|
||||
var camera by remember{mutableStateOf(false)}
|
||||
var widgets by remember{mutableStateOf(false)}
|
||||
val calculateCustomFeature = {
|
||||
var calculate = myDpm.getKeyguardDisabledFeatures(myComponent)
|
||||
var calculate = dpm.getKeyguardDisabledFeatures(receiver)
|
||||
if(calculate==0){state=0}
|
||||
else{
|
||||
if(calculate-KEYGUARD_DISABLE_SHORTCUTS_ALL>=0 && VERSION.SDK_INT>=34){shortcuts=true;calculate-= KEYGUARD_DISABLE_SHORTCUTS_ALL }
|
||||
@@ -511,7 +511,7 @@ private fun KeyguardDisabledFeatures(){
|
||||
}
|
||||
}
|
||||
if(state==-1){
|
||||
state = when(myDpm.getKeyguardDisabledFeatures(myComponent)){
|
||||
state = when(dpm.getKeyguardDisabledFeatures(receiver)){
|
||||
KEYGUARD_DISABLE_FEATURES_NONE->0
|
||||
KEYGUARD_DISABLE_FEATURES_ALL->1
|
||||
else->2
|
||||
@@ -561,11 +561,11 @@ private fun KeyguardDisabledFeatures(){
|
||||
if(camera){result+=KEYGUARD_DISABLE_SECURE_CAMERA}
|
||||
if(widgets){result+=KEYGUARD_DISABLE_WIDGETS_ALL}
|
||||
}
|
||||
myDpm.setKeyguardDisabledFeatures(myComponent,result)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setKeyguardDisabledFeatures(receiver,result)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
calculateCustomFeature()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(text = stringResource(R.string.apply))
|
||||
@@ -576,9 +576,9 @@ private fun KeyguardDisabledFeatures(){
|
||||
|
||||
@Composable
|
||||
private fun PasswordQuality(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val passwordQuality = mapOf(
|
||||
PASSWORD_QUALITY_UNSPECIFIED to stringResource(R.string.password_quality_unspecified),
|
||||
PASSWORD_QUALITY_SOMETHING to stringResource(R.string.password_quality_something),
|
||||
@@ -590,7 +590,7 @@ private fun PasswordQuality(){
|
||||
PASSWORD_QUALITY_COMPLEX to stringResource(R.string.custom)+"(${stringResource(R.string.unsupported)})",
|
||||
).toList()
|
||||
var selectedItem by remember{ mutableIntStateOf(passwordQuality[0].first) }
|
||||
if(isDeviceOwner(myDpm) || isProfileOwner(myDpm)){ selectedItem=myDpm.getPasswordQuality(myComponent) }
|
||||
if(isDeviceOwner(dpm) || isProfileOwner(dpm)){ selectedItem=dpm.getPasswordQuality(receiver) }
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.required_password_quality), style = typography.headlineLarge)
|
||||
@@ -609,10 +609,10 @@ private fun PasswordQuality(){
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.setPasswordQuality(myComponent,selectedItem)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setPasswordQuality(receiver,selectedItem)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm) || isProfileOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm) || isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
@@ -621,13 +621,13 @@ private fun PasswordQuality(){
|
||||
}
|
||||
}
|
||||
|
||||
private fun activateToken(myContext: Context){
|
||||
val desc = myContext.getString(R.string.activate_reset_password_token_here)
|
||||
val keyguardManager = myContext.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
|
||||
val confirmIntent = keyguardManager.createConfirmDeviceCredentialIntent(myContext.getString(R.string.app_name), desc)
|
||||
private fun activateToken(context: Context){
|
||||
val desc = context.getString(R.string.activate_reset_password_token_here)
|
||||
val keyguardManager = context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
|
||||
val confirmIntent = keyguardManager.createConfirmDeviceCredentialIntent(context.getString(R.string.app_name), desc)
|
||||
if (confirmIntent != null) {
|
||||
startActivity(myContext,confirmIntent, null)
|
||||
startActivity(context,confirmIntent, null)
|
||||
} else {
|
||||
Toast.makeText(myContext, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,45 +101,45 @@ fun DpmPermissions(navCtrl:NavHostController){
|
||||
|
||||
@Composable
|
||||
private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext, Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context, Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(listScrollState)) {
|
||||
Text(text = stringResource(R.string.permission), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 5.dp, start = 15.dp))
|
||||
SubPageItem(
|
||||
R.string.device_admin, stringResource(if(myDpm.isAdminActive(myComponent)){R.string.activated}else{R.string.deactivated}),
|
||||
R.string.device_admin, stringResource(if(dpm.isAdminActive(receiver)){R.string.activated}else{R.string.deactivated}),
|
||||
operation = {localNavCtrl.navigate("DeviceAdmin")}
|
||||
)
|
||||
if(!isDeviceOwner(myDpm)){
|
||||
if(!isDeviceOwner(dpm)){
|
||||
SubPageItem(
|
||||
R.string.profile_owner, stringResource(if(isProfileOwner(myDpm)){R.string.activated}else{R.string.deactivated}),
|
||||
R.string.profile_owner, stringResource(if(isProfileOwner(dpm)){R.string.activated}else{R.string.deactivated}),
|
||||
operation = {localNavCtrl.navigate("ProfileOwner")}
|
||||
)
|
||||
}
|
||||
if(!isProfileOwner(myDpm)){
|
||||
if(!isProfileOwner(dpm)){
|
||||
SubPageItem(
|
||||
R.string.device_owner, stringResource(if(isDeviceOwner(myDpm)){R.string.activated}else{R.string.deactivated}),
|
||||
R.string.device_owner, stringResource(if(isDeviceOwner(dpm)){R.string.activated}else{R.string.deactivated}),
|
||||
operation = {localNavCtrl.navigate("DeviceOwner")}
|
||||
)
|
||||
}
|
||||
SubPageItem(R.string.shizuku,""){localNavCtrl.navigate("Shizuku")}
|
||||
SubPageItem(R.string.device_info,"",R.drawable.perm_device_information_fill0){localNavCtrl.navigate("DeviceInfo")}
|
||||
if(VERSION.SDK_INT>=31&&(isProfileOwner(myDpm)|| isDeviceOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=31&&(isProfileOwner(dpm)|| isDeviceOwner(dpm))){
|
||||
SubPageItem(R.string.enrollment_specific_id,"",R.drawable.id_card_fill0){localNavCtrl.navigate("SpecificID")}
|
||||
}
|
||||
if((VERSION.SDK_INT>=26&&isDeviceOwner(myDpm))||(VERSION.SDK_INT>=24&&isProfileOwner(myDpm))){
|
||||
if((VERSION.SDK_INT>=26&&isDeviceOwner(dpm))||(VERSION.SDK_INT>=24&&isProfileOwner(dpm))){
|
||||
SubPageItem(R.string.org_name,"",R.drawable.corporate_fare_fill0){localNavCtrl.navigate("OrgName")}
|
||||
}
|
||||
if(isDeviceOwner(myDpm) || isProfileOwner(myDpm)){
|
||||
if(isDeviceOwner(dpm) || isProfileOwner(dpm)){
|
||||
SubPageItem(R.string.account_types_management_disabled,"",R.drawable.account_circle_fill0){localNavCtrl.navigate("NoManagementAccount")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=24&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=24&&isDeviceOwner(dpm)){
|
||||
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))){
|
||||
if(VERSION.SDK_INT>=24&&(isDeviceOwner(dpm)||isProfileOwner(dpm))){
|
||||
SubPageItem(R.string.support_msg,"",R.drawable.chat_fill0){localNavCtrl.navigate("SupportMsg")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=28&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=28&&(isDeviceOwner(dpm)||isProfileOwner(dpm))){
|
||||
SubPageItem(R.string.transform_ownership,"",R.drawable.admin_panel_settings_fill0){localNavCtrl.navigate("TransformOwnership")}
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
@@ -149,11 +149,11 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun LockScreenInfo(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var infoText by remember{mutableStateOf(myDpm.deviceOwnerLockScreenInfo?.toString() ?: "")}
|
||||
var infoText by remember{mutableStateOf(dpm.deviceOwnerLockScreenInfo?.toString() ?: "")}
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
|
||||
Text(text = stringResource(R.string.device_owner_lock_screen_info), style = typography.headlineLarge)
|
||||
OutlinedTextField(
|
||||
@@ -165,8 +165,8 @@ private fun LockScreenInfo(){
|
||||
Button(
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
myDpm.setDeviceOwnerLockScreenInfo(myComponent,infoText)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setDeviceOwnerLockScreenInfo(receiver,infoText)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -175,8 +175,8 @@ private fun LockScreenInfo(){
|
||||
Button(
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
myDpm.setDeviceOwnerLockScreenInfo(myComponent,null)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setDeviceOwnerLockScreenInfo(receiver,null)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -187,23 +187,23 @@ private fun LockScreenInfo(){
|
||||
|
||||
@Composable
|
||||
private fun DeviceAdmin(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val co = rememberCoroutineScope()
|
||||
var showDeactivateButton by remember{mutableStateOf(myDpm.isAdminActive(myComponent))}
|
||||
var showDeactivateButton by remember{mutableStateOf(dpm.isAdminActive(receiver))}
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.device_admin), style = typography.headlineLarge)
|
||||
Text(text = stringResource(if(myDpm.isAdminActive(myComponent)) { R.string.activated } else { R.string.deactivated }), style = typography.titleLarge)
|
||||
Text(text = stringResource(if(dpm.isAdminActive(receiver)) { R.string.activated } else { R.string.deactivated }), style = typography.titleLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
AnimatedVisibility(showDeactivateButton) {
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.removeActiveAdmin(myComponent)
|
||||
co.launch{ delay(400); showDeactivateButton=myDpm.isAdminActive(myComponent) }
|
||||
dpm.removeActiveAdmin(receiver)
|
||||
co.launch{ delay(400); showDeactivateButton=dpm.isAdminActive(receiver) }
|
||||
},
|
||||
enabled = !isProfileOwner(myDpm)&&!isDeviceOwner(myDpm),
|
||||
enabled = !isProfileOwner(dpm)&&!isDeviceOwner(dpm),
|
||||
colors = ButtonDefaults.buttonColors(containerColor = colorScheme.error, contentColor = colorScheme.onError)
|
||||
) {
|
||||
Text(stringResource(R.string.deactivate))
|
||||
@@ -211,7 +211,7 @@ private fun DeviceAdmin(){
|
||||
}
|
||||
AnimatedVisibility(!showDeactivateButton) {
|
||||
Column {
|
||||
Button(onClick = {activateDeviceAdmin(myContext, myComponent)}, modifier = Modifier.fillMaxWidth()) {
|
||||
Button(onClick = {activateDeviceAdmin(context, receiver)}, modifier = Modifier.fillMaxWidth()) {
|
||||
Text(stringResource(R.string.activate_jump))
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
@@ -226,24 +226,24 @@ private fun DeviceAdmin(){
|
||||
|
||||
@Composable
|
||||
private fun ProfileOwner(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
var showDeactivateButton by remember{mutableStateOf(isProfileOwner(myDpm))}
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
var showDeactivateButton by remember{mutableStateOf(isProfileOwner(dpm))}
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.profile_owner), style = typography.headlineLarge)
|
||||
Text(stringResource(if(isProfileOwner(myDpm)){R.string.activated}else{R.string.deactivated}), style = typography.titleLarge)
|
||||
Text(stringResource(if(isProfileOwner(dpm)){R.string.activated}else{R.string.deactivated}), style = typography.titleLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if(VERSION.SDK_INT>=24){
|
||||
AnimatedVisibility(showDeactivateButton) {
|
||||
val co = rememberCoroutineScope()
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.clearProfileOwner(myComponent)
|
||||
co.launch { delay(400); showDeactivateButton=isProfileOwner(myDpm) }
|
||||
dpm.clearProfileOwner(receiver)
|
||||
co.launch { delay(400); showDeactivateButton=isProfileOwner(dpm) }
|
||||
},
|
||||
enabled = !myDpm.isManagedProfile(myComponent),
|
||||
enabled = !dpm.isManagedProfile(receiver),
|
||||
colors = ButtonDefaults.buttonColors(containerColor = colorScheme.error, contentColor = colorScheme.onError)
|
||||
) {
|
||||
Text(stringResource(R.string.deactivate))
|
||||
@@ -263,20 +263,20 @@ private fun ProfileOwner(){
|
||||
|
||||
@Composable
|
||||
private fun DeviceOwner(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val co = rememberCoroutineScope()
|
||||
var showDeactivateButton by remember{mutableStateOf(isDeviceOwner(myDpm))}
|
||||
var showDeactivateButton by remember{mutableStateOf(isDeviceOwner(dpm))}
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.device_owner), style = typography.headlineLarge)
|
||||
Text(text = stringResource(if(isDeviceOwner(myDpm)){R.string.activated}else{R.string.deactivated}), style = typography.titleLarge)
|
||||
Text(text = stringResource(if(isDeviceOwner(dpm)){R.string.activated}else{R.string.deactivated}), style = typography.titleLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
AnimatedVisibility(showDeactivateButton) {
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.clearDeviceOwnerApp(myContext.packageName)
|
||||
co.launch{ delay(400); showDeactivateButton=isDeviceOwner(myDpm) }
|
||||
dpm.clearDeviceOwnerApp(context.packageName)
|
||||
co.launch{ delay(400); showDeactivateButton=isDeviceOwner(dpm) }
|
||||
},
|
||||
colors = ButtonDefaults.buttonColors(containerColor = colorScheme.error, contentColor = colorScheme.onError)
|
||||
) {
|
||||
@@ -296,19 +296,19 @@ private fun DeviceOwner(){
|
||||
|
||||
@Composable
|
||||
fun DeviceInfo(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
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)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if(VERSION.SDK_INT>=34&&(isDeviceOwner(myDpm)||(isProfileOwner(myDpm)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile))){
|
||||
val financed = myDpm.isDeviceFinanced
|
||||
if(VERSION.SDK_INT>=34&&(isDeviceOwner(dpm)||(isProfileOwner(dpm)&&dpm.isOrganizationOwnedDeviceWithManagedProfile))){
|
||||
val financed = dpm.isDeviceFinanced
|
||||
Text(stringResource(R.string.is_device_financed, financed))
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 2.dp))
|
||||
if(VERSION.SDK_INT>=33){
|
||||
val dpmRole = myDpm.devicePolicyManagementRoleHolderPackage
|
||||
val dpmRole = dpm.devicePolicyManagementRoleHolderPackage
|
||||
Text(stringResource(R.string.dpmrh, if(dpmRole==null) { stringResource(R.string.none) } else { "" }))
|
||||
if(dpmRole!=null){
|
||||
SelectionContainer(modifier = Modifier.horizontalScroll(rememberScrollState())){
|
||||
@@ -324,9 +324,9 @@ fun DeviceInfo(){
|
||||
)
|
||||
if(VERSION.SDK_INT>=23){ encryptionStatus[DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY] = stringResource(R.string.es_active_default_key) }
|
||||
if(VERSION.SDK_INT>=24){ encryptionStatus[DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE_PER_USER] = stringResource(R.string.es_active_per_user) }
|
||||
Text(stringResource(R.string.encrypt_status_is)+encryptionStatus[myDpm.storageEncryptionStatus])
|
||||
Text(stringResource(R.string.encrypt_status_is)+encryptionStatus[dpm.storageEncryptionStatus])
|
||||
Spacer(Modifier.padding(vertical = 2.dp))
|
||||
val adminList = myDpm.activeAdmins
|
||||
val adminList = dpm.activeAdmins
|
||||
if(adminList!=null){
|
||||
var adminListText = ""
|
||||
Text(text = stringResource(R.string.activated_device_admin, adminList.size))
|
||||
@@ -346,10 +346,10 @@ fun DeviceInfo(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun SpecificID(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
|
||||
val specificId = myDpm.enrollmentSpecificId
|
||||
val specificId = dpm.enrollmentSpecificId
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.enrollment_specific_id), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
@@ -365,12 +365,12 @@ private fun SpecificID(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun OrgName(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
|
||||
var orgName by remember{mutableStateOf(try{myDpm.getOrganizationName(myComponent).toString()}catch(e:SecurityException){""})}
|
||||
var orgName by remember{mutableStateOf(try{dpm.getOrganizationName(receiver).toString()}catch(e:SecurityException){""})}
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.org_name), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
@@ -384,8 +384,8 @@ private fun OrgName(){
|
||||
Button(
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
myDpm.setOrganizationName(myComponent,orgName)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setOrganizationName(receiver,orgName)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
@@ -397,12 +397,12 @@ private fun OrgName(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun SupportMsg(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var shortMsg by remember{mutableStateOf(myDpm.getShortSupportMessage(myComponent)?.toString() ?: "")}
|
||||
var longMsg by remember{mutableStateOf(myDpm.getLongSupportMessage(myComponent)?.toString() ?: "")}
|
||||
var shortMsg by remember{mutableStateOf(dpm.getShortSupportMessage(receiver)?.toString() ?: "")}
|
||||
var longMsg by remember{mutableStateOf(dpm.getLongSupportMessage(receiver)?.toString() ?: "")}
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.support_msg), style = typography.headlineLarge)
|
||||
@@ -424,11 +424,11 @@ private fun SupportMsg(){
|
||||
Button(
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
myDpm.setShortSupportMessage(myComponent, shortMsg)
|
||||
myDpm.setLongSupportMessage(myComponent, longMsg)
|
||||
shortMsg = myDpm.getShortSupportMessage(myComponent)?.toString() ?: ""
|
||||
longMsg = myDpm.getLongSupportMessage(myComponent)?.toString() ?: ""
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setShortSupportMessage(receiver, shortMsg)
|
||||
dpm.setLongSupportMessage(receiver, longMsg)
|
||||
shortMsg = dpm.getShortSupportMessage(receiver)?.toString() ?: ""
|
||||
longMsg = dpm.getLongSupportMessage(receiver)?.toString() ?: ""
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -438,11 +438,11 @@ private fun SupportMsg(){
|
||||
Button(
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
myDpm.setShortSupportMessage(myComponent, null)
|
||||
myDpm.setLongSupportMessage(myComponent, null)
|
||||
shortMsg = myDpm.getShortSupportMessage(myComponent)?.toString() ?: ""
|
||||
longMsg = myDpm.getLongSupportMessage(myComponent)?.toString() ?: ""
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setShortSupportMessage(receiver, null)
|
||||
dpm.setLongSupportMessage(receiver, null)
|
||||
shortMsg = dpm.getShortSupportMessage(receiver)?.toString() ?: ""
|
||||
longMsg = dpm.getLongSupportMessage(receiver)?.toString() ?: ""
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -456,9 +456,9 @@ private fun SupportMsg(){
|
||||
|
||||
@Composable
|
||||
private fun NoManageAccount(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -466,7 +466,7 @@ private fun NoManageAccount(){
|
||||
Text(stringResource(R.string.unknown_effect))
|
||||
var accountList by remember{ mutableStateOf("") }
|
||||
val refreshList = {
|
||||
val noManageAccount = myDpm.accountTypesWithManagementDisabled
|
||||
val noManageAccount = dpm.accountTypesWithManagementDisabled
|
||||
accountList = ""
|
||||
if (noManageAccount != null) {
|
||||
var count = noManageAccount.size
|
||||
@@ -488,7 +488,7 @@ private fun NoManageAccount(){
|
||||
)
|
||||
Button(
|
||||
onClick={
|
||||
myDpm.setAccountManagementDisabled(myComponent,inputText,true)
|
||||
dpm.setAccountManagementDisabled(receiver,inputText,true)
|
||||
refreshList()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -497,7 +497,7 @@ private fun NoManageAccount(){
|
||||
}
|
||||
Button(
|
||||
onClick={
|
||||
myDpm.setAccountManagementDisabled(myComponent,inputText,false)
|
||||
dpm.setAccountManagementDisabled(receiver,inputText,false)
|
||||
refreshList()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -510,9 +510,9 @@ private fun NoManageAccount(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun TransformOwnership(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
val focusRequester = FocusRequester()
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
|
||||
@@ -540,10 +540,10 @@ private fun TransformOwnership(){
|
||||
Button(
|
||||
onClick = {
|
||||
try {
|
||||
myDpm.transferOwnership(myComponent,ComponentName(pkg, cls),null)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.transferOwnership(receiver,ComponentName(pkg, cls),null)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}catch(e:IllegalArgumentException){
|
||||
Toast.makeText(myContext, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
|
||||
@@ -40,20 +40,20 @@ private var waitGrantPermission = false
|
||||
|
||||
@Composable
|
||||
fun ShizukuActivate(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext, Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context, Receiver::class.java)
|
||||
val coScope = rememberCoroutineScope()
|
||||
val outputTextScrollState = rememberScrollState()
|
||||
var enabled by remember{ mutableStateOf(false) }
|
||||
var bindShizuku by remember{ mutableStateOf(false) }
|
||||
var outputText by remember{mutableStateOf("")}
|
||||
var showDeviceAdminButton by remember{mutableStateOf(!myDpm.isAdminActive(myComponent))}
|
||||
var showProfileOwnerButton by remember{mutableStateOf(!isProfileOwner(myDpm))}
|
||||
var showDeviceOwnerButton by remember{mutableStateOf(!isDeviceOwner(myDpm))}
|
||||
var showDeviceAdminButton by remember{mutableStateOf(!dpm.isAdminActive(receiver))}
|
||||
var showProfileOwnerButton by remember{mutableStateOf(!isProfileOwner(dpm))}
|
||||
var showDeviceOwnerButton by remember{mutableStateOf(!isDeviceOwner(dpm))}
|
||||
var showOrgProfileOwnerButton by remember{mutableStateOf(true)}
|
||||
LaunchedEffect(Unit){
|
||||
if(service==null){userServiceControl(myContext, true)}
|
||||
if(service==null){userServiceControl(context, true)}
|
||||
while(true){
|
||||
if(service==null){
|
||||
enabled = false
|
||||
@@ -75,7 +75,7 @@ fun ShizukuActivate(){
|
||||
AnimatedVisibility(bindShizuku) {
|
||||
Button(
|
||||
onClick = {
|
||||
userServiceControl(myContext, true)
|
||||
userServiceControl(context, true)
|
||||
outputText = ""
|
||||
}
|
||||
){
|
||||
@@ -85,7 +85,7 @@ fun ShizukuActivate(){
|
||||
|
||||
Button(
|
||||
onClick = {
|
||||
outputText = checkPermission(myContext)
|
||||
outputText = checkPermission(context)
|
||||
coScope.launch {
|
||||
outputTextScrollState.animateScrollTo(0, scrollAnim())
|
||||
}
|
||||
@@ -111,10 +111,10 @@ fun ShizukuActivate(){
|
||||
Button(
|
||||
onClick = {
|
||||
coScope.launch{
|
||||
outputText = service!!.execute(myContext.getString(R.string.dpm_activate_da_command))
|
||||
outputText = service!!.execute(context.getString(R.string.dpm_activate_da_command))
|
||||
outputTextScrollState.animateScrollTo(0, scrollAnim())
|
||||
delay(500)
|
||||
showDeviceAdminButton = !myDpm.isAdminActive(myComponent)
|
||||
showDeviceAdminButton = !dpm.isAdminActive(receiver)
|
||||
}
|
||||
},
|
||||
enabled = enabled
|
||||
@@ -127,10 +127,10 @@ fun ShizukuActivate(){
|
||||
Button(
|
||||
onClick = {
|
||||
coScope.launch{
|
||||
outputText = service!!.execute(myContext.getString(R.string.dpm_activate_po_command))
|
||||
outputText = service!!.execute(context.getString(R.string.dpm_activate_po_command))
|
||||
outputTextScrollState.animateScrollTo(0, scrollAnim())
|
||||
delay(600)
|
||||
showProfileOwnerButton = !isProfileOwner(myDpm)
|
||||
showProfileOwnerButton = !isProfileOwner(dpm)
|
||||
}
|
||||
},
|
||||
enabled = enabled
|
||||
@@ -143,10 +143,10 @@ fun ShizukuActivate(){
|
||||
Button(
|
||||
onClick = {
|
||||
coScope.launch{
|
||||
outputText = service!!.execute(myContext.getString(R.string.dpm_activate_do_command))
|
||||
outputText = service!!.execute(context.getString(R.string.dpm_activate_do_command))
|
||||
outputTextScrollState.animateScrollTo(0, scrollAnim())
|
||||
delay(500)
|
||||
showDeviceOwnerButton = !isDeviceOwner(myDpm)
|
||||
showDeviceOwnerButton = !isDeviceOwner(dpm)
|
||||
}
|
||||
},
|
||||
enabled = enabled
|
||||
@@ -156,7 +156,7 @@ fun ShizukuActivate(){
|
||||
}
|
||||
|
||||
if(
|
||||
VERSION.SDK_INT>=30&&isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent)&&!myDpm.isOrganizationOwnedDeviceWithManagedProfile
|
||||
VERSION.SDK_INT>=30&&isProfileOwner(dpm)&&dpm.isManagedProfile(receiver)&&!dpm.isOrganizationOwnedDeviceWithManagedProfile
|
||||
){
|
||||
AnimatedVisibility(showOrgProfileOwnerButton) {
|
||||
Button(
|
||||
@@ -168,7 +168,7 @@ fun ShizukuActivate(){
|
||||
)
|
||||
outputTextScrollState.animateScrollTo(0, scrollAnim())
|
||||
delay(500)
|
||||
showOrgProfileOwnerButton = !myDpm.isOrganizationOwnedDeviceWithManagedProfile
|
||||
showOrgProfileOwnerButton = !dpm.isOrganizationOwnedDeviceWithManagedProfile
|
||||
}
|
||||
},
|
||||
enabled = enabled
|
||||
|
||||
@@ -112,11 +112,11 @@ fun SystemManage(navCtrl:NavHostController){
|
||||
|
||||
@Composable
|
||||
private fun Home(navCtrl: NavHostController,scrollState: ScrollState){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState)){
|
||||
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)){
|
||||
if(isDeviceOwner(dpm)||isProfileOwner(dpm)){
|
||||
SubPageItem(R.string.options,"",R.drawable.tune_fill0){navCtrl.navigate("Switches")}
|
||||
}
|
||||
SubPageItem(R.string.keyguard,"",R.drawable.screen_lock_portrait_fill0){navCtrl.navigate("Keyguard")}
|
||||
@@ -127,25 +127,25 @@ private fun Home(navCtrl: NavHostController,scrollState: ScrollState){
|
||||
if(VERSION.SDK_INT>=28){
|
||||
SubPageItem(R.string.edit_time,"",R.drawable.schedule_fill0){navCtrl.navigate("EditTime")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=23&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=23&&(isDeviceOwner(dpm)||isProfileOwner(dpm))){
|
||||
SubPageItem(R.string.permission_policy,"",R.drawable.key_fill0){navCtrl.navigate("PermissionPolicy")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=34&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=34&&isDeviceOwner(dpm)){
|
||||
SubPageItem(R.string.mte_policy,"",R.drawable.memory_fill0){navCtrl.navigate("MTEPolicy")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=31&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=31&&(isDeviceOwner(dpm)||isProfileOwner(dpm))){
|
||||
SubPageItem(R.string.nearby_streaming_policy,"",R.drawable.share_fill0){navCtrl.navigate("NearbyStreamingPolicy")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=28&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=28&&isDeviceOwner(dpm)){
|
||||
SubPageItem(R.string.lock_task_feature,"",R.drawable.lock_fill0){navCtrl.navigate("LockTaskFeatures")}
|
||||
}
|
||||
if(isDeviceOwner(myDpm)||isProfileOwner(myDpm)){
|
||||
if(isDeviceOwner(dpm)||isProfileOwner(dpm)){
|
||||
SubPageItem(R.string.ca_cert,"",R.drawable.license_fill0){navCtrl.navigate("CaCert")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=26&&(isDeviceOwner(myDpm)||(VERSION.SDK_INT>=30&&isProfileOwner(myDpm)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile))){
|
||||
if(VERSION.SDK_INT>=26&&(isDeviceOwner(dpm)||(VERSION.SDK_INT>=30&&isProfileOwner(dpm)&&dpm.isOrganizationOwnedDeviceWithManagedProfile))){
|
||||
SubPageItem(R.string.security_logs,"",R.drawable.description_fill0){navCtrl.navigate("SecurityLogs")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=23&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=23&&isDeviceOwner(dpm)){
|
||||
SubPageItem(R.string.system_update_policy,"",R.drawable.system_update_fill0){navCtrl.navigate("SystemUpdatePolicy")}
|
||||
}
|
||||
SubPageItem(R.string.wipe_data,"",R.drawable.warning_fill0){navCtrl.navigate("WipeData")}
|
||||
@@ -156,66 +156,66 @@ private fun Home(navCtrl: NavHostController,scrollState: ScrollState){
|
||||
|
||||
@Composable
|
||||
private fun Switches(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext, Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context, Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
if(isDeviceOwner(myDpm)||isProfileOwner(myDpm)){
|
||||
if(isDeviceOwner(dpm)||isProfileOwner(dpm)){
|
||||
SwitchItem(R.string.disable_cam,"", R.drawable.photo_camera_fill0,
|
||||
{myDpm.getCameraDisabled(null)},{myDpm.setCameraDisabled(myComponent,it)}
|
||||
{dpm.getCameraDisabled(null)},{dpm.setCameraDisabled(receiver,it)}
|
||||
)
|
||||
}
|
||||
if(isDeviceOwner(myDpm)||isProfileOwner(myDpm)){
|
||||
if(isDeviceOwner(dpm)||isProfileOwner(dpm)){
|
||||
SwitchItem(R.string.disable_screenshot, stringResource(R.string.also_disable_aosp_screen_record),R.drawable.screenshot_fill0,
|
||||
{myDpm.getScreenCaptureDisabled(null)},{myDpm.setScreenCaptureDisabled(myComponent,it) }
|
||||
{dpm.getScreenCaptureDisabled(null)},{dpm.setScreenCaptureDisabled(receiver,it) }
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT>=34&&(isDeviceOwner(myDpm)|| (isProfileOwner(myDpm)&&myDpm.isAffiliatedUser))){
|
||||
if(VERSION.SDK_INT>=34&&(isDeviceOwner(dpm)|| (isProfileOwner(dpm)&&dpm.isAffiliatedUser))){
|
||||
SwitchItem(R.string.disable_status_bar,"",R.drawable.notifications_fill0,
|
||||
{myDpm.isStatusBarDisabled},{myDpm.setStatusBarDisabled(myComponent,it) }
|
||||
{dpm.isStatusBarDisabled},{dpm.setStatusBarDisabled(receiver,it) }
|
||||
)
|
||||
}
|
||||
if(isDeviceOwner(myDpm)||(VERSION.SDK_INT>=30&&isProfileOwner(myDpm)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile)){
|
||||
if(isDeviceOwner(dpm)||(VERSION.SDK_INT>=30&&isProfileOwner(dpm)&&dpm.isOrganizationOwnedDeviceWithManagedProfile)){
|
||||
if(VERSION.SDK_INT>=30){
|
||||
SwitchItem(R.string.auto_time,"",R.drawable.schedule_fill0,
|
||||
{myDpm.getAutoTimeEnabled(myComponent)},{myDpm.setAutoTimeEnabled(myComponent,it) }
|
||||
{dpm.getAutoTimeEnabled(receiver)},{dpm.setAutoTimeEnabled(receiver,it) }
|
||||
)
|
||||
SwitchItem(R.string.auto_timezone,"",R.drawable.globe_fill0,
|
||||
{myDpm.getAutoTimeZoneEnabled(myComponent)},{myDpm.setAutoTimeZoneEnabled(myComponent,it) }
|
||||
{dpm.getAutoTimeZoneEnabled(receiver)},{dpm.setAutoTimeZoneEnabled(receiver,it) }
|
||||
)
|
||||
}else{
|
||||
SwitchItem(R.string.auto_time,"",R.drawable.schedule_fill0,{myDpm.autoTimeRequired},{myDpm.setAutoTimeRequired(myComponent,it)})
|
||||
SwitchItem(R.string.auto_time,"",R.drawable.schedule_fill0,{dpm.autoTimeRequired},{dpm.setAutoTimeRequired(receiver,it)})
|
||||
}
|
||||
}
|
||||
if(isDeviceOwner(myDpm)|| isProfileOwner(myDpm)){
|
||||
if(isDeviceOwner(dpm)|| isProfileOwner(dpm)){
|
||||
SwitchItem(R.string.master_mute,"",R.drawable.volume_up_fill0,
|
||||
{myDpm.isMasterVolumeMuted(myComponent)},{myDpm.setMasterVolumeMuted(myComponent,it) }
|
||||
{dpm.isMasterVolumeMuted(receiver)},{dpm.setMasterVolumeMuted(receiver,it) }
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT>=26&&(isDeviceOwner(myDpm)|| isProfileOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=26&&(isDeviceOwner(dpm)|| isProfileOwner(dpm))){
|
||||
SwitchItem(R.string.backup_service,"",R.drawable.backup_fill0,
|
||||
{myDpm.isBackupServiceEnabled(myComponent)},{myDpm.setBackupServiceEnabled(myComponent,it) }
|
||||
{dpm.isBackupServiceEnabled(receiver)},{dpm.setBackupServiceEnabled(receiver,it) }
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT>=23&&(isDeviceOwner(myDpm)|| isProfileOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=23&&(isDeviceOwner(dpm)|| isProfileOwner(dpm))){
|
||||
SwitchItem(R.string.disable_bt_contact_share,"",R.drawable.account_circle_fill0,
|
||||
{myDpm.getBluetoothContactSharingDisabled(myComponent)},{myDpm.setBluetoothContactSharingDisabled(myComponent,it)}
|
||||
{dpm.getBluetoothContactSharingDisabled(receiver)},{dpm.setBluetoothContactSharingDisabled(receiver,it)}
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT>=30&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=30&&isDeviceOwner(dpm)){
|
||||
SwitchItem(R.string.common_criteria_mode, stringResource(R.string.common_criteria_mode_desc),R.drawable.security_fill0,
|
||||
{myDpm.isCommonCriteriaModeEnabled(myComponent)},{myDpm.setCommonCriteriaModeEnabled(myComponent,it)}
|
||||
{dpm.isCommonCriteriaModeEnabled(receiver)},{dpm.setCommonCriteriaModeEnabled(receiver,it)}
|
||||
)
|
||||
}
|
||||
if(VERSION.SDK_INT>=31&&(isDeviceOwner(myDpm)||(VERSION.SDK_INT>=30&&isProfileOwner(myDpm)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile))){
|
||||
if(VERSION.SDK_INT>=31&&(isDeviceOwner(dpm)||(VERSION.SDK_INT>=30&&isProfileOwner(dpm)&&dpm.isOrganizationOwnedDeviceWithManagedProfile))){
|
||||
SwitchItem(
|
||||
R.string.usb_signal,"",R.drawable.usb_fill0, {myDpm.isUsbDataSignalingEnabled},
|
||||
R.string.usb_signal,"",R.drawable.usb_fill0, {dpm.isUsbDataSignalingEnabled},
|
||||
{
|
||||
if(myDpm.canUsbDataSignalingBeDisabled()){
|
||||
myDpm.isUsbDataSignalingEnabled = it
|
||||
if(dpm.canUsbDataSignalingBeDisabled()){
|
||||
dpm.isUsbDataSignalingEnabled = it
|
||||
}else{
|
||||
Toast.makeText(myContext, R.string.unsupported, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.unsupported, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -226,9 +226,9 @@ private fun Switches(){
|
||||
|
||||
@Composable
|
||||
private fun Keyguard(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
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)
|
||||
@@ -236,18 +236,18 @@ private fun Keyguard(){
|
||||
if(VERSION.SDK_INT>=23){
|
||||
Button(
|
||||
onClick = {
|
||||
Toast.makeText(myContext, if(myDpm.setKeyguardDisabled(myComponent,true)){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, if(dpm.setKeyguardDisabled(receiver,true)){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)|| (VERSION.SDK_INT>=28&&isProfileOwner(myDpm)&&myDpm.isAffiliatedUser),
|
||||
enabled = isDeviceOwner(dpm)|| (VERSION.SDK_INT>=28&&isProfileOwner(dpm)&&dpm.isAffiliatedUser),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.disable))
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
Toast.makeText(myContext, if(myDpm.setKeyguardDisabled(myComponent,false)){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, if(dpm.setKeyguardDisabled(receiver,false)){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)|| (VERSION.SDK_INT>=28&&isProfileOwner(myDpm)&&myDpm.isAffiliatedUser),
|
||||
enabled = isDeviceOwner(dpm)|| (VERSION.SDK_INT>=28&&isProfileOwner(dpm)&&dpm.isAffiliatedUser),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.enable))
|
||||
@@ -258,8 +258,8 @@ private fun Keyguard(){
|
||||
}
|
||||
var flag by remember{mutableIntStateOf(0)}
|
||||
Button(
|
||||
onClick = {myDpm.lockNow()},
|
||||
enabled = myDpm.isAdminActive(myComponent),
|
||||
onClick = {dpm.lockNow()},
|
||||
enabled = dpm.isAdminActive(receiver),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.lock_now))
|
||||
@@ -272,18 +272,18 @@ private fun Keyguard(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun BugReport(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp)){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
val result = myDpm.requestBugreport(myComponent)
|
||||
Toast.makeText(myContext, if(result){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
val result = dpm.requestBugreport(receiver)
|
||||
Toast.makeText(context, if(result){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
enabled = isDeviceOwner(myDpm)
|
||||
enabled = isDeviceOwner(dpm)
|
||||
) {
|
||||
Text(stringResource(R.string.request_bug_report))
|
||||
}
|
||||
@@ -293,14 +293,14 @@ private fun BugReport(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun Reboot(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp)){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Button(
|
||||
onClick = {myDpm.reboot(myComponent)},
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
onClick = {dpm.reboot(receiver)},
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.reboot))
|
||||
@@ -311,9 +311,9 @@ private fun Reboot(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun EditTime(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -328,14 +328,14 @@ private fun EditTime(){
|
||||
onValueChange = {inputTime = it},
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}),
|
||||
enabled = isDeviceOwner(myDpm)||(VERSION.SDK_INT>=30&&isProfileOwner(myDpm)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile),
|
||||
enabled = isDeviceOwner(dpm)||(VERSION.SDK_INT>=30&&isProfileOwner(dpm)&&dpm.isOrganizationOwnedDeviceWithManagedProfile),
|
||||
modifier = Modifier.focusable().fillMaxWidth()
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {myDpm.setTime(myComponent,inputTime.toLong())},
|
||||
onClick = {dpm.setTime(receiver,inputTime.toLong())},
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
enabled = inputTime!=""&&(isDeviceOwner(myDpm)||(VERSION.SDK_INT>=30&&isProfileOwner(myDpm)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile))
|
||||
enabled = inputTime!=""&&(isDeviceOwner(dpm)||(VERSION.SDK_INT>=30&&isProfileOwner(dpm)&&dpm.isOrganizationOwnedDeviceWithManagedProfile))
|
||||
) {
|
||||
Text("应用")
|
||||
}
|
||||
@@ -351,11 +351,11 @@ private fun EditTime(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun PermissionPolicy(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
var selectedPolicy by remember{mutableIntStateOf(myDpm.getPermissionPolicy(myComponent))}
|
||||
var selectedPolicy by remember{mutableIntStateOf(dpm.getPermissionPolicy(receiver))}
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.permission_policy), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
@@ -365,8 +365,8 @@ private fun PermissionPolicy(){
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.setPermissionPolicy(myComponent,selectedPolicy)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setPermissionPolicy(receiver,selectedPolicy)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -378,25 +378,25 @@ private fun PermissionPolicy(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun MTEPolicy(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.mte_policy), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
var selectedMtePolicy by remember{mutableIntStateOf(myDpm.mtePolicy)}
|
||||
var selectedMtePolicy by remember{mutableIntStateOf(dpm.mtePolicy)}
|
||||
RadioButtonItem(stringResource(R.string.decide_by_user), {selectedMtePolicy==MTE_NOT_CONTROLLED_BY_POLICY}, {selectedMtePolicy= MTE_NOT_CONTROLLED_BY_POLICY})
|
||||
RadioButtonItem(stringResource(R.string.enabled), {selectedMtePolicy==MTE_ENABLED}, {selectedMtePolicy=MTE_ENABLED})
|
||||
RadioButtonItem(stringResource(R.string.disabled), {selectedMtePolicy==MTE_DISABLED}, {selectedMtePolicy=MTE_DISABLED})
|
||||
Button(
|
||||
onClick = {
|
||||
try {
|
||||
myDpm.mtePolicy = selectedMtePolicy
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.mtePolicy = selectedMtePolicy
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}catch(e:java.lang.UnsupportedOperationException){
|
||||
Toast.makeText(myContext, R.string.unsupported, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.unsupported, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
selectedMtePolicy = myDpm.mtePolicy
|
||||
selectedMtePolicy = dpm.mtePolicy
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -411,10 +411,10 @@ private fun MTEPolicy(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun NearbyStreamingPolicy(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
var appPolicy by remember{mutableIntStateOf(myDpm.nearbyAppStreamingPolicy)}
|
||||
var appPolicy by remember{mutableIntStateOf(dpm.nearbyAppStreamingPolicy)}
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.nearby_app_streaming), style = typography.titleLarge)
|
||||
Spacer(Modifier.padding(vertical = 3.dp))
|
||||
@@ -425,14 +425,14 @@ private fun NearbyStreamingPolicy(){
|
||||
Spacer(Modifier.padding(vertical = 3.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.nearbyAppStreamingPolicy = appPolicy
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.nearbyAppStreamingPolicy = appPolicy
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text("应用")
|
||||
}
|
||||
var notificationPolicy by remember{mutableIntStateOf(myDpm.nearbyNotificationStreamingPolicy)}
|
||||
var notificationPolicy by remember{mutableIntStateOf(dpm.nearbyNotificationStreamingPolicy)}
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.nearby_notification_streaming), style = typography.titleLarge)
|
||||
Spacer(Modifier.padding(vertical = 3.dp))
|
||||
@@ -443,8 +443,8 @@ private fun NearbyStreamingPolicy(){
|
||||
Spacer(Modifier.padding(vertical = 3.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.nearbyNotificationStreamingPolicy = notificationPolicy
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.nearbyNotificationStreamingPolicy = notificationPolicy
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -457,9 +457,9 @@ private fun NearbyStreamingPolicy(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun LockTaskFeatures(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
val lockTaskPolicyList = mutableListOf(
|
||||
@@ -482,7 +482,7 @@ private fun LockTaskFeatures(){
|
||||
var inited by remember{mutableStateOf(false)}
|
||||
var custom by remember{mutableStateOf(false)}
|
||||
val refreshFeature = {
|
||||
var calculate = myDpm.getLockTaskFeatures(myComponent)
|
||||
var calculate = dpm.getLockTaskFeatures(receiver)
|
||||
if(calculate!=0){
|
||||
if(VERSION.SDK_INT>=30&&calculate-lockTaskPolicyList[7]>=0){blockAct=true;calculate-=lockTaskPolicyList[7]}
|
||||
if(calculate-lockTaskPolicyList[6]>=0){keyGuard=true;calculate-=lockTaskPolicyList[6]}
|
||||
@@ -498,7 +498,7 @@ private fun LockTaskFeatures(){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.lock_task_feature), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if(!inited){ refreshFeature();custom=myDpm.getLockTaskFeatures(myComponent)!=0;inited=true }
|
||||
if(!inited){ refreshFeature();custom=dpm.getLockTaskFeatures(receiver)!=0;inited=true }
|
||||
RadioButtonItem(stringResource(R.string.disable_all),{!custom},{custom=false})
|
||||
RadioButtonItem(stringResource(R.string.custom),{custom},{custom=true})
|
||||
AnimatedVisibility(custom) {
|
||||
@@ -525,15 +525,15 @@ private fun LockTaskFeatures(){
|
||||
if(notifications){result+=lockTaskPolicyList[2]}
|
||||
if(sysInfo){result+=lockTaskPolicyList[1]}
|
||||
}
|
||||
myDpm.setLockTaskFeatures(myComponent,result)
|
||||
dpm.setLockTaskFeatures(receiver,result)
|
||||
refreshFeature()
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
val whitelist = myDpm.getLockTaskPackages(myComponent).toMutableList()
|
||||
val whitelist = dpm.getLockTaskPackages(receiver).toMutableList()
|
||||
var listText by remember{mutableStateOf("")}
|
||||
var inputPkg by remember{mutableStateOf("")}
|
||||
val refreshWhitelist = {
|
||||
@@ -559,8 +559,8 @@ private fun LockTaskFeatures(){
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
whitelist.add(inputPkg)
|
||||
myDpm.setLockTaskPackages(myComponent,whitelist.toTypedArray())
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setLockTaskPackages(receiver,whitelist.toTypedArray())
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
refreshWhitelist()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.49F)
|
||||
@@ -572,10 +572,10 @@ private fun LockTaskFeatures(){
|
||||
focusMgr.clearFocus()
|
||||
if(inputPkg in whitelist){
|
||||
whitelist.remove(inputPkg)
|
||||
myDpm.setLockTaskPackages(myComponent,whitelist.toTypedArray())
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setLockTaskPackages(receiver,whitelist.toTypedArray())
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}else{
|
||||
Toast.makeText(myContext, R.string.not_exist, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.not_exist, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
refreshWhitelist()
|
||||
},
|
||||
@@ -590,16 +590,16 @@ private fun LockTaskFeatures(){
|
||||
|
||||
@Composable
|
||||
private fun CaCert(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
var exist by remember{mutableStateOf(false)}
|
||||
var uriPath by remember{mutableStateOf("")}
|
||||
var caCertByteArray = byteArrayOf()
|
||||
val refresh = {
|
||||
if(uriPath!=fileUri?.path){
|
||||
if(caCertByteArray.isEmpty()){
|
||||
uriToStream(myContext, fileUri){
|
||||
uriToStream(context, fileUri){
|
||||
val array = it.readBytes()
|
||||
caCertByteArray = if(array.size<10000){
|
||||
array
|
||||
@@ -607,7 +607,7 @@ private fun CaCert(){
|
||||
byteArrayOf()
|
||||
}
|
||||
}
|
||||
exist = myDpm.hasCaCertInstalled(myComponent, caCertByteArray)
|
||||
exist = dpm.hasCaCertInstalled(receiver, caCertByteArray)
|
||||
}
|
||||
uriPath = fileUri?.path?:""
|
||||
}
|
||||
@@ -640,8 +640,8 @@ private fun CaCert(){
|
||||
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween){
|
||||
Button(
|
||||
onClick = {
|
||||
val result = myDpm.installCaCert(myComponent, caCertByteArray)
|
||||
Toast.makeText(myContext, if(result){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
val result = dpm.installCaCert(receiver, caCertByteArray)
|
||||
Toast.makeText(context, if(result){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
refresh()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.49F)
|
||||
@@ -651,10 +651,10 @@ private fun CaCert(){
|
||||
Button(
|
||||
onClick = {
|
||||
if(exist){
|
||||
myDpm.uninstallCaCert(myComponent, caCertByteArray)
|
||||
exist = myDpm.hasCaCertInstalled(myComponent, caCertByteArray)
|
||||
Toast.makeText(myContext, if(exist){R.string.fail}else{R.string.success}, Toast.LENGTH_SHORT).show()
|
||||
}else{ Toast.makeText(myContext, R.string.not_exist, Toast.LENGTH_SHORT).show() }
|
||||
dpm.uninstallCaCert(receiver, caCertByteArray)
|
||||
exist = dpm.hasCaCertInstalled(receiver, caCertByteArray)
|
||||
Toast.makeText(context, if(exist){R.string.fail}else{R.string.success}, Toast.LENGTH_SHORT).show()
|
||||
}else{ Toast.makeText(context, R.string.not_exist, Toast.LENGTH_SHORT).show() }
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(0.96F)
|
||||
) {
|
||||
@@ -664,8 +664,8 @@ private fun CaCert(){
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.uninstallAllUserCaCerts(myComponent)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.uninstallAllUserCaCerts(receiver)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
@@ -677,24 +677,24 @@ private fun CaCert(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun SecurityLogs(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
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)})
|
||||
SwitchItem(R.string.enable,"",null,{dpm.isSecurityLoggingEnabled(receiver)},{dpm.setSecurityLoggingEnabled(receiver,it)})
|
||||
Button(
|
||||
onClick = {
|
||||
val log = myDpm.retrieveSecurityLogs(myComponent)
|
||||
val log = dpm.retrieveSecurityLogs(receiver)
|
||||
if(log!=null){
|
||||
for(i in log){ Log.d("SecureLog",i.toString()) }
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}else{
|
||||
Log.d("SecureLog",myContext.getString(R.string.none))
|
||||
Toast.makeText(myContext, R.string.no_logs, Toast.LENGTH_SHORT).show()
|
||||
Log.d("SecureLog",context.getString(R.string.none))
|
||||
Toast.makeText(context, R.string.no_logs, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -703,13 +703,13 @@ private fun SecurityLogs(){
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
val log = myDpm.retrievePreRebootSecurityLogs(myComponent)
|
||||
val log = dpm.retrievePreRebootSecurityLogs(receiver)
|
||||
if(log!=null){
|
||||
for(i in log){ Log.d("SecureLog",i.toString()) }
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}else{
|
||||
Log.d("SecureLog",myContext.getString(R.string.none))
|
||||
Toast.makeText(myContext, R.string.no_logs, Toast.LENGTH_SHORT).show()
|
||||
Log.d("SecureLog",context.getString(R.string.none))
|
||||
Toast.makeText(context, R.string.no_logs, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -721,10 +721,10 @@ private fun SecurityLogs(){
|
||||
|
||||
@Composable
|
||||
private fun WipeData(){
|
||||
val myContext = LocalContext.current
|
||||
val userManager = myContext.getSystemService(Context.USER_SERVICE) as UserManager
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
var flag by remember{ mutableIntStateOf(0) }
|
||||
@@ -738,7 +738,7 @@ private fun WipeData(){
|
||||
Text(text = stringResource(R.string.wipe_data),style = typography.headlineLarge,modifier = Modifier.padding(6.dp),color = colorScheme.error)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
CheckBoxItem(stringResource(R.string.wipe_external_storage),{externalStorage},{externalStorage=!externalStorage;confirmed=false})
|
||||
if(VERSION.SDK_INT>=22&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=22&&isDeviceOwner(dpm)){
|
||||
CheckBoxItem(stringResource(R.string.wipe_reset_protection_data),{protectionData},{protectionData=!protectionData;confirmed=false})
|
||||
}
|
||||
if(VERSION.SDK_INT>=28){ CheckBoxItem(stringResource(R.string.wipe_euicc),{euicc},{euicc=!euicc;confirmed=false}) }
|
||||
@@ -767,7 +767,7 @@ private fun WipeData(){
|
||||
containerColor = if(confirmed){ colorScheme.primary }else{ colorScheme.error },
|
||||
contentColor = if(confirmed){ colorScheme.onPrimary }else{ colorScheme.onError }
|
||||
),
|
||||
enabled = myDpm.isAdminActive(myComponent),
|
||||
enabled = dpm.isAdminActive(receiver),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(text = stringResource(if(confirmed){ R.string.cancel }else{ R.string.confirm }))
|
||||
@@ -775,9 +775,9 @@ private fun WipeData(){
|
||||
Button(
|
||||
onClick = {
|
||||
if(VERSION.SDK_INT>=28&&reason!=""){
|
||||
myDpm.wipeData(flag,reason)
|
||||
dpm.wipeData(flag,reason)
|
||||
}else{
|
||||
myDpm.wipeData(flag)
|
||||
dpm.wipeData(flag)
|
||||
}
|
||||
},
|
||||
colors = ButtonDefaults.buttonColors(containerColor = colorScheme.error, contentColor = colorScheme.onError),
|
||||
@@ -786,9 +786,9 @@ private fun WipeData(){
|
||||
) {
|
||||
Text("WipeData")
|
||||
}
|
||||
if (VERSION.SDK_INT >= 34&&(isDeviceOwner(myDpm)||(isProfileOwner(myDpm)&&myDpm.isOrganizationOwnedDeviceWithManagedProfile))) {
|
||||
if (VERSION.SDK_INT >= 34&&(isDeviceOwner(dpm)||(isProfileOwner(dpm)&&dpm.isOrganizationOwnedDeviceWithManagedProfile))) {
|
||||
Button(
|
||||
onClick = {myDpm.wipeDevice(flag)},
|
||||
onClick = {dpm.wipeDevice(flag)},
|
||||
colors = ButtonDefaults.buttonColors(containerColor = colorScheme.error, contentColor = colorScheme.onError),
|
||||
enabled = confirmed,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -797,7 +797,7 @@ private fun WipeData(){
|
||||
}
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if(VERSION.SDK_INT>=24&&isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent)){
|
||||
if(VERSION.SDK_INT>=24&&isProfileOwner(dpm)&&dpm.isManagedProfile(receiver)){
|
||||
Information{Text(text = stringResource(R.string.will_delete_work_profile))}
|
||||
}
|
||||
if(VERSION.SDK_INT>=34&&Binder.getCallingUid()/100000==0){
|
||||
@@ -809,18 +809,18 @@ private fun WipeData(){
|
||||
|
||||
@Composable
|
||||
private fun SysUpdatePolicy(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
val sharedPref = myContext.getSharedPreferences("data", Context.MODE_PRIVATE)
|
||||
val sharedPref = context.getSharedPreferences("data", Context.MODE_PRIVATE)
|
||||
val isWear = sharedPref.getBoolean("isWear",false)
|
||||
val bodyTextStyle = if(isWear){ typography.bodyMedium}else{typography.bodyLarge}
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
if(VERSION.SDK_INT>=23){
|
||||
Column {
|
||||
var selectedPolicy by remember{ mutableStateOf(myDpm.systemUpdatePolicy?.policyType) }
|
||||
var selectedPolicy by remember{ mutableStateOf(dpm.systemUpdatePolicy?.policyType) }
|
||||
Text(text = stringResource(R.string.system_update_policy), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
RadioButtonItem(stringResource(R.string.system_update_policy_automatic),{selectedPolicy==TYPE_INSTALL_AUTOMATIC},{selectedPolicy= TYPE_INSTALL_AUTOMATIC})
|
||||
@@ -860,10 +860,10 @@ private fun SysUpdatePolicy(){
|
||||
TYPE_POSTPONE-> SystemUpdatePolicy.createPostponeInstallPolicy()
|
||||
else->null
|
||||
}
|
||||
myDpm.setSystemUpdatePolicy(myComponent,policy)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setSystemUpdatePolicy(receiver,policy)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
@@ -872,7 +872,7 @@ private fun SysUpdatePolicy(){
|
||||
}
|
||||
if(VERSION.SDK_INT>=26){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
val sysUpdateInfo = myDpm.getPendingSystemUpdate(myComponent)
|
||||
val sysUpdateInfo = dpm.getPendingSystemUpdate(receiver)
|
||||
Column {
|
||||
if(sysUpdateInfo!=null){
|
||||
Text(text = stringResource(R.string.update_received_time, Date(sysUpdateInfo.receivedTime)), style = bodyTextStyle)
|
||||
@@ -900,14 +900,14 @@ private fun SysUpdatePolicy(){
|
||||
getOtaPackage.launch(getUri)
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm)
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm)
|
||||
) {
|
||||
Text("选择OTA包")
|
||||
}
|
||||
Button(
|
||||
onClick = {resultUri = otaUri},
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm)
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm)
|
||||
) {
|
||||
Text("查看OTA包详情")
|
||||
}
|
||||
@@ -917,9 +917,9 @@ private fun SysUpdatePolicy(){
|
||||
onClick = {
|
||||
val sysUpdateExecutor = Executors.newCachedThreadPool()
|
||||
val sysUpdateCallback:InstallSystemUpdateCallback = InstallSystemUpdateCallback
|
||||
myDpm.installSystemUpdate(myComponent,resultUri,sysUpdateExecutor,sysUpdateCallback)
|
||||
dpm.installSystemUpdate(receiver,resultUri,sysUpdateExecutor,sysUpdateCallback)
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm)
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm)
|
||||
){
|
||||
Text("安装")
|
||||
}
|
||||
|
||||
@@ -99,23 +99,23 @@ fun UserManage(navCtrl:NavHostController) {
|
||||
|
||||
@Composable
|
||||
private fun Home(navCtrl: NavHostController,scrollState: ScrollState){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState)){
|
||||
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)){
|
||||
if(VERSION.SDK_INT>=24&&isDeviceOwner(dpm)){
|
||||
SubPageItem(R.string.create_user,"",R.drawable.person_add_fill0){navCtrl.navigate("CreateUser")}
|
||||
}
|
||||
SubPageItem(R.string.edit_username,"",R.drawable.edit_fill0){navCtrl.navigate("EditUsername")}
|
||||
if(VERSION.SDK_INT>=23&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=23&&(isDeviceOwner(dpm)||isProfileOwner(dpm))){
|
||||
SubPageItem(R.string.change_user_icon,"",R.drawable.account_circle_fill0){navCtrl.navigate("ChangeUserIcon")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=28&&isDeviceOwner(myDpm)){
|
||||
if(VERSION.SDK_INT>=28&&isDeviceOwner(dpm)){
|
||||
SubPageItem(R.string.user_session_msg,"",R.drawable.notifications_fill0){navCtrl.navigate("UserSessionMessage")}
|
||||
}
|
||||
if(VERSION.SDK_INT>=26&&(isDeviceOwner(myDpm)||isProfileOwner(myDpm))){
|
||||
if(VERSION.SDK_INT>=26&&(isDeviceOwner(dpm)||isProfileOwner(dpm))){
|
||||
SubPageItem(R.string.affiliation_id,"",R.drawable.id_card_fill0){navCtrl.navigate("AffiliationID")}
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
@@ -127,28 +127,28 @@ private fun Home(navCtrl: NavHostController,scrollState: ScrollState){
|
||||
|
||||
@Composable
|
||||
private fun CurrentUserInfo(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext, Receiver::class.java)
|
||||
val userManager = myContext.getSystemService(Context.USER_SERVICE) as UserManager
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context, Receiver::class.java)
|
||||
val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.user_info), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Text(stringResource(R.string.is_user_unlocked, UserManagerCompat.isUserUnlocked(myContext)))
|
||||
Text(stringResource(R.string.is_user_unlocked, UserManagerCompat.isUserUnlocked(context)))
|
||||
if(VERSION.SDK_INT>=24){ Text(stringResource(R.string.is_support_multi_user, UserManager.supportsMultipleUsers())) }
|
||||
if(VERSION.SDK_INT>=23){ Text(text = stringResource(R.string.is_system_user, userManager.isSystemUser)) }
|
||||
if(VERSION.SDK_INT>=34){ Text(text = stringResource(R.string.is_admin_user, userManager.isAdminUser)) }
|
||||
if(VERSION.SDK_INT>=31){ Text(text = stringResource(R.string.is_headless_system_user, UserManager.isHeadlessSystemUserMode())) }
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if (VERSION.SDK_INT >= 28) {
|
||||
val logoutable = myDpm.isLogoutEnabled
|
||||
val logoutable = dpm.isLogoutEnabled
|
||||
Text(text = stringResource(R.string.user_can_logout, logoutable))
|
||||
if(isDeviceOwner(myDpm)|| isProfileOwner(myDpm)){
|
||||
val ephemeralUser = myDpm.isEphemeralUser(myComponent)
|
||||
if(isDeviceOwner(dpm)|| isProfileOwner(dpm)){
|
||||
val ephemeralUser = dpm.isEphemeralUser(receiver)
|
||||
Text(text = stringResource(R.string.is_ephemeral_user, ephemeralUser))
|
||||
}
|
||||
Text(text = stringResource(R.string.is_affiliated_user, myDpm.isAffiliatedUser))
|
||||
Text(text = stringResource(R.string.is_affiliated_user, dpm.isAffiliatedUser))
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Text(text = stringResource(R.string.user_id_is, Binder.getCallingUid()/100000))
|
||||
@@ -158,10 +158,10 @@ private fun CurrentUserInfo(){
|
||||
|
||||
@Composable
|
||||
private fun UserOperation(){
|
||||
val myContext = LocalContext.current
|
||||
val userManager = myContext.getSystemService(Context.USER_SERVICE) as UserManager
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
@@ -184,7 +184,7 @@ private fun UserOperation(){
|
||||
}
|
||||
},
|
||||
label = {Text(if(useUid){"UID"}else{ stringResource(R.string.serial_number) })},
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.focusable().fillMaxWidth(),
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()})
|
||||
@@ -195,13 +195,13 @@ private fun UserOperation(){
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
if(VERSION.SDK_INT>28){
|
||||
if(isProfileOwner(myDpm)&&myDpm.isAffiliatedUser){
|
||||
if(isProfileOwner(dpm)&&dpm.isAffiliatedUser){
|
||||
Button(
|
||||
onClick = {
|
||||
val result = myDpm.logoutUser(myComponent)
|
||||
Toast.makeText(myContext, userOperationResultCode(result,myContext), Toast.LENGTH_SHORT).show()
|
||||
val result = dpm.logoutUser(receiver)
|
||||
Toast.makeText(context, userOperationResultCode(result,context), Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isProfileOwner(myDpm),
|
||||
enabled = isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.logout_current_user))
|
||||
@@ -212,10 +212,10 @@ private fun UserOperation(){
|
||||
Button(
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
val result = myDpm.startUserInBackground(myComponent,userHandleById)
|
||||
Toast.makeText(myContext, userOperationResultCode(result,myContext), Toast.LENGTH_SHORT).show()
|
||||
val result = dpm.startUserInBackground(receiver,userHandleById)
|
||||
Toast.makeText(context, userOperationResultCode(result,context), Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
){
|
||||
Text(stringResource(R.string.start_in_background))
|
||||
@@ -224,9 +224,9 @@ private fun UserOperation(){
|
||||
Button(
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
Toast.makeText(myContext, if(myDpm.switchUser(myComponent,userHandleById)) { R.string.success }else{ R.string.fail }, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, if(dpm.switchUser(receiver,userHandleById)) { R.string.success }else{ R.string.fail }, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.user_operation_switch))
|
||||
@@ -236,13 +236,13 @@ private fun UserOperation(){
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
try{
|
||||
val result = myDpm.stopUser(myComponent,userHandleById)
|
||||
Toast.makeText(myContext, userOperationResultCode(result,myContext), Toast.LENGTH_SHORT).show()
|
||||
val result = dpm.stopUser(receiver,userHandleById)
|
||||
Toast.makeText(context, userOperationResultCode(result,context), Toast.LENGTH_SHORT).show()
|
||||
}catch(e:IllegalArgumentException){
|
||||
Toast.makeText(myContext, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.user_operation_stop))
|
||||
@@ -251,14 +251,14 @@ private fun UserOperation(){
|
||||
Button(
|
||||
onClick = {
|
||||
focusMgr.clearFocus()
|
||||
if(myDpm.removeUser(myComponent,userHandleById)){
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
if(dpm.removeUser(receiver,userHandleById)){
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
idInput=""
|
||||
}else{
|
||||
Toast.makeText(myContext, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.user_operation_remove))
|
||||
@@ -270,10 +270,10 @@ private fun UserOperation(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun CreateUser(){
|
||||
val myContext = LocalContext.current
|
||||
val userManager = myContext.getSystemService(Context.USER_SERVICE) as UserManager
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var userName by remember{ mutableStateOf("") }
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
@@ -300,11 +300,11 @@ private fun CreateUser(){
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
newUserHandle=myDpm.createAndManageUser(myComponent,userName,myComponent,null,selectedFlag)
|
||||
newUserHandle=dpm.createAndManageUser(receiver,userName,receiver,null,selectedFlag)
|
||||
focusMgr.clearFocus()
|
||||
Toast.makeText(myContext, if(newUserHandle!=null){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, if(newUserHandle!=null){R.string.success}else{R.string.fail}, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.create))
|
||||
@@ -318,14 +318,14 @@ private fun CreateUser(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun AffiliationID(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var input by remember{mutableStateOf("")}
|
||||
var list by remember{mutableStateOf("")}
|
||||
LaunchedEffect(Unit){
|
||||
affiliationID = myDpm.getAffiliationIds(myComponent)
|
||||
affiliationID = dpm.getAffiliationIds(receiver)
|
||||
list = affiliationID.toText()
|
||||
}
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
@@ -366,14 +366,14 @@ private fun AffiliationID(){
|
||||
Button(
|
||||
onClick = {
|
||||
if("" in affiliationID) {
|
||||
Toast.makeText(myContext, R.string.include_empty_string, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.include_empty_string, Toast.LENGTH_SHORT).show()
|
||||
}else if(affiliationID.isEmpty()){
|
||||
Toast.makeText(myContext, R.string.cannot_be_empty, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.cannot_be_empty, Toast.LENGTH_SHORT).show()
|
||||
}else{
|
||||
myDpm.setAffiliationIds(myComponent, affiliationID)
|
||||
affiliationID = myDpm.getAffiliationIds(myComponent)
|
||||
dpm.setAffiliationIds(receiver, affiliationID)
|
||||
affiliationID = dpm.getAffiliationIds(receiver)
|
||||
list = affiliationID.toText()
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -386,9 +386,9 @@ private fun AffiliationID(){
|
||||
|
||||
@Composable
|
||||
private fun Username(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
var inputUsername by remember{mutableStateOf("")}
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
@@ -402,24 +402,24 @@ private fun Username(){
|
||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}),
|
||||
modifier = Modifier.focusable().fillMaxWidth(),
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm)
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm)
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.setProfileName(myComponent,inputUsername)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setProfileName(receiver,inputUsername)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.setProfileName(myComponent,null)
|
||||
dpm.setProfileName(receiver,null)
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.reset))
|
||||
@@ -430,12 +430,12 @@ private fun Username(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun UserSessionMessage(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
val focusMgr = LocalFocusManager.current
|
||||
val getStart = myDpm.getStartUserSessionMessage(myComponent)?:""
|
||||
val getEnd = myDpm.getEndUserSessionMessage(myComponent)?:""
|
||||
val getStart = dpm.getStartUserSessionMessage(receiver)?:""
|
||||
val getEnd = dpm.getEndUserSessionMessage(receiver)?:""
|
||||
var start by remember{mutableStateOf(getStart.toString())}
|
||||
var end by remember{mutableStateOf(getEnd.toString())}
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
@@ -449,7 +449,7 @@ private fun UserSessionMessage(){
|
||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}),
|
||||
modifier = Modifier.focusable().fillMaxWidth(),
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm)
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm)
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 2.dp))
|
||||
OutlinedTextField(
|
||||
@@ -459,27 +459,27 @@ private fun UserSessionMessage(){
|
||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus()}),
|
||||
modifier = Modifier.focusable().fillMaxWidth(),
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm)
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm)
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.setStartUserSessionMessage(myComponent,start)
|
||||
myDpm.setEndUserSessionMessage(myComponent,end)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setStartUserSessionMessage(receiver,start)
|
||||
dpm.setEndUserSessionMessage(receiver,end)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
myDpm.setStartUserSessionMessage(myComponent,null)
|
||||
myDpm.setEndUserSessionMessage(myComponent,null)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setStartUserSessionMessage(receiver,null)
|
||||
dpm.setEndUserSessionMessage(receiver,null)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
enabled = isDeviceOwner(myDpm)||isProfileOwner(myDpm),
|
||||
enabled = isDeviceOwner(dpm)||isProfileOwner(dpm),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.reset))
|
||||
@@ -491,9 +491,9 @@ private fun UserSessionMessage(){
|
||||
@SuppressLint("NewApi")
|
||||
@Composable
|
||||
private fun UserIcon(){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
var getContent by remember{mutableStateOf(false)}
|
||||
var canApply by remember{mutableStateOf(false)}
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
|
||||
@@ -519,10 +519,10 @@ private fun UserIcon(){
|
||||
AnimatedVisibility(canApply) {
|
||||
Button(
|
||||
onClick = {
|
||||
uriToStream(myContext, fileUri){stream ->
|
||||
uriToStream(context, fileUri){stream ->
|
||||
val bitmap = BitmapFactory.decodeStream(stream)
|
||||
myDpm.setUserIcon(myComponent,bitmap)
|
||||
Toast.makeText(myContext, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
dpm.setUserIcon(receiver,bitmap)
|
||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -533,12 +533,12 @@ private fun UserIcon(){
|
||||
}
|
||||
}
|
||||
|
||||
private fun userOperationResultCode(result:Int, myContext: Context): String {
|
||||
private fun userOperationResultCode(result:Int, context: Context): String {
|
||||
return when(result){
|
||||
UserManager.USER_OPERATION_SUCCESS->myContext.getString(R.string.success)
|
||||
UserManager.USER_OPERATION_ERROR_UNKNOWN-> myContext.getString(R.string.unknown_result)
|
||||
UserManager.USER_OPERATION_ERROR_MANAGED_PROFILE-> myContext.getString(R.string.fail_managed_profile)
|
||||
UserManager.USER_OPERATION_ERROR_CURRENT_USER-> myContext.getString(R.string.fail_current_user)
|
||||
UserManager.USER_OPERATION_SUCCESS->context.getString(R.string.success)
|
||||
UserManager.USER_OPERATION_ERROR_UNKNOWN-> context.getString(R.string.unknown_result)
|
||||
UserManager.USER_OPERATION_ERROR_MANAGED_PROFILE-> context.getString(R.string.fail_managed_profile)
|
||||
UserManager.USER_OPERATION_ERROR_CURRENT_USER-> context.getString(R.string.fail_current_user)
|
||||
else->"未知"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,14 +97,14 @@ fun UserRestriction(navCtrl: NavHostController){
|
||||
|
||||
@Composable
|
||||
private fun Home(navCtrl:NavHostController,scrollState: ScrollState){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext, Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context, Receiver::class.java)
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState)){
|
||||
Text(text = stringResource(R.string.user_restrict), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 7.dp, start = 15.dp))
|
||||
Text(text = stringResource(R.string.switch_to_disable_feature), modifier = Modifier.padding(start = 15.dp))
|
||||
if(isProfileOwner(myDpm)){ Text(text = stringResource(R.string.profile_owner_is_restricted), modifier = Modifier.padding(start = 15.dp)) }
|
||||
if(isProfileOwner(myDpm)&&(VERSION.SDK_INT<24||(VERSION.SDK_INT>=24&&myDpm.isManagedProfile(myComponent)))){
|
||||
if(isProfileOwner(dpm)){ Text(text = stringResource(R.string.profile_owner_is_restricted), modifier = Modifier.padding(start = 15.dp)) }
|
||||
if(isProfileOwner(dpm)&&(VERSION.SDK_INT<24||(VERSION.SDK_INT>=24&&dpm.isManagedProfile(receiver)))){
|
||||
Text(text = stringResource(R.string.some_features_invalid_in_work_profile), modifier = Modifier.padding(start = 15.dp))
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 2.dp))
|
||||
@@ -141,9 +141,9 @@ private fun Connectivity(){
|
||||
|
||||
@Composable
|
||||
fun Application(){
|
||||
val myContext = LocalContext.current
|
||||
val context = LocalContext.current
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())){
|
||||
for(applicationItem in RestrictionData.application(myContext)){
|
||||
for(applicationItem in RestrictionData.application(context)){
|
||||
UserRestrictionItem(applicationItem.restriction,applicationItem.name,applicationItem.desc,applicationItem.ico)
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
@@ -172,9 +172,9 @@ private fun Media(){
|
||||
|
||||
@Composable
|
||||
private fun Other(){
|
||||
val myContext = LocalContext.current
|
||||
val context = LocalContext.current
|
||||
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())){
|
||||
for(otherItem in RestrictionData.other(myContext)){
|
||||
for(otherItem in RestrictionData.other(context)){
|
||||
UserRestrictionItem(otherItem.restriction,otherItem.name,otherItem.desc,otherItem.ico)
|
||||
}
|
||||
Spacer(Modifier.padding(vertical = 30.dp))
|
||||
@@ -188,26 +188,26 @@ private fun UserRestrictionItem(
|
||||
restrictionDescription:String,
|
||||
leadIcon:Int
|
||||
){
|
||||
val myContext = LocalContext.current
|
||||
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val myComponent = ComponentName(myContext,Receiver::class.java)
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val receiver = ComponentName(context,Receiver::class.java)
|
||||
SwitchItem(
|
||||
itemName,restrictionDescription,leadIcon,
|
||||
{ if(isDeviceOwner(myDpm)||isProfileOwner(myDpm)){ myDpm.getUserRestrictions(myComponent).getBoolean(restriction) }else{ false } },
|
||||
{ if(isDeviceOwner(dpm)||isProfileOwner(dpm)){ dpm.getUserRestrictions(receiver).getBoolean(restriction) }else{ false } },
|
||||
{
|
||||
try{
|
||||
if(it){
|
||||
myDpm.addUserRestriction(myComponent,restriction)
|
||||
dpm.addUserRestriction(receiver,restriction)
|
||||
}else{
|
||||
myDpm.clearUserRestriction(myComponent,restriction)
|
||||
dpm.clearUserRestriction(receiver,restriction)
|
||||
}
|
||||
}catch(e:SecurityException){
|
||||
if(isProfileOwner(myDpm)){
|
||||
Toast.makeText(myContext, R.string.require_device_owner, Toast.LENGTH_SHORT).show()
|
||||
if(isProfileOwner(dpm)){
|
||||
Toast.makeText(context, R.string.require_device_owner, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
},
|
||||
isDeviceOwner(myDpm)||isProfileOwner(myDpm)
|
||||
isDeviceOwner(dpm)||isProfileOwner(dpm)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -252,13 +252,13 @@ private object RestrictionData{
|
||||
if(VERSION.SDK_INT>=28){list += Restriction(UserManager.DISALLOW_PRINTING,R.string.printing,"",R.drawable.print_fill0)}
|
||||
return list
|
||||
}
|
||||
fun application(myContext: Context):List<Restriction>{
|
||||
fun application(context: Context):List<Restriction>{
|
||||
val list:MutableList<Restriction> = mutableListOf()
|
||||
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, myContext.getString(R.string.apps_control_desc),R.drawable.apps_fill0)
|
||||
list += Restriction(UserManager.DISALLOW_APPS_CONTROL,R.string.apps_ctrl, context.getString(R.string.apps_control_desc),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
|
||||
}
|
||||
@@ -290,7 +290,7 @@ private object RestrictionData{
|
||||
}
|
||||
return list
|
||||
}
|
||||
fun other(myContext: Context):List<Restriction>{
|
||||
fun other(context: Context):List<Restriction>{
|
||||
val list:MutableList<Restriction> = mutableListOf()
|
||||
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)
|
||||
@@ -298,10 +298,10 @@ private object RestrictionData{
|
||||
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, myContext.getString(R.string.create_windows_desc),R.drawable.web_asset)
|
||||
list += Restriction(UserManager.DISALLOW_CREATE_WINDOWS,R.string.create_windows, context.getString(R.string.create_windows_desc),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`, myContext.getString(R.string.fun_desc),R.drawable.stadia_controller_fill0) }
|
||||
if(VERSION.SDK_INT>=23){ list += Restriction(UserManager.DISALLOW_FUN,R.string.`fun`, context.getString(R.string.fun_desc),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)
|
||||
|
||||
Reference in New Issue
Block a user