From dff290f724aebc1e482fd814464dfdff9095676b Mon Sep 17 00:00:00 2001 From: Artem Samoilenko Date: Wed, 23 Apr 2025 15:06:31 -0400 Subject: [PATCH] [cr137] [Android] Add web app header to the main layout Chromium change: https://chromium.googlesource.com/chromium/src/+/8cf864537cf0665d3558a5848f92eb469e61fc81 [Minimal UI] Add web app header to the main layout Integrating web app header into the CCT base activity based on the feature enabled state and web app launch params. Support to show web app header in the dialogs will be added in a separate CL. HSV: https://hsv.googleplex.com/5366214560841728 Bug: 401230452 --- android/java/apk_for_test.flags | 1 + .../browser/customtabs/FullScreenCustomTabActivity.java | 9 ++++++++- .../customtabs/FullScreenCustomTabRootUiCoordinator.java | 8 ++++++-- .../org/chromium/chrome/browser/BytecodeTest.java | 7 +++++++ .../bytecode/BraveBaseCustomTabActivityClassAdapter.java | 3 +++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/android/java/apk_for_test.flags b/android/java/apk_for_test.flags index b01da40cada..8e76fa11238 100644 --- a/android/java/apk_for_test.flags +++ b/android/java/apk_for_test.flags @@ -913,6 +913,7 @@ *** mTabController; *** mMinimizationManagerHolder; *** mCustomTabFeatureOverridesManager; + *** getAppHeaderCoordinator(...); public (...); } diff --git a/android/java/org/chromium/chrome/browser/customtabs/FullScreenCustomTabActivity.java b/android/java/org/chromium/chrome/browser/customtabs/FullScreenCustomTabActivity.java index 6ad6c7a9d21..b1744ac6dc5 100644 --- a/android/java/org/chromium/chrome/browser/customtabs/FullScreenCustomTabActivity.java +++ b/android/java/org/chromium/chrome/browser/customtabs/FullScreenCustomTabActivity.java @@ -36,6 +36,7 @@ import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarC import org.chromium.chrome.browser.notifications.BravePermissionUtils; import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; import org.chromium.chrome.browser.ui.RootUiCoordinator; +import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderCoordinator; import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController; @@ -229,7 +230,13 @@ public class FullScreenCustomTabActivity extends CustomTabActivity { () -> mMinimizationManagerHolder.getMinimizationManager(), () -> mCustomTabFeatureOverridesManager, () -> getCustomTabActivityNavigationController().openCurrentUrlInBrowser(), - getEdgeToEdgeManager()); + getEdgeToEdgeManager(), + getAppHeaderCoordinator()); return mBaseCustomTabRootUiCoordinator; } + + private AppHeaderCoordinator getAppHeaderCoordinator() { + assert false : "This methos should be overridden via bytecode manipulation!"; + return null; + } } diff --git a/android/java/org/chromium/chrome/browser/customtabs/FullScreenCustomTabRootUiCoordinator.java b/android/java/org/chromium/chrome/browser/customtabs/FullScreenCustomTabRootUiCoordinator.java index 257c67b5ebd..a5f8b870b89 100644 --- a/android/java/org/chromium/chrome/browser/customtabs/FullScreenCustomTabRootUiCoordinator.java +++ b/android/java/org/chromium/chrome/browser/customtabs/FullScreenCustomTabRootUiCoordinator.java @@ -6,6 +6,7 @@ package org.chromium.chrome.browser.customtabs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import org.chromium.base.supplier.ObservableSupplier; @@ -36,6 +37,7 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.system.StatusBarColorController.StatusBarColorProvider; +import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager; import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeManager; import org.chromium.components.browser_ui.widget.MenuOrKeyboardActionController; import org.chromium.ui.base.ActivityWindowAndroid; @@ -82,7 +84,8 @@ public class FullScreenCustomTabRootUiCoordinator extends BaseCustomTabRootUiCoo @NonNull Supplier minimizeDelegateSupplier, @NonNull Supplier featureOverridesManagerSupplier, @NonNull Runnable openInBrowserRunnable, - @NonNull EdgeToEdgeManager edgeToEdgeManager) { + @NonNull EdgeToEdgeManager edgeToEdgeManager, + @Nullable DesktopWindowStateManager desktopWindowStateManager) { super( activity, shareDelegateSupplier, @@ -119,7 +122,8 @@ public class FullScreenCustomTabRootUiCoordinator extends BaseCustomTabRootUiCoo minimizeDelegateSupplier, featureOverridesManagerSupplier, openInBrowserRunnable, - edgeToEdgeManager); + edgeToEdgeManager, + desktopWindowStateManager); } @Override diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index b6272fdcb0e..3245b56931b 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -138,6 +138,7 @@ import org.chromium.chrome.browser.toolbar.top.ToolbarControlContainer; import org.chromium.chrome.browser.toolbar.top.ToolbarLayout; import org.chromium.chrome.browser.ui.appmenu.AppMenuBlocker; import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate; +import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderCoordinator; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.native_page.NativePageHost; import org.chromium.chrome.browser.ui.system.StatusBarColorController; @@ -908,6 +909,12 @@ public class BytecodeTest { void.class, boolean.class, boolean.class)); + Assert.assertTrue( + methodExists( + "org/chromium/chrome/browser/customtabs/BaseCustomTabActivity", + "getAppHeaderCoordinator", + MethodModifier.REGULAR, + AppHeaderCoordinator.class)); } @Test diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveBaseCustomTabActivityClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveBaseCustomTabActivityClassAdapter.java index c921c609da0..aa115183b00 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveBaseCustomTabActivityClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveBaseCustomTabActivityClassAdapter.java @@ -33,5 +33,8 @@ public class BraveBaseCustomTabActivityClassAdapter extends BraveClassVisitor { deleteField(sFullScreenCustomTabActivityClassName, "mCustomTabFeatureOverridesManager"); makeProtectedField(sBaseCustomTabActivityClassName, "mCustomTabFeatureOverridesManager"); + + deleteMethod(sFullScreenCustomTabActivityClassName, "getAppHeaderCoordinator"); + makePublicMethod(sBaseCustomTabActivityClassName, "getAppHeaderCoordinator"); } }