diff options
| author | Adam Lesinski <adamlesinski@google.com> | 2016-06-16 18:05:41 -0700 |
|---|---|---|
| committer | Adam Lesinski <adamlesinski@google.com> | 2016-06-21 17:55:58 -0700 |
| commit | 4ece3d6bb18a609afcd0e82f0340b7d36ba24eea (patch) | |
| tree | 5cdbf44c4ed33767fe334feca6add5d106f40714 /core/java/android/view | |
| parent | f184789ae9154059a2b74cab386a65b04cefc9c0 (diff) | |
ContextImpl: Keep DisplayAdjustments and Display in sync
Make sure that when our Resources get updated, that DisplayAdjustment
and Display properly reflect the potentially new screen dimensions.
Bug:28388969
Change-Id: I340550ea094ece87abc8790dd46aaa60ab3cedd3
Diffstat (limited to 'core/java/android/view')
| -rw-r--r-- | core/java/android/view/DisplayAdjustments.java | 8 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 24 | ||||
| -rw-r--r-- | core/java/android/view/WindowManagerImpl.java | 20 |
3 files changed, 26 insertions, 26 deletions
diff --git a/core/java/android/view/DisplayAdjustments.java b/core/java/android/view/DisplayAdjustments.java index 272740fb6c01..6cc0508b5832 100644 --- a/core/java/android/view/DisplayAdjustments.java +++ b/core/java/android/view/DisplayAdjustments.java @@ -23,8 +23,6 @@ import java.util.Objects; /** @hide */ public class DisplayAdjustments { - public static final boolean DEVELOPMENT_RESOURCES_DEPEND_ON_ACTIVITY_TOKEN = false; - public static final DisplayAdjustments DEFAULT_DISPLAY_ADJUSTMENTS = new DisplayAdjustments(); private volatile CompatibilityInfo mCompatInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO; @@ -74,10 +72,8 @@ public class DisplayAdjustments { @Override public int hashCode() { int hash = 17; - hash = hash * 31 + mCompatInfo.hashCode(); - if (DEVELOPMENT_RESOURCES_DEPEND_ON_ACTIVITY_TOKEN) { - hash = hash * 31 + (mConfiguration == null ? 0 : mConfiguration.hashCode()); - } + hash = hash * 31 + Objects.hashCode(mCompatInfo); + hash = hash * 31 + Objects.hashCode(mConfiguration); return hash; } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 48bdcb2e6720..b3daa16dd86f 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -26,7 +26,9 @@ import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY; import android.Manifest; import android.animation.LayoutTransition; +import android.annotation.NonNull; import android.app.ActivityManagerNative; +import android.app.ResourcesManager; import android.content.ClipDescription; import android.content.ComponentCallbacks; import android.content.Context; @@ -163,7 +165,7 @@ public final class ViewRootImpl implements ViewParent, final ArrayList<WindowCallbacks> mWindowCallbacks = new ArrayList<>(); final Context mContext; final IWindowSession mWindowSession; - final Display mDisplay; + @NonNull Display mDisplay; final DisplayManager mDisplayManager; final String mBasePackageName; @@ -307,8 +309,6 @@ public final class ViewRootImpl implements ViewParent, boolean mAdded; boolean mAddedTouchMode; - final DisplayAdjustments mDisplayAdjustments; - // These are accessed by multiple threads. final Rect mWinFrame; // frame given by window manager. @@ -412,9 +412,6 @@ public final class ViewRootImpl implements ViewParent, mWindowSession = WindowManagerGlobal.getWindowSession(); mDisplay = display; mBasePackageName = context.getBasePackageName(); - - mDisplayAdjustments = display.getDisplayAdjustments(); - mThread = Thread.currentThread(); mLocation = new WindowLeaked(null); mLocation.fillInStackTrace(); @@ -588,7 +585,8 @@ public final class ViewRootImpl implements ViewParent, attrs.setSurfaceInsets(view, false /*manual*/, true /*preservePrevious*/); } - CompatibilityInfo compatibilityInfo = mDisplayAdjustments.getCompatibilityInfo(); + CompatibilityInfo compatibilityInfo = + mDisplay.getDisplayAdjustments().getCompatibilityInfo(); mTranslator = compatibilityInfo.getTranslator(); // If the application owns the surface, don't enable hardware acceleration @@ -1468,7 +1466,8 @@ public final class ViewRootImpl implements ViewParent, surfaceChanged = true; params = lp; } - CompatibilityInfo compatibilityInfo = mDisplayAdjustments.getCompatibilityInfo(); + CompatibilityInfo compatibilityInfo = + mDisplay.getDisplayAdjustments().getCompatibilityInfo(); if (compatibilityInfo.supportsScreen() == mLastInCompatMode) { params = lp; mFullRedrawNeeded = true; @@ -3306,7 +3305,7 @@ public final class ViewRootImpl implements ViewParent, + mWindowAttributes.getTitle() + ": " + config); - CompatibilityInfo ci = mDisplayAdjustments.getCompatibilityInfo(); + CompatibilityInfo ci = mDisplay.getDisplayAdjustments().getCompatibilityInfo(); if (!ci.equals(CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO)) { config = new Configuration(config); ci.applyToConfiguration(mNoncompatDensity, config); @@ -3321,8 +3320,13 @@ public final class ViewRootImpl implements ViewParent, // At this point the resources have been updated to // have the most recent config, whatever that is. Use // the one in them which may be newer. - config = mView.getResources().getConfiguration(); + final Resources localResources = mView.getResources(); + config = localResources.getConfiguration(); if (force || mLastConfiguration.diff(config) != 0) { + // Update the display with new DisplayAdjustments. + mDisplay = ResourcesManager.getInstance().getAdjustedDisplay( + mDisplay.getDisplayId(), localResources.getDisplayAdjustments()); + final int lastLayoutDirection = mLastConfiguration.getLayoutDirection(); final int currentLayoutDirection = config.getLayoutDirection(); mLastConfiguration.setTo(config); diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index f8c7d68bd394..dd4e09685362 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -55,26 +55,26 @@ import java.util.List; */ public final class WindowManagerImpl implements WindowManager { private final WindowManagerGlobal mGlobal = WindowManagerGlobal.getInstance(); - private final Display mDisplay; + private final Context mContext; private final Window mParentWindow; private IBinder mDefaultToken; - public WindowManagerImpl(Display display) { - this(display, null); + public WindowManagerImpl(Context context) { + this(context, null); } - private WindowManagerImpl(Display display, Window parentWindow) { - mDisplay = display; + private WindowManagerImpl(Context context, Window parentWindow) { + mContext = context; mParentWindow = parentWindow; } public WindowManagerImpl createLocalWindowManager(Window parentWindow) { - return new WindowManagerImpl(mDisplay, parentWindow); + return new WindowManagerImpl(mContext, parentWindow); } - public WindowManagerImpl createPresentationWindowManager(Display display) { - return new WindowManagerImpl(display, mParentWindow); + public WindowManagerImpl createPresentationWindowManager(Context displayContext) { + return new WindowManagerImpl(displayContext, mParentWindow); } /** @@ -90,7 +90,7 @@ public final class WindowManagerImpl implements WindowManager { @Override public void addView(@NonNull View view, @NonNull ViewGroup.LayoutParams params) { applyDefaultToken(params); - mGlobal.addView(view, params, mDisplay, mParentWindow); + mGlobal.addView(view, params, mContext.getDisplay(), mParentWindow); } @Override @@ -144,6 +144,6 @@ public final class WindowManagerImpl implements WindowManager { @Override public Display getDefaultDisplay() { - return mDisplay; + return mContext.getDisplay(); } } |
