Move Java PeerConnectionFactory.fieldTrialsFindFullName to different file.

Currently, Java equivalent of webrtc::field_trial::FindFullName is in
PeeerConnectionFactory, which belongs to peerconnection_java GN target.

Move that method into a separate file and GN target to make it easier
to use the fieldTrialsFindFullName method in other code.

Bug: webrtc:13973
Change-Id: I4d7d30339883af76c1d066f72270c6caf9c64c49
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/261500
Reviewed-by: Xavier Lepaul‎ <xalep@webrtc.org>
Commit-Queue: Xavier Lepaul‎ <xalep@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37233}
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index c1ceea4..47aa7c3 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -117,6 +117,7 @@
       ":base_jni",
       ":builtin_audio_codecs_jni",
       ":default_video_codec_factory_jni",
+      ":field_trial_jni",
       ":java_audio_device_module_jni",
       ":peerconnection_jni",
       ":video_jni",
@@ -269,7 +270,6 @@
       "api/org/webrtc/MediaSource.java",
       "api/org/webrtc/MediaStream.java",
       "api/org/webrtc/MediaStreamTrack.java",
-      "api/org/webrtc/NativeLibraryLoader.java",
       "api/org/webrtc/NativePeerConnectionFactory.java",
       "api/org/webrtc/NetEqFactoryFactory.java",
       "api/org/webrtc/NetworkChangeDetector.java",
@@ -302,7 +302,6 @@
       "api/org/webrtc/VideoTrack.java",
       "src/java/org/webrtc/NativeAndroidVideoTrackSource.java",
       "src/java/org/webrtc/NativeCapturerObserver.java",
-      "src/java/org/webrtc/NativeLibrary.java",
     ]
 
     deps = [
@@ -310,10 +309,12 @@
       ":base_java",
       ":builtin_audio_codecs_java",
       ":default_video_codec_factory_java",
+      ":field_trial_java",
 
       #TODO(bugs.webrtc.org/7452): Make injection mandatory and remove this dep.
       ":java_audio_device_module_java",
       ":logging_java",
+      ":native_library_java",
       ":swcodecs_java",
       ":video_api_java",
       ":video_java",
@@ -327,6 +328,24 @@
     ]
   }
 
+  rtc_android_library("native_library_java") {
+    sources = [
+      "api/org/webrtc/NativeLibraryLoader.java",
+      "src/java/org/webrtc/NativeLibrary.java",
+    ]
+
+    deps = [
+      ":logging_java",
+      "//rtc_base:base_java",
+    ]
+  }
+
+  rtc_android_library("field_trial_java") {
+    sources = [ "api/org/webrtc/FieldTrial.java" ]
+
+    deps = [ ":native_library_java" ]
+  }
+
   # Modules, in alphabetical order.
 
   rtc_android_library("camera_java") {
@@ -814,6 +833,16 @@
     ]
   }
 
+  rtc_library("field_trial_jni") {
+    visibility = [ "*" ]
+    sources = [ "src/jni/field_trial.cc" ]
+    deps = [
+      ":base_jni",
+      ":generated_field_trial_jni",
+      "../../system_wrappers:field_trial",
+    ]
+  }
+
   # JNI target for java_audio_device_module_java
   rtc_library("java_audio_device_module_jni") {
     visibility = [ "*" ]
@@ -1420,6 +1449,12 @@
     jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
   }
 
+  generate_jni("generated_field_trial_jni") {
+    sources = [ "api/org/webrtc/FieldTrial.java" ]
+    namespace = "webrtc::jni"
+    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
+  }
+
   generate_jni("generated_java_audio_jni") {
     sources = [ "api/org/webrtc/audio/JavaAudioDeviceModule.java" ]
     namespace = "webrtc::jni"
@@ -1525,6 +1560,7 @@
         ":hwcodecs_java",
         ":libjingle_peerconnection_java",
         ":libjingle_peerconnection_metrics_default_java",
+        ":native_library_java",
         ":peerconnection_java",
         ":surfaceviewrenderer_java",
         ":swcodecs_java",
@@ -1633,7 +1669,6 @@
       ":native_test_jni_onload",
       ":opensles_audio_device_module",
       ":video_jni",
-      "../../api:field_trials_view",
       "../../api:scoped_refptr",
       "../../api/rtc_event_log:rtc_event_log_factory",
       "../../api/task_queue:default_task_queue_factory",
@@ -1688,6 +1723,7 @@
     deps = [
       ":base_java",
       ":java_audio_device_module_java",
+      ":native_library_java",
       ":peerconnection_java",
       ":video_api_java",
       ":video_java",
diff --git a/sdk/android/api/org/webrtc/FieldTrial.java b/sdk/android/api/org/webrtc/FieldTrial.java
new file mode 100644
index 0000000..bac111d
--- /dev/null
+++ b/sdk/android/api/org/webrtc/FieldTrial.java
@@ -0,0 +1,26 @@
+/*
+ *  Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+package org.webrtc;
+
+public class FieldTrial {
+  // Wrapper of webrtc::field_trial::FindFullName. Develop the feature with default behaviour off.
+  // Example usage:
+  // if (FieldTrial.fieldTrialsFindFullName("WebRTCExperiment").equals("Enabled")) {
+  //   method1();
+  // } else {
+  //   method2();
+  // }
+  public static String fieldTrialsFindFullName(String name) {
+    return NativeLibrary.isLoaded() ? nativeFindFieldTrialsFullName(name) : "";
+  }
+
+  private static native String nativeFindFieldTrialsFullName(String name);
+}
diff --git a/sdk/android/api/org/webrtc/PeerConnectionFactory.java b/sdk/android/api/org/webrtc/PeerConnectionFactory.java
index ca67b3a..067c3cf 100644
--- a/sdk/android/api/org/webrtc/PeerConnectionFactory.java
+++ b/sdk/android/api/org/webrtc/PeerConnectionFactory.java
@@ -14,6 +14,7 @@
 import android.os.Process;
 import androidx.annotation.Nullable;
 import java.util.List;
+import org.webrtc.FieldTrial;
 import org.webrtc.Logging.Severity;
 import org.webrtc.PeerConnection;
 import org.webrtc.audio.AudioDeviceModule;
@@ -335,15 +336,12 @@
     nativeInitializeFieldTrials(fieldTrialsInitString);
   }
 
-  // Wrapper of webrtc::field_trial::FindFullName. Develop the feature with default behaviour off.
-  // Example usage:
-  // if (PeerConnectionFactory.fieldTrialsFindFullName("WebRTCExperiment").equals("Enabled")) {
-  //   method1();
-  // } else {
-  //   method2();
-  // }
+  /**
+   * @deprecated Use {@link org.webrtc.FieldTrial#fieldTrialsFindFullName(String) } instead.
+   */
+  @Deprecated
   public static String fieldTrialsFindFullName(String name) {
-    return NativeLibrary.isLoaded() ? nativeFindFieldTrialsFullName(name) : "";
+    return FieldTrial.fieldTrialsFindFullName(name);
   }
   // Start/stop internal capturing of internal tracing.
   public static boolean startInternalTracingCapture(String tracingFilename) {
@@ -582,7 +580,6 @@
   // (for example, at application startup time).
   private static native void nativeInitializeAndroidGlobals();
   private static native void nativeInitializeFieldTrials(String fieldTrialsInitString);
-  private static native String nativeFindFieldTrialsFullName(String name);
   private static native void nativeInitializeInternalTracer();
   // Internal tracing shutdown, called to prevent resource leaks. Must be called after
   // PeerConnectionFactory is gone to prevent races with code performing tracing.
diff --git a/sdk/android/src/jni/field_trial.cc b/sdk/android/src/jni/field_trial.cc
new file mode 100644
index 0000000..2c81c70
--- /dev/null
+++ b/sdk/android/src/jni/field_trial.cc
@@ -0,0 +1,27 @@
+/*
+ *  Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "system_wrappers/include/field_trial.h"
+
+#include "sdk/android/generated_field_trial_jni/FieldTrial_jni.h"
+#include "sdk/android/src/jni/jni_helpers.h"
+
+namespace webrtc {
+namespace jni {
+
+static ScopedJavaLocalRef<jstring> JNI_FieldTrial_FindFieldTrialsFullName(
+    JNIEnv* jni,
+    const JavaParamRef<jstring>& j_name) {
+  return NativeToJavaString(
+      jni, field_trial::FindFullName(JavaToStdString(jni, j_name)));
+}
+
+}  // namespace jni
+}  // namespace webrtc
diff --git a/sdk/android/src/jni/pc/peer_connection_factory.cc b/sdk/android/src/jni/pc/peer_connection_factory.cc
index fafcad3..dced255 100644
--- a/sdk/android/src/jni/pc/peer_connection_factory.cc
+++ b/sdk/android/src/jni/pc/peer_connection_factory.cc
@@ -213,14 +213,6 @@
   rtc::tracing::SetupInternalTracer();
 }
 
-static ScopedJavaLocalRef<jstring>
-JNI_PeerConnectionFactory_FindFieldTrialsFullName(
-    JNIEnv* jni,
-    const JavaParamRef<jstring>& j_name) {
-  return NativeToJavaString(
-      jni, field_trial::FindFullName(JavaToStdString(jni, j_name)));
-}
-
 static jboolean JNI_PeerConnectionFactory_StartInternalTracingCapture(
     JNIEnv* jni,
     const JavaParamRef<jstring>& j_event_tracing_filename) {