[Settings] Enable support on testing

1. Support ActivityScenario
2. Support add Service through ShadowServiceManager

Bug: 140542283
Test: build pass
Change-Id: Ib1066394114fb6077e1fa82872f029e6ee2b5da9
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index d7d1d51..3e7aa47 100644
--- a/tests/robotests/Android.bp
+++ b/tests/robotests/Android.bp
@@ -60,9 +60,12 @@
     static_libs: [
         "SettingsLib-robo-testutils",
 	"android-support-annotations",
+        "androidx.test.core",
+        "androidx.test.runner",
+        "androidx.test.ext.junit",
     ],
 
-    java_resource_dirs: ["config"],
+    java_resource_dirs: ["config", "resources"],
 
     instrumentation_for: "SettingsRoboTestStub",
 
diff --git a/tests/robotests/config/robolectric.properties b/tests/robotests/config/robolectric.properties
index e40e51c..ee805c4 100644
--- a/tests/robotests/config/robolectric.properties
+++ b/tests/robotests/config/robolectric.properties
@@ -1,3 +1,4 @@
 sdk=NEWEST_SDK
 shadows=\
-   com.android.settings.testutils.shadow.ShadowThreadUtils
+   com.android.settings.testutils.shadow.ShadowThreadUtils \
+   com.android.settings.network.ShadowServiceManagerExtend
diff --git a/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.ThreadChecker b/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.ThreadChecker
new file mode 100644
index 0000000..55104ea
--- /dev/null
+++ b/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.ThreadChecker
@@ -0,0 +1 @@
+org.robolectric.android.internal.NoOpThreadChecker
diff --git a/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.app.ActivityInvoker b/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.app.ActivityInvoker
new file mode 100644
index 0000000..e9944b5
--- /dev/null
+++ b/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.app.ActivityInvoker
@@ -0,0 +1 @@
+org.robolectric.android.internal.LocalActivityInvoker
diff --git a/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.content.PermissionGranter b/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.content.PermissionGranter
new file mode 100644
index 0000000..3bcad1c
--- /dev/null
+++ b/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.content.PermissionGranter
@@ -0,0 +1 @@
+org.robolectric.android.internal.LocalPermissionGranter
diff --git a/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.os.ControlledLooper b/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.os.ControlledLooper
new file mode 100644
index 0000000..add33e6
--- /dev/null
+++ b/tests/robotests/resources/META-INF/services/androidx.test.internal.platform.os.ControlledLooper
@@ -0,0 +1 @@
+org.robolectric.android.internal.LocalControlledLooper
\ No newline at end of file
diff --git a/tests/robotests/resources/META-INF/services/androidx.test.platform.ui.UiController b/tests/robotests/resources/META-INF/services/androidx.test.platform.ui.UiController
new file mode 100644
index 0000000..523d6ee
--- /dev/null
+++ b/tests/robotests/resources/META-INF/services/androidx.test.platform.ui.UiController
@@ -0,0 +1 @@
+org.robolectric.android.internal.LocalUiController
diff --git a/tests/robotests/src/com/android/settings/network/ShadowServiceManagerExtend.java b/tests/robotests/src/com/android/settings/network/ShadowServiceManagerExtend.java
new file mode 100644
index 0000000..759de88
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/ShadowServiceManagerExtend.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network;
+
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.IInterface;
+import android.os.ServiceManager;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.shadows.ShadowServiceManager;
+import org.robolectric.util.ReflectionHelpers;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Implements(value = ServiceManager.class)
+public class ShadowServiceManagerExtend extends ShadowServiceManager {
+    private static final Map<String, IBinder> EXTRA_SERVICES = new HashMap<>();
+
+    @Implementation
+    public static IBinder getService(String name) {
+        final IBinder iBinder = ShadowServiceManager.getService(name);
+        if (iBinder == null) {
+            return EXTRA_SERVICES.get(name);
+        }
+        return iBinder;
+    }
+
+    public static void addService(String name, Class<? extends IInterface> classService,
+            String fullNameClass) {
+        final Binder service = new Binder();
+        service.attachInterface(ReflectionHelpers.createNullProxy(classService), fullNameClass);
+
+        ShadowServiceManager.addService(name, service);
+        EXTRA_SERVICES.put(name, service);
+    }
+}