From 19282333f4d911174006967aa6635ccbd6356263 Mon Sep 17 00:00:00 2001 From: Sebastian Kaspari Date: Wed, 17 Jun 2015 15:55:31 +0200 Subject: [PATCH 1/5] Bug 1172071 - Add icon label to search engine bar. r=mcomella. --HG-- extra : commitid : DOtEXj3GSmB extra : rebase_source : c386ab9e77fed96ad1672faf52a0d0277891e99b extra : amend_source : 2d605ad33c212f6fbe9682a48bff8e557d623dda --- mobile/android/base/home/SearchEngineBar.java | 71 ++++++++++++++++--- .../layout/search_engine_bar_label.xml | 21 ++++++ .../browser/robocop/testAddSearchEngine.java | 6 +- 3 files changed, 87 insertions(+), 11 deletions(-) create mode 100644 mobile/android/base/resources/layout/search_engine_bar_label.xml diff --git a/mobile/android/base/home/SearchEngineBar.java b/mobile/android/base/home/SearchEngineBar.java index 02eecb4d0cdb..d8d60e103ad6 100644 --- a/mobile/android/base/home/SearchEngineBar.java +++ b/mobile/android/base/home/SearchEngineBar.java @@ -7,15 +7,21 @@ import android.content.Context; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.support.v4.content.ContextCompat; +import android.support.v4.graphics.drawable.DrawableCompat; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; +import android.widget.FrameLayout; import android.widget.ImageView; import org.mozilla.gecko.R; @@ -29,6 +35,7 @@ public class SearchEngineBar extends TwoWayView private static final String LOGTAG = "Gecko" + SearchEngineBar.class.getSimpleName(); private static final float ICON_CONTAINER_MIN_WIDTH_DP = 72; + private static final float LABEL_CONTAINER_WIDTH_DP = 48; private static final float DIVIDER_HEIGHT_DP = 1; public interface OnSearchBarClickListener { @@ -39,6 +46,7 @@ public class SearchEngineBar extends TwoWayView private final Paint dividerPaint; private final float minIconContainerWidth; private final float dividerHeight; + private final int labelContainerWidth; private int iconContainerWidth; private OnSearchBarClickListener onSearchBarClickListener; @@ -53,6 +61,7 @@ public class SearchEngineBar extends TwoWayView final DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); minIconContainerWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ICON_CONTAINER_MIN_WIDTH_DP, displayMetrics); dividerHeight = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DIVIDER_HEIGHT_DP, displayMetrics); + labelContainerWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, LABEL_CONTAINER_WIDTH_DP, displayMetrics); iconContainerWidth = (int) minIconContainerWidth; @@ -69,6 +78,11 @@ public class SearchEngineBar extends TwoWayView OnSearchBarClickListener.class.getSimpleName() + " is not initialized"); } + if (position == 0) { + // Ignore click on label + return; + } + final SearchEngine searchEngine = adapter.getItem(position); onSearchBarClickListener.onSearchBarClickListener(searchEngine); } @@ -85,10 +99,10 @@ public class SearchEngineBar extends TwoWayView protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - final int searchEngineCount = getCount(); + final int searchEngineCount = adapter.getCount() - 1; if (searchEngineCount > 0) { - final float availableWidthPerContainer = getMeasuredWidth() / searchEngineCount; + final float availableWidthPerContainer = (getMeasuredWidth() - labelContainerWidth) / searchEngineCount; final int desiredIconContainerSize = (int) Math.max( availableWidthPerContainer, @@ -110,6 +124,9 @@ public class SearchEngineBar extends TwoWayView } public class SearchEngineAdapter extends BaseAdapter { + private static final int VIEW_TYPE_SEARCH_ENGINE = 0; + private static final int VIEW_TYPE_LABEL = 1; + List searchEngines = new ArrayList<>(); public void setSearchEngines(final List searchEngines) { @@ -119,12 +136,14 @@ public class SearchEngineBar extends TwoWayView @Override public int getCount() { - return searchEngines.size(); + // Adding offset for label at position 0 (Bug 1172071) + return searchEngines.size() + 1; } @Override public SearchEngine getItem(final int position) { - return searchEngines.get(position); + // Returning null for the label at position 0 (Bug 1172071) + return position == 0 ? null : searchEngines.get(position - 1); } @Override @@ -132,19 +151,51 @@ public class SearchEngineBar extends TwoWayView return position; } + @Override + public int getItemViewType(int position) { + return position == 0 ? VIEW_TYPE_LABEL : VIEW_TYPE_SEARCH_ENGINE; + } + + @Override + public int getViewTypeCount() { + return 2; + } + @Override public View getView(final int position, final View convertView, final ViewGroup parent) { - final View view; - if (convertView == null) { - view = LayoutInflater.from(getContext()).inflate(R.layout.search_engine_bar_item, parent, false); + if (position == 0) { + return getLabelView(convertView, parent); } else { - view = convertView; + return getSearchEngineView(position, convertView, parent); + } + } + + private View getLabelView(View view, final ViewGroup parent) { + if (view == null) { + view = LayoutInflater.from(getContext()).inflate(R.layout.search_engine_bar_label, parent, false); } - view.setLayoutParams(new LayoutParams(iconContainerWidth, ViewGroup.LayoutParams.MATCH_PARENT)); + Drawable icon = DrawableCompat.wrap(ContextCompat.getDrawable(parent.getContext(), R.drawable.suggestion_item_search)); + DrawableCompat.setTint(icon, getResources().getColor(R.color.disabled_grey)); + + final ImageView iconView = (ImageView) view.findViewById(R.id.search_engine_label); + iconView.setImageDrawable(icon); + iconView.setScaleType(ImageView.ScaleType.FIT_XY); + + return view; + } + + private View getSearchEngineView(final int position, View view, final ViewGroup parent) { + if (view == null) { + view = LayoutInflater.from(getContext()).inflate(R.layout.search_engine_bar_item, parent, false); + } + + LayoutParams params = (LayoutParams) view.getLayoutParams(); + params.width = iconContainerWidth; + view.setLayoutParams(params); final ImageView faviconView = (ImageView) view.findViewById(R.id.search_engine_icon); - final SearchEngine searchEngine = searchEngines.get(position); + final SearchEngine searchEngine = getItem(position); faviconView.setImageBitmap(searchEngine.getIcon()); final String desc = getResources().getString(R.string.search_bar_item_desc, searchEngine.getEngineIdentifier()); diff --git a/mobile/android/base/resources/layout/search_engine_bar_label.xml b/mobile/android/base/resources/layout/search_engine_bar_label.xml new file mode 100644 index 000000000000..c0c0d064381f --- /dev/null +++ b/mobile/android/base/resources/layout/search_engine_bar_label.xml @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/mobile/android/tests/browser/robocop/testAddSearchEngine.java b/mobile/android/tests/browser/robocop/testAddSearchEngine.java index e2a3e70a28ab..c6898d8bab04 100644 --- a/mobile/android/tests/browser/robocop/testAddSearchEngine.java +++ b/mobile/android/tests/browser/robocop/testAddSearchEngine.java @@ -156,7 +156,11 @@ public class testAddSearchEngine extends AboutHomeTest { return false; } - return (searchResultList.getAdapter().getCount() + searchEngineBar.getAdapter().getCount() == expectedCount); + final int actualCount = searchResultList.getAdapter().getCount() + + searchEngineBar.getAdapter().getCount() + - 1; // Subtract one for the search engine bar label (Bug 1172071) + + return (actualCount == expectedCount); } }, MAX_WAIT_TEST_MS); From baed76e93bdfce07bebe189241f4dd92a72f8959 Mon Sep 17 00:00:00 2001 From: Sergej Kravcenko Date: Wed, 24 Jun 2015 21:56:06 +0300 Subject: [PATCH 2/5] Bug 1175566 - Change menu_popup LinearLayout to FrameLayout. r=mcomella --- mobile/android/base/menu/MenuPopup.java | 10 +++++----- mobile/android/base/resources/layout/menu_popup.xml | 7 +++---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/mobile/android/base/menu/MenuPopup.java b/mobile/android/base/menu/MenuPopup.java index 1cbc02b1d6ee..915929b7b07b 100644 --- a/mobile/android/base/menu/MenuPopup.java +++ b/mobile/android/base/menu/MenuPopup.java @@ -13,14 +13,14 @@ import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.LinearLayout; +import android.widget.FrameLayout; import android.widget.PopupWindow; /** * A popup to show the inflated MenuPanel. */ public class MenuPopup extends PopupWindow { - private final LinearLayout mPanel; + private final FrameLayout mPanel; private final int mYOffset; private final int mPopupWidth; @@ -41,7 +41,7 @@ public class MenuPopup extends PopupWindow { ViewGroup.LayoutParams.WRAP_CONTENT); LayoutInflater inflater = LayoutInflater.from(context); - mPanel = (LinearLayout) inflater.inflate(R.layout.menu_popup, null); + mPanel = (FrameLayout) inflater.inflate(R.layout.menu_popup, null); setContentView(mPanel); setAnimationStyle(R.style.PopupAnimation); @@ -53,8 +53,8 @@ public class MenuPopup extends PopupWindow { * @param view The panel view with the menu to be shown. */ public void setPanelView(View view) { - view.setLayoutParams(new LinearLayout.LayoutParams(mPopupWidth, - LinearLayout.LayoutParams.WRAP_CONTENT)); + view.setLayoutParams(new FrameLayout.LayoutParams(mPopupWidth, + FrameLayout.LayoutParams.WRAP_CONTENT)); mPanel.removeAllViews(); mPanel.addView(view); diff --git a/mobile/android/base/resources/layout/menu_popup.xml b/mobile/android/base/resources/layout/menu_popup.xml index 69b7f0577130..a52c138f6e0c 100644 --- a/mobile/android/base/resources/layout/menu_popup.xml +++ b/mobile/android/base/resources/layout/menu_popup.xml @@ -3,15 +3,14 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - + android:background="@drawable/menu_popup_bg"> - + From 3258c903f27cde5949647a76cdf1dc3c3c2f6d75 Mon Sep 17 00:00:00 2001 From: Sergej Kravcenko Date: Wed, 24 Jun 2015 22:45:31 +0300 Subject: [PATCH 3/5] Bug 1175563 - Change LinearLayout to a less expensive View. r=mcomella --- mobile/android/base/BrowserApp.java | 1 - .../android/base/resources/layout/gecko_app.xml | 15 +++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/mobile/android/base/BrowserApp.java b/mobile/android/base/BrowserApp.java index 663d6d5318b8..c3392d101dfe 100644 --- a/mobile/android/base/BrowserApp.java +++ b/mobile/android/base/BrowserApp.java @@ -1471,7 +1471,6 @@ public class BrowserApp extends GeckoApp TransitionsTracker.track(alphaAnimator); alphaAnimator.start(); - } @Override diff --git a/mobile/android/base/resources/layout/gecko_app.xml b/mobile/android/base/resources/layout/gecko_app.xml index cad765b8bba1..f38b912bc41a 100644 --- a/mobile/android/base/resources/layout/gecko_app.xml +++ b/mobile/android/base/resources/layout/gecko_app.xml @@ -57,14 +57,13 @@ - + From d0b29b701fca2fa5e60e30484e6d1ee0151dff0f Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Mon, 29 Jun 2015 09:29:47 -0400 Subject: [PATCH 4/5] Backed out changeset 434fdc7730ef (bug 1172071) for Android bustage. --- mobile/android/base/home/SearchEngineBar.java | 71 +++---------------- .../layout/search_engine_bar_label.xml | 21 ------ .../browser/robocop/testAddSearchEngine.java | 6 +- 3 files changed, 11 insertions(+), 87 deletions(-) delete mode 100644 mobile/android/base/resources/layout/search_engine_bar_label.xml diff --git a/mobile/android/base/home/SearchEngineBar.java b/mobile/android/base/home/SearchEngineBar.java index d8d60e103ad6..02eecb4d0cdb 100644 --- a/mobile/android/base/home/SearchEngineBar.java +++ b/mobile/android/base/home/SearchEngineBar.java @@ -7,21 +7,15 @@ import android.content.Context; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Paint; -import android.graphics.drawable.Drawable; -import android.support.v4.content.ContextCompat; -import android.support.v4.graphics.drawable.DrawableCompat; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; -import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; -import android.widget.FrameLayout; import android.widget.ImageView; import org.mozilla.gecko.R; @@ -35,7 +29,6 @@ public class SearchEngineBar extends TwoWayView private static final String LOGTAG = "Gecko" + SearchEngineBar.class.getSimpleName(); private static final float ICON_CONTAINER_MIN_WIDTH_DP = 72; - private static final float LABEL_CONTAINER_WIDTH_DP = 48; private static final float DIVIDER_HEIGHT_DP = 1; public interface OnSearchBarClickListener { @@ -46,7 +39,6 @@ public class SearchEngineBar extends TwoWayView private final Paint dividerPaint; private final float minIconContainerWidth; private final float dividerHeight; - private final int labelContainerWidth; private int iconContainerWidth; private OnSearchBarClickListener onSearchBarClickListener; @@ -61,7 +53,6 @@ public class SearchEngineBar extends TwoWayView final DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); minIconContainerWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ICON_CONTAINER_MIN_WIDTH_DP, displayMetrics); dividerHeight = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DIVIDER_HEIGHT_DP, displayMetrics); - labelContainerWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, LABEL_CONTAINER_WIDTH_DP, displayMetrics); iconContainerWidth = (int) minIconContainerWidth; @@ -78,11 +69,6 @@ public class SearchEngineBar extends TwoWayView OnSearchBarClickListener.class.getSimpleName() + " is not initialized"); } - if (position == 0) { - // Ignore click on label - return; - } - final SearchEngine searchEngine = adapter.getItem(position); onSearchBarClickListener.onSearchBarClickListener(searchEngine); } @@ -99,10 +85,10 @@ public class SearchEngineBar extends TwoWayView protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - final int searchEngineCount = adapter.getCount() - 1; + final int searchEngineCount = getCount(); if (searchEngineCount > 0) { - final float availableWidthPerContainer = (getMeasuredWidth() - labelContainerWidth) / searchEngineCount; + final float availableWidthPerContainer = getMeasuredWidth() / searchEngineCount; final int desiredIconContainerSize = (int) Math.max( availableWidthPerContainer, @@ -124,9 +110,6 @@ public class SearchEngineBar extends TwoWayView } public class SearchEngineAdapter extends BaseAdapter { - private static final int VIEW_TYPE_SEARCH_ENGINE = 0; - private static final int VIEW_TYPE_LABEL = 1; - List searchEngines = new ArrayList<>(); public void setSearchEngines(final List searchEngines) { @@ -136,14 +119,12 @@ public class SearchEngineBar extends TwoWayView @Override public int getCount() { - // Adding offset for label at position 0 (Bug 1172071) - return searchEngines.size() + 1; + return searchEngines.size(); } @Override public SearchEngine getItem(final int position) { - // Returning null for the label at position 0 (Bug 1172071) - return position == 0 ? null : searchEngines.get(position - 1); + return searchEngines.get(position); } @Override @@ -151,51 +132,19 @@ public class SearchEngineBar extends TwoWayView return position; } - @Override - public int getItemViewType(int position) { - return position == 0 ? VIEW_TYPE_LABEL : VIEW_TYPE_SEARCH_ENGINE; - } - - @Override - public int getViewTypeCount() { - return 2; - } - @Override public View getView(final int position, final View convertView, final ViewGroup parent) { - if (position == 0) { - return getLabelView(convertView, parent); - } else { - return getSearchEngineView(position, convertView, parent); - } - } - - private View getLabelView(View view, final ViewGroup parent) { - if (view == null) { - view = LayoutInflater.from(getContext()).inflate(R.layout.search_engine_bar_label, parent, false); - } - - Drawable icon = DrawableCompat.wrap(ContextCompat.getDrawable(parent.getContext(), R.drawable.suggestion_item_search)); - DrawableCompat.setTint(icon, getResources().getColor(R.color.disabled_grey)); - - final ImageView iconView = (ImageView) view.findViewById(R.id.search_engine_label); - iconView.setImageDrawable(icon); - iconView.setScaleType(ImageView.ScaleType.FIT_XY); - - return view; - } - - private View getSearchEngineView(final int position, View view, final ViewGroup parent) { - if (view == null) { + final View view; + if (convertView == null) { view = LayoutInflater.from(getContext()).inflate(R.layout.search_engine_bar_item, parent, false); + } else { + view = convertView; } - LayoutParams params = (LayoutParams) view.getLayoutParams(); - params.width = iconContainerWidth; - view.setLayoutParams(params); + view.setLayoutParams(new LayoutParams(iconContainerWidth, ViewGroup.LayoutParams.MATCH_PARENT)); final ImageView faviconView = (ImageView) view.findViewById(R.id.search_engine_icon); - final SearchEngine searchEngine = getItem(position); + final SearchEngine searchEngine = searchEngines.get(position); faviconView.setImageBitmap(searchEngine.getIcon()); final String desc = getResources().getString(R.string.search_bar_item_desc, searchEngine.getEngineIdentifier()); diff --git a/mobile/android/base/resources/layout/search_engine_bar_label.xml b/mobile/android/base/resources/layout/search_engine_bar_label.xml deleted file mode 100644 index c0c0d064381f..000000000000 --- a/mobile/android/base/resources/layout/search_engine_bar_label.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - diff --git a/mobile/android/tests/browser/robocop/testAddSearchEngine.java b/mobile/android/tests/browser/robocop/testAddSearchEngine.java index c6898d8bab04..e2a3e70a28ab 100644 --- a/mobile/android/tests/browser/robocop/testAddSearchEngine.java +++ b/mobile/android/tests/browser/robocop/testAddSearchEngine.java @@ -156,11 +156,7 @@ public class testAddSearchEngine extends AboutHomeTest { return false; } - final int actualCount = searchResultList.getAdapter().getCount() - + searchEngineBar.getAdapter().getCount() - - 1; // Subtract one for the search engine bar label (Bug 1172071) - - return (actualCount == expectedCount); + return (searchResultList.getAdapter().getCount() + searchEngineBar.getAdapter().getCount() == expectedCount); } }, MAX_WAIT_TEST_MS); From 8d78aa9f2fccb8965253f0bd68675cc598221b0a Mon Sep 17 00:00:00 2001 From: Brian Grinstead Date: Mon, 29 Jun 2015 08:54:23 -0700 Subject: [PATCH 5/5] Bug 1177879 - Fix close tab icon in DevEdition for Windows hidpi;r=jaws --HG-- extra : commitid : 4mt9vOrRq2h --- browser/themes/windows/devedition.css | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/browser/themes/windows/devedition.css b/browser/themes/windows/devedition.css index 5e5a4415e57b..c56f8ed56862 100644 --- a/browser/themes/windows/devedition.css +++ b/browser/themes/windows/devedition.css @@ -200,3 +200,10 @@ .tab-close-button[visuallyselected=true]:not(:hover) { -moz-image-region: rect(0, 64px, 16px, 48px); } + +@media (min-resolution: 1.1dppx) { + .tab-close-button[visuallyselected=true]:not(:hover) { + -moz-image-region: rect(0px, 128px, 32px, 96px); + } +} +