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
This commit is contained in:
Jake Hamby
2011-08-30 15:24:35 -07:00
parent be4fa0bf95
commit 9a4543e1de
3 changed files with 42 additions and 6 deletions

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="48dip"
android:background="@android:color/transparent">
<TextView
android:id="@+android:id/title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@*android:dimen/preference_fragment_padding_side"
android:gravity="center" />
</LinearLayout>

View File

@@ -26,12 +26,13 @@ public class ProgressCategory extends ProgressCategoryBase {
private boolean mProgress = false; private boolean mProgress = false;
private Preference mNoDeviceFoundPreference; private Preference mNoDeviceFoundPreference;
private boolean mNoDeviceFoundAdded;
public ProgressCategory(Context context, AttributeSet attrs) { public ProgressCategory(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
setLayoutResource(R.layout.preference_progress_category); setLayoutResource(R.layout.preference_progress_category);
} }
@Override @Override
public void onBindView(View view) { public void onBindView(View view) {
super.onBindView(view); super.onBindView(view);
@@ -39,21 +40,26 @@ public class ProgressCategory extends ProgressCategoryBase {
final View progressBar = view.findViewById(R.id.scanning_progress); final View progressBar = view.findViewById(R.id.scanning_progress);
textView.setText(mProgress ? R.string.progress_scanning : R.string.progress_tap_to_pair); 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); textView.setVisibility(noDeviceFound ? View.INVISIBLE : View.VISIBLE);
progressBar.setVisibility(mProgress ? View.VISIBLE : View.INVISIBLE); progressBar.setVisibility(mProgress ? View.VISIBLE : View.INVISIBLE);
if (mProgress) { if (mProgress) {
if (mNoDeviceFoundPreference != null) { if (mNoDeviceFoundAdded) {
removePreference(mNoDeviceFoundPreference); removePreference(mNoDeviceFoundPreference);
mNoDeviceFoundAdded = false;
} }
} else { } else {
if (noDeviceFound) { if (noDeviceFound && !mNoDeviceFoundAdded) {
if (mNoDeviceFoundPreference == null) { if (mNoDeviceFoundPreference == null) {
mNoDeviceFoundPreference = new Preference(getContext()); 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); addPreference(mNoDeviceFoundPreference);
mNoDeviceFoundAdded = true;
} }
} }
} }

View File

@@ -99,8 +99,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
mActivityStarted = true;
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
mActivityStarted = (savedInstanceState == null); // don't auto start scan after rotation
mEmptyView = (TextView) getView().findViewById(android.R.id.empty); mEmptyView = (TextView) getView().findViewById(android.R.id.empty);
getListView().setEmptyView(mEmptyView); getListView().setEmptyView(mEmptyView);