diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java index dc0e3e1bbf03d..de11f36499c46 100644 --- a/services/core/java/com/android/server/AppOpsService.java +++ b/services/core/java/com/android/server/AppOpsService.java @@ -167,14 +167,10 @@ public class AppOpsService extends IAppOpsService.Stub { } } - final SparseArray> mOpModeWatchers - = new SparseArray>(); - final ArrayMap> mPackageModeWatchers - = new ArrayMap>(); - final ArrayMap mModeWatchers - = new ArrayMap(); - final SparseArray> mAudioRestrictions - = new SparseArray>(); + final SparseArray> mOpModeWatchers = new SparseArray<>(); + final ArrayMap> mPackageModeWatchers = new ArrayMap<>(); + final ArrayMap mModeWatchers = new ArrayMap<>(); + final SparseArray> mAudioRestrictions = new SparseArray<>(); public final class Callback implements DeathRecipient { final IAppOpsCallback mCallback; @@ -545,11 +541,11 @@ public class AppOpsService extends IAppOpsService.Stub { ArrayMap> callbackSpecs = null; synchronized (this) { - ArrayList callbacks = mOpModeWatchers.get(code); + ArraySet callbacks = mOpModeWatchers.get(code); if (callbacks != null) { final int callbackCount = callbacks.size(); for (int i = 0; i < callbackCount; i++) { - Callback callback = callbacks.get(i); + Callback callback = callbacks.valueAt(i); ArraySet changedPackages = new ArraySet<>(); Collections.addAll(changedPackages, uidPackageNames); callbackSpecs = new ArrayMap<>(); @@ -565,7 +561,7 @@ public class AppOpsService extends IAppOpsService.Stub { } final int callbackCount = callbacks.size(); for (int i = 0; i < callbackCount; i++) { - Callback callback = callbacks.get(i); + Callback callback = callbacks.valueAt(i); ArraySet changedPackages = callbackSpecs.get(callback); if (changedPackages == null) { changedPackages = new ArraySet<>(); @@ -623,17 +619,17 @@ public class AppOpsService extends IAppOpsService.Stub { if (op != null) { if (op.mode != mode) { op.mode = mode; - ArrayList cbs = mOpModeWatchers.get(code); + ArraySet cbs = mOpModeWatchers.get(code); if (cbs != null) { if (repCbs == null) { - repCbs = new ArrayList(); + repCbs = new ArrayList<>(); } repCbs.addAll(cbs); } cbs = mPackageModeWatchers.get(packageName); if (cbs != null) { if (repCbs == null) { - repCbs = new ArrayList(); + repCbs = new ArrayList<>(); } repCbs.addAll(cbs); } @@ -666,7 +662,7 @@ public class AppOpsService extends IAppOpsService.Stub { private static HashMap> addCallbacks( HashMap> callbacks, - int op, int uid, String packageName, ArrayList cbs) { + int op, int uid, String packageName, ArraySet cbs) { if (cbs == null) { return callbacks; } @@ -674,8 +670,9 @@ public class AppOpsService extends IAppOpsService.Stub { callbacks = new HashMap<>(); } boolean duplicate = false; - for (int i=0; i reports = callbacks.get(cb); if (reports == null) { reports = new ArrayList<>(); @@ -830,17 +827,17 @@ public class AppOpsService extends IAppOpsService.Stub { mModeWatchers.put(callback.asBinder(), cb); } if (op != AppOpsManager.OP_NONE) { - ArrayList cbs = mOpModeWatchers.get(op); + ArraySet cbs = mOpModeWatchers.get(op); if (cbs == null) { - cbs = new ArrayList(); + cbs = new ArraySet<>(); mOpModeWatchers.put(op, cbs); } cbs.add(cb); } if (packageName != null) { - ArrayList cbs = mPackageModeWatchers.get(packageName); + ArraySet cbs = mPackageModeWatchers.get(packageName); if (cbs == null) { - cbs = new ArrayList(); + cbs = new ArraySet<>(); mPackageModeWatchers.put(packageName, cbs); } cbs.add(cb); @@ -858,14 +855,14 @@ public class AppOpsService extends IAppOpsService.Stub { if (cb != null) { cb.unlinkToDeath(); for (int i=mOpModeWatchers.size()-1; i>=0; i--) { - ArrayList cbs = mOpModeWatchers.valueAt(i); + ArraySet cbs = mOpModeWatchers.valueAt(i); cbs.remove(cb); if (cbs.size() <= 0) { mOpModeWatchers.removeAt(i); } } for (int i=mPackageModeWatchers.size()-1; i>=0; i--) { - ArrayList cbs = mPackageModeWatchers.valueAt(i); + ArraySet cbs = mPackageModeWatchers.valueAt(i); cbs.remove(cb); if (cbs.size() <= 0) { mPackageModeWatchers.removeAt(i); @@ -2066,10 +2063,10 @@ public class AppOpsService extends IAppOpsService.Stub { for (int i=0; i callbacks = mOpModeWatchers.valueAt(i); + ArraySet callbacks = mOpModeWatchers.valueAt(i); for (int j=0; j callbacks = mPackageModeWatchers.valueAt(i); + ArraySet callbacks = mPackageModeWatchers.valueAt(i); for (int j=0; j clonedCallbacks; + final ArraySet clonedCallbacks; synchronized (this) { - ArrayList callbacks = mOpModeWatchers.get(code); + ArraySet callbacks = mOpModeWatchers.get(code); if (callbacks == null) { return; } - clonedCallbacks = new ArrayList<>(callbacks); + clonedCallbacks = new ArraySet<>(callbacks); } // There are components watching for mode changes such as window manager // and location manager which are in our process. The callbacks in these - // components may require permissions our remote caller does not have.s + // components may require permissions our remote caller does not have. final long identity = Binder.clearCallingIdentity(); try { final int callbackCount = clonedCallbacks.size(); for (int i = 0; i < callbackCount; i++) { - Callback callback = clonedCallbacks.get(i); + Callback callback = clonedCallbacks.valueAt(i); try { callback.mCallback.opChanged(code, -1, null); } catch (RemoteException e) {