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