Initial implementation of a synchronize behaviour where two devices can synchronize there executions
This commit is contained in:
parent
858c709dc4
commit
4ecca44cc1
1 changed files with 210 additions and 0 deletions
210
app/src/main/java/com/ericsson/uecontrol/core/logic/UeBehaviourSynchronize.java
Executable file
210
app/src/main/java/com/ericsson/uecontrol/core/logic/UeBehaviourSynchronize.java
Executable file
|
|
@ -0,0 +1,210 @@
|
|||
package com.ericsson.uecontrol.core.logic;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
import android.bluetooth.BluetoothServerSocket;
|
||||
import android.bluetooth.BluetoothSocket;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import com.ericsson.uecontrol.core.UeBehaviour;
|
||||
import com.ericsson.uecontrol.core.util.Configurator.Configurable;
|
||||
import com.ericsson.uecontrol.gui.MainActivity;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Created by ezivkoc on 2015-01-19.
|
||||
*/
|
||||
public class UeBehaviourSynchronize extends UeBehaviour {
|
||||
private static final Logger log = Logger.getLogger(UeBehaviourSynchronize.class);
|
||||
private final String SERVICE_UUID = "5ef27dac-a003-11e4-89d3-123b93f75cba";
|
||||
|
||||
@Override
|
||||
protected void execute() throws Exception {
|
||||
log.debug("Terminating execution");
|
||||
super.getExecutor().setNextBehaviour(0);
|
||||
log.debug("Resetting executor");
|
||||
super.getExecutor().reset();
|
||||
Thread.sleep(VISUAL_SLEEP_PERIOD); // Sleep as a visual queue
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Synchronize";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Will stop synchronize with a remote device";
|
||||
}
|
||||
|
||||
|
||||
class AcceptThread extends Thread {
|
||||
private final BluetoothServerSocket mmServerSocket;
|
||||
|
||||
public AcceptThread() {
|
||||
// Use a temporary object that is later assigned to mmServerSocket,
|
||||
// because mmServerSocket is final
|
||||
BluetoothServerSocket tmp = null;
|
||||
try {
|
||||
BluetoothAdapter mBluetoothAdapter = BluetoothUtil.getAdapter();
|
||||
// MY_UUID is the app's UUID string, also used by the client code
|
||||
tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("uecontrol", UUID.fromString(SERVICE_UUID));
|
||||
} catch (IOException e) { }
|
||||
mmServerSocket = tmp;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
BluetoothSocket socket = null;
|
||||
// Keep listening until exception occurs or a socket is returned
|
||||
while (true) {
|
||||
try {
|
||||
socket = mmServerSocket.accept();
|
||||
} catch (IOException e) {
|
||||
break;
|
||||
}
|
||||
// If a connection was accepted
|
||||
if (socket != null) {
|
||||
// Do work to manage the connection (in a separate thread)
|
||||
manageConnectedSocket(socket);
|
||||
mmServerSocket.close();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}catch (Exception e){
|
||||
log.trace(null, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void manageConnectedSocket(BluetoothSocket socket) {
|
||||
|
||||
}
|
||||
|
||||
/** Will cancel the listening socket, and cause the thread to finish */
|
||||
public void cancel() {
|
||||
try {
|
||||
mmServerSocket.close();
|
||||
} catch (IOException e) { }
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private class ConnectThread extends Thread {
|
||||
private final BluetoothSocket mmSocket;
|
||||
private final BluetoothDevice mmDevice;
|
||||
|
||||
public ConnectThread(BluetoothDevice device) {
|
||||
// Use a temporary object that is later assigned to mmSocket,
|
||||
// because mmSocket is final
|
||||
BluetoothSocket tmp = null;
|
||||
mmDevice = device;
|
||||
|
||||
// Get a BluetoothSocket to connect with the given BluetoothDevice
|
||||
try {
|
||||
// MY_UUID is the app's UUID string, also used by the server code
|
||||
tmp = device.createRfcommSocketToServiceRecord(UUID.fromString(SERVICE_UUID));
|
||||
} catch (IOException e) { }
|
||||
mmSocket = tmp;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
BluetoothAdapter mBluetoothAdapter = BluetoothUtil.getAdapter();
|
||||
// Cancel discovery because it will slow down the connection
|
||||
mBluetoothAdapter.cancelDiscovery();
|
||||
|
||||
try {
|
||||
// Connect the device through the socket. This will block
|
||||
// until it succeeds or throws an exception
|
||||
mmSocket.connect();
|
||||
} catch (IOException connectException) {
|
||||
// Unable to connect; close the socket and get out
|
||||
try {
|
||||
mmSocket.close();
|
||||
} catch (IOException closeException) { }
|
||||
return;
|
||||
}
|
||||
|
||||
// Do work to manage the connection (in a separate thread)
|
||||
manageConnectedSocket(mmSocket);
|
||||
}
|
||||
|
||||
private void manageConnectedSocket(BluetoothSocket mmSocket) {
|
||||
|
||||
}
|
||||
|
||||
/** Will cancel an in-progress connection, and close the socket */
|
||||
public void cancel() {
|
||||
try {
|
||||
mmSocket.close();
|
||||
} catch (IOException e) { }
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class BluetoothUtil{
|
||||
public static BluetoothAdapter getAdapter(){
|
||||
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||
if (mBluetoothAdapter == null) {
|
||||
if (!mBluetoothAdapter.isEnabled()) {
|
||||
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
|
||||
((Activity)MainActivity.getContext()).startActivityForResult(enableBtIntent, 1515);
|
||||
}
|
||||
}
|
||||
return mBluetoothAdapter;
|
||||
}
|
||||
|
||||
public static void getPairedDevices(){
|
||||
BluetoothAdapter mBluetoothAdapter = getAdapter();
|
||||
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
|
||||
// If there are paired devices
|
||||
if (pairedDevices.size() > 0) {
|
||||
// Loop through paired devices
|
||||
for (BluetoothDevice device : pairedDevices) {
|
||||
// Add the name and address to an array adapter to show in a ListView
|
||||
//log.debug("Paired: " + device.getName() + "\n" + device.getAddress());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void discover(){
|
||||
// Create a BroadcastReceiver for ACTION_FOUND
|
||||
final BroadcastReceiver mReceiver = new BroadcastReceiver() {
|
||||
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);
|
||||
// Add the name and address to an array adapter to show in a ListView
|
||||
//log.debug("Discovered: "+device.getName() + "\n" + device.getAddress());
|
||||
}
|
||||
}
|
||||
};
|
||||
// Register the BroadcastReceiver
|
||||
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
|
||||
MainActivity.getContext().registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy
|
||||
}
|
||||
|
||||
public void setDiscoverable(){
|
||||
Intent discoverableIntent = new
|
||||
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
|
||||
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
|
||||
MainActivity.getContext().startActivity(discoverableIntent);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue