• 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.annotation.Nullable;
20 import android.app.prediction.AppPredictor;
21 import android.app.usage.UsageStatsManager;
22 import android.content.ContentResolver;
23 import android.content.Context;
24 import android.content.Intent;
25 import android.content.IntentFilter;
26 import android.content.pm.ResolveInfo;
27 import android.content.res.Resources;
28 import android.database.Cursor;
29 import android.net.Uri;
30 import android.os.Bundle;
31 import android.os.UserHandle;
32 
33 import com.android.intentresolver.chooser.DisplayResolveInfo;
34 import com.android.intentresolver.chooser.TargetInfo;
35 import com.android.intentresolver.emptystate.CrossProfileIntentsChecker;
36 import com.android.intentresolver.shortcuts.ShortcutLoader;
37 
38 import java.util.List;
39 import java.util.function.Consumer;
40 
41 /**
42  * Simple wrapper around chooser activity to be able to initiate it under test. For more
43  * information, see {@code com.android.internal.app.ChooserWrapperActivity}.
44  */
45 public class ChooserWrapperActivity extends ChooserActivity implements IChooserWrapper {
46     static final ChooserActivityOverrideData sOverrides = ChooserActivityOverrideData.getInstance();
47     private UsageStatsManager mUsm;
48 
49     @Override
createChooserListAdapter( Context context, List<Intent> payloadIntents, Intent[] initialIntents, List<ResolveInfo> rList, boolean filterLastUsed, ResolverListController resolverListController, UserHandle userHandle, Intent targetIntent, Intent referrerFillInIntent, int maxTargetsPerRow)50     public final ChooserListAdapter createChooserListAdapter(
51             Context context,
52             List<Intent> payloadIntents,
53             Intent[] initialIntents,
54             List<ResolveInfo> rList,
55             boolean filterLastUsed,
56             ResolverListController resolverListController,
57             UserHandle userHandle,
58             Intent targetIntent,
59             Intent referrerFillInIntent,
60             int maxTargetsPerRow) {
61 
62         return new ChooserListAdapter(
63                 context,
64                 payloadIntents,
65                 initialIntents,
66                 rList,
67                 filterLastUsed,
68                 resolverListController,
69                 userHandle,
70                 targetIntent,
71                 referrerFillInIntent,
72                 this,
73                 mPackageManager,
74                 getEventLog(),
75                 maxTargetsPerRow,
76                 userHandle,
77                 mTargetDataLoader,
78                 null);
79     }
80 
81     @Override
getAdapter()82     public ChooserListAdapter getAdapter() {
83         return mChooserMultiProfilePagerAdapter.getActiveListAdapter();
84     }
85 
86     @Override
getPersonalListAdapter()87     public ChooserListAdapter getPersonalListAdapter() {
88         return mChooserMultiProfilePagerAdapter.getPersonalListAdapter();
89     }
90 
91     @Override
getWorkListAdapter()92     public ChooserListAdapter getWorkListAdapter() {
93         return mChooserMultiProfilePagerAdapter.getWorkListAdapter();
94     }
95 
96     @Override
getIsSelected()97     public boolean getIsSelected() {
98         return mIsSuccessfullySelected;
99     }
100 
101     @Override
getUsageStatsManager()102     public UsageStatsManager getUsageStatsManager() {
103         if (mUsm == null) {
104             mUsm = getSystemService(UsageStatsManager.class);
105         }
106         return mUsm;
107     }
108 
109     @Override
isVoiceInteraction()110     public boolean isVoiceInteraction() {
111         if (sOverrides.isVoiceInteraction != null) {
112             return sOverrides.isVoiceInteraction;
113         }
114         return super.isVoiceInteraction();
115     }
116 
117     @Override
createCrossProfileIntentsChecker()118     protected CrossProfileIntentsChecker createCrossProfileIntentsChecker() {
119         if (sOverrides.mCrossProfileIntentsChecker != null) {
120             return sOverrides.mCrossProfileIntentsChecker;
121         }
122         return super.createCrossProfileIntentsChecker();
123     }
124 
125     @Override
safelyStartActivityInternal(TargetInfo cti, UserHandle user, @Nullable Bundle options)126     public void safelyStartActivityInternal(TargetInfo cti, UserHandle user,
127             @Nullable Bundle options) {
128         if (sOverrides.onSafelyStartInternalCallback != null
129                 && sOverrides.onSafelyStartInternalCallback.apply(cti)) {
130             return;
131         }
132         super.safelyStartActivityInternal(cti, user, options);
133     }
134 
135     @Override
createListController(UserHandle userHandle)136     public final ChooserListController createListController(UserHandle userHandle) {
137         if (userHandle == sOverrides.personalUserHandle) {
138             return sOverrides.resolverListController;
139         }
140         return sOverrides.workResolverListController;
141     }
142 
143     @Override
getResources()144     public Resources getResources() {
145         if (sOverrides.resources != null) {
146             return sOverrides.resources;
147         }
148         return super.getResources();
149     }
150 
151     @Override
queryResolver(ContentResolver resolver, Uri uri)152     public Cursor queryResolver(ContentResolver resolver, Uri uri) {
153         if (sOverrides.resolverCursor != null) {
154             return sOverrides.resolverCursor;
155         }
156 
157         if (sOverrides.resolverForceException) {
158             throw new SecurityException("Test exception handling");
159         }
160 
161         return super.queryResolver(resolver, uri);
162     }
163 
164     @Override
createTestDisplayResolveInfo( Intent originalIntent, ResolveInfo pri, CharSequence pLabel, CharSequence pInfo, Intent replacementIntent)165     public DisplayResolveInfo createTestDisplayResolveInfo(
166             Intent originalIntent,
167             ResolveInfo pri,
168             CharSequence pLabel,
169             CharSequence pInfo,
170             Intent replacementIntent) {
171         return DisplayResolveInfo.newDisplayResolveInfo(
172                 originalIntent,
173                 pri,
174                 pLabel,
175                 pInfo,
176                 replacementIntent);
177     }
178 
179     @Override
getCurrentUserHandle()180     public UserHandle getCurrentUserHandle() {
181         return mChooserMultiProfilePagerAdapter.getCurrentUserHandle();
182     }
183 
184     @Override
createContextAsUser(UserHandle user, int flags)185     public Context createContextAsUser(UserHandle user, int flags) {
186         // return the current context as a work profile doesn't really exist in these tests
187         return this;
188     }
189 
190     @Override
createShortcutLoader( Context context, AppPredictor appPredictor, UserHandle userHandle, IntentFilter targetIntentFilter, Consumer<ShortcutLoader.Result> callback)191     protected ShortcutLoader createShortcutLoader(
192             Context context,
193             AppPredictor appPredictor,
194             UserHandle userHandle,
195             IntentFilter targetIntentFilter,
196             Consumer<ShortcutLoader.Result> callback) {
197         ShortcutLoader shortcutLoader =
198                 sOverrides.shortcutLoaderFactory.invoke(userHandle, callback);
199         if (shortcutLoader != null) {
200             return shortcutLoader;
201         }
202         return super.createShortcutLoader(
203                 context, appPredictor, userHandle, targetIntentFilter, callback);
204     }
205 }
206