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

Commit 2e412187 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Adding group divider support in Android Menus"

parents db4eeb5e 0b842b46
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -44968,6 +44968,7 @@ package android.view {
    method public abstract void removeGroup(int);
    method public abstract void removeItem(int);
    method public abstract void setGroupCheckable(int, boolean, boolean);
    method public default void setGroupDividerEnabled(boolean);
    method public abstract void setGroupEnabled(int, boolean);
    method public abstract void setGroupVisible(int, boolean);
    method public abstract void setQwertyMode(boolean);
+1 −0
Original line number Diff line number Diff line
@@ -48575,6 +48575,7 @@ package android.view {
    method public abstract void removeGroup(int);
    method public abstract void removeItem(int);
    method public abstract void setGroupCheckable(int, boolean, boolean);
    method public default void setGroupDividerEnabled(boolean);
    method public abstract void setGroupEnabled(int, boolean);
    method public abstract void setGroupVisible(int, boolean);
    method public abstract void setQwertyMode(boolean);
+1 −0
Original line number Diff line number Diff line
@@ -45414,6 +45414,7 @@ package android.view {
    method public abstract void removeGroup(int);
    method public abstract void removeItem(int);
    method public abstract void setGroupCheckable(int, boolean, boolean);
    method public default void setGroupDividerEnabled(boolean);
    method public abstract void setGroupEnabled(int, boolean);
    method public abstract void setGroupVisible(int, boolean);
    method public abstract void setQwertyMode(boolean);
+6 −1
Original line number Diff line number Diff line
@@ -451,5 +451,10 @@ public interface Menu {
     *                 will use numeric shortcuts.
     */
    public void setQwertyMode(boolean isQwerty);
}

    /**
     * Enable or disable the group dividers.
     */
    default void setGroupDividerEnabled(boolean groupDividerEnabled) {
    }
}
 No newline at end of file
+64 −28
Original line number Diff line number Diff line
@@ -16,14 +16,18 @@

package com.android.internal.view.menu;

import com.android.internal.R;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.AbsListView;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
@@ -34,7 +38,8 @@ import android.widget.TextView;
/**
 * The item view for each item in the ListView-based MenuViews.
 */
public class ListMenuItemView extends LinearLayout implements MenuView.ItemView {
public class ListMenuItemView extends LinearLayout
        implements MenuView.ItemView, AbsListView.SelectionBoundsAdjuster {
    private static final String TAG = "ListMenuItemView";
    private MenuItemImpl mItemData;

@@ -44,12 +49,14 @@ public class ListMenuItemView extends LinearLayout implements MenuView.ItemView
    private CheckBox mCheckBox;
    private TextView mShortcutView;
    private ImageView mSubMenuArrowView;
    private ImageView mGroupDivider;

    private Drawable mBackground;
    private int mTextAppearance;
    private Context mTextAppearanceContext;
    private boolean mPreserveIconSpacing;
    private Drawable mSubMenuArrow;
    private boolean mHasListDivider;

    private int mMenuType;

@@ -72,7 +79,13 @@ public class ListMenuItemView extends LinearLayout implements MenuView.ItemView
        mTextAppearanceContext = context;
        mSubMenuArrow = a.getDrawable(com.android.internal.R.styleable.MenuView_subMenuArrow);

        final TypedArray b = context.getTheme()
                .obtainStyledAttributes(null, new int[] { com.android.internal.R.attr.divider },
                        com.android.internal.R.attr.dropDownListViewStyle, 0);
        mHasListDivider = b.hasValue(0);

        a.recycle();
        b.recycle();
    }

    public ListMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {
@@ -100,6 +113,7 @@ public class ListMenuItemView extends LinearLayout implements MenuView.ItemView
        if (mSubMenuArrowView != null) {
            mSubMenuArrowView.setImageDrawable(mSubMenuArrow);
        }
        mGroupDivider = findViewById(com.android.internal.R.id.group_divider);
    }

    public void initialize(MenuItemImpl itemData, int menuType) {
@@ -298,4 +312,26 @@ public class ListMenuItemView extends LinearLayout implements MenuView.ItemView
            info.setCanOpenPopup(true);
        }
    }

    /**
     * Enable or disable group dividers for this view.
     */
    public void setGroupDividerEnabled(boolean groupDividerEnabled) {
        // If mHasListDivider is true, disabling the groupDivider.
        // Otherwise, checking enbling it according to groupDividerEnabled flag.
        mGroupDivider.setVisibility(!mHasListDivider
                && groupDividerEnabled ? View.VISIBLE : View.GONE);
    }

    @Override
    public void adjustListItemSelectionBounds(Rect rect) {
        if (mGroupDivider.getVisibility() == View.VISIBLE) {
            // groupDivider is a part of MenuItemListView.
            // If ListMenuItem with divider enabled is hovered/clicked, divider also gets selected.
            // Clipping the selector bounds from the top divider portion when divider is enabled,
            // so that divider does not get selected on hover or click.
            final LayoutParams lp = (LayoutParams) mGroupDivider.getLayoutParams();
            rect.top += mGroupDivider.getHeight() + lp.topMargin + lp.bottomMargin;
        }
    }
}
Loading