From 9a4543e1de4251463cf14150260baaf8753bd3c0 Mon Sep 17 00:00:00 2001 From: Jake Hamby Date: Tue, 30 Aug 2011 15:24:35 -0700 Subject: [PATCH] Fix unresponsive UI during scan and display of "No Bluetooth devices" - When there are no available Bluetooth devices, we show "No Bluetooth devices were found nearby" as a preference item after the scan completes. Update the layout for this Preference item so that the text is centered and doesn't highlight when touched. - Fix slow responsiveness on scanning caused by repeated removal of "No Bluetooth devices were found" preference item on every call to onBindView(). - If no devices are paired, don't restart the scan on every rotation. Bug: 5173935 Bug: 5055460 Change-Id: I52fb2d52f315c5e793f08499146842d54c5c3ead --- res/layout/preference_empty_list.xml | 30 +++++++++++++++++++ .../android/settings/ProgressCategory.java | 16 ++++++---- .../settings/bluetooth/BluetoothSettings.java | 2 +- 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 res/layout/preference_empty_list.xml diff --git a/res/layout/preference_empty_list.xml b/res/layout/preference_empty_list.xml new file mode 100644 index 00000000000..1c721ac9c2c --- /dev/null +++ b/res/layout/preference_empty_list.xml @@ -0,0 +1,30 @@ + + + + + + + + diff --git a/src/com/android/settings/ProgressCategory.java b/src/com/android/settings/ProgressCategory.java index eee19bc6f50..6c74846ce7e 100644 --- a/src/com/android/settings/ProgressCategory.java +++ b/src/com/android/settings/ProgressCategory.java @@ -26,12 +26,13 @@ public class ProgressCategory extends ProgressCategoryBase { private boolean mProgress = false; private Preference mNoDeviceFoundPreference; + private boolean mNoDeviceFoundAdded; public ProgressCategory(Context context, AttributeSet attrs) { super(context, attrs); setLayoutResource(R.layout.preference_progress_category); } - + @Override public void onBindView(View view) { super.onBindView(view); @@ -39,21 +40,26 @@ public class ProgressCategory extends ProgressCategoryBase { final View progressBar = view.findViewById(R.id.scanning_progress); textView.setText(mProgress ? R.string.progress_scanning : R.string.progress_tap_to_pair); - boolean noDeviceFound = getPreferenceCount() == 0; + boolean noDeviceFound = (getPreferenceCount() == 0 || + (getPreferenceCount() == 1 && getPreference(0) == mNoDeviceFoundPreference)); textView.setVisibility(noDeviceFound ? View.INVISIBLE : View.VISIBLE); progressBar.setVisibility(mProgress ? View.VISIBLE : View.INVISIBLE); if (mProgress) { - if (mNoDeviceFoundPreference != null) { + if (mNoDeviceFoundAdded) { removePreference(mNoDeviceFoundPreference); + mNoDeviceFoundAdded = false; } } else { - if (noDeviceFound) { + if (noDeviceFound && !mNoDeviceFoundAdded) { if (mNoDeviceFoundPreference == null) { mNoDeviceFoundPreference = new Preference(getContext()); - mNoDeviceFoundPreference.setSummary(R.string.bluetooth_no_devices_found); + mNoDeviceFoundPreference.setLayoutResource(R.layout.preference_empty_list); + mNoDeviceFoundPreference.setTitle(R.string.bluetooth_no_devices_found); + mNoDeviceFoundPreference.setSelectable(false); } addPreference(mNoDeviceFoundPreference); + mNoDeviceFoundAdded = true; } } } diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java index e18e48a2510..6899bc32380 100755 --- a/src/com/android/settings/bluetooth/BluetoothSettings.java +++ b/src/com/android/settings/bluetooth/BluetoothSettings.java @@ -99,8 +99,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { - mActivityStarted = true; super.onActivityCreated(savedInstanceState); + mActivityStarted = (savedInstanceState == null); // don't auto start scan after rotation mEmptyView = (TextView) getView().findViewById(android.R.id.empty); getListView().setEmptyView(mEmptyView);