Support to display message when operation is blocked due to FDN being enabled
The terminal disallows USSD, SMS, Voice Call and Supplementary services operations for numbers not in the Fixed Dialing Number (FDN) list when the FDN service is enabled. FDN_CHECK_FAILURE error is sent from the RIL and the message needs to be displayed to indicate the failure. Change-Id: I49bd63f69a3f0201125b17cd16db2e8fcf93ddc3
This commit is contained in:
committed by
Jean-Baptiste Queru
parent
06d0e59a43
commit
18573e9281
@@ -60,6 +60,10 @@
|
||||
<!-- Displayed when the user dialed an MMI code whose function
|
||||
could not be performed. This will be displayed in a toast. -->
|
||||
<string name="mmiError">Connection problem or invalid MMI code.</string>
|
||||
<!-- Displayed when the user dialed an MMI code whose function
|
||||
could not be performed because FDN is enabled. This will be displayed in a toast. -->
|
||||
<string name="mmiFdnError">Operation is restricted to fixed dialing numbers only.</string>
|
||||
|
||||
<!-- Displayed when a phone feature such as call barring was activated. -->
|
||||
<string name="serviceEnabled">Service was enabled.</string>
|
||||
<!-- Displayed in front of the list of a set of service classes
|
||||
|
||||
@@ -398,4 +398,6 @@ public final class SmsManager {
|
||||
static public final int RESULT_ERROR_NO_SERVICE = 4;
|
||||
/** Failed because we reached the sending queue limit. {@hide} */
|
||||
static public final int RESULT_ERROR_LIMIT_EXCEEDED = 5;
|
||||
/** Failed because FDN is enabled. {@hide} */
|
||||
static public final int RESULT_ERROR_FDN_CHECK_FAILURE = 6;
|
||||
}
|
||||
|
||||
@@ -37,6 +37,10 @@ public class CommandException extends RuntimeException {
|
||||
OP_NOT_ALLOWED_DURING_VOICE_CALL,
|
||||
OP_NOT_ALLOWED_BEFORE_REG_NW,
|
||||
SMS_FAIL_RETRY,
|
||||
SIM_ABSENT,
|
||||
SUBSCRIPTION_NOT_AVAILABLE,
|
||||
MODE_NOT_SUPPORTED,
|
||||
FDN_CHECK_FAILURE,
|
||||
}
|
||||
|
||||
public CommandException(Error e) {
|
||||
@@ -68,6 +72,14 @@ public class CommandException extends RuntimeException {
|
||||
return new CommandException(Error.OP_NOT_ALLOWED_BEFORE_REG_NW);
|
||||
case RILConstants.SMS_SEND_FAIL_RETRY:
|
||||
return new CommandException(Error.SMS_FAIL_RETRY);
|
||||
case RILConstants.SIM_ABSENT:
|
||||
return new CommandException(Error.SIM_ABSENT);
|
||||
case RILConstants.SUBSCRIPTION_NOT_AVAILABLE:
|
||||
return new CommandException(Error.SUBSCRIPTION_NOT_AVAILABLE);
|
||||
case RILConstants.MODE_NOT_SUPPORTED:
|
||||
return new CommandException(Error.MODE_NOT_SUPPORTED);
|
||||
case RILConstants.FDN_CHECK_FAILURE:
|
||||
return new CommandException(Error.FDN_CHECK_FAILURE);
|
||||
default:
|
||||
Log.e("GSM", "Unrecognized RIL errno " + ril_errno);
|
||||
return new CommandException(Error.INVALID_RESPONSE);
|
||||
|
||||
@@ -45,6 +45,11 @@ public interface RILConstants {
|
||||
int OP_NOT_ALLOWED_BEFORE_REG_NW = 9; /* request is not allowed before device registers to
|
||||
network */
|
||||
int SMS_SEND_FAIL_RETRY = 10; /* send sms fail and need retry */
|
||||
int SIM_ABSENT = 11; /* ICC card is absent */
|
||||
int SUBSCRIPTION_NOT_AVAILABLE = 12; /* fail to find CDMA subscription from specified
|
||||
location */
|
||||
int MODE_NOT_SUPPORTED = 13; /* HW does not support preferred network type */
|
||||
int FDN_CHECK_FAILURE = 14; /* send operation barred error when FDN is enabled */
|
||||
|
||||
/* NETWORK_MODE_* See ril.h RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE */
|
||||
int NETWORK_MODE_WCDMA_PREF = 0; /* GSM/WCDMA (WCDMA preferred) */
|
||||
|
||||
@@ -62,6 +62,7 @@ import static android.telephony.SmsManager.RESULT_ERROR_NO_SERVICE;
|
||||
import static android.telephony.SmsManager.RESULT_ERROR_NULL_PDU;
|
||||
import static android.telephony.SmsManager.RESULT_ERROR_RADIO_OFF;
|
||||
import static android.telephony.SmsManager.RESULT_ERROR_LIMIT_EXCEEDED;
|
||||
import static android.telephony.SmsManager.RESULT_ERROR_FDN_CHECK_FAILURE;
|
||||
|
||||
|
||||
public abstract class SMSDispatcher extends Handler {
|
||||
@@ -499,13 +500,20 @@ public abstract class SMSDispatcher extends Handler {
|
||||
Message retryMsg = obtainMessage(EVENT_SEND_RETRY, tracker);
|
||||
sendMessageDelayed(retryMsg, SEND_RETRY_DELAY);
|
||||
} else if (tracker.mSentIntent != null) {
|
||||
int error = RESULT_ERROR_GENERIC_FAILURE;
|
||||
|
||||
if (((CommandException)(ar.exception)).getCommandError()
|
||||
== CommandException.Error.FDN_CHECK_FAILURE) {
|
||||
error = RESULT_ERROR_FDN_CHECK_FAILURE;
|
||||
}
|
||||
// Done retrying; return an error to the app.
|
||||
try {
|
||||
Intent fillIn = new Intent();
|
||||
if (ar.result != null) {
|
||||
fillIn.putExtra("errorCode", ((SmsResponse)ar.result).errorCode);
|
||||
}
|
||||
tracker.mSentIntent.send(mContext, RESULT_ERROR_GENERIC_FAILURE, fillIn);
|
||||
tracker.mSentIntent.send(mContext, error, fillIn);
|
||||
|
||||
} catch (CanceledException ex) {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -832,8 +832,7 @@ public final class GsmMmiCode extends Handler implements MmiCode {
|
||||
|
||||
if (ar.exception != null) {
|
||||
state = State.FAILED;
|
||||
message = context.getText(
|
||||
com.android.internal.R.string.mmiError);
|
||||
message = getErrorMessage(ar);
|
||||
|
||||
phone.onMMIDone(this);
|
||||
}
|
||||
@@ -852,6 +851,19 @@ public final class GsmMmiCode extends Handler implements MmiCode {
|
||||
}
|
||||
//***** Private instance methods
|
||||
|
||||
private CharSequence getErrorMessage(AsyncResult ar) {
|
||||
|
||||
if (ar.exception instanceof CommandException) {
|
||||
CommandException.Error err = ((CommandException)(ar.exception)).getCommandError();
|
||||
if (err == CommandException.Error.FDN_CHECK_FAILURE) {
|
||||
Log.i(LOG_TAG, "FDN_CHECK_FAILURE");
|
||||
return context.getText(com.android.internal.R.string.mmiFdnError);
|
||||
}
|
||||
}
|
||||
|
||||
return context.getText(com.android.internal.R.string.mmiError);
|
||||
}
|
||||
|
||||
private CharSequence getScString() {
|
||||
if (sc != null) {
|
||||
if (isServiceCodeCallBarring(sc)) {
|
||||
@@ -904,6 +916,9 @@ public final class GsmMmiCode extends Handler implements MmiCode {
|
||||
sb.append("\n");
|
||||
sb.append(context.getText(
|
||||
com.android.internal.R.string.needPuk2));
|
||||
} else if (err == CommandException.Error.FDN_CHECK_FAILURE) {
|
||||
Log.i(LOG_TAG, "FDN_CHECK_FAILURE");
|
||||
sb.append(context.getText(com.android.internal.R.string.mmiFdnError));
|
||||
} else {
|
||||
sb.append(context.getText(
|
||||
com.android.internal.R.string.mmiError));
|
||||
@@ -953,7 +968,7 @@ public final class GsmMmiCode extends Handler implements MmiCode {
|
||||
|
||||
if (ar.exception != null) {
|
||||
state = State.FAILED;
|
||||
sb.append(context.getText(com.android.internal.R.string.mmiError));
|
||||
sb.append(getErrorMessage(ar));
|
||||
} else {
|
||||
int clirArgs[];
|
||||
|
||||
@@ -1123,7 +1138,7 @@ public final class GsmMmiCode extends Handler implements MmiCode {
|
||||
|
||||
if (ar.exception != null) {
|
||||
state = State.FAILED;
|
||||
sb.append(context.getText(com.android.internal.R.string.mmiError));
|
||||
sb.append(getErrorMessage(ar));
|
||||
} else {
|
||||
CallForwardInfo infos[];
|
||||
|
||||
@@ -1175,7 +1190,7 @@ public final class GsmMmiCode extends Handler implements MmiCode {
|
||||
|
||||
if (ar.exception != null) {
|
||||
state = State.FAILED;
|
||||
sb.append(context.getText(com.android.internal.R.string.mmiError));
|
||||
sb.append(getErrorMessage(ar));
|
||||
} else {
|
||||
int[] ints = (int[])ar.result;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user