Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da971080 authored by Adam Powell's avatar Adam Powell
Browse files

Fix a bug in action menu measurement

Thanks to a measurement optimization in KK, the view recycling
behavior of ActionMenuPresenter could get into a state where the
resulting ActionMenuView had changed but no layout was
requested. Explicitly request a layout during menu update. Also fix an
ancient typo.

Bug 11047996

Change-Id: I6289fd2d142ac7d2101fbec6de19b7d3d7fbd6a2
parent d6239b92
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -216,6 +216,8 @@ public class ActionMenuPresenter extends BaseMenuPresenter
        }
        super.updateMenuView(cleared);

        ((View) mMenuView).requestLayout();

        if (mMenu != null) {
            final ArrayList<MenuItemImpl> actionItems = mMenu.getActionItems();
            final int count = actionItems.size();
+2 −3
Original line number Diff line number Diff line
@@ -15,8 +15,6 @@
 */
package com.android.internal.view.menu;

import com.android.internal.R;

import android.content.Context;
import android.content.res.Configuration;
import android.content.res.TypedArray;
@@ -27,6 +25,7 @@ import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.widget.LinearLayout;
import com.android.internal.R;

/**
 * @hide
@@ -101,7 +100,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo

        // Special formatting can change whether items can fit as action buttons.
        // Kick the menu and update presenters when this changes.
        final int widthSize = MeasureSpec.getMode(widthMeasureSpec);
        final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        if (mFormatItems && mMenu != null && widthSize != mFormatItemsWidth) {
            mFormatItemsWidth = widthSize;
            mMenu.onItemsChanged(true);
+4 −1
Original line number Diff line number Diff line
@@ -1034,6 +1034,10 @@ public class MenuBuilder implements Menu {
     * to avoid inadvertent reordering that may break the app's intended design.
     */
    public void flagActionItems() {
        // Important side effect: if getVisibleItems is stale it may refresh,
        // which can affect action items staleness.
        final ArrayList<MenuItemImpl> visibleItems = getVisibleItems();

        if (!mIsActionItemsStale) {
            return;
        }
@@ -1052,7 +1056,6 @@ public class MenuBuilder implements Menu {
        if (flagged) {
            mActionItems.clear();
            mNonActionItems.clear();
            ArrayList<MenuItemImpl> visibleItems = getVisibleItems();
            final int itemsSize = visibleItems.size();
            for (int i = 0; i < itemsSize; i++) {
                MenuItemImpl item = visibleItems.get(i);