From b19af7a8fe50db0d52580d962e5a222909d7f8f6 Mon Sep 17 00:00:00 2001 From: samartnik Date: Wed, 19 May 2021 13:33:25 -0400 Subject: [PATCH] [Android] Changes for search engine logo Chromium change: https://chromium.googlesource.com/chromium/src/+/ea3ad04f98806c71fa5d7ed91faa1afeb1f61cd1 Remove search engine logo feature flag and cleanup surrounding code - Simplified the logo/no-logo padding cases and removed associated plumbing (mostly in LocationBarMediator/Phone). - Simplified SearchEngineLogoUtils as the feature is enabled by default. - Removed search engine logo feature flag. - Move ReturnToChromeExperimentsUtil#isCanonicalizedNTPUrl to UrlUtilities and generalize it a bit. Bug: 1178959 --- android/brave_java_sources.gni | 1 + android/java/apk_for_test.flags | 8 ++++ .../omnibox/status/BraveStatusMediator.java | 43 +++++++++++++++++++ .../chromium/chrome/browser/BytecodeTest.java | 17 ++++++++ build/android/bytecode/BUILD.gn | 1 + .../org/brave/bytecode/BraveClassAdapter.java | 1 + .../BraveStatusMediatorClassAdapter.java | 24 +++++++++++ 7 files changed, 95 insertions(+) create mode 100644 android/java/org/chromium/chrome/browser/omnibox/status/BraveStatusMediator.java create mode 100644 build/android/bytecode/java/org/brave/bytecode/BraveStatusMediatorClassAdapter.java diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index eef3cf22d7b..47ee1520dfd 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -113,6 +113,7 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/ntp_background_images/util/NTPUtil.java", "../../brave/android/java/org/chromium/chrome/browser/ntp_background_images/util/NewTabPageListener.java", "../../brave/android/java/org/chromium/chrome/browser/ntp_background_images/util/SponsoredImageUtil.java", + "../../brave/android/java/org/chromium/chrome/browser/omnibox/status/BraveStatusMediator.java", "../../brave/android/java/org/chromium/chrome/browser/omnibox/suggestions/editurl/BraveEditUrlSuggestionProcessor.java", "../../brave/android/java/org/chromium/chrome/browser/onboarding/BraveRewardsOnboardingFragment.java", "../../brave/android/java/org/chromium/chrome/browser/onboarding/OnViewPagerAction.java", diff --git a/android/java/apk_for_test.flags b/android/java/apk_for_test.flags index 42f347bcb41..7a85ccb20ba 100644 --- a/android/java/apk_for_test.flags +++ b/android/java/apk_for_test.flags @@ -299,4 +299,12 @@ -keep class org.chromium.chrome.browser.notifications.BraveNotificationManagerProxyImpl { public (...); +} + +-keep class org.chromium.chrome.browser.omnibox.status.StatusMediator { + public (...); +} + +-keep class org.chromium.chrome.browser.omnibox.status.BraveStatusMediator { + public (...); } \ No newline at end of file diff --git a/android/java/org/chromium/chrome/browser/omnibox/status/BraveStatusMediator.java b/android/java/org/chromium/chrome/browser/omnibox/status/BraveStatusMediator.java new file mode 100644 index 00000000000..5a634579302 --- /dev/null +++ b/android/java/org/chromium/chrome/browser/omnibox/status/BraveStatusMediator.java @@ -0,0 +1,43 @@ +/* Copyright (c) 2021 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * 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/. */ + +package org.chromium.chrome.browser.omnibox.status; + +import android.content.Context; +import android.content.res.Resources; + +import org.chromium.base.supplier.OneshotSupplier; +import org.chromium.base.supplier.Supplier; +import org.chromium.chrome.browser.omnibox.LocationBarDataProvider; +import org.chromium.chrome.browser.omnibox.SearchEngineLogoUtils; +import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider; +import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.components.permissions.PermissionDialogController; +import org.chromium.components.search_engines.TemplateUrlService; +import org.chromium.ui.base.WindowAndroid; +import org.chromium.ui.modelutil.PropertyModel; + +public class BraveStatusMediator extends StatusMediator { + // To delete in bytecode, members from parent class will be used instead. + private boolean mUrlHasFocus; + + public BraveStatusMediator(PropertyModel model, Resources resources, Context context, + UrlBarEditingTextStateProvider urlBarEditingTextStateProvider, boolean isTablet, + LocationBarDataProvider locationBarDataProvider, + PermissionDialogController permissionDialogController, + SearchEngineLogoUtils searchEngineLogoUtils, + OneshotSupplier templateUrlServiceSupplier, + Supplier profileSupplier, PageInfoIPHController pageInfoIPHController, + WindowAndroid windowAndroid) { + super(model, resources, context, urlBarEditingTextStateProvider, isTablet, + locationBarDataProvider, permissionDialogController, searchEngineLogoUtils, + templateUrlServiceSupplier, profileSupplier, pageInfoIPHController, windowAndroid); + } + + @Override + boolean shouldDisplaySearchEngineIcon() { + return super.shouldDisplaySearchEngineIcon() && mUrlHasFocus; + } +} diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index d0ed6b99699..be132fe9d70 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -7,6 +7,7 @@ package org.chromium.chrome.browser; import android.app.Activity; import android.content.Context; +import android.content.res.Resources; import android.support.test.filters.SmallTest; import android.view.View; import android.view.ViewGroup; @@ -33,6 +34,10 @@ import org.chromium.chrome.browser.identity_disc.IdentityDiscController; import org.chromium.chrome.browser.init.StartupTabPreloader; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher; +import org.chromium.chrome.browser.omnibox.LocationBarDataProvider; +import org.chromium.chrome.browser.omnibox.SearchEngineLogoUtils; +import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider; +import org.chromium.chrome.browser.omnibox.status.PageInfoIPHController; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager; import org.chromium.chrome.browser.tabmodel.ChromeTabCreator; @@ -49,6 +54,7 @@ import org.chromium.chrome.browser.ui.system.StatusBarColorController; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator; import org.chromium.components.embedder_support.browser_context.BrowserContextHandle; +import org.chromium.components.permissions.PermissionDialogController; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modelutil.PropertyModel; @@ -159,6 +165,9 @@ public class BytecodeTest { "org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities")); Assert.assertTrue(classExists( "org/chromium/chrome/browser/tasks/tab_management/BraveTabUiFeatureUtilities")); + Assert.assertTrue(classExists("org/chromium/chrome/browser/omnibox/status/StatusMediator")); + Assert.assertTrue( + classExists("org/chromium/chrome/browser/omnibox/status/BraveStatusMediator")); } @Test @@ -311,6 +320,14 @@ public class BytecodeTest { "org/chromium/components/browser_ui/notifications/NotificationManagerProxyImpl", "org/chromium/chrome/browser/notifications/BraveNotificationManagerProxyImpl", Context.class)); + Assert.assertTrue( + constructorsMatch("org/chromium/chrome/browser/omnibox/status/StatusMediator", + "org/chromium/chrome/browser/omnibox/status/BraveStatusMediator", + PropertyModel.class, Resources.class, Context.class, + UrlBarEditingTextStateProvider.class, boolean.class, + LocationBarDataProvider.class, PermissionDialogController.class, + SearchEngineLogoUtils.class, OneshotSupplier.class, Supplier.class, + PageInfoIPHController.class, WindowAndroid.class)); } @Test diff --git a/build/android/bytecode/BUILD.gn b/build/android/bytecode/BUILD.gn index a2b9e7f1682..9fc3d43c0e8 100644 --- a/build/android/bytecode/BUILD.gn +++ b/build/android/bytecode/BUILD.gn @@ -38,6 +38,7 @@ java_binary("java_bytecode_rewriter") { "//brave/build/android/bytecode/java/org/brave/bytecode/BraveSettingsLauncherImplClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveSingleCategorySettingsClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveSiteSettingsDelegateClassAdapter.java", + "//brave/build/android/bytecode/java/org/brave/bytecode/BraveStatusMediatorClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveTabGroupUiCoordinatorClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveTabSwitcherModeTTCoordinatorPhoneClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveTabSwitcherModeTTPhoneClassAdapter.java", diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java index 7182cb98be4..8e800477c51 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java @@ -37,6 +37,7 @@ public class BraveClassAdapter { chain = new BraveSettingsLauncherImplClassAdapter(chain); chain = new BraveSingleCategorySettingsClassAdapter(chain); chain = new BraveSiteSettingsDelegateClassAdapter(chain); + chain = new BraveStatusMediatorClassAdapter(chain); chain = new BraveTabbedActivityClassAdapter(chain); chain = new BraveTabGroupUiCoordinatorClassAdapter(chain); chain = new BraveTabSwitcherModeTTCoordinatorPhoneClassAdapter(chain); diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveStatusMediatorClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveStatusMediatorClassAdapter.java new file mode 100644 index 00000000000..1fb71384488 --- /dev/null +++ b/build/android/bytecode/java/org/brave/bytecode/BraveStatusMediatorClassAdapter.java @@ -0,0 +1,24 @@ +/* Copyright (c) 2021 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * 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/. */ + +package org.brave.bytecode; + +import org.objectweb.asm.ClassVisitor; + +public class BraveStatusMediatorClassAdapter extends BraveClassVisitor { + static String sStatusMediatorClassName = + "org/chromium/chrome/browser/omnibox/status/StatusMediator"; + static String sBraveStatusMediatorClassName = + "org/chromium/chrome/browser/omnibox/status/BraveStatusMediator"; + + public BraveStatusMediatorClassAdapter(ClassVisitor visitor) { + super(visitor); + + redirectConstructor(sStatusMediatorClassName, sBraveStatusMediatorClassName); + + deleteField(sBraveStatusMediatorClassName, "mUrlHasFocus"); + makeProtectedField(sStatusMediatorClassName, "mUrlHasFocus"); + } +}