Merge "Ensures only one result is logged per attention check"
diff --git a/services/core/java/com/android/server/attention/AttentionManagerService.java b/services/core/java/com/android/server/attention/AttentionManagerService.java
index 0440de6..42fbfec 100644
--- a/services/core/java/com/android/server/attention/AttentionManagerService.java
+++ b/services/core/java/com/android/server/attention/AttentionManagerService.java
@@ -260,12 +260,12 @@
         final IAttentionCallback iAttentionCallback = new IAttentionCallback.Stub() {
             @Override
             public void onSuccess(@AttentionSuccessCodes int result, long timestamp) {
-                // the callback might have been cancelled already
-                if (!userState.mCurrentAttentionCheck.mIsFulfilled) {
-                    callbackInternal.onSuccess(result, timestamp);
-                    userState.mCurrentAttentionCheck.mIsFulfilled = true;
+                if (userState.mCurrentAttentionCheck.mIsFulfilled) {
+                    return;
                 }
-
+                userState.mCurrentAttentionCheck.mIsFulfilled = true;
+                callbackInternal.onSuccess(result, timestamp);
+                logStats(result);
                 synchronized (mLock) {
                     if (userState.mAttentionCheckCacheBuffer == null) {
                         userState.mAttentionCheckCacheBuffer = new AttentionCheckCacheBuffer();
@@ -273,22 +273,22 @@
                     userState.mAttentionCheckCacheBuffer.add(
                             new AttentionCheckCache(SystemClock.uptimeMillis(), result, timestamp));
                 }
-                FrameworkStatsLog.write(
-                        FrameworkStatsLog.ATTENTION_MANAGER_SERVICE_RESULT_REPORTED,
-                        result);
             }
 
             @Override
             public void onFailure(@AttentionFailureCodes int error) {
-                // the callback might have been cancelled already
-                if (!userState.mCurrentAttentionCheck.mIsFulfilled) {
-                    callbackInternal.onFailure(error);
-                    userState.mCurrentAttentionCheck.mIsFulfilled = true;
+                if (userState.mCurrentAttentionCheck.mIsFulfilled) {
+                    return;
                 }
+                userState.mCurrentAttentionCheck.mIsFulfilled = true;
+                callbackInternal.onFailure(error);
+                logStats(error);
+            }
 
+            private void logStats(int result) {
                 FrameworkStatsLog.write(
                         FrameworkStatsLog.ATTENTION_MANAGER_SERVICE_RESULT_REPORTED,
-                        error);
+                        result);
             }
         };