Merge cherrypicks of ['googleplex-android-review.googlesource.com/32858585'] into 25Q2-release.
Change-Id: I4edab026a2e4b77e3413a41bfdd99d728c5e5a61
diff --git a/flags/telecom_callaudioroutestatemachine_flags.aconfig b/flags/telecom_callaudioroutestatemachine_flags.aconfig
index 76a7f74..c0edf7f 100644
--- a/flags/telecom_callaudioroutestatemachine_flags.aconfig
+++ b/flags/telecom_callaudioroutestatemachine_flags.aconfig
@@ -195,3 +195,14 @@
purpose: PURPOSE_BUGFIX
}
}
+
+# OWNER=pmadapurmath TARGET=25Q3
+flag {
+ name: "maybe_default_speaker_after_unhold"
+ namespace: "telecom"
+ description: "If the call audio route was on speaker and the call is held/unheld, ensure that we route back to speaker."
+ bug: "406898224"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/src/com/android/server/telecom/CallAudioRouteController.java b/src/com/android/server/telecom/CallAudioRouteController.java
index aa0976f..727b9ce 100644
--- a/src/com/android/server/telecom/CallAudioRouteController.java
+++ b/src/com/android/server/telecom/CallAudioRouteController.java
@@ -1399,11 +1399,14 @@
? mEarpieceWiredRoute
: mSpeakerDockRoute;
// Ensure that we default to speaker route if we're in a video call, but disregard it if
- // a wired headset is plugged in.
- if (skipEarpiece && defaultRoute != null
+ // a wired headset is plugged in. Also consider the case when we're holding/unholding a
+ // call. If the route was on speaker mode, ensure that we preserve the route selection.
+ boolean shouldDefaultSpeaker = mFeatureFlags.maybeDefaultSpeakerAfterUnhold()
+ && mWasOnSpeaker;
+ if ((skipEarpiece || shouldDefaultSpeaker) && defaultRoute != null
&& defaultRoute.getType() == AudioRoute.TYPE_EARPIECE) {
Log.i(this, "getPreferredAudioRouteFromDefault: Audio routing defaulting to "
- + "speaker route for video call.");
+ + "speaker route for (video) call.");
defaultRoute = mSpeakerDockRoute;
}
return defaultRoute;