Add specific uninstall dialog string for work profile

Prompts the user with

"Do you want to uninstall this app from the work profile?"

when uninstalling an app where PackageInstaller was started from
the parent profile specifically targeting the child managed
profile.

Bug: 193792780

Test: manual, test app which sends DELETE action

Change-Id: I4e4295badfcd022452715e4657ce78eff027c1f9
This commit is contained in:
Winson
2021-11-17 14:00:21 -08:00
committed by Winson Chiu
parent 405a9f1c65
commit 3f4b629cd1
3 changed files with 28 additions and 6 deletions

View File

@@ -112,6 +112,8 @@
<!-- [CHAR LIMIT=none] -->
<string name="uninstall_application_text_user">Do you want to uninstall this app for the user <xliff:g id="username">%1$s</xliff:g>?</string>
<!-- [CHAR LIMIT=none] -->
<string name="uninstall_application_text_current_user_work_profile">Do you want to uninstall this app from your work profile?</string>
<!-- [CHAR LIMIT=none] -->
<string name="uninstall_update_text">Replace this app with the factory version? All data will be removed.</string>
<!-- [CHAR LIMIT=none] -->
<string name="uninstall_update_text_multiuser">Replace this app with the factory version? All data will be removed. This affects all users of this device, including those with work profiles.</string>

View File

@@ -31,6 +31,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.os.Bundle;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;
@@ -125,6 +126,7 @@ public class UninstallAlertDialogFragment extends DialogFragment implements
final boolean isUpdate =
((dialogInfo.appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0);
final UserHandle myUserHandle = Process.myUserHandle();
UserManager userManager = UserManager.get(getActivity());
if (isUpdate) {
if (isSingleUser(userManager)) {
@@ -135,10 +137,17 @@ public class UninstallAlertDialogFragment extends DialogFragment implements
} else {
if (dialogInfo.allUsers && !isSingleUser(userManager)) {
messageBuilder.append(getString(R.string.uninstall_application_text_all_users));
} else if (!dialogInfo.user.equals(android.os.Process.myUserHandle())) {
} else if (!dialogInfo.user.equals(myUserHandle)) {
UserInfo userInfo = userManager.getUserInfo(dialogInfo.user.getIdentifier());
messageBuilder.append(
getString(R.string.uninstall_application_text_user, userInfo.name));
if (userInfo.isManagedProfile()
&& userInfo.profileGroupId == myUserHandle.getIdentifier()) {
messageBuilder.append(
getString(R.string.uninstall_application_text_current_user_work_profile,
userInfo.name));
} else {
messageBuilder.append(
getString(R.string.uninstall_application_text_user, userInfo.name));
}
} else {
messageBuilder.append(getString(R.string.uninstall_application_text));
}

View File

@@ -21,7 +21,10 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.os.Bundle;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import androidx.leanback.app.GuidedStepFragment;
import androidx.leanback.widget.GuidanceStylist;
import androidx.leanback.widget.GuidedAction;
@@ -59,6 +62,7 @@ public class UninstallAlertFragment extends GuidedStepFragment {
final boolean isUpdate =
((dialogInfo.appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0);
final UserHandle myUserHandle = Process.myUserHandle();
UserManager userManager = UserManager.get(getActivity());
if (isUpdate) {
if (isSingleUser(userManager)) {
@@ -69,10 +73,17 @@ public class UninstallAlertFragment extends GuidedStepFragment {
} else {
if (dialogInfo.allUsers && !isSingleUser(userManager)) {
messageBuilder.append(getString(R.string.uninstall_application_text_all_users));
} else if (!dialogInfo.user.equals(android.os.Process.myUserHandle())) {
} else if (!dialogInfo.user.equals(myUserHandle)) {
UserInfo userInfo = userManager.getUserInfo(dialogInfo.user.getIdentifier());
messageBuilder.append(
getString(R.string.uninstall_application_text_user, userInfo.name));
if (userInfo.isManagedProfile()
&& userInfo.profileGroupId == myUserHandle.getIdentifier()) {
messageBuilder.append(
getString(R.string.uninstall_application_text_current_user_work_profile,
userInfo.name));
} else {
messageBuilder.append(
getString(R.string.uninstall_application_text_user, userInfo.name));
}
} else {
messageBuilder.append(getString(R.string.uninstall_application_text));
}