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:
Naveen Kalla
2010-03-29 11:39:01 -07:00
committed by Jean-Baptiste Queru
parent 06d0e59a43
commit 18573e9281
6 changed files with 52 additions and 6 deletions

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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) */

View File

@@ -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) {}
}
}

View File

@@ -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;