diff options
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/app/ActivityThread.java | 3 | ||||
-rw-r--r-- | core/java/android/app/ContextImpl.java | 34 | ||||
-rw-r--r-- | core/java/android/app/ResourcesManager.java | 20 | ||||
-rw-r--r-- | core/java/android/hardware/display/DisplayManagerGlobal.java | 11 | ||||
-rw-r--r-- | core/java/android/view/Display.java | 5 |
5 files changed, 37 insertions, 36 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 2a98b6c..c18176d 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -2438,7 +2438,8 @@ public final class ActivityThread { && r.packageInfo.mPackageName.contains(pkgName)) { for (int id : dm.getDisplayIds()) { if (id != Display.DEFAULT_DISPLAY) { - Display display = dm.getRealDisplay(id, r.overrideConfig); + Display display = + dm.getCompatibleDisplay(id, appContext.getDisplayAdjustments(id)); baseContext = appContext.createDisplayContext(display); break; } diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 3b1ccd2..829b098 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -1597,7 +1597,7 @@ class ContextImpl extends Context { final boolean restricted = (flags & CONTEXT_RESTRICTED) == CONTEXT_RESTRICTED; ContextImpl c = new ContextImpl(this, mMainThread, pi, mActivityToken, new UserHandle(UserHandle.getUserId(application.uid)), restricted, - mDisplay, null); + mDisplay, null, Display.INVALID_DISPLAY); if (c.mResources != null) { return c; } @@ -1620,14 +1620,14 @@ class ContextImpl extends Context { final boolean restricted = (flags & CONTEXT_RESTRICTED) == CONTEXT_RESTRICTED; if (packageName.equals("system") || packageName.equals("android")) { return new ContextImpl(this, mMainThread, mPackageInfo, mActivityToken, - user, restricted, mDisplay, null); + user, restricted, mDisplay, null, Display.INVALID_DISPLAY); } LoadedApk pi = mMainThread.getPackageInfo(packageName, mResources.getCompatibilityInfo(), flags | CONTEXT_REGISTER_PACKAGE, user.getIdentifier()); if (pi != null) { ContextImpl c = new ContextImpl(this, mMainThread, pi, mActivityToken, - user, restricted, mDisplay, null); + user, restricted, mDisplay, null, Display.INVALID_DISPLAY); if (c.mResources != null) { return c; } @@ -1645,7 +1645,7 @@ class ContextImpl extends Context { } return new ContextImpl(this, mMainThread, mPackageInfo, mActivityToken, - mUser, mRestricted, mDisplay, overrideConfiguration); + mUser, mRestricted, mDisplay, overrideConfiguration, Display.INVALID_DISPLAY); } @Override @@ -1655,15 +1655,15 @@ class ContextImpl extends Context { } return new ContextImpl(this, mMainThread, mPackageInfo, mActivityToken, - mUser, mRestricted, display, null); + mUser, mRestricted, display, null, Display.INVALID_DISPLAY); } Display getDisplay() { if (mDisplay != null) { return mDisplay; } - DisplayManager dm = getSystemService(DisplayManager.class); - return dm.getDisplay(Display.DEFAULT_DISPLAY); + return ResourcesManager.getInstance().getAdjustedDisplay( + Display.DEFAULT_DISPLAY, mDisplayAdjustments); } private int getDisplayId() { @@ -1708,7 +1708,7 @@ class ContextImpl extends Context { static ContextImpl createSystemContext(ActivityThread mainThread) { LoadedApk packageInfo = new LoadedApk(mainThread); ContextImpl context = new ContextImpl(null, mainThread, - packageInfo, null, null, false, null, null); + packageInfo, null, null, false, null, null, Display.INVALID_DISPLAY); context.mResources.updateConfiguration(context.mResourcesManager.getConfiguration(), context.mResourcesManager.getDisplayMetricsLocked()); return context; @@ -1717,21 +1717,19 @@ class ContextImpl extends Context { static ContextImpl createAppContext(ActivityThread mainThread, LoadedApk packageInfo) { if (packageInfo == null) throw new IllegalArgumentException("packageInfo"); return new ContextImpl(null, mainThread, - packageInfo, null, null, false, null, null); + packageInfo, null, null, false, null, null, Display.INVALID_DISPLAY); } static ContextImpl createActivityContext(ActivityThread mainThread, LoadedApk packageInfo, int displayId, Configuration overrideConfiguration) { if (packageInfo == null) throw new IllegalArgumentException("packageInfo"); - final Display display = ResourcesManager.getInstance().getAdjustedDisplay( - displayId, overrideConfiguration); - return new ContextImpl(null, mainThread, packageInfo, null, null, false, display, - overrideConfiguration); + return new ContextImpl(null, mainThread, packageInfo, null, null, false, + null, overrideConfiguration, displayId); } private ContextImpl(ContextImpl container, ActivityThread mainThread, LoadedApk packageInfo, IBinder activityToken, UserHandle user, boolean restricted, - Display display, Configuration overrideConfiguration) { + Display display, Configuration overrideConfiguration, int createDisplayWithId) { mOuterContext = this; mMainThread = mainThread; @@ -1745,9 +1743,10 @@ class ContextImpl extends Context { mPackageInfo = packageInfo; mResourcesManager = ResourcesManager.getInstance(); - mDisplay = display; - final int displayId = getDisplayId(); + final int displayId = (createDisplayWithId != Display.INVALID_DISPLAY) + ? createDisplayWithId : getDisplayId(); + CompatibilityInfo compatInfo = null; if (container != null) { compatInfo = container.getDisplayAdjustments(displayId).getCompatibilityInfo(); @@ -1760,6 +1759,9 @@ class ContextImpl extends Context { mDisplayAdjustments.setCompatibilityInfo(compatInfo); mDisplayAdjustments.setConfiguration(overrideConfiguration); + mDisplay = (createDisplayWithId == Display.INVALID_DISPLAY) ? display + : ResourcesManager.getInstance().getAdjustedDisplay(displayId, mDisplayAdjustments); + Resources resources = packageInfo.getResources(mainThread); if (resources != null) { if (displayId != Display.DEFAULT_DISPLAY diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java index 79797c9..2117597 100644 --- a/core/java/android/app/ResourcesManager.java +++ b/core/java/android/app/ResourcesManager.java @@ -31,6 +31,8 @@ import android.util.Log; import android.util.Pair; import android.util.Slog; import android.view.Display; +import android.view.DisplayAdjustments; + import java.lang.ref.WeakReference; import java.util.Locale; @@ -42,7 +44,7 @@ public class ResourcesManager { private static ResourcesManager sResourcesManager; private final ArrayMap<ResourcesKey, WeakReference<Resources> > mActiveResources = new ArrayMap<>(); - private final ArrayMap<Pair<Integer, Configuration>, WeakReference<Display>> mDisplays = + private final ArrayMap<Pair<Integer, DisplayAdjustments>, WeakReference<Display>> mDisplays = new ArrayMap<>(); CompatibilityInfo mResCompatibilityInfo; @@ -68,7 +70,8 @@ public class ResourcesManager { DisplayMetrics getDisplayMetricsLocked(int displayId) { DisplayMetrics dm = new DisplayMetrics(); - final Display display = getAdjustedDisplay(displayId, Configuration.EMPTY); + final Display display = + getAdjustedDisplay(displayId, DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS); if (display != null) { display.getMetrics(dm); } else { @@ -113,12 +116,13 @@ public class ResourcesManager { * available. * * @param displayId display Id. - * @param overrideConfiguration override configurations. + * @param displayAdjustments display adjustments. */ - public Display getAdjustedDisplay(final int displayId, Configuration overrideConfiguration) { - final Configuration configCopy = (overrideConfiguration != null) - ? new Configuration(overrideConfiguration) : new Configuration(); - final Pair<Integer, Configuration> key = Pair.create(displayId, configCopy); + public Display getAdjustedDisplay(final int displayId, DisplayAdjustments displayAdjustments) { + final DisplayAdjustments displayAdjustmentsCopy = (displayAdjustments != null) + ? new DisplayAdjustments(displayAdjustments) : new DisplayAdjustments(); + final Pair<Integer, DisplayAdjustments> key = + Pair.create(displayId, displayAdjustmentsCopy); synchronized (this) { WeakReference<Display> wd = mDisplays.get(key); if (wd != null) { @@ -132,7 +136,7 @@ public class ResourcesManager { // may be null early in system startup return null; } - final Display display = dm.getRealDisplay(displayId, key.second); + final Display display = dm.getCompatibleDisplay(displayId, key.second); if (display != null) { mDisplays.put(key, new WeakReference<>(display)); } diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index d9f9c1e..21ba7bd 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -192,17 +192,6 @@ public final class DisplayManagerGlobal { return getCompatibleDisplay(displayId, DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS); } - /** - * Gets information about a logical display without applying any compatibility metrics. - * - * @param displayId The logical display id. - * @param configuration the configuration. - * @return The display object, or null if there is no display with the given id. - */ - public Display getRealDisplay(int displayId, Configuration configuration) { - return getCompatibleDisplay(displayId, new DisplayAdjustments(configuration)); - } - public void registerDisplayListener(DisplayListener listener, Handler handler) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java index 5a587fe..35c4192 100644 --- a/core/java/android/view/Display.java +++ b/core/java/android/view/Display.java @@ -89,6 +89,11 @@ public final class Display { public static final int DEFAULT_DISPLAY = 0; /** + * Invalid display id. + */ + public static final int INVALID_DISPLAY = -1; + + /** * Display flag: Indicates that the display supports compositing content * that is stored in protected graphics buffers. * <p> |