Add feature to extend DisconnectCause to play busy tone
Feature to play busy tone according to DisconnectCause array defined in
"KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY".
Bug: 116189822
Test: manual - Checked that busy tone is played according to
"KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY".
Change-Id: I7d0346b535dc9dc16c5c93c3793f96948069e9d3
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index cf3f913..94e8c4a 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -18,10 +18,14 @@
import android.content.Context;
import android.media.ToneGenerator;
+import android.os.PersistableBundle;
import android.telecom.DisconnectCause;
+import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import com.android.internal.telephony.CallFailCause;
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneFactory;
import com.android.phone.ImsUtil;
import com.android.phone.PhoneGlobals;
import com.android.phone.common.R;
@@ -102,7 +106,7 @@
telephonyPerciseDisconnectCause),
toTelecomDisconnectCauseDescription(context, telephonyDisconnectCause, phoneId),
toTelecomDisconnectReason(context,telephonyDisconnectCause, reason, phoneId),
- toTelecomDisconnectCauseTone(telephonyDisconnectCause));
+ toTelecomDisconnectCauseTone(telephonyDisconnectCause, phoneId));
}
/**
@@ -793,11 +797,22 @@
/**
* Returns the tone to play for the disconnect cause, or UNKNOWN if none should be played.
*/
- private static int toTelecomDisconnectCauseTone(int telephonyDisconnectCause) {
- switch (telephonyDisconnectCause) {
- case android.telephony.DisconnectCause.BUSY:
+ private static int toTelecomDisconnectCauseTone(int telephonyDisconnectCause, int phoneId) {
+ Phone phone = PhoneFactory.getPhone(phoneId);
+ PersistableBundle config;
+ if (phone != null) {
+ config = PhoneGlobals.getInstance().getCarrierConfigForSubId(phone.getSubId());
+ } else {
+ config = PhoneGlobals.getInstance().getCarrierConfig();
+ }
+ int[] busyToneArray = config.getIntArray(
+ CarrierConfigManager.KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY);
+ for (int busyTone : busyToneArray) {
+ if (busyTone == telephonyDisconnectCause) {
return ToneGenerator.TONE_SUP_BUSY;
-
+ }
+ }
+ switch (telephonyDisconnectCause) {
case android.telephony.DisconnectCause.CONGESTION:
return ToneGenerator.TONE_SUP_CONGESTION;