b/2026622 Fixed the problem with the UI keeps showing that BT is scanning even though it has stopped.

For some reason, the framework does not notify the settings app when the scan is done while the screen is off.
This commit is contained in:
Michael Chan
2009-08-12 14:27:18 -07:00
parent e25e4e4c57
commit e15d3a0cfb

View File

@@ -50,25 +50,25 @@ public class BluetoothSettings extends PreferenceActivity
private static final String TAG = "BluetoothSettings"; private static final String TAG = "BluetoothSettings";
private static final int MENU_SCAN = Menu.FIRST; private static final int MENU_SCAN = Menu.FIRST;
private static final String KEY_BT_CHECKBOX = "bt_checkbox"; private static final String KEY_BT_CHECKBOX = "bt_checkbox";
private static final String KEY_BT_DISCOVERABLE = "bt_discoverable"; private static final String KEY_BT_DISCOVERABLE = "bt_discoverable";
private static final String KEY_BT_DEVICE_LIST = "bt_device_list"; private static final String KEY_BT_DEVICE_LIST = "bt_device_list";
private static final String KEY_BT_NAME = "bt_name"; private static final String KEY_BT_NAME = "bt_name";
private static final String KEY_BT_SCAN = "bt_scan"; private static final String KEY_BT_SCAN = "bt_scan";
private LocalBluetoothManager mLocalManager; private LocalBluetoothManager mLocalManager;
private BluetoothEnabler mEnabler; private BluetoothEnabler mEnabler;
private BluetoothDiscoverableEnabler mDiscoverableEnabler; private BluetoothDiscoverableEnabler mDiscoverableEnabler;
private BluetoothNamePreference mNamePreference; private BluetoothNamePreference mNamePreference;
private ProgressCategory mDeviceList; private ProgressCategory mDeviceList;
private WeakHashMap<LocalBluetoothDevice, BluetoothDevicePreference> mDevicePreferenceMap = private WeakHashMap<LocalBluetoothDevice, BluetoothDevicePreference> mDevicePreferenceMap =
new WeakHashMap<LocalBluetoothDevice, BluetoothDevicePreference>(); new WeakHashMap<LocalBluetoothDevice, BluetoothDevicePreference>();
private final BroadcastReceiver mReceiver = new BroadcastReceiver() { private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
@@ -82,29 +82,29 @@ public class BluetoothSettings extends PreferenceActivity
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mLocalManager = LocalBluetoothManager.getInstance(this); mLocalManager = LocalBluetoothManager.getInstance(this);
if (mLocalManager == null) finish(); if (mLocalManager == null) finish();
addPreferencesFromResource(R.xml.bluetooth_settings); addPreferencesFromResource(R.xml.bluetooth_settings);
mEnabler = new BluetoothEnabler( mEnabler = new BluetoothEnabler(
this, this,
(CheckBoxPreference) findPreference(KEY_BT_CHECKBOX)); (CheckBoxPreference) findPreference(KEY_BT_CHECKBOX));
mDiscoverableEnabler = new BluetoothDiscoverableEnabler( mDiscoverableEnabler = new BluetoothDiscoverableEnabler(
this, this,
(CheckBoxPreference) findPreference(KEY_BT_DISCOVERABLE)); (CheckBoxPreference) findPreference(KEY_BT_DISCOVERABLE));
mNamePreference = (BluetoothNamePreference) findPreference(KEY_BT_NAME); mNamePreference = (BluetoothNamePreference) findPreference(KEY_BT_NAME);
mDeviceList = (ProgressCategory) findPreference(KEY_BT_DEVICE_LIST); mDeviceList = (ProgressCategory) findPreference(KEY_BT_DEVICE_LIST);
registerForContextMenu(getListView()); registerForContextMenu(getListView());
} }
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
// Repopulate (which isn't too bad since it's cached in the settings // Repopulate (which isn't too bad since it's cached in the settings
// bluetooth manager // bluetooth manager
mDevicePreferenceMap.clear(); mDevicePreferenceMap.clear();
@@ -115,23 +115,24 @@ public class BluetoothSettings extends PreferenceActivity
mDiscoverableEnabler.resume(); mDiscoverableEnabler.resume();
mNamePreference.resume(); mNamePreference.resume();
mLocalManager.registerCallback(this); mLocalManager.registerCallback(this);
mDeviceList.setProgress(mLocalManager.getBluetoothManager().isDiscovering());
mLocalManager.startScanning(false); mLocalManager.startScanning(false);
registerReceiver(mReceiver, registerReceiver(mReceiver,
new IntentFilter(BluetoothIntent.BLUETOOTH_STATE_CHANGED_ACTION)); new IntentFilter(BluetoothIntent.BLUETOOTH_STATE_CHANGED_ACTION));
mLocalManager.setForegroundActivity(this); mLocalManager.setForegroundActivity(this);
} }
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
mLocalManager.setForegroundActivity(null); mLocalManager.setForegroundActivity(null);
unregisterReceiver(mReceiver); unregisterReceiver(mReceiver);
mLocalManager.unregisterCallback(this); mLocalManager.unregisterCallback(this);
mNamePreference.pause(); mNamePreference.pause();
mDiscoverableEnabler.pause(); mDiscoverableEnabler.pause();
@@ -144,7 +145,7 @@ public class BluetoothSettings extends PreferenceActivity
onDeviceAdded(device); onDeviceAdded(device);
} }
} }
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_SCAN, 0, R.string.bluetooth_scan_for_devices) menu.add(0, MENU_SCAN, 0, R.string.bluetooth_scan_for_devices)
@@ -162,11 +163,11 @@ public class BluetoothSettings extends PreferenceActivity
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case MENU_SCAN: case MENU_SCAN:
mLocalManager.startScanning(true); mLocalManager.startScanning(true);
return true; return true;
default: default:
return false; return false;
} }
@@ -180,22 +181,22 @@ public class BluetoothSettings extends PreferenceActivity
mLocalManager.startScanning(true); mLocalManager.startScanning(true);
return true; return true;
} }
if (preference instanceof BluetoothDevicePreference) { if (preference instanceof BluetoothDevicePreference) {
BluetoothDevicePreference btPreference = (BluetoothDevicePreference) preference; BluetoothDevicePreference btPreference = (BluetoothDevicePreference) preference;
btPreference.getDevice().onClicked(); btPreference.getDevice().onClicked();
return true; return true;
} }
return super.onPreferenceTreeClick(preferenceScreen, preference); return super.onPreferenceTreeClick(preferenceScreen, preference);
} }
@Override @Override
public void onCreateContextMenu(ContextMenu menu, View v, public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) { ContextMenuInfo menuInfo) {
LocalBluetoothDevice device = getDeviceFromMenuInfo(menuInfo); LocalBluetoothDevice device = getDeviceFromMenuInfo(menuInfo);
if (device == null) return; if (device == null) return;
device.onCreateContextMenu(menu); device.onCreateContextMenu(menu);
} }
@@ -203,7 +204,7 @@ public class BluetoothSettings extends PreferenceActivity
public boolean onContextItemSelected(MenuItem item) { public boolean onContextItemSelected(MenuItem item) {
LocalBluetoothDevice device = getDeviceFromMenuInfo(item.getMenuInfo()); LocalBluetoothDevice device = getDeviceFromMenuInfo(item.getMenuInfo());
if (device == null) return false; if (device == null) return false;
device.onContextItemSelected(item); device.onContextItemSelected(item);
return true; return true;
} }
@@ -212,7 +213,7 @@ public class BluetoothSettings extends PreferenceActivity
if ((menuInfo == null) || !(menuInfo instanceof AdapterContextMenuInfo)) { if ((menuInfo == null) || !(menuInfo instanceof AdapterContextMenuInfo)) {
return null; return null;
} }
AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo) menuInfo; AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo) menuInfo;
Preference pref = (Preference) getPreferenceScreen().getRootAdapter().getItem( Preference pref = (Preference) getPreferenceScreen().getRootAdapter().getItem(
adapterMenuInfo.position); adapterMenuInfo.position);
@@ -222,14 +223,14 @@ public class BluetoothSettings extends PreferenceActivity
return ((BluetoothDevicePreference) pref).getDevice(); return ((BluetoothDevicePreference) pref).getDevice();
} }
public void onDeviceAdded(LocalBluetoothDevice device) { public void onDeviceAdded(LocalBluetoothDevice device) {
if (mDevicePreferenceMap.get(device) != null) { if (mDevicePreferenceMap.get(device) != null) {
throw new IllegalStateException("Got onDeviceAdded, but device already exists"); throw new IllegalStateException("Got onDeviceAdded, but device already exists");
} }
createDevicePreference(device); createDevicePreference(device);
} }
private void createDevicePreference(LocalBluetoothDevice device) { private void createDevicePreference(LocalBluetoothDevice device) {
@@ -237,7 +238,7 @@ public class BluetoothSettings extends PreferenceActivity
mDeviceList.addPreference(preference); mDeviceList.addPreference(preference);
mDevicePreferenceMap.put(device, preference); mDevicePreferenceMap.put(device, preference);
} }
public void onDeviceDeleted(LocalBluetoothDevice device) { public void onDeviceDeleted(LocalBluetoothDevice device) {
BluetoothDevicePreference preference = mDevicePreferenceMap.remove(device); BluetoothDevicePreference preference = mDevicePreferenceMap.remove(device);
if (preference != null) { if (preference != null) {
@@ -248,7 +249,7 @@ public class BluetoothSettings extends PreferenceActivity
public void onScanningStateChanged(boolean started) { public void onScanningStateChanged(boolean started) {
mDeviceList.setProgress(started); mDeviceList.setProgress(started);
} }
private void onBluetoothStateChanged(int bluetoothState) { private void onBluetoothStateChanged(int bluetoothState) {
// When bluetooth is enabled (and we are in the activity, which we are), // When bluetooth is enabled (and we are in the activity, which we are),
// we should start a scan // we should start a scan