Keep airplane mode UI & system settings in sync
If mobile radio bring up/down fails, airplane mode UI & system settings
go out of sync and this prevents wifi from being brought up on every
reboot.
Bug: 2887841
Change-Id: Id0f1299e6b4e2c28b72c8fb8d853dad3fcaceaa7
diff --git a/src/com/android/settings/AirplaneModeEnabler.java b/src/com/android/settings/AirplaneModeEnabler.java
index ff4b27d..ccfe541 100644
--- a/src/com/android/settings/AirplaneModeEnabler.java
+++ b/src/com/android/settings/AirplaneModeEnabler.java
@@ -64,8 +64,6 @@
public void resume() {
- // This is the widget enabled state, not the preference toggled state
- mCheckBoxPref.setEnabled(true);
mCheckBoxPref.setChecked(isAirplaneModeOn(mContext));
mPhoneStateReceiver.registerIntent();
@@ -84,13 +82,14 @@
private void setAirplaneModeOn(boolean enabling) {
- mCheckBoxPref.setEnabled(false);
mCheckBoxPref.setSummary(enabling ? R.string.airplane_mode_turning_on
: R.string.airplane_mode_turning_off);
// Change the system setting
Settings.System.putInt(mContext.getContentResolver(), Settings.System.AIRPLANE_MODE_ON,
enabling ? 1 : 0);
+ // Update the UI to reflect system setting
+ mCheckBoxPref.setChecked(enabling);
// Post the intent
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
@@ -100,14 +99,17 @@
/**
* Called when we've received confirmation that the airplane mode was set.
+ * TODO: We update the checkbox summary when we get notified
+ * that mobile radio is powered up/down. We should not have dependency
+ * on one radio alone. We need to do the following:
+ * - handle the case of wifi/bluetooth failures
+ * - mobile does not send failure notification, fail on timeout.
*/
private void onAirplaneModeChanged() {
ServiceState serviceState = mPhoneStateReceiver.getServiceState();
boolean airplaneModeEnabled = serviceState.getState() == ServiceState.STATE_POWER_OFF;
- mCheckBoxPref.setChecked(airplaneModeEnabled);
mCheckBoxPref.setSummary(airplaneModeEnabled ? null :
mContext.getString(R.string.airplane_mode_summary));
- mCheckBoxPref.setEnabled(true);
}
/**
@@ -128,7 +130,7 @@
// update database based on the current checkbox state
setAirplaneModeOn(isAirplaneModeOn);
} else {
- // update checkbox state based on database value
+ // update summary
onAirplaneModeChanged();
}
}