diff options
author | Zhihai Xu <zhihaixu@google.com> | 2012-10-18 15:15:49 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-10-18 15:15:49 -0700 |
commit | 10307b99dc2973dee42ce2ed55c4c62d830cf7f3 (patch) | |
tree | 1325149fddb5ab1254b45e732d6a1e2eaf82316d /src/com | |
parent | e18099d769970cf76aba5fd47e8a6f29a1f5cf8a (diff) | |
parent | ecb7f618576300e5d729c1aab2938169634f0d33 (diff) | |
download | packages_apps_Settings-10307b99dc2973dee42ce2ed55c4c62d830cf7f3.zip packages_apps_Settings-10307b99dc2973dee42ce2ed55c4c62d830cf7f3.tar.gz packages_apps_Settings-10307b99dc2973dee42ce2ed55c4c62d830cf7f3.tar.bz2 |
am ecb7f618: am 3e1e454b: am 8346107d: Merge "bluetooth won\'t turn on after turn Airplane mode off on setting screen on manta(tablet)" into jb-mr1-dev
* commit 'ecb7f618576300e5d729c1aab2938169634f0d33':
bluetooth won't turn on after turn Airplane mode off on setting screen on manta(tablet)
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/settings/bluetooth/BluetoothEnabler.java | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java index f08e083..2919e6f 100644 --- a/src/com/android/settings/bluetooth/BluetoothEnabler.java +++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java @@ -37,13 +37,15 @@ import com.android.settings.WirelessSettings; public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeListener { private final Context mContext; private Switch mSwitch; - + private boolean mValidListener; private final LocalBluetoothAdapter mLocalAdapter; private final IntentFilter mIntentFilter; private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { + // Broadcast receiver is always running on the UI thread here, + // so we don't need consider thread synchronization. int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); handleStateChanged(state); } @@ -52,6 +54,7 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis public BluetoothEnabler(Context context, Switch switch_) { mContext = context; mSwitch = switch_; + mValidListener = false; LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context); if (manager == null) { @@ -75,6 +78,7 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis mContext.registerReceiver(mReceiver, mIntentFilter); mSwitch.setOnCheckedChangeListener(this); + mValidListener = true; } public void pause() { @@ -84,19 +88,20 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis mContext.unregisterReceiver(mReceiver); mSwitch.setOnCheckedChangeListener(null); + mValidListener = false; } public void setSwitch(Switch switch_) { if (mSwitch == switch_) return; mSwitch.setOnCheckedChangeListener(null); mSwitch = switch_; - mSwitch.setOnCheckedChangeListener(this); + mSwitch.setOnCheckedChangeListener(mValidListener ? this : null); int bluetoothState = BluetoothAdapter.STATE_OFF; if (mLocalAdapter != null) bluetoothState = mLocalAdapter.getBluetoothState(); boolean isOn = bluetoothState == BluetoothAdapter.STATE_ON; boolean isOff = bluetoothState == BluetoothAdapter.STATE_OFF; - mSwitch.setChecked(isOn); + setChecked(isOn); mSwitch.setEnabled(isOn || isOff); } @@ -121,19 +126,33 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis mSwitch.setEnabled(false); break; case BluetoothAdapter.STATE_ON: - mSwitch.setChecked(true); + setChecked(true); mSwitch.setEnabled(true); break; case BluetoothAdapter.STATE_TURNING_OFF: mSwitch.setEnabled(false); break; case BluetoothAdapter.STATE_OFF: - mSwitch.setChecked(false); + setChecked(false); mSwitch.setEnabled(true); break; default: - mSwitch.setChecked(false); + setChecked(false); mSwitch.setEnabled(true); } } + + private void setChecked(boolean isChecked) { + if (isChecked != mSwitch.isChecked()) { + // set listener to null, so onCheckedChanged won't be called + // if the checked status on Switch isn't changed by user click + if (mValidListener) { + mSwitch.setOnCheckedChangeListener(null); + } + mSwitch.setChecked(isChecked); + if (mValidListener) { + mSwitch.setOnCheckedChangeListener(this); + } + } + } } |