ApplicationFeatureProviderImpl.java revision a45f3d2f33e2286b8c5fd89f962e700177210a48
1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.settings.applications; 18 19import android.app.Fragment; 20import android.content.Context; 21import android.content.Intent; 22import android.content.pm.ComponentInfo; 23import android.content.pm.PackageManager; 24import android.content.pm.ResolveInfo; 25import android.content.pm.UserInfo; 26import android.os.RemoteException; 27import android.os.UserManager; 28import android.util.ArraySet; 29import android.view.View; 30 31import com.android.settings.applications.instantapps.InstantAppButtonsController; 32import com.android.settings.enterprise.DevicePolicyManagerWrapper; 33 34import java.util.ArrayList; 35import java.util.List; 36import java.util.Set; 37 38public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvider { 39 40 private final Context mContext; 41 private final PackageManagerWrapper mPm; 42 private final IPackageManagerWrapper mPms; 43 private final DevicePolicyManagerWrapper mDpm; 44 private final UserManager mUm; 45 46 public ApplicationFeatureProviderImpl(Context context, PackageManagerWrapper pm, 47 IPackageManagerWrapper pms, DevicePolicyManagerWrapper dpm) { 48 mContext = context.getApplicationContext(); 49 mPm = pm; 50 mPms = pms; 51 mDpm = dpm; 52 mUm = UserManager.get(mContext); 53 } 54 55 @Override 56 public InstantAppButtonsController newInstantAppButtonsController(Fragment fragment, 57 View view, InstantAppButtonsController.ShowDialogDelegate showDialogDelegate) { 58 return new InstantAppButtonsController(mContext, fragment, view, showDialogDelegate); 59 } 60 61 @Override 62 public void calculateNumberOfPolicyInstalledApps(boolean async, NumberOfAppsCallback callback) { 63 final CurrentUserAndManagedProfilePolicyInstalledAppCounter counter = 64 new CurrentUserAndManagedProfilePolicyInstalledAppCounter(mContext, mPm, callback); 65 if (async) { 66 counter.execute(); 67 } else { 68 counter.executeInForeground(); 69 } 70 } 71 72 @Override 73 public void listPolicyInstalledApps(ListOfAppsCallback callback) { 74 final CurrentUserPolicyInstalledAppLister lister = 75 new CurrentUserPolicyInstalledAppLister(mPm, mUm, callback); 76 lister.execute(); 77 } 78 79 @Override 80 public void calculateNumberOfAppsWithAdminGrantedPermissions(String[] permissions, 81 boolean async, NumberOfAppsCallback callback) { 82 final CurrentUserAndManagedProfileAppWithAdminGrantedPermissionsCounter counter = 83 new CurrentUserAndManagedProfileAppWithAdminGrantedPermissionsCounter(mContext, 84 permissions, mPm, mPms, mDpm, callback); 85 if (async) { 86 counter.execute(); 87 } else { 88 counter.executeInForeground(); 89 } 90 } 91 92 @Override 93 public void listAppsWithAdminGrantedPermissions(String[] permissions, 94 ListOfAppsCallback callback) { 95 final CurrentUserAppWithAdminGrantedPermissionsLister lister = 96 new CurrentUserAppWithAdminGrantedPermissionsLister(permissions, mPm, mPms, mDpm, 97 mUm, callback); 98 lister.execute(); 99 } 100 101 @Override 102 public List<UserAppInfo> findPersistentPreferredActivities(int userId, Intent[] intents) { 103 final List<UserAppInfo> preferredActivities = new ArrayList<>(); 104 final Set<UserAppInfo> uniqueApps = new ArraySet<>(); 105 final UserInfo userInfo = mUm.getUserInfo(userId); 106 for (final Intent intent : intents) { 107 try { 108 final ResolveInfo resolveInfo = 109 mPms.findPersistentPreferredActivity(intent, userId); 110 if (resolveInfo != null) { 111 ComponentInfo componentInfo = null; 112 if (resolveInfo.activityInfo != null) { 113 componentInfo = resolveInfo.activityInfo; 114 } else if (resolveInfo.serviceInfo != null) { 115 componentInfo = resolveInfo.serviceInfo; 116 } else if (resolveInfo.providerInfo != null) { 117 componentInfo = resolveInfo.providerInfo; 118 } 119 if (componentInfo != null) { 120 UserAppInfo info = new UserAppInfo(userInfo, componentInfo.applicationInfo); 121 if (uniqueApps.add(info)) { 122 preferredActivities.add(info); 123 } 124 } 125 } 126 } catch (RemoteException exception) { 127 } 128 } 129 return preferredActivities; 130 } 131 132 @Override 133 public Set<String> getKeepEnabledPackages() { 134 return new ArraySet<>(); 135 } 136 137 private static class CurrentUserAndManagedProfilePolicyInstalledAppCounter 138 extends InstalledAppCounter { 139 private NumberOfAppsCallback mCallback; 140 141 CurrentUserAndManagedProfilePolicyInstalledAppCounter(Context context, 142 PackageManagerWrapper packageManager, NumberOfAppsCallback callback) { 143 super(context, PackageManager.INSTALL_REASON_POLICY, packageManager); 144 mCallback = callback; 145 } 146 147 @Override 148 protected void onCountComplete(int num) { 149 mCallback.onNumberOfAppsResult(num); 150 } 151 } 152 153 private static class CurrentUserAndManagedProfileAppWithAdminGrantedPermissionsCounter 154 extends AppWithAdminGrantedPermissionsCounter { 155 private NumberOfAppsCallback mCallback; 156 157 CurrentUserAndManagedProfileAppWithAdminGrantedPermissionsCounter(Context context, 158 String[] permissions, PackageManagerWrapper packageManager, 159 IPackageManagerWrapper packageManagerService, 160 DevicePolicyManagerWrapper devicePolicyManager, NumberOfAppsCallback callback) { 161 super(context, permissions, packageManager, packageManagerService, devicePolicyManager); 162 mCallback = callback; 163 } 164 165 @Override 166 protected void onCountComplete(int num) { 167 mCallback.onNumberOfAppsResult(num); 168 } 169 } 170 171 private static class CurrentUserPolicyInstalledAppLister extends InstalledAppLister { 172 private ListOfAppsCallback mCallback; 173 174 CurrentUserPolicyInstalledAppLister(PackageManagerWrapper packageManager, 175 UserManager userManager, ListOfAppsCallback callback) { 176 super(packageManager, userManager); 177 mCallback = callback; 178 } 179 180 @Override 181 protected void onAppListBuilt(List<UserAppInfo> list) { 182 mCallback.onListOfAppsResult(list); 183 } 184 } 185 186 private static class CurrentUserAppWithAdminGrantedPermissionsLister extends 187 AppWithAdminGrantedPermissionsLister { 188 private ListOfAppsCallback mCallback; 189 190 CurrentUserAppWithAdminGrantedPermissionsLister(String[] permissions, 191 PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService, 192 DevicePolicyManagerWrapper devicePolicyManager, UserManager userManager, 193 ListOfAppsCallback callback) { 194 super(permissions, packageManager, packageManagerService, devicePolicyManager, 195 userManager); 196 mCallback = callback; 197 } 198 199 @Override 200 protected void onAppListBuilt(List<UserAppInfo> list) { 201 mCallback.onListOfAppsResult(list); 202 } 203 } 204 205} 206