Merge "Add reason code used to tell dialer when call failed due to WFC being off." into nyc-mr2-dev
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index 6eb4a4e..05e5afa 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -27,11 +27,10 @@
public class DisconnectCauseUtil {
/**
- * Converts from a disconnect code in {@link android.telephony.DisconnectCause} into a more generic
- * {@link android.telecom.DisconnectCause}.object, possibly populated with a localized message
- * and tone.
+ * Converts from a disconnect code in {@link android.telephony.DisconnectCause} into a more
+ * generic {@link android.telecom.DisconnectCause} object, possibly populated with a localized
+ * message and tone.
*
- * @param context The context.
* @param telephonyDisconnectCause The code for the reason for the disconnect.
*/
public static DisconnectCause toTelecomDisconnectCause(int telephonyDisconnectCause) {
@@ -39,11 +38,10 @@
}
/**
- * Converts from a disconnect code in {@link android.telephony.DisconnectCause} into a more generic
- * {@link android.telecom.DisconnectCause}.object, possibly populated with a localized message
- * and tone.
+ * Converts from a disconnect code in {@link android.telephony.DisconnectCause} into a more
+ * generic {@link android.telecom.DisconnectCause}.object, possibly populated with a localized
+ * message and tone.
*
- * @param context The context.
* @param telephonyDisconnectCause The code for the reason for the disconnect.
* @param reason Description of the reason for the disconnect, not intended for the user to see..
*/
@@ -54,7 +52,7 @@
toTelecomDisconnectCauseCode(telephonyDisconnectCause),
toTelecomDisconnectCauseLabel(context, telephonyDisconnectCause),
toTelecomDisconnectCauseDescription(context, telephonyDisconnectCause),
- toTelecomDisconnectReason(telephonyDisconnectCause, reason),
+ toTelecomDisconnectReason(context,telephonyDisconnectCause, reason),
toTelecomDisconnectCauseTone(telephonyDisconnectCause));
}
@@ -387,7 +385,36 @@
return resourceId == null ? "" : context.getResources().getString(resourceId);
}
- private static String toTelecomDisconnectReason(int telephonyDisconnectCause, String reason) {
+ /**
+ * Maps the telephony {@link android.telephony.DisconnectCause} into a reason string which is
+ * returned in the Telecom {@link DisconnectCause#getReason()}.
+ *
+ * @param context The current context.
+ * @param telephonyDisconnectCause The {@link android.telephony.DisconnectCause} code.
+ * @param reason A reason provided by the caller; only used if a more specific reason cannot
+ * be determined here.
+ * @return The disconnect reason.
+ */
+ private static String toTelecomDisconnectReason(Context context, int telephonyDisconnectCause,
+ String reason) {
+
+ if (context == null) {
+ return "";
+ }
+
+ switch (telephonyDisconnectCause) {
+ case android.telephony.DisconnectCause.POWER_OFF:
+ // Airplane mode (radio off)
+ // intentional fall-through
+ case android.telephony.DisconnectCause.OUT_OF_SERVICE:
+ // No network connection.
+ if (ImsUtil.shouldPromoteWfc(context)) {
+ return android.telecom.DisconnectCause.REASON_WIFI_ON_BUT_WFC_OFF;
+ }
+ break;
+ }
+
+ // If no specific code-mapping found, then fall back to using the reason.
String causeAsString = android.telephony.DisconnectCause.toString(telephonyDisconnectCause);
if (reason == null) {
return causeAsString;