Merge "AppOpsService: Notify storage manager when all ops are reset." into rvc-dev am: 772be3e0ca am: 988a04e372 am: e1afbdcb23 am: aac1c29c8b
Change-Id: I0703aa8d25f19164d7b00f0f40fa6ee5a2b89d71
This commit is contained in:
@@ -2582,6 +2582,28 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static ArrayList<ChangeRec> addChange(ArrayList<ChangeRec> reports,
|
||||||
|
int op, int uid, String packageName) {
|
||||||
|
boolean duplicate = false;
|
||||||
|
if (reports == null) {
|
||||||
|
reports = new ArrayList<>();
|
||||||
|
} else {
|
||||||
|
final int reportCount = reports.size();
|
||||||
|
for (int j = 0; j < reportCount; j++) {
|
||||||
|
ChangeRec report = reports.get(j);
|
||||||
|
if (report.op == op && report.pkg.equals(packageName)) {
|
||||||
|
duplicate = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!duplicate) {
|
||||||
|
reports.add(new ChangeRec(op, uid, packageName));
|
||||||
|
}
|
||||||
|
|
||||||
|
return reports;
|
||||||
|
}
|
||||||
|
|
||||||
private static HashMap<ModeCallback, ArrayList<ChangeRec>> addCallbacks(
|
private static HashMap<ModeCallback, ArrayList<ChangeRec>> addCallbacks(
|
||||||
HashMap<ModeCallback, ArrayList<ChangeRec>> callbacks,
|
HashMap<ModeCallback, ArrayList<ChangeRec>> callbacks,
|
||||||
int op, int uid, String packageName, ArraySet<ModeCallback> cbs) {
|
int op, int uid, String packageName, ArraySet<ModeCallback> cbs) {
|
||||||
@@ -2595,22 +2617,9 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
for (int i=0; i<N; i++) {
|
for (int i=0; i<N; i++) {
|
||||||
ModeCallback cb = cbs.valueAt(i);
|
ModeCallback cb = cbs.valueAt(i);
|
||||||
ArrayList<ChangeRec> reports = callbacks.get(cb);
|
ArrayList<ChangeRec> reports = callbacks.get(cb);
|
||||||
boolean duplicate = false;
|
ArrayList<ChangeRec> changed = addChange(reports, op, uid, packageName);
|
||||||
if (reports == null) {
|
if (changed != reports) {
|
||||||
reports = new ArrayList<>();
|
callbacks.put(cb, changed);
|
||||||
callbacks.put(cb, reports);
|
|
||||||
} else {
|
|
||||||
final int reportCount = reports.size();
|
|
||||||
for (int j = 0; j < reportCount; j++) {
|
|
||||||
ChangeRec report = reports.get(j);
|
|
||||||
if (report.op == op && report.pkg.equals(packageName)) {
|
|
||||||
duplicate = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!duplicate) {
|
|
||||||
reports.add(new ChangeRec(op, uid, packageName));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return callbacks;
|
return callbacks;
|
||||||
@@ -2648,6 +2657,7 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
enforceManageAppOpsModes(callingPid, callingUid, reqUid);
|
enforceManageAppOpsModes(callingPid, callingUid, reqUid);
|
||||||
|
|
||||||
HashMap<ModeCallback, ArrayList<ChangeRec>> callbacks = null;
|
HashMap<ModeCallback, ArrayList<ChangeRec>> callbacks = null;
|
||||||
|
ArrayList<ChangeRec> allChanges = new ArrayList<>();
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
boolean changed = false;
|
boolean changed = false;
|
||||||
for (int i = mUidStates.size() - 1; i >= 0; i--) {
|
for (int i = mUidStates.size() - 1; i >= 0; i--) {
|
||||||
@@ -2668,6 +2678,9 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
mOpModeWatchers.get(code));
|
mOpModeWatchers.get(code));
|
||||||
callbacks = addCallbacks(callbacks, code, uidState.uid, packageName,
|
callbacks = addCallbacks(callbacks, code, uidState.uid, packageName,
|
||||||
mPackageModeWatchers.get(packageName));
|
mPackageModeWatchers.get(packageName));
|
||||||
|
|
||||||
|
allChanges = addChange(allChanges, code, uidState.uid,
|
||||||
|
packageName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2707,6 +2720,7 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
callbacks = addCallbacks(callbacks, curOp.op, uid, packageName,
|
callbacks = addCallbacks(callbacks, curOp.op, uid, packageName,
|
||||||
mPackageModeWatchers.get(packageName));
|
mPackageModeWatchers.get(packageName));
|
||||||
|
|
||||||
|
allChanges = addChange(allChanges, curOp.op, uid, packageName);
|
||||||
curOp.removeAttributionsWithNoTime();
|
curOp.removeAttributionsWithNoTime();
|
||||||
if (curOp.mAttributions.isEmpty()) {
|
if (curOp.mAttributions.isEmpty()) {
|
||||||
pkgOps.removeAt(j);
|
pkgOps.removeAt(j);
|
||||||
@@ -2741,6 +2755,15 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (allChanges != null) {
|
||||||
|
int numChanges = allChanges.size();
|
||||||
|
for (int i = 0; i < numChanges; i++) {
|
||||||
|
ChangeRec change = allChanges.get(i);
|
||||||
|
notifyOpChangedSync(change.op, change.uid, change.pkg,
|
||||||
|
AppOpsManager.opToDefaultMode(change.op));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void evalAllForegroundOpsLocked() {
|
private void evalAllForegroundOpsLocked() {
|
||||||
|
|||||||
Reference in New Issue
Block a user