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 Original line Diff line number Diff line
@@ -6475,7 +6475,7 @@ public class AppOpsManager {
                    historicalDiscreteAccesses.add(other.mDiscreteAccesses.get(i++));
                    historicalDiscreteAccesses.add(other.mDiscreteAccesses.get(i++));
                }
                }
            }
            }
            mDiscreteAccesses = historicalDiscreteAccesses;
            mDiscreteAccesses = deduplicateDiscreteEvents(historicalDiscreteAccesses);
        }
        }


        private void increaseAccessCount(@UidState int uidState, @OpFlags int flags,
        private void increaseAccessCount(@UidState int uidState, @OpFlags int flags,
@@ -6996,21 +6996,7 @@ public class AppOpsManager {
            }
            }
            result.add(entry);
            result.add(entry);
        }
        }
        nAccesses = result.size();
        return deduplicateDiscreteEvents(result);
        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;
    }
    }


    /**
    /**
@@ -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) {
    private static AttributedOpEntry mergeAttributedOpEntries(List<AttributedOpEntry> opEntries) {
        if (opEntries.size() == 1) {
        if (opEntries.size() == 1) {
            return opEntries.get(0);
            return opEntries.get(0);