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

Commit f2a4eb59 authored by Stanislav Zholnin's avatar Stanislav Zholnin
Browse files

Deduplicate discrete events for different attribution tags.

Test: in development
Bug: 176965672
Change-Id: Ia9fa0eefaba21d93eb9c28163939fb0490a008d6
parent 54a17ad3
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);