aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/io/trygvis/soilmoisture/MainActivity.java')
-rw-r--r--app/src/main/java/io/trygvis/soilmoisture/MainActivity.java106
1 files changed, 94 insertions, 12 deletions
diff --git a/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java b/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java
index 3a88f6c..385a566 100644
--- a/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java
+++ b/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java
@@ -1,6 +1,10 @@
package io.trygvis.soilmoisture;
import android.app.ActionBar;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.ComponentName;
@@ -29,6 +33,7 @@ import java.util.List;
import io.fabric.sdk.android.Fabric;
import io.trygvis.android.LocalBinder;
import io.trygvis.android.bt.BtActivitySupport;
+import io.trygvis.android.bt.BtDevice;
import static io.trygvis.soilmoisture.ExceptionHandler.EXCEPTION_HANDLER;
import static io.trygvis.soilmoisture.SoilMoistureService.SoilMoistureListener;
@@ -211,8 +216,52 @@ public class MainActivity extends ListActivity {
//
// -----------------------------------------------------------------------
- private void onDeviceClick(SmDevice device) {
- Log.i(TAG, "onDeviceClick, device=" + device.getBtDevice().getId());
+ 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) {
+
+ String address = getArguments().getString("address");
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setMessage(R.string.dialog_probe_device).
+ setPositiveButton(R.string.yes, (dialog, id) -> mainActivity.probe(address));
+ return builder.create();
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+
+ mainActivity = (MainActivity) activity;
+ }
+ }
+
+ private void probe(String address) {
+ soilMoistureService.probe(address);
+ }
+
+ private boolean onBtDeviceLongClick(BtDevice<SmDevice> device) {
+ Log.i(TAG, "onBtDeviceClick, device=" + device.getId());
+
+ BtDeviceDialogFragment dialog = new BtDeviceDialogFragment();
+ Bundle arguments = new Bundle();
+ arguments.putString("address", device.getAddress());
+ dialog.setArguments(arguments);
+ dialog.show(getFragmentManager(), "BtDeviceDialogFragment");
+
+ return true;
+ }
+
+ private void onSmDeviceClick(SmDevice device) {
+ Log.i(TAG, "onSmDeviceClick, device=" + device.getBtDevice().getId());
}
private void onSensorClick(SmSensor sensor) {
@@ -266,9 +315,13 @@ public class MainActivity extends ListActivity {
current = new ArrayList<>();
List<SmDevice> usefulDevices = new ArrayList<>(devices.size());
- List<SmDevice> unusefulDevices = new ArrayList<>(devices.size());
+ List<BtDevice> unusefulDevices = new ArrayList<>(devices.size());
for (SmDevice d : devices) {
- (d.isUseful() ? usefulDevices : unusefulDevices).add(d);
+ if (d.isUseful()) {
+ usefulDevices.add(d);
+ } else {
+ unusefulDevices.add(d.getBtDevice());
+ }
}
List<SmSensor> sensors = new ArrayList<>();
for (SmDevice d : devices) {
@@ -355,10 +408,12 @@ public class MainActivity extends ListActivity {
public int getItemViewType(int position) {
Object o = current.get(position);
- if (o instanceof SmDevice) {
+ if (o instanceof BtDevice) {
return 0;
- } else if (o instanceof SmSensor) {
+ } else if (o instanceof SmDevice) {
return 1;
+ } else if (o instanceof SmSensor) {
+ return 2;
}
throw new RuntimeException("Unknown kind: " + o.getClass());
@@ -366,7 +421,7 @@ public class MainActivity extends ListActivity {
@Override
public int getViewTypeCount() {
- return 2;
+ return 3;
}
@Override
@@ -393,7 +448,10 @@ public class MainActivity extends ListActivity {
public View getView(int position, View view, ViewGroup viewGroup) {
Object o = current.get(position);
- if (o instanceof SmDevice) {
+ if (o instanceof BtDevice) {
+ //noinspection unchecked
+ return getBtDeviceView((BtDevice<SmDevice>) o, view);
+ } else if (o instanceof SmDevice) {
return getSmDeviceView((SmDevice) o, view);
} else if (o instanceof SmSensor) {
return getSoilSensorView((SmSensor) o, view);
@@ -402,12 +460,38 @@ public class MainActivity extends ListActivity {
throw new RuntimeException("Not implemented");
}
+ private View getBtDeviceView(BtDevice<SmDevice> device, View view) {
+ 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));
+ }
+
+ DeviceItem item = (DeviceItem) view.getTag();
+
+ if (device.getName() != null) {
+ item.deviceName.setText(device.getName());
+ } else {
+ item.deviceName.setText(R.string.unknown_device);
+ }
+ String address = device.getAddress() + ", not useful";
+
+ item.deviceAddress.setText(address);
+
+ item.rssi.setText(getText(R.string.rssi) + ": " +
+ (device.getRssi() != null ? valueOf(device.getRssi()) : getText(R.string.unknown)));
+
+ return view;
+ }
+
private View getSmDeviceView(SmDevice smDevice, View view) {
if (view == null) {
view = inflater.inflate(R.layout.fragment_device, null);
view.setTag(new DeviceItem(view));
view.setClickable(true);
- view.setOnClickListener(v -> onDeviceClick(smDevice));
+ view.setOnClickListener(v -> onSmDeviceClick(smDevice));
}
DeviceItem item = (DeviceItem) view.getTag();
@@ -430,7 +514,7 @@ public class MainActivity extends ListActivity {
item.deviceAddress.setText(address);
item.rssi.setText(getText(R.string.rssi) + ": " +
- (smDevice.getBtDevice().getRssi() != 0 ? valueOf(smDevice.getBtDevice().getRssi()) : getText(R.string.unknown)));
+ (smDevice.getBtDevice().getRssi() != null ? valueOf(smDevice.getBtDevice().getRssi()) : getText(R.string.unknown)));
boolean useful = smDevice.isUseful();
@@ -440,8 +524,6 @@ public class MainActivity extends ListActivity {
item.info.setText("");
}
-// view.setClickable(useful);
-
return view;
}