summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHall Liu <hallliu@google.com>2017-08-18 14:20:26 -0700
committerHall Liu <hallliu@google.com>2017-08-18 21:46:21 +0000
commit5cfc86b2dc2f912077ba6d047630ac8f4b251c06 (patch)
treee4580114160dacac028a1d66868bfb5536e23d17
parentd7a47b9e1f9e73c7347ff6138457aaa1431e27fb (diff)
downloadandroid_packages_services_Telecomm-5cfc86b2dc2f912077ba6d047630ac8f4b251c06.tar.gz
android_packages_services_Telecomm-5cfc86b2dc2f912077ba6d047630ac8f4b251c06.tar.bz2
android_packages_services_Telecomm-5cfc86b2dc2f912077ba6d047630ac8f4b251c06.zip
Ensure that audio routes are properly logged
Make sure that the first audio route is logged in analytics. Change-Id: I04820ba37ccf160490ed3bd87db4c34769b4aa05 Fixes: 64584823 Test: unit
-rw-r--r--src/com/android/server/telecom/CallAudioRouteStateMachine.java34
-rw-r--r--tests/src/com/android/server/telecom/tests/AnalyticsTests.java38
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(