mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 19:15:58 +00:00
simplify code of app manage
This commit is contained in:
@@ -2,13 +2,20 @@ package com.binbin.androidowner
|
||||
|
||||
import android.app.admin.DevicePolicyManager
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager.NameNotFoundException
|
||||
import android.os.Build.VERSION
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Switch
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextField
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -18,10 +25,13 @@ import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
|
||||
@Composable
|
||||
fun ApplicationManage(myDpm:DevicePolicyManager, myComponent:ComponentName){
|
||||
fun ApplicationManage(myDpm:DevicePolicyManager, myComponent:ComponentName,myContext:Context){
|
||||
var pkgName by remember { mutableStateOf("") }
|
||||
Column(
|
||||
modifier = Modifier
|
||||
@@ -29,59 +39,83 @@ fun ApplicationManage(myDpm:DevicePolicyManager, myComponent:ComponentName){
|
||||
.padding(8.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
var isAppHidden by remember{ mutableStateOf(false) }
|
||||
var isAppSuspended by remember{ mutableStateOf(false) }
|
||||
var isAppUninstallBlock by remember{ mutableStateOf(false) }
|
||||
var suspendedReply = ""
|
||||
isAppHidden = try {
|
||||
myDpm.isApplicationHidden(myComponent,pkgName)
|
||||
}catch (e:SecurityException){
|
||||
false
|
||||
}
|
||||
isAppUninstallBlock = try {
|
||||
myDpm.isUninstallBlocked(myComponent,pkgName)
|
||||
}catch (e:SecurityException){
|
||||
false
|
||||
}
|
||||
try{
|
||||
isAppSuspended = myDpm.isPackageSuspended(myComponent,pkgName)
|
||||
}catch(e:NameNotFoundException){
|
||||
suspendedReply = "应用不存在!"
|
||||
isAppSuspended = false
|
||||
}catch (e:SecurityException){
|
||||
suspendedReply = "无权限"
|
||||
isAppSuspended = false
|
||||
}
|
||||
Text("以下功能都需要DeviceOwner权限")
|
||||
TextField(value = pkgName, onValueChange = {pkgName = it}, label = { Text("包名") })
|
||||
Spacer(Modifier.padding(5.dp))
|
||||
Row{
|
||||
Button(onClick = { myDpm.setApplicationHidden(myComponent,pkgName,true); isAppHidden = myDpm.isApplicationHidden(myComponent,pkgName) },modifier = Modifier.padding(end = 8.dp)) {
|
||||
Text("隐藏")
|
||||
}
|
||||
Button(onClick = { myDpm.setApplicationHidden(myComponent,pkgName,false); isAppHidden = myDpm.isApplicationHidden(myComponent,pkgName) }) {
|
||||
Text("显示")
|
||||
TextField(
|
||||
value = pkgName,
|
||||
onValueChange = {
|
||||
pkgName = it
|
||||
},
|
||||
label = { Text("包名") }
|
||||
)
|
||||
val isSuspended = {
|
||||
try{
|
||||
myDpm.isPackageSuspended(myComponent,pkgName)
|
||||
}catch(e:NameNotFoundException){
|
||||
false
|
||||
}
|
||||
}
|
||||
Text("应用隐藏:$isAppHidden ${if(isAppHidden){"(这个应用也许没有被安装)"}else{""}}")
|
||||
Row{
|
||||
Button(onClick = {myDpm.setPackagesSuspended(myComponent, arrayOf(pkgName),true); isAppSuspended = myDpm.isPackageSuspended(myComponent,pkgName)},modifier = Modifier.padding(end = 8.dp)) {
|
||||
Text("停用")
|
||||
}
|
||||
Button(onClick = {myDpm.setPackagesSuspended(myComponent, arrayOf(pkgName),false); isAppSuspended = myDpm.isPackageSuspended(myComponent,pkgName)}) {
|
||||
Text("启用")
|
||||
}
|
||||
}
|
||||
Text("应用停用:$isAppSuspended $suspendedReply")
|
||||
Text("阻止卸载功能有可能出问题")
|
||||
AppManageItem(R.string.hide,R.string.isapphidden_desc,myDpm, {myDpm.isApplicationHidden(myComponent,pkgName)},
|
||||
{b -> myDpm.setApplicationHidden(myComponent,pkgName,b)})
|
||||
AppManageItem(R.string.suspend,R.string.place_holder,myDpm, isSuspended,
|
||||
{b -> myDpm.setPackagesSuspended(myComponent, arrayOf(pkgName) ,b)})
|
||||
/*AppManageItem(R.string.block_unins,R.string.sometimes_not_avaliable,myDpm, {myDpm.isUninstallBlocked(myComponent,pkgName)},
|
||||
{b -> myDpm.setUninstallBlocked(myComponent,pkgName,b)})*/
|
||||
Text("因为无法获取某个应用是否防卸载,无法使用开关控制防卸载")
|
||||
Row {
|
||||
Button(onClick = { myDpm.setUninstallBlocked(myComponent, pkgName, true); isAppUninstallBlock = myDpm.isUninstallBlocked(myComponent,pkgName) },modifier = Modifier.padding(end = 8.dp)) {
|
||||
Text("阻止卸载")
|
||||
Button(onClick = {myDpm.setUninstallBlocked(myComponent,pkgName,false)}) {
|
||||
Text("取消防卸载")
|
||||
}
|
||||
Button(onClick = { myDpm.setUninstallBlocked(myComponent, pkgName, false); isAppUninstallBlock = myDpm.isUninstallBlocked(myComponent,pkgName)}) {
|
||||
Text("允许卸载")
|
||||
Spacer(Modifier.padding(horizontal = 2.dp))
|
||||
Button(onClick = {myDpm.setUninstallBlocked(myComponent,pkgName,true)}) {
|
||||
Text("防卸载")
|
||||
}
|
||||
}
|
||||
Text("应用防卸载:$isAppUninstallBlock ${if(!isAppUninstallBlock){"(这个应用也许没有被安装)"}else{""}}")
|
||||
if(VERSION.SDK_INT>=30){
|
||||
AppManageItem(R.string.user_ctrl_disabled,R.string.user_ctrl_disabled_desc,myDpm, {pkgName in myDpm.getUserControlDisabledPackages(myComponent)},
|
||||
{b->myDpm.setUserControlDisabledPackages(myComponent, mutableListOf(if(b){pkgName}else{null}))})
|
||||
}
|
||||
Spacer(Modifier.padding(5.dp))
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun AppManageItem(
|
||||
itemName:Int,
|
||||
itemDesc:Int,
|
||||
myDpm: DevicePolicyManager,
|
||||
getMethod:()->Boolean,
|
||||
setMethod:(b:Boolean)->Unit
|
||||
){
|
||||
var isEnabled by remember{ mutableStateOf(false) }
|
||||
if(myDpm.isDeviceOwnerApp("com.binbin.androidowner")){
|
||||
isEnabled = getMethod()
|
||||
}
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(5.dp)
|
||||
.clip(RoundedCornerShape(15))
|
||||
.background(color = MaterialTheme.colorScheme.primaryContainer)
|
||||
.padding(8.dp),
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Column {
|
||||
Text(
|
||||
text = stringResource(itemName),
|
||||
style = MaterialTheme.typography.titleLarge
|
||||
)
|
||||
if(itemDesc!=R.string.place_holder){
|
||||
Text(stringResource(itemDesc))
|
||||
}
|
||||
}
|
||||
Switch(
|
||||
checked = isEnabled,
|
||||
onCheckedChange = {
|
||||
setMethod(!isEnabled)
|
||||
isEnabled = getMethod()
|
||||
},
|
||||
enabled = myDpm.isDeviceOwnerApp("com.binbin.androidowner")
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user