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

Commit bf7cc38d authored by Vladislav Kaznacheev's avatar Vladislav Kaznacheev
Browse files

Display shortcut inline with item title in cascading menu

Bug: 74208750
Test: run android.widget.cts.PopupMenuTest on a large screen device
  such as hikey960.

Change-Id: I1c4bca3cfecb012432e6cb89cb4cc0177ccc04f9
parent 0aa191cc
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import com.android.internal.util.Preconditions;
 */
final class CascadingMenuPopup extends MenuPopup implements MenuPresenter, OnKeyListener,
        PopupWindow.OnDismissListener {
    private static final int ITEM_LAYOUT = com.android.internal.R.layout.cascading_menu_item_layout;

    @Retention(RetentionPolicy.SOURCE)
    @IntDef({HORIZ_POSITION_LEFT, HORIZ_POSITION_RIGHT})
@@ -348,7 +349,7 @@ final class CascadingMenuPopup extends MenuPopup implements MenuPresenter, OnKey
     */
    private void showMenu(@NonNull MenuBuilder menu) {
        final LayoutInflater inflater = LayoutInflater.from(mContext);
        final MenuAdapter adapter = new MenuAdapter(menu, inflater, mOverflowOnly);
        final MenuAdapter adapter = new MenuAdapter(menu, inflater, mOverflowOnly, ITEM_LAYOUT);

        // Apply "force show icon" setting. There are 3 cases:
        // (1) This is the top level menu and icon spacing is forced. Add spacing.
+5 −4
Original line number Diff line number Diff line
@@ -23,8 +23,6 @@ import android.widget.BaseAdapter;
import java.util.ArrayList;

public class MenuAdapter extends BaseAdapter {
    static final int ITEM_LAYOUT = com.android.internal.R.layout.popup_menu_item_layout;

    MenuBuilder mAdapterMenu;

    private int mExpandedIndex = -1;
@@ -32,11 +30,14 @@ public class MenuAdapter extends BaseAdapter {
    private boolean mForceShowIcon;
    private final boolean mOverflowOnly;
    private final LayoutInflater mInflater;
    private final int mItemLayoutRes;

    public MenuAdapter(MenuBuilder menu, LayoutInflater inflater, boolean overflowOnly) {
    public MenuAdapter(MenuBuilder menu, LayoutInflater inflater, boolean overflowOnly,
            int itemLayoutRes) {
        mOverflowOnly = overflowOnly;
        mInflater = inflater;
        mAdapterMenu = menu;
        mItemLayoutRes = itemLayoutRes;
        findExpandedIndex();
    }

@@ -78,7 +79,7 @@ public class MenuAdapter extends BaseAdapter {

    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(ITEM_LAYOUT, parent, false);
            convertView = mInflater.inflate(mItemLayoutRes, parent, false);
        }

        final int currGroupId = getItem(position).getGroupId();
+2 −1
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import com.android.internal.util.Preconditions;
 */
final class StandardMenuPopup extends MenuPopup implements OnDismissListener, OnItemClickListener,
        MenuPresenter, OnKeyListener {
    private static final int ITEM_LAYOUT = com.android.internal.R.layout.popup_menu_item_layout;

    private final Context mContext;

@@ -116,7 +117,7 @@ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, On
        mMenu = menu;
        mOverflowOnly = overflowOnly;
        final LayoutInflater inflater = LayoutInflater.from(context);
        mAdapter = new MenuAdapter(menu, inflater, mOverflowOnly);
        mAdapter = new MenuAdapter(menu, inflater, mOverflowOnly, ITEM_LAYOUT);
        mPopupStyleAttr = popupStyleAttr;
        mPopupStyleRes = popupStyleRes;

+82 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2018 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<!-- Keep in sync with popup_menu_item_layout.xml (which only differs in the title and shortcut
    position). -->
<com.android.internal.view.menu.ListMenuItemView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minWidth="196dip"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/group_divider"
        android:layout_width="match_parent"
        android:layout_height="1dip"
        android:layout_marginTop="4dip"
        android:layout_marginBottom="4dip"
        android:background="@drawable/list_divider_material" />

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="?attr/dropdownListPreferredItemHeight"
        android:paddingEnd="16dip"
        android:duplicateParentState="true" >

        <!-- Icon will be inserted here. -->

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginStart="16dip"
            android:textAppearance="?attr/textAppearanceLargePopupMenu"
            android:singleLine="true"
            android:duplicateParentState="true"
            android:textAlignment="viewStart" />

        <Space
            android:layout_width="0dip"
            android:layout_height="1dip"
            android:layout_weight="1"/>

        <TextView
            android:id="@+id/shortcut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginStart="16dip"
            android:textAppearance="?attr/textAppearanceSmallPopupMenu"
            android:singleLine="true"
            android:duplicateParentState="true"
            android:textAlignment="viewEnd" />

        <ImageView
            android:id="@+id/submenuarrow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginStart="8dp"
            android:scaleType="center"
            android:visibility="gone" />

        <!-- Checkbox, and/or radio button will be inserted here. -->

    </LinearLayout>

</com.android.internal.view.menu.ListMenuItemView>
+1 −0
Original line number Diff line number Diff line
@@ -1421,6 +1421,7 @@
  <java-symbol type="layout" name="action_menu_layout" />
  <java-symbol type="layout" name="action_mode_close_item" />
  <java-symbol type="layout" name="alert_dialog" />
  <java-symbol type="layout" name="cascading_menu_item_layout" />
  <java-symbol type="layout" name="choose_account" />
  <java-symbol type="layout" name="choose_account_row" />
  <java-symbol type="layout" name="choose_account_type" />