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

Commit ea9ab1d9 authored by Stanislav Zholnin's avatar Stanislav Zholnin Committed by Android (Google) Code Review
Browse files

Merge "Deduplicate discrete events for different attribution tags." into sc-dev

parents 47d9ba27 f2a4eb59
Loading
Loading
Loading
Loading
+19 −16
Original line number Diff line number Diff line
@@ -6475,7 +6475,7 @@ public class AppOpsManager {
                    historicalDiscreteAccesses.add(other.mDiscreteAccesses.get(i++));
                }
            }
            mDiscreteAccesses = historicalDiscreteAccesses;
            mDiscreteAccesses = deduplicateDiscreteEvents(historicalDiscreteAccesses);
        }

        private void increaseAccessCount(@UidState int uidState, @OpFlags int flags,
@@ -6996,21 +6996,7 @@ public class AppOpsManager {
            }
            result.add(entry);
        }
        nAccesses = result.size();
        int i = 0;
        for (int j = 0, k = 0; j < nAccesses; i++, j = k) {
            long currentAccessTime = result.get(j).getLastAccessTime(OP_FLAGS_ALL);
            k = j + 1;
            while(k < nAccesses &&
                    result.get(k).getLastAccessTime(OP_FLAGS_ALL) == currentAccessTime) {
                k++;
            }
            result.set(i, mergeAttributedOpEntries(result.subList(j, k)));
        }
        for (; i < nAccesses; i++) {
            result.remove(result.size() - 1);
        }
        return result;
        return deduplicateDiscreteEvents(result);
    }

    /**
@@ -9834,6 +9820,23 @@ public class AppOpsManager {
        }
    }

    private static List<AttributedOpEntry> deduplicateDiscreteEvents(List<AttributedOpEntry> list) {
        int n = list.size();
        int i = 0;
        for (int j = 0, k = 0; j < n; i++, j = k) {
            long currentAccessTime = list.get(j).getLastAccessTime(OP_FLAGS_ALL);
            k = j + 1;
            while(k < n && list.get(k).getLastAccessTime(OP_FLAGS_ALL) == currentAccessTime) {
                k++;
            }
            list.set(i, mergeAttributedOpEntries(list.subList(j, k)));
        }
        for (; i < n; i++) {
            list.remove(list.size() - 1);
        }
        return list;
    }

    private static AttributedOpEntry mergeAttributedOpEntries(List<AttributedOpEntry> opEntries) {
        if (opEntries.size() == 1) {
            return opEntries.get(0);