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