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