Only track mic usage when call is alive

Ensure that a call is only tracked if the call is alive. Add a check for
microphone tracking to the onCallStateChanged method.

Test: Manual
Fixes: 168551860
Change-Id: I1d17345d59b70f9b3b222b74c61ef6267d73f77e
diff --git a/src/com/android/server/telecom/InCallController.java b/src/com/android/server/telecom/InCallController.java
index 251ec0c..72a4a39 100644
--- a/src/com/android/server/telecom/InCallController.java
+++ b/src/com/android/server/telecom/InCallController.java
@@ -1072,6 +1072,7 @@
 
     @Override
     public void onCallStateChanged(Call call, int oldState, int newState) {
+        maybeTrackMicrophoneUse(isMuted());
         updateCall(call);
     }
 
@@ -1894,7 +1895,7 @@
      */
     private void maybeTrackMicrophoneUse(boolean isMuted) {
         boolean wasTrackingManagedCall = mIsCallUsingMicrophone;
-        mIsCallUsingMicrophone = isTrackingManagedCall() && !isMuted;
+        mIsCallUsingMicrophone = isTrackingManagedAliveCall() && !isMuted;
         if (wasTrackingManagedCall != mIsCallUsingMicrophone) {
             if (mIsCallUsingMicrophone) {
                 mAppOpsManager.startOp(AppOpsManager.OP_PHONE_CALL_MICROPHONE, myUid(),
@@ -1908,11 +1909,12 @@
 
     /**
      * @return {@code true} if InCallController is tracking a managed call (i.e. not self managed
-     * and not external).
+     * and not external) that is active.
      */
-    private boolean isTrackingManagedCall() {
+    private boolean isTrackingManagedAliveCall() {
         return mCallIdMapper.getCalls().stream().anyMatch(c -> !c.isExternalCall()
-            && !c.isSelfManaged());
+            && !c.isSelfManaged() && c.isAlive() && c.getState() != CallState.ON_HOLD
+                && c.getState() != CallState.AUDIO_PROCESSING);
     }
 
     /**