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

@@ -85,16 +85,19 @@ Samsung restricts Android's multiple users feature. There is currently no soluti
## API
| ID | Extras | Minimum Android version |
|------------------------|---------------|:-----------------------:|
| HIDE | `package` | |
| UNHIDE | `package` | |
| SUSPEND | `package` | 7 |
| UNSUSPEND | `package` | 7 |
| ADD_USER_RESTRICTION | `restriction` | |
| CLEAR_USER_RESTRICTION | `restriction` | |
| LOCK | | |
| REBOOT | | 7 |
| ID | Extras | Minimum Android version |
|--------------------------|------------------------|:-----------------------:|
| `HIDE` | `package` | |
| `UNHIDE` | `package` | |
| `SUSPEND` | `package` | 7 |
| `UNSUSPEND` | `package` | 7 |
| `ADD_USER_RESTRICTION` | `restriction` | |
| `CLEAR_USER_RESTRICTION` | `restriction` | |
| `SET_PERMISSION_DEFAULT` | `package` `permission` | 6 |
| `SET_PERMISSION_GRANTED` | `package` `permission` | 6 |
| `SET_PERMISSION_DENIED` | `package` `permission` | 6 |
| `LOCK` | | |
| `REBOOT` | | 7 |
[Available user restrictions](https://developer.android.com/reference/android/os/UserManager#constants_1)

View File

@@ -1,5 +1,8 @@
[English](Readme-en.md) | [简体中文](Readme.md)
> [!important]
> The Japanese readme need update
# OwnDroid
AndroidのDevice owner特権を使用してデバイスを管理します。

View File

@@ -83,16 +83,19 @@ user limit reached
## API
| ID | Extra | 最小安卓版本 |
|------------------------|---------------|:------:|
| HIDE | `package` | |
| UNHIDE | `package` | |
| SUSPEND | `package` | 7 |
| UNSUSPEND | `package` | 7 |
| ADD_USER_RESTRICTION | `restriction` | |
| CLEAR_USER_RESTRICTION | `restriction` | |
| LOCK | | |
| REBOOT | | 7 |
| ID | Extra | 最小安卓版本 |
|--------------------------|------------------------|:------:|
| `HIDE` | `package` | |
| `UNHIDE` | `package` | |
| `SUSPEND` | `package` | 7 |
| `UNSUSPEND` | `package` | 7 |
| `ADD_USER_RESTRICTION` | `restriction` | |
| `CLEAR_USER_RESTRICTION` | `restriction` | |
| `SET_PERMISSION_DEFAULT` | `package` `permission` | 6 |
| `SET_PERMISSION_GRANTED` | `package` `permission` | 6 |
| `SET_PERMISSION_DENIED` | `package` `permission` | 6 |
| `LOCK` | | |
| `REBOOT` | | 7 |
[可用的用户限制](https://developer.android.google.cn/reference/android/os/UserManager#constants_1)

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
}