OSDN Git Service

Refactor Bluetooth settings
authorGilles Debunne <debunne@google.com>
Thu, 7 Jul 2011 21:24:26 +0000 (14:24 -0700)
committerGilles Debunne <debunne@google.com>
Fri, 8 Jul 2011 16:40:47 +0000 (09:40 -0700)
Two lists: paired devices and available devices.
New item at top for the device itself (not connected to discoverable, this is a larger
refactoring).

New settings icon.

Change-Id: I788a6c0afdb07309d449a4d41a02cf8480c95a37

res/drawable-hdpi/ic_bt_config.png
res/drawable-mdpi/ic_bt_config.png
res/values/strings.xml
src/com/android/settings/bluetooth/BluetoothSettings.java

index c6d2483..47b4ba2 100644 (file)
Binary files a/res/drawable-hdpi/ic_bt_config.png and b/res/drawable-hdpi/ic_bt_config.png differ
index eefda26..7928104 100644 (file)
Binary files a/res/drawable-mdpi/ic_bt_config.png and b/res/drawable-mdpi/ic_bt_config.png differ
index 251da79..f8d38a2 100644 (file)
     <string name="bluetooth_searching_for_devices">Searching\u2026</string>
     <!-- Bluetooth settings: The sub heading for device settings. [CHAR LIMIT=30] -->
     <string name="bluetooth_preference_device_settings">Device settings</string>
-    <!-- Bluetooth settings: The sub heading for paired devices. [CHAR LIMIT=30] -->
+    <!-- Bluetooth settings: The sub heading for devices which have already been paired with this device. [CHAR LIMIT=40] -->
     <string name="bluetooth_preference_paired_devices">Paired devices</string>
-    <!-- Bluetooth settings: The sub heading for found devices when scanning. [CHAR LIMIT=30] -->
-    <string name="bluetooth_preference_found_devices">Found devices</string>
+    <!-- Bluetooth settings: The sub heading for available devices during and after scanning. [CHAR LIMIT=40] -->
+    <string name="bluetooth_preference_found_devices">Available devices</string>
     <!-- Bluetooth settings.  Context menu item for a device.  Action will connect to all profiles on the device. -->
     <string name="bluetooth_device_context_connect">Connect</string>
     <!-- Bluetooth settings.  Context menu item for a device.  Action will disconnect from all profiles on the device. -->
index 6a5641f..2208223 100644 (file)
@@ -23,6 +23,7 @@ import android.bluetooth.BluetoothDevice;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
+import android.preference.PreferenceCategory;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
 import android.util.Log;
@@ -51,8 +52,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
 
     private BluetoothEnabler mBluetoothEnabler;
 
-    private PreferenceGroup mFoundDevicesCategory;
-    private boolean mFoundDevicesCategoryIsPresent;
+    private PreferenceGroup mAvailableDevicesCategory;
+    private boolean mAvailableDevicesCategoryIsPresent;
 
     private View mView;
     private TextView mEmptyView;
@@ -97,10 +98,6 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
 
         mBluetoothEnabler = new BluetoothEnabler(activity, actionBarSwitch);
 
-        if (mLocalAdapter != null && mLocalAdapter.isEnabled()) {
-            activity.getActionBar().setSubtitle(mLocalAdapter.getName());
-        }
-
         setHasOptionsMenu(true);
     }
 
@@ -159,8 +156,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
     }
 
     private void startScanning() {
-        if (!mFoundDevicesCategoryIsPresent) {
-            getPreferenceScreen().addPreference(mFoundDevicesCategory);
+        if (!mAvailableDevicesCategoryIsPresent) {
+            getPreferenceScreen().addPreference(mAvailableDevicesCategory);
         }
         mLocalAdapter.startScanning(true);
     }
@@ -171,6 +168,16 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
         super.onDevicePreferenceClick(btPreference);
     }
 
+    private void addDeviceCategory(PreferenceGroup preferenceGroup, int titleId,
+            BluetoothDeviceFilter.Filter filter) {
+        preferenceGroup.setTitle(titleId);
+        getPreferenceScreen().addPreference(preferenceGroup);
+        setFilter(filter);
+        setDeviceListGroup(preferenceGroup);
+        addCachedDevices();
+        preferenceGroup.setEnabled(true);
+    }
+
     private void updateContent(int bluetoothState) {
         final PreferenceScreen preferenceScreen = getPreferenceScreen();
         getActivity().invalidateOptionsMenu();
@@ -179,42 +186,58 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
         switch (bluetoothState) {
             case BluetoothAdapter.STATE_ON:
                 preferenceScreen.removeAll();
-
-                // Add bonded devices from cache first
-                setFilter(BluetoothDeviceFilter.BONDED_DEVICE_FILTER);
-                setDeviceListGroup(preferenceScreen);
                 preferenceScreen.setOrderingAsAdded(true);
 
-                addCachedDevices();
-                int numberOfPairedDevices = preferenceScreen.getPreferenceCount();
-
-                // Found devices category
-                mFoundDevicesCategory = new ProgressCategory(getActivity(), null);
-                mFoundDevicesCategory.setTitle(R.string.bluetooth_preference_found_devices);
-                preferenceScreen.addPreference(mFoundDevicesCategory);
-                mFoundDevicesCategoryIsPresent = true;
-
-                // Unbonded found devices from cache
-                setFilter(BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER);
-                setDeviceListGroup(mFoundDevicesCategory);
-                addCachedDevices();
-
-                int numberOfUnpairedDevices = mFoundDevicesCategory.getPreferenceCount();
-                if (numberOfUnpairedDevices == 0) {
-                    preferenceScreen.removePreference(mFoundDevicesCategory);
-                    mFoundDevicesCategoryIsPresent = false;
+                // This device
+                if (mMyDevicePreference == null) {
+                    mMyDevicePreference = new Preference(getActivity());
+                }
+                if (mLocalAdapter != null) {
+                    mMyDevicePreference.setTitle(mLocalAdapter.getName());
                 }
+                mMyDevicePreference.setEnabled(true);
+                preferenceScreen.addPreference(mMyDevicePreference);
 
-                if (numberOfPairedDevices == 0) startScanning();
+                // Paired devices category
+                if (mPairedDevicesCategory == null) {
+                    mPairedDevicesCategory = new PreferenceCategory(getActivity());
+                } else {
+                    mPairedDevicesCategory.removeAll();
+                }
+                addDeviceCategory(mPairedDevicesCategory,
+                        R.string.bluetooth_preference_paired_devices,
+                        BluetoothDeviceFilter.BONDED_DEVICE_FILTER);
+                int numberOfPairedDevices = mPairedDevicesCategory.getPreferenceCount();
+
+                // Available devices category
+                if (mAvailableDevicesCategory == null) {
+                    mAvailableDevicesCategory = new ProgressCategory(getActivity(), null);
+                } else {
+                    mAvailableDevicesCategory.removeAll();
+                }
+                addDeviceCategory(mAvailableDevicesCategory,
+                        R.string.bluetooth_preference_found_devices,
+                        BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER);
+                int numberOfAvailableDevices = mAvailableDevicesCategory.getPreferenceCount();
+                mAvailableDevicesCategoryIsPresent = true;
+
+                if (numberOfAvailableDevices == 0) {
+                    preferenceScreen.removePreference(mAvailableDevicesCategory);
+                    mAvailableDevicesCategoryIsPresent = false;
+                }
 
-                return;
+                if (numberOfPairedDevices == 0) {
+                    preferenceScreen.removePreference(mPairedDevicesCategory);
+                    startScanning();
+                }
+                return; // not break
 
             case BluetoothAdapter.STATE_TURNING_OFF:
                 int preferenceCount = preferenceScreen.getPreferenceCount();
                 for (int i = 0; i < preferenceCount; i++) {
                     preferenceScreen.getPreference(i).setEnabled(false);
                 }
-                return;
+                return; // not break
 
             case BluetoothAdapter.STATE_OFF:
                 messageId = R.string.bluetooth_empty_list_bluetooth_off;
@@ -268,6 +291,10 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
         }
     };
 
+    private Preference mMyDevicePreference;
+
+    private PreferenceGroup mPairedDevicesCategory;
+
     /**
      * Add a listener, which enables the advanced settings icon.
      * @param preference the newly added preference