diff --git a/src/com/android/settings/applications/AppStateAlarmsAndRemindersBridge.java b/src/com/android/settings/applications/AppStateAlarmsAndRemindersBridge.java index cf938a5e3d4..ffe87678016 100644 --- a/src/com/android/settings/applications/AppStateAlarmsAndRemindersBridge.java +++ b/src/com/android/settings/applications/AppStateAlarmsAndRemindersBridge.java @@ -57,7 +57,7 @@ public class AppStateAlarmsAndRemindersBridge extends AppStateBaseBridge { mAlarmManager = context.getSystemService(AlarmManager.class); final IPackageManager iPm = AppGlobals.getPackageManager(); try { - mRequesterPackages = iPm.getAppOpPermissionPackages(PERMISSION); + mRequesterPackages = iPm.getAppOpPermissionPackages(PERMISSION, context.getUserId()); } catch (RemoteException re) { Log.e(TAG, "Cannot reach package manager", re); mRequesterPackages = EmptyArray.STRING; diff --git a/src/com/android/settings/applications/AppStateAppOpsBridge.java b/src/com/android/settings/applications/AppStateAppOpsBridge.java index 80d62b2eac8..2a1f321a92c 100755 --- a/src/com/android/settings/applications/AppStateAppOpsBridge.java +++ b/src/com/android/settings/applications/AppStateAppOpsBridge.java @@ -172,25 +172,25 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { */ private SparseArray> getEntries() { try { - Set packagesSet = new HashSet<>(); - for (String permission : mPermissions) { - String[] pkgs = mIPackageManager.getAppOpPermissionPackages(permission); - if (pkgs != null) { - packagesSet.addAll(Arrays.asList(pkgs)); - } - } - - if (packagesSet.isEmpty()) { - // No packages are requesting permission as specified by mPermissions. - return null; - } - // Create a sparse array that maps profileIds to an ArrayMap that maps package names to // an associated PermissionState object SparseArray> entries = new SparseArray<>(); for (final UserHandle profile : mProfiles) { - final ArrayMap entriesForProfile = new ArrayMap<>(); final int profileId = profile.getIdentifier(); + final Set packagesSet = new HashSet<>(); + for (String permission : mPermissions) { + final String[] pkgs = mIPackageManager.getAppOpPermissionPackages( + permission, profileId); + if (pkgs != null) { + packagesSet.addAll(Arrays.asList(pkgs)); + } + } + if (packagesSet.isEmpty()) { + // No packages are requesting permission as specified by mPermissions. + continue; + } + + final ArrayMap entriesForProfile = new ArrayMap<>(); entries.put(profileId, entriesForProfile); for (final String packageName : packagesSet) { final boolean isAvailable = mIPackageManager.isPackageAvailable(packageName, @@ -201,6 +201,9 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { } } } + if (entries.size() == 0) { + return null; + } return entries; } catch (RemoteException e) { diff --git a/src/com/android/settings/applications/AppStateInstallAppsBridge.java b/src/com/android/settings/applications/AppStateInstallAppsBridge.java index 8a3e5a220d5..b3dee89fe79 100644 --- a/src/com/android/settings/applications/AppStateInstallAppsBridge.java +++ b/src/com/android/settings/applications/AppStateInstallAppsBridge.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.os.RemoteException; +import android.os.UserHandle; import android.util.Log; import com.android.internal.util.ArrayUtils; @@ -65,9 +66,9 @@ public class AppStateInstallAppsBridge extends AppStateBaseBridge { } } - private boolean hasRequestedAppOpPermission(String permission, String packageName) { + private boolean hasRequestedAppOpPermission(String permission, String packageName, int userId) { try { - String[] packages = mIpm.getAppOpPermissionPackages(permission); + String[] packages = mIpm.getAppOpPermissionPackages(permission, userId); return ArrayUtils.contains(packages, packageName); } catch (RemoteException exc) { Log.e(TAG, "PackageManager dead. Cannot get permission info"); @@ -91,8 +92,9 @@ public class AppStateInstallAppsBridge extends AppStateBaseBridge { public InstallAppsState createInstallAppsStateFor(String packageName, int uid) { final InstallAppsState appState = new InstallAppsState(); + final int userId = UserHandle.getUserId(uid); appState.permissionRequested = hasRequestedAppOpPermission( - Manifest.permission.REQUEST_INSTALL_PACKAGES, packageName); + Manifest.permission.REQUEST_INSTALL_PACKAGES, packageName, userId); appState.appOpMode = getAppOpMode(AppOpsManager.OP_REQUEST_INSTALL_PACKAGES, uid, packageName); return appState;