am 7f09ec39: Fix issue #10226007: Reset apps restores most of the changed settings...

* commit '7f09ec39b6fd7f24751f814649f12ea686cb28d4':
  Fix issue #10226007: Reset apps restores most of the changed settings...
This commit is contained in:
Dianne Hackborn
2013-08-07 16:09:14 -07:00
committed by Android Git Automerger

View File

@@ -380,12 +380,14 @@ public class AppOpsService extends IAppOpsService.Stub {
HashMap<Callback, ArrayList<Pair<String, Integer>>> callbacks = null; HashMap<Callback, ArrayList<Pair<String, Integer>>> callbacks = null;
synchronized (this) { synchronized (this) {
boolean changed = false; 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); 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(); String packageName = ent.getKey();
Ops pkgOps = ent.getValue(); 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); Op curOp = pkgOps.valueAt(j);
if (curOp.mode != AppOpsManager.MODE_ALLOWED) { if (curOp.mode != AppOpsManager.MODE_ALLOWED) {
curOp.mode = AppOpsManager.MODE_ALLOWED; curOp.mode = AppOpsManager.MODE_ALLOWED;
@@ -394,9 +396,17 @@ public class AppOpsService extends IAppOpsService.Stub {
mOpModeWatchers.get(curOp.op)); mOpModeWatchers.get(curOp.op));
callbacks = addCallbacks(callbacks, packageName, curOp.op, callbacks = addCallbacks(callbacks, packageName, curOp.op,
mPackageModeWatchers.get(packageName)); 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) { if (changed) {