From d4968a02216a83e385f529c665bf5a3913db8dc1 Mon Sep 17 00:00:00 2001 From: Stanislav Zholnin Date: Sat, 18 Apr 2020 21:01:13 +0100 Subject: [PATCH] Allow listening for noted Ops if app is sampled for Stack trace collection. Bug: 136134050 Test: manual verification Change-Id: I86a70e7b0bbcb114bd28bf5ab90bbf1c625f333a --- core/java/android/app/AppOpsManager.java | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index 8e0d939487e3c..37f683ef435fb 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -233,12 +233,9 @@ public class AppOpsManager { } private void reportStackTraceIfNeeded(@NonNull SyncNotedAppOp op) { - if (sConfig.getSampledOpCode() == OP_NONE - && sConfig.getExpirationTimeSinceBootMillis() - >= SystemClock.elapsedRealtime()) { + if (!isCollectingStackTraces()) { return; } - MessageSamplingConfig config = sConfig; if (leftCircularDistance(strOpToOp(op.getOp()), config.getSampledOpCode(), _NUM_OP) <= config.getAcceptableLeftDistance() @@ -8181,7 +8178,22 @@ public class AppOpsManager { * @hide */ public static boolean isListeningForOpNoted() { - return sOnOpNotedCallback != null; + return sOnOpNotedCallback != null || isCollectingStackTraces(); + } + + /** + * @return {@code true} iff the process is currently sampled for stacktrace collection. + * + * @see #setOnOpNotedCallback + * + * @hide + */ + private static boolean isCollectingStackTraces() { + if (sConfig.getSampledOpCode() == OP_NONE && + sConfig.getExpirationTimeSinceBootMillis() >= SystemClock.elapsedRealtime()) { + return false; + } + return true; } /**