From 0b39bdc7883e6504c789bebfca1b3e6425593c8d Mon Sep 17 00:00:00 2001 From: BinTianqi Date: Thu, 20 Jun 2024 23:42:02 +0800 Subject: [PATCH] add TaskReceiver --- app/src/main/AndroidManifest.xml | 7 ++++ .../java/com/bintianqi/owndroid/Setting.kt | 19 ++++++++++ .../com/bintianqi/owndroid/TaskReceiver.kt | 38 +++++++++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 5 files changed, 66 insertions(+) create mode 100644 app/src/main/java/com/bintianqi/owndroid/TaskReceiver.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 93b4c89..9c895ed 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -90,6 +90,13 @@ android:description="@string/app_name" android:permission="android.permission.BIND_DEVICE_ADMIN"> + + + + + , bl composable(route = "Home") { Home(localNavCtrl) } composable(route = "Theme") { ThemeSettings(materialYou, blackTheme) } composable(route = "Auth") { AuthSettings() } + composable(route = "Automation") { Automation() } composable(route = "About") { About() } } } @@ -53,6 +56,7 @@ private fun Home(navCtrl: NavHostController) { Column(modifier = Modifier.fillMaxSize()) { SubPageItem(R.string.theme, "", R.drawable.format_paint_fill0) { navCtrl.navigate("Theme") } SubPageItem(R.string.security, "", R.drawable.lock_fill0) { navCtrl.navigate("Auth") } + SubPageItem(R.string.automation, "", R.drawable.apps_fill0) { navCtrl.navigate("Automation") } SubPageItem(R.string.about, "", R.drawable.info_fill0) { navCtrl.navigate("About") } } } @@ -122,6 +126,21 @@ private fun AuthSettings() { } } +@Composable +private fun Automation() { + val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE) + Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())) { + var pkgName by remember { mutableStateOf("") } + LaunchedEffect(Unit) { + pkgName = sharedPref.getString("AutomationApp", "")?: "" + } + TextField(value = pkgName, onValueChange = { pkgName = it }, label = { Text("Package name")}) + Button(onClick = {sharedPref.edit().putString("AutomationApp", pkgName).apply()}) { + Text("apply") + } + } +} + @Composable private fun About() { val context = LocalContext.current diff --git a/app/src/main/java/com/bintianqi/owndroid/TaskReceiver.kt b/app/src/main/java/com/bintianqi/owndroid/TaskReceiver.kt new file mode 100644 index 0000000..ddf601b --- /dev/null +++ b/app/src/main/java/com/bintianqi/owndroid/TaskReceiver.kt @@ -0,0 +1,38 @@ +package com.bintianqi.owndroid + +import android.app.admin.DevicePolicyManager +import android.content.BroadcastReceiver +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.os.Build.VERSION +import android.util.Log +import androidx.activity.ComponentActivity + +class TaskReceiver: BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + Log.d("OwnDroid", ("TaskReceiver: pkgName: " + intent.component?.packageName)) + Log.d("OwnDroid", ("TaskReceiver: pkg: " + intent.`package`)) + val sharedPref = context.getSharedPreferences("data", Context.MODE_PRIVATE) + if(sharedPref.getString("AutomationApp", "") != intent.component?.packageName) return + val category = intent.getStringExtra("category") + if(category == "app") { + val action = intent.getStringExtra("action") + if(action == "suspend") { + val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager + val receiver = ComponentName(context,Receiver::class.java) + val app = intent.getStringExtra("app") + val mode = intent.getBooleanExtra("mode", false) + if(VERSION.SDK_INT >= 24) { + dpm.setPackagesSuspended(receiver, arrayOf(app), mode) + } else { + Log.d("OwnDroid", "unsupported") + } + } else { + Log.d("OwnDroid", "unknown action") + } + } else { + Log.d("OwnDroid", "unknown category") + } + } +} diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 05a71bb..585b315 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -535,6 +535,7 @@ 你不能清除OwnDroid的存储空间 清除存储空间 清除存储空间成功\n应用即将退出 + 自动化 读取外部存储 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index da159d2..21abef9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -551,6 +551,7 @@ You can\'t clear storage of OwnDroid Clear storage Clear storage success\nApplication will exit + Automation Read external storage