diff options
author | Dianne Hackborn <hackbod@google.com> | 2013-08-07 16:14:11 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-08-07 16:14:11 -0700 |
commit | 42380b6de656ca1336b8b99dbc7995cfbf875924 (patch) | |
tree | bed0e85c420054b38473d1fa47ff63147a2e18fd /services/java/com/android/server/AppOpsService.java | |
parent | 68091b9e108336af21ff1248aac960e9544668af (diff) | |
parent | 9f11f105cd2983021a73b9aa921674fbff3457f3 (diff) |
am 9f11f105: am 7f09ec39: Fix issue #10226007: Reset apps restores most of the changed settings...
* commit '9f11f105cd2983021a73b9aa921674fbff3457f3':
Fix issue #10226007: Reset apps restores most of the changed settings...
Diffstat (limited to 'services/java/com/android/server/AppOpsService.java')
-rw-r--r-- | services/java/com/android/server/AppOpsService.java | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/services/java/com/android/server/AppOpsService.java b/services/java/com/android/server/AppOpsService.java index 20ad63683acd..a55fddcd7ed8 100644 --- a/services/java/com/android/server/AppOpsService.java +++ b/services/java/com/android/server/AppOpsService.java @@ -380,12 +380,14 @@ public class AppOpsService extends IAppOpsService.Stub { HashMap<Callback, ArrayList<Pair<String, Integer>>> callbacks = null; synchronized (this) { boolean changed = false; - for (int i=0; i<mUidOps.size(); i++) { + for (int i=mUidOps.size()-1; i>=0; i--) { HashMap<String, Ops> packages = mUidOps.valueAt(i); - for (Map.Entry<String, Ops> ent : packages.entrySet()) { + Iterator<Map.Entry<String, Ops>> it = packages.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry<String, Ops> ent = it.next(); String packageName = ent.getKey(); Ops pkgOps = ent.getValue(); - for (int j=0; j<pkgOps.size(); j++) { + for (int j=pkgOps.size()-1; j>=0; j--) { Op curOp = pkgOps.valueAt(j); if (curOp.mode != AppOpsManager.MODE_ALLOWED) { curOp.mode = AppOpsManager.MODE_ALLOWED; @@ -394,9 +396,17 @@ public class AppOpsService extends IAppOpsService.Stub { mOpModeWatchers.get(curOp.op)); callbacks = addCallbacks(callbacks, packageName, curOp.op, mPackageModeWatchers.get(packageName)); - pruneOp(curOp, mUidOps.keyAt(i), packageName); + if (curOp.time == 0 && curOp.rejectTime == 0) { + pkgOps.removeAt(j); + } } } + if (pkgOps.size() == 0) { + it.remove(); + } + } + if (packages.size() == 0) { + mUidOps.removeAt(i); } } if (changed) { |