Bug 1357781 - Popup menu has its own theme
Both of Popup menu and Context menu will use MenuItemDefault.
However in CustomTabs, Popup menu only has one style, regardless light
or dark theme. Now we create one specific theme for it. Wish one day we
can get rid of this.
MozReview-Commit-ID: m3ynmfCjWY
--- a/mobile/android/base/java/org/mozilla/gecko/customtabs/CustomTabsActivity.java
+++ b/mobile/android/base/java/org/mozilla/gecko/customtabs/CustomTabsActivity.java
@@ -17,16 +17,17 @@ import android.net.Uri;
import android.os.Bundle;
import android.provider.Browser;
import android.support.annotation.NonNull;
import android.support.annotation.StyleRes;
import android.support.design.widget.Snackbar;
import android.support.v4.util.SparseArrayCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.view.ActionMode;
+import android.support.v7.view.ContextThemeWrapper;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ProgressBar;
@@ -34,17 +35,16 @@ import android.widget.ProgressBar;
import org.mozilla.gecko.EventDispatcher;
import org.mozilla.gecko.R;
import org.mozilla.gecko.SingleTabActivity;
import org.mozilla.gecko.SnackbarBuilder;
import org.mozilla.gecko.Tab;
import org.mozilla.gecko.Tabs;
import org.mozilla.gecko.Telemetry;
import org.mozilla.gecko.TelemetryContract;
-import org.mozilla.gecko.gfx.DynamicToolbarAnimator;
import org.mozilla.gecko.gfx.DynamicToolbarAnimator.PinReason;
import org.mozilla.gecko.menu.GeckoMenu;
import org.mozilla.gecko.menu.GeckoMenuInflater;
import org.mozilla.gecko.mozglue.SafeIntent;
import org.mozilla.gecko.util.Clipboard;
import org.mozilla.gecko.util.ColorUtil;
import org.mozilla.gecko.util.GeckoBundle;
import org.mozilla.gecko.util.IntentUtils;
@@ -375,17 +375,18 @@ public class CustomTabsActivity extends
/**
* To generate a popup menu which looks like an ordinary option menu, but have extra elements
* such as footer.
*
* @return a GeckoPopupMenu which can be placed on any view.
*/
private GeckoPopupMenu createCustomPopupMenu() {
- final GeckoPopupMenu popupMenu = new GeckoPopupMenu(this);
+ final ContextThemeWrapper themeWrapper = new ContextThemeWrapper(this, R.style.GeckoCustomTabs_PopupMenu);
+ final GeckoPopupMenu popupMenu = new GeckoPopupMenu(themeWrapper);
final GeckoMenu geckoMenu = popupMenu.getMenu();
final SafeIntent intent = new SafeIntent(getIntent());
// pass to to Activity.onMenuItemClick for consistency.
popupMenu.setOnMenuItemClickListener(new GeckoPopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
return CustomTabsActivity.this.onMenuItemClick(item);
--- a/mobile/android/base/resources/values/styles.xml
+++ b/mobile/android/base/resources/values/styles.xml
@@ -114,17 +114,17 @@
<item name="android:drawablePadding">6dip</item>
<item name="android:gravity">center_vertical</item>
<item name="android:textAppearance">@style/TextAppearance</item>
<item name="android:singleLine">true</item>
<item name="android:ellipsize">middle</item>
<item name="android:textSize">@dimen/menu_item_textsize</item>
</style>
- <style name="Widget.MenuItemCustomTabs" parent="Widget.MenuItemDefault">
+ <style name="Widget.PopupMenuItemCustomTabs" parent="Widget.MenuItemDefault">
<!-- In current design, there is only one style for Popup-menu, regardless of Dark/Light theme -->
<item name="android:textColor">@android:color/black</item>
<item name="android:textColorHighlight">?android:textColorHighlight</item>
<item name="android:textColorHint">?android:attr/textColorHint</item>
<item name="android:textColorLink">?android:attr/textColorLink</item>
</style>
<style name="Widget.FolderTitle">
--- a/mobile/android/base/resources/values/themes.xml
+++ b/mobile/android/base/resources/values/themes.xml
@@ -122,26 +122,30 @@
<!--
Themes for CustomTabsActivity. Since CustomTabsActivity usually be used by 3-rd party apps,
to create separated themes to keep look and feel be consistent with ordinary Android app.
And ensure changes to CustomTabsActivity won't effect GeckoApp.
-->
<style name="GeckoCustomTabs" parent="Theme.AppCompat.NoActionBar">
<item name="menuItemActionBarStyle">@style/Widget.MenuItemActionBar</item>
- <item name="menuItemDefaultStyle">@style/Widget.MenuItemCustomTabs</item>
+ <item name="menuItemDefaultStyle">@style/Widget.MenuItemDefault</item>
<item name="windowActionModeOverlay">true</item>
</style>
<style name="GeckoCustomTabs.Light" parent="Theme.AppCompat.Light.NoActionBar">
<item name="menuItemActionBarStyle">@style/Widget.MenuItemActionBar</item>
- <item name="menuItemDefaultStyle">@style/Widget.MenuItemCustomTabs</item>
+ <item name="menuItemDefaultStyle">@style/Widget.MenuItemDefault</item>
<item name="windowActionModeOverlay">true</item>
</style>
+ <style name="GeckoCustomTabs.PopupMenu">
+ <item name="menuItemDefaultStyle">@style/Widget.PopupMenuItemCustomTabs</item>
+ </style>
+
<!-- Bookmark full-page dialog theme -->
<style name="Bookmark" parent="Theme.AppCompat.Light.DialogWhenLarge"/>
<style name="Bookmark.Gecko" parent="Gecko">
<item name="toolbarStyle">@style/BookmarkToolbarStyle</item>
<item name="colorAccent">@color/fennec_ui_orange</item>
<item name="colorControlNormal">@color/disabled_grey</item>
<item name="android:textColorHint">@color/tabs_tray_icon_grey</item>