13965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez/*
23965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Copyright (C) 2017 The Android Open Source Project
33965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez *
43965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Licensed under the Apache License, Version 2.0 (the "License");
53965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * you may not use this file except in compliance with the License.
63965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * You may obtain a copy of the License at
73965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez *
83965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez *      http://www.apache.org/licenses/LICENSE-2.0
93965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez *
103965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Unless required by applicable law or agreed to in writing, software
113965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * distributed under the License is distributed on an "AS IS" BASIS,
123965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * See the License for the specific language governing permissions and
143965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * limitations under the License.
153965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */
163965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezpackage com.android.settingslib.applications;
173965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
183965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezimport android.content.ComponentName;
193965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezimport android.content.Intent;
203965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezimport android.content.IntentFilter;
213965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezimport android.content.pm.ApplicationInfo;
223965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezimport android.content.pm.PackageInfo;
233965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezimport android.content.pm.PackageManager;
243965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezimport android.content.pm.PackageManager.NameNotFoundException;
253965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezimport android.content.pm.ResolveInfo;
263965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezimport android.graphics.drawable.Drawable;
273965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezimport android.os.UserHandle;
283965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
293965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezimport java.util.List;
303965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
313965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez/**
323965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * A thin wrapper class that simplifies testing by putting a mockable layer between the application
333965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * and the PackageManager. This class only provides access to the minimum number of functions from
343965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * the PackageManager needed for DeletionHelper to work.
353965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */
363965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezpublic class PackageManagerWrapperImpl implements PackageManagerWrapper {
373965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
383965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    private final PackageManager mPm;
393965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
403965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public PackageManagerWrapperImpl(PackageManager pm) {
413965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        mPm = pm;
423965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
433965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
443965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
453965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public PackageManager getPackageManager() {
463965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm;
473965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
483965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
493965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
503965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public List<ApplicationInfo> getInstalledApplicationsAsUser(int flags, int userId) {
513965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm.getInstalledApplicationsAsUser(flags, userId);
523965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
533965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
543965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
553965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public boolean hasSystemFeature(String name) {
563965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm.hasSystemFeature(name);
573965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
583965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
593965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
603965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, int flags, int userId) {
613965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm.queryIntentActivitiesAsUser(intent, flags, userId);
623965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
633965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
643965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
653965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public int getInstallReason(String packageName, UserHandle user) {
663965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm.getInstallReason(packageName, user);
673965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
683965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
693965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
703965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public ApplicationInfo getApplicationInfoAsUser(String packageName, int i, int userId)
713965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez            throws PackageManager.NameNotFoundException {
723965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm.getApplicationInfoAsUser(packageName, i, userId);
733965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
743965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
753965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
763965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public boolean setDefaultBrowserPackageNameAsUser(String packageName, int userId) {
773965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm.setDefaultBrowserPackageNameAsUser(packageName, userId);
783965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
793965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
803965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
813965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public String getDefaultBrowserPackageNameAsUser(int userId) {
823965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm.getDefaultBrowserPackageNameAsUser(userId);
833965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
843965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
853965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
863965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public ComponentName getHomeActivities(List<ResolveInfo> homeActivities) {
873965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm.getHomeActivities(homeActivities);
883965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
893965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
903965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
913965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int i, int user) {
923965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm.queryIntentServicesAsUser(intent, i, user);
933965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
943965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
953965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
963965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public void replacePreferredActivity(IntentFilter homeFilter, int matchCategoryEmpty,
973965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez            ComponentName[] componentNames, ComponentName component) {
983965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        mPm.replacePreferredActivity(homeFilter, matchCategoryEmpty, componentNames, component);
993965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
1003965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
1013965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
1023965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public PackageInfo getPackageInfo(String packageName, int i) throws NameNotFoundException {
1033965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm.getPackageInfo(packageName, i);
1043965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
1053965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
1063965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
1073965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public Drawable getUserBadgedIcon(ApplicationInfo info) {
1083965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return mPm.getUserBadgedIcon(mPm.loadUnbadgedItemIcon(info, info),
1093965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez                new UserHandle(UserHandle.getUserId(info.uid)));
1103965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
1113965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez
1123965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    @Override
1133965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    public CharSequence loadLabel(ApplicationInfo app) {
1143965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez        return app.loadLabel(mPm);
1153965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez    }
1163965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez}
117