From 2cae9f6275ac331a0a1be32560566e052b7d065c Mon Sep 17 00:00:00 2001 From: Robin Lee Date: Thu, 26 Nov 2020 01:53:08 +0100 Subject: [PATCH] shell pm: move context creation to where it's used If something went wrong with the shell package, it's useful for pm commands to still work so that a developer is still able to put things back the way they were. Test: atest CtsNativeMediaAAudioTestCases --user-type secondary_user Bug: 159157348 Change-Id: I9d3b4f8f93496a5df2055681bd88c61adc435408 --- .../server/pm/PackageManagerShellCommand.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 2996cd13f7b15..9720819a62ab8 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -146,7 +146,7 @@ class PackageManagerShellCommand extends ShellCommand { final IPackageManager mInterface; final IPermissionManager mPermissionManager; - final Context mShellPackageContext; + final Context mContext; final private WeakHashMap mResourceCache = new WeakHashMap(); int mTargetUser; @@ -158,13 +158,7 @@ class PackageManagerShellCommand extends ShellCommand { PackageManagerService service, IPermissionManager permissionManager, Context context) { mInterface = service; mPermissionManager = permissionManager; - try { - mShellPackageContext = context.createPackageContextAsUser( - "com.android.shell", 0, Binder.getCallingUserHandle()); - } catch (NameNotFoundException e) { - // should not happen - throw new RuntimeException(e); - } + mContext = context; } @Override @@ -487,8 +481,17 @@ class PackageManagerShellCommand extends ShellCommand { return 1; } + final Context shellPackageContext; + try { + shellPackageContext = mContext.createPackageContextAsUser( + "com.android.shell", 0, Binder.getCallingUserHandle()); + } catch (NameNotFoundException e) { + // should not happen + throw new RuntimeException(e); + } + final LocalIntentReceiver receiver = new LocalIntentReceiver(); - RollbackManager rm = mShellPackageContext.getSystemService(RollbackManager.class); + RollbackManager rm = shellPackageContext.getSystemService(RollbackManager.class); RollbackInfo rollback = null; for (RollbackInfo r : rm.getAvailableRollbacks()) { for (PackageRollbackInfo info : r.getPackages()) {