FileDocCategorySizeDatePackage
BluetoothSettings.javaAPI DocAndroid 1.5 API8883Wed May 06 22:42:48 BST 2009com.android.settings.bluetooth

BluetoothSettings

public class BluetoothSettings extends android.preference.PreferenceActivity implements LocalBluetoothManager.Callback
BluetoothSettings is the Settings screen for Bluetooth configuration and connection management.

Fields Summary
private static final String
TAG
private static final int
MENU_SCAN
private static final String
KEY_BT_CHECKBOX
private static final String
KEY_BT_DISCOVERABLE
private static final String
KEY_BT_DEVICE_LIST
private static final String
KEY_BT_NAME
private static final String
KEY_BT_SCAN
private LocalBluetoothManager
mLocalManager
private BluetoothEnabler
mEnabler
private BluetoothDiscoverableEnabler
mDiscoverableEnabler
private BluetoothNamePreference
mNamePreference
private com.android.settings.ProgressCategory
mDeviceList
private WeakHashMap
mDevicePreferenceMap
private final android.content.BroadcastReceiver
mReceiver
Constructors Summary
Methods Summary
private voidaddDevices()

        List<LocalBluetoothDevice> devices = mLocalManager.getLocalDeviceManager().getDevicesCopy();
        for (LocalBluetoothDevice device : devices) {
            onDeviceAdded(device);
        }
    
private voidcreateDevicePreference(LocalBluetoothDevice device)

        BluetoothDevicePreference preference = new BluetoothDevicePreference(this, device);
        mDeviceList.addPreference(preference);
        mDevicePreferenceMap.put(device, preference);
    
private LocalBluetoothDevicegetDeviceFromMenuInfo(android.view.ContextMenu.ContextMenuInfo menuInfo)

        if ((menuInfo == null) || !(menuInfo instanceof AdapterContextMenuInfo)) {
            return null;
        }
        
        AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo) menuInfo;
        Preference pref = (Preference) getPreferenceScreen().getRootAdapter().getItem(
                adapterMenuInfo.position);
        if (pref == null || !(pref instanceof BluetoothDevicePreference)) {
            return null;
        }

        return ((BluetoothDevicePreference) pref).getDevice();
    
private voidonBluetoothStateChanged(int bluetoothState)

        // When bluetooth is enabled (and we are in the activity, which we are),
        // we should start a scan
        if (bluetoothState == BluetoothDevice.BLUETOOTH_STATE_ON) {
            mLocalManager.startScanning(false);
        } else if (bluetoothState == BluetoothDevice.BLUETOOTH_STATE_OFF) {
            mDeviceList.setProgress(false);
        }
    
public booleanonContextItemSelected(android.view.MenuItem item)

        LocalBluetoothDevice device = getDeviceFromMenuInfo(item.getMenuInfo());
        if (device == null) return false;
        
        device.onContextItemSelected(item);
        return true;
    
protected voidonCreate(android.os.Bundle savedInstanceState)


    
        
        super.onCreate(savedInstanceState);

        mLocalManager = LocalBluetoothManager.getInstance(this);
        if (mLocalManager == null) finish();        
        
        addPreferencesFromResource(R.xml.bluetooth_settings);
        
        mEnabler = new BluetoothEnabler(
                this,
                (CheckBoxPreference) findPreference(KEY_BT_CHECKBOX));
        
        mDiscoverableEnabler = new BluetoothDiscoverableEnabler(
                this,
                (CheckBoxPreference) findPreference(KEY_BT_DISCOVERABLE));
    
        mNamePreference = (BluetoothNamePreference) findPreference(KEY_BT_NAME);
        
        mDeviceList = (ProgressCategory) findPreference(KEY_BT_DEVICE_LIST);
        
        registerForContextMenu(getListView());
    
public voidonCreateContextMenu(android.view.ContextMenu menu, android.view.View v, android.view.ContextMenu.ContextMenuInfo menuInfo)

        LocalBluetoothDevice device = getDeviceFromMenuInfo(menuInfo);
        if (device == null) return;
        
        device.onCreateContextMenu(menu);
    
public booleanonCreateOptionsMenu(android.view.Menu menu)

        menu.add(0, MENU_SCAN, 0, R.string.bluetooth_scan_for_devices)
                .setIcon(com.android.internal.R.drawable.ic_menu_refresh)
                .setAlphabeticShortcut('r");
        return true;
    
public voidonDeviceAdded(LocalBluetoothDevice device)


        if (mDevicePreferenceMap.get(device) != null) {
            throw new IllegalStateException("Got onDeviceAdded, but device already exists");
        }
        
        createDevicePreference(device);            
    
public voidonDeviceDeleted(LocalBluetoothDevice device)

        BluetoothDevicePreference preference = mDevicePreferenceMap.remove(device);
        if (preference != null) {
            mDeviceList.removePreference(preference);
        }
    
public booleanonOptionsItemSelected(android.view.MenuItem item)

        switch (item.getItemId()) {
        
            case MENU_SCAN:
                mLocalManager.startScanning(true);
                return true;
                
            default:
                return false;
        }
    
protected voidonPause()

        super.onPause();

        mLocalManager.setForegroundActivity(null);
        
        unregisterReceiver(mReceiver);
        
        mLocalManager.unregisterCallback(this);
        mNamePreference.pause();
        mDiscoverableEnabler.pause();
        mEnabler.pause();
    
public booleanonPreferenceTreeClick(android.preference.PreferenceScreen preferenceScreen, android.preference.Preference preference)


        if (KEY_BT_SCAN.equals(preference.getKey())) {
            mLocalManager.startScanning(true);
            return true;
        }
        
        if (preference instanceof BluetoothDevicePreference) {
            BluetoothDevicePreference btPreference = (BluetoothDevicePreference) preference;
            btPreference.getDevice().onClicked();
            return true;
        }
        
        return super.onPreferenceTreeClick(preferenceScreen, preference);
    
public booleanonPrepareOptionsMenu(android.view.Menu menu)

        menu.findItem(MENU_SCAN).setEnabled(mLocalManager.getBluetoothManager().isEnabled());
        return true;
    
protected voidonResume()

        super.onResume();
        
        // Repopulate (which isn't too bad since it's cached in the settings
        // bluetooth manager
        mDevicePreferenceMap.clear();
        mDeviceList.removeAll();
        addDevices();

        mEnabler.resume();
        mDiscoverableEnabler.resume();
        mNamePreference.resume();
        mLocalManager.registerCallback(this);
        
        mLocalManager.startScanning(false);

        registerReceiver(mReceiver,
                new IntentFilter(BluetoothIntent.BLUETOOTH_STATE_CHANGED_ACTION));
        
        mLocalManager.setForegroundActivity(this);
    
public voidonScanningStateChanged(boolean started)

        mDeviceList.setProgress(started);