diff --git a/app/src/main/java/com/bintianqi/owndroid/MyViewModel.kt b/app/src/main/java/com/bintianqi/owndroid/MyViewModel.kt index 5bc3510..654ee05 100644 --- a/app/src/main/java/com/bintianqi/owndroid/MyViewModel.kt +++ b/app/src/main/java/com/bintianqi/owndroid/MyViewModel.kt @@ -249,7 +249,7 @@ class MyViewModel(application: Application): AndroidViewModel(application) { val ucdPackages = MutableStateFlow(emptyList()) @RequiresApi(30) fun getUcdPackages() { - ucdPackages.value = DPM.getUserControlDisabledPackages(DAR).map { + ucdPackages.value = DPM.getUserControlDisabledPackages(DAR).distinct().map { getAppInfo(it) } } @@ -284,7 +284,7 @@ class MyViewModel(application: Application): AndroidViewModel(application) { val mddPackages = MutableStateFlow(emptyList()) @RequiresApi(28) fun getMddPackages() { - mddPackages.value = DPM.getMeteredDataDisabledPackages(DAR).map { getAppInfo(it) } + mddPackages.value = DPM.getMeteredDataDisabledPackages(DAR).distinct().map { getAppInfo(it) } } @RequiresApi(28) fun setPackageMdd(name: String, status: Boolean): Boolean { @@ -299,7 +299,7 @@ class MyViewModel(application: Application): AndroidViewModel(application) { val kuPackages = MutableStateFlow(emptyList()) @RequiresApi(28) fun getKuPackages() { - kuPackages.value = DPM.getKeepUninstalledPackages(DAR)?.map { getAppInfo(it) } ?: emptyList() + kuPackages.value = DPM.getKeepUninstalledPackages(DAR)?.distinct()?.map { getAppInfo(it) } ?: emptyList() } @RequiresApi(28) fun setPackageKu(name: String, status: Boolean) { @@ -327,7 +327,7 @@ class MyViewModel(application: Application): AndroidViewModel(application) { // Cross-profile widget providers val cpwProviders = MutableStateFlow(emptyList()) fun getCpwProviders() { - cpwProviders.value = DPM.getCrossProfileWidgetProviders(DAR).map { getAppInfo(it) } + cpwProviders.value = DPM.getCrossProfileWidgetProviders(DAR).distinct().map { getAppInfo(it) } } fun setCpwProvider(name: String, status: Boolean): Boolean { val result = if (status) { @@ -388,7 +388,7 @@ class MyViewModel(application: Application): AndroidViewModel(application) { @RequiresApi(34) fun getCmPolicy(): Int { return DPM.credentialManagerPolicy?.let { policy -> - cmPackages.value = policy.packageNames.map { getAppInfo(it) } + cmPackages.value = policy.packageNames.distinct().map { getAppInfo(it) } policy.policyType } ?: -1 } @@ -409,7 +409,7 @@ class MyViewModel(application: Application): AndroidViewModel(application) { val pimPackages = MutableStateFlow(emptyList()) fun getPimPackages(): Boolean { return DPM.getPermittedInputMethods(DAR).let { packages -> - pimPackages.value = packages?.map { getAppInfo(it) } ?: emptyList() + pimPackages.value = packages?.distinct()?.map { getAppInfo(it) } ?: emptyList() packages == null } } @@ -429,7 +429,7 @@ class MyViewModel(application: Application): AndroidViewModel(application) { val pasPackages = MutableStateFlow(emptyList()) fun getPasPackages(): Boolean { return DPM.getPermittedAccessibilityServices(DAR).let { packages -> - pasPackages.value = packages?.map { getAppInfo(it) } ?: emptyList() + pasPackages.value = packages?.distinct()?.map { getAppInfo(it) } ?: emptyList() packages == null } } diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/Applications.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/Applications.kt index 1920f3f..c4ffd1b 100644 --- a/app/src/main/java/com/bintianqi/owndroid/dpm/Applications.kt +++ b/app/src/main/java/com/bintianqi/owndroid/dpm/Applications.kt @@ -763,6 +763,7 @@ fun PackageFunctionScreen( val groups by appGroups.collectAsStateWithLifecycle() val packages by packagesState.collectAsStateWithLifecycle() var packageName by rememberSaveable { mutableStateOf("") } + var dialog by remember { mutableStateOf(false) } var selectedGroup by remember { mutableStateOf(null) } LaunchedEffect(Unit) { onGet() @@ -787,6 +788,7 @@ fun PackageFunctionScreen( { Text("(${it.apps.size}) ${it.name}") }, { selectedGroup = it + dialog = true expand = false } ) @@ -821,7 +823,8 @@ fun PackageFunctionScreen( } }, Modifier.fillMaxWidth().padding(horizontal = HorizontalPadding).padding(bottom = 10.dp), - packageName.isValidPackageName + packageName.isValidPackageName && + packages.find { it.name == packageName } == null ) { Text(stringResource(R.string.add)) } @@ -830,14 +833,14 @@ fun PackageFunctionScreen( } } } - if (selectedGroup != null) AlertDialog( + if (dialog) AlertDialog( text = { Column { Button({ selectedGroup!!.apps.forEach { onSet(it, true) } - selectedGroup = null + dialog = false }) { Text(stringResource(R.string.add_to_list)) } @@ -845,18 +848,18 @@ fun PackageFunctionScreen( selectedGroup!!.apps.forEach { onSet(it, false) } - selectedGroup = null + dialog = false }) { Text(stringResource(R.string.remove_from_list)) } } }, confirmButton = { - TextButton({ selectedGroup = null }) { + TextButton({ dialog = false }) { Text(stringResource(R.string.cancel)) } }, - onDismissRequest = { selectedGroup = null } + onDismissRequest = { dialog = false } ) } @@ -969,7 +972,7 @@ fun EditAppGroupScreen( packageName = "" }, Modifier.fillMaxWidth().padding(horizontal = HorizontalPadding).padding(bottom = 10.dp), - packageName.isValidPackageName + packageName.isValidPackageName && packageName !in list ) { Text(stringResource(R.string.add)) }