Merge "Fix error message shown when SIM PIN enable/disable fails"
am: f29392303a
Change-Id: I060d7e0e02b56d9fea5260ba1f2cf8a1ea746414
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d3d4e6d..34b23e7 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2720,6 +2720,10 @@
<string name="sim_change_succeeded">SIM PIN changed successfully</string>
<!-- SIM card lock settings screen, toast after not entering correct SIM PIN [CHAR LIMIT=40] -->
<string name="sim_lock_failed">Can\u2019t change SIM card lock state.\nPossibly incorrect PIN.</string>
+ <!-- SIM card lock settings screen, toast after disabling PIN failed from modem -->
+ <string name="sim_pin_disable_failed">Can\'t disable PIN.</string>
+ <!-- SIM card lock settings screen, toast after enabling PIN failed from modem -->
+ <string name="sim_pin_enable_failed">Can\'t enable PIN.</string>
<!-- SIM card lock settings screen, SIM PIN dialog button labels: [CHAR LIMIT=40] -->
<string name="sim_enter_ok">OK</string>
<!-- SIM card lock settings screen, SIM PIN dialog button labels: [CHAR LIMIT=40] -->
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index 7d493eb..2ff6931 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -44,6 +44,7 @@
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 @@
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 @@
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();