1 /* 2 * Copyright (C) 2017 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 android.content.ComponentName; 20 import android.content.Context; 21 import android.content.pm.ApplicationInfo; 22 import android.content.pm.PackageManager; 23 import android.graphics.drawable.ColorDrawable; 24 import android.graphics.drawable.Drawable; 25 import android.hardware.fingerprint.FingerprintManager; 26 import android.os.UserHandle; 27 import android.os.UserManager; 28 import android.util.ArraySet; 29 30 import com.android.settings.Utils; 31 32 import org.robolectric.annotation.Implementation; 33 import org.robolectric.annotation.Implements; 34 35 import java.util.HashMap; 36 import java.util.Map; 37 38 @Implements(Utils.class) 39 public class ShadowUtils { 40 41 private static FingerprintManager sFingerprintManager = null; 42 private static boolean sIsUserAMonkey; 43 private static boolean sIsDemoUser; 44 private static ComponentName sDeviceOwnerComponentName; 45 private static Map<String, String> sAppNameMap; 46 private static boolean sIsSystemAlertWindowEnabled; 47 private static boolean sIsVoiceCapable; 48 private static ArraySet<String> sResultLinks = new ArraySet<>(); 49 private static boolean sIsBatteryPresent; 50 51 @Implementation enforceSameOwner(Context context, int userId)52 protected static int enforceSameOwner(Context context, int userId) { 53 return userId; 54 } 55 56 @Implementation getFingerprintManagerOrNull(Context context)57 protected static FingerprintManager getFingerprintManagerOrNull(Context context) { 58 return sFingerprintManager; 59 } 60 setFingerprintManager(FingerprintManager fingerprintManager)61 public static void setFingerprintManager(FingerprintManager fingerprintManager) { 62 sFingerprintManager = fingerprintManager; 63 } 64 reset()65 public static void reset() { 66 sFingerprintManager = null; 67 sIsUserAMonkey = false; 68 sIsDemoUser = false; 69 sIsVoiceCapable = false; 70 sResultLinks = new ArraySet<>(); 71 sIsBatteryPresent = true; 72 } 73 setIsDemoUser(boolean isDemoUser)74 public static void setIsDemoUser(boolean isDemoUser) { 75 sIsDemoUser = isDemoUser; 76 } 77 78 @Implementation isDemoUser(Context context)79 public static boolean isDemoUser(Context context) { 80 return sIsDemoUser; 81 } 82 setIsUserAMonkey(boolean isUserAMonkey)83 public static void setIsUserAMonkey(boolean isUserAMonkey) { 84 sIsUserAMonkey = isUserAMonkey; 85 } 86 87 /** 88 * Returns true if Monkey is running. 89 */ 90 @Implementation isMonkeyRunning()91 protected static boolean isMonkeyRunning() { 92 return sIsUserAMonkey; 93 } 94 setDeviceOwnerComponent(ComponentName componentName)95 public static void setDeviceOwnerComponent(ComponentName componentName) { 96 sDeviceOwnerComponentName = componentName; 97 } 98 99 @Implementation getDeviceOwnerComponent(Context context)100 protected static ComponentName getDeviceOwnerComponent(Context context) { 101 return sDeviceOwnerComponentName; 102 } 103 104 @Implementation getManagedProfileId(UserManager um, int parentUserId)105 protected static int getManagedProfileId(UserManager um, int parentUserId) { 106 return UserHandle.USER_NULL; 107 } 108 109 @Implementation getApplicationLabel(Context context, String packageName)110 protected static CharSequence getApplicationLabel(Context context, String packageName) { 111 if (sAppNameMap != null) { 112 return sAppNameMap.get(packageName); 113 } 114 return null; 115 } 116 117 @Implementation isPackageEnabled(Context context, String packageName)118 protected static boolean isPackageEnabled(Context context, String packageName) { 119 return true; 120 } 121 setApplicationLabel(String packageName, String appLabel)122 public static void setApplicationLabel(String packageName, String appLabel) { 123 if (sAppNameMap == null) { 124 sAppNameMap = new HashMap<>(); 125 } 126 sAppNameMap.put(packageName, appLabel); 127 } 128 129 @Implementation isSystemAlertWindowEnabled(Context context)130 protected static boolean isSystemAlertWindowEnabled(Context context) { 131 return sIsSystemAlertWindowEnabled; 132 } 133 setIsSystemAlertWindowEnabled(boolean enabled)134 public static void setIsSystemAlertWindowEnabled(boolean enabled) { 135 sIsSystemAlertWindowEnabled = enabled; 136 } 137 138 @Implementation isVoiceCapable(Context context)139 protected static boolean isVoiceCapable(Context context) { 140 return sIsVoiceCapable; 141 } 142 setIsVoiceCapable(boolean isVoiceCapable)143 public static void setIsVoiceCapable(boolean isVoiceCapable) { 144 sIsVoiceCapable = isVoiceCapable; 145 } 146 147 @Implementation getHandledDomains(PackageManager pm, String packageName)148 protected static ArraySet<String> getHandledDomains(PackageManager pm, String packageName) { 149 return sResultLinks; 150 } 151 152 @Implementation getBadgedIcon(Context context, ApplicationInfo appInfo)153 protected static Drawable getBadgedIcon(Context context, ApplicationInfo appInfo) { 154 return new ColorDrawable(0); 155 } 156 setHandledDomains(ArraySet<String> links)157 public static void setHandledDomains(ArraySet<String> links) { 158 sResultLinks = links; 159 } 160 161 @Implementation isBatteryPresent(Context context)162 protected static boolean isBatteryPresent(Context context) { 163 return sIsBatteryPresent; 164 } 165 setIsBatteryPresent(boolean isBatteryPresent)166 public static void setIsBatteryPresent(boolean isBatteryPresent) { 167 sIsBatteryPresent = isBatteryPresent; 168 } 169 } 170