109404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay/* 209404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * Copyright (C) 2016 The Android Open Source Project 309404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * 409404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * Licensed under the Apache License, Version 2.0 (the "License"); 509404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * you may not use this file except in compliance with the License. 609404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * You may obtain a copy of the License at 709404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * 809404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * http://www.apache.org/licenses/LICENSE-2.0 909404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * 1009404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * Unless required by applicable law or agreed to in writing, software 1109404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * distributed under the License is distributed on an "AS IS" BASIS, 1209404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1309404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * See the License for the specific language governing permissions and 1409404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * limitations under the License. 1509404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay */ 1609404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay 17bd9f05aa36bf19d8b34d0d73a59e9bd65d3d26ebSteve McKaypackage com.android.documentsui.testing; 1809404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay 19eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKayimport android.annotation.UserIdInt; 2009404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKayimport android.content.Intent; 21eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKayimport android.content.pm.ActivityInfo; 22eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKayimport android.content.pm.ApplicationInfo; 2309404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKayimport android.content.pm.PackageManager; 2409404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKayimport android.content.pm.ProviderInfo; 2509404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay 26012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolanderimport android.content.pm.ResolveInfo; 2709404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKayimport com.android.documentsui.base.RootInfo; 2809404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay 2909404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKayimport org.mockito.Mockito; 3009404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay 3109404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKayimport java.util.ArrayList; 3209404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKayimport java.util.HashMap; 3309404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKayimport java.util.List; 3409404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKayimport java.util.Map; 3509404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay 3609404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay/** 3709404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * Abstract to avoid having to implement unnecessary Activity stuff. 3809404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay * Instances are created using {@link #create()}. 3909404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay */ 4009404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKaypublic abstract class TestPackageManager extends PackageManager { 4109404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay 4209404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay public Map<String, ResolveInfo> contentProviders; 43012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander public List<ResolveInfo> queryIntentProvidersResults = new ArrayList<>(); 4409404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay 4509404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay public void addStubContentProviderForRoot(RootInfo... roots) { 4609404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay for (RootInfo root : roots) { 4709404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay // only one entry per authority is required. 4809404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay if (!contentProviders.containsKey(root.authority)) { 4909404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay ResolveInfo info = new ResolveInfo(); 5009404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay contentProviders.put(root.authority, info); 5109404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay info.providerInfo = new ProviderInfo(); 5209404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay info.providerInfo.authority = root.authority; 5309404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay } 5409404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay } 5509404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay } 5609404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay 5709404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay public static TestPackageManager create() { 5809404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay TestPackageManager pm = Mockito.mock( 5909404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay TestPackageManager.class, Mockito.CALLS_REAL_METHODS); 6009404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay pm.contentProviders = new HashMap<>(); 6109404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay return pm; 6209404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay } 6309404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay 6409404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay @Override 65012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander public List<ResolveInfo> queryIntentContentProviders(Intent intent, int flags) { 6609404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay List<ResolveInfo> result = new ArrayList<>(); 6709404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay result.addAll(contentProviders.values()); 6809404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay return result; 6909404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay } 70eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay 71012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander /** 72012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander * Query's a list of fake apps that can open an application. 73012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander */ 74012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander @Override 75012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander public List<ResolveInfo> queryIntentActivities(Intent intent, int flags) { 76012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander if (queryIntentProvidersResults == null) { 77012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander return new ArrayList<>(); 78012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander } else { 79012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander return queryIntentProvidersResults; 80012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander } 81012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander } 82012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander 83012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander @Override 84012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander public ResolveInfo resolveActivity(Intent intent, int flags) { 85012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander ResolveInfo info = new TestResolveInfo(); 86eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay info.activityInfo = new ActivityInfo(); 87012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander info.activityInfo.packageName = 88012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander intent.getPackage() != null ? intent.getPackage() : "TestPackage"; 89eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay info.activityInfo.applicationInfo = new ApplicationInfo(); 90eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay info.activityInfo.applicationInfo.packageName = intent.getPackage(); 91eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay info.activityInfo.name = "Fake Quick Viewer"; 92eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay return info; 93eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay } 94eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay 95eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay public final ResolveInfo resolveActivityAsUser( 96eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay Intent intent, int flags, @UserIdInt int userId) { 97eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay return resolveActivity(intent, flags); 98eed2f4ec78227b5e173ff667a5517637a91b9a30Steve McKay } 99012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander 100012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander /** 101012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander * Hacky way to use resolve info in test. resolve info return null when new'ing up a instance 102012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander * because of an exception thrown in toString. 103012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander */ 104012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander public static class TestResolveInfo extends ResolveInfo { 105012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander 106012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander @Override 107012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander public String toString() { 108012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander return ""; 109012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander } 110012e8bac5af5bb79838a90c6be2d37af3b8a6093Austin Kolander } 11109404b3e765ec99e4db30dbddf4aed5524b8523eSteve McKay} 112