diff options
-rw-r--r-- | src/com/android/server/telecom/CallAudioRouteStateMachine.java | 34 | ||||
-rw-r--r-- | tests/src/com/android/server/telecom/tests/AnalyticsTests.java | 38 |
2 files changed, 66 insertions, 6 deletions
diff --git a/src/com/android/server/telecom/CallAudioRouteStateMachine.java b/src/com/android/server/telecom/CallAudioRouteStateMachine.java index 8ab0bf8d..2e98ac97 100644 --- a/src/com/android/server/telecom/CallAudioRouteStateMachine.java +++ b/src/com/android/server/telecom/CallAudioRouteStateMachine.java @@ -32,6 +32,7 @@ import android.telecom.Log; import android.telecom.Logging.Session; import android.util.SparseArray; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IState; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.State; @@ -115,7 +116,8 @@ public class CallAudioRouteStateMachine extends StateMachine { public static final int ACTIVE_FOCUS = 2; public static final int RINGING_FOCUS = 3; - private static final SparseArray<String> AUDIO_ROUTE_TO_LOG_EVENT = new SparseArray<String>() {{ + @VisibleForTesting + public static final SparseArray<String> AUDIO_ROUTE_TO_LOG_EVENT = new SparseArray<String>() {{ put(CallAudioState.ROUTE_BLUETOOTH, LogUtils.Events.AUDIO_ROUTE_BT); put(CallAudioState.ROUTE_EARPIECE, LogUtils.Events.AUDIO_ROUTE_EARPIECE); put(CallAudioState.ROUTE_SPEAKER, LogUtils.Events.AUDIO_ROUTE_SPEAKER); @@ -186,6 +188,10 @@ public class CallAudioRouteStateMachine extends StateMachine { super.enter(); Log.addEvent(mCallsManager.getForegroundCall(), LogUtils.Events.AUDIO_ROUTE, "Entering state " + getName()); + if (isActive()) { + Log.addEvent(mCallsManager.getForegroundCall(), + AUDIO_ROUTE_TO_LOG_EVENT.get(getRouteCode(), LogUtils.Events.AUDIO_ROUTE)); + } } @Override @@ -250,6 +256,7 @@ public class CallAudioRouteStateMachine extends StateMachine { // Behavior will depend on whether the state is an active one or a quiescent one. abstract public void updateSystemAudioState(); abstract public boolean isActive(); + abstract public int getRouteCode(); } class ActiveEarpieceRoute extends EarpieceRoute { @@ -388,6 +395,11 @@ public class CallAudioRouteStateMachine extends StateMachine { abstract class EarpieceRoute extends AudioState { @Override + public int getRouteCode() { + return CallAudioState.ROUTE_EARPIECE; + } + + @Override public boolean processMessage(Message msg) { if (super.processMessage(msg) == HANDLED) { return HANDLED; @@ -566,6 +578,11 @@ public class CallAudioRouteStateMachine extends StateMachine { abstract class HeadsetRoute extends AudioState { @Override + public int getRouteCode() { + return CallAudioState.ROUTE_WIRED_HEADSET; + } + + @Override public boolean processMessage(Message msg) { if (super.processMessage(msg) == HANDLED) { return HANDLED; @@ -846,6 +863,11 @@ public class CallAudioRouteStateMachine extends StateMachine { abstract class BluetoothRoute extends AudioState { @Override + public int getRouteCode() { + return CallAudioState.ROUTE_BLUETOOTH; + } + + @Override public boolean processMessage(Message msg) { if (super.processMessage(msg) == HANDLED) { return HANDLED; @@ -1032,6 +1054,11 @@ public class CallAudioRouteStateMachine extends StateMachine { abstract class SpeakerRoute extends AudioState { @Override + public int getRouteCode() { + return CallAudioState.ROUTE_SPEAKER; + } + + @Override public boolean processMessage(Message msg) { if (super.processMessage(msg) == HANDLED) { return HANDLED; @@ -1338,11 +1365,6 @@ public class CallAudioRouteStateMachine extends StateMachine { Log.i(this, "setSystemAudioState: changing from %s to %s", mLastKnownCallAudioState, newCallAudioState); if (force || !newCallAudioState.equals(mLastKnownCallAudioState)) { - if (newCallAudioState.getRoute() != mLastKnownCallAudioState.getRoute()) { - Log.addEvent(mCallsManager.getForegroundCall(), - AUDIO_ROUTE_TO_LOG_EVENT.get(newCallAudioState.getRoute(), - LogUtils.Events.AUDIO_ROUTE)); - } mCallsManager.onCallAudioStateChanged(mLastKnownCallAudioState, newCallAudioState); updateAudioForForegroundCall(newCallAudioState); diff --git a/tests/src/com/android/server/telecom/tests/AnalyticsTests.java b/tests/src/com/android/server/telecom/tests/AnalyticsTests.java index 1c786e56..e70a63ad 100644 --- a/tests/src/com/android/server/telecom/tests/AnalyticsTests.java +++ b/tests/src/com/android/server/telecom/tests/AnalyticsTests.java @@ -18,10 +18,14 @@ package com.android.server.telecom.tests; import android.content.Context; import android.os.Build; +import android.os.Handler; +import android.os.Looper; +import android.telecom.CallAudioState; import android.telecom.Connection; import android.telecom.DisconnectCause; import android.telecom.InCallService; import android.telecom.Log; +import android.telecom.Logging.EventManager; import android.telecom.ParcelableCallAnalytics; import android.telecom.TelecomAnalytics; import android.telecom.TelecomManager; @@ -34,6 +38,7 @@ import android.util.Base64; import com.android.internal.util.IndentingPrintWriter; import com.android.server.telecom.Analytics; +import com.android.server.telecom.CallAudioRouteStateMachine; import com.android.server.telecom.LogUtils; import com.android.server.telecom.nano.TelecomLogClass; @@ -41,6 +46,7 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.util.Arrays; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -309,6 +315,38 @@ public class AnalyticsTests extends TelecomSystemTest { } @MediumTest + public void testAnalyticsAudioRoutes() throws Exception { + Analytics.reset(); + IdPair testCall = startAndMakeActiveIncomingCall( + "650-555-1212", + mPhoneAccountA0.getAccountHandle(), + mConnectionServiceFixtureA); + List<Integer> audioRoutes = new LinkedList<>(); + + waitForHandlerAction( + mTelecomSystem.getCallsManager().getCallAudioManager() + .getCallAudioRouteStateMachine().getHandler(), + TEST_TIMEOUT); + audioRoutes.add(mInCallServiceFixtureX.mCallAudioState.getRoute()); + mInCallServiceFixtureX.getInCallAdapter().setAudioRoute(CallAudioState.ROUTE_SPEAKER); + waitForHandlerAction( + mTelecomSystem.getCallsManager().getCallAudioManager() + .getCallAudioRouteStateMachine().getHandler(), + TEST_TIMEOUT); + audioRoutes.add(CallAudioState.ROUTE_SPEAKER); + + Map<String, Analytics.CallInfoImpl> analyticsMap = Analytics.cloneData(); + assertTrue(analyticsMap.containsKey(testCall.mCallId)); + + Analytics.CallInfoImpl callAnalytics = analyticsMap.get(testCall.mCallId); + List<EventManager.Event> events = callAnalytics.callEvents.getEvents(); + for (int route : audioRoutes) { + String logEvent = CallAudioRouteStateMachine.AUDIO_ROUTE_TO_LOG_EVENT.get(route); + assertTrue(events.stream().anyMatch(event -> event.eventId.equals(logEvent))); + } + } + + @MediumTest public void testAnalyticsConnectionProperties() throws Exception { Analytics.reset(); IdPair testCall = startAndMakeActiveIncomingCall( |