From 496a25cecec30eeaf4bfb5345c15175c80d9d34f Mon Sep 17 00:00:00 2001 From: BinTianqi <1220958406@qq.com> Date: Sun, 14 Jan 2024 08:22:33 +0800 Subject: [PATCH] Split the application into several pages --- app/build.gradle.kts | 1 + .../binbin/androidowner/ApplicationManage.kt | 34 +++++ .../com/binbin/androidowner/DeviceControl.kt | 43 ++++++ .../com/binbin/androidowner/MainActivity.kt | 126 ++++++++---------- .../com/binbin/androidowner/Permissions.kt | 23 ++++ .../java/com/binbin/androidowner/UIControl.kt | 17 +++ 6 files changed, 176 insertions(+), 68 deletions(-) create mode 100644 app/src/main/java/com/binbin/androidowner/ApplicationManage.kt create mode 100644 app/src/main/java/com/binbin/androidowner/DeviceControl.kt create mode 100644 app/src/main/java/com/binbin/androidowner/Permissions.kt create mode 100644 app/src/main/java/com/binbin/androidowner/UIControl.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d25d826..616ebf7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -59,6 +59,7 @@ dependencies { implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3") + implementation("androidx.navigation:navigation-compose:2.7.6") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") diff --git a/app/src/main/java/com/binbin/androidowner/ApplicationManage.kt b/app/src/main/java/com/binbin/androidowner/ApplicationManage.kt new file mode 100644 index 0000000..566ea3b --- /dev/null +++ b/app/src/main/java/com/binbin/androidowner/ApplicationManage.kt @@ -0,0 +1,34 @@ +package com.binbin.androidowner + +import android.app.admin.DevicePolicyManager +import android.content.ComponentName +import androidx.compose.foundation.layout.Column +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import com.binbin.androidowner.ui.theme.AndroidOwnerTheme + +@Composable +fun ApplicationManage(myDpm:DevicePolicyManager, myComponent:ComponentName){ + var pkgName by remember { mutableStateOf("com.mihoyo.yuanshen") } + Column { + TextField(value = pkgName, onValueChange = {pkgName = it}, label = { Text("包名") }) + Button(onClick = { myDpm.setApplicationHidden(myComponent,pkgName,true) }) { + Text("隐藏") + } + Button(onClick = { myDpm.setApplicationHidden(myComponent,pkgName,false) }) { + Text("显示") + } + Button(onClick = { myDpm.setUninstallBlocked(myComponent, pkgName, true) }) { + Text("禁止卸载") + } + Button(onClick = { myDpm.setUninstallBlocked(myComponent, pkgName, false)}) { + Text("允许卸载") + } + } +} diff --git a/app/src/main/java/com/binbin/androidowner/DeviceControl.kt b/app/src/main/java/com/binbin/androidowner/DeviceControl.kt new file mode 100644 index 0000000..967c854 --- /dev/null +++ b/app/src/main/java/com/binbin/androidowner/DeviceControl.kt @@ -0,0 +1,43 @@ +package com.binbin.androidowner + +import android.app.admin.DevicePolicyManager +import android.content.ComponentName +import android.os.UserManager +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.layout.Column +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun DeviceControl(myDpm: DevicePolicyManager, myComponent: ComponentName){ + var wifimac = "Unknown" + val isdo = myDpm.isDeviceOwnerApp("com.binbin.androidowner") + if(isdo){ + wifimac = myDpm.getWifiMacAddress(myComponent).toString() + } + Column { + Text("WiFi MAC: $wifimac") + Button(onClick = {myDpm.addUserRestriction(myComponent, UserManager.DISALLOW_BLUETOOTH)}) { + Text("禁用蓝牙(未测试)") + } + Button(onClick = {myDpm.reboot(myComponent)}) { + Text("重启") + } + Button(onClick = {myDpm.lockNow()}) { + Text("锁屏") + } + Button( + onClick = {}, + modifier = Modifier.combinedClickable( + onClick = {}, + onLongClick = {myDpm.wipeData(0)}) + ) { + Text("FACTORY_RESET!!!!! (长按)(未测试)", color = Color.Red) + } + } +} diff --git a/app/src/main/java/com/binbin/androidowner/MainActivity.kt b/app/src/main/java/com/binbin/androidowner/MainActivity.kt index 368fbb9..9166aa1 100644 --- a/app/src/main/java/com/binbin/androidowner/MainActivity.kt +++ b/app/src/main/java/com/binbin/androidowner/MainActivity.kt @@ -1,8 +1,8 @@ package com.binbin.androidowner +import android.annotation.SuppressLint import android.app.admin.DevicePolicyManager import android.content.ComponentName -import android.content.Intent import android.os.Bundle import android.os.UserManager import androidx.activity.ComponentActivity @@ -10,87 +10,77 @@ import androidx.activity.compose.setContent import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Scaffold import androidx.compose.material3.Text -import androidx.compose.material3.TextField -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.navigation.NavHost +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController import com.binbin.androidowner.ui.theme.AndroidOwnerTheme - class MainActivity : ComponentActivity() { - @OptIn(ExperimentalFoundationApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val context = applicationContext val dpm = context.getSystemService(DEVICE_POLICY_SERVICE) as DevicePolicyManager + val adminComponent = ComponentName(context,MyDeviceAdminReceiver::class.java) setContent { AndroidOwnerTheme { - val adminComponent = ComponentName(context,MyDeviceAdminReceiver::class.java) - val isdo = dpm.isDeviceOwnerApp("com.binbin.androidowner") - val isda = dpm.isAdminActive(adminComponent) - var wifimac = "Unknown" - var pkgName by remember { mutableStateOf("com.mihoyo.yuanshen") } - if(isdo){ - wifimac = dpm.getWifiMacAddress(adminComponent).toString() - } - Column { - Column { - Text("Device Admin 功能") - Text("DeviceAdmin: $isda") - Button(onClick = {dpm.lockNow()}) { - Text("锁屏") - } - Button( - onClick = {}, - modifier = Modifier.combinedClickable( - onClick = {}, - onLongClick = {dpm.wipeData(0)} - ) - ) { - Text("FACTORY_RESET!!!!! (长按)(未测试)", color = Color.Red) - } - - } - Column { - Text("Device Owner 功能") - Text("DeviceOwner: $isdo") - Button(onClick = {dpm.reboot(adminComponent)}) { - Text("重启") - } - Button(onClick = {dpm.clearDeviceOwnerApp("com.binbin.androidowner")}) { - Text("不当Device Owner了") - } - Button(onClick = {dpm.setStatusBarDisabled(adminComponent,true)}) { - Text("隐藏状态栏") - } - Button(onClick = {dpm.setStatusBarDisabled(adminComponent,false)}) { - Text("显示状态栏") - } - Button(onClick = {dpm.addUserRestriction(adminComponent,UserManager.DISALLOW_BLUETOOTH)}) { - Text("禁用蓝牙(未测试)") - } - Text("WiFi MAC: $wifimac") - TextField(value = pkgName, onValueChange = {pkgName = it}, label = { Text("包名")}) - Button(onClick = { dpm.setApplicationHidden(adminComponent,pkgName,true) }) { - Text("隐藏") - } - Button(onClick = { dpm.setApplicationHidden(adminComponent,pkgName,false) }) { - Text("显示") - } - Button(onClick = { dpm.setUninstallBlocked(adminComponent, pkgName, true) }) { - Text("禁止卸载") - } - Button(onClick = {dpm.setUninstallBlocked(adminComponent, pkgName, false)}) { - Text("允许卸载") - } - } - } + MyScaffold(dpm,adminComponent) } } } } + +@OptIn(ExperimentalMaterial3Api::class) +@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") +@Composable +fun MyScaffold(mainDpm:DevicePolicyManager, mainComponent:ComponentName){ + val navCtrl = rememberNavController() + Scaffold( + topBar = { + TopAppBar( + title = { Text("Android Owner")} + ) + } + ) { + NavHost( + navController = navCtrl, + startDestination = "HomePage", + modifier = Modifier.padding(top = 80.dp) + ){ + composable(route = "HomePage", content = { HomePage(navCtrl)}) + composable(route = "DeviceControl", content = { DeviceControl(mainDpm,mainComponent)}) + composable(route = "Permissions", content = { DpmPermissions(mainDpm,mainComponent)}) + composable(route = "UIControl", content = { UIControl(mainDpm,mainComponent)}) + composable(route = "ApplicationManage", content = { ApplicationManage(mainDpm,mainComponent)}) + } + } +} + +@Composable +fun HomePage(navCtrl:NavHostController){ + Column { + Button(onClick = {navCtrl.navigate("Permissions")}) { + Text("权限") + } + Button(onClick = {navCtrl.navigate("DeviceControl")}) { + Text("设备控制") + } + Button(onClick = {navCtrl.navigate("UIControl")}) { + Text("UI控制") + } + Button(onClick = {navCtrl.navigate("ApplicationManage")}) { + Text("应用管理") + } + } +} diff --git a/app/src/main/java/com/binbin/androidowner/Permissions.kt b/app/src/main/java/com/binbin/androidowner/Permissions.kt new file mode 100644 index 0000000..b817d7f --- /dev/null +++ b/app/src/main/java/com/binbin/androidowner/Permissions.kt @@ -0,0 +1,23 @@ +package com.binbin.androidowner + +import android.app.admin.DevicePolicyManager +import android.content.ComponentName +import androidx.compose.foundation.layout.Column +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import com.binbin.androidowner.ui.theme.AndroidOwnerTheme + +@Composable +fun DpmPermissions(myDpm: DevicePolicyManager, myComponent: ComponentName){ + //da:DeviceAdmin do:DeviceOwner + val isda = myDpm.isAdminActive(myComponent) + val isdo = myDpm.isDeviceOwnerApp("com.binbin.androidowner") + Column { + Text("Device Admin: $isda") + Text("Device Owner: $isdo") + Button(onClick = {myDpm.clearDeviceOwnerApp("com.binbin.androidowner")}) { + Text("不当Device Owner了") + } + } +} diff --git a/app/src/main/java/com/binbin/androidowner/UIControl.kt b/app/src/main/java/com/binbin/androidowner/UIControl.kt new file mode 100644 index 0000000..a9c2eab --- /dev/null +++ b/app/src/main/java/com/binbin/androidowner/UIControl.kt @@ -0,0 +1,17 @@ +package com.binbin.androidowner + +import android.app.admin.DevicePolicyManager +import android.content.ComponentName +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable + +@Composable +fun UIControl(myDpm: DevicePolicyManager, myComponent: ComponentName){ + Button(onClick = {myDpm.setStatusBarDisabled(myComponent,true)}) { + Text("隐藏状态栏") + } + Button(onClick = {myDpm.setStatusBarDisabled(myComponent,false)}) { + Text("显示状态栏") + } +}