Fix for http://b/issue?id=2178179 - revert to previous provider if settings change fails
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index 6c61a7b..154f0dc 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -313,6 +313,13 @@
* due to vm provider change.
*/
boolean mVMProviderSettingsForced = false;
+
+ /**
+ * Flag indicating that we are making changes to vm or fwd numbers
+ * due to vm provider change.
+ */
+ boolean mChangingVMorFwdDueToProviderChange = false;
+
/**
* Data about discovered voice mail settings providers.
* Is populated by querying which activities can handle ACTION_CONFIGURE_VOICEMAIL.
@@ -539,6 +546,7 @@
}
return;
}
+ mChangingVMorFwdDueToProviderChange = isVMProviderSettingsForced;
final String fwdNum = data.getStringExtra(FWD_NUMBER_EXTRA);
// TODO(iliat): It would be nice to load the current network setting for this and
@@ -809,19 +817,32 @@
}
if (success) {
if (DBG) log("change VM success!");
- showVMDialog(MSG_VM_OK);
+ handleVMAndFwdSetSuccess(MSG_VM_OK);
} else {
if (fwdFailure) {
log("change FW failed: " + exceptionMessage);
- showVMDialog(MSG_FW_SET_EXCEPTION);
+ handleVMOrFwdSetError(MSG_FW_SET_EXCEPTION);
} else {
log("change VM failed: " + exceptionMessage);
- showVMDialog(MSG_VM_EXCEPTION);
+ handleVMOrFwdSetError(MSG_VM_EXCEPTION);
}
}
updateVoiceNumberField();
}
+ private void handleVMOrFwdSetError(int msgId) {
+ if (mChangingVMorFwdDueToProviderChange) {
+ switchToPreviousVoicemailProvider();
+ }
+ mChangingVMorFwdDueToProviderChange = false;
+ showVMDialog(msgId);
+ }
+
+ private void handleVMAndFwdSetSuccess(int msgId) {
+ mChangingVMorFwdDueToProviderChange = false;
+ showVMDialog(msgId);
+ }
+
/*
* Methods used to sync UI state with that of the network
*/