add TaskReceiver

This commit is contained in:
BinTianqi
2024-06-20 23:42:02 +08:00
parent cadd194135
commit 0b39bdc788
5 changed files with 66 additions and 0 deletions

View File

@@ -90,6 +90,13 @@
android:description="@string/app_name" android:description="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN"> android:permission="android.permission.BIND_DEVICE_ADMIN">
</receiver> </receiver>
<receiver
android:name=".TaskReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
</receiver>
<provider <provider
android:name="rikka.shizuku.ShizukuProvider" android:name="rikka.shizuku.ShizukuProvider"
android:authorities="${applicationId}.shizuku" android:authorities="${applicationId}.shizuku"

View File

@@ -8,9 +8,11 @@ import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme.typography import androidx.compose.material3.MaterialTheme.typography
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
@@ -43,6 +45,7 @@ fun AppSetting(navCtrl:NavHostController, materialYou: MutableState<Boolean>, bl
composable(route = "Home") { Home(localNavCtrl) } composable(route = "Home") { Home(localNavCtrl) }
composable(route = "Theme") { ThemeSettings(materialYou, blackTheme) } composable(route = "Theme") { ThemeSettings(materialYou, blackTheme) }
composable(route = "Auth") { AuthSettings() } composable(route = "Auth") { AuthSettings() }
composable(route = "Automation") { Automation() }
composable(route = "About") { About() } composable(route = "About") { About() }
} }
} }
@@ -53,6 +56,7 @@ private fun Home(navCtrl: NavHostController) {
Column(modifier = Modifier.fillMaxSize()) { Column(modifier = Modifier.fillMaxSize()) {
SubPageItem(R.string.theme, "", R.drawable.format_paint_fill0) { navCtrl.navigate("Theme") } 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.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") } 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 @Composable
private fun About() { private fun About() {
val context = LocalContext.current val context = LocalContext.current

View File

@@ -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")
}
}
}

View File

@@ -535,6 +535,7 @@
<string name="you_cant_clear_storage">你不能清除OwnDroid的存储空间</string> <string name="you_cant_clear_storage">你不能清除OwnDroid的存储空间</string>
<string name="clear_storage">清除存储空间</string> <string name="clear_storage">清除存储空间</string>
<string name="clear_storage_success">清除存储空间成功\n应用即将退出</string> <string name="clear_storage_success">清除存储空间成功\n应用即将退出</string>
<string name="automation">自动化</string>
<!--AndroidPermission--> <!--AndroidPermission-->
<string name="permission_READ_EXTERNAL_STORAGE">读取外部存储</string> <string name="permission_READ_EXTERNAL_STORAGE">读取外部存储</string>

View File

@@ -551,6 +551,7 @@
<string name="you_cant_clear_storage">You can\'t clear storage of OwnDroid</string> <string name="you_cant_clear_storage">You can\'t clear storage of OwnDroid</string>
<string name="clear_storage">Clear storage</string> <string name="clear_storage">Clear storage</string>
<string name="clear_storage_success">Clear storage success\nApplication will exit</string> <string name="clear_storage_success">Clear storage success\nApplication will exit</string>
<string name="automation">Automation</string>
<!--AndroidPermission--> <!--AndroidPermission-->
<string name="permission_READ_EXTERNAL_STORAGE">Read external storage</string> <string name="permission_READ_EXTERNAL_STORAGE">Read external storage</string>