Call waiting add the error reponse for FDN_CHECK_FAILURE
The getCallWaitingStatus and setCallWaitingStatus system api did not
have FDN_CHECK_FAILURE. Therefore, the call waiting can't get the
precise error response while FDN is enabled.
Adding the CALL_WAITING_STATUS_FDN_CHECK_FAILURE for this case.
Bug: 189402480
Test: pass cts' TelephonyManagerTest#testGetCallWaitingStatus
pass cts' TelephonyManagerTest#testSetCallWaitingStatus
Change-Id: I93e614e239cb754db720ed8c6bd6883ecc7dfc76
diff --git a/src/com/android/phone/CallWaitingSwitchPreference.java b/src/com/android/phone/CallWaitingSwitchPreference.java
index 01dd3b2..1f92845 100644
--- a/src/com/android/phone/CallWaitingSwitchPreference.java
+++ b/src/com/android/phone/CallWaitingSwitchPreference.java
@@ -1,6 +1,7 @@
package com.android.phone;
import static com.android.phone.TimeConsumingPreferenceActivity.EXCEPTION_ERROR;
+import static com.android.phone.TimeConsumingPreferenceActivity.FDN_CHECK_FAILURE;
import static com.android.phone.TimeConsumingPreferenceActivity.RESPONSE_ERROR;
import android.content.Context;
@@ -101,17 +102,27 @@
}
}
- if (mIsDuringUpdateProcess && (
- mUpdateStatus == TelephonyManager.CALL_WAITING_STATUS_NOT_SUPPORTED
- || mUpdateStatus
- == TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR)) {
- Log.d(LOG_TAG, "handleSetCallWaitingResponse: Exception");
- if (mTcpListener != null) {
- mTcpListener.onError(CallWaitingSwitchPreference.this, EXCEPTION_ERROR);
+ if (mQueryStatus != TelephonyManager.CALL_WAITING_STATUS_ENABLED
+ && mQueryStatus != TelephonyManager.CALL_WAITING_STATUS_DISABLED
+ && mQueryStatus != TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR) {
+ Log.d(LOG_TAG, "handleGetCallWaitingResponse: Exception:" + mQueryStatus);
+ int error = EXCEPTION_ERROR;
+ switch (mQueryStatus) {
+ case TelephonyManager.CALL_WAITING_STATUS_FDN_CHECK_FAILURE:
+ error = FDN_CHECK_FAILURE;
+ break;
+ default:
+ error = EXCEPTION_ERROR;
+ break;
}
- } else if (mQueryStatus == TelephonyManager.CALL_WAITING_STATUS_NOT_SUPPORTED
- || mQueryStatus == TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR) {
- Log.d(LOG_TAG, "handleGetCallWaitingResponse: Exception");
+ if (mTcpListener != null) {
+ mTcpListener.onError(CallWaitingSwitchPreference.this, error);
+ }
+ } else if (mQueryStatus == TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR
+ || (mIsDuringUpdateProcess && (
+ mUpdateStatus != TelephonyManager.CALL_WAITING_STATUS_ENABLED
+ && mUpdateStatus != TelephonyManager.CALL_WAITING_STATUS_DISABLED))) {
+ Log.d(LOG_TAG, "handleSetCallWaitingResponse: Exception");
if (mTcpListener != null) {
mTcpListener.onError(CallWaitingSwitchPreference.this, RESPONSE_ERROR);
}
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 77bcd0c..c988cbf 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1259,7 +1259,7 @@
ar = (AsyncResult) msg.obj;
request = (MainThreadRequest) ar.userObj;
Consumer<Integer> callback = (Consumer<Integer>) request.argument;
- int callForwardingStatus = TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR;
+ int callWaitingStatus = TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR;
if (ar.exception == null && ar.result != null) {
int[] callForwardResults = (int[]) ar.result;
// Service Class is a bit mask per 3gpp 27.007.
@@ -1267,11 +1267,11 @@
if (callForwardResults.length > 1
&& ((callForwardResults[1]
& CommandsInterface.SERVICE_CLASS_VOICE) > 0)) {
- callForwardingStatus = callForwardResults[0] == 0
+ callWaitingStatus = callForwardResults[0] == 0
? TelephonyManager.CALL_WAITING_STATUS_DISABLED
: TelephonyManager.CALL_WAITING_STATUS_ENABLED;
} else {
- callForwardingStatus = TelephonyManager.CALL_WAITING_STATUS_DISABLED;
+ callWaitingStatus = TelephonyManager.CALL_WAITING_STATUS_DISABLED;
}
} else {
if (ar.result == null) {
@@ -1284,12 +1284,15 @@
CommandException.Error error =
((CommandException) (ar.exception)).getCommandError();
if (error == CommandException.Error.REQUEST_NOT_SUPPORTED) {
- callForwardingStatus =
+ callWaitingStatus =
TelephonyManager.CALL_WAITING_STATUS_NOT_SUPPORTED;
+ } else if (error == CommandException.Error.FDN_CHECK_FAILURE) {
+ callWaitingStatus =
+ TelephonyManager.CALL_WAITING_STATUS_FDN_CHECK_FAILURE;
}
}
}
- callback.accept(callForwardingStatus);
+ callback.accept(callWaitingStatus);
break;
}
@@ -1314,6 +1317,9 @@
((CommandException) (ar.exception)).getCommandError();
if (error == CommandException.Error.REQUEST_NOT_SUPPORTED) {
callback.accept(TelephonyManager.CALL_WAITING_STATUS_NOT_SUPPORTED);
+ } else if (error == CommandException.Error.FDN_CHECK_FAILURE) {
+ callback.accept(
+ TelephonyManager.CALL_WAITING_STATUS_FDN_CHECK_FAILURE);
} else {
callback.accept(TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR);
}