X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosdroid%2Fsrc%2Forg%2Faltusmetrum%2FAltosDroid%2FDeviceListActivity.java;h=71692122b8def9d96839a9f70414d0f74ecf20e3;hb=5aae1446026a08bf8f09c56b960545eff30a8bd1;hp=af5d7f15650b52ef5a927e9f84d685336ed77ca0;hpb=a48e4d40729e736929632ec422fd189ecdfba33b;p=fw%2Faltos diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/DeviceListActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/DeviceListActivity.java index af5d7f15..71692122 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/DeviceListActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/DeviceListActivity.java @@ -45,159 +45,161 @@ import android.widget.AdapterView.OnItemClickListener; * Activity in the result Intent. */ public class DeviceListActivity extends Activity { - // Debugging - private static final String TAG = "DeviceListActivity"; - private static final boolean D = true; - - // Return Intent extra - public static String EXTRA_DEVICE_ADDRESS = "device_address"; - - // Member fields - private BluetoothAdapter mBtAdapter; - private ArrayAdapter mPairedDevicesArrayAdapter; - private ArrayAdapter mNewDevicesArrayAdapter; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // Setup the window - requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); - setContentView(R.layout.device_list); - - // Set result CANCELED incase the user backs out - setResult(Activity.RESULT_CANCELED); - - // Initialize the button to perform device discovery - Button scanButton = (Button) findViewById(R.id.button_scan); - scanButton.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - doDiscovery(); - v.setVisibility(View.GONE); - } - }); - - // Initialize array adapters. One for already paired devices and - // one for newly discovered devices - mPairedDevicesArrayAdapter = new ArrayAdapter(this, R.layout.device_name); - mNewDevicesArrayAdapter = new ArrayAdapter(this, R.layout.device_name); - - // Find and set up the ListView for paired devices - ListView pairedListView = (ListView) findViewById(R.id.paired_devices); - pairedListView.setAdapter(mPairedDevicesArrayAdapter); - pairedListView.setOnItemClickListener(mDeviceClickListener); - - // Find and set up the ListView for newly discovered devices - ListView newDevicesListView = (ListView) findViewById(R.id.new_devices); - newDevicesListView.setAdapter(mNewDevicesArrayAdapter); - newDevicesListView.setOnItemClickListener(mDeviceClickListener); - - // Register for broadcasts when a device is discovered - IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); - this.registerReceiver(mReceiver, filter); - - // Register for broadcasts when discovery has finished - filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); - this.registerReceiver(mReceiver, filter); - - // Get the local Bluetooth adapter - mBtAdapter = BluetoothAdapter.getDefaultAdapter(); - - // Get a set of currently paired devices - Set pairedDevices = mBtAdapter.getBondedDevices(); - - // If there are paired devices, add each one to the ArrayAdapter - if (pairedDevices.size() > 0) { - findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE); - for (BluetoothDevice device : pairedDevices) { - mPairedDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress()); - } - } else { - String noDevices = getResources().getText(R.string.none_paired).toString(); - mPairedDevicesArrayAdapter.add(noDevices); - } - } - - @Override - protected void onDestroy() { - super.onDestroy(); - - // Make sure we're not doing discovery anymore - if (mBtAdapter != null) { - mBtAdapter.cancelDiscovery(); - } - - // Unregister broadcast listeners - this.unregisterReceiver(mReceiver); - } - - /** - * Start device discover with the BluetoothAdapter - */ - private void doDiscovery() { - if (D) Log.d(TAG, "doDiscovery()"); - - // Indicate scanning in the title - setProgressBarIndeterminateVisibility(true); - setTitle(R.string.scanning); - - // Turn on sub-title for new devices - findViewById(R.id.title_new_devices).setVisibility(View.VISIBLE); - - // If we're already discovering, stop it - if (mBtAdapter.isDiscovering()) { - mBtAdapter.cancelDiscovery(); - } - - // Request discover from BluetoothAdapter - mBtAdapter.startDiscovery(); - } - - // The on-click listener for all devices in the ListViews - private OnItemClickListener mDeviceClickListener = new OnItemClickListener() { - public void onItemClick(AdapterView av, View v, int arg2, long arg3) { - // Cancel discovery because it's costly and we're about to connect - mBtAdapter.cancelDiscovery(); - - // Get the device MAC address, which is the last 17 chars in the View - String info = ((TextView) v).getText().toString(); - String address = info.substring(info.length() - 17); - - // Create the result Intent and include the MAC address - Intent intent = new Intent(); - intent.putExtra(EXTRA_DEVICE_ADDRESS, address); - - // Set result and finish this Activity - setResult(Activity.RESULT_OK, intent); - finish(); - } - }; - - // The BroadcastReceiver that listens for discovered devices and - // changes the title when discovery is finished - private final BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - - // When discovery finds a device - if (BluetoothDevice.ACTION_FOUND.equals(action)) { - // Get the BluetoothDevice object from the Intent - BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); - // If it's already paired, skip it, because it's been listed already - if (device.getBondState() != BluetoothDevice.BOND_BONDED) { - mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress()); - } - // When discovery is finished, change the Activity title - } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { - setProgressBarIndeterminateVisibility(false); - setTitle(R.string.select_device); - if (mNewDevicesArrayAdapter.getCount() == 0) { - String noDevices = getResources().getText(R.string.none_found).toString(); - mNewDevicesArrayAdapter.add(noDevices); - } - } - } - }; + // Debugging + private static final String TAG = "DeviceListActivity"; + private static final boolean D = true; + + // Return Intent extra + public static String EXTRA_DEVICE_ADDRESS = "device_address"; + + // Member fields + private BluetoothAdapter mBtAdapter; + private ArrayAdapter mPairedDevicesArrayAdapter; + private ArrayAdapter mNewDevicesArrayAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Setup the window + requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + setContentView(R.layout.device_list); + + // Set result CANCELED incase the user backs out + setResult(Activity.RESULT_CANCELED); + + // Initialize the button to perform device discovery + Button scanButton = (Button) findViewById(R.id.button_scan); + scanButton.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + doDiscovery(); + v.setVisibility(View.GONE); + } + }); + + // Initialize array adapters. One for already paired devices and + // one for newly discovered devices + mPairedDevicesArrayAdapter = new ArrayAdapter(this, R.layout.device_name); + mNewDevicesArrayAdapter = new ArrayAdapter(this, R.layout.device_name); + + // Find and set up the ListView for paired devices + ListView pairedListView = (ListView) findViewById(R.id.paired_devices); + pairedListView.setAdapter(mPairedDevicesArrayAdapter); + pairedListView.setOnItemClickListener(mDeviceClickListener); + + // Find and set up the ListView for newly discovered devices + ListView newDevicesListView = (ListView) findViewById(R.id.new_devices); + newDevicesListView.setAdapter(mNewDevicesArrayAdapter); + newDevicesListView.setOnItemClickListener(mDeviceClickListener); + + // Register for broadcasts when a device is discovered + IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); + this.registerReceiver(mReceiver, filter); + + // Register for broadcasts when discovery has finished + filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); + this.registerReceiver(mReceiver, filter); + + // Get the local Bluetooth adapter + mBtAdapter = BluetoothAdapter.getDefaultAdapter(); + + // Get a set of currently paired devices + Set pairedDevices = mBtAdapter.getBondedDevices(); + + // If there are paired devices, add each one to the ArrayAdapter + if (pairedDevices.size() > 0) { + findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE); + for (BluetoothDevice device : pairedDevices) + if (device.getName().startsWith("TeleBT")) + mPairedDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress()); + + } else { + String noDevices = getResources().getText(R.string.none_paired).toString(); + mPairedDevicesArrayAdapter.add(noDevices); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + + // Make sure we're not doing discovery anymore + if (mBtAdapter != null) { + mBtAdapter.cancelDiscovery(); + } + + // Unregister broadcast listeners + this.unregisterReceiver(mReceiver); + } + + /** + * Start device discover with the BluetoothAdapter + */ + private void doDiscovery() { + if (D) Log.d(TAG, "doDiscovery()"); + + // Indicate scanning in the title + setProgressBarIndeterminateVisibility(true); + setTitle(R.string.scanning); + + // Turn on sub-title for new devices + findViewById(R.id.title_new_devices).setVisibility(View.VISIBLE); + + // If we're already discovering, stop it + if (mBtAdapter.isDiscovering()) { + mBtAdapter.cancelDiscovery(); + } + + // Request discover from BluetoothAdapter + mBtAdapter.startDiscovery(); + } + + // The on-click listener for all devices in the ListViews + private OnItemClickListener mDeviceClickListener = new OnItemClickListener() { + public void onItemClick(AdapterView av, View v, int arg2, long arg3) { + // Cancel discovery because it's costly and we're about to connect + mBtAdapter.cancelDiscovery(); + + // Get the device MAC address, which is the last 17 chars in the View + String info = ((TextView) v).getText().toString(); + String address = info.substring(info.length() - 17); + + // Create the result Intent and include the MAC address + Intent intent = new Intent(); + intent.putExtra(EXTRA_DEVICE_ADDRESS, address); + + // Set result and finish this Activity + setResult(Activity.RESULT_OK, intent); + finish(); + } + }; + + // The BroadcastReceiver that listens for discovered devices and + // changes the title when discovery is finished + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + + // When discovery finds a device + if (BluetoothDevice.ACTION_FOUND.equals(action)) { + // Get the BluetoothDevice object from the Intent + BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); + // If it's already paired, skip it, because it's been listed already + if ( device.getBondState() != BluetoothDevice.BOND_BONDED + && device.getName().startsWith("TeleBT") ) { + mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress()); + } + // When discovery is finished, change the Activity title + } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { + setProgressBarIndeterminateVisibility(false); + setTitle(R.string.select_device); + if (mNewDevicesArrayAdapter.getCount() == 0) { + String noDevices = getResources().getText(R.string.none_found).toString(); + mNewDevicesArrayAdapter.add(noDevices); + } + } + } + }; }