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

Commit 160bb7fa authored by Adam Powell's avatar Adam Powell
Browse files

Action bar layout tweaks

Fix a Spinner issue that reported odd baselines

Fix detection of expandable items for action menus and allocation of cells

Use the right asset for home-as-up in Theme.Holo.Light.SolidActionBar.Inverse

Add TextAppearance.Holo.Widget.ActionBar.Menu as a basis for further
menu item styling

Sync with design for tab/menu text appearance

Change-Id: I32026bbde1cd4e15b6cda30d78d3d48250c84c94
parent b1b375ee
Loading
Loading
Loading
Loading
+14 −13
Original line number Diff line number Diff line
@@ -1512,6 +1512,7 @@ package android {
    field public static final int TextAppearance_Holo_Small = 16974081; // 0x1030101
    field public static final int TextAppearance_Holo_Small_Inverse = 16974082; // 0x1030102
    field public static final int TextAppearance_Holo_Widget = 16974085; // 0x1030105
    field public static final int TextAppearance_Holo_Widget_ActionBar_Menu = 16974113; // 0x1030121
    field public static final int TextAppearance_Holo_Widget_ActionBar_Subtitle = 16974099; // 0x1030113
    field public static final int TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse = 16974110; // 0x103011e
    field public static final int TextAppearance_Holo_Widget_ActionBar_Title = 16974098; // 0x1030112
@@ -1582,16 +1583,16 @@ package android {
    field public static final int Theme_Holo_Light_NoActionBar = 16974064; // 0x10300f0
    field public static final int Theme_Holo_Light_NoActionBar_Fullscreen = 16974065; // 0x10300f1
    field public static final int Theme_Holo_Light_Panel = 16973948; // 0x103007c
    field public static final int Theme_Holo_Light_SolidActionBar = 16974121; // 0x1030129
    field public static final int Theme_Holo_Light_SolidActionBar_Inverse = 16974122; // 0x103012a
    field public static final int Theme_Holo_Light_SolidActionBar_Inverse_SplitActionBarWhenNarrow = 16974125; // 0x103012d
    field public static final int Theme_Holo_Light_SolidActionBar_SplitActionBarWhenNarrow = 16974124; // 0x103012c
    field public static final int Theme_Holo_Light_SolidActionBar = 16974122; // 0x103012a
    field public static final int Theme_Holo_Light_SolidActionBar_Inverse = 16974123; // 0x103012b
    field public static final int Theme_Holo_Light_SolidActionBar_Inverse_SplitActionBarWhenNarrow = 16974126; // 0x103012e
    field public static final int Theme_Holo_Light_SolidActionBar_SplitActionBarWhenNarrow = 16974125; // 0x103012d
    field public static final int Theme_Holo_Light_SplitActionBarWhenNarrow = 16974106; // 0x103011a
    field public static final int Theme_Holo_NoActionBar = 16973932; // 0x103006c
    field public static final int Theme_Holo_NoActionBar_Fullscreen = 16973933; // 0x103006d
    field public static final int Theme_Holo_Panel = 16973947; // 0x103007b
    field public static final int Theme_Holo_SolidActionBar = 16974120; // 0x1030128
    field public static final int Theme_Holo_SolidActionBar_SplitActionBarWhenNarrow = 16974123; // 0x103012b
    field public static final int Theme_Holo_SolidActionBar = 16974121; // 0x1030129
    field public static final int Theme_Holo_SolidActionBar_SplitActionBarWhenNarrow = 16974124; // 0x103012c
    field public static final int Theme_Holo_SplitActionBarWhenNarrow = 16974105; // 0x1030119
    field public static final int Theme_Holo_Wallpaper = 16973949; // 0x103007d
    field public static final int Theme_Holo_Wallpaper_NoTitleBar = 16973950; // 0x103007e
@@ -1643,7 +1644,7 @@ package android {
    field public static final int Widget_GridView = 16973874; // 0x1030032
    field public static final int Widget_Holo = 16973962; // 0x103008a
    field public static final int Widget_Holo_ActionBar = 16974004; // 0x10300b4
    field public static final int Widget_Holo_ActionBar_Solid = 16974113; // 0x1030121
    field public static final int Widget_Holo_ActionBar_Solid = 16974114; // 0x1030122
    field public static final int Widget_Holo_ActionBar_TabBar = 16974071; // 0x10300f7
    field public static final int Widget_Holo_ActionBar_TabText = 16974070; // 0x10300f6
    field public static final int Widget_Holo_ActionBar_TabView = 16974069; // 0x10300f5
@@ -1673,19 +1674,19 @@ package android {
    field public static final int Widget_Holo_ImageButton = 16973974; // 0x1030096
    field public static final int Widget_Holo_Light = 16974005; // 0x10300b5
    field public static final int Widget_Holo_Light_ActionBar = 16974049; // 0x10300e1
    field public static final int Widget_Holo_Light_ActionBar_Solid = 16974114; // 0x1030122
    field public static final int Widget_Holo_Light_ActionBar_Solid_Inverse = 16974115; // 0x1030123
    field public static final int Widget_Holo_Light_ActionBar_Solid = 16974115; // 0x1030123
    field public static final int Widget_Holo_Light_ActionBar_Solid_Inverse = 16974116; // 0x1030124
    field public static final int Widget_Holo_Light_ActionBar_TabBar = 16974074; // 0x10300fa
    field public static final int Widget_Holo_Light_ActionBar_TabBar_Inverse = 16974116; // 0x1030124
    field public static final int Widget_Holo_Light_ActionBar_TabBar_Inverse = 16974117; // 0x1030125
    field public static final int Widget_Holo_Light_ActionBar_TabText = 16974073; // 0x10300f9
    field public static final int Widget_Holo_Light_ActionBar_TabText_Inverse = 16974118; // 0x1030126
    field public static final int Widget_Holo_Light_ActionBar_TabText_Inverse = 16974119; // 0x1030127
    field public static final int Widget_Holo_Light_ActionBar_TabView = 16974072; // 0x10300f8
    field public static final int Widget_Holo_Light_ActionBar_TabView_Inverse = 16974117; // 0x1030125
    field public static final int Widget_Holo_Light_ActionBar_TabView_Inverse = 16974118; // 0x1030126
    field public static final int Widget_Holo_Light_ActionButton = 16974045; // 0x10300dd
    field public static final int Widget_Holo_Light_ActionButton_CloseMode = 16974048; // 0x10300e0
    field public static final int Widget_Holo_Light_ActionButton_Overflow = 16974046; // 0x10300de
    field public static final int Widget_Holo_Light_ActionMode = 16974047; // 0x10300df
    field public static final int Widget_Holo_Light_ActionMode_Inverse = 16974119; // 0x1030127
    field public static final int Widget_Holo_Light_ActionMode_Inverse = 16974120; // 0x1030128
    field public static final int Widget_Holo_Light_AutoCompleteTextView = 16974011; // 0x10300bb
    field public static final int Widget_Holo_Light_Button = 16974006; // 0x10300b6
    field public static final int Widget_Holo_Light_Button_Borderless_Small = 16974108; // 0x103011c
+2 −1
Original line number Diff line number Diff line
@@ -231,7 +231,8 @@ public class Spinner extends AbsSpinner implements OnClickListener {
        }

        if (child != null) {
            return child.getTop() + child.getBaseline();
            final int childBaseline = child.getBaseline();
            return childBaseline >= 0 ? child.getTop() + childBaseline : -1;
        } else {
            return -1;
        }
+23 −23
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
        int cellsRemaining = cellCount;
        int maxChildHeight = 0;
        int maxCellsUsed = 0;
        int multiCellItemCount = 0;
        int expandableItemCount = 0;

        if (mReserveOverflow) cellsRemaining--;

@@ -123,7 +123,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
            lp.expanded = false;
            lp.extraPixels = 0;
            lp.cellsUsed = 0;
            lp.multiCell = false;
            lp.expandable = false;

            // Overflow always gets 1 cell. No more, no less.
            final int cellsAvailable = lp.isOverflowButton ? 1 : cellsRemaining;
@@ -132,7 +132,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
                    heightMeasureSpec, heightPadding);

            maxCellsUsed = Math.max(maxCellsUsed, cellsUsed);
            if (lp.multiCell) multiCellItemCount++;
            if (lp.expandable) expandableItemCount++;

            cellsRemaining -= cellsUsed;
            maxChildHeight = Math.max(maxChildHeight, child.getMeasuredHeight());
@@ -142,8 +142,8 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
        // Try distributing whole leftover cells to smaller items first.

        boolean needsExpansion = false;
        long smallestMultiCellItemsAt = 0;
        while (multiCellItemCount > 0 && cellsRemaining > 0) {
        long smallestExpandableItemsAt = 0;
        while (expandableItemCount > 0 && cellsRemaining > 0) {
            int minCells = Integer.MAX_VALUE;
            long minCellsAt = 0; // Bit locations are indices of relevant child views
            int minCellsItemCount = 0;
@@ -152,7 +152,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
                final LayoutParams lp = (LayoutParams) child.getLayoutParams();

                // Don't try to expand items that shouldn't.
                if (!lp.multiCell) continue;
                if (!lp.expandable) continue;

                // Mark indices of children that can receive an extra cell.
                if (lp.cellsUsed < minCells) {
@@ -165,10 +165,10 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
                }
            }

            if (minCellsItemCount < cellsRemaining) break; // Couldn't expand anything evenly. Stop.
            if (minCellsItemCount > cellsRemaining) break; // Couldn't expand anything evenly. Stop.

            // Items that get expanded will always be in the set of smallest items when we're done.
            smallestMultiCellItemsAt |= minCellsAt;
            smallestExpandableItemsAt |= minCellsAt;

            for (int i = 0; i < childCount; i++) {
                if ((minCellsAt & (1 << i)) == 0) continue;
@@ -186,12 +186,12 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
        // Divide any space left that wouldn't divide along cell boundaries
        // evenly among the smallest multi-cell (expandable) items.

        if (cellsRemaining > 0 && smallestMultiCellItemsAt != 0) {
            final int expandCount = Long.bitCount(smallestMultiCellItemsAt);
        if (cellsRemaining > 0 && smallestExpandableItemsAt != 0) {
            final int expandCount = Long.bitCount(smallestExpandableItemsAt);
            final int extraPixels = cellsRemaining * cellSize / expandCount;

            for (int i = 0; i < childCount; i++) {
                if ((smallestMultiCellItemsAt & (1 << i)) == 0) continue;
                if ((smallestExpandableItemsAt & (1 << i)) == 0) continue;

                final View child = getChildAt(i);
                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
@@ -229,7 +229,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
     * Measure a child view to fit within cell-based formatting. The child's width
     * will be measured to a whole multiple of cellSize.
     *
     * <p>Sets the multiCell and cellsUsed fields of LayoutParams.
     * <p>Sets the expandable and cellsUsed fields of LayoutParams.
     *
     * @param child Child to measure
     * @param cellSize Size of one cell
@@ -241,21 +241,14 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
    static int measureChildForCells(View child, int cellSize, int cellsRemaining,
            int parentHeightMeasureSpec, int parentHeightPadding) {
        final LayoutParams lp = (LayoutParams) child.getLayoutParams();
        final ActionMenuItemView itemView = child instanceof ActionMenuItemView ?
                (ActionMenuItemView) child : null;

        final int childHeightSize = MeasureSpec.getSize(parentHeightMeasureSpec) -
                parentHeightPadding;
        final int childHeightMode = MeasureSpec.getMode(parentHeightMeasureSpec);
        final int childHeightSpec = MeasureSpec.makeMeasureSpec(childHeightSize, childHeightMode);

        int cellsUsed = cellsRemaining > 0 ? 1 : 0;
        final boolean multiCell = !lp.isOverflowButton &&
                (itemView == null || itemView.hasText());

        lp.multiCell = multiCell;

        if (multiCell && cellsRemaining > 0) {
        int cellsUsed = 0;
        if (cellsRemaining > 0) {
            final int childWidthSpec = MeasureSpec.makeMeasureSpec(
                    cellSize * cellsRemaining, MeasureSpec.AT_MOST);
            child.measure(childWidthSpec, childHeightSpec);
@@ -264,6 +257,12 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
            cellsUsed = measuredWidth / cellSize;
            if (measuredWidth % cellSize != 0) cellsUsed++;
        }

        final ActionMenuItemView itemView = child instanceof ActionMenuItemView ?
                (ActionMenuItemView) child : null;
        final boolean expandable = !lp.isOverflowButton && itemView != null && itemView.hasText();
        lp.expandable = expandable;

        lp.cellsUsed = cellsUsed;
        final int targetWidth = cellsUsed * cellSize;
        child.measure(MeasureSpec.makeMeasureSpec(targetWidth, MeasureSpec.EXACTLY),
@@ -426,9 +425,10 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
        @ViewDebug.ExportedProperty(category = "layout")
        public int cellsUsed;
        @ViewDebug.ExportedProperty(category = "layout")
        public boolean multiCell;
        @ViewDebug.ExportedProperty(category = "layout")
        public int extraPixels;
        @ViewDebug.ExportedProperty(category = "layout")
        public boolean expandable;

        public boolean expanded;

        public LayoutParams(Context c, AttributeSet attrs) {
+1 −0
Original line number Diff line number Diff line
@@ -1789,6 +1789,7 @@
  <public type="style" name="TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse" />
  <public type="style" name="TextAppearance.Holo.Widget.ActionMode.Title.Inverse" />
  <public type="style" name="TextAppearance.Holo.Widget.ActionMode.Subtitle.Inverse" />
  <public type="style" name="TextAppearance.Holo.Widget.ActionBar.Menu" />
  <public type="style" name="Widget.Holo.ActionBar.Solid" />
  <public type="style" name="Widget.Holo.Light.ActionBar.Solid" />
  <public type="style" name="Widget.Holo.Light.ActionBar.Solid.Inverse" />
+9 −3
Original line number Diff line number Diff line
@@ -1314,6 +1314,13 @@
        <item name="android:textSize">@android:dimen/action_bar_subtitle_text_size</item>
    </style>

    <style name="TextAppearance.Holo.Widget.ActionBar.Menu"
           parent="TextAppearance.Holo.Small">
        <item name="android:textSize">12sp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">?android:attr/actionMenuTextColor</item>
    </style>

    <style name="TextAppearance.Holo.Widget.ActionMode">
    </style>

@@ -1848,7 +1855,8 @@
    <style name="Widget.Holo.ActionBar.TabText" parent="Widget.ActionBar.TabText">
        <item name="android:textAppearance">@style/TextAppearance.Holo.Medium</item>
        <item name="android:textColor">?android:attr/textColorPrimary</item>
        <item name="android:textSize">18sp</item>
        <item name="android:textSize">12sp</item>
        <item name="android:textStyle">bold</item>
    </style>

    <style name="Widget.Holo.ActionMode" parent="Widget.ActionMode">
@@ -2203,9 +2211,7 @@
    </style>

    <style name="Widget.Holo.Light.ActionBar.TabText.Inverse">
        <item name="android:textAppearance">@style/TextAppearance.Holo.Medium</item>
        <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
        <item name="android:textSize">18sp</item>
    </style>

    <style name="Widget.Holo.Light.ActionMode" parent="Widget.Holo.ActionMode">
Loading