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