1 /* 2 * Copyright (C) 2008 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.intentresolver; 18 19 import android.content.ComponentName; 20 import android.content.Context; 21 import android.content.Intent; 22 import android.content.pm.ActivityInfo; 23 import android.content.pm.ApplicationInfo; 24 import android.content.pm.PackageManager; 25 import android.content.pm.ResolveInfo; 26 import android.content.res.Resources; 27 import android.os.UserHandle; 28 import android.test.mock.MockContext; 29 import android.test.mock.MockPackageManager; 30 import android.test.mock.MockResources; 31 32 /** 33 * Utility class used by resolver tests to create mock data 34 */ 35 public class ResolverDataProvider { 36 37 static private int USER_SOMEONE_ELSE = 10; 38 createResolvedComponentInfo(int i)39 static ResolvedComponentInfo createResolvedComponentInfo(int i) { 40 return new ResolvedComponentInfo( 41 createComponentName(i), 42 createResolverIntent(i), 43 createResolveInfo(i, UserHandle.USER_CURRENT)); 44 } 45 createResolvedComponentInfo(int i, UserHandle resolvedForUser)46 static ResolvedComponentInfo createResolvedComponentInfo(int i, 47 UserHandle resolvedForUser) { 48 return new ResolvedComponentInfo( 49 createComponentName(i), 50 createResolverIntent(i), 51 createResolveInfo(i, UserHandle.USER_CURRENT, resolvedForUser)); 52 } 53 createResolvedComponentInfo( ComponentName componentName, Intent intent)54 static ResolvedComponentInfo createResolvedComponentInfo( 55 ComponentName componentName, Intent intent) { 56 return new ResolvedComponentInfo( 57 componentName, 58 intent, 59 createResolveInfo(componentName, UserHandle.USER_CURRENT)); 60 } 61 createResolvedComponentInfo( ComponentName componentName, Intent intent, UserHandle resolvedForUser)62 static ResolvedComponentInfo createResolvedComponentInfo( 63 ComponentName componentName, Intent intent, UserHandle resolvedForUser) { 64 return new ResolvedComponentInfo( 65 componentName, 66 intent, 67 createResolveInfo(componentName, UserHandle.USER_CURRENT, resolvedForUser)); 68 } 69 createResolvedComponentInfoWithOtherId(int i)70 static ResolvedComponentInfo createResolvedComponentInfoWithOtherId(int i) { 71 return new ResolvedComponentInfo( 72 createComponentName(i), 73 createResolverIntent(i), 74 createResolveInfo(i, USER_SOMEONE_ELSE)); 75 } 76 createResolvedComponentInfoWithOtherId(int i, UserHandle resolvedForUser)77 static ResolvedComponentInfo createResolvedComponentInfoWithOtherId(int i, 78 UserHandle resolvedForUser) { 79 return new ResolvedComponentInfo( 80 createComponentName(i), 81 createResolverIntent(i), 82 createResolveInfo(i, USER_SOMEONE_ELSE, resolvedForUser)); 83 } 84 createResolvedComponentInfoWithOtherId(int i, int userId)85 static ResolvedComponentInfo createResolvedComponentInfoWithOtherId(int i, int userId) { 86 return new ResolvedComponentInfo( 87 createComponentName(i), 88 createResolverIntent(i), 89 createResolveInfo(i, userId)); 90 } 91 createResolvedComponentInfoWithOtherId(int i, int userId, UserHandle resolvedForUser)92 static ResolvedComponentInfo createResolvedComponentInfoWithOtherId(int i, 93 int userId, UserHandle resolvedForUser) { 94 return new ResolvedComponentInfo( 95 createComponentName(i), 96 createResolverIntent(i), 97 createResolveInfo(i, userId, resolvedForUser)); 98 } 99 createComponentName(int i)100 public static ComponentName createComponentName(int i) { 101 final String name = "component" + i; 102 return new ComponentName("foo.bar." + name, name); 103 } 104 createResolveInfo(int i, int userId)105 public static ResolveInfo createResolveInfo(int i, int userId) { 106 return createResolveInfo(i, userId, UserHandle.of(userId)); 107 } 108 createResolveInfo(int i, int userId, UserHandle resolvedForUser)109 public static ResolveInfo createResolveInfo(int i, int userId, UserHandle resolvedForUser) { 110 return createResolveInfo(createActivityInfo(i), userId, resolvedForUser); 111 } 112 createResolveInfo(ComponentName componentName, int userId)113 public static ResolveInfo createResolveInfo(ComponentName componentName, int userId) { 114 return createResolveInfo(componentName, userId, UserHandle.of(userId)); 115 } 116 createResolveInfo( ComponentName componentName, int userId, UserHandle resolvedForUser)117 public static ResolveInfo createResolveInfo( 118 ComponentName componentName, int userId, UserHandle resolvedForUser) { 119 return createResolveInfo(createActivityInfo(componentName), userId, resolvedForUser); 120 } 121 createResolveInfo( ActivityInfo activityInfo, int userId, UserHandle resolvedForUser)122 public static ResolveInfo createResolveInfo( 123 ActivityInfo activityInfo, int userId, UserHandle resolvedForUser) { 124 final ResolveInfo resolveInfo = new ResolveInfo(); 125 resolveInfo.activityInfo = activityInfo; 126 resolveInfo.targetUserId = userId; 127 resolveInfo.userHandle = resolvedForUser; 128 return resolveInfo; 129 } 130 createActivityInfo(int i)131 static ActivityInfo createActivityInfo(int i) { 132 ActivityInfo ai = new ActivityInfo(); 133 ai.name = "activity_name" + i; 134 ai.packageName = "foo_bar" + i; 135 ai.enabled = true; 136 ai.exported = true; 137 ai.permission = null; 138 ai.applicationInfo = createApplicationInfo(); 139 return ai; 140 } 141 createActivityInfo(ComponentName componentName)142 static ActivityInfo createActivityInfo(ComponentName componentName) { 143 ActivityInfo ai = new ActivityInfo(); 144 ai.name = componentName.getClassName(); 145 ai.packageName = componentName.getPackageName(); 146 ai.enabled = true; 147 ai.exported = true; 148 ai.permission = null; 149 ai.applicationInfo = createApplicationInfo(); 150 ai.applicationInfo.packageName = componentName.getPackageName(); 151 return ai; 152 } 153 createApplicationInfo()154 static ApplicationInfo createApplicationInfo() { 155 ApplicationInfo ai = new ApplicationInfo(); 156 ai.name = "app_name"; 157 ai.packageName = "foo.bar"; 158 ai.enabled = true; 159 return ai; 160 } 161 162 static class PackageManagerMockedInfo { 163 public Context ctx; 164 public ApplicationInfo appInfo; 165 public ActivityInfo activityInfo; 166 public ResolveInfo resolveInfo; 167 public String setAppLabel; 168 public String setActivityLabel; 169 public String setResolveInfoLabel; 170 } 171 172 /** Create a {@link PackageManagerMockedInfo} with all distinct labels. */ createPackageManagerMockedInfo(boolean hasOverridePermission)173 static PackageManagerMockedInfo createPackageManagerMockedInfo(boolean hasOverridePermission) { 174 return createPackageManagerMockedInfo( 175 hasOverridePermission, "app_label", "activity_label", "resolve_info_label"); 176 } 177 createPackageManagerMockedInfo( boolean hasOverridePermission, String appLabel, String activityLabel, String resolveInfoLabel)178 static PackageManagerMockedInfo createPackageManagerMockedInfo( 179 boolean hasOverridePermission, 180 String appLabel, 181 String activityLabel, 182 String resolveInfoLabel) { 183 MockContext ctx = new MockContext() { 184 @Override 185 public PackageManager getPackageManager() { 186 return new MockPackageManager() { 187 @Override 188 public int checkPermission(String permName, String pkgName) { 189 if (hasOverridePermission) return PERMISSION_GRANTED; 190 return PERMISSION_DENIED; 191 } 192 }; 193 } 194 195 @Override 196 public Resources getResources() { 197 return new MockResources() { 198 @Override 199 public String getString(int id) throws NotFoundException { 200 if (id == 1) return appLabel; 201 if (id == 2) return activityLabel; 202 if (id == 3) return resolveInfoLabel; 203 return null; 204 } 205 }; 206 } 207 }; 208 209 ApplicationInfo appInfo = new ApplicationInfo() { 210 @Override 211 public CharSequence loadLabel(PackageManager pm) { 212 return appLabel; 213 } 214 }; 215 appInfo.labelRes = 1; 216 217 ActivityInfo activityInfo = new ActivityInfo() { 218 @Override 219 public CharSequence loadLabel(PackageManager pm) { 220 return activityLabel; 221 } 222 }; 223 activityInfo.labelRes = 2; 224 activityInfo.applicationInfo = appInfo; 225 226 ResolveInfo resolveInfo = new ResolveInfo() { 227 @Override 228 public CharSequence loadLabel(PackageManager pm) { 229 return resolveInfoLabel; 230 } 231 }; 232 resolveInfo.activityInfo = activityInfo; 233 resolveInfo.resolvePackageName = "super.fake.packagename"; 234 resolveInfo.labelRes = 3; 235 236 PackageManagerMockedInfo mockedInfo = new PackageManagerMockedInfo(); 237 mockedInfo.activityInfo = activityInfo; 238 mockedInfo.appInfo = appInfo; 239 mockedInfo.ctx = ctx; 240 mockedInfo.resolveInfo = resolveInfo; 241 mockedInfo.setAppLabel = appLabel; 242 mockedInfo.setActivityLabel = activityLabel; 243 mockedInfo.setResolveInfoLabel = resolveInfoLabel; 244 245 return mockedInfo; 246 } 247 createResolverIntent(int i)248 static Intent createResolverIntent(int i) { 249 return new Intent("intentAction" + i); 250 } 251 } 252