Snap for 12404440 from 0f6e00fa4f9070e8cb81856c37a83990a4d0dcbe to 24Q4-release
Change-Id: I0866f9fe8b333f6bb4d2e85a7e76791dcecff512
diff --git a/src/com/android/server/telecom/CallAudioRouteController.java b/src/com/android/server/telecom/CallAudioRouteController.java
index ca9fe5b..e27535a 100644
--- a/src/com/android/server/telecom/CallAudioRouteController.java
+++ b/src/com/android/server/telecom/CallAudioRouteController.java
@@ -350,7 +350,8 @@
mActiveBluetoothDevice = null;
mTypeRoutes = new ArrayMap<>();
mStreamingRoutes = new HashSet<>();
- mPendingAudioRoute = new PendingAudioRoute(this, mAudioManager, mBluetoothRouteManager);
+ mPendingAudioRoute = new PendingAudioRoute(this, mAudioManager, mBluetoothRouteManager,
+ mFeatureFlags);
mStreamingRoute = new AudioRoute(AudioRoute.TYPE_STREAMING, null, null);
mStreamingRoutes.add(mStreamingRoute);
@@ -981,7 +982,7 @@
mPendingAudioRoute.clearPendingMessages();
onCurrentRouteChanged();
if (mFeatureFlags.telecomMetricsSupport()) {
- mMetricsController.getAudioRouteStats().onRouteExit(mPendingAudioRoute);
+ mMetricsController.getAudioRouteStats().onRouteExit(mPendingAudioRoute, true);
}
}
}
@@ -1467,4 +1468,10 @@
}
mIsActive = active;
}
+
+ void fallBack(String btAddressToExclude) {
+ mMetricsController.getAudioRouteStats().onRouteExit(mPendingAudioRoute, false);
+ sendMessageWithSessionInfo(SWITCH_BASELINE_ROUTE, INCLUDE_BLUETOOTH_IN_BASELINE,
+ btAddressToExclude);
+ }
}
diff --git a/src/com/android/server/telecom/PendingAudioRoute.java b/src/com/android/server/telecom/PendingAudioRoute.java
index a544258..ffde964 100644
--- a/src/com/android/server/telecom/PendingAudioRoute.java
+++ b/src/com/android/server/telecom/PendingAudioRoute.java
@@ -27,6 +27,7 @@
import android.util.Pair;
import com.android.server.telecom.bluetooth.BluetoothRouteManager;
+import com.android.server.telecom.flags.FeatureFlags;
import java.util.Set;
@@ -41,6 +42,7 @@
private CallAudioRouteController mCallAudioRouteController;
private AudioManager mAudioManager;
private BluetoothRouteManager mBluetoothRouteManager;
+ private FeatureFlags mFeatureFlags;
/**
* The {@link AudioRoute} that this pending audio switching started with
*/
@@ -52,17 +54,17 @@
private AudioRoute mDestRoute;
private Set<Pair<Integer, String>> mPendingMessages;
private boolean mActive;
- private boolean mIsFailed;
/**
* The device that has been set for communication by Telecom
*/
private @AudioRoute.AudioRouteType int mCommunicationDeviceType = AudioRoute.TYPE_INVALID;
PendingAudioRoute(CallAudioRouteController controller, AudioManager audioManager,
- BluetoothRouteManager bluetoothRouteManager) {
+ BluetoothRouteManager bluetoothRouteManager, FeatureFlags featureFlags) {
mCallAudioRouteController = controller;
mAudioManager = audioManager;
mBluetoothRouteManager = bluetoothRouteManager;
+ mFeatureFlags = featureFlags;
mPendingMessages = new ArraySet<>();
mActive = false;
mCommunicationDeviceType = AudioRoute.TYPE_INVALID;
@@ -96,10 +98,13 @@
public void onMessageReceived(Pair<Integer, String> message, String btAddressToExclude) {
Log.i(this, "onMessageReceived: message - %s", message);
if (message.first == PENDING_ROUTE_FAILED) {
- mIsFailed = true;
// Fallback to base route
- mCallAudioRouteController.sendMessageWithSessionInfo(
- SWITCH_BASELINE_ROUTE, INCLUDE_BLUETOOTH_IN_BASELINE, btAddressToExclude);
+ if (mFeatureFlags.telecomMetricsSupport()) {
+ mCallAudioRouteController.fallBack(btAddressToExclude);
+ } else {
+ mCallAudioRouteController.sendMessageWithSessionInfo(
+ SWITCH_BASELINE_ROUTE, INCLUDE_BLUETOOTH_IN_BASELINE, btAddressToExclude);
+ }
return;
}
@@ -141,8 +146,4 @@
public void overrideDestRoute(AudioRoute route) {
mDestRoute = route;
}
-
- public boolean isFailed() {
- return mIsFailed;
- }
}
diff --git a/src/com/android/server/telecom/metrics/AudioRouteStats.java b/src/com/android/server/telecom/metrics/AudioRouteStats.java
index 8755402..21624f1 100644
--- a/src/com/android/server/telecom/metrics/AudioRouteStats.java
+++ b/src/com/android/server/telecom/metrics/AudioRouteStats.java
@@ -180,10 +180,9 @@
});
}
- public void onRouteExit(PendingAudioRoute pendingRoute) {
+ public void onRouteExit(PendingAudioRoute pendingRoute, boolean isSuccess) {
// Check the dest type on the route exiting as it may be different as the enter
int destType = convertAudioType(pendingRoute.getDestRoute(), false);
- boolean isSuccess = !pendingRoute.isFailed();
long curTime = SystemClock.elapsedRealtime();
post(() -> {
if (mIsOngoing) {
diff --git a/tests/src/com/android/server/telecom/tests/TelecomPulledAtomTest.java b/tests/src/com/android/server/telecom/tests/TelecomPulledAtomTest.java
index d188054..bc8aeac 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomPulledAtomTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomPulledAtomTest.java
@@ -122,7 +122,6 @@
mTempFile = mTempFolder.newFile(FILE_NAME_TEST_ATOM);
doReturn(mTempFile).when(mSpyContext).getFileStreamPath(anyString());
doReturn(mFileOutputStream).when(mSpyContext).openFileOutput(anyString(), anyInt());
- doReturn(false).when(mMockPendingAudioRoute).isFailed();
doReturn(mMockSourceRoute).when(mMockPendingAudioRoute).getOrigRoute();
doReturn(mMockDestRoute).when(mMockPendingAudioRoute).getDestRoute();
doReturn(TYPE_EARPIECE).when(mMockSourceRoute).getType();
@@ -345,7 +344,7 @@
audioRouteStats.onRouteEnter(mMockPendingAudioRoute);
waitForHandlerActionDelayed(audioRouteStats, TEST_TIMEOUT, latency);
- audioRouteStats.onRouteExit(mMockPendingAudioRoute);
+ audioRouteStats.onRouteExit(mMockPendingAudioRoute, true);
waitForHandlerAction(audioRouteStats, 100);
// Verify that the stats should not be saved before the revert threshold is expired
@@ -375,7 +374,7 @@
audioRouteStats.onRouteEnter(mMockPendingAudioRoute);
waitForHandlerActionDelayed(audioRouteStats, TEST_TIMEOUT, latency);
- audioRouteStats.onRouteExit(mMockPendingAudioRoute);
+ audioRouteStats.onRouteExit(mMockPendingAudioRoute, true);
waitForHandlerAction(audioRouteStats, delay);
// Verify that the stats should not be saved before the revert threshold is expired
@@ -411,7 +410,7 @@
audioRouteStats.onRouteEnter(mMockPendingAudioRoute);
waitForHandlerActionDelayed(audioRouteStats, TEST_TIMEOUT, latency);
- audioRouteStats.onRouteExit(mMockPendingAudioRoute);
+ audioRouteStats.onRouteExit(mMockPendingAudioRoute, true);
waitForHandlerAction(audioRouteStats, delay);
// Verify that the stats should not be saved before the revert threshold is expired
@@ -449,7 +448,7 @@
audioRouteStats.onRouteEnter(mMockPendingAudioRoute);
waitForHandlerActionDelayed(audioRouteStats, TEST_TIMEOUT, latency);
- audioRouteStats.onRouteExit(mMockPendingAudioRoute);
+ audioRouteStats.onRouteExit(mMockPendingAudioRoute, true);
waitForHandlerAction(audioRouteStats, delay);
// Verify that the stats should not be saved before the revert threshold is expired
@@ -505,7 +504,7 @@
audioRouteStats.onRouteEnter(mMockPendingAudioRoute);
waitForHandlerActionDelayed(audioRouteStats, TEST_TIMEOUT, latency);
- audioRouteStats.onRouteExit(mMockPendingAudioRoute);
+ audioRouteStats.onRouteExit(mMockPendingAudioRoute, true);
waitForHandlerAction(audioRouteStats, 100);
doReturn(mMockDestRoute).when(mMockPendingAudioRoute).getOrigRoute();