summaryrefslogtreecommitdiff
path: root/app/src/main/java/io/trygvis/soilmoisture
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/io/trygvis/soilmoisture')
-rw-r--r--app/src/main/java/io/trygvis/soilmoisture/DefaultSoilMoistureService.java63
-rw-r--r--app/src/main/java/io/trygvis/soilmoisture/MainActivity.java16
-rw-r--r--app/src/main/java/io/trygvis/soilmoisture/SmDevice.java21
-rw-r--r--app/src/main/java/io/trygvis/soilmoisture/SoilMoistureService.java4
4 files changed, 66 insertions, 38 deletions
diff --git a/app/src/main/java/io/trygvis/soilmoisture/DefaultSoilMoistureService.java b/app/src/main/java/io/trygvis/soilmoisture/DefaultSoilMoistureService.java
index 992bf97..25dac5c 100644
--- a/app/src/main/java/io/trygvis/soilmoisture/DefaultSoilMoistureService.java
+++ b/app/src/main/java/io/trygvis/soilmoisture/DefaultSoilMoistureService.java
@@ -1,7 +1,6 @@
package io.trygvis.soilmoisture;
import android.app.Service;
-import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattDescriptor;
import android.bluetooth.BluetoothGattService;
@@ -13,6 +12,7 @@ import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.IBinder;
import android.util.Log;
+import android.widget.Toast;
import java.util.ArrayList;
import java.util.Comparator;
@@ -133,14 +133,7 @@ public class DefaultSoilMoistureService extends Service implements SoilMoistureS
Log.i(TAG, "Probing " + address + ", name=" + btDevice.getName());
BtPromise executor = new BtPromise().
- onDirect(v -> {
- Log.i(TAG, "Discovering services");
- BluetoothGatt gatt = (BluetoothGatt) v;
- return gatt.discoverServices() ? waitForNextEvent() : stop();
- }).
- onServicesDiscovered(gatt -> {
- Log.i(TAG, "Services discovered");
-
+ onDirect(gatt -> {
BluetoothGattService service = gatt.getService(TrygvisIoUuids.Services.SOIL_MOISTURE_SERVICE);
if (service == null) {
@@ -270,19 +263,44 @@ public class DefaultSoilMoistureService extends Service implements SoilMoistureS
// -----------------------------------------------------------------------
private SmDevice createTag(SQLiteDatabase db, BtDevice<SmDevice> btDevice) {
- Cursor cursor = db.query(Tables.T_SM_DEVICE, new String[]{Tables.C_ID}, Tables.C_BT_DEVICE + "=?",
- new String[]{valueOf(btDevice.getId())}, null, null, null);
+ Cursor cursor = null;
+ try {
+ cursor = db.query(Tables.T_SM_DEVICE, new String[]{Tables.C_ID}, Tables.C_BT_DEVICE + "=?",
+ new String[]{valueOf(btDevice.getId())}, null, null, null);
+
+ long id;
+ if (cursor.moveToNext()) {
+ id = cursor.getLong(0);
+ } else {
+ ContentValues values = new ContentValues();
+ values.put(Tables.C_BT_DEVICE, btDevice.getId());
+ id = db.insert(Tables.T_SM_DEVICE, null, values);
+ }
- long id;
- if (cursor.moveToNext()) {
- id = cursor.getLong(0);
- } else {
- ContentValues values = new ContentValues();
- values.put(Tables.C_BT_DEVICE, btDevice.getId());
- id = db.insert(Tables.T_SM_DEVICE, null, values);
- }
+ cursor.close();
+
+ String[] sensorColumns = {
+ Tables.C_ID,
+ Tables.C_INDEX,
+ };
+ cursor = db.query(Tables.T_SM_SENSOR, sensorColumns, Tables.C_SM_DEVICE + "=?",
+ new String[]{valueOf(id)}, null, null, Tables.C_INDEX);
- return new SmDevice(this, btDevice, id);
+ SmDevice device = new SmDevice(this, btDevice, id);
+
+ if (cursor.moveToNext()) {
+ device.setIsUseful(true);
+ do {
+ device.addSensor(new SmSensor(device, cursor.getLong(0), cursor.getInt(1)));
+ } while (cursor.moveToNext());
+ }
+
+ return device;
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
}
void handleNewSensorValueReady(SmSensor sensor, int value) {
@@ -302,8 +320,7 @@ public class DefaultSoilMoistureService extends Service implements SoilMoistureS
void readCurrentValue(SmSensor sensor) {
BtPromise promise = new BtPromise().
- onDirect(v -> {
- BluetoothGatt gatt = (BluetoothGatt) v;
+ onDirect(gatt -> {
BluetoothGattService service = gatt.getService(TrygvisIoUuids.Services.SOIL_MOISTURE_SERVICE);
BluetoothGattCharacteristic soilMoisture = service.getCharacteristic(TrygvisIoUuids.Characteristics.SOIL_MOISTURE);
@@ -328,6 +345,8 @@ public class DefaultSoilMoistureService extends Service implements SoilMoistureS
return stop();
}).
onFinally(() -> {
+ Toast.makeText(context, R.string.error_could_not_read_value, Toast.LENGTH_SHORT).
+ show();
});
sensor.getDevice().getBtDevice().withConnection(promise);
diff --git a/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java b/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java
index e9ecae2..c6293c6 100644
--- a/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java
+++ b/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java
@@ -219,12 +219,6 @@ public class MainActivity extends ListActivity {
public static class BtDeviceDialogFragment extends DialogFragment {
private MainActivity mainActivity;
-// private final BtDevice<SmDevice> device;
-//
-// public BtDeviceDialogFragment(MainActivity mainActivity, BtDevice<SmDevice> device) {
-// this.mainActivity = mainActivity;
-// this.device = device;
-// }
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
@@ -472,7 +466,7 @@ public class MainActivity extends ListActivity {
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
- Log.i(TAG, "getView, position=" + position + ", view=" + view);
+// Log.i(TAG, "getView, position=" + position + ", view=" + view);
Object o = current.get(position);
if (o instanceof BtDevice) {
@@ -491,8 +485,6 @@ public class MainActivity extends ListActivity {
if (view == null) {
view = inflater.inflate(R.layout.fragment_device, null);
view.setTag(new DeviceItem(view));
- view.setClickable(false);
- view.setLongClickable(true);
view.setOnLongClickListener(v -> MainActivity.this.onBtDeviceLongClick(device));
}
@@ -584,11 +576,7 @@ public class MainActivity extends ListActivity {
text += ", value: " + (value == null ? "Unknown" : value);
item.description.setText(text);
- if (value != null) {
- item.sensorProgress.setProgress(value);
- } else {
- item.sensorProgress.setIndeterminate(true);
- }
+ item.sensorProgress.setProgress(value != null ? value : 0);
return view;
}
diff --git a/app/src/main/java/io/trygvis/soilmoisture/SmDevice.java b/app/src/main/java/io/trygvis/soilmoisture/SmDevice.java
index 1074dd9..d56f33e 100644
--- a/app/src/main/java/io/trygvis/soilmoisture/SmDevice.java
+++ b/app/src/main/java/io/trygvis/soilmoisture/SmDevice.java
@@ -6,8 +6,11 @@ import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
+import io.trygvis.android.Optional;
import io.trygvis.android.bt.BtDevice;
+import static io.trygvis.android.Optional.empty;
+import static io.trygvis.android.Optional.of;
import static io.trygvis.soilmoisture.SmDevice.SmCmdCode.GET_SENSOR_COUNT;
import static io.trygvis.soilmoisture.SmDevice.SmCmdCode.GET_SENSOR_NAME;
import static io.trygvis.soilmoisture.SmDevice.SmCmdCode.GET_VALUE;
@@ -75,7 +78,25 @@ class SmDevice {
return sensors;
}
+ public Optional<SmSensor> getSensorByIndex(int index) {
+ if (!isUseful()) {
+ throw new IllegalStateException("Not a useful device");
+ }
+
+ for (SmSensor sensor : sensors) {
+ if (sensor.getIndex() == index) {
+ return of(sensor);
+ }
+ }
+
+ return empty();
+ }
+
void addSensor(SmSensor sensor) {
+ if (getSensorByIndex(sensor.index).isPresent()) {
+ throw new IllegalStateException("This device already contains a sensor with index=" + sensor.index);
+ }
+
sensors.add(sensor);
}
diff --git a/app/src/main/java/io/trygvis/soilmoisture/SoilMoistureService.java b/app/src/main/java/io/trygvis/soilmoisture/SoilMoistureService.java
index a287c7b..5e3ddbb 100644
--- a/app/src/main/java/io/trygvis/soilmoisture/SoilMoistureService.java
+++ b/app/src/main/java/io/trygvis/soilmoisture/SoilMoistureService.java
@@ -41,10 +41,10 @@ public interface SoilMoistureService {
public void onScanStarted() {
}
- public void onNewDevice(String address) {
+ public void onScanStopped() {
}
- public void onScanStopped() {
+ public void onNewDevice(String address) {
}
public void onNewSample(String address, int sensor) {