Merge "bluetooth won't turn on after turn Airplane mode off on setting screen on manta(tablet)" into jb-mr1-dev

This commit is contained in:
Zhihai Xu
2012-10-17 16:32:56 -07:00
committed by Android (Google) Code Review

View File

@@ -37,7 +37,7 @@ import com.android.settings.WirelessSettings;
public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeListener { public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeListener {
private final Context mContext; private final Context mContext;
private Switch mSwitch; private Switch mSwitch;
private boolean mValidListener;
private final LocalBluetoothAdapter mLocalAdapter; private final LocalBluetoothAdapter mLocalAdapter;
private final IntentFilter mIntentFilter; private final IntentFilter mIntentFilter;
@@ -52,6 +52,7 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis
public BluetoothEnabler(Context context, Switch switch_) { public BluetoothEnabler(Context context, Switch switch_) {
mContext = context; mContext = context;
mSwitch = switch_; mSwitch = switch_;
mValidListener = false;
LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context); LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context);
if (manager == null) { if (manager == null) {
@@ -74,7 +75,10 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis
handleStateChanged(mLocalAdapter.getBluetoothState()); handleStateChanged(mLocalAdapter.getBluetoothState());
mContext.registerReceiver(mReceiver, mIntentFilter); mContext.registerReceiver(mReceiver, mIntentFilter);
mSwitch.setOnCheckedChangeListener(this); synchronized(this) {
mSwitch.setOnCheckedChangeListener(this);
mValidListener = true;
}
} }
public void pause() { public void pause() {
@@ -83,20 +87,26 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis
} }
mContext.unregisterReceiver(mReceiver); mContext.unregisterReceiver(mReceiver);
mSwitch.setOnCheckedChangeListener(null); synchronized(this) {
mSwitch.setOnCheckedChangeListener(null);
mValidListener = false;
}
} }
public void setSwitch(Switch switch_) { public void setSwitch(Switch switch_) {
if (mSwitch == switch_) return; if (mSwitch == switch_) return;
mSwitch.setOnCheckedChangeListener(null);
mSwitch = switch_;
mSwitch.setOnCheckedChangeListener(this);
int bluetoothState = BluetoothAdapter.STATE_OFF; int bluetoothState = BluetoothAdapter.STATE_OFF;
if (mLocalAdapter != null) bluetoothState = mLocalAdapter.getBluetoothState(); if (mLocalAdapter != null) bluetoothState = mLocalAdapter.getBluetoothState();
boolean isOn = bluetoothState == BluetoothAdapter.STATE_ON; boolean isOn = bluetoothState == BluetoothAdapter.STATE_ON;
boolean isOff = bluetoothState == BluetoothAdapter.STATE_OFF; boolean isOff = bluetoothState == BluetoothAdapter.STATE_OFF;
mSwitch.setChecked(isOn);
synchronized(this) {
mSwitch.setOnCheckedChangeListener(null);
mSwitch = switch_;
mSwitch.setOnCheckedChangeListener(null);
}
setChecked(isOn);
mSwitch.setEnabled(isOn || isOff); mSwitch.setEnabled(isOn || isOff);
} }
@@ -121,19 +131,31 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis
mSwitch.setEnabled(false); mSwitch.setEnabled(false);
break; break;
case BluetoothAdapter.STATE_ON: case BluetoothAdapter.STATE_ON:
mSwitch.setChecked(true); setChecked(true);
mSwitch.setEnabled(true); mSwitch.setEnabled(true);
break; break;
case BluetoothAdapter.STATE_TURNING_OFF: case BluetoothAdapter.STATE_TURNING_OFF:
mSwitch.setEnabled(false); mSwitch.setEnabled(false);
break; break;
case BluetoothAdapter.STATE_OFF: case BluetoothAdapter.STATE_OFF:
mSwitch.setChecked(false); setChecked(false);
mSwitch.setEnabled(true); mSwitch.setEnabled(true);
break; break;
default: default:
mSwitch.setChecked(false); setChecked(false);
mSwitch.setEnabled(true); mSwitch.setEnabled(true);
} }
} }
private synchronized void setChecked(boolean 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);
}
}
} }