From 720a04d17e6c14ed1c3db1ed5e27f4c4f87ae5f5 Mon Sep 17 00:00:00 2001 From: Artem Samoilenko Date: Wed, 22 May 2024 21:30:55 -0400 Subject: [PATCH 1/2] [Android] Fix for missing edit url suggestion on url focus --- android/java/apk_for_test.flags | 8 ++++ .../chromium/chrome/browser/BytecodeTest.java | 11 +++++ browser/ui/android/omnibox/BUILD.gn | 1 + .../BraveEditUrlSuggestionProcessor.java | 45 +++++++++++++++++++ build/android/bytecode/BUILD.gn | 1 + .../org/brave/bytecode/BraveClassAdapter.java | 1 + ...ditUrlSuggestionProcessorClassAdapter.java | 21 +++++++++ 7 files changed, 88 insertions(+) create mode 100644 browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/BraveEditUrlSuggestionProcessor.java create mode 100644 build/android/bytecode/java/org/brave/bytecode/BraveEditUrlSuggestionProcessorClassAdapter.java diff --git a/android/java/apk_for_test.flags b/android/java/apk_for_test.flags index 1ab1f89971b6..230a5b1ba592 100644 --- a/android/java/apk_for_test.flags +++ b/android/java/apk_for_test.flags @@ -857,3 +857,11 @@ -keep class org.chromium.chrome.browser.omnibox.BraveAutocompleteEditText { public (...); } + +-keep class org.chromium.chrome.browser.omnibox.suggestions.editurl.EditUrlSuggestionProcessor { + public (...); +} + +-keep class org.chromium.chrome.browser.omnibox.suggestions.editurl.BraveEditUrlSuggestionProcessor { + public (...); +} diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index 2978b27b5854..d2e9aafe2244 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -85,6 +85,7 @@ import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteDelegate; import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsDropdownEmbedder; import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsDropdownScrollListener; +import org.chromium.chrome.browser.omnibox.suggestions.SuggestionHost; import org.chromium.chrome.browser.omnibox.suggestions.basic.BasicSuggestionProcessor.BookmarkState; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.share.ShareDelegateImpl; @@ -159,6 +160,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.List; +import java.util.Optional; import java.util.function.BooleanSupplier; import java.util.function.Consumer; import java.util.function.Function; @@ -1595,6 +1597,15 @@ public void testConstructorsExistAndMatch() throws Exception { "org/chromium/chrome/browser/omnibox/BraveAutocompleteEditText", Context.class, AttributeSet.class)); + Assert.assertTrue( + constructorsMatch( + "org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProcessor", + "org/chromium/chrome/browser/omnibox/suggestions/editurl/BraveEditUrlSuggestionProcessor", + Context.class, + SuggestionHost.class, + Optional.class, + Supplier.class, + Supplier.class)); } @Test diff --git a/browser/ui/android/omnibox/BUILD.gn b/browser/ui/android/omnibox/BUILD.gn index f408a0bd7114..bcecf3164d86 100644 --- a/browser/ui/android/omnibox/BUILD.gn +++ b/browser/ui/android/omnibox/BUILD.gn @@ -12,6 +12,7 @@ android_library("java") { "java/src/org/chromium/chrome/browser/omnibox/BraveAutocompleteEditText.java", "java/src/org/chromium/chrome/browser/omnibox/OmniboxPrefManager.java", "java/src/org/chromium/chrome/browser/omnibox/status/BraveStatusMediator.java", + "java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/BraveEditUrlSuggestionProcessor.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteCoordinator.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/BraveDropdownItemViewInfoListBuilder.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/BraveDropdownItemViewInfoListManager.java", diff --git a/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/BraveEditUrlSuggestionProcessor.java b/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/BraveEditUrlSuggestionProcessor.java new file mode 100644 index 000000000000..bd8df79cd4c3 --- /dev/null +++ b/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/BraveEditUrlSuggestionProcessor.java @@ -0,0 +1,45 @@ +/* Copyright (c) 2024 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 https://mozilla.org/MPL/2.0/. */ + +package org.chromium.chrome.browser.omnibox.suggestions.editurl; + +import android.content.Context; + +import androidx.annotation.NonNull; + +import org.chromium.base.supplier.Supplier; +import org.chromium.chrome.browser.omnibox.styles.OmniboxImageSupplier; +import org.chromium.chrome.browser.omnibox.suggestions.SuggestionHost; +import org.chromium.chrome.browser.share.ShareDelegate; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.components.omnibox.AutocompleteMatch; + +import java.util.Optional; + +public class BraveEditUrlSuggestionProcessor extends EditUrlSuggestionProcessor { + private final @NonNull Supplier mTabSupplier; + + public BraveEditUrlSuggestionProcessor( + Context context, + SuggestionHost suggestionHost, + Optional imageSupplier, + Supplier tabSupplier, + Supplier shareDelegateSupplier) { + super(context, suggestionHost, imageSupplier, tabSupplier, shareDelegateSupplier); + + mTabSupplier = tabSupplier; + } + + @Override + public boolean doesProcessSuggestion(@NonNull AutocompleteMatch suggestion, int position) { + // If url hasn't changed we still want to show the edit url suggestion. + Tab activeTab = mTabSupplier.get(); + if (activeTab != null && suggestion.getUrl().equals(activeTab.getUrl())) { + return true; + } + + return super.doesProcessSuggestion(suggestion, position); + } +} diff --git a/build/android/bytecode/BUILD.gn b/build/android/bytecode/BUILD.gn index ca78abf87579..f91a430bf6d1 100644 --- a/build/android/bytecode/BUILD.gn +++ b/build/android/bytecode/BUILD.gn @@ -43,6 +43,7 @@ java_binary("java_bytecode_rewriter") { "//brave/build/android/bytecode/java/org/brave/bytecode/BraveDropdownItemViewInfoListBuilderClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveDropdownItemViewInfoListManagerClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveDynamicColorsClassAdapter.java", + "//brave/build/android/bytecode/java/org/brave/bytecode/BraveEditUrlSuggestionProcessorClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveExternalNavigationHandlerClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveFeedSurfaceCoordinatorClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveFeedSurfaceMediatorClassAdapter.java", diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java index 2edc519ce470..f1ec2e3d1644 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java @@ -42,6 +42,7 @@ public static ClassVisitor createAdapter(ClassVisitor chain) { chain = new BraveDropdownItemViewInfoListBuilderClassAdapter(chain); chain = new BraveDropdownItemViewInfoListManagerClassAdapter(chain); chain = new BraveDynamicColorsClassAdapter(chain); + chain = new BraveEditUrlSuggestionProcessorClassAdapter(chain); chain = new BraveExternalNavigationHandlerClassAdapter(chain); chain = new BraveFeedSurfaceCoordinatorClassAdapter(chain); chain = new BraveFeedSurfaceMediatorClassAdapter(chain); diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveEditUrlSuggestionProcessorClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveEditUrlSuggestionProcessorClassAdapter.java new file mode 100644 index 000000000000..4281756eb9cc --- /dev/null +++ b/build/android/bytecode/java/org/brave/bytecode/BraveEditUrlSuggestionProcessorClassAdapter.java @@ -0,0 +1,21 @@ +/* Copyright (c) 2024 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 https://mozilla.org/MPL/2.0/. */ + +package org.brave.bytecode; + +import org.objectweb.asm.ClassVisitor; + +public class BraveEditUrlSuggestionProcessorClassAdapter extends BraveClassVisitor { + static String sEditUrlSuggestionProcessorName = + "org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProcessor"; + static String sBraveEditUrlSuggestionProcessorName = + "org/chromium/chrome/browser/omnibox/suggestions/editurl/BraveEditUrlSuggestionProcessor"; + + public BraveEditUrlSuggestionProcessorClassAdapter(ClassVisitor visitor) { + super(visitor); + + redirectConstructor(sEditUrlSuggestionProcessorName, sBraveEditUrlSuggestionProcessorName); + } +} From 513c26177fbd5a9b837d069d2c936e70a2a11840 Mon Sep 17 00:00:00 2001 From: Artem Samoilenko Date: Thu, 23 May 2024 07:34:53 -0400 Subject: [PATCH 2/2] Presubmit fixes --- browser/ui/android/omnibox/BUILD.gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/ui/android/omnibox/BUILD.gn b/browser/ui/android/omnibox/BUILD.gn index bcecf3164d86..b667b3c3808a 100644 --- a/browser/ui/android/omnibox/BUILD.gn +++ b/browser/ui/android/omnibox/BUILD.gn @@ -12,7 +12,6 @@ android_library("java") { "java/src/org/chromium/chrome/browser/omnibox/BraveAutocompleteEditText.java", "java/src/org/chromium/chrome/browser/omnibox/OmniboxPrefManager.java", "java/src/org/chromium/chrome/browser/omnibox/status/BraveStatusMediator.java", - "java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/BraveEditUrlSuggestionProcessor.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteCoordinator.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/BraveDropdownItemViewInfoListBuilder.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/BraveDropdownItemViewInfoListManager.java", @@ -24,6 +23,7 @@ android_library("java") { "java/src/org/chromium/chrome/browser/omnibox/suggestions/brave_search/BraveSearchBannerProcessor.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/brave_search/BraveSearchBannerProperties.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/brave_search/BraveSearchBannerViewBinder.java", + "java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/BraveEditUrlSuggestionProcessor.java", ] deps = [