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

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

Fix some ActionBar menu issues around config changes

Bug 6904212

Update allow-text and max item height properties for action bar menu
item views properly.

Fix an ActionMenuItemView measurement bug that could cause items to
measure too small.

Change-Id: Ibac8491f7670969b0ae4584fff5e44ebd1435abd
parent b1758cf8
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.internal.view.menu;
package com.android.internal.view.menu;


import android.content.Context;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.graphics.Rect;
import android.graphics.Rect;
@@ -79,6 +80,15 @@ public class ActionMenuItemView extends TextView
        mSavedPaddingLeft = -1;
        mSavedPaddingLeft = -1;
    }
    }


    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        mAllowTextWithIcon = getContext().getResources().getBoolean(
                com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon);
        updateTextButtonVisibility();
    }

    @Override
    @Override
    public void setPadding(int l, int t, int r, int b) {
    public void setPadding(int l, int t, int r, int b) {
        mSavedPaddingLeft = l;
        mSavedPaddingLeft = l;
@@ -242,6 +252,11 @@ public class ActionMenuItemView extends TextView


    @Override
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
            // Fill all available height.
            heightMeasureSpec = MeasureSpec.makeMeasureSpec(
                    MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY);
        }
        final boolean textVisible = hasText();
        final boolean textVisible = hasText();
        if (textVisible && mSavedPaddingLeft >= 0) {
        if (textVisible && mSavedPaddingLeft >= 0) {
            super.setPadding(mSavedPaddingLeft, getPaddingTop(),
            super.setPadding(mSavedPaddingLeft, getPaddingTop(),
+10 −0
Original line number Original line Diff line number Diff line
@@ -576,6 +576,16 @@ public class ActionMenuPresenter extends BaseMenuPresenter
        public boolean needsDividerAfter() {
        public boolean needsDividerAfter() {
            return false;
            return false;
        }
        }

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
                // Fill available height
                heightMeasureSpec = MeasureSpec.makeMeasureSpec(
                        MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY);
            }
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
    }


    private class OverflowPopup extends MenuPopupHelper {
    private class OverflowPopup extends MenuPopupHelper {
+7 −2
Original line number Original line Diff line number Diff line
@@ -15,6 +15,8 @@
 */
 */
package com.android.internal.view.menu;
package com.android.internal.view.menu;


import com.android.internal.R;

import android.content.Context;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
@@ -26,8 +28,6 @@ import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityEvent;
import android.widget.LinearLayout;
import android.widget.LinearLayout;


import com.android.internal.R;

/**
/**
 * @hide
 * @hide
 */
 */
@@ -73,6 +73,11 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
        return mFormatItems;
        return mFormatItems;
    }
    }


    public void setMaxItemHeight(int maxItemHeight) {
        mMaxItemHeight = maxItemHeight;
        requestLayout();
    }

    @Override
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        super.onConfigurationChanged(newConfig);
+3 −0
Original line number Original line Diff line number Diff line
@@ -95,6 +95,9 @@ public abstract class AbsActionBarView extends ViewGroup {


    public void setContentHeight(int height) {
    public void setContentHeight(int height) {
        mContentHeight = height;
        mContentHeight = height;
        if (mMenuView != null) {
            mMenuView.setMaxItemHeight(mContentHeight);
        }
        requestLayout();
        requestLayout();
    }
    }