OSDN Git Service

Fix some Bluetooth settings bugs.
authorJake Hamby <jhamby@google.com>
Wed, 20 Jul 2011 03:03:25 +0000 (20:03 -0700)
committerJake Hamby <jhamby@google.com>
Mon, 25 Jul 2011 21:57:07 +0000 (14:57 -0700)
- Remove BluetoothFindNearby.java (no longer used)
- Show message when Bluetooth is turning off
- Fix case where device name sometimes didn't show when turning BT on
- Disable "Rename device" and "Visibility timeout" menus when BT is off
- Remove "Got onDeviceAdded, but cachedDevice already exists" log message
- Never show "Rename device" in action menu (bug 5064378)
- Show discovery time remaining as "m:ss", not "mm:ss" (bug 5064104)

Bug: 5064378
Bug: 5064104
Change-Id: I79609dfdad61993a28cff64c9e082870ff74d180

res/values/strings.xml
src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
src/com/android/settings/bluetooth/BluetoothFindNearby.java [deleted file]
src/com/android/settings/bluetooth/BluetoothSettings.java
src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java

index 56498e4..cd5ac0b 100644 (file)
     <string name="bluetooth_ask_enablement_and_lasting_discovery" product="tablet">"An application on your tablet is requesting permission to turn on Bluetooth and to make your tablet discoverable by other devices. Do you want to do this?"</string>
     <string name="bluetooth_ask_enablement_and_lasting_discovery" product="default">"An application on your phone is requesting permission to turn on Bluetooth and to make your phone discoverable by other devices. Do you want to do this?"</string>
 
-    <!-- Strings for msg to display to user while bluetooth is turning on -->
+    <!-- Strings for msg to display to user while bluetooth is turning on [CHAR LIMIT=60] -->
     <string name="bluetooth_turning_on">"Turning Bluetooth on\u2026"</string>
 
+    <!-- Strings for msg to display to user while bluetooth is turning off [CHAR LIMIT=60] -->
+    <string name="bluetooth_turning_off">"Turning Bluetooth off\u2026"</string>
+
     <!-- Strings for device profile auto connect setting -->
     <string name="bluetooth_auto_connect">Auto connect</string>
 
index 0ad8948..6b654b5 100644 (file)
@@ -144,12 +144,24 @@ final class BluetoothDiscoverableEnabler implements Preference.OnPreferenceClick
         if (getDiscoverableTimeout() == DISCOVERABLE_TIMEOUT_NEVER) {
             mDiscoveryPreference.setSummary(R.string.bluetooth_is_discoverable_always);
         } else {
-            String textTimeout = DateUtils.formatElapsedTime(timeout);
+            String textTimeout = formatTimeRemaining(timeout);
             mDiscoveryPreference.setSummary(mContext.getString(R.string.bluetooth_is_discoverable,
                     textTimeout));
         }
     }
 
+    private static String formatTimeRemaining(int timeout) {
+        StringBuilder sb = new StringBuilder(6);    // "mmm:ss"
+        int min = timeout / 60;
+        sb.append(min).append(':');
+        int sec = timeout - (min * 60);
+        if (sec < 10) {
+            sb.append('0');
+        }
+        sb.append(sec);
+        return sb.toString();
+    }
+
     void setDiscoverableTimeout(int index) {
         String timeoutValue;
         switch (index) {
diff --git a/src/com/android/settings/bluetooth/BluetoothFindNearby.java b/src/com/android/settings/bluetooth/BluetoothFindNearby.java
deleted file mode 100644 (file)
index 066f4f6..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-
-import com.android.settings.R;
-
-/**
- * Fragment to scan and show the discoverable devices.
- */
-public final class BluetoothFindNearby extends DeviceListPreferenceFragment {
-
-    @Override
-    void addPreferencesForActivity() {
-        addPreferencesFromResource(R.xml.device_picker);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        if (mSelectedDevice != null) {
-            CachedBluetoothDeviceManager manager = mLocalManager.getCachedDeviceManager();
-            CachedBluetoothDevice device = manager.findDevice(mSelectedDevice);
-            if (device != null && device.getBondState() == BluetoothDevice.BOND_BONDED) {
-                // selected device was paired, so return from this screen
-                finish();
-                return;
-            }
-        }
-        mLocalAdapter.startScanning(true);
-    }
-
-    @Override
-    void onDevicePreferenceClick(BluetoothDevicePreference btPreference) {
-        mLocalAdapter.stopScanning();
-        super.onDevicePreferenceClick(btPreference);
-    }
-
-    public void onDeviceBondStateChanged(CachedBluetoothDevice
-            cachedDevice, int bondState) {
-        if (bondState == BluetoothDevice.BOND_BONDED) {
-            // return from scan screen after successful auto-pairing
-            finish();
-        }
-    }
-
-    @Override
-    public void onBluetoothStateChanged(int bluetoothState) {
-        super.onBluetoothStateChanged(bluetoothState);
-
-        if (bluetoothState == BluetoothAdapter.STATE_ON) {
-                mLocalAdapter.startScanning(false);
-        }
-    }
-}
index ede218d..4b0db68 100644 (file)
@@ -72,6 +72,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
     private View mView;
     private TextView mEmptyView;
 
+    private final IntentFilter mIntentFilter;
+
     // accessed from inner class (not private to avoid thunks)
     Preference mMyDevicePreference;
 
@@ -79,21 +81,22 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
         @Override
         public void onReceive(Context context, Intent intent) {
             String action = intent.getAction();
-            if (action.equals(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED) ||
-                    (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED) &&
-                            (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
-                                    BluetoothAdapter.ERROR) == BluetoothAdapter.STATE_ON))) {
+            if (action.equals(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED)) {
                 updateDeviceName();
             }
         }
 
         private void updateDeviceName() {
-            if (mLocalAdapter != null && mLocalAdapter.isEnabled() && mMyDevicePreference != null) {
+            if (mLocalAdapter.isEnabled() && mMyDevicePreference != null) {
                 mMyDevicePreference.setTitle(mLocalAdapter.getName());
             }
         }
     };
 
+    public BluetoothSettings() {
+        mIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED);
+    }
+
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
@@ -142,16 +145,12 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
         super.onResume();
 
         mBluetoothEnabler.resume();
-        updateContent(mLocalAdapter.getBluetoothState());
-
         if (mDiscoverableEnabler != null) {
             mDiscoverableEnabler.resume();
         }
+        getActivity().registerReceiver(mReceiver, mIntentFilter);
 
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
-        filter.addAction(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED);
-        getActivity().registerReceiver(mReceiver, filter);
+        updateContent(mLocalAdapter.getBluetoothState());
     }
 
     @Override
@@ -174,8 +173,10 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
                 .setEnabled(bluetoothIsEnabled && !isDiscovering)
                 .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
         menu.add(Menu.NONE, MENU_ID_RENAME_DEVICE, 0, R.string.bluetooth_rename_device)
-                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+                .setEnabled(bluetoothIsEnabled)
+                .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
         menu.add(Menu.NONE, MENU_ID_VISIBILITY_TIMEOUT, 0, R.string.bluetooth_visibility_timeout)
+                .setEnabled(bluetoothIsEnabled)
                 .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
         menu.add(Menu.NONE, MENU_ID_SHOW_RECEIVED, 0, R.string.bluetooth_show_received_files)
                 .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
@@ -233,7 +234,6 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
 
     private void updateContent(int bluetoothState) {
         final PreferenceScreen preferenceScreen = getPreferenceScreen();
-        getActivity().invalidateOptionsMenu();
         int messageId = 0;
 
         switch (bluetoothState) {
@@ -245,9 +245,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
                 if (mMyDevicePreference == null) {
                     mMyDevicePreference = new Preference(getActivity());
                 }
-                if (mLocalAdapter != null) {
-                    mMyDevicePreference.setTitle(mLocalAdapter.getName());
-                }
+                mMyDevicePreference.setTitle(mLocalAdapter.getName());
                 mMyDevicePreference.setPersistent(false);
                 mMyDevicePreference.setEnabled(true);
                 preferenceScreen.addPreference(mMyDevicePreference);
@@ -255,6 +253,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
                 if (mDiscoverableEnabler == null) {
                     mDiscoverableEnabler = new BluetoothDiscoverableEnabler(getActivity(),
                             mLocalAdapter, mMyDevicePreference);
+                    mDiscoverableEnabler.resume();
                 }
 
                 // Paired devices category
@@ -291,14 +290,12 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
                     preferenceScreen.removePreference(mPairedDevicesCategory);
                     startScanning();
                 }
+                getActivity().invalidateOptionsMenu();
                 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; // not break
+                messageId = R.string.bluetooth_turning_off;
+                break;
 
             case BluetoothAdapter.STATE_OFF:
                 messageId = R.string.bluetooth_empty_list_bluetooth_off;
@@ -312,6 +309,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
         setDeviceListGroup(preferenceScreen);
         removeAllDevices();
         mEmptyView.setText(messageId);
+        getActivity().invalidateOptionsMenu();
     }
 
     @Override
index 9783fd7..53bd33c 100644 (file)
@@ -151,7 +151,6 @@ public abstract class DeviceListPreferenceFragment extends
 
     public void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
         if (mDevicePreferenceMap.get(cachedDevice) != null) {
-            Log.e(TAG, "Got onDeviceAdded, but cachedDevice already exists");
             return;
         }