summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Stanislav Zholnin <zholnin@google.com> 2021-04-16 10:08:16 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-04-16 10:08:16 +0000
commitea9ab1d98c28316317d53e1c89daccf843ced2ce (patch)
tree8c27578454fc2cfdbc4b2d76f9d5f8843de39245
parent47d9ba277e03fafef44d89f6787bfa101687d56e (diff)
parentf2a4eb5908e8bf9c23ecfc852404ddfb595954a7 (diff)
Merge "Deduplicate discrete events for different attribution tags." into sc-dev
-rw-r--r--core/java/android/app/AppOpsManager.java35
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);