From b98c00e710710d3aa96d5c950b51a60cfa48b51d Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Wed, 26 Jan 2011 09:56:44 -0800 Subject: [PATCH] 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 --- src/com/android/settings/AirplaneModeEnabler.java | 20 ++++++++++++++++---- .../settings/bluetooth/CachedBluetoothDevice.java | 6 ++++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/AirplaneModeEnabler.java b/src/com/android/settings/AirplaneModeEnabler.java index ccfe541c51..00c416fc9e 100644 --- a/src/com/android/settings/AirplaneModeEnabler.java +++ b/src/com/android/settings/AirplaneModeEnabler.java @@ -20,6 +20,7 @@ import com.android.internal.telephony.PhoneStateIntentReceiver; 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 @@ public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListene } }; + 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 @@ public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListene 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 @@ public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListene 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 @@ public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListene * - 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 8ddeef5a10..db20411bc6 100644 --- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java +++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java @@ -111,8 +111,10 @@ class CachedBluetoothDevice implements Comparable { " 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)) { -- 2.11.0