diff --git a/app/src/main/java/com/bintianqi/owndroid/AutomationReceiver.kt b/app/src/main/java/com/bintianqi/owndroid/AutomationReceiver.kt
index e89b316..036d8b5 100644
--- a/app/src/main/java/com/bintianqi/owndroid/AutomationReceiver.kt
+++ b/app/src/main/java/com/bintianqi/owndroid/AutomationReceiver.kt
@@ -2,7 +2,6 @@ package com.bintianqi.owndroid
import android.annotation.SuppressLint
import android.content.BroadcastReceiver
-import android.content.ComponentName
import android.content.Context
import android.content.Intent
import com.bintianqi.owndroid.dpm.getDPM
diff --git a/app/src/main/java/com/bintianqi/owndroid/MainActivity.kt b/app/src/main/java/com/bintianqi/owndroid/MainActivity.kt
index 6c7f210..b3cb331 100644
--- a/app/src/main/java/com/bintianqi/owndroid/MainActivity.kt
+++ b/app/src/main/java/com/bintianqi/owndroid/MainActivity.kt
@@ -112,8 +112,12 @@ class MainActivity : FragmentActivity() {
showAuth.value = true
}
if (sharedPref.getBoolean("dhizuku", false)) {
- if (!Dhizuku.init(applicationContext)) { dhizukuErrorStatus.value = 1 }
- if (!Dhizuku.isPermissionGranted()) { dhizukuErrorStatus.value = 2 }
+ if (Dhizuku.init(applicationContext)) {
+ if (!Dhizuku.isPermissionGranted()) { dhizukuErrorStatus.value = 2 }
+ } else {
+ sharedPref.edit().putBoolean("dhizuku", false).apply()
+ dhizukuErrorStatus.value = 1
+ }
}
}
diff --git a/app/src/main/java/com/bintianqi/owndroid/Receiver.kt b/app/src/main/java/com/bintianqi/owndroid/Receiver.kt
index c33f8b8..36da863 100644
--- a/app/src/main/java/com/bintianqi/owndroid/Receiver.kt
+++ b/app/src/main/java/com/bintianqi/owndroid/Receiver.kt
@@ -37,6 +37,7 @@ class Receiver : DeviceAdminReceiver() {
override fun onDisabled(context: Context, intent: Intent) {
super.onDisabled(context, intent)
+ backToHomeStateFlow.value = true
Toast.makeText(context, R.string.onDisabled, Toast.LENGTH_SHORT).show()
}
diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/ApplicationManage.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/ApplicationManage.kt
index 36a7a4e..757c7ae 100644
--- a/app/src/main/java/com/bintianqi/owndroid/dpm/ApplicationManage.kt
+++ b/app/src/main/java/com/bintianqi/owndroid/dpm/ApplicationManage.kt
@@ -10,7 +10,6 @@ import android.app.admin.PackagePolicy
import android.app.admin.PackagePolicy.PACKAGE_POLICY_ALLOWLIST
import android.app.admin.PackagePolicy.PACKAGE_POLICY_ALLOWLIST_AND_SYSTEM
import android.app.admin.PackagePolicy.PACKAGE_POLICY_BLOCKLIST
-import android.content.ComponentName
import android.content.Intent
import android.content.pm.PackageManager.NameNotFoundException
import android.net.Uri
@@ -80,7 +79,6 @@ import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.InstallAppActivity
import com.bintianqi.owndroid.PackageInstallerReceiver
import com.bintianqi.owndroid.R
-import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.fileUriFlow
import com.bintianqi.owndroid.getFile
import com.bintianqi.owndroid.toText
diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/ManagedProfile.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/ManagedProfile.kt
index 548dde9..14f1ca1 100644
--- a/app/src/main/java/com/bintianqi/owndroid/dpm/ManagedProfile.kt
+++ b/app/src/main/java/com/bintianqi/owndroid/dpm/ManagedProfile.kt
@@ -56,7 +56,6 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.R
-import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.ui.Animations
import com.bintianqi.owndroid.ui.CheckBoxItem
import com.bintianqi.owndroid.ui.CopyTextButton
diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/Network.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/Network.kt
index 3a2d710..27ae07a 100644
--- a/app/src/main/java/com/bintianqi/owndroid/dpm/Network.kt
+++ b/app/src/main/java/com/bintianqi/owndroid/dpm/Network.kt
@@ -15,7 +15,6 @@ import android.app.admin.DevicePolicyManager.WIFI_SECURITY_PERSONAL
import android.app.admin.WifiSsidPolicy
import android.app.admin.WifiSsidPolicy.WIFI_SSID_POLICY_TYPE_ALLOWLIST
import android.app.admin.WifiSsidPolicy.WIFI_SSID_POLICY_TYPE_DENYLIST
-import android.content.ComponentName
import android.net.wifi.WifiSsid
import android.os.Build.VERSION
import android.telephony.TelephonyManager
@@ -88,7 +87,6 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.R
-import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.toText
import com.bintianqi.owndroid.ui.Animations
import com.bintianqi.owndroid.ui.RadioButtonItem
diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/Password.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/Password.kt
index d754389..95005ef 100644
--- a/app/src/main/java/com/bintianqi/owndroid/dpm/Password.kt
+++ b/app/src/main/java/com/bintianqi/owndroid/dpm/Password.kt
@@ -30,7 +30,6 @@ import android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING
import android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED
import android.app.admin.DevicePolicyManager.RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT
import android.app.admin.DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY
-import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Build.VERSION
@@ -75,7 +74,6 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.R
-import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.ui.Animations
import com.bintianqi.owndroid.ui.CheckBoxItem
import com.bintianqi.owndroid.ui.Information
@@ -127,8 +125,6 @@ fun Password(navCtrl: NavHostController) {
@Composable
private fun Home(navCtrl:NavHostController,scrollState: ScrollState) {
val context = LocalContext.current
- val dpm = context.getDPM()
- val receiver = context.getReceiver()
Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState)) {
Text(
text = stringResource(R.string.password_and_keyguard),
diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/Permissions.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/Permissions.kt
index 119d4d1..cdc0805 100644
--- a/app/src/main/java/com/bintianqi/owndroid/dpm/Permissions.kt
+++ b/app/src/main/java/com/bintianqi/owndroid/dpm/Permissions.kt
@@ -36,13 +36,10 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.R
-import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.backToHomeStateFlow
import com.bintianqi.owndroid.ui.*
import com.rosan.dhizuku.api.Dhizuku
import com.rosan.dhizuku.api.DhizukuRequestPermissionListener
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.launch
@Composable
fun DpmPermissions(navCtrl:NavHostController) {
@@ -223,14 +220,13 @@ private fun DeviceAdmin() {
val context = LocalContext.current
val dpm = context.getDPM()
val receiver = context.getReceiver()
- var showDeactivateButton by remember { mutableStateOf(context.isDeviceAdmin) }
var deactivateDialog by remember { mutableStateOf(false) }
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)) {
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.device_admin), style = typography.headlineLarge)
Text(text = stringResource(if(context.isDeviceAdmin) R.string.activated else R.string.deactivated), style = typography.titleLarge)
Spacer(Modifier.padding(vertical = 5.dp))
- AnimatedVisibility(showDeactivateButton) {
+ AnimatedVisibility(context.isDeviceAdmin) {
Button(
onClick = { deactivateDialog = true },
enabled = !context.isProfileOwner && !context.isDeviceOwner,
@@ -239,9 +235,9 @@ private fun DeviceAdmin() {
Text(stringResource(R.string.deactivate))
}
}
- AnimatedVisibility(!showDeactivateButton) {
+ AnimatedVisibility(!context.isDeviceAdmin) {
Column {
- Button(onClick = {activateDeviceAdmin(context, receiver) }, modifier = Modifier.fillMaxWidth()) {
+ Button(onClick = { activateDeviceAdmin(context, receiver) }, modifier = Modifier.fillMaxWidth()) {
Text(stringResource(R.string.activate_jump))
}
Spacer(Modifier.padding(vertical = 5.dp))
@@ -253,7 +249,6 @@ private fun DeviceAdmin() {
}
}
if(deactivateDialog) {
- val co = rememberCoroutineScope()
AlertDialog(
title = { Text(stringResource(R.string.deactivate)) },
onDismissRequest = { deactivateDialog = false },
@@ -268,12 +263,7 @@ private fun DeviceAdmin() {
TextButton(
onClick = {
dpm.removeActiveAdmin(receiver)
- co.launch{
- delay(300)
- deactivateDialog = false
- showDeactivateButton = context.isDeviceAdmin
- backToHomeStateFlow.value = !context.isDeviceAdmin
- }
+ deactivateDialog = false
}
) {
Text(stringResource(R.string.confirm))
@@ -288,7 +278,6 @@ private fun ProfileOwner() {
val context = LocalContext.current
val dpm = context.getDPM()
val receiver = context.getReceiver()
- var showDeactivateButton by remember { mutableStateOf(context.isProfileOwner) }
var deactivateDialog by remember { mutableStateOf(false) }
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)) {
Spacer(Modifier.padding(vertical = 10.dp))
@@ -296,7 +285,7 @@ private fun ProfileOwner() {
Text(stringResource(if(context.isProfileOwner) R.string.activated else R.string.deactivated), style = typography.titleLarge)
Spacer(Modifier.padding(vertical = 5.dp))
if(VERSION.SDK_INT >= 24) {
- AnimatedVisibility(showDeactivateButton) {
+ if(context.isProfileOwner) {
Button(
onClick = { deactivateDialog = true },
enabled = !dpm.isManagedProfile(receiver),
@@ -306,17 +295,8 @@ private fun ProfileOwner() {
}
}
}
- AnimatedVisibility(!showDeactivateButton) {
- Column {
- SelectionContainer{
- Text(text = stringResource(R.string.activate_profile_owner_command))
- }
- CopyTextButton(R.string.copy_command, stringResource(R.string.activate_profile_owner_command))
- }
- }
}
if(deactivateDialog && VERSION.SDK_INT >= 24) {
- val co = rememberCoroutineScope()
AlertDialog(
title = { Text(stringResource(R.string.deactivate)) },
onDismissRequest = { deactivateDialog = false },
@@ -331,12 +311,7 @@ private fun ProfileOwner() {
TextButton(
onClick = {
dpm.clearProfileOwner(receiver)
- co.launch{
- delay(300)
- deactivateDialog = false
- showDeactivateButton = context.isProfileOwner
- backToHomeStateFlow.value = !context.isProfileOwner
- }
+ deactivateDialog = false
}
) {
Text(stringResource(R.string.confirm))
@@ -350,14 +325,13 @@ private fun ProfileOwner() {
private fun DeviceOwner() {
val context = LocalContext.current
val dpm = context.getDPM()
- var showDeactivateButton by remember { mutableStateOf(context.isDeviceOwner) }
var deactivateDialog by remember { mutableStateOf(false) }
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)) {
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.device_owner), style = typography.headlineLarge)
Text(text = stringResource(if(context.isDeviceOwner) R.string.activated else R.string.deactivated), style = typography.titleLarge)
Spacer(Modifier.padding(vertical = 5.dp))
- AnimatedVisibility(showDeactivateButton) {
+ AnimatedVisibility(context.isDeviceOwner) {
Button(
onClick = { deactivateDialog = true },
colors = ButtonDefaults.buttonColors(containerColor = colorScheme.error, contentColor = colorScheme.onError)
@@ -365,7 +339,7 @@ private fun DeviceOwner() {
Text(text = stringResource(R.string.deactivate))
}
}
- AnimatedVisibility(!showDeactivateButton) {
+ AnimatedVisibility(!context.isDeviceOwner) {
Column {
SelectionContainer{
Text(text = stringResource(R.string.activate_device_owner_command))
@@ -375,9 +349,10 @@ private fun DeviceOwner() {
}
}
if(deactivateDialog) {
- val co = rememberCoroutineScope()
+ val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE)
AlertDialog(
title = { Text(stringResource(R.string.deactivate)) },
+ text = { if(sharedPref.getBoolean("dhizuku", false)) Text(stringResource(R.string.dhizuku_will_be_deactivated)) },
onDismissRequest = { deactivateDialog = false },
dismissButton = {
TextButton(
@@ -390,12 +365,13 @@ private fun DeviceOwner() {
TextButton(
onClick = {
dpm.clearDeviceOwnerApp(context.dpcPackageName)
- co.launch{
- delay(300)
- deactivateDialog = false
- showDeactivateButton = context.isDeviceOwner
- backToHomeStateFlow.value = !context.isDeviceOwner
+ if(sharedPref.getBoolean("dhizuku", false)) {
+ if (!Dhizuku.init(context)) {
+ sharedPref.edit().putBoolean("dhizuku", false).apply()
+ backToHomeStateFlow.value = true
+ }
}
+ deactivateDialog = false
}
) {
Text(stringResource(R.string.confirm))
diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/SystemManager.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/SystemManager.kt
index 7424a9f..ee52c8c 100644
--- a/app/src/main/java/com/bintianqi/owndroid/dpm/SystemManager.kt
+++ b/app/src/main/java/com/bintianqi/owndroid/dpm/SystemManager.kt
@@ -35,7 +35,6 @@ import android.app.admin.SystemUpdatePolicy
import android.app.admin.SystemUpdatePolicy.TYPE_INSTALL_AUTOMATIC
import android.app.admin.SystemUpdatePolicy.TYPE_INSTALL_WINDOWED
import android.app.admin.SystemUpdatePolicy.TYPE_POSTPONE
-import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.net.Uri
@@ -97,7 +96,6 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.R
-import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.StopLockTaskModeReceiver
import com.bintianqi.owndroid.fileUriFlow
import com.bintianqi.owndroid.getFile
diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/UserManager.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/UserManager.kt
index 8d1bbe8..20ed361 100644
--- a/app/src/main/java/com/bintianqi/owndroid/dpm/UserManager.kt
+++ b/app/src/main/java/com/bintianqi/owndroid/dpm/UserManager.kt
@@ -2,7 +2,6 @@ package com.bintianqi.owndroid.dpm
import android.annotation.SuppressLint
import android.app.admin.DevicePolicyManager
-import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.graphics.BitmapFactory
@@ -56,7 +55,6 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.R
-import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.fileUriFlow
import com.bintianqi.owndroid.getFile
import com.bintianqi.owndroid.toText
@@ -108,7 +106,6 @@ fun UserManage(navCtrl: NavHostController) {
@Composable
private fun Home(navCtrl: NavHostController,scrollState: ScrollState) {
val context = LocalContext.current
- val dpm = context.getDPM()
Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState)) {
Text(
text = stringResource(R.string.user_manager),
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 26e7fd7..aa2a195 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -63,6 +63,7 @@
Etkinleştir...
Profil Sahibi
Cihaz Sahibi
+ Dhizuku will be deactivated
Cihaz Yöneticisini Etkinleştir
Cihaz Bilgisi
Cihaz Kimliği Doğrulama Desteği:
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 71a48ea..ab53d49 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -60,6 +60,7 @@
激活...
Profile owner
Device owner
+ Dhizuku将被停用
激活Device admin
设备信息
支持设备ID认证:
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ffadb84..84c53c9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -63,9 +63,9 @@
Activate...
Profile owner
Device owner
+ Dhizuku will be deactivated
Activate Device admin
dpm set-active-admin com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver
- dpm set-profile-owner com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver
dpm set-device-owner com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver
Device info
Support Device ID attestation: