diff options
| -rw-r--r-- | core/java/com/android/internal/app/ActionBarImpl.java | 4 | ||||
| -rw-r--r-- | core/java/com/android/internal/view/menu/BaseMenuPresenter.java | 4 | ||||
| -rw-r--r-- | core/java/com/android/internal/view/menu/MenuItemImpl.java | 4 | ||||
| -rw-r--r-- | core/java/com/android/internal/widget/ActionBarView.java | 32 | ||||
| -rw-r--r-- | core/res/res/layout-large/action_bar_home.xml | 39 | ||||
| -rw-r--r-- | core/res/res/layout-large/action_mode_close_item.xml | 38 | ||||
| -rw-r--r-- | core/res/res/layout/action_bar_home.xml | 13 | ||||
| -rw-r--r-- | core/res/res/layout/action_menu_item_layout.xml | 10 | ||||
| -rw-r--r-- | core/res/res/layout/action_mode_close_item.xml | 14 | ||||
| -rw-r--r-- | core/res/res/values-land/dimens.xml | 4 | ||||
| -rw-r--r-- | core/res/res/values-large/dimens.xml | 6 | ||||
| -rw-r--r-- | core/res/res/values-port/dimens.xml | 24 | ||||
| -rw-r--r-- | core/res/res/values-w480dp/bools.xml | 21 | ||||
| -rw-r--r-- | core/res/res/values/bools.xml | 21 | ||||
| -rw-r--r-- | core/res/res/values/dimens.xml | 7 | ||||
| -rw-r--r-- | core/res/res/values/themes.xml | 6 |
16 files changed, 215 insertions, 32 deletions
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java index 16d5539b8cdf..96520858fe95 100644 --- a/core/java/com/android/internal/app/ActionBarImpl.java +++ b/core/java/com/android/internal/app/ActionBarImpl.java @@ -861,7 +861,7 @@ public class ActionBarImpl extends ActionBar { @Override public void setIcon(int resId) { - mActionView.setIcon(mContext.getResources().getDrawable(resId)); + mActionView.setIcon(resId); } @Override @@ -871,7 +871,7 @@ public class ActionBarImpl extends ActionBar { @Override public void setLogo(int resId) { - mActionView.setLogo(mContext.getResources().getDrawable(resId)); + mActionView.setLogo(resId); } @Override diff --git a/core/java/com/android/internal/view/menu/BaseMenuPresenter.java b/core/java/com/android/internal/view/menu/BaseMenuPresenter.java index 71511c62090a..16f51fd20ae0 100644 --- a/core/java/com/android/internal/view/menu/BaseMenuPresenter.java +++ b/core/java/com/android/internal/view/menu/BaseMenuPresenter.java @@ -104,6 +104,10 @@ public abstract class BaseMenuPresenter implements MenuPresenter { * @param childIndex Index within the parent to insert at */ protected void addItemView(View itemView, int childIndex) { + final ViewGroup currentParent = (ViewGroup) itemView.getParent(); + if (currentParent != null) { + currentParent.removeView(itemView); + } ((ViewGroup) mMenuView).addView(itemView, childIndex); } diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java index 42ef916c995c..c6d386d1fa48 100644 --- a/core/java/com/android/internal/view/menu/MenuItemImpl.java +++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java @@ -523,7 +523,9 @@ public final class MenuItemImpl implements MenuItem { } public boolean showsTextAsAction() { - return (mShowAsAction & SHOW_AS_ACTION_WITH_TEXT) == SHOW_AS_ACTION_WITH_TEXT; + return (mShowAsAction & SHOW_AS_ACTION_WITH_TEXT) == SHOW_AS_ACTION_WITH_TEXT && + mMenu.getContext().getResources().getBoolean( + com.android.internal.R.bool.allow_action_menu_item_text_with_icon); } public void setShowAsAction(int actionEnum) { diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index 74a6ae7724ac..587d67895f9d 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -30,11 +30,13 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.text.TextUtils.TruncateAt; import android.util.AttributeSet; +import android.util.DisplayMetrics; import android.util.Log; import android.view.ActionMode; import android.view.Gravity; @@ -85,7 +87,6 @@ public class ActionBarView extends ViewGroup { private CharSequence mSubtitle; private Drawable mIcon; private Drawable mLogo; - private Drawable mDivider; private View mHomeLayout; private View mHomeAsUpView; @@ -211,8 +212,6 @@ public class ActionBarView extends ViewGroup { mContentHeight = a.getLayoutDimension(R.styleable.ActionBar_height, 0); - mDivider = a.getDrawable(R.styleable.ActionBar_divider); - a.recycle(); mLogoNavItem = new ActionMenuItem(context, 0, android.R.id.home, 0, 0, mTitle); @@ -434,6 +433,10 @@ public class ActionBarView extends ViewGroup { } } + public void setIcon(int resId) { + setIcon(mContext.getResources().getDrawableForDensity(resId, getPreferredIconDensity())); + } + public void setLogo(Drawable logo) { mLogo = logo; if (logo != null && (mDisplayOptions & ActionBar.DISPLAY_USE_LOGO) != 0) { @@ -441,6 +444,29 @@ public class ActionBarView extends ViewGroup { } } + public void setLogo(int resId) { + mContext.getResources().getDrawable(resId); + } + + /** + * @return Drawable density to load that will best fit the available height. + */ + private int getPreferredIconDensity() { + final Resources res = mContext.getResources(); + final int availableHeight = getLayoutParams().height - + mIconView.getPaddingTop() - mIconView.getPaddingBottom(); + int iconSize = res.getDimensionPixelSize(android.R.dimen.app_icon_size); + + if (iconSize * DisplayMetrics.DENSITY_LOW > availableHeight) { + return DisplayMetrics.DENSITY_LOW; + } else if (iconSize * DisplayMetrics.DENSITY_MEDIUM > availableHeight) { + return DisplayMetrics.DENSITY_MEDIUM; + } else if (iconSize * DisplayMetrics.DENSITY_HIGH > availableHeight) { + return DisplayMetrics.DENSITY_HIGH; + } + return DisplayMetrics.DENSITY_XHIGH; + } + public void setNavigationMode(int mode) { final int oldMode = mNavigationMode; if (mode != oldMode) { diff --git a/core/res/res/layout-large/action_bar_home.xml b/core/res/res/layout-large/action_bar_home.xml new file mode 100644 index 000000000000..86580bc3e531 --- /dev/null +++ b/core/res/res/layout-large/action_bar_home.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2010 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. +--> + +<view xmlns:android="http://schemas.android.com/apk/res/android" + class="com.android.internal.widget.ActionBarView$HomeView" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:background="?android:attr/selectableItemBackground" > + <ImageView android:id="@android:id/up" + android:src="?android:attr/homeAsUpIndicator" + android:layout_gravity="center_vertical|left" + android:visibility="gone" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginRight="-12dip" /> + <ImageView android:id="@android:id/home" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingLeft="16dip" + android:paddingRight="16dip" + android:paddingTop="4dip" + android:paddingBottom="4dip" + android:adjustViewBounds="true" + android:layout_gravity="center" + android:scaleType="fitCenter" /> +</view> diff --git a/core/res/res/layout-large/action_mode_close_item.xml b/core/res/res/layout-large/action_mode_close_item.xml new file mode 100644 index 000000000000..321622ef387b --- /dev/null +++ b/core/res/res/layout-large/action_mode_close_item.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2011 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. +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/action_mode_close_button" + android:background="@drawable/btn_cab_done" + android:focusable="true" + android:clickable="true" + android:paddingLeft="16dip" + android:layout_width="wrap_content" + android:layout_height="match_parent"> + <ImageView android:layout_width="48dip" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:scaleType="center" + android:src="@drawable/ic_cab_close_holo" /> + <TextView android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginLeft="8dip" + android:layout_marginRight="16dip" + android:textAppearance="@android:style/TextAppearance.Holo.Medium" + android:textColor="@android:color/white" + android:text="@string/action_mode_done" /> +</LinearLayout> diff --git a/core/res/res/layout/action_bar_home.xml b/core/res/res/layout/action_bar_home.xml index c82f91d7dfd8..7f7c55cb4f68 100644 --- a/core/res/res/layout/action_bar_home.xml +++ b/core/res/res/layout/action_bar_home.xml @@ -25,12 +25,15 @@ android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginRight="-12dip" /> + android:layout_marginRight="-4dip" /> <ImageView android:id="@android:id/home" android:layout_width="wrap_content" - android:layout_height="match_parent" - android:paddingLeft="16dip" - android:paddingRight="16dip" + android:layout_height="wrap_content" + android:paddingLeft="8dip" + android:paddingRight="8dip" + android:paddingTop="@dimen/action_bar_icon_vertical_padding" + android:paddingBottom="@dimen/action_bar_icon_vertical_padding" android:layout_gravity="center" - android:scaleType="center" /> + android:adjustViewBounds="true" + android:scaleType="fitCenter" /> </view> diff --git a/core/res/res/layout/action_menu_item_layout.xml b/core/res/res/layout/action_menu_item_layout.xml index 4a7336852e70..5e828fae655d 100644 --- a/core/res/res/layout/action_menu_item_layout.xml +++ b/core/res/res/layout/action_menu_item_layout.xml @@ -31,10 +31,9 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:visibility="gone" - android:paddingLeft="4dip" - android:paddingRight="4dip" - android:minHeight="56dip" - android:scaleType="center" + android:padding="@dimen/action_bar_icon_vertical_padding" + android:scaleType="fitCenter" + android:adjustViewBounds="true" android:background="@null" android:focusable="false" /> <Button android:id="@+id/textButton" @@ -46,7 +45,6 @@ style="?attr/buttonStyleSmall" android:textColor="?attr/actionMenuTextColor" android:background="@null" - android:paddingLeft="4dip" - android:paddingRight="4dip" + android:padding="4dip" android:focusable="false" /> </com.android.internal.view.menu.ActionMenuItemView> diff --git a/core/res/res/layout/action_mode_close_item.xml b/core/res/res/layout/action_mode_close_item.xml index 7badbac5349e..2a4d8e0513eb 100644 --- a/core/res/res/layout/action_mode_close_item.xml +++ b/core/res/res/layout/action_mode_close_item.xml @@ -19,20 +19,12 @@ android:background="@drawable/btn_cab_done" android:focusable="true" android:clickable="true" - android:paddingLeft="16dip" + android:paddingLeft="8dip" android:layout_width="wrap_content" android:layout_height="match_parent"> - <ImageView android:layout_width="48dip" + <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:scaleType="center" + android:scaleType="fitCenter" android:src="@drawable/ic_cab_close_holo" /> - <TextView android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_marginLeft="8dip" - android:layout_marginRight="16dip" - android:textAppearance="@android:style/TextAppearance.Holo.Medium" - android:textColor="@android:color/white" - android:text="@string/action_mode_done" /> </LinearLayout> diff --git a/core/res/res/values-land/dimens.xml b/core/res/res/values-land/dimens.xml index 058daa8efbe7..8def578ef357 100644 --- a/core/res/res/values-land/dimens.xml +++ b/core/res/res/values-land/dimens.xml @@ -28,4 +28,8 @@ <dimen name="preference_screen_side_margin">96dp</dimen> <dimen name="preference_screen_side_margin_negative">-100dp</dimen> <dimen name="preference_widget_width">72dp</dimen> + + <!-- Default height of an action bar. --> + <dimen name="action_bar_default_height">40dip</dimen> + </resources> diff --git a/core/res/res/values-large/dimens.xml b/core/res/res/values-large/dimens.xml index cd1847faaaf2..5355847cb223 100644 --- a/core/res/res/values-large/dimens.xml +++ b/core/res/res/values-large/dimens.xml @@ -22,4 +22,10 @@ <!-- Preference UI dimensions for larger screens. --> <dimen name="preference_widget_width">56dp</dimen> + <!-- The maximum number of action buttons that should be permitted within + an action bar/action mode. This will be used to determine how many + showAsAction="ifRoom" items can fit. "always" items can override this. --> + <integer name="max_action_buttons">5</integer> + <!-- Default height of an action bar. --> + <dimen name="action_bar_default_height">56dip</dimen> </resources> diff --git a/core/res/res/values-port/dimens.xml b/core/res/res/values-port/dimens.xml new file mode 100644 index 000000000000..bf0a3426aff7 --- /dev/null +++ b/core/res/res/values-port/dimens.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2011, 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. +*/ +--> +<resources> + <!-- The maximum number of action buttons that should be permitted within + an action bar/action mode. This will be used to determine how many + showAsAction="ifRoom" items can fit. "always" items can override this. --> + <integer name="max_action_buttons">2</integer> +</resources> diff --git a/core/res/res/values-w480dp/bools.xml b/core/res/res/values-w480dp/bools.xml new file mode 100644 index 000000000000..ea7eeb58c7d7 --- /dev/null +++ b/core/res/res/values-w480dp/bools.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2011, 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. +*/ +--> +<resources> + <bool name="allow_action_menu_item_text_with_icon">true</bool> +</resources> diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml new file mode 100644 index 000000000000..c7dcb515cd09 --- /dev/null +++ b/core/res/res/values/bools.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2011, 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. +*/ +--> +<resources> + <bool name="allow_action_menu_item_text_with_icon">false</bool> +</resources> diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index da1c1577d2c1..a1511b3cb6ee 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -28,7 +28,7 @@ <!-- The maximum number of action buttons that should be permitted within an action bar/action mode. This will be used to determine how many showAsAction="ifRoom" items can fit. "always" items can override this. --> - <integer name="max_action_buttons">5</integer> + <integer name="max_action_buttons">3</integer> <dimen name="toast_y_offset">64dip</dimen> <!-- Height of the status bar --> <dimen name="status_bar_height">25dip</dimen> @@ -79,4 +79,9 @@ <!-- Minimum width of the search view text entry area. --> <dimen name="search_view_text_min_width">160dip</dimen> + + <!-- Default height of an action bar. --> + <dimen name="action_bar_default_height">48dip</dimen> + <!-- Vertical padding around action bar icons. --> + <dimen name="action_bar_icon_vertical_padding">4dip</dimen> </resources> diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index b9fd6a5478a6..be7b42fa61fc 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -276,7 +276,7 @@ <item name="actionModeStyle">@style/Widget.ActionMode</item> <item name="actionModeCloseButtonStyle">@style/Widget.ActionButton.CloseMode</item> <item name="actionBarStyle">@android:style/Widget.ActionBar</item> - <item name="actionBarSize">56dip</item> + <item name="actionBarSize">@dimen/action_bar_default_height</item> <item name="actionModePopupWindowStyle">?android:attr/popupWindowStyle</item> <item name="actionMenuTextAppearance">?android:attr/textAppearanceMedium</item> <item name="actionMenuTextColor">?android:attr/textColorPrimary</item> @@ -1009,7 +1009,7 @@ <item name="actionModeStyle">@style/Widget.Holo.ActionMode</item> <item name="actionModeCloseButtonStyle">@style/Widget.Holo.ActionButton.CloseMode</item> <item name="actionBarStyle">@android:style/Widget.Holo.ActionBar</item> - <item name="actionBarSize">56dip</item> + <item name="actionBarSize">@dimen/action_bar_default_height</item> <item name="actionModePopupWindowStyle">@android:style/Widget.Holo.PopupWindow.ActionMode</item> <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_dark</item> @@ -1294,7 +1294,7 @@ <item name="actionModeStyle">@style/Widget.Holo.Light.ActionMode</item> <item name="actionModeCloseButtonStyle">@style/Widget.Holo.Light.ActionButton.CloseMode</item> <item name="actionBarStyle">@android:style/Widget.Holo.Light.ActionBar</item> - <item name="actionBarSize">56dip</item> + <item name="actionBarSize">@dimen/action_bar_default_height</item> <item name="actionModePopupWindowStyle">@android:style/Widget.Holo.Light.PopupWindow.ActionMode</item> <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_light</item> |