• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.testutils.shadow;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import android.accessibilityservice.AccessibilityShortcutInfo;
22 import android.annotation.NonNull;
23 import android.annotation.UserIdInt;
24 import android.content.ComponentName;
25 import android.content.Context;
26 import android.util.ArrayMap;
27 import android.view.accessibility.AccessibilityManager;
28 
29 import com.android.internal.accessibility.common.ShortcutConstants;
30 import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType;
31 
32 import org.robolectric.annotation.Implementation;
33 import org.robolectric.annotation.Implements;
34 
35 import java.util.ArrayList;
36 import java.util.List;
37 import java.util.Map;
38 
39 /**
40  * Shadow of {@link AccessibilityManager} with the hidden methods
41  */
42 @Implements(AccessibilityManager.class)
43 public class ShadowAccessibilityManager extends org.robolectric.shadows.ShadowAccessibilityManager {
44     private Map<ComponentName, ComponentName> mA11yFeatureToTileMap = new ArrayMap<>();
45     private List<AccessibilityShortcutInfo> mInstalledAccessibilityShortcutList = List.of();
46     private Map<Integer, List<String>> mShortcutTargets = new ArrayMap<>();
47 
48     /**
49      * Implements a hidden method {@link AccessibilityManager#getA11yFeatureToTileMap}
50      */
51     @Implementation
getA11yFeatureToTileMap(@serIdInt int userId)52     public Map<ComponentName, ComponentName> getA11yFeatureToTileMap(@UserIdInt int userId) {
53         return mA11yFeatureToTileMap;
54     }
55 
56     /**
57      * Set fake a11y feature to tile mapping
58      */
setA11yFeatureToTileMap( @onNull Map<ComponentName, ComponentName> a11yFeatureToTileMap)59     public void setA11yFeatureToTileMap(
60             @NonNull Map<ComponentName, ComponentName> a11yFeatureToTileMap) {
61         mA11yFeatureToTileMap = a11yFeatureToTileMap;
62     }
63 
64     /**
65      * Implements the hidden method
66      * {@link AccessibilityManager#getInstalledAccessibilityShortcutListAsUser}.
67      */
68     @Implementation
getInstalledAccessibilityShortcutListAsUser( @onNull Context context, @UserIdInt int userId)69     public List<AccessibilityShortcutInfo> getInstalledAccessibilityShortcutListAsUser(
70             @NonNull Context context, @UserIdInt int userId) {
71         return mInstalledAccessibilityShortcutList;
72     }
73 
74     /**
75      * Sets the value to be returned by {@link #getInstalledAccessibilityShortcutListAsUser}.
76      */
setInstalledAccessibilityShortcutListAsUser( @onNull List<AccessibilityShortcutInfo> installedAccessibilityShortcutList)77     public void setInstalledAccessibilityShortcutListAsUser(
78             @NonNull List<AccessibilityShortcutInfo> installedAccessibilityShortcutList) {
79         mInstalledAccessibilityShortcutList = installedAccessibilityShortcutList;
80     }
81 
82     /**
83      * Implements the hidden method
84      * {@link AccessibilityManager#getAccessibilityShortcutTargets}.
85      */
86     @Implementation
getAccessibilityShortcutTargets( @serShortcutType int shortcutType)87     public List<String> getAccessibilityShortcutTargets(
88             @UserShortcutType int shortcutType) {
89         if (!mShortcutTargets.containsKey(shortcutType)) {
90             mShortcutTargets.put(shortcutType, new ArrayList<>());
91         }
92         List<String> targets = mShortcutTargets.get(shortcutType);
93         assertThat(targets).isNotNull();
94         return targets;
95     }
96 
97     /**
98      * Used by tests to easily write directly to a shortcut targets value
99      */
setAccessibilityShortcutTargets(int shortcutTypes, List<String> targets)100     public void setAccessibilityShortcutTargets(int shortcutTypes, List<String> targets) {
101         for (int type : ShortcutConstants.USER_SHORTCUT_TYPES) {
102             if ((type & shortcutTypes) == type) {
103                 mShortcutTargets.put(type, List.copyOf(targets));
104             }
105         }
106     }
107 }
108