Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 25b04009 authored by Hall Liu's avatar Hall Liu Committed by android-build-merger
Browse files

Ensure that audio routes are properly logged am: 37f18d5d am: f994af6c

am: 7235e29f

Change-Id: I92a38e76b2c6a7f2f729de7ed65105e91a6543bc
parents be66c700 7235e29f
Loading
Loading
Loading
Loading
+28 −6
Original line number Diff line number Diff line
@@ -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;
@@ -119,7 +120,8 @@ public class CallAudioRouteStateMachine extends StateMachine {
    public static final int NO_INCLUDE_BLUETOOTH_IN_BASELINE = 0;
    public static final int INCLUDE_BLUETOOTH_IN_BASELINE = 1;

    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);
@@ -190,6 +192,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
@@ -256,6 +262,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 {
@@ -393,6 +400,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) {
@@ -571,6 +583,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) {
@@ -851,6 +868,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) {
@@ -1037,6 +1059,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) {
@@ -1344,11 +1371,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);
+38 −0
Original line number Diff line number Diff line
@@ -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;
@@ -308,6 +314,38 @@ public class AnalyticsTests extends TelecomSystemTest {
                ParcelableCallAnalytics.AnalyticsEvent.FILTERING_INITIATED));
    }

    @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();