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-18 15:07:48 -07:00
committed by Android (Google) Code Review

View File

@@ -37,13 +37,15 @@ 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;
private final BroadcastReceiver mReceiver = new BroadcastReceiver() { private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { 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); int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
handleStateChanged(state); handleStateChanged(state);
} }
@@ -52,6 +54,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) {
@@ -75,6 +78,7 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis
mContext.registerReceiver(mReceiver, mIntentFilter); mContext.registerReceiver(mReceiver, mIntentFilter);
mSwitch.setOnCheckedChangeListener(this); mSwitch.setOnCheckedChangeListener(this);
mValidListener = true;
} }
public void pause() { public void pause() {
@@ -84,19 +88,20 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis
mContext.unregisterReceiver(mReceiver); mContext.unregisterReceiver(mReceiver);
mSwitch.setOnCheckedChangeListener(null); 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.setOnCheckedChangeListener(null);
mSwitch = switch_; mSwitch = switch_;
mSwitch.setOnCheckedChangeListener(this); mSwitch.setOnCheckedChangeListener(mValidListener ? this : null);
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); setChecked(isOn);
mSwitch.setEnabled(isOn || isOff); mSwitch.setEnabled(isOn || isOff);
} }
@@ -121,19 +126,33 @@ 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 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);
}
}
}
} }