summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/widget/FloatingToolbar.java78
1 files changed, 33 insertions, 45 deletions
diff --git a/core/java/com/android/internal/widget/FloatingToolbar.java b/core/java/com/android/internal/widget/FloatingToolbar.java
index 4143eb586c1c..3a004690d2cb 100644
--- a/core/java/com/android/internal/widget/FloatingToolbar.java
+++ b/core/java/com/android/internal/widget/FloatingToolbar.java
@@ -90,7 +90,6 @@ public final class FloatingToolbar {
};
private final Context mContext;
- private final Window mWindow;
private final FloatingToolbarPopup mPopup;
private final Rect mContentRect = new Rect();
@@ -103,31 +102,26 @@ public final class FloatingToolbar {
private int mSuggestedWidth;
private boolean mWidthChanged = true;
- private final OnLayoutChangeListener mOrientationChangeHandler = new OnLayoutChangeListener() {
-
- private final Rect mNewRect = new Rect();
- private final Rect mOldRect = new Rect();
-
+ private final ComponentCallbacks mOrientationChangeHandler = new ComponentCallbacks() {
@Override
- public void onLayoutChange(
- View view,
- int newLeft, int newRight, int newTop, int newBottom,
- int oldLeft, int oldRight, int oldTop, int oldBottom) {
- mNewRect.set(newLeft, newRight, newTop, newBottom);
- mOldRect.set(oldLeft, oldRight, oldTop, oldBottom);
- if (mPopup.isShowing() && !mNewRect.equals(mOldRect)) {
+ public void onConfigurationChanged(Configuration newConfig) {
+ if (mPopup.isShowing() && mPopup.viewPortHasChanged()) {
mWidthChanged = true;
updateLayout();
}
}
+
+ @Override
+ public void onLowMemory() {}
};
/**
* Initializes a floating toolbar.
*/
public FloatingToolbar(Context context, Window window) {
- mContext = applyDefaultTheme(Preconditions.checkNotNull(context));
- mWindow = Preconditions.checkNotNull(window);
+ Preconditions.checkNotNull(context);
+ Preconditions.checkNotNull(window);
+ mContext = applyDefaultTheme(context);
mPopup = new FloatingToolbarPopup(mContext, window.getDecorView());
}
@@ -185,8 +179,21 @@ public final class FloatingToolbar {
* Shows this floating toolbar.
*/
public FloatingToolbar show() {
- registerOrientationHandler();
- doShow();
+ mContext.unregisterComponentCallbacks(mOrientationChangeHandler);
+ mContext.registerComponentCallbacks(mOrientationChangeHandler);
+ List<MenuItem> menuItems = getVisibleAndEnabledMenuItems(mMenu);
+ if (!isCurrentlyShowing(menuItems) || mWidthChanged) {
+ mPopup.dismiss();
+ mPopup.layoutMenuItems(menuItems, mMenuItemClickListener, mSuggestedWidth);
+ mShowingMenuItems = getShowingMenuItemsReferences(menuItems);
+ }
+ if (!mPopup.isShowing()) {
+ mPopup.show(mContentRect);
+ } else if (!mPreviousContentRect.equals(mContentRect)) {
+ mPopup.updateCoordinates(mContentRect);
+ }
+ mWidthChanged = false;
+ mPreviousContentRect.set(mContentRect);
return this;
}
@@ -196,7 +203,8 @@ public final class FloatingToolbar {
*/
public FloatingToolbar updateLayout() {
if (mPopup.isShowing()) {
- doShow();
+ // show() performs all the logic we need here.
+ show();
}
return this;
}
@@ -205,7 +213,7 @@ public final class FloatingToolbar {
* Dismisses this floating toolbar.
*/
public void dismiss() {
- unregisterOrientationHandler();
+ mContext.unregisterComponentCallbacks(mOrientationChangeHandler);
mPopup.dismiss();
}
@@ -231,22 +239,6 @@ public final class FloatingToolbar {
return mPopup.isHidden();
}
- private void doShow() {
- List<MenuItem> menuItems = getVisibleAndEnabledMenuItems(mMenu);
- if (!isCurrentlyShowing(menuItems) || mWidthChanged) {
- mPopup.dismiss();
- mPopup.layoutMenuItems(menuItems, mMenuItemClickListener, mSuggestedWidth);
- mShowingMenuItems = getShowingMenuItemsReferences(menuItems);
- }
- if (!mPopup.isShowing()) {
- mPopup.show(mContentRect);
- } else if (!mPreviousContentRect.equals(mContentRect)) {
- mPopup.updateCoordinates(mContentRect);
- }
- mWidthChanged = false;
- mPreviousContentRect.set(mContentRect);
- }
-
/**
* Returns true if this floating toolbar is currently showing the specified menu items.
*/
@@ -286,15 +278,6 @@ public final class FloatingToolbar {
return references;
}
- private void registerOrientationHandler() {
- unregisterOrientationHandler()
- mWindow.getDecorView.addOnLayoutChangeListener(mOrientationChangeHandler);
- }
-
- private void unregisterOrientationHandler() {
- mWindow.getDecorView.removeOnLayoutChangeListener(mOrientationChangeHandler);
- }
-
/**
* A popup window used by the floating toolbar.
@@ -1026,6 +1009,11 @@ public final class FloatingToolbar {
mParent.getWindowVisibleDisplayFrame(mViewPortOnScreen);
}
+ private boolean viewPortHasChanged() {
+ mParent.getWindowVisibleDisplayFrame(mTmpRect);
+ return !mTmpRect.equals(mViewPortOnScreen);
+ }
+
private int getAdjustedToolbarWidth(int suggestedWidth) {
int width = suggestedWidth;
refreshViewPort();
@@ -1670,4 +1658,4 @@ public final class FloatingToolbar {
a.recycle();
return new ContextThemeWrapper(originalContext, themeId);
}
-}
+} \ No newline at end of file