Use SwitchBar for Bluetooth Settings
- follow up CL to 4193776698
Related to bug #14898161 On/Off switches must move down from Action Bar
Change-Id: Ic04de39599c91388cba8510bfd46d96e7bc30260
This commit is contained in:
@@ -31,15 +31,17 @@ import android.widget.Toast;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.WirelessSettings;
|
import com.android.settings.WirelessSettings;
|
||||||
import com.android.settings.search.Index;
|
import com.android.settings.search.Index;
|
||||||
|
import com.android.settings.widget.SwitchBar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BluetoothEnabler is a helper to manage the Bluetooth on/off checkbox
|
* BluetoothEnabler is a helper to manage the Bluetooth on/off checkbox
|
||||||
* preference. It turns on/off Bluetooth and ensures the summary of the
|
* preference. It turns on/off Bluetooth and ensures the summary of the
|
||||||
* preference reflects the current state.
|
* preference reflects the current state.
|
||||||
*/
|
*/
|
||||||
public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeListener {
|
public final class BluetoothEnabler implements SwitchBar.OnSwitchChangeListener {
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private Switch mSwitch;
|
private Switch mSwitch;
|
||||||
|
private SwitchBar mSwitchBar;
|
||||||
private boolean mValidListener;
|
private boolean mValidListener;
|
||||||
private final LocalBluetoothAdapter mLocalAdapter;
|
private final LocalBluetoothAdapter mLocalAdapter;
|
||||||
private final IntentFilter mIntentFilter;
|
private final IntentFilter mIntentFilter;
|
||||||
@@ -70,9 +72,10 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public BluetoothEnabler(Context context, Switch switch_) {
|
public BluetoothEnabler(Context context, SwitchBar switchBar) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mSwitch = switch_;
|
mSwitchBar = switchBar;
|
||||||
|
mSwitch = switchBar.getSwitch();
|
||||||
mValidListener = false;
|
mValidListener = false;
|
||||||
|
|
||||||
LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context);
|
LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context);
|
||||||
@@ -100,7 +103,8 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis
|
|||||||
handleStateChanged(mLocalAdapter.getBluetoothState());
|
handleStateChanged(mLocalAdapter.getBluetoothState());
|
||||||
|
|
||||||
mContext.registerReceiver(mReceiver, mIntentFilter);
|
mContext.registerReceiver(mReceiver, mIntentFilter);
|
||||||
mSwitch.setOnCheckedChangeListener(this);
|
mSwitchBar.addOnSwitchChangeListener(this);
|
||||||
|
mSwitchBar.show();
|
||||||
mValidListener = true;
|
mValidListener = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,39 +114,11 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis
|
|||||||
}
|
}
|
||||||
|
|
||||||
mContext.unregisterReceiver(mReceiver);
|
mContext.unregisterReceiver(mReceiver);
|
||||||
mSwitch.setOnCheckedChangeListener(null);
|
mSwitchBar.removeOnSwitchChangeListener(this);
|
||||||
|
mSwitchBar.hide();
|
||||||
mValidListener = false;
|
mValidListener = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSwitch(Switch switch_) {
|
|
||||||
if (mSwitch == switch_) return;
|
|
||||||
mSwitch.setOnCheckedChangeListener(null);
|
|
||||||
mSwitch = switch_;
|
|
||||||
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;
|
|
||||||
setChecked(isOn);
|
|
||||||
mSwitch.setEnabled(isOn || isOff);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
|
||||||
// Show toast message if Bluetooth is not allowed in airplane mode
|
|
||||||
if (isChecked &&
|
|
||||||
!WirelessSettings.isRadioAllowed(mContext, Settings.Global.RADIO_BLUETOOTH)) {
|
|
||||||
Toast.makeText(mContext, R.string.wifi_in_airplane_mode, Toast.LENGTH_SHORT).show();
|
|
||||||
// Reset switch to off
|
|
||||||
buttonView.setChecked(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mLocalAdapter != null) {
|
|
||||||
mLocalAdapter.setBluetoothEnabled(isChecked);
|
|
||||||
}
|
|
||||||
mSwitch.setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleStateChanged(int state) {
|
void handleStateChanged(int state) {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case BluetoothAdapter.STATE_TURNING_ON:
|
case BluetoothAdapter.STATE_TURNING_ON:
|
||||||
@@ -173,11 +149,11 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis
|
|||||||
// set listener to null, so onCheckedChanged won't be called
|
// set listener to null, so onCheckedChanged won't be called
|
||||||
// if the checked status on Switch isn't changed by user click
|
// if the checked status on Switch isn't changed by user click
|
||||||
if (mValidListener) {
|
if (mValidListener) {
|
||||||
mSwitch.setOnCheckedChangeListener(null);
|
mSwitchBar.removeOnSwitchChangeListener(this);
|
||||||
}
|
}
|
||||||
mSwitch.setChecked(isChecked);
|
mSwitch.setChecked(isChecked);
|
||||||
if (mValidListener) {
|
if (mValidListener) {
|
||||||
mSwitch.setOnCheckedChangeListener(this);
|
mSwitchBar.addOnSwitchChangeListener(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,4 +166,20 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis
|
|||||||
msg.getData().putBoolean(EVENT_DATA_IS_BT_ON, isBluetoothOn);
|
msg.getData().putBoolean(EVENT_DATA_IS_BT_ON, isBluetoothOn);
|
||||||
mHandler.sendMessage(msg);
|
mHandler.sendMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSwitchChanged(Switch switchView, boolean isChecked) {
|
||||||
|
// Show toast message if Bluetooth is not allowed in airplane mode
|
||||||
|
if (isChecked &&
|
||||||
|
!WirelessSettings.isRadioAllowed(mContext, Settings.Global.RADIO_BLUETOOTH)) {
|
||||||
|
Toast.makeText(mContext, R.string.wifi_in_airplane_mode, Toast.LENGTH_SHORT).show();
|
||||||
|
// Reset switch to off
|
||||||
|
switchView.setChecked(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mLocalAdapter != null) {
|
||||||
|
mLocalAdapter.setBluetoothEnabled(isChecked);
|
||||||
|
}
|
||||||
|
mSwitch.setEnabled(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -46,6 +46,7 @@ import com.android.settings.SettingsActivity;
|
|||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
import com.android.settings.search.Indexable;
|
import com.android.settings.search.Indexable;
|
||||||
import com.android.settings.search.SearchIndexableRaw;
|
import com.android.settings.search.SearchIndexableRaw;
|
||||||
|
import com.android.settings.widget.SwitchBar;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -77,7 +78,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
|
|||||||
private boolean mActivityStarted;
|
private boolean mActivityStarted;
|
||||||
|
|
||||||
private TextView mEmptyView;
|
private TextView mEmptyView;
|
||||||
private Switch mSwitch;
|
private SwitchBar mSwitchBar;
|
||||||
|
|
||||||
private final IntentFilter mIntentFilter;
|
private final IntentFilter mIntentFilter;
|
||||||
|
|
||||||
@@ -114,35 +115,10 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
|
|||||||
mEmptyView = (TextView) getView().findViewById(android.R.id.empty);
|
mEmptyView = (TextView) getView().findViewById(android.R.id.empty);
|
||||||
getListView().setEmptyView(mEmptyView);
|
getListView().setEmptyView(mEmptyView);
|
||||||
|
|
||||||
final Activity activity = getActivity();
|
|
||||||
final int padding = activity.getResources().getDimensionPixelSize(
|
|
||||||
R.dimen.action_bar_switch_padding);
|
|
||||||
mSwitch = new Switch(activity.getActionBar().getThemedContext());
|
|
||||||
mSwitch.setPaddingRelative(0, 0, padding, 0);
|
|
||||||
|
|
||||||
mBluetoothEnabler = new BluetoothEnabler(activity, mSwitch);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStart() {
|
|
||||||
super.onStart();
|
|
||||||
|
|
||||||
final SettingsActivity activity = (SettingsActivity) getActivity();
|
final SettingsActivity activity = (SettingsActivity) getActivity();
|
||||||
|
mSwitchBar = activity.getSwitchBar();
|
||||||
|
|
||||||
activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
|
mBluetoothEnabler = new BluetoothEnabler(activity, mSwitchBar);
|
||||||
ActionBar.DISPLAY_SHOW_CUSTOM);
|
|
||||||
activity.getActionBar().setCustomView(mSwitch, new ActionBar.LayoutParams(
|
|
||||||
ActionBar.LayoutParams.WRAP_CONTENT,
|
|
||||||
ActionBar.LayoutParams.WRAP_CONTENT,
|
|
||||||
Gravity.CENTER_VERTICAL | Gravity.END));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop() {
|
|
||||||
super.onStop();
|
|
||||||
final SettingsActivity activity = (SettingsActivity) getActivity();
|
|
||||||
activity.getActionBar().setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
|
|
||||||
activity.getActionBar().setCustomView(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user