From 3d67a9ed887587349ddff86ec1b67bd99fc917a2 Mon Sep 17 00:00:00 2001 From: Felka Chang Date: Tue, 8 Sep 2020 20:58:50 +0800 Subject: Remove PackageManager.getResourcesForApplicationAsUser API To switch another user to do something should create the context of the specified user by using Context.createContextAsUser rather than call *AsUser API directly. Test: make -j droid cts gts vts Test: make -j docs Test: atest SystemUITests \ FrameworksServicesTests:com.android.server.pm Fix: 170928809 Bug: 72863210 Change-Id: Ie1999ba9cf61a4e85b7172240cb198111389ab73 --- core/java/android/content/pm/PackageManager.java | 25 ++++++++++++++++++++-- .../android/internal/app/SuspendedAppActivity.java | 5 +++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 1a992f519286..084b49d3fcd3 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -6195,9 +6195,30 @@ public abstract class PackageManager { public abstract Resources getResourcesForApplication(@NonNull String packageName) throws NameNotFoundException; - /** @hide */ + /** + * Please don't use this function because it is no longer supported. + * + * @deprecated Instead of using this function, please use + * {@link Context#createContextAsUser(UserHandle, int)} to create the specified user + * context, {@link Context#getPackageManager()} to get PackageManager instance for + * the specified user, and then + * {@link PackageManager#getResourcesForApplication(String)} to get the same + * Resources instance. + * @see {@link Context#createContextAsUser(android.os.UserHandle, int)} + * @see {@link Context#getPackageManager()} + * @see {@link android.content.pm.PackageManager#getResourcesForApplication(java.lang.String)} + * TODO(b/170852794): mark maxTargetSdk as {@code Build.VERSION_CODES.S} + * @hide + */ @NonNull - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170928809, + publicAlternatives = "Use {@code Context#createContextAsUser(UserHandle, int)}" + + " to create the relevant user context," + + " {@link android.content.Context#getPackageManager()} and" + + " {@link android.content.pm.PackageManager#getResourcesForApplication(" + + "java.lang.String)}" + + " instead.") + @Deprecated public abstract Resources getResourcesForApplicationAsUser(@NonNull String packageName, @UserIdInt int userId) throws NameNotFoundException; diff --git a/core/java/com/android/internal/app/SuspendedAppActivity.java b/core/java/com/android/internal/app/SuspendedAppActivity.java index d8eaeda2b549..52dc7e646d29 100644 --- a/core/java/com/android/internal/app/SuspendedAppActivity.java +++ b/core/java/com/android/internal/app/SuspendedAppActivity.java @@ -191,8 +191,9 @@ public class SuspendedAppActivity extends AlertActivity mOnUnsuspend = intent.getParcelableExtra(EXTRA_UNSUSPEND_INTENT); if (mSuppliedDialogInfo != null) { try { - mSuspendingAppResources = mPm.getResourcesForApplicationAsUser(mSuspendingPackage, - mUserId); + mSuspendingAppResources = createContextAsUser( + UserHandle.of(mUserId), /* flags */ 0).getPackageManager() + .getResourcesForApplication(mSuspendedPackage); } catch (PackageManager.NameNotFoundException ne) { Slog.e(TAG, "Could not find resources for " + mSuspendingPackage, ne); } -- cgit v1.2.3-59-g8ed1b