summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorZhihai Xu <zhihaixu@google.com>2012-10-18 15:15:49 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-10-18 15:15:49 -0700
commit10307b99dc2973dee42ce2ed55c4c62d830cf7f3 (patch)
tree1325149fddb5ab1254b45e732d6a1e2eaf82316d /src/com
parente18099d769970cf76aba5fd47e8a6f29a1f5cf8a (diff)
parentecb7f618576300e5d729c1aab2938169634f0d33 (diff)
downloadpackages_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.java31
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);
+ }
+ }
+ }
}