From 48279a0d729e804304210c369001beeea90f02df Mon Sep 17 00:00:00 2001 From: Ankita Vyas Date: Thu, 19 Jan 2023 08:41:18 +0000 Subject: [PATCH] AppClone: Few fixes in Cloned Apps page. - Trigger uninstall as clone user - Back navigation Test: manual Bug: 259022623 Change-Id: Ic9e0b20d371f6f0a5c70c84b3950e82ba43bc82e --- .../applications/manageapplications/CloneBackend.java | 5 +++-- .../android/settings/spa/app/appinfo/AppCreateButton.kt | 4 ++-- .../settings/spa/app/appinfo/CloneAppInfoSettings.kt | 9 ++++++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/applications/manageapplications/CloneBackend.java b/src/com/android/settings/applications/manageapplications/CloneBackend.java index 64642535d99..588d8349605 100644 --- a/src/com/android/settings/applications/manageapplications/CloneBackend.java +++ b/src/com/android/settings/applications/manageapplications/CloneBackend.java @@ -75,12 +75,13 @@ public class CloneBackend { * dialog to the user and handles actual uninstall. */ void uninstallClonedApp(String packageName, boolean allUsers, FragmentActivity activity) { - // Create new intent to launch Uninstaller activity + // Create new intent to launch Uninstaller activity. Uri packageUri = Uri.parse("package:" + packageName); Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri); uninstallIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, allUsers); uninstallIntent.putExtra(Intent.EXTRA_USER, UserHandle.of(mCloneUserId)); - activity.startActivityForResult(uninstallIntent, 0); + // Trigger uninstall as clone user. + activity.startActivityAsUser(uninstallIntent, UserHandle.of(mCloneUserId)); } /** diff --git a/src/com/android/settings/spa/app/appinfo/AppCreateButton.kt b/src/com/android/settings/spa/app/appinfo/AppCreateButton.kt index db835764d51..1414626ede3 100644 --- a/src/com/android/settings/spa/app/appinfo/AppCreateButton.kt +++ b/src/com/android/settings/spa/app/appinfo/AppCreateButton.kt @@ -16,7 +16,6 @@ package com.android.settings.spa.app.appinfo -import android.app.Activity import android.app.settings.SettingsEnums import android.content.pm.ApplicationInfo import androidx.compose.material.icons.Icons @@ -60,7 +59,8 @@ class AppCreateButton(packageInfoPresenter: PackageInfoPresenter) { enabledState.value = false val result = installCloneApp(app, cloneBackend) if (result == CloneBackend.SUCCESS) { - navController.navigate(getRoute(app.packageName, cloneBackend.cloneUserId)) + navController.navigate(getRoute(app.packageName, cloneBackend.cloneUserId), + /* popUpCurrent*/ true) } else { enabledState.value = true } diff --git a/src/com/android/settings/spa/app/appinfo/CloneAppInfoSettings.kt b/src/com/android/settings/spa/app/appinfo/CloneAppInfoSettings.kt index 6f51689c2a6..982c9748c39 100644 --- a/src/com/android/settings/spa/app/appinfo/CloneAppInfoSettings.kt +++ b/src/com/android/settings/spa/app/appinfo/CloneAppInfoSettings.kt @@ -16,19 +16,20 @@ package com.android.settings.spa.app.appinfo -import android.app.settings.SettingsEnums import android.content.pm.ApplicationInfo import android.os.Bundle import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi +import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavType import androidx.navigation.navArgument import com.android.settings.R import com.android.settingslib.spa.framework.common.SettingsPageProvider +import com.android.settingslib.spa.framework.compose.LifecycleEffect import com.android.settingslib.spa.widget.scaffold.RegularScaffold import com.android.settingslib.spaprivileged.model.app.toRoute import com.android.settingslib.spaprivileged.template.app.AppInfoProvider @@ -68,9 +69,11 @@ object CloneAppInfoSettingsProvider : SettingsPageProvider { fun getRoute(packageName: String, userId: Int): String = "$name/$packageName/$userId" } +@OptIn(ExperimentalLifecycleComposeApi::class) @Composable private fun CloneAppInfoSettings(packageInfoPresenter: PackageInfoPresenter) { - val packageInfo = packageInfoPresenter.flow.collectAsState().value ?: return + LifecycleEffect(onStart = { packageInfoPresenter.reloadPackageInfo() }) + val packageInfo = packageInfoPresenter.flow.collectAsStateWithLifecycle().value ?: return RegularScaffold( title = stringResource(R.string.application_info_label), ) {