From 17a1f7227c8c3872fce7bbcc2f5cd46540f9ac52 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 11 Jan 2015 12:28:55 +0100 Subject: o Reading values from the soil sensor. o Rewrote the database schema to match the new device+sensors model. o Storing samples in the database. o To be able to reuse BT callbacks, added a way to always to directly to the next step instead of waiting for an event. --- .../java/io/trygvis/soilmoisture/MainActivity.java | 116 +++++++++++++++------ 1 file changed, 85 insertions(+), 31 deletions(-) (limited to 'app/src/main/java/io/trygvis/soilmoisture/MainActivity.java') diff --git a/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java b/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java index 7aa3534..3a88f6c 100644 --- a/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java +++ b/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java @@ -16,9 +16,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; import android.widget.ListAdapter; -import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; @@ -209,9 +207,18 @@ public class MainActivity extends ListActivity { } } - @Override - protected void onListItemClick(ListView l, View v, int position, long id) { - stopScan(); + // ----------------------------------------------------------------------- + // + // ----------------------------------------------------------------------- + + private void onDeviceClick(SmDevice device) { + Log.i(TAG, "onDeviceClick, device=" + device.getBtDevice().getId()); + } + + private void onSensorClick(SmSensor sensor) { + Log.i(TAG, "onSensorClick, device=" + sensor.getDevice().getBtDevice().getId() + "/" + sensor.getIndex()); + + sensor.readCurrentValue(); } // ----------------------------------------------------------------------- @@ -223,16 +230,25 @@ public class MainActivity extends ListActivity { final TextView deviceAddress; final TextView rssi; final TextView info; - final ProgressBar spinner; - final Button connect; DeviceItem(View view) { this.deviceName = (TextView) view.findViewById(R.id.device_name); this.deviceAddress = (TextView) view.findViewById(R.id.device_address); this.rssi = (TextView) view.findViewById(R.id.device_rssi); this.info = (TextView) view.findViewById(R.id.device_info); - this.spinner = (ProgressBar) view.findViewById(R.id.device_spinner); - this.connect = (Button) view.findViewById(R.id.button_connect); + } + } + + static class SensorItem { + final SmSensor sensor; + final TextView description; + final ProgressBar sensorProgress; + + SensorItem(SmSensor sensor, View view) { + this.sensor = sensor; + this.description = (TextView) view.findViewById(R.id.description); + this.sensorProgress = (ProgressBar) view.findViewById(R.id.sensor_progress); + sensorProgress.setMax(1024); } } @@ -254,18 +270,24 @@ public class MainActivity extends ListActivity { for (SmDevice d : devices) { (d.isUseful() ? usefulDevices : unusefulDevices).add(d); } - List monitors = new ArrayList<>(); + List sensors = new ArrayList<>(); for (SmDevice d : devices) { - monitors.addAll(d.getSensors()); + if (d.isUseful()) { + sensors.addAll(d.getSensors()); + } } if (groupByDevice) { - current.addAll(usefulDevices); +// current.addAll(usefulDevices); + for (SmDevice device : usefulDevices) { + current.add(device); + current.addAll(device.getSensors()); + } if (showAll) { current.addAll(unusefulDevices); } } else { - current.addAll(monitors); + current.addAll(sensors); } dataSetObservable.notifyChanged(); } @@ -374,50 +396,77 @@ public class MainActivity extends ListActivity { if (o instanceof SmDevice) { return getSmDeviceView((SmDevice) o, view); } else if (o instanceof SmSensor) { - return getSoilMonitorView((SmSensor) o, view); + return getSoilSensorView((SmSensor) o, view); } throw new RuntimeException("Not implemented"); } private View getSmDeviceView(SmDevice smDevice, View view) { - - DeviceItem item; if (view == null) { - view = inflater.inflate(R.layout.listitem_device, null); - item = new DeviceItem(view); - view.setTag(item); - view.setClickable(false); - } else { - item = (DeviceItem) view.getTag(); + view = inflater.inflate(R.layout.fragment_device, null); + view.setTag(new DeviceItem(view)); + view.setClickable(true); + view.setOnClickListener(v -> onDeviceClick(smDevice)); } + DeviceItem item = (DeviceItem) view.getTag(); + if (smDevice.getName() != null) { item.deviceName.setText(smDevice.getName()); } else { item.deviceName.setText(R.string.unknown_device); } - item.deviceAddress.setText(smDevice.getBtDevice().getAddress()); + String address = smDevice.getBtDevice().getAddress(); + + if (!smDevice.isProbed()) { + address += " not probed"; + } else if (smDevice.isUseful()) { + address += " useful"; + } else { + address += " not useful"; + } + + item.deviceAddress.setText(address); item.rssi.setText(getText(R.string.rssi) + ": " + (smDevice.getBtDevice().getRssi() != 0 ? valueOf(smDevice.getBtDevice().getRssi()) : getText(R.string.unknown))); - if (smDevice.isUseful()) { - item.info.setText("number of sensors: " + smDevice.getSensors().size()); + boolean useful = smDevice.isUseful(); + + if (useful) { + item.info.setText("Number of sensors: " + smDevice.getSensors().size()); } else { item.info.setText(""); } - boolean useful = smDevice.isUseful(); - item.spinner.setVisibility(useful ? View.GONE : View.VISIBLE); - item.connect.setVisibility(useful ? View.VISIBLE : View.GONE); - view.setClickable(useful); +// view.setClickable(useful); return view; } - private View getSoilMonitorView(SmSensor smSensor, View view) { - throw new RuntimeException("Not implemented"); + private View getSoilSensorView(SmSensor smSensor, View view) { + if (view == null) { + view = inflater.inflate(R.layout.fragment_sensor, null); + view.setTag(new SensorItem(smSensor, view)); + view.setClickable(true); + view.setOnClickListener(v -> onSensorClick(smSensor)); + } + + SensorItem item = (SensorItem) view.getTag(); + + Integer value = smSensor.getLastValue(); + String text = "Connected: " + smSensor.getDevice().getBtDevice().connected(); + text += ", value: " + (value == null ? "Unknown" : value); + item.description.setText(text); + + if (value != null) { + item.sensorProgress.setProgress(value); + } else { + item.sensorProgress.setIndeterminate(true); + } + + return view; } } @@ -459,5 +508,10 @@ public class MainActivity extends ListActivity { deviceList.devices.add(device); deviceList.sort(); } + + @Override + public void onNewSample(String address, int sensor) { + deviceList.notifyDataSetChanged(); + } } } -- cgit v1.2.3