diff --git a/Readme-en.md b/Readme-en.md index 4b619a1..730a274 100644 --- a/Readme-en.md +++ b/Readme-en.md @@ -9,6 +9,9 @@ Use Android Device owner privilege to manage your device. [IzzyOnDroid F-Droid Repository](https://apt.izzysoft.de/fdroid/index/apk/com.bintianqi.owndroid) [Releases on GitHub](https://github.com/BinTianqi/OwnDroid/releases) +> [!NOTE] +> ColorOS users should download testkey version from releases on GitHub + ## Features - System @@ -104,21 +107,31 @@ Solution: Use OwnDroid testkey version ## API -| ID | Description | Extras | Minimum Android version | -|:---------:|------------------|---------------------------------------|:-----------------------:| -| HIDE | Hide an app | `package`: package name of target app | | -| UNHIDE | Unhide an app | `package`: package name of target app | | -| SUSPEND | Suspend an app | `package`: package name of target app | 7 | -| UNSUSPEND | Unsuspend an app | `package`: package name of target app | 7 | -| LOCK | Lock screen | | | +| ID | Extras | Minimum Android version | +|------------------------|---------------|:-----------------------:| +| HIDE | `package` | | +| UNHIDE | `package` | | +| SUSPEND | `package` | 7 | +| UNSUSPEND | `package` | 7 | +| ADD_USER_RESTRICTION | `restriction` | | +| CLEAR_USER_RESTRICTION | `restriction` | | +| LOCK | | | + +[Available user restrictions](https://developer.android.com/reference/android/os/UserManager#constants_1) -Use this API in adb shell ```shell -am broadcast -a com.bintianqi.owndroid.action. -n com.bintianqi.owndroid/.ApiReceiver --es key -# Example +# An example of hiding app in ADB shell am broadcast -a com.bintianqi.owndroid.action.HIDE -n com.bintianqi.owndroid/.ApiReceiver --es key abcdefg --es package com.example.app ``` -If the return value is 0, the operation is successful. + +```kotlin +// An example of hiding app in Kotlin +val intent = Intent("com.bintianqi.owndroid.action.HIDE") + .setComponent(ComponentName("com.bintianqi.owndroid", "com.bintianqi.owndroid.ApiReceiver")) + .putExtra("key", "abcdefg") + .putExtra("package", "com.example.app") +context.sendBroadcast(intent) +``` ## Build diff --git a/Readme.md b/Readme.md index 2877b2f..4402f37 100644 --- a/Readme.md +++ b/Readme.md @@ -9,6 +9,9 @@ [IzzyOnDroid F-Droid Repository](https://apt.izzysoft.de/fdroid/index/apk/com.bintianqi.owndroid) [Releases on GitHub](https://github.com/BinTianqi/OwnDroid/releases) +> [!NOTE] +> ColorOS用户应在GitHub上的releases下载testkey版本 + ## 功能 - 系统 @@ -104,21 +107,31 @@ java.lang.IllegalStateException: Unexpected @ProvisioningPreCondition ## API -| ID | 描述 | Extras | 最小安卓版本 | -|:---------:|----------|--------------------|:------:| -| HIDE | 隐藏一个应用 | `package`: 目标应用的包名 | | -| UNHIDE | 取消隐藏一个应用 | `package`: 目标应用的包名 | | -| SUSPEND | 挂起一个应用 | `package`: 目标应用的包名 | 7 | -| UNSUSPEND | 取消挂起一个应用 | `package`: 目标应用的包名 | 7 | -| LOCK | 锁屏 | | | +| ID | Extra | 最小安卓版本 | +|------------------------|---------------|:------:| +| HIDE | `package` | | +| UNHIDE | `package` | | +| SUSPEND | `package` | 7 | +| UNSUSPEND | `package` | 7 | +| ADD_USER_RESTRICTION | `restriction` | | +| CLEAR_USER_RESTRICTION | `restriction` | | +| LOCK | | | + +[可用的用户限制](https://developer.android.google.cn/reference/android/os/UserManager#constants_1) -在adb shell中使用API ```shell -am broadcast -a com.bintianqi.owndroid.action. -n com.bintianqi.owndroid/.ApiReceiver --es key -# 示例 +# 一个在ADB shell中隐藏app的示例 am broadcast -a com.bintianqi.owndroid.action.HIDE -n com.bintianqi.owndroid/.ApiReceiver --es key abcdefg --es package com.example.app ``` -如果返回值为0,操作成功 + +```kotlin +// 一个在Kotlin中隐藏app的示例 +val intent = Intent("com.bintianqi.owndroid.action.HIDE") + .setComponent(ComponentName("com.bintianqi.owndroid", "com.bintianqi.owndroid.ApiReceiver")) + .putExtra("key", "abcdefg") + .putExtra("package", "com.example.app") +context.sendBroadcast(intent) +``` ## 构建 diff --git a/app/src/main/java/com/bintianqi/owndroid/ApiReceiver.kt b/app/src/main/java/com/bintianqi/owndroid/ApiReceiver.kt index a45f3af..d1df5a5 100644 --- a/app/src/main/java/com/bintianqi/owndroid/ApiReceiver.kt +++ b/app/src/main/java/com/bintianqi/owndroid/ApiReceiver.kt @@ -9,7 +9,7 @@ import com.bintianqi.owndroid.dpm.getReceiver class ApiReceiver: BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { - val requestKey = intent.getStringExtra("key") ?: "" + val requestKey = intent.getStringExtra("key") var log = "OwnDroid API request received. action: ${intent.action}\nkey: $requestKey" val sp = SharedPrefs(context) if(!sp.isApiEnabled) return @@ -18,6 +18,7 @@ class ApiReceiver: BroadcastReceiver() { val dpm = context.getDPM() val receiver = context.getReceiver() val app = intent.getStringExtra("package") + val restriction = intent.getStringExtra("restriction") if(!app.isNullOrEmpty()) log += "\npackage: $app" try { @SuppressWarnings("NewApi") @@ -26,7 +27,9 @@ class ApiReceiver: BroadcastReceiver() { "com.bintianqi.owndroid.action.UNHIDE" -> dpm.setApplicationHidden(receiver, app, false) "com.bintianqi.owndroid.action.SUSPEND" -> dpm.setPackagesSuspended(receiver, arrayOf(app), true).isEmpty() "com.bintianqi.owndroid.action.UNSUSPEND" -> dpm.setPackagesSuspended(receiver, arrayOf(app), false).isEmpty() - "com.bintianqi.owndroid.action.LOCK" -> { dpm.lockNow(); null } + "com.bintianqi.owndroid.action.ADD_USER_RESTRICTION" -> { dpm.addUserRestriction(receiver, restriction); true } + "com.bintianqi.owndroid.action.CLEAR_USER_RESTRICTION" -> { dpm.clearUserRestriction(receiver, restriction); true } + "com.bintianqi.owndroid.action.LOCK" -> { dpm.lockNow(); true } else -> { log += "\nInvalid action" false