mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 19:15:58 +00:00
use a dialog to confirm 'Set as default dialer'
This commit is contained in:
@@ -30,6 +30,7 @@ import androidx.compose.foundation.text.KeyboardActions
|
|||||||
import androidx.compose.foundation.text.KeyboardOptions
|
import androidx.compose.foundation.text.KeyboardOptions
|
||||||
import androidx.compose.foundation.text.selection.SelectionContainer
|
import androidx.compose.foundation.text.selection.SelectionContainer
|
||||||
import androidx.compose.material3.*
|
import androidx.compose.material3.*
|
||||||
|
import androidx.compose.material3.MaterialTheme.colorScheme
|
||||||
import androidx.compose.material3.MaterialTheme.typography
|
import androidx.compose.material3.MaterialTheme.typography
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
@@ -87,6 +88,7 @@ fun ApplicationManage(navCtrl:NavHostController, pkgName: MutableState<String>,
|
|||||||
"DefaultDialer" to R.string.set_default_dialer,
|
"DefaultDialer" to R.string.set_default_dialer,
|
||||||
)
|
)
|
||||||
val clearAppDataDialog = remember { mutableStateOf(false) }
|
val clearAppDataDialog = remember { mutableStateOf(false) }
|
||||||
|
val defaultDialerAppDialog = remember { mutableStateOf(false) }
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
TopBar(backStackEntry, navCtrl, localNavCtrl) {
|
TopBar(backStackEntry, navCtrl, localNavCtrl) {
|
||||||
@@ -122,7 +124,7 @@ fun ApplicationManage(navCtrl:NavHostController, pkgName: MutableState<String>,
|
|||||||
popEnterTransition = Animations.navHostPopEnterTransition,
|
popEnterTransition = Animations.navHostPopEnterTransition,
|
||||||
popExitTransition = Animations.navHostPopExitTransition
|
popExitTransition = Animations.navHostPopExitTransition
|
||||||
) {
|
) {
|
||||||
composable(route = "Home") { Home(localNavCtrl, pkgName.value, dialogStatus, clearAppDataDialog) }
|
composable(route = "Home") { Home(localNavCtrl, pkgName.value, dialogStatus, clearAppDataDialog, defaultDialerAppDialog) }
|
||||||
composable(route = "UserControlDisabled") { UserCtrlDisabledPkg(pkgName.value) }
|
composable(route = "UserControlDisabled") { UserCtrlDisabledPkg(pkgName.value) }
|
||||||
composable(route = "PermissionManage") { PermissionManage(pkgName.value, navCtrl) }
|
composable(route = "PermissionManage") { PermissionManage(pkgName.value, navCtrl) }
|
||||||
composable(route = "CrossProfilePackage") { CrossProfilePkg(pkgName.value) }
|
composable(route = "CrossProfilePackage") { CrossProfilePkg(pkgName.value) }
|
||||||
@@ -133,7 +135,6 @@ fun ApplicationManage(navCtrl:NavHostController, pkgName: MutableState<String>,
|
|||||||
composable(route = "KeepUninstalled") { KeepUninstalledApp(pkgName.value) }
|
composable(route = "KeepUninstalled") { KeepUninstalledApp(pkgName.value) }
|
||||||
composable(route = "InstallApp") { InstallApp() }
|
composable(route = "InstallApp") { InstallApp() }
|
||||||
composable(route = "UninstallApp") { UninstallApp(pkgName.value) }
|
composable(route = "UninstallApp") { UninstallApp(pkgName.value) }
|
||||||
composable(route = "DefaultDialer") { DefaultDialerApp(pkgName.value) }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -144,10 +145,19 @@ fun ApplicationManage(navCtrl:NavHostController, pkgName: MutableState<String>,
|
|||||||
if(clearAppDataDialog.value) {
|
if(clearAppDataDialog.value) {
|
||||||
ClearAppDataDialog(clearAppDataDialog, pkgName.value)
|
ClearAppDataDialog(clearAppDataDialog, pkgName.value)
|
||||||
}
|
}
|
||||||
|
if(defaultDialerAppDialog.value) {
|
||||||
|
DefaultDialerAppDialog(defaultDialerAppDialog, pkgName.value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun Home(navCtrl:NavHostController, pkgName: String, dialogStatus: MutableIntState, clearAppDataDialog: MutableState<Boolean>) {
|
private fun Home(
|
||||||
|
navCtrl:NavHostController,
|
||||||
|
pkgName: String,
|
||||||
|
dialogStatus: MutableIntState,
|
||||||
|
clearAppDataDialog: MutableState<Boolean>,
|
||||||
|
defaultDialerAppDialog: MutableState<Boolean>
|
||||||
|
) {
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())
|
modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())
|
||||||
) {
|
) {
|
||||||
@@ -260,8 +270,8 @@ private fun Home(navCtrl:NavHostController, pkgName: String, dialogStatus: Mutab
|
|||||||
}
|
}
|
||||||
SubPageItem(R.string.install_app, "", R.drawable.install_mobile_fill0) { navCtrl.navigate("InstallApp") }
|
SubPageItem(R.string.install_app, "", R.drawable.install_mobile_fill0) { navCtrl.navigate("InstallApp") }
|
||||||
SubPageItem(R.string.uninstall_app, "", R.drawable.delete_fill0) { navCtrl.navigate("UninstallApp") }
|
SubPageItem(R.string.uninstall_app, "", R.drawable.delete_fill0) { navCtrl.navigate("UninstallApp") }
|
||||||
if(VERSION.SDK_INT>=34) {
|
if(VERSION.SDK_INT >= 34 && (isDeviceOwner(dpm) || isProfileOwner(dpm))) {
|
||||||
SubPageItem(R.string.set_default_dialer, "", R.drawable.call_fill0) { navCtrl.navigate("DefaultDialer") }
|
SubPageItem(R.string.set_default_dialer, "", R.drawable.call_fill0) { defaultDialerAppDialog.value = true }
|
||||||
}
|
}
|
||||||
Spacer(Modifier.padding(vertical = 30.dp))
|
Spacer(Modifier.padding(vertical = 30.dp))
|
||||||
LaunchedEffect(Unit) { fileUriFlow.value = Uri.parse("") }
|
LaunchedEffect(Unit) { fileUriFlow.value = Uri.parse("") }
|
||||||
@@ -857,7 +867,7 @@ fun ClearAppDataDialog(status: MutableState<Boolean>, pkgName: String) {
|
|||||||
Text(text = stringResource(R.string.clear_app_storage))
|
Text(text = stringResource(R.string.clear_app_storage))
|
||||||
},
|
},
|
||||||
text = {
|
text = {
|
||||||
Text(text = stringResource(R.string.following_app_storage_will_clear) + "\n" + pkgName)
|
Text(stringResource(R.string.app_storage_will_be_cleared) + "\n" + pkgName)
|
||||||
},
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
TextButton(
|
TextButton(
|
||||||
@@ -874,7 +884,8 @@ fun ClearAppDataDialog(status: MutableState<Boolean>, pkgName: String) {
|
|||||||
}
|
}
|
||||||
dpm.clearApplicationUserData(receiver, pkgName, executor, onClear)
|
dpm.clearApplicationUserData(receiver, pkgName, executor, onClear)
|
||||||
status.value = false
|
status.value = false
|
||||||
}
|
},
|
||||||
|
colors = ButtonDefaults.textButtonColors(contentColor = colorScheme.error)
|
||||||
) {
|
) {
|
||||||
Text(text = stringResource(R.string.clear))
|
Text(text = stringResource(R.string.clear))
|
||||||
}
|
}
|
||||||
@@ -886,35 +897,46 @@ fun ClearAppDataDialog(status: MutableState<Boolean>, pkgName: String) {
|
|||||||
Text(text = stringResource(R.string.cancel))
|
Text(text = stringResource(R.string.cancel))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onDismissRequest = {
|
onDismissRequest = { status.value = false },
|
||||||
status.value = false
|
|
||||||
},
|
|
||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
@Composable
|
@Composable
|
||||||
private fun DefaultDialerApp(pkgName: String) {
|
fun DefaultDialerAppDialog(status: MutableState<Boolean>, pkgName: String) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
val dpm = context.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())) {
|
AlertDialog(
|
||||||
Spacer(Modifier.padding(vertical = 10.dp))
|
title = {
|
||||||
Button(
|
|
||||||
onClick = {
|
|
||||||
try{
|
|
||||||
dpm.setDefaultDialerApplication(pkgName)
|
|
||||||
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
|
||||||
}catch(e:IllegalArgumentException) {
|
|
||||||
Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
enabled = isDeviceOwner(dpm) || isProfileOwner(dpm),
|
|
||||||
modifier = Modifier.fillMaxWidth().padding(horizontal = 10.dp)
|
|
||||||
) {
|
|
||||||
Text(stringResource(R.string.set_default_dialer))
|
Text(stringResource(R.string.set_default_dialer))
|
||||||
}
|
},
|
||||||
}
|
text = {
|
||||||
|
Text(stringResource(R.string.app_will_be_default_dialer) + "\n" + pkgName)
|
||||||
|
},
|
||||||
|
onDismissRequest = { status.value = false },
|
||||||
|
dismissButton = {
|
||||||
|
TextButton(onClick = { status.value = false }) {
|
||||||
|
Text(stringResource(R.string.cancel))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
confirmButton = {
|
||||||
|
TextButton(
|
||||||
|
onClick = {
|
||||||
|
try{
|
||||||
|
dpm.setDefaultDialerApplication(pkgName)
|
||||||
|
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
|
||||||
|
}catch(e:IllegalArgumentException) {
|
||||||
|
Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
status.value = false
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
Text(stringResource(R.string.confirm))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|||||||
@@ -281,8 +281,9 @@
|
|||||||
<string name="keep_uninstalled_pkgs">保持卸载的应用</string>
|
<string name="keep_uninstalled_pkgs">保持卸载的应用</string>
|
||||||
<string name="clear_data">数据清除</string>
|
<string name="clear_data">数据清除</string>
|
||||||
<string name="clear_app_storage">清除应用存储</string>
|
<string name="clear_app_storage">清除应用存储</string>
|
||||||
<string name="following_app_storage_will_clear">以下应用的存储空间将被清空</string>
|
<string name="app_storage_will_be_cleared">这个应用的存储空间将被清空</string>
|
||||||
<string name="set_default_dialer">设为默认拨号应用</string>
|
<string name="set_default_dialer">设为默认拨号应用</string>
|
||||||
|
<string name="app_will_be_default_dialer">这个应用将被设为默认拨号应用</string>
|
||||||
<string name="uninstall_app">卸载应用</string>
|
<string name="uninstall_app">卸载应用</string>
|
||||||
<string name="silent_uninstall">静默卸载</string>
|
<string name="silent_uninstall">静默卸载</string>
|
||||||
<string name="request_uninstall">请求卸载</string>
|
<string name="request_uninstall">请求卸载</string>
|
||||||
|
|||||||
@@ -296,8 +296,9 @@
|
|||||||
<string name="keep_uninstalled_pkgs">Keep uninstalled packages</string>
|
<string name="keep_uninstalled_pkgs">Keep uninstalled packages</string>
|
||||||
<string name="clear_data">Clear data</string>
|
<string name="clear_data">Clear data</string>
|
||||||
<string name="clear_app_storage">Clear app storage</string>
|
<string name="clear_app_storage">Clear app storage</string>
|
||||||
<string name="following_app_storage_will_clear">The following app\'s storage will be cleared</string>
|
<string name="app_storage_will_be_cleared">This app\'s storage will be cleared</string>
|
||||||
<string name="set_default_dialer">Set default dialer</string>
|
<string name="set_default_dialer">Set default dialer</string>
|
||||||
|
<string name="app_will_be_default_dialer">This app will be set as the default dialer application.</string>
|
||||||
<string name="uninstall_app">Uninstall app</string>
|
<string name="uninstall_app">Uninstall app</string>
|
||||||
<string name="silent_uninstall">Silent uninstall</string>
|
<string name="silent_uninstall">Silent uninstall</string>
|
||||||
<string name="request_uninstall">Request uninstall</string>
|
<string name="request_uninstall">Request uninstall</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user