diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java
index 45d7cb4f07191a..82ba5869858591 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java
@@ -15,7 +15,10 @@
import androidx.appcompat.app.AppCompatActivity;
import org.chromium.base.ContextUtils;
+import org.chromium.chrome.R;
import org.chromium.chrome.browser.base.SplitCompatUtils;
+import org.chromium.chrome.browser.flags.CachedFeatureFlags;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.language.GlobalAppLocaleController;
import org.chromium.chrome.browser.night_mode.GlobalNightModeStateProviderHolder;
import org.chromium.chrome.browser.night_mode.NightModeStateProvider;
@@ -51,6 +54,9 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
initializeNightModeStateProvider();
mNightModeStateProvider.addObserver(this);
+ if (CachedFeatureFlags.isEnabled(ChromeFeatureList.THEME_REFACTOR_ANDROID)) {
+ setTheme(R.style.ThemeRefactorAppThemeOverlay);
+ }
super.onCreate(savedInstanceState);
// Activity level locale overrides must be done in onCreate.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
index 3ffd45a78dc722..724377d6fca29c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
@@ -82,6 +82,7 @@ public void cacheNativeFlags() {
ChromeFeatureList.TAB_GROUPS_CONTINUATION_ANDROID,
ChromeFeatureList.TAB_TO_GTS_ANIMATION,
ChromeFeatureList.TABBED_APP_OVERFLOW_MENU_THREE_BUTTON_ACTIONBAR,
+ ChromeFeatureList.THEME_REFACTOR_ANDROID,
ChromeFeatureList.TOOLBAR_USE_HARDWARE_BITMAP_DRAW,
ChromeFeatureList.USE_CHIME_ANDROID_SDK,
ChromeFeatureList.READ_LATER,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
index 00bd61082c4a89..162f0b05451cda 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
@@ -73,13 +73,13 @@ public class CachedFeatureFlags {
put(ChromeFeatureList.CLOSE_TAB_SUGGESTIONS, false);
put(ChromeFeatureList.CRITICAL_PERSISTED_TAB_DATA, false);
put(ChromeFeatureList.INSTANT_START, false);
- put(ChromeFeatureList.TAB_GROUPS_CONTINUATION_ANDROID, false);
put(ChromeFeatureList.TAB_TO_GTS_ANIMATION, false);
put(ChromeFeatureList.TEST_DEFAULT_DISABLED, false);
put(ChromeFeatureList.TEST_DEFAULT_ENABLED, true);
put(ChromeFeatureList.REPORT_FEED_USER_ACTIONS, false);
put(ChromeFeatureList.INTEREST_FEED_V2, true);
put(ChromeFeatureList.TABBED_APP_OVERFLOW_MENU_THREE_BUTTON_ACTIONBAR, false);
+ put(ChromeFeatureList.THEME_REFACTOR_ANDROID, false);
put(ChromeFeatureList.USE_CHIME_ANDROID_SDK, false);
put(ChromeFeatureList.CCT_INCOGNITO_AVAILABLE_TO_THIRD_PARTY, false);
put(ChromeFeatureList.READ_LATER, false);
diff --git a/chrome/browser/ui/android/appmenu/internal/java/res/drawable/menu_action_bar_bg.xml b/chrome/browser/ui/android/appmenu/internal/java/res/drawable/menu_action_bar_bg.xml
index 0db532f8ed2d58..fc3cafb7b191d7 100644
--- a/chrome/browser/ui/android/appmenu/internal/java/res/drawable/menu_action_bar_bg.xml
+++ b/chrome/browser/ui/android/appmenu/internal/java/res/drawable/menu_action_bar_bg.xml
@@ -8,10 +8,10 @@
android:shape="rectangle">
-
\ No newline at end of file
+
diff --git a/chrome/browser/ui/android/appmenu/internal/java/res/values/dimens.xml b/chrome/browser/ui/android/appmenu/internal/java/res/values/dimens.xml
index c8a9773f947504..1953438140f889 100644
--- a/chrome/browser/ui/android/appmenu/internal/java/res/values/dimens.xml
+++ b/chrome/browser/ui/android/appmenu/internal/java/res/values/dimens.xml
@@ -11,4 +11,7 @@
500dp
+
+
+ @dimen/default_elevation_2
diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java
index 8195ba51211467..821401f47c02fb 100644
--- a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java
+++ b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java
@@ -37,7 +37,6 @@
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
-import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.ContextUtils;
import org.chromium.base.SysUtils;
import org.chromium.base.metrics.RecordHistogram;
@@ -212,10 +211,7 @@ void show(Context context, final View anchorView, boolean isByPermanentButton,
// drawable here even though our style says @null we should use this padding instead...
Drawable originalBgDrawable = mPopup.getBackground();
- // Need to explicitly set the background here. Relying on it being set in the style caused
- // an incorrectly drawn background.
- mPopup.setBackgroundDrawable(ApiCompatibilityUtils.getDrawable(
- context.getResources(), R.drawable.popup_bg_tinted));
+ mPopup.setBackgroundDrawable(null);
// Make sure that the popup window will be closed when touch outside of it.
mPopup.setOutsideTouchable(true);
@@ -224,14 +220,6 @@ void show(Context context, final View anchorView, boolean isByPermanentButton,
// Turn off window animations for low end devices.
if (SysUtils.isLowEndDevice()) mPopup.setAnimationStyle(0);
- Rect bgPadding = new Rect();
- mPopup.getBackground().getPadding(bgPadding);
-
- int menuWidth = context.getResources().getDimensionPixelSize(R.dimen.menu_width);
- int popupWidth = menuWidth + bgPadding.left + bgPadding.right;
-
- mPopup.setWidth(popupWidth);
-
mCurrentScreenRotation = screenRotation;
mIsByPermanentButton = isByPermanentButton;
@@ -246,6 +234,25 @@ void show(Context context, final View anchorView, boolean isByPermanentButton,
}
}
+ // A List adapter for visible items in the Menu. The first row is added as a header to the
+ // list view.
+ mAdapter = new AppMenuAdapter(this, menuItems, LayoutInflater.from(context),
+ highlightedItemId, customViewBinders, mIconBeforeItem);
+
+ ViewGroup contentView =
+ (ViewGroup) LayoutInflater.from(context).inflate(R.layout.app_menu_layout, null);
+ // Setting android:clipToOutline in xml causes an "attribute not found" error.
+ contentView.setClipToOutline(true);
+ mPopup.setElevation(context.getResources().getDimensionPixelSize(R.dimen.menu_elevation));
+
+ Rect bgPadding = new Rect();
+ contentView.getBackground().getPadding(bgPadding);
+
+ int menuWidth = context.getResources().getDimensionPixelSize(R.dimen.menu_width);
+ int popupWidth = menuWidth + bgPadding.left + bgPadding.right;
+
+ mPopup.setWidth(popupWidth);
+
Rect sizingPadding = new Rect(bgPadding);
if (isByPermanentButton && originalBgDrawable != null) {
Rect originalPadding = new Rect();
@@ -254,13 +261,6 @@ void show(Context context, final View anchorView, boolean isByPermanentButton,
sizingPadding.bottom = originalPadding.bottom;
}
- // A List adapter for visible items in the Menu. The first row is added as a header to the
- // list view.
- mAdapter = new AppMenuAdapter(this, menuItems, LayoutInflater.from(context),
- highlightedItemId, customViewBinders, mIconBeforeItem);
-
- ViewGroup contentView =
- (ViewGroup) LayoutInflater.from(context).inflate(R.layout.app_menu_layout, null);
mListView = (ListView) contentView.findViewById(R.id.app_menu_list);
int footerHeight = inflateFooter(footerResourceId, contentView, menuWidth);
diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuTest.java b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuTest.java
index b7b718d72450e2..eb586a7f51bcb9 100644
--- a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuTest.java
+++ b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuTest.java
@@ -860,16 +860,14 @@ private View getViewAtPosition(int index) {
private Rect getPopupLocationRect() {
View contentView = mAppMenuHandler.getAppMenu().getPopup().getContentView();
CriteriaHelper.pollUiThread(() -> contentView.getHeight() != 0);
- Rect bgPadding = new Rect();
- mAppMenuHandler.getAppMenu().getPopup().getBackground().getPadding(bgPadding);
Rect popupRect = new Rect();
int[] popupLocation = new int[2];
contentView.getLocationOnScreen(popupLocation);
- popupRect.left = popupLocation[0] - bgPadding.left;
- popupRect.top = popupLocation[1] - bgPadding.top;
- popupRect.right = popupLocation[0] + contentView.getWidth() + bgPadding.right;
- popupRect.bottom = popupLocation[1] + contentView.getHeight() + bgPadding.bottom;
+ popupRect.left = popupLocation[0];
+ popupRect.top = popupLocation[1];
+ popupRect.right = popupLocation[0] + contentView.getWidth();
+ popupRect.bottom = popupLocation[1] + contentView.getHeight();
return popupRect;
}
diff --git a/components/browser_ui/styles/android/BUILD.gn b/components/browser_ui/styles/android/BUILD.gn
index 215def3d4630ab..6becce38d3bad8 100644
--- a/components/browser_ui/styles/android/BUILD.gn
+++ b/components/browser_ui/styles/android/BUILD.gn
@@ -182,5 +182,8 @@ android_resources("java_resources") {
sources += [ "java/res-arcore/drawable/ic_ar_core_install.xml" ]
}
- deps = [ "//ui/android:ui_java_resources" ]
+ deps = [
+ "//third_party/android_deps:material_design_java",
+ "//ui/android:ui_java_resources",
+ ]
}
diff --git a/components/browser_ui/styles/android/java/res/values/styles.xml b/components/browser_ui/styles/android/java/res/values/styles.xml
index 92dd5f10d299b6..74da5676c78556 100644
--- a/components/browser_ui/styles/android/java/res/values/styles.xml
+++ b/components/browser_ui/styles/android/java/res/values/styles.xml
@@ -42,6 +42,9 @@
@style/TextAppearance.TextLarge.Primary
- @style/PopupMenuStyle
+
+
+ - @dimen/popup_bg_corner_radius
@@ -152,4 +155,9 @@
- @color/default_control_color_active
+
+
+
diff --git a/components/browser_ui/widget/android/BUILD.gn b/components/browser_ui/widget/android/BUILD.gn
index 48520a778c5877..2a850f572b7326 100644
--- a/components/browser_ui/widget/android/BUILD.gn
+++ b/components/browser_ui/widget/android/BUILD.gn
@@ -118,6 +118,7 @@ android_library("java") {
"//components/embedder_support/android:util_java",
"//third_party/android_deps:android_support_v4_java",
"//third_party/android_deps:android_support_v7_appcompat_java",
+ "//third_party/android_deps:material_design_java",
"//third_party/androidx:androidx_annotation_annotation_java",
"//third_party/androidx:androidx_appcompat_appcompat_resources_java",
"//third_party/androidx:androidx_coordinatorlayout_coordinatorlayout_java",
@@ -176,6 +177,7 @@ android_resources("java_resources") {
"java/res/drawable-xxxhdpi/ic_drag_handle_grey600_24dp.png",
"java/res/drawable-xxxhdpi/ic_more_vert_24dp_on_dark_bg.png",
"java/res/drawable-xxxhdpi/ic_more_vert_24dp_on_light_bg.png",
+ "java/res/drawable/app_menu_bg.xml",
"java/res/drawable/async_image_view_unavailable.xml",
"java/res/drawable/async_image_view_waiting.xml",
"java/res/drawable/hairline_border_card_background.xml",
@@ -233,6 +235,7 @@ android_resources("java_resources") {
deps = [
"//components/browser_ui/strings/android:browser_ui_strings_grd",
"//components/browser_ui/styles/android:java_resources",
+ "//third_party/android_deps:material_design_java",
"//ui/android:ui_java_resources",
]
}
diff --git a/components/browser_ui/widget/android/java/res/drawable/app_menu_bg.xml b/components/browser_ui/widget/android/java/res/drawable/app_menu_bg.xml
new file mode 100644
index 00000000000000..927786569d1d7b
--- /dev/null
+++ b/components/browser_ui/widget/android/java/res/drawable/app_menu_bg.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ -
+
+
+
+
+
+
+
diff --git a/components/browser_ui/widget/android/java/res/layout/app_menu_layout.xml b/components/browser_ui/widget/android/java/res/layout/app_menu_layout.xml
index 64be243694338d..71be4953ecf023 100644
--- a/components/browser_ui/widget/android/java/res/layout/app_menu_layout.xml
+++ b/components/browser_ui/widget/android/java/res/layout/app_menu_layout.xml
@@ -7,7 +7,8 @@
+ android:orientation="vertical"
+ android:background="@drawable/app_menu_bg">
-
\ No newline at end of file
diff --git a/components/browser_ui/widget/android/java/res/values/dimens.xml b/components/browser_ui/widget/android/java/res/values/dimens.xml
index 8a1db9d096142e..130d2682969a8d 100644
--- a/components/browser_ui/widget/android/java/res/values/dimens.xml
+++ b/components/browser_ui/widget/android/java/res/values/dimens.xml
@@ -96,11 +96,11 @@
5dp
10dp
-
- 80dp
+
+ 80dp
-
- 12dp
+
+ 12dp
2dp
@@ -129,4 +129,10 @@
2.5dp
-16dp
+
+ ?attr/menuCornerSize
+ @dimen/default_shadow_length_elev_2
+
+
+ 28dp
diff --git a/ui/android/java/res/values/attrs.xml b/ui/android/java/res/values/attrs.xml
index f28e3ffabfd5d0..3802a9de789059 100644
--- a/ui/android/java/res/values/attrs.xml
+++ b/ui/android/java/res/values/attrs.xml
@@ -7,6 +7,8 @@
+
+
diff --git a/ui/android/java/res/values/dimens.xml b/ui/android/java/res/values/dimens.xml
index e819eed22fe0e2..ccfdc231699a05 100644
--- a/ui/android/java/res/values/dimens.xml
+++ b/ui/android/java/res/values/dimens.xml
@@ -90,4 +90,10 @@
-->
12.0mm
+
+
+ 3dp
+
+
+ 6dp