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 * This interface replicates a subset of the android.content.pm.PackageManager (PM). The interface 333965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * exists so that we can use a thin wrapper around the PM in production code and a mock in tests. 343965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * We cannot directly mock or shadow the PM, because some of the methods we rely on are newer than 353965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * the API version supported by Robolectric. 363965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 373965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinezpublic interface PackageManagerWrapper { 383965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 393965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 403965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Returns the real {@code PackageManager} object. 413965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 423965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez PackageManager getPackageManager(); 433965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 443965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 453965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Calls {@code PackageManager.getInstalledApplicationsAsUser()}. 463965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * 473965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @see android.content.pm.PackageManager#getInstalledApplicationsAsUser 483965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 493965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez List<ApplicationInfo> getInstalledApplicationsAsUser(int flags, int userId); 503965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 513965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 523965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Calls {@code PackageManager.hasSystemFeature()}. 533965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * 543965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @see android.content.pm.PackageManager#hasSystemFeature 553965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 563965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez boolean hasSystemFeature(String name); 573965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 583965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 593965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Calls {@code PackageManager.queryIntentActivitiesAsUser()}. 603965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * 613965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @see android.content.pm.PackageManager#queryIntentActivitiesAsUser 623965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 633965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, int flags, int userId); 643965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 653965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 663965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Calls {@code PackageManager.getInstallReason()}. 673965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * 683965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @see android.content.pm.PackageManager#getInstallReason 693965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 703965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez int getInstallReason(String packageName, UserHandle user); 713965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 723965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 733965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Calls {@code PackageManager.getApplicationInfoAsUser} 743965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 753965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez ApplicationInfo getApplicationInfoAsUser(String packageName, int i, int userId) 763965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez throws PackageManager.NameNotFoundException; 773965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 783965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 793965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Calls {@code PackageManager.setDefaultBrowserPackageNameAsUser} 803965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 813965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez boolean setDefaultBrowserPackageNameAsUser(String packageName, int userId); 823965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 833965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 843965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Calls {@code PackageManager.getDefaultBrowserPackageNameAsUser} 853965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 863965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez String getDefaultBrowserPackageNameAsUser(int userId); 873965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 883965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 893965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Calls {@code PackageManager.getHomeActivities} 903965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 913965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez ComponentName getHomeActivities(List<ResolveInfo> homeActivities); 923965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 933965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 943965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Calls {@code PackageManager.queryIntentServicesAsUser} 953965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 963965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int i, int user); 973965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 983965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 993965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Calls {@code PackageManager.replacePreferredActivity} 1003965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 1013965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez void replacePreferredActivity(IntentFilter homeFilter, int matchCategoryEmpty, 1023965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez ComponentName[] componentNames, ComponentName component); 1033965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 1043965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 1053965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Gets information about a particular package from the package manager. 1063965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @param packageName The name of the package we would like information about. 1073965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @param i additional options flags. see javadoc for {@link PackageManager#getPackageInfo(String, int)} 1083965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @return The PackageInfo for the requested package 1093965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @throws NameNotFoundException 1103965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 1113965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez PackageInfo getPackageInfo(String packageName, int i) throws NameNotFoundException; 1123965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 1133965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 1143965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Retrieves the icon associated with this particular set of ApplicationInfo 1153965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @param info The ApplicationInfo to retrieve the icon for 1163965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @return The icon as a drawable. 1173965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 1183965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez Drawable getUserBadgedIcon(ApplicationInfo info); 1193965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez 1203965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez /** 1213965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * Retrieves the label associated with the particular set of ApplicationInfo 1223965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @param app The ApplicationInfo to retrieve the label for 1233965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez * @return the label as a CharSequence 1243965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez */ 1253965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez CharSequence loadLabel(ApplicationInfo app); 126bf8eb3d2544cb9a25d3fe2bc34e125c6c81e960eDaniel Nishi 127bf8eb3d2544cb9a25d3fe2bc34e125c6c81e960eDaniel Nishi /** 128bf8eb3d2544cb9a25d3fe2bc34e125c6c81e960eDaniel Nishi * Retrieve all activities that can be performed for the given intent. 129bf8eb3d2544cb9a25d3fe2bc34e125c6c81e960eDaniel Nishi */ 130bf8eb3d2544cb9a25d3fe2bc34e125c6c81e960eDaniel Nishi List<ResolveInfo> queryIntentActivities(Intent intent, int flags); 1313965e0207cef1200834911c4ab61c992e7c478a6Salvador Martinez} 132