From 6bc12244480fcdeca84080d5382d63eb2b992883 Mon Sep 17 00:00:00 2001 From: Clara Bayarri Date: Tue, 16 Jun 2015 18:04:55 +0100 Subject: [PATCH] Fix Select All Option is truncated when device goes from landscape to portrait We were not taking into account configuration changes to update the available space for the toolbar. Bug: 21816857 Change-Id: I0f346e8eecb66ab788d1500239d5c1e020b87f97 --- .../internal/widget/FloatingToolbar.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/core/java/com/android/internal/widget/FloatingToolbar.java b/core/java/com/android/internal/widget/FloatingToolbar.java index 53ebc23bc3c18..65f2f53f8987c 100644 --- a/core/java/com/android/internal/widget/FloatingToolbar.java +++ b/core/java/com/android/internal/widget/FloatingToolbar.java @@ -20,7 +20,9 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; +import android.content.ComponentCallbacks; import android.content.Context; +import android.content.res.Configuration; import android.graphics.Color; import android.graphics.Point; import android.graphics.Rect; @@ -89,6 +91,19 @@ public final class FloatingToolbar { private int mSuggestedWidth; private boolean mWidthChanged = true; + private final ComponentCallbacks mOrientationChangeHandler = new ComponentCallbacks() { + @Override + public void onConfigurationChanged(Configuration newConfig) { + if (mPopup.isShowing() && mPopup.viewPortHasChanged()) { + mWidthChanged = true; + updateLayout(); + } + } + + @Override + public void onLowMemory() {} + }; + /** * Initializes a floating toolbar. */ @@ -151,6 +166,8 @@ public final class FloatingToolbar { * Shows this floating toolbar. */ public FloatingToolbar show() { + mContext.unregisterComponentCallbacks(mOrientationChangeHandler); + mContext.registerComponentCallbacks(mOrientationChangeHandler); List menuItems = getVisibleAndEnabledMenuItems(mMenu); if (!isCurrentlyShowing(menuItems) || mWidthChanged) { mPopup.dismiss(); @@ -181,6 +198,7 @@ public final class FloatingToolbar { * Dismisses this floating toolbar. */ public void dismiss() { + mContext.unregisterComponentCallbacks(mOrientationChangeHandler); mPopup.dismiss(); } @@ -329,6 +347,7 @@ public final class FloatingToolbar { private final Rect mViewPort = new Rect(); private final Point mCoords = new Point(); + private final Rect mTmpRect = new Rect(); private final Region mTouchableRegion = new Region(); private final ViewTreeObserver.OnComputeInternalInsetsListener mInsetsComputer = @@ -873,6 +892,11 @@ public final class FloatingToolbar { mParent.getWindowVisibleDisplayFrame(mViewPort); } + private boolean viewPortHasChanged() { + mParent.getWindowVisibleDisplayFrame(mTmpRect); + return !mTmpRect.equals(mViewPort); + } + private int getToolbarWidth(int suggestedWidth) { int width = suggestedWidth; refreshViewPort();