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}