package greendrm.bluethooth.client;
import java.util.ArrayList;
import java.util.Set;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public class DeviceListActivity extends Activity {
private static final String TAG = "DeviceList";
// Return Intent extra
private static final String EXTRA_DEVICE_ADDRESS = "device_address";
private ListView mList;
private ArrayList<DeviceList> devices;
private DeviceAdapter adapter;
private BluetoothAdapter mBTAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Setup the window
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.devicelist);
// Set result CANCELED when user backs out
setResult(Activity.RESULT_CANCELED);
mBTAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBTAdapter == null) {
Log.i(TAG, "device does not support Bluetooth");
finish();
}
mList = (ListView)findViewById(R.id.listView1);
devices = new ArrayList<DeviceList>();
adapter = new DeviceAdapter(devices);
mList.setAdapter(adapter);
mList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
DeviceList device = devices.get(position);
// Create the result Intent and include the MAC address
Intent intent = new Intent();
intent.putExtra(EXTRA_DEVICE_ADDRESS, device.getAddress());
// Set result and finish this Activity
setResult(Activity.RESULT_OK, intent);
finish();
}
});
IntentFilter filter = new IntentFilter();
// Register for broadcasts when a device is discovered
filter.addAction(BluetoothDevice.ACTION_FOUND);
// Register for broadcasts when discovery has finished
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(mReceiver, filter);
setProgressBarIndeterminateVisibility(true);
setTitle("Bluetooth Devices");
// Paired Bluetooth
Set<BluetoothDevice> pairedDevice = mBTAdapter.getBondedDevices();
if (pairedDevice.size() != 0) {
for (BluetoothDevice device: pairedDevice) {
devices.add(new DeviceList(device.getName(), device.getAddress()));
}
}
// Request discover from BluetoothAdapter
mBTAdapter.startDiscovery();
}
@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);
}
// 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);
devices.add(new DeviceList(device.getName(), device.getAddress()));
adapter.notifyDataSetChanged();
// When discovery is finished, change the Activity title
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
setProgressBarIndeterminateVisibility(false);
}
}
};
class DeviceAdapter extends BaseAdapter {
private ArrayList<DeviceList> object;
public DeviceAdapter(ArrayList<DeviceList> object) {
super();
this.object = object;
}
@Override
public int getCount() {
return object.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(DeviceListActivity.this);
convertView = inflater.inflate(R.layout.list2, parent, false);
holder = new ViewHolder();
holder.image = (ImageView)convertView.findViewById(R.id.imageView1);
holder.txtName = (TextView)convertView.findViewById(R.id.textView1);
holder.txtAddress = (TextView)convertView.findViewById(R.id.textView2);
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
String name = object.get(position).getName();
String address = object.get(position).getAddress();
//int image = object.get(position).getImage();
//holder.image.setImageResource(image);
holder.txtName.setText(name);
holder.txtAddress.setText(address);
return convertView;
}
}
static class ViewHolder {
ImageView image;
TextView txtName;
TextView txtAddress;
}
private class DeviceList {
private String mmName;
private String mmAddress;
public DeviceList() { }
public DeviceList(String name, String address) {
mmName = name;
mmAddress = address;
}
public String getName() {
return mmName;
}
public void setName(String name) {
this.mmName = name;
}
public String getAddress() {
return mmAddress;
}
public void setAddress(String address) {
this.mmAddress = address;
}
}
}