OSDN Git Service

Add shadow and wrapper classes
authorjackqdyulei <jackqdyulei@google.com>
Tue, 25 Jul 2017 00:43:23 +0000 (17:43 -0700)
committerjackqdyulei <jackqdyulei@google.com>
Fri, 28 Jul 2017 23:12:47 +0000 (16:12 -0700)
These classes are used for accessibility service. Also
add a new Availablity type.

Bug: 62022517
Test: Build
Change-Id: Ia2ff72dd04fd99b17809822907746c2411cecb62

src/com/android/settings/applications/AccessibilityServiceInfoWrapper.java [new file with mode: 0644]
src/com/android/settings/applications/AccessibilityServiceInfoWrapperImpl.java [new file with mode: 0644]
src/com/android/settings/search/ResultPayload.java
tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityManager.java [new file with mode: 0644]
tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityServiceInfoWrapperImpl.java [new file with mode: 0644]

diff --git a/src/com/android/settings/applications/AccessibilityServiceInfoWrapper.java b/src/com/android/settings/applications/AccessibilityServiceInfoWrapper.java
new file mode 100644 (file)
index 0000000..6ce0a4a
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2017 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.applications;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.content.ComponentName;
+
+/**
+ * This interface replicates a subset of the
+ * {@link android.accessibilityservice.AccessibilityServiceInfo}. The interface
+ * exists so that we can use a thin wrapper around it in production code and a mock in tests.
+ * We cannot directly mock or shadow it, because some of the methods we rely on are newer than
+ * the API version supported by Robolectric.
+ */
+public interface AccessibilityServiceInfoWrapper {
+
+    /**
+     * Returns the real {@code AccessibilityServiceInfo} object.
+     */
+    AccessibilityServiceInfo getAccessibilityServiceInfo();
+
+    ComponentName getComponentName();
+}
diff --git a/src/com/android/settings/applications/AccessibilityServiceInfoWrapperImpl.java b/src/com/android/settings/applications/AccessibilityServiceInfoWrapperImpl.java
new file mode 100644 (file)
index 0000000..d0d99ea
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2017 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.applications;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.content.ComponentName;
+
+public class AccessibilityServiceInfoWrapperImpl implements AccessibilityServiceInfoWrapper {
+
+    private final AccessibilityServiceInfo mServiceInfo;
+
+    public AccessibilityServiceInfoWrapperImpl(AccessibilityServiceInfo serviceInfo) {
+        mServiceInfo = serviceInfo;
+    }
+
+    @Override
+    public AccessibilityServiceInfo getAccessibilityServiceInfo() {
+        return mServiceInfo;
+    }
+
+    @Override
+    public ComponentName getComponentName() {
+        return mServiceInfo.getComponentName();
+    }
+}
index b008616..048c172 100644 (file)
@@ -66,7 +66,8 @@ public class ResultPayload implements Parcelable {
      * Enumerates the possible values for the Availability of a setting.
      */
     @IntDef({Availability.AVAILABLE,
-            Availability.DISABLED_DEPENDENCY,
+            Availability.DISABLED_DEPENDENT_SETTING,
+            Availability.DISABLED_DEPENDENT_APP,
             Availability.DISABLED_UNSUPPORTED,
             Availability.RESOURCE_CONTENTION})
     @Retention(RetentionPolicy.SOURCE)
@@ -77,9 +78,10 @@ public class ResultPayload implements Parcelable {
         int AVAILABLE = 0;
 
         /**
-         * The setting has a dependency which is currently disabled, blocking access.
+         * The setting has a dependency in settings app which is currently disabled, blocking
+         * access.
          */
-        int DISABLED_DEPENDENCY = 1;
+        int DISABLED_DEPENDENT_SETTING = 1;
 
         /**
          * The setting is not supported by the device.
@@ -91,6 +93,11 @@ public class ResultPayload implements Parcelable {
          * be changed until it is released by said application.
          */
         int RESOURCE_CONTENTION = 3;
+
+        /**
+         * The setting is disabled because corresponding app is disabled
+         */
+        int DISABLED_DEPENDENT_APP = 4;
     }
 
     @IntDef({SettingsSource.UNKNOWN, SettingsSource.SYSTEM, SettingsSource.SECURE,
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityManager.java
new file mode 100644 (file)
index 0000000..7e21f12
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2017 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.testutils.shadow;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.content.ComponentName;
+import android.view.accessibility.AccessibilityManager;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Implements(AccessibilityManager.class)
+public class ShadowAccessibilityManager {
+    private static final List<AccessibilityServiceInfo> mInstalledAccessibilityList =
+            new ArrayList<>();
+
+    public static void addAccessibilityService(String serviceName) {
+        AccessibilityServiceInfo serviceInfo = new AccessibilityServiceInfo();
+        serviceInfo.setComponentName(ComponentName.unflattenFromString(serviceName));
+        mInstalledAccessibilityList.add(serviceInfo);
+    }
+
+    @Implementation
+    public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList() {
+        return mInstalledAccessibilityList;
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityServiceInfoWrapperImpl.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityServiceInfoWrapperImpl.java
new file mode 100644 (file)
index 0000000..a6cb5d0
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2017 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.testutils.shadow;
+
+import android.content.ComponentName;
+
+import com.android.settings.applications.AccessibilityServiceInfoWrapperImpl;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+@Implements(AccessibilityServiceInfoWrapperImpl.class)
+public class ShadowAccessibilityServiceInfoWrapperImpl {
+    private static ComponentName sComponentName;
+
+    public static void setComponentName(String componentName) {
+        sComponentName = ComponentName.unflattenFromString(componentName);;
+    }
+
+    @Implementation
+    public ComponentName getComponentName() {
+        return sComponentName;
+    }
+}