19149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu/* 29149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * Copyright (C) 2017 The Android Open Source Project 39149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * 49149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * Licensed under the Apache License, Version 2.0 (the "License"); 59149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * you may not use this file except in compliance with the License. 69149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * You may obtain a copy of the License at 79149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * 89149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * http://www.apache.org/licenses/LICENSE-2.0 99149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * 109149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * Unless required by applicable law or agreed to in writing, software 119149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * distributed under the License is distributed on an "AS IS" BASIS, 129149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * See the License for the specific language governing permissions and 149149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * limitations under the License. 159149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu */ 169149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 179149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglupackage com.android.internal.app; 189149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 199149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyaliogluimport android.app.usage.UsageStatsManager; 209149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyaliogluimport android.content.Context; 219149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyaliogluimport android.content.Intent; 229149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyaliogluimport android.content.IntentFilter; 239149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyaliogluimport android.content.pm.PackageManager; 249149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyaliogluimport android.os.RemoteException; 259149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 269149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyaliogluimport java.util.function.Function; 279149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 289149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyaliogluimport static org.mockito.Mockito.mock; 299149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 309149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 319149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu/* 329149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * Simple wrapper around chooser activity to be able to initiate it under test 339149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu */ 349149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglupublic class ResolverWrapperActivity extends ResolverActivity { 359149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu static final OverrideData sOverrides = new OverrideData(); 369149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu private UsageStatsManager mUsm; 379149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 389149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu ResolveListAdapter getAdapter() { 399149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu return mAdapter; 409149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu } 419149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 429149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu @Override 439149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu public boolean isVoiceInteraction() { 449149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu if (sOverrides.isVoiceInteraction != null) { 459149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu return sOverrides.isVoiceInteraction; 469149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu } 479149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu return super.isVoiceInteraction(); 489149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu } 499149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 509149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu @Override 519149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu public void safelyStartActivity(TargetInfo cti) { 529149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu if (sOverrides.onSafelyStartCallback != null && 539149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu sOverrides.onSafelyStartCallback.apply(cti)) { 549149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu return; 559149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu } 569149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu super.safelyStartActivity(cti); 579149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu } 589149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 599149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu @Override 609149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu protected ResolverListController createListController() { 619149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu return sOverrides.resolverListController; 629149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu } 639149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 649149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu @Override 659149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu public PackageManager getPackageManager() { 669149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu if (sOverrides.createPackageManager != null) { 679149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu return sOverrides.createPackageManager.apply(super.getPackageManager()); 689149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu } 699149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu return super.getPackageManager(); 709149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu } 719149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 729149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu /** 739149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * We cannot directly mock the activity created since instrumentation creates it. 749149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * <p> 759149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu * Instead, we use static instances of this object to modify behavior. 769149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu */ 779149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu static class OverrideData { 789149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu @SuppressWarnings("Since15") 799149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu public Function<PackageManager, PackageManager> createPackageManager; 809149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu public Function<TargetInfo, Boolean> onSafelyStartCallback; 819149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu public ResolverListController resolverListController; 829149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu public Boolean isVoiceInteraction; 839149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu 849149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu public void reset() { 859149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu onSafelyStartCallback = null; 869149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu isVoiceInteraction = null; 879149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu createPackageManager = null; 889149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu resolverListController = mock(ResolverListController.class); 899149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu } 909149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu } 919149dcaf414ebdac231af93d44abd5951a514a7eHakan Seyalioglu}