[Android] Migrate HelpAndFeedbackLauncherDelegate to ServiceLoader

Depends on https://chrome-internal-review.googlesource.com/c/clank/internal/apps/+/7709326

Cq-Include-Trybots: luci.chrome.try:android-internal-rel,android-internal-binary-size
Bug: 40901855
Change-Id: I2bbb952acdcf71954c5a3c654c5e9751ee9fd558
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5889881
Owners-Override: Andrew Grieve <agrieve@chromium.org>
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1361311}
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index efc401e..94aedf5 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -293,7 +293,6 @@
   java_group("delegate_public_impl_java") {
     deps = [
       "//chrome/android/modules/readaloud/public:provider_public_java",
-      "//chrome/browser/feedback/android:delegate_public_impl_java",
       "//chrome/browser/lens:delegate_public_impl_java",
       "//chrome/browser/locale:delegate_public_impl_java",
       "//chrome/browser/supervised_user:parent_auth_delegate_impl_java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherImpl.java
index 372e0f52..ba21d89 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherImpl.java
@@ -14,6 +14,7 @@
 
 import androidx.annotation.Nullable;
 
+import org.chromium.base.ServiceLoaderUtil;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.metrics.RecordUserAction;
@@ -51,16 +52,22 @@
 
     private HelpAndFeedbackLauncherImpl(Profile profile) {
         mProfile = profile;
-        mDelegate = new HelpAndFeedbackLauncherDelegateImpl();
+
+        HelpAndFeedbackLauncherDelegate delegate =
+                ServiceLoaderUtil.maybeCreate(HelpAndFeedbackLauncherDelegate.class);
+        if (delegate == null) {
+            delegate = new FallbackHelpAndFeedbackLauncherDelegate();
+        }
+        mDelegate = delegate;
     }
 
     /**
      * Starts an activity showing a help page for the specified context ID.
      *
-     * @param activity The activity to use for starting the help activity and to take a
-     *                 screenshot of.
+     * @param activity The activity to use for starting the help activity and to take a screenshot
+     *     of.
      * @param helpContext One of the CONTEXT_* constants. This should describe the user's current
-     *                    context and will be used to show a more relevant help page.
+     *     context and will be used to show a more relevant help page.
      * @param url the current URL. May be null.
      */
     @Override
diff --git a/chrome/browser/feedback/android/BUILD.gn b/chrome/browser/feedback/android/BUILD.gn
index b7abc32..324c3169 100644
--- a/chrome/browser/feedback/android/BUILD.gn
+++ b/chrome/browser/feedback/android/BUILD.gn
@@ -55,9 +55,11 @@
   sources = [
     "java/src/org/chromium/chrome/browser/feedback/AsyncFeedbackSourceAdapter.java",
     "java/src/org/chromium/chrome/browser/feedback/DeviceInfoFeedbackSource.java",
+    "java/src/org/chromium/chrome/browser/feedback/FallbackHelpAndFeedbackLauncherDelegate.java",
     "java/src/org/chromium/chrome/browser/feedback/FamilyInfoFeedbackSource.java",
     "java/src/org/chromium/chrome/browser/feedback/FeedbackContextFeedbackSource.java",
     "java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncher.java",
+    "java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherDelegate.java",
     "java/src/org/chromium/chrome/browser/feedback/IMEFeedbackSource.java",
     "java/src/org/chromium/chrome/browser/feedback/InterestFeedFeedbackSource.java",
     "java/src/org/chromium/chrome/browser/feedback/LowEndDeviceFeedbackSource.java",
@@ -68,7 +70,6 @@
     "java/src/org/chromium/chrome/browser/feedback/VariationsFeedbackSource.java",
   ]
   deps = [
-    ":delegate_java",
     ":feedback_collector_java",
     ":java_resources",
     "//base:base_java",
@@ -84,10 +85,7 @@
     "//third_party/jni_zero:jni_zero_java",
     "//ui/android:ui_no_recycler_view_java",
   ]
-  public_deps = [
-    ":delegate_java",
-    ":feedback_collector_java",
-  ]
+  public_deps = [ ":feedback_collector_java" ]
 
   resources_package = "org.chromium.chrome.browser.feedback"
 }
@@ -113,34 +111,6 @@
   ]
 }
 
-android_library("delegate_java") {
-  sources = [
-    "java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherDelegate.java",
-    "java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherDelegateImpl.java",
-  ]
-
-  deps = [
-    ":feedback_collector_java",
-    "//base:base_java",
-    "//third_party/androidx:androidx_annotation_annotation_java",
-  ]
-
-  # Add the actual implementation where necessary so that downstream targets
-  # can provide their own implementations.
-  jar_excluded_patterns = [ "*/HelpAndFeedbackLauncherDelegateImpl.class" ]
-}
-
-android_library("delegate_public_impl_java") {
-  sources = [ "java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherDelegateImpl.java" ]
-
-  deps = [
-    ":delegate_java",
-    ":feedback_collector_java",
-    "//base:base_java",
-    "//third_party/androidx:androidx_annotation_annotation_java",
-  ]
-}
-
 android_resources("java_resources") {
   sources = [ "java/res/values/strings.xml" ]
 }
diff --git a/chrome/browser/feedback/android/java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherDelegateImpl.java b/chrome/browser/feedback/android/java/src/org/chromium/chrome/browser/feedback/FallbackHelpAndFeedbackLauncherDelegate.java
similarity index 84%
rename from chrome/browser/feedback/android/java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherDelegateImpl.java
rename to chrome/browser/feedback/android/java/src/org/chromium/chrome/browser/feedback/FallbackHelpAndFeedbackLauncherDelegate.java
index a403deeb..7e4859e6 100644
--- a/chrome/browser/feedback/android/java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherDelegateImpl.java
+++ b/chrome/browser/feedback/android/java/src/org/chromium/chrome/browser/feedback/FallbackHelpAndFeedbackLauncherDelegate.java
@@ -13,9 +13,9 @@
 /**
  * Basic implementation for displaying help support for Chrome.
  *
- * NOTE: This class is designed to be replaced by downstream targets.
+ * <p>NOTE: This class is designed to be replaced by downstream targets.
  */
-public class HelpAndFeedbackLauncherDelegateImpl implements HelpAndFeedbackLauncherDelegate {
+public class FallbackHelpAndFeedbackLauncherDelegate implements HelpAndFeedbackLauncherDelegate {
     private static final String TAG = "HelpAndFeedback";
 
     @Override
diff --git a/chrome/browser/password_manager/android/BUILD.gn b/chrome/browser/password_manager/android/BUILD.gn
index a7241c9..6e581b4 100644
--- a/chrome/browser/password_manager/android/BUILD.gn
+++ b/chrome/browser/password_manager/android/BUILD.gn
@@ -313,7 +313,6 @@
     "//base:base_java_test_support",
     "//base:base_java_test_support_uncommon",
     "//base:base_junit_test_support",
-    "//chrome/browser/feedback/android:delegate_public_impl_java",
     "//chrome/browser/feedback/android:internal_java",
     "//chrome/browser/flags:java",
     "//chrome/browser/loading_modal/android:java",