Update airplane mode checkbox when toggled from system bar.
Bug: 3148095
Also fix an NPE crash I saw when exiting Settings immediately after toggling
the airplane mode.
Change-Id: I83eb2d90e203fd56b09269cf9fa8f74a4354834f
diff --git a/src/com/android/settings/AirplaneModeEnabler.java b/src/com/android/settings/AirplaneModeEnabler.java
index ccfe541..00c416f 100644
--- a/src/com/android/settings/AirplaneModeEnabler.java
+++ b/src/com/android/settings/AirplaneModeEnabler.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.content.Intent;
+import android.database.ContentObserver;
import android.os.Handler;
import android.os.Message;
import android.os.SystemProperties;
@@ -51,6 +52,13 @@
}
};
+ private ContentObserver mAirplaneModeObserver = new ContentObserver(new Handler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ onAirplaneModeChanged();
+ }
+ };
+
public AirplaneModeEnabler(Context context, CheckBoxPreference airplaneModeCheckBoxPreference) {
mContext = context;
@@ -68,13 +76,17 @@
mPhoneStateReceiver.registerIntent();
mCheckBoxPref.setOnPreferenceChangeListener(this);
+ mContext.getContentResolver().registerContentObserver(
+ Settings.System.getUriFor(Settings.System.AIRPLANE_MODE_ON), true,
+ mAirplaneModeObserver);
}
public void pause() {
mPhoneStateReceiver.unregisterIntent();
mCheckBoxPref.setOnPreferenceChangeListener(null);
+ mContext.getContentResolver().unregisterContentObserver(mAirplaneModeObserver);
}
-
+
public static boolean isAirplaneModeOn(Context context) {
return Settings.System.getInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) != 0;
@@ -84,7 +96,7 @@
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);
@@ -106,8 +118,8 @@
* - mobile does not send failure notification, fail on timeout.
*/
private void onAirplaneModeChanged() {
- ServiceState serviceState = mPhoneStateReceiver.getServiceState();
- boolean airplaneModeEnabled = serviceState.getState() == ServiceState.STATE_POWER_OFF;
+ boolean airplaneModeEnabled = isAirplaneModeOn(mContext);
+ mCheckBoxPref.setChecked(isAirplaneModeOn(mContext));
mCheckBoxPref.setSummary(airplaneModeEnabled ? null :
mContext.getString(R.string.airplane_mode_summary));
}
diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
index 8ddeef5..db20411 100644
--- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
+++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
@@ -111,8 +111,10 @@
" newProfileState " + newProfileState);
}
- int newState = LocalBluetoothProfileManager.getProfileManager(mLocalManager,
- profile).convertState(newProfileState);
+ final LocalBluetoothProfileManager pm =
+ LocalBluetoothProfileManager.getProfileManager(mLocalManager, profile);
+ if (pm == null) return;
+ int newState = pm.convertState(newProfileState);
if (newState == SettingsBtStatus.CONNECTION_STATUS_CONNECTED) {
if (!mProfiles.contains(profile)) {