Fix some Bluetooth settings bugs.

- 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
This commit is contained in:
Jake Hamby
2011-07-19 20:03:25 -07:00
parent 672b3c6576
commit 49cfe8a3c8
5 changed files with 36 additions and 95 deletions

View File

@@ -290,9 +290,12 @@
<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="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> <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> <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 --> <!-- Strings for device profile auto connect setting -->
<string name="bluetooth_auto_connect">Auto connect</string> <string name="bluetooth_auto_connect">Auto connect</string>

View File

@@ -144,12 +144,24 @@ final class BluetoothDiscoverableEnabler implements Preference.OnPreferenceClick
if (getDiscoverableTimeout() == DISCOVERABLE_TIMEOUT_NEVER) { if (getDiscoverableTimeout() == DISCOVERABLE_TIMEOUT_NEVER) {
mDiscoveryPreference.setSummary(R.string.bluetooth_is_discoverable_always); mDiscoveryPreference.setSummary(R.string.bluetooth_is_discoverable_always);
} else { } else {
String textTimeout = DateUtils.formatElapsedTime(timeout); String textTimeout = formatTimeRemaining(timeout);
mDiscoveryPreference.setSummary(mContext.getString(R.string.bluetooth_is_discoverable, mDiscoveryPreference.setSummary(mContext.getString(R.string.bluetooth_is_discoverable,
textTimeout)); 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) { void setDiscoverableTimeout(int index) {
String timeoutValue; String timeoutValue;
switch (index) { switch (index) {

View File

@@ -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);
}
}
}

View File

@@ -72,6 +72,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
private View mView; private View mView;
private TextView mEmptyView; private TextView mEmptyView;
private final IntentFilter mIntentFilter;
// accessed from inner class (not private to avoid thunks) // accessed from inner class (not private to avoid thunks)
Preference mMyDevicePreference; Preference mMyDevicePreference;
@@ -79,21 +81,22 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
String action = intent.getAction(); String action = intent.getAction();
if (action.equals(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED) || if (action.equals(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED)) {
(action.equals(BluetoothAdapter.ACTION_STATE_CHANGED) &&
(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
BluetoothAdapter.ERROR) == BluetoothAdapter.STATE_ON))) {
updateDeviceName(); updateDeviceName();
} }
} }
private void updateDeviceName() { private void updateDeviceName() {
if (mLocalAdapter != null && mLocalAdapter.isEnabled() && mMyDevicePreference != null) { if (mLocalAdapter.isEnabled() && mMyDevicePreference != null) {
mMyDevicePreference.setTitle(mLocalAdapter.getName()); mMyDevicePreference.setTitle(mLocalAdapter.getName());
} }
} }
}; };
public BluetoothSettings() {
mIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED);
}
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
@@ -142,16 +145,12 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
super.onResume(); super.onResume();
mBluetoothEnabler.resume(); mBluetoothEnabler.resume();
updateContent(mLocalAdapter.getBluetoothState());
if (mDiscoverableEnabler != null) { if (mDiscoverableEnabler != null) {
mDiscoverableEnabler.resume(); mDiscoverableEnabler.resume();
} }
getActivity().registerReceiver(mReceiver, mIntentFilter);
IntentFilter filter = new IntentFilter(); updateContent(mLocalAdapter.getBluetoothState());
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED);
getActivity().registerReceiver(mReceiver, filter);
} }
@Override @Override
@@ -174,8 +173,10 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
.setEnabled(bluetoothIsEnabled && !isDiscovering) .setEnabled(bluetoothIsEnabled && !isDiscovering)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add(Menu.NONE, MENU_ID_RENAME_DEVICE, 0, R.string.bluetooth_rename_device) 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) menu.add(Menu.NONE, MENU_ID_VISIBILITY_TIMEOUT, 0, R.string.bluetooth_visibility_timeout)
.setEnabled(bluetoothIsEnabled)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
menu.add(Menu.NONE, MENU_ID_SHOW_RECEIVED, 0, R.string.bluetooth_show_received_files) menu.add(Menu.NONE, MENU_ID_SHOW_RECEIVED, 0, R.string.bluetooth_show_received_files)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
@@ -233,7 +234,6 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
private void updateContent(int bluetoothState) { private void updateContent(int bluetoothState) {
final PreferenceScreen preferenceScreen = getPreferenceScreen(); final PreferenceScreen preferenceScreen = getPreferenceScreen();
getActivity().invalidateOptionsMenu();
int messageId = 0; int messageId = 0;
switch (bluetoothState) { switch (bluetoothState) {
@@ -245,9 +245,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
if (mMyDevicePreference == null) { if (mMyDevicePreference == null) {
mMyDevicePreference = new Preference(getActivity()); mMyDevicePreference = new Preference(getActivity());
} }
if (mLocalAdapter != null) { mMyDevicePreference.setTitle(mLocalAdapter.getName());
mMyDevicePreference.setTitle(mLocalAdapter.getName());
}
mMyDevicePreference.setPersistent(false); mMyDevicePreference.setPersistent(false);
mMyDevicePreference.setEnabled(true); mMyDevicePreference.setEnabled(true);
preferenceScreen.addPreference(mMyDevicePreference); preferenceScreen.addPreference(mMyDevicePreference);
@@ -255,6 +253,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
if (mDiscoverableEnabler == null) { if (mDiscoverableEnabler == null) {
mDiscoverableEnabler = new BluetoothDiscoverableEnabler(getActivity(), mDiscoverableEnabler = new BluetoothDiscoverableEnabler(getActivity(),
mLocalAdapter, mMyDevicePreference); mLocalAdapter, mMyDevicePreference);
mDiscoverableEnabler.resume();
} }
// Paired devices category // Paired devices category
@@ -291,14 +290,12 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
preferenceScreen.removePreference(mPairedDevicesCategory); preferenceScreen.removePreference(mPairedDevicesCategory);
startScanning(); startScanning();
} }
getActivity().invalidateOptionsMenu();
return; // not break return; // not break
case BluetoothAdapter.STATE_TURNING_OFF: case BluetoothAdapter.STATE_TURNING_OFF:
int preferenceCount = preferenceScreen.getPreferenceCount(); messageId = R.string.bluetooth_turning_off;
for (int i = 0; i < preferenceCount; i++) { break;
preferenceScreen.getPreference(i).setEnabled(false);
}
return; // not break
case BluetoothAdapter.STATE_OFF: case BluetoothAdapter.STATE_OFF:
messageId = R.string.bluetooth_empty_list_bluetooth_off; messageId = R.string.bluetooth_empty_list_bluetooth_off;
@@ -312,6 +309,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
setDeviceListGroup(preferenceScreen); setDeviceListGroup(preferenceScreen);
removeAllDevices(); removeAllDevices();
mEmptyView.setText(messageId); mEmptyView.setText(messageId);
getActivity().invalidateOptionsMenu();
} }
@Override @Override

View File

@@ -151,7 +151,6 @@ public abstract class DeviceListPreferenceFragment extends
public void onDeviceAdded(CachedBluetoothDevice cachedDevice) { public void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
if (mDevicePreferenceMap.get(cachedDevice) != null) { if (mDevicePreferenceMap.get(cachedDevice) != null) {
Log.e(TAG, "Got onDeviceAdded, but cachedDevice already exists");
return; return;
} }