package com.hairysoft.cockcrow;
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.Handler;
import com.hairysoft.util.Log;
import com.hairysoft.bt.ConnectThread;
/**
* This class is bound to perform the Waky device discovery.
* Upon successful discover, instantiates a thread to connect with it
*/
public class WakyBluetoothService {
private final static String TAG = "WakyBluetoothService";
private final String WAKY_NAME = "Waky Waky";
private final Context c;
private final Handler mHandler;
private final BluetoothAdapter mAdapter;
private final IntentFilter mFilter;
private BluetoothDevice waky;
public WakyBluetoothService(Context c, Handler handler) {
this.c = c;
mHandler = handler;
mAdapter = BluetoothAdapter.getDefaultAdapter();
mFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
}
public void discoverWaky(boolean force) {
if(waky == null || force) {
c.registerReceiver(mReceiver, mFilter);
if (mAdapter.isDiscovering()) {
mAdapter.cancelDiscovery();
}
Log.d(TAG, "Starting discovery...");
mAdapter.startDiscovery();
} else {
connect();
}
}
public void discoverWaky() {
discoverWaky(false);
}
public void holdWaky() {
mAdapter.cancelDiscovery();
try {
c.unregisterReceiver(mReceiver);
} catch(Exception ex) { }
Log.d(TAG, "Bubye waky...");
}
private void connect() {
try {
c.unregisterReceiver(mReceiver);
} catch(Exception ex) { }
new ConnectThread(c, mHandler, waky).start();
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if(device.getName() != null && device.getName().equals(WAKY_NAME)) {
Log.d(TAG, "Found what appears to be waky!");
waky = device;
mAdapter.cancelDiscovery();
connect();
} else {
Log.d(TAG, "Found device named: " + device.getName());
}
}
}
};
}