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: