diff options
| author | 2021-04-16 10:08:16 +0000 | |
|---|---|---|
| committer | 2021-04-16 10:08:16 +0000 | |
| commit | ea9ab1d98c28316317d53e1c89daccf843ced2ce (patch) | |
| tree | 8c27578454fc2cfdbc4b2d76f9d5f8843de39245 | |
| parent | 47d9ba277e03fafef44d89f6787bfa101687d56e (diff) | |
| parent | f2a4eb5908e8bf9c23ecfc852404ddfb595954a7 (diff) | |
Merge "Deduplicate discrete events for different attribution tags." into sc-dev
| -rw-r--r-- | core/java/android/app/AppOpsManager.java | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index dd5e7f35dedb..1cb46b1b6350 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -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); |