Split the application into several pages

This commit is contained in:
BinTianqi
2024-01-14 08:22:33 +08:00
parent 35c881f23b
commit 496a25cece
6 changed files with 176 additions and 68 deletions

View File

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

View File

@@ -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("允许卸载")
}
}
}

View File

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

View File

@@ -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()
MyScaffold(dpm,adminComponent)
}
}
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)
}
@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 {
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("允许卸载")
}
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("应用管理")
}
}
}

View File

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

View File

@@ -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("显示状态栏")
}
}