diff --git a/res/values/strings.xml b/res/values/strings.xml
index d3d4e6d9426..34b23e79c12 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2720,6 +2720,10 @@
SIM PIN changed successfully
Can\u2019t change SIM card lock state.\nPossibly incorrect PIN.
+
+ Can\'t disable PIN.
+
+ Can\'t enable PIN.
OK
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index 7d493ebe407..2ff693101e4 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -44,6 +44,7 @@ import android.widget.TabHost.TabSpec;
import android.widget.TabWidget;
import android.widget.Toast;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.TelephonyIntents;
@@ -121,7 +122,7 @@ public class IccLockSettings extends SettingsPreferenceFragment
AsyncResult ar = (AsyncResult) msg.obj;
switch (msg.what) {
case MSG_ENABLE_ICC_PIN_COMPLETE:
- iccLockChanged(ar.exception == null, msg.arg1);
+ iccLockChanged(ar.exception == null, msg.arg1, ar.exception);
break;
case MSG_CHANGE_ICC_PIN_COMPLETE:
iccPinChanged(ar.exception == null, msg.arg1);
@@ -451,12 +452,25 @@ public class IccLockSettings extends SettingsPreferenceFragment
mPinToggle.setEnabled(false);
}
- private void iccLockChanged(boolean success, int attemptsRemaining) {
+ private void iccLockChanged(boolean success, int attemptsRemaining, Throwable exception) {
if (success) {
mPinToggle.setChecked(mToState);
} else {
- Toast.makeText(getContext(), getPinPasswordErrorMessage(attemptsRemaining),
- Toast.LENGTH_LONG).show();
+ if (exception instanceof CommandException) {
+ CommandException.Error err = ((CommandException)(exception)).getCommandError();
+ if (err == CommandException.Error.PASSWORD_INCORRECT) {
+ Toast.makeText(getContext(), getPinPasswordErrorMessage(attemptsRemaining),
+ Toast.LENGTH_LONG).show();
+ } else {
+ if (mToState) {
+ Toast.makeText(getContext(), mRes.getString
+ (R.string.sim_pin_enable_failed), Toast.LENGTH_LONG).show();
+ } else {
+ Toast.makeText(getContext(), mRes.getString
+ (R.string.sim_pin_disable_failed), Toast.LENGTH_LONG).show();
+ }
+ }
+ }
}
mPinToggle.setEnabled(true);
resetDialogState();