Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4045007a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "AppOpsService: Notify storage manager when all ops are reset." into...

Merge "AppOpsService: Notify storage manager when all ops are reset." into rvc-dev am: 772be3e0 am: 988a04e3 am: e1afbdcb am: aac1c29c

Change-Id: I0703aa8d25f19164d7b00f0f40fa6ee5a2b89d71
parents ed00fd8c aac1c29c
Loading
Loading
Loading
Loading
+39 −16
Original line number Original line Diff line number Diff line
@@ -2582,23 +2582,11 @@ public class AppOpsService extends IAppOpsService.Stub {
        }
        }
    }
    }


    private static HashMap<ModeCallback, ArrayList<ChangeRec>> addCallbacks(
    private static ArrayList<ChangeRec> addChange(ArrayList<ChangeRec> reports,
            HashMap<ModeCallback, ArrayList<ChangeRec>> callbacks,
            int op, int uid, String packageName) {
            int op, int uid, String packageName, ArraySet<ModeCallback> cbs) {
        if (cbs == null) {
            return callbacks;
        }
        if (callbacks == null) {
            callbacks = new HashMap<>();
        }
        final int N = cbs.size();
        for (int i=0; i<N; i++) {
            ModeCallback cb = cbs.valueAt(i);
            ArrayList<ChangeRec> reports = callbacks.get(cb);
        boolean duplicate = false;
        boolean duplicate = false;
        if (reports == null) {
        if (reports == null) {
            reports = new ArrayList<>();
            reports = new ArrayList<>();
                callbacks.put(cb, reports);
        } else {
        } else {
            final int reportCount = reports.size();
            final int reportCount = reports.size();
            for (int j = 0; j < reportCount; j++) {
            for (int j = 0; j < reportCount; j++) {
@@ -2612,6 +2600,27 @@ public class AppOpsService extends IAppOpsService.Stub {
        if (!duplicate) {
        if (!duplicate) {
            reports.add(new ChangeRec(op, uid, packageName));
            reports.add(new ChangeRec(op, uid, packageName));
        }
        }

        return reports;
    }

    private static HashMap<ModeCallback, ArrayList<ChangeRec>> addCallbacks(
            HashMap<ModeCallback, ArrayList<ChangeRec>> callbacks,
            int op, int uid, String packageName, ArraySet<ModeCallback> cbs) {
        if (cbs == null) {
            return callbacks;
        }
        if (callbacks == null) {
            callbacks = new HashMap<>();
        }
        final int N = cbs.size();
        for (int i=0; i<N; i++) {
            ModeCallback cb = cbs.valueAt(i);
            ArrayList<ChangeRec> reports = callbacks.get(cb);
            ArrayList<ChangeRec> changed = addChange(reports, op, uid, packageName);
            if (changed != reports) {
                callbacks.put(cb, changed);
            }
        }
        }
        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() {