diff options
Diffstat (limited to 'core/java/android/app/ContextImpl.java')
| -rw-r--r-- | core/java/android/app/ContextImpl.java | 67 |
1 files changed, 41 insertions, 26 deletions
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index d5bc9b0b213a..eb2b2bca8ca9 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -204,6 +204,9 @@ class ContextImpl extends Context { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private final String mOpPackageName; + /** If of feature this context is for */ + private final @Nullable String mFeatureId; + private final @NonNull ResourcesManager mResourcesManager; @UnsupportedAppUsage private @NonNull Resources mResources; @@ -395,6 +398,12 @@ class ContextImpl extends Context { return mOpPackageName != null ? mOpPackageName : getBasePackageName(); } + /** @hide */ + @Override + public @Nullable String getFeatureId() { + return mFeatureId; + } + @Override public ApplicationInfo getApplicationInfo() { if (mPackageInfo != null) { @@ -2159,7 +2168,7 @@ class ContextImpl extends Context { LoadedApk pi = mMainThread.getPackageInfo(application, mResources.getCompatibilityInfo(), flags | CONTEXT_REGISTER_PACKAGE); if (pi != null) { - ContextImpl c = new ContextImpl(this, mMainThread, pi, null, mActivityToken, + ContextImpl c = new ContextImpl(this, mMainThread, pi, null, null, mActivityToken, new UserHandle(UserHandle.getUserId(application.uid)), flags, null, null); final int displayId = getDisplayId(); @@ -2187,15 +2196,15 @@ class ContextImpl extends Context { if (packageName.equals("system") || packageName.equals("android")) { // The system resources are loaded in every application, so we can safely copy // the context without reloading Resources. - return new ContextImpl(this, mMainThread, mPackageInfo, null, mActivityToken, user, - flags, null, null); + return new ContextImpl(this, mMainThread, mPackageInfo, mFeatureId, null, + mActivityToken, user, flags, null, null); } LoadedApk pi = mMainThread.getPackageInfo(packageName, mResources.getCompatibilityInfo(), flags | CONTEXT_REGISTER_PACKAGE, user.getIdentifier()); if (pi != null) { - ContextImpl c = new ContextImpl(this, mMainThread, pi, null, mActivityToken, user, - flags, null, null); + ContextImpl c = new ContextImpl(this, mMainThread, pi, mFeatureId, null, + mActivityToken, user, flags, null, null); final int displayId = getDisplayId(); @@ -2230,8 +2239,8 @@ class ContextImpl extends Context { final ClassLoader classLoader = mPackageInfo.getSplitClassLoader(splitName); final String[] paths = mPackageInfo.getSplitPaths(splitName); - final ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, splitName, - mActivityToken, mUser, mFlags, classLoader, null); + final ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, + mFeatureId, splitName, mActivityToken, mUser, mFlags, classLoader, null); final int displayId = getDisplayId(); @@ -2254,8 +2263,8 @@ class ContextImpl extends Context { throw new IllegalArgumentException("overrideConfiguration must not be null"); } - ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mSplitName, - mActivityToken, mUser, mFlags, mClassLoader, null); + ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mFeatureId, + mSplitName, mActivityToken, mUser, mFlags, mClassLoader, null); final int displayId = getDisplayId(); context.setResources(createResources(mActivityToken, mPackageInfo, mSplitName, displayId, @@ -2269,8 +2278,8 @@ class ContextImpl extends Context { throw new IllegalArgumentException("display must not be null"); } - ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mSplitName, - mActivityToken, mUser, mFlags, mClassLoader, null); + ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mFeatureId, + mSplitName, mActivityToken, mUser, mFlags, mClassLoader, null); final int displayId = display.getDisplayId(); context.setResources(createResources(mActivityToken, mPackageInfo, mSplitName, displayId, @@ -2280,19 +2289,25 @@ class ContextImpl extends Context { } @Override + public @NonNull Context createFeatureContext(@Nullable String featureId) { + return new ContextImpl(this, mMainThread, mPackageInfo, featureId, mSplitName, + mActivityToken, mUser, mFlags, mClassLoader, null); + } + + @Override public Context createDeviceProtectedStorageContext() { final int flags = (mFlags & ~Context.CONTEXT_CREDENTIAL_PROTECTED_STORAGE) | Context.CONTEXT_DEVICE_PROTECTED_STORAGE; - return new ContextImpl(this, mMainThread, mPackageInfo, mSplitName, mActivityToken, mUser, - flags, mClassLoader, null); + return new ContextImpl(this, mMainThread, mPackageInfo, mFeatureId, mSplitName, + mActivityToken, mUser, flags, mClassLoader, null); } @Override public Context createCredentialProtectedStorageContext() { final int flags = (mFlags & ~Context.CONTEXT_DEVICE_PROTECTED_STORAGE) | Context.CONTEXT_CREDENTIAL_PROTECTED_STORAGE; - return new ContextImpl(this, mMainThread, mPackageInfo, mSplitName, mActivityToken, mUser, - flags, mClassLoader, null); + return new ContextImpl(this, mMainThread, mPackageInfo, mFeatureId, mSplitName, + mActivityToken, mUser, flags, mClassLoader, null); } @Override @@ -2436,8 +2451,8 @@ class ContextImpl extends Context { @UnsupportedAppUsage static ContextImpl createSystemContext(ActivityThread mainThread) { LoadedApk packageInfo = new LoadedApk(mainThread); - ContextImpl context = new ContextImpl(null, mainThread, packageInfo, null, null, null, 0, - null, null); + ContextImpl context = new ContextImpl(null, mainThread, packageInfo, null, null, null, null, + 0, null, null); context.setResources(packageInfo.getResources()); context.mResources.updateConfiguration(context.mResourcesManager.getConfiguration(), context.mResourcesManager.getDisplayMetrics()); @@ -2454,7 +2469,7 @@ class ContextImpl extends Context { static ContextImpl createSystemUiContext(ContextImpl systemContext, int displayId) { final LoadedApk packageInfo = systemContext.mPackageInfo; ContextImpl context = new ContextImpl(null, systemContext.mMainThread, packageInfo, null, - null, null, 0, null, null); + null, null, null, 0, null, null); context.setResources(createResources(null, packageInfo, null, displayId, null, packageInfo.getCompatibilityInfo())); context.updateDisplay(displayId); @@ -2477,8 +2492,8 @@ class ContextImpl extends Context { static ContextImpl createAppContext(ActivityThread mainThread, LoadedApk packageInfo, String opPackageName) { if (packageInfo == null) throw new IllegalArgumentException("packageInfo"); - ContextImpl context = new ContextImpl(null, mainThread, packageInfo, null, null, null, 0, - null, opPackageName); + ContextImpl context = new ContextImpl(null, mainThread, packageInfo, null, null, null, null, + 0, null, opPackageName); context.setResources(packageInfo.getResources()); return context; } @@ -2505,8 +2520,8 @@ class ContextImpl extends Context { } } - ContextImpl context = new ContextImpl(null, mainThread, packageInfo, activityInfo.splitName, - activityToken, null, 0, classLoader, null); + ContextImpl context = new ContextImpl(null, mainThread, packageInfo, null, + activityInfo.splitName, activityToken, null, 0, classLoader, null); // Clamp display ID to DEFAULT_DISPLAY if it is INVALID_DISPLAY. displayId = (displayId != Display.INVALID_DISPLAY) ? displayId : Display.DEFAULT_DISPLAY; @@ -2534,9 +2549,9 @@ class ContextImpl extends Context { } private ContextImpl(@Nullable ContextImpl container, @NonNull ActivityThread mainThread, - @NonNull LoadedApk packageInfo, @Nullable String splitName, - @Nullable IBinder activityToken, @Nullable UserHandle user, int flags, - @Nullable ClassLoader classLoader, @Nullable String overrideOpPackageName) { + @NonNull LoadedApk packageInfo, @Nullable String featureId, + @Nullable String splitName, @Nullable IBinder activityToken, @Nullable UserHandle user, + int flags, @Nullable ClassLoader classLoader, @Nullable String overrideOpPackageName) { mOuterContext = this; // If creator didn't specify which storage to use, use the default @@ -2587,7 +2602,7 @@ class ContextImpl extends Context { } mOpPackageName = overrideOpPackageName != null ? overrideOpPackageName : opPackageName; - + mFeatureId = featureId; mContentResolver = new ApplicationContentResolver(this, mainThread); } |
