mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 11:05:59 +00:00
Handle Dhizuku errors better (#154)
This commit is contained in:
@@ -49,6 +49,7 @@ import androidx.compose.ui.platform.LocalFocusManager
|
|||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.LifecycleEventObserver
|
import androidx.lifecycle.LifecycleEventObserver
|
||||||
@@ -235,14 +236,13 @@ import com.bintianqi.owndroid.dpm.WorkModes
|
|||||||
import com.bintianqi.owndroid.dpm.WorkModesScreen
|
import com.bintianqi.owndroid.dpm.WorkModesScreen
|
||||||
import com.bintianqi.owndroid.dpm.WorkProfile
|
import com.bintianqi.owndroid.dpm.WorkProfile
|
||||||
import com.bintianqi.owndroid.dpm.WorkProfileScreen
|
import com.bintianqi.owndroid.dpm.WorkProfileScreen
|
||||||
|
import com.bintianqi.owndroid.dpm.checkPrivilege
|
||||||
import com.bintianqi.owndroid.dpm.dhizukuErrorStatus
|
import com.bintianqi.owndroid.dpm.dhizukuErrorStatus
|
||||||
import com.bintianqi.owndroid.dpm.dhizukuPermissionGranted
|
|
||||||
import com.bintianqi.owndroid.dpm.getDPM
|
import com.bintianqi.owndroid.dpm.getDPM
|
||||||
import com.bintianqi.owndroid.dpm.getReceiver
|
import com.bintianqi.owndroid.dpm.getReceiver
|
||||||
import com.bintianqi.owndroid.dpm.setDefaultAffiliationID
|
import com.bintianqi.owndroid.dpm.setDefaultAffiliationID
|
||||||
import com.bintianqi.owndroid.ui.Animations
|
import com.bintianqi.owndroid.ui.Animations
|
||||||
import com.bintianqi.owndroid.ui.theme.OwnDroidTheme
|
import com.bintianqi.owndroid.ui.theme.OwnDroidTheme
|
||||||
import com.rosan.dhizuku.api.Dhizuku
|
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
@@ -259,6 +259,7 @@ class MainActivity : FragmentActivity() {
|
|||||||
val locale = context.resources?.configuration?.locale
|
val locale = context.resources?.configuration?.locale
|
||||||
zhCN = locale == Locale.SIMPLIFIED_CHINESE || locale == Locale.CHINESE || locale == Locale.CHINA
|
zhCN = locale == Locale.SIMPLIFIED_CHINESE || locale == Locale.CHINESE || locale == Locale.CHINA
|
||||||
val vm by viewModels<MyViewModel>()
|
val vm by viewModels<MyViewModel>()
|
||||||
|
checkPrivilege(this)
|
||||||
lifecycleScope.launch { delay(5000); setDefaultAffiliationID(context) }
|
lifecycleScope.launch { delay(5000); setDefaultAffiliationID(context) }
|
||||||
setContent {
|
setContent {
|
||||||
var appLockDialog by rememberSaveable { mutableStateOf(false) }
|
var appLockDialog by rememberSaveable { mutableStateOf(false) }
|
||||||
@@ -274,16 +275,7 @@ class MainActivity : FragmentActivity() {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
val sp = SharedPrefs(applicationContext)
|
checkPrivilege(this)
|
||||||
if (sp.dhizuku) {
|
|
||||||
if (Dhizuku.init(applicationContext)) {
|
|
||||||
if (!dhizukuPermissionGranted()) { dhizukuErrorStatus.value = 2 }
|
|
||||||
} else {
|
|
||||||
sp.dhizuku = false
|
|
||||||
dhizukuErrorStatus.value = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
updatePrivilege(this)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -324,10 +316,6 @@ fun Home(vm: MyViewModel, onLock: () -> Unit) {
|
|||||||
navController.navigate(Home) {
|
navController.navigate(Home) {
|
||||||
popUpTo<WorkModes> { inclusive = true }
|
popUpTo<WorkModes> { inclusive = true }
|
||||||
}
|
}
|
||||||
}, {
|
|
||||||
navController.navigate(WorkModes(false)) {
|
|
||||||
popUpTo<Home> { inclusive = true }
|
|
||||||
}
|
|
||||||
}, ::navigate)
|
}, ::navigate)
|
||||||
}
|
}
|
||||||
composable<DhizukuServerSettings> { DhizukuServerSettingsScreen(::navigateUp) }
|
composable<DhizukuServerSettings> { DhizukuServerSettingsScreen(::navigateUp) }
|
||||||
@@ -496,7 +484,14 @@ fun Home(vm: MyViewModel, onLock: () -> Unit) {
|
|||||||
Toast.makeText(context, R.string.work_profile_activated, Toast.LENGTH_SHORT).show()
|
Toast.makeText(context, R.string.work_profile_activated, Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DhizukuErrorDialog()
|
DhizukuErrorDialog {
|
||||||
|
dhizukuErrorStatus.value = 0
|
||||||
|
updatePrivilege(context)
|
||||||
|
navController.navigate(WorkModes(false)) {
|
||||||
|
popUpTo<Home> { inclusive = true }
|
||||||
|
launchSingleTop = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serializable private object Home
|
@Serializable private object Home
|
||||||
@@ -570,7 +565,7 @@ fun HomePageItem(name: Int, imgVector: Int, onClick: () -> Unit) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun DhizukuErrorDialog() {
|
private fun DhizukuErrorDialog(onClose: () -> Unit) {
|
||||||
val status by dhizukuErrorStatus.collectAsState()
|
val status by dhizukuErrorStatus.collectAsState()
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
val sp = SharedPrefs(LocalContext.current)
|
val sp = SharedPrefs(LocalContext.current)
|
||||||
@@ -578,9 +573,9 @@ private fun DhizukuErrorDialog() {
|
|||||||
sp.dhizuku = false
|
sp.dhizuku = false
|
||||||
}
|
}
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
onDismissRequest = { dhizukuErrorStatus.value = 0 },
|
onDismissRequest = {},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
TextButton(onClick = { dhizukuErrorStatus.value = 0 }) {
|
TextButton(onClose) {
|
||||||
Text(stringResource(R.string.confirm))
|
Text(stringResource(R.string.confirm))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -595,7 +590,8 @@ private fun DhizukuErrorDialog() {
|
|||||||
)
|
)
|
||||||
if(sp.dhizuku) text += "\n" + stringResource(R.string.dhizuku_mode_disabled)
|
if(sp.dhizuku) text += "\n" + stringResource(R.string.dhizuku_mode_disabled)
|
||||||
Text(text)
|
Text(text)
|
||||||
}
|
},
|
||||||
|
properties = DialogProperties(dismissOnBackPress = false, dismissOnClickOutside = false)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.bintianqi.owndroid.R
|
|||||||
import com.bintianqi.owndroid.SharedPrefs
|
import com.bintianqi.owndroid.SharedPrefs
|
||||||
import com.bintianqi.owndroid.createShortcuts
|
import com.bintianqi.owndroid.createShortcuts
|
||||||
import com.bintianqi.owndroid.myPrivilege
|
import com.bintianqi.owndroid.myPrivilege
|
||||||
|
import com.bintianqi.owndroid.updatePrivilege
|
||||||
import com.rosan.dhizuku.api.Dhizuku
|
import com.rosan.dhizuku.api.Dhizuku
|
||||||
import com.rosan.dhizuku.api.DhizukuBinderWrapper
|
import com.rosan.dhizuku.api.DhizukuBinderWrapper
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
@@ -526,3 +527,16 @@ fun handlePrivilegeChange(context: Context) {
|
|||||||
sp.isApiEnabled = false
|
sp.isApiEnabled = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun checkPrivilege(context: Context) {
|
||||||
|
val sp = SharedPrefs(context)
|
||||||
|
if (sp.dhizuku) {
|
||||||
|
if (Dhizuku.init(context)) {
|
||||||
|
if (!dhizukuPermissionGranted()) { dhizukuErrorStatus.value = 2 }
|
||||||
|
} else {
|
||||||
|
sp.dhizuku = false
|
||||||
|
dhizukuErrorStatus.value = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updatePrivilege(context)
|
||||||
|
}
|
||||||
|
|||||||
@@ -118,8 +118,7 @@ import kotlinx.serialization.json.Json
|
|||||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun WorkModesScreen(
|
fun WorkModesScreen(
|
||||||
params: WorkModes, onNavigateUp: () -> Unit, onActivate: () -> Unit, onDeactivate: () -> Unit,
|
params: WorkModes, onNavigateUp: () -> Unit, onActivate: () -> Unit, onNavigate: (Any) -> Unit
|
||||||
onNavigate: (Any) -> Unit
|
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val coroutine = rememberCoroutineScope()
|
val coroutine = rememberCoroutineScope()
|
||||||
@@ -129,10 +128,7 @@ fun WorkModesScreen(
|
|||||||
LaunchedEffect(privilege) {
|
LaunchedEffect(privilege) {
|
||||||
if (!params.canNavigateUp && privilege.device) {
|
if (!params.canNavigateUp && privilege.device) {
|
||||||
delay(1000)
|
delay(1000)
|
||||||
if (dialog != 3) {
|
if (dialog != 3) dialog = 3 // Activated by ADB command
|
||||||
dialog = 0
|
|
||||||
onActivate() // Activated by ADB command, return to home screen
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Scaffold(
|
Scaffold(
|
||||||
@@ -379,7 +375,6 @@ fun WorkModesScreen(
|
|||||||
dialog = 0
|
dialog = 0
|
||||||
updatePrivilege(context)
|
updatePrivilege(context)
|
||||||
handlePrivilegeChange(context)
|
handlePrivilegeChange(context)
|
||||||
onDeactivate()
|
|
||||||
},
|
},
|
||||||
enabled = time == 0,
|
enabled = time == 0,
|
||||||
colors = ButtonDefaults.textButtonColors(contentColor = colorScheme.error)
|
colors = ButtonDefaults.textButtonColors(contentColor = colorScheme.error)
|
||||||
|
|||||||
Reference in New Issue
Block a user