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);
}
/**