Add SET_PERMISSION APIs (#159)

This commit is contained in:
BinTianqi
2025-08-24 19:34:17 +08:00
parent 38ef06e12a
commit ed5b23edf6
6 changed files with 55 additions and 23 deletions

View File

@@ -1,5 +1,6 @@
package com.bintianqi.owndroid
import android.app.admin.DevicePolicyManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
@@ -18,8 +19,10 @@ class ApiReceiver: BroadcastReceiver() {
val dpm = context.getDPM()
val receiver = context.getReceiver()
val app = intent.getStringExtra("package")
val permission = intent.getStringExtra("permission")
val restriction = intent.getStringExtra("restriction")
if(!app.isNullOrEmpty()) log += "\npackage: $app"
if (!app.isNullOrEmpty()) log += "\npackage: $app"
if (!permission.isNullOrEmpty()) log += "\npermission: $permission"
try {
@SuppressWarnings("NewApi")
val ok = when(intent.action?.removePrefix("com.bintianqi.owndroid.action.")) {
@@ -29,6 +32,24 @@ class ApiReceiver: BroadcastReceiver() {
"UNSUSPEND" -> dpm.setPackagesSuspended(receiver, arrayOf(app), false).isEmpty()
"ADD_USER_RESTRICTION" -> { dpm.addUserRestriction(receiver, restriction); true }
"CLEAR_USER_RESTRICTION" -> { dpm.clearUserRestriction(receiver, restriction); true }
"SET_PERMISSION_DEFAULT" -> {
dpm.setPermissionGrantState(
receiver, app!!, permission!!,
DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT
)
}
"SET_PERMISSION_GRANTED" -> {
dpm.setPermissionGrantState(
receiver, app!!, permission!!,
DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED
)
}
"SET_PERMISSION_DENIED" -> {
dpm.setPermissionGrantState(
receiver, app!!, permission!!,
DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED
)
}
"LOCK" -> { dpm.lockNow(); true }
"REBOOT" -> { dpm.reboot(receiver); true }
else -> {

View File

@@ -323,7 +323,8 @@ fun ApiSettings(onNavigateUp: () -> Unit) {
onClick = {
sp.apiKey = key
context.showOperationResultToast(true)
}
},
enabled = key.isNotEmpty()
) {
Text(stringResource(R.string.apply))
}

View File

@@ -536,7 +536,8 @@ fun PermissionsManagerScreen(onNavigateUp: () -> Unit, param: PermissionsManager
}
if(selectedPermission != null) {
fun changeState(state: Int) {
dpm.setPermissionGrantState(receiver, packageName, selectedPermission!!.permission, state)
val result = dpm.setPermissionGrantState(receiver, packageName, selectedPermission!!.permission, state)
if (!result) context.showOperationResultToast(false)
statusMap[selectedPermission!!.permission] = dpm.getPermissionGrantState(receiver, packageName, selectedPermission!!.permission)
selectedPermission = null
}