summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZhihai Xu <zhihaixu@google.com>2012-10-18 15:07:48 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-10-18 15:07:49 -0700
commit8346107d25a05580fa98adaaff9d28c025d3faed (patch)
tree175e8afedf18c8fced1fa2d79493542487c1b563 /src
parentdeb5a843c9feb39d8ea564347a97417b34a5e9a1 (diff)
parentec16c0ae42ca6092e543b553981e9f426838f237 (diff)
downloadpackages_apps_settings-8346107d25a05580fa98adaaff9d28c025d3faed.zip
packages_apps_settings-8346107d25a05580fa98adaaff9d28c025d3faed.tar.gz
packages_apps_settings-8346107d25a05580fa98adaaff9d28c025d3faed.tar.bz2
Merge "bluetooth won't turn on after turn Airplane mode off on setting screen on manta(tablet)" into jb-mr1-dev
Diffstat (limited to 'src')
-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);
+ }
+ }
+ }
}