• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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