Merge "Entering Bluetooth in Settings will always initiate a scan." into lmp-dev
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index 8ea680f..054995b 100755
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -82,7 +82,7 @@
private PreferenceGroup mAvailableDevicesCategory;
private boolean mAvailableDevicesCategoryIsPresent;
- private boolean mActivityStarted;
+ private boolean mInitialScanStarted;
private TextView mEmptyView;
private SwitchBar mSwitchBar;
@@ -118,7 +118,7 @@
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- mActivityStarted = (savedInstanceState == null); // don't auto start scan after rotation
+ mInitialScanStarted = (savedInstanceState != null); // don't auto start scan after rotation
mEmptyView = (TextView) getView().findViewById(android.R.id.empty);
getListView().setEmptyView(mEmptyView);
@@ -153,6 +153,9 @@
}
super.onResume();
+ // Make the device visible to other devices.
+ mLocalAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
+
if (isUiRestricted()) {
setDeviceListGroup(getPreferenceScreen());
removeAllDevices();
@@ -162,11 +165,8 @@
getActivity().registerReceiver(mReceiver, mIntentFilter);
if (mLocalAdapter != null) {
- updateContent(mLocalAdapter.getBluetoothState(), mActivityStarted);
+ updateContent(mLocalAdapter.getBluetoothState());
}
-
- // Make the device visible to other devices.
- mLocalAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
}
@Override
@@ -176,14 +176,14 @@
mBluetoothEnabler.pause();
}
+ // Make the device only visible to connected devices.
+ mLocalAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE);
+
if (isUiRestricted()) {
return;
}
getActivity().unregisterReceiver(mReceiver);
-
- // Make the device only visible to connected devices.
- mLocalAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE);
}
@Override
@@ -236,6 +236,7 @@
if (!mAvailableDevicesCategoryIsPresent) {
getPreferenceScreen().addPreference(mAvailableDevicesCategory);
+ mAvailableDevicesCategoryIsPresent = true;
}
if (mAvailableDevicesCategory != null) {
@@ -245,6 +246,7 @@
mLocalManager.getCachedDeviceManager().clearCachedDevices();
mAvailableDevicesCategory.removeAll();
+ mInitialScanStarted = true;
mLocalAdapter.startScanning(true);
}
@@ -255,16 +257,18 @@
}
private void addDeviceCategory(PreferenceGroup preferenceGroup, int titleId,
- BluetoothDeviceFilter.Filter filter) {
+ BluetoothDeviceFilter.Filter filter, boolean addCachedDevices) {
preferenceGroup.setTitle(titleId);
getPreferenceScreen().addPreference(preferenceGroup);
setFilter(filter);
setDeviceListGroup(preferenceGroup);
- addCachedDevices();
+ if (addCachedDevices) {
+ addCachedDevices();
+ }
preferenceGroup.setEnabled(true);
}
- private void updateContent(int bluetoothState, boolean scanState) {
+ private void updateContent(int bluetoothState) {
final PreferenceScreen preferenceScreen = getPreferenceScreen();
int messageId = 0;
@@ -287,9 +291,13 @@
}
addDeviceCategory(mPairedDevicesCategory,
R.string.bluetooth_preference_paired_devices,
- BluetoothDeviceFilter.BONDED_DEVICE_FILTER);
+ BluetoothDeviceFilter.BONDED_DEVICE_FILTER, true);
int numberOfPairedDevices = mPairedDevicesCategory.getPreferenceCount();
+ if (isUiRestricted() || numberOfPairedDevices <= 0) {
+ preferenceScreen.removePreference(mPairedDevicesCategory);
+ }
+
// Available devices category
if (mAvailableDevicesCategory == null) {
mAvailableDevicesCategory = new BluetoothProgressCategory(getActivity());
@@ -299,30 +307,17 @@
}
addDeviceCategory(mAvailableDevicesCategory,
R.string.bluetooth_preference_found_devices,
- BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER);
+ BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER, mInitialScanStarted);
int numberOfAvailableDevices = mAvailableDevicesCategory.getPreferenceCount();
- mAvailableDevicesCategoryIsPresent = true;
- if (numberOfAvailableDevices == 0) {
- preferenceScreen.removePreference(mAvailableDevicesCategory);
- mAvailableDevicesCategoryIsPresent = false;
- }
-
- if (numberOfPairedDevices == 0) {
- preferenceScreen.removePreference(mPairedDevicesCategory);
- if (scanState == true) {
- mActivityStarted = false;
- startScanning();
- } else {
- if (!mAvailableDevicesCategoryIsPresent) {
- getPreferenceScreen().addPreference(mAvailableDevicesCategory);
- }
- }
+ if (!mInitialScanStarted) {
+ startScanning();
}
if (mMyDevicePreference == null) {
mMyDevicePreference = new Preference(getActivity());
}
+
mMyDevicePreference.setSummary(getResources().getString(
R.string.bluetooth_is_visible_message, mLocalAdapter.getName()));
mMyDevicePreference.setSelectable(false);
@@ -359,7 +354,7 @@
@Override
public void onBluetoothStateChanged(int bluetoothState) {
super.onBluetoothStateChanged(bluetoothState);
- updateContent(bluetoothState, true);
+ updateContent(bluetoothState);
}
@Override
@@ -374,7 +369,7 @@
public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
setDeviceListGroup(getPreferenceScreen());
removeAllDevices();
- updateContent(mLocalAdapter.getBluetoothState(), false);
+ updateContent(mLocalAdapter.getBluetoothState());
}
private final View.OnClickListener mDeviceProfilesListener = new View.OnClickListener() {