ApplicationFeatureProviderImpl.java revision 60b2960cbb4df5310d054da57e2ec134b3fca0e6
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.os.RemoteException; 26import android.os.UserHandle; 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.List; 35import java.util.Set; 36 37public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvider { 38 39 private final Context mContext; 40 private final PackageManagerWrapper mPm; 41 private final IPackageManagerWrapper mPms; 42 private final DevicePolicyManagerWrapper mDpm; 43 private final UserManager mUm; 44 45 public ApplicationFeatureProviderImpl(Context context, PackageManagerWrapper pm, 46 IPackageManagerWrapper pms, DevicePolicyManagerWrapper dpm) { 47 mContext = context.getApplicationContext(); 48 mPm = pm; 49 mPms = pms; 50 mDpm = dpm; 51 mUm = UserManager.get(mContext); 52 } 53 54 @Override 55 public AppHeaderController newAppHeaderController(Fragment fragment, View appHeader) { 56 return new AppHeaderController(mContext, fragment, appHeader); 57 } 58 59 @Override 60 public InstantAppButtonsController newInstantAppButtonsController(Fragment fragment, 61 View view, InstantAppButtonsController.ShowDialogDelegate showDialogDelegate) { 62 return new InstantAppButtonsController(mContext, fragment, view, showDialogDelegate); 63 } 64 65 @Override 66 public void calculateNumberOfPolicyInstalledApps(boolean async, NumberOfAppsCallback callback) { 67 final CurrentUserAndManagedProfilePolicyInstalledAppCounter counter = 68 new CurrentUserAndManagedProfilePolicyInstalledAppCounter(mContext, mPm, callback); 69 if (async) { 70 counter.execute(); 71 } else { 72 counter.executeInForeground(); 73 } 74 } 75 76 @Override 77 public void listPolicyInstalledApps(ListOfAppsCallback callback) { 78 final CurrentUserPolicyInstalledAppLister lister = 79 new CurrentUserPolicyInstalledAppLister(mPm, mUm, callback); 80 lister.execute(); 81 } 82 83 @Override 84 public void calculateNumberOfAppsWithAdminGrantedPermissions(String[] permissions, 85 boolean async, NumberOfAppsCallback callback) { 86 final CurrentUserAndManagedProfileAppWithAdminGrantedPermissionsCounter counter = 87 new CurrentUserAndManagedProfileAppWithAdminGrantedPermissionsCounter(mContext, 88 permissions, mPm, mPms, mDpm, callback); 89 if (async) { 90 counter.execute(); 91 } else { 92 counter.executeInForeground(); 93 } 94 } 95 96 @Override 97 public void listAppsWithAdminGrantedPermissions(String[] permissions, 98 ListOfAppsCallback callback) { 99 final CurrentUserAppWithAdminGrantedPermissionsLister lister = 100 new CurrentUserAppWithAdminGrantedPermissionsLister(permissions, mPm, mPms, mDpm, 101 mUm, callback); 102 lister.execute(); 103 } 104 105 @Override 106 public Set<PersistentPreferredActivityInfo> findPersistentPreferredActivities( 107 Intent[] intents) { 108 final Set<PersistentPreferredActivityInfo> activities = new ArraySet<>(); 109 final List<UserHandle> users = mUm.getUserProfiles(); 110 for (final Intent intent : intents) { 111 for (final UserHandle user : users) { 112 final int userId = user.getIdentifier(); 113 try { 114 final ResolveInfo resolveInfo = mPms.findPersistentPreferredActivity(intent, 115 userId); 116 if (resolveInfo != null) { 117 ComponentInfo componentInfo = null; 118 if (resolveInfo.activityInfo != null) { 119 componentInfo = resolveInfo.activityInfo; 120 } else if (resolveInfo.serviceInfo != null) { 121 componentInfo = resolveInfo.serviceInfo; 122 } else if (resolveInfo.providerInfo != null) { 123 componentInfo = resolveInfo.providerInfo; 124 } 125 if (componentInfo != null) { 126 activities.add(new PersistentPreferredActivityInfo( 127 componentInfo.packageName, userId)); 128 } 129 } 130 } catch (RemoteException exception) { 131 } 132 } 133 134 } 135 return activities; 136 } 137 138 private static class CurrentUserAndManagedProfilePolicyInstalledAppCounter 139 extends InstalledAppCounter { 140 private NumberOfAppsCallback mCallback; 141 142 CurrentUserAndManagedProfilePolicyInstalledAppCounter(Context context, 143 PackageManagerWrapper packageManager, NumberOfAppsCallback callback) { 144 super(context, PackageManager.INSTALL_REASON_POLICY, packageManager); 145 mCallback = callback; 146 } 147 148 @Override 149 protected void onCountComplete(int num) { 150 mCallback.onNumberOfAppsResult(num); 151 } 152 } 153 154 private static class CurrentUserAndManagedProfileAppWithAdminGrantedPermissionsCounter 155 extends AppWithAdminGrantedPermissionsCounter { 156 private NumberOfAppsCallback mCallback; 157 158 CurrentUserAndManagedProfileAppWithAdminGrantedPermissionsCounter(Context context, 159 String[] permissions, PackageManagerWrapper packageManager, 160 IPackageManagerWrapper packageManagerService, 161 DevicePolicyManagerWrapper devicePolicyManager, NumberOfAppsCallback callback) { 162 super(context, permissions, packageManager, packageManagerService, devicePolicyManager); 163 mCallback = callback; 164 } 165 166 @Override 167 protected void onCountComplete(int num) { 168 mCallback.onNumberOfAppsResult(num); 169 } 170 } 171 172 private static class CurrentUserPolicyInstalledAppLister extends InstalledAppLister { 173 private ListOfAppsCallback mCallback; 174 175 CurrentUserPolicyInstalledAppLister(PackageManagerWrapper packageManager, 176 UserManager userManager, ListOfAppsCallback callback) { 177 super(packageManager, userManager); 178 mCallback = callback; 179 } 180 181 @Override 182 protected void onAppListBuilt(List<UserAppInfo> list) { 183 mCallback.onListOfAppsResult(list); 184 } 185 } 186 187 private static class CurrentUserAppWithAdminGrantedPermissionsLister extends 188 AppWithAdminGrantedPermissionsLister { 189 private ListOfAppsCallback mCallback; 190 191 CurrentUserAppWithAdminGrantedPermissionsLister(String[] permissions, 192 PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService, 193 DevicePolicyManagerWrapper devicePolicyManager, UserManager userManager, 194 ListOfAppsCallback callback) { 195 super(permissions, packageManager, packageManagerService, devicePolicyManager, 196 userManager); 197 mCallback = callback; 198 } 199 200 @Override 201 protected void onAppListBuilt(List<UserAppInfo> list) { 202 mCallback.onListOfAppsResult(list); 203 } 204 } 205 206} 207