diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2015-01-04 11:12:12 +0100 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2015-01-04 11:12:12 +0100 |
commit | 1b9a4defe73f3aa8c10aa4af49002f0cebd1c292 (patch) | |
tree | 3a6b5bdae9eb6e35fd024bb5d3f7da6dbd2b0732 /app/src/main/java/io/trygvis/soilmoisture/DefaultSmDevicesManager.java | |
parent | e8a052fd2c03b399550b6c9be3199d35fdd47f10 (diff) | |
download | io.trygvis.soilmoisture-android-1b9a4defe73f3aa8c10aa4af49002f0cebd1c292.tar.gz io.trygvis.soilmoisture-android-1b9a4defe73f3aa8c10aa4af49002f0cebd1c292.tar.bz2 io.trygvis.soilmoisture-android-1b9a4defe73f3aa8c10aa4af49002f0cebd1c292.tar.xz io.trygvis.soilmoisture-android-1b9a4defe73f3aa8c10aa4af49002f0cebd1c292.zip |
o Adding SoilMonitors support in core and view. Still more to do.
Diffstat (limited to 'app/src/main/java/io/trygvis/soilmoisture/DefaultSmDevicesManager.java')
-rw-r--r-- | app/src/main/java/io/trygvis/soilmoisture/DefaultSmDevicesManager.java | 224 |
1 files changed, 0 insertions, 224 deletions
diff --git a/app/src/main/java/io/trygvis/soilmoisture/DefaultSmDevicesManager.java b/app/src/main/java/io/trygvis/soilmoisture/DefaultSmDevicesManager.java deleted file mode 100644 index 301bfc7..0000000 --- a/app/src/main/java/io/trygvis/soilmoisture/DefaultSmDevicesManager.java +++ /dev/null @@ -1,224 +0,0 @@ -package io.trygvis.soilmoisture; - -import android.app.Service; -import android.bluetooth.BluetoothGatt; -import android.bluetooth.BluetoothGattCharacteristic; -import android.bluetooth.BluetoothGattService; -import android.content.ComponentName; -import android.content.Intent; -import android.content.ServiceConnection; -import android.os.IBinder; -import android.util.Log; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Set; -import java.util.TreeSet; - -import io.trygvis.android.LocalBinder; -import io.trygvis.android.bt.BtActionExecutor; -import io.trygvis.android.bt.BtDevice; -import io.trygvis.android.bt.BtService; -import io.trygvis.android.bt.DefaultBtService; -import io.trygvis.bluetooth.TrygvisIoUuids; - -import static io.trygvis.android.bt.BtService.BtServiceListenerBroadcastReceiver; - -public class DefaultSmDevicesManager extends Service implements SmDevicesManager { - private final static String TAG = DefaultSmDevicesManager.class.getSimpleName(); - - private final IBinder binder = new LocalBinder<>(this); - - @SuppressWarnings("UnusedDeclaration") - private final DefaultSmDevicesManager context = DefaultSmDevicesManager.this; - - private ServiceConnection serviceConnection; - - private BtService<SmDevice> btService; - - - @Override - public IBinder onBind(Intent intent) { - return binder; - } - - @Override - public void onCreate() { - Log.i(TAG, "onCreate"); - - serviceConnection = new ServiceConnection() { - @SuppressWarnings("unchecked") - @Override - public void onServiceConnected(ComponentName componentName, IBinder service) { - btService = ((LocalBinder<BtService<SmDevice>>) service).getService(); - boolean ok = btService.initialize(DefaultSmDevicesManager.this::onNewDevice); - - sendBroadcast(createReady(ok)); - } - - @Override - public void onServiceDisconnected(ComponentName componentName) { - btService = null; - } - }; - - bindService(new Intent(this, DefaultBtService.class), serviceConnection, BIND_AUTO_CREATE); - registerReceiver(btServiceListener, BtServiceListenerBroadcastReceiver.INTENT_FILTER); - } - - @Override - public void onDestroy() { - unregisterReceiver(btServiceListener); - Log.i(TAG, "onDestroy" + btService); - if (serviceConnection != null) { - unbindService(serviceConnection); - } - } - - private final BtServiceListenerBroadcastReceiver btServiceListener = new BtServiceListenerBroadcastReceiver() { - @Override - public void onScanStarted() { - sendBroadcast(createScanStarted()); - } - - @Override - public void onScanStopped() { - sendBroadcast(createScanStopped()); - } - - @Override - public void onNewDevice(String address) { - BtDevice<SmDevice> btDevice = btService.getDevice(address); - SmDevice smDevice = btDevice.getTag(); - - if (!smDevice.isProbed()) { - Log.i(TAG, "Probing " + address + ", name=" + btDevice.getName()); - BtActionExecutor executor = new BtActionExecutor(). - onConnectionStateChange((gatt, newState) -> { - //noinspection SimplifiableIfStatement - if (newState == BluetoothGatt.STATE_CONNECTED) { - Log.i(TAG, "Connected to " + address + ", getting services"); - return gatt.discoverServices(); - } - - Log.i(TAG, "Could not connect to to " + address); - smDevice.setIsUseful(false); - return false; - }). - onServicesDiscovered(gatt -> { - Log.i(TAG, "Services discovered"); - - BluetoothGattService service = gatt.getService(TrygvisIoUuids.Services.SOIL_MOISTURE_SERVICE); - - if (service == null) { - smDevice.setIsUseful(false); - return false; - } - - BluetoothGattCharacteristic characteristic = service.getCharacteristic(TrygvisIoUuids.Characteristics.SOIL_MOISTURE); - - if (characteristic == null) { - smDevice.setIsUseful(false); - return false; - } - - smDevice.setIsUseful(true); - sendBroadcast(createNewDevice(address)); - - gatt.disconnect(); - - return true; - }); - - btDevice.connect(executor); - } else { - sendBroadcast(createNewDevice(address)); - } - } - }; - - // ----------------------------------------------------------------------- - // SmDevicesManager Implementation - // ----------------------------------------------------------------------- - - @Override - public List<SmDevice> getDevices(Comparator<SmDevice> comparator) { - Set<SmDevice> devices = new TreeSet<>(comparator); - for (BtDevice<SmDevice> btDevice : btService.getDevices()) { - devices.add(btDevice.getTag()); - } - return new ArrayList<>(devices); - } - - @Override - public SmDevice getDevice(String address) { - return btService.getTag(address); - } - - @Override - public boolean isScanning() { - return btService.isScanning(); - } - - @Override - public boolean startScanning(long scanPeriod) { - return btService.startScanning(scanPeriod); - } - - @Override - public void stopScanning() { - btService.stopScanning(); - } - - // ----------------------------------------------------------------------- - // - // ----------------------------------------------------------------------- - - private SmDevice onNewDevice(BtDevice<SmDevice> btDevice) { - return new SmDevice(btDevice); - } - - private Intent createReady(boolean success) { - return new Intent(SmDeviceListener.INTENT_NAME). - putExtra("event", "ready"). - putExtra("success", success); - } - - private Intent createScanStarted() { - return new Intent(SmDeviceListener.INTENT_NAME). - putExtra("event", "scanStarted"); - } - - private Intent createScanStopped() { - return new Intent(SmDeviceListener.INTENT_NAME). - putExtra("event", "scanStopped"); - } - - private Intent createNewDevice(String address) { - return new Intent(SmDeviceListener.INTENT_NAME). - putExtra("event", "newDevice"). - putExtra("address", address); - } - - public static void dispatchEvent(Intent intent, SmDeviceListener listener) { - String event = intent.getStringExtra("event"); - Log.i(TAG, "Dispatching event " + intent.getAction() + "/" + event); - switch (event) { - case "ready": - listener.onReady(intent.getBooleanExtra("success", false)); - break; - case "newDevice": - listener.onNewDevice(intent.getStringExtra("address")); - break; - case "scanStarted": - listener.onScanStarted(); - break; - case "scanStopped": - listener.onScanStopped(); - break; - default: - break; - } - } -} |