Loading core/java/android/app/ActivityThread.java +8 −4 Original line number Diff line number Diff line Loading @@ -2242,9 +2242,9 @@ public final class ActivityThread extends ClientTransactionHandler { * Resources if one has already been created. */ Resources getTopLevelResources(String resDir, String[] splitResDirs, String[] overlayDirs, String[] libDirs, int displayId, LoadedApk pkgInfo) { String[] libDirs, LoadedApk pkgInfo) { return mResourcesManager.getResources(null, resDir, splitResDirs, overlayDirs, libDirs, displayId, null, pkgInfo.getCompatibilityInfo(), pkgInfo.getClassLoader(), null); null, null, pkgInfo.getCompatibilityInfo(), pkgInfo.getClassLoader(), null); } @UnsupportedAppUsage Loading Loading @@ -5692,8 +5692,7 @@ public final class ActivityThread extends ClientTransactionHandler { // many places. final Configuration finalOverrideConfig = createNewConfigAndUpdateIfNotNull( amOverrideConfig, contextThemeWrapperOverrideConfig); mResourcesManager.updateResourcesForActivity(activityToken, finalOverrideConfig, displayId, movedToDifferentDisplay); mResourcesManager.updateResourcesForActivity(activityToken, finalOverrideConfig, displayId); activity.mConfigChangeFlags = 0; activity.mCurrentConfig = new Configuration(newConfig); Loading Loading @@ -6014,6 +6013,11 @@ public final class ActivityThread extends ClientTransactionHandler { r.mPendingOverrideConfig = null; } if (displayId == INVALID_DISPLAY) { // If INVALID_DISPLAY is passed assume that the activity should keep its current // display. displayId = r.activity.getDisplayId(); } final boolean movedToDifferentDisplay = isDifferentDisplay(r.activity, displayId); if (r.overrideConfig != null && !r.overrideConfig.isOtherSeqNewer(overrideConfig) && !movedToDifferentDisplay) { Loading core/java/android/app/ApplicationPackageManager.java +1 −2 Original line number Diff line number Diff line Loading @@ -96,7 +96,6 @@ import android.util.ArraySet; import android.util.DebugUtils; import android.util.LauncherIcons; import android.util.Log; import android.view.Display; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.Immutable; Loading Loading @@ -1748,7 +1747,7 @@ public class ApplicationPackageManager extends PackageManager { final Resources r = mContext.mMainThread.getTopLevelResources( sameUid ? app.sourceDir : app.publicSourceDir, sameUid ? app.splitSourceDirs : app.splitPublicSourceDirs, app.resourceDirs, app.sharedLibraryFiles, Display.DEFAULT_DISPLAY, app.resourceDirs, app.sharedLibraryFiles, mContext.mPackageInfo); if (r != null) { return r; Loading core/java/android/app/ContextImpl.java +46 −12 Original line number Diff line number Diff line Loading @@ -237,6 +237,15 @@ class ContextImpl extends Context { private @NonNull Resources mResources; private @Nullable Display mDisplay; // may be null if invalid display or not initialized yet. /** * If set to {@code true} the resources for this context will be configured for mDisplay which * will override the display configuration inherited from {@link #mToken} (or the global * configuration if mToken is null). Typically set for display contexts and contexts derived * from display contexts where changes to the activity display and the global configuration * display should not impact their resources. */ private boolean mForceDisplayOverrideInResources; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private final int mFlags; Loading Loading @@ -2259,8 +2268,8 @@ class ContextImpl extends Context { } private static Resources createResources(IBinder activityToken, LoadedApk pi, String splitName, int displayId, Configuration overrideConfig, CompatibilityInfo compatInfo, List<ResourcesLoader> resourcesLoader) { @Nullable Integer overrideDisplayId, Configuration overrideConfig, CompatibilityInfo compatInfo, List<ResourcesLoader> resourcesLoader) { final String[] splitResDirs; final ClassLoader classLoader; try { Loading @@ -2274,7 +2283,7 @@ class ContextImpl extends Context { splitResDirs, pi.getOverlayDirs(), pi.getApplicationInfo().sharedLibraryFiles, displayId, overrideDisplayId, overrideConfig, compatInfo, classLoader, Loading @@ -2291,8 +2300,10 @@ class ContextImpl extends Context { new UserHandle(UserHandle.getUserId(application.uid)), flags, null, null); final int displayId = getDisplayId(); final Integer overrideDisplayId = mForceDisplayOverrideInResources ? displayId : null; c.setResources(createResources(mToken, pi, null, displayId, null, c.setResources(createResources(mToken, pi, null, overrideDisplayId, null, getDisplayAdjustments(displayId).getCompatibilityInfo(), null)); if (c.mResources != null) { return c; Loading Loading @@ -2326,8 +2337,10 @@ class ContextImpl extends Context { mToken, user, flags, null, null); final int displayId = getDisplayId(); final Integer overrideDisplayId = mForceDisplayOverrideInResources ? displayId : null; c.setResources(createResources(mToken, pi, null, displayId, null, c.setResources(createResources(mToken, pi, null, overrideDisplayId, null, getDisplayAdjustments(displayId).getCompatibilityInfo(), null)); if (c.mResources != null) { return c; Loading Loading @@ -2361,15 +2374,13 @@ class ContextImpl extends Context { final ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mAttributionTag, splitName, mToken, mUser, mFlags, classLoader, null); final int displayId = getDisplayId(); context.setResources(ResourcesManager.getInstance().getResources( mToken, mPackageInfo.getResDir(), paths, mPackageInfo.getOverlayDirs(), mPackageInfo.getApplicationInfo().sharedLibraryFiles, displayId, mForceDisplayOverrideInResources ? getDisplayId() : null, null, mPackageInfo.getCompatibilityInfo(), classLoader, Loading @@ -2383,12 +2394,23 @@ class ContextImpl extends Context { throw new IllegalArgumentException("overrideConfiguration must not be null"); } if (mForceDisplayOverrideInResources) { // Ensure the resources display metrics are adjusted to match the display this context // is based on. Configuration displayAdjustedConfig = new Configuration(); displayAdjustedConfig.setTo(mDisplay.getDisplayAdjustments().getConfiguration(), ActivityInfo.CONFIG_WINDOW_CONFIGURATION, 1); displayAdjustedConfig.updateFrom(overrideConfiguration); overrideConfiguration = displayAdjustedConfig; } ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mAttributionTag, mSplitName, mToken, mUser, mFlags, mClassLoader, null); final int displayId = getDisplayId(); context.setResources(createResources(mToken, mPackageInfo, mSplitName, displayId, final Integer overrideDisplayId = mForceDisplayOverrideInResources ? displayId : null; context.setResources(createResources(mToken, mPackageInfo, mSplitName, overrideDisplayId, overrideConfiguration, getDisplayAdjustments(displayId).getCompatibilityInfo(), mResources.getLoaders())); context.mIsUiContext = isUiContext() || isOuterUiContext(); Loading @@ -2406,11 +2428,20 @@ class ContextImpl extends Context { final int displayId = display.getDisplayId(); // Ensure the resources display metrics are adjusted to match the provided display. Configuration overrideConfig = new Configuration(); overrideConfig.setTo(display.getDisplayAdjustments().getConfiguration(), ActivityInfo.CONFIG_WINDOW_CONFIGURATION, 1); context.setResources(createResources(mToken, mPackageInfo, mSplitName, displayId, null, getDisplayAdjustments(displayId).getCompatibilityInfo(), overrideConfig, display.getDisplayAdjustments().getCompatibilityInfo(), mResources.getLoaders())); context.mDisplay = display; context.mIsAssociatedWithDisplay = true; // Display contexts and any context derived from a display context should always override // the display that would otherwise be inherited from mToken (or the global configuration if // mToken is null). context.mForceDisplayOverrideInResources = true; return context; } Loading @@ -2428,8 +2459,10 @@ class ContextImpl extends Context { ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mAttributionTag, mSplitName, token, mUser, mFlags, mClassLoader, null); context.mIsUiContext = true; context.mIsAssociatedWithDisplay = true; // Window contexts receive configurations directly from the server and as such do not // need to override their display in ResourcesManager. context.mForceDisplayOverrideInResources = false; return context; } Loading Loading @@ -2772,6 +2805,7 @@ class ContextImpl extends Context { mDisplay = container.mDisplay; mIsAssociatedWithDisplay = container.mIsAssociatedWithDisplay; mIsSystemOrSystemUiContext = container.mIsSystemOrSystemUiContext; mForceDisplayOverrideInResources = container.mForceDisplayOverrideInResources; } else { mBasePackageName = packageInfo.mPackageName; ApplicationInfo ainfo = packageInfo.getApplicationInfo(); Loading core/java/android/app/LoadedApk.java +2 −3 Original line number Diff line number Diff line Loading @@ -56,7 +56,6 @@ import android.util.ArrayMap; import android.util.Log; import android.util.Slog; import android.util.SparseArray; import android.view.Display; import android.view.DisplayAdjustments; import com.android.internal.util.ArrayUtils; Loading Loading @@ -367,7 +366,7 @@ public final class LoadedApk { mResources = ResourcesManager.getInstance().getResources(null, mResDir, splitPaths, mOverlayDirs, mApplicationInfo.sharedLibraryFiles, Display.DEFAULT_DISPLAY, null, getCompatibilityInfo(), null, null, getCompatibilityInfo(), getClassLoader(), mApplication == null ? null : mApplication.getResources().getLoaders()); } Loading Loading @@ -1231,7 +1230,7 @@ public final class LoadedApk { mResources = ResourcesManager.getInstance().getResources(null, mResDir, splitPaths, mOverlayDirs, mApplicationInfo.sharedLibraryFiles, Display.DEFAULT_DISPLAY, null, getCompatibilityInfo(), null, null, getCompatibilityInfo(), getClassLoader(), null); } return mResources; Loading core/java/android/app/ResourcesManager.java +303 −131 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
core/java/android/app/ActivityThread.java +8 −4 Original line number Diff line number Diff line Loading @@ -2242,9 +2242,9 @@ public final class ActivityThread extends ClientTransactionHandler { * Resources if one has already been created. */ Resources getTopLevelResources(String resDir, String[] splitResDirs, String[] overlayDirs, String[] libDirs, int displayId, LoadedApk pkgInfo) { String[] libDirs, LoadedApk pkgInfo) { return mResourcesManager.getResources(null, resDir, splitResDirs, overlayDirs, libDirs, displayId, null, pkgInfo.getCompatibilityInfo(), pkgInfo.getClassLoader(), null); null, null, pkgInfo.getCompatibilityInfo(), pkgInfo.getClassLoader(), null); } @UnsupportedAppUsage Loading Loading @@ -5692,8 +5692,7 @@ public final class ActivityThread extends ClientTransactionHandler { // many places. final Configuration finalOverrideConfig = createNewConfigAndUpdateIfNotNull( amOverrideConfig, contextThemeWrapperOverrideConfig); mResourcesManager.updateResourcesForActivity(activityToken, finalOverrideConfig, displayId, movedToDifferentDisplay); mResourcesManager.updateResourcesForActivity(activityToken, finalOverrideConfig, displayId); activity.mConfigChangeFlags = 0; activity.mCurrentConfig = new Configuration(newConfig); Loading Loading @@ -6014,6 +6013,11 @@ public final class ActivityThread extends ClientTransactionHandler { r.mPendingOverrideConfig = null; } if (displayId == INVALID_DISPLAY) { // If INVALID_DISPLAY is passed assume that the activity should keep its current // display. displayId = r.activity.getDisplayId(); } final boolean movedToDifferentDisplay = isDifferentDisplay(r.activity, displayId); if (r.overrideConfig != null && !r.overrideConfig.isOtherSeqNewer(overrideConfig) && !movedToDifferentDisplay) { Loading
core/java/android/app/ApplicationPackageManager.java +1 −2 Original line number Diff line number Diff line Loading @@ -96,7 +96,6 @@ import android.util.ArraySet; import android.util.DebugUtils; import android.util.LauncherIcons; import android.util.Log; import android.view.Display; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.Immutable; Loading Loading @@ -1748,7 +1747,7 @@ public class ApplicationPackageManager extends PackageManager { final Resources r = mContext.mMainThread.getTopLevelResources( sameUid ? app.sourceDir : app.publicSourceDir, sameUid ? app.splitSourceDirs : app.splitPublicSourceDirs, app.resourceDirs, app.sharedLibraryFiles, Display.DEFAULT_DISPLAY, app.resourceDirs, app.sharedLibraryFiles, mContext.mPackageInfo); if (r != null) { return r; Loading
core/java/android/app/ContextImpl.java +46 −12 Original line number Diff line number Diff line Loading @@ -237,6 +237,15 @@ class ContextImpl extends Context { private @NonNull Resources mResources; private @Nullable Display mDisplay; // may be null if invalid display or not initialized yet. /** * If set to {@code true} the resources for this context will be configured for mDisplay which * will override the display configuration inherited from {@link #mToken} (or the global * configuration if mToken is null). Typically set for display contexts and contexts derived * from display contexts where changes to the activity display and the global configuration * display should not impact their resources. */ private boolean mForceDisplayOverrideInResources; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private final int mFlags; Loading Loading @@ -2259,8 +2268,8 @@ class ContextImpl extends Context { } private static Resources createResources(IBinder activityToken, LoadedApk pi, String splitName, int displayId, Configuration overrideConfig, CompatibilityInfo compatInfo, List<ResourcesLoader> resourcesLoader) { @Nullable Integer overrideDisplayId, Configuration overrideConfig, CompatibilityInfo compatInfo, List<ResourcesLoader> resourcesLoader) { final String[] splitResDirs; final ClassLoader classLoader; try { Loading @@ -2274,7 +2283,7 @@ class ContextImpl extends Context { splitResDirs, pi.getOverlayDirs(), pi.getApplicationInfo().sharedLibraryFiles, displayId, overrideDisplayId, overrideConfig, compatInfo, classLoader, Loading @@ -2291,8 +2300,10 @@ class ContextImpl extends Context { new UserHandle(UserHandle.getUserId(application.uid)), flags, null, null); final int displayId = getDisplayId(); final Integer overrideDisplayId = mForceDisplayOverrideInResources ? displayId : null; c.setResources(createResources(mToken, pi, null, displayId, null, c.setResources(createResources(mToken, pi, null, overrideDisplayId, null, getDisplayAdjustments(displayId).getCompatibilityInfo(), null)); if (c.mResources != null) { return c; Loading Loading @@ -2326,8 +2337,10 @@ class ContextImpl extends Context { mToken, user, flags, null, null); final int displayId = getDisplayId(); final Integer overrideDisplayId = mForceDisplayOverrideInResources ? displayId : null; c.setResources(createResources(mToken, pi, null, displayId, null, c.setResources(createResources(mToken, pi, null, overrideDisplayId, null, getDisplayAdjustments(displayId).getCompatibilityInfo(), null)); if (c.mResources != null) { return c; Loading Loading @@ -2361,15 +2374,13 @@ class ContextImpl extends Context { final ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mAttributionTag, splitName, mToken, mUser, mFlags, classLoader, null); final int displayId = getDisplayId(); context.setResources(ResourcesManager.getInstance().getResources( mToken, mPackageInfo.getResDir(), paths, mPackageInfo.getOverlayDirs(), mPackageInfo.getApplicationInfo().sharedLibraryFiles, displayId, mForceDisplayOverrideInResources ? getDisplayId() : null, null, mPackageInfo.getCompatibilityInfo(), classLoader, Loading @@ -2383,12 +2394,23 @@ class ContextImpl extends Context { throw new IllegalArgumentException("overrideConfiguration must not be null"); } if (mForceDisplayOverrideInResources) { // Ensure the resources display metrics are adjusted to match the display this context // is based on. Configuration displayAdjustedConfig = new Configuration(); displayAdjustedConfig.setTo(mDisplay.getDisplayAdjustments().getConfiguration(), ActivityInfo.CONFIG_WINDOW_CONFIGURATION, 1); displayAdjustedConfig.updateFrom(overrideConfiguration); overrideConfiguration = displayAdjustedConfig; } ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mAttributionTag, mSplitName, mToken, mUser, mFlags, mClassLoader, null); final int displayId = getDisplayId(); context.setResources(createResources(mToken, mPackageInfo, mSplitName, displayId, final Integer overrideDisplayId = mForceDisplayOverrideInResources ? displayId : null; context.setResources(createResources(mToken, mPackageInfo, mSplitName, overrideDisplayId, overrideConfiguration, getDisplayAdjustments(displayId).getCompatibilityInfo(), mResources.getLoaders())); context.mIsUiContext = isUiContext() || isOuterUiContext(); Loading @@ -2406,11 +2428,20 @@ class ContextImpl extends Context { final int displayId = display.getDisplayId(); // Ensure the resources display metrics are adjusted to match the provided display. Configuration overrideConfig = new Configuration(); overrideConfig.setTo(display.getDisplayAdjustments().getConfiguration(), ActivityInfo.CONFIG_WINDOW_CONFIGURATION, 1); context.setResources(createResources(mToken, mPackageInfo, mSplitName, displayId, null, getDisplayAdjustments(displayId).getCompatibilityInfo(), overrideConfig, display.getDisplayAdjustments().getCompatibilityInfo(), mResources.getLoaders())); context.mDisplay = display; context.mIsAssociatedWithDisplay = true; // Display contexts and any context derived from a display context should always override // the display that would otherwise be inherited from mToken (or the global configuration if // mToken is null). context.mForceDisplayOverrideInResources = true; return context; } Loading @@ -2428,8 +2459,10 @@ class ContextImpl extends Context { ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mAttributionTag, mSplitName, token, mUser, mFlags, mClassLoader, null); context.mIsUiContext = true; context.mIsAssociatedWithDisplay = true; // Window contexts receive configurations directly from the server and as such do not // need to override their display in ResourcesManager. context.mForceDisplayOverrideInResources = false; return context; } Loading Loading @@ -2772,6 +2805,7 @@ class ContextImpl extends Context { mDisplay = container.mDisplay; mIsAssociatedWithDisplay = container.mIsAssociatedWithDisplay; mIsSystemOrSystemUiContext = container.mIsSystemOrSystemUiContext; mForceDisplayOverrideInResources = container.mForceDisplayOverrideInResources; } else { mBasePackageName = packageInfo.mPackageName; ApplicationInfo ainfo = packageInfo.getApplicationInfo(); Loading
core/java/android/app/LoadedApk.java +2 −3 Original line number Diff line number Diff line Loading @@ -56,7 +56,6 @@ import android.util.ArrayMap; import android.util.Log; import android.util.Slog; import android.util.SparseArray; import android.view.Display; import android.view.DisplayAdjustments; import com.android.internal.util.ArrayUtils; Loading Loading @@ -367,7 +366,7 @@ public final class LoadedApk { mResources = ResourcesManager.getInstance().getResources(null, mResDir, splitPaths, mOverlayDirs, mApplicationInfo.sharedLibraryFiles, Display.DEFAULT_DISPLAY, null, getCompatibilityInfo(), null, null, getCompatibilityInfo(), getClassLoader(), mApplication == null ? null : mApplication.getResources().getLoaders()); } Loading Loading @@ -1231,7 +1230,7 @@ public final class LoadedApk { mResources = ResourcesManager.getInstance().getResources(null, mResDir, splitPaths, mOverlayDirs, mApplicationInfo.sharedLibraryFiles, Display.DEFAULT_DISPLAY, null, getCompatibilityInfo(), null, null, getCompatibilityInfo(), getClassLoader(), null); } return mResources; Loading
core/java/android/app/ResourcesManager.java +303 −131 File changed.Preview size limit exceeded, changes collapsed. Show changes