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.java178
1 files changed, 89 insertions, 89 deletions
diff --git a/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java b/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java
index 18c96b8..6adc96c 100644
--- a/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java
+++ b/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java
@@ -2,8 +2,7 @@ package io.trygvis.soilmoisture;
import android.app.ActionBar;
import android.app.ListActivity;
-import android.bluetooth.BluetoothGatt;
-import android.bluetooth.BluetoothGattService;
+import android.app.ProgressDialog;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
@@ -20,20 +19,19 @@ import android.widget.Button;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
+import android.widget.Toast;
import com.crashlytics.android.Crashlytics;
+import java.util.ArrayList;
+import java.util.List;
+
import io.fabric.sdk.android.Fabric;
-import io.trygvis.android.bt.BtActionExecutor;
+import io.trygvis.android.LocalBinder;
import io.trygvis.android.bt.BtActivitySupport;
-import io.trygvis.android.bt.BtDevice;
-import io.trygvis.android.bt.BtDeviceListener;
-import io.trygvis.android.bt.BtService;
-import io.trygvis.android.bt.DefaultBtService;
-import io.trygvis.bluetooth.TrygvisIoUuids;
-import static io.trygvis.android.bt.BtService.BtServiceListener;
import static io.trygvis.soilmoisture.ExceptionHandler.EXCEPTION_HANDLER;
+import static io.trygvis.soilmoisture.SmDevicesManager.SmDeviceListener;
import static java.lang.String.valueOf;
public class MainActivity extends ListActivity {
@@ -44,11 +42,14 @@ public class MainActivity extends ListActivity {
private static final int REQUEST_ENABLE_BT = 1;
private final BtActivitySupport btActivitySupport = new BtActivitySupport(this, REQUEST_ENABLE_BT);
+ private final SmDeviceListener serviceListener = new MySmDeviceListener();
+ private final MainActivity context = this;
private DeviceListAdapter deviceList;
- private BtService<SmDevice> btService;
-
private ServiceConnection serviceConnection;
+ private SmDevicesManager smDevicesManager;
+ private ProgressDialog initializing;
+ private boolean ready;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -71,26 +72,23 @@ public class MainActivity extends ListActivity {
@SuppressWarnings("unchecked")
@Override
public void onServiceConnected(ComponentName componentName, IBinder service) {
- btService = ((BtService.LocalBinder<SmDevice>) service).getService();
- if (!btService.initialize(serviceListener, SmDevice::new)) {
- finish();
- }
-
- deviceList = new DeviceListAdapter();
- deviceList.notifyDataSetChanged();
- setListAdapter(deviceList);
-
- startScan();
+ Log.i(TAG, "onServiceConnected");
+ smDevicesManager = ((LocalBinder<SmDevicesManager>) service).getService();
+ registerReceiver(serviceListener, SmDeviceListener.INTENT_FILTER);
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
- btService = null;
+ Log.i(TAG, "onServiceDisconnected");
+ smDevicesManager = null;
stopScan();
}
};
- bindService(new Intent(this, DefaultBtService.class), serviceConnection, BIND_AUTO_CREATE);
+ bindService(new Intent(this, DefaultSmDevicesManager.class), serviceConnection, BIND_AUTO_CREATE);
+
+ initializing = ProgressDialog.
+ show(this, "Initializing", "Connecting to Bluetooth system.", true);
}
@Override
@@ -114,7 +112,7 @@ public class MainActivity extends ListActivity {
return;
}
- // registerReceiver(btServiceBroadcastReceiver, IntentAction.ALL_FILTER);
+ registerReceiver(serviceListener, SmDeviceListener.INTENT_FILTER);
}
@Override
@@ -123,7 +121,7 @@ public class MainActivity extends ListActivity {
super.onPause();
stopScan();
- // unregisterReceiver(ntServiceBroadcastReceiver);
+ unregisterReceiver(serviceListener);
}
@Override
@@ -143,14 +141,20 @@ public class MainActivity extends ListActivity {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
- if (!btService.isScanning()) {
+ if (ready) {
+ if (!smDevicesManager.isScanning()) {
+ menu.findItem(R.id.menu_stop).setVisible(false);
+ menu.findItem(R.id.menu_scan).setVisible(true);
+ menu.findItem(R.id.menu_refresh).setActionView(null);
+ } else {
+ menu.findItem(R.id.menu_stop).setVisible(true);
+ menu.findItem(R.id.menu_scan).setVisible(false);
+ menu.findItem(R.id.menu_refresh).setActionView(R.layout.actionbar_indeterminate_progress);
+ }
+ } else {
menu.findItem(R.id.menu_stop).setVisible(false);
menu.findItem(R.id.menu_scan).setVisible(true);
menu.findItem(R.id.menu_refresh).setActionView(null);
- } else {
- menu.findItem(R.id.menu_stop).setVisible(true);
- menu.findItem(R.id.menu_scan).setVisible(false);
- menu.findItem(R.id.menu_refresh).setActionView(R.layout.actionbar_indeterminate_progress);
}
return true;
}
@@ -171,12 +175,12 @@ public class MainActivity extends ListActivity {
}
private void startScan() {
- btService.startScanning(SCAN_PERIOD);
+ smDevicesManager.startScanning(SCAN_PERIOD);
}
private void stopScan() {
- if (btService != null) {
- btService.stopScanning();
+ if (smDevicesManager != null) {
+ smDevicesManager.stopScanning();
}
}
@@ -184,54 +188,9 @@ public class MainActivity extends ListActivity {
protected void onListItemClick(ListView l, View v, int position, long id) {
stopScan();
- BtDevice<SmDevice> state = btService.getDevices().get(position);
-
- BtActionExecutor executor = new BtActionExecutor().
- onConnectionStateChange((gatt, newState) -> {
- if (newState == BluetoothGatt.STATE_CONNECTED) {
- Intent intent = new Intent(this, SoilActivity.class);
- startActivity(intent);
- return true;
- }
- return false;
- }).
- onServicesDiscovered(gatt -> false);
-
- state.connect(executor);
+// SmDevice state = smDevicesManager.getDevices(SmDevice.deviceComparator).get(position);
}
- BtServiceListener<SmDevice> serviceListener = new BtServiceListener<SmDevice>() {
- @Override
- public void onScanStarted() {
- invalidateOptionsMenu();
- }
-
- @Override
- public void onNewDevice(BtDevice<SmDevice> device) {
- device.addListener(deviceListener);
-
- BtActionExecutor executor = new BtActionExecutor().
- onConnectionStateChange((gatt, newState) -> gatt.discoverServices()).
- onServicesDiscovered(gatt -> {
- BluetoothGattService service = gatt.getService(TrygvisIoUuids.Services.SOIL_MOISTURE_SERVICE);
-
- boolean useful = service != null;
- device.getTag().setIsUseful(useful);
- runOnUiThread(deviceList::notifyDataSetChanged);
- return useful;
- });
- device.connect(executor);
- }
-
- @Override
- public void onScanStopped() {
- invalidateOptionsMenu();
- }
- };
-
- BtDeviceListener deviceListener = new BtDeviceListener() {
- };
-
// -----------------------------------------------------------------------
//
// -----------------------------------------------------------------------
@@ -253,16 +212,17 @@ public class MainActivity extends ListActivity {
}
private class DeviceListAdapter extends BaseAdapter {
+ private List<SmDevice> devices = new ArrayList<>();
private LayoutInflater inflater = MainActivity.this.getLayoutInflater();
@Override
public int getCount() {
- return btService.getDevices().size();
+ return devices.size();
}
@Override
- public Object getItem(int i) {
- return btService.getDevices().get(i);
+ public SmDevice getItem(int i) {
+ return devices.get(i);
}
@Override
@@ -283,18 +243,16 @@ public class MainActivity extends ListActivity {
item = (DeviceListItem) view.getTag();
}
- BtDevice<SmDevice> btDevice = btService.getDevices().get(i);
- if (btDevice.getName() != null && btDevice.getName().length() > 0) {
- item.deviceName.setText(btDevice.getName());
+ SmDevice smDevice = getItem(i);
+ if (smDevice.getName() != null) {
+ item.deviceName.setText(smDevice.getName());
} else {
item.deviceName.setText(R.string.unknown_device);
}
- item.deviceAddress.setText(btDevice.getAddress());
+ item.deviceAddress.setText(smDevice.getBtDevice().getAddress());
item.rssi.setText(getText(R.string.rssi) + ": " +
- (btDevice.getRssi() != 0 ? valueOf(btDevice.getRssi()) : getText(R.string.unknown)));
-
- SmDevice smDevice = btDevice.getTag();
+ (smDevice.getBtDevice().getRssi() != 0 ? valueOf(smDevice.getBtDevice().getRssi()) : getText(R.string.unknown)));
boolean useful = smDevice.isUseful();
item.spinner.setVisibility(useful ? View.GONE : View.VISIBLE);
@@ -304,4 +262,46 @@ public class MainActivity extends ListActivity {
return view;
}
}
+
+ private class MySmDeviceListener extends SmDeviceListener {
+ @Override
+ public void onReady(boolean ok) {
+ if (!ok) {
+ Toast.makeText(context,
+ "Could not initialize services.",
+ Toast.LENGTH_SHORT).
+ show();
+
+ finish();
+ } else {
+ ready = true;
+ deviceList = new DeviceListAdapter();
+ setListAdapter(deviceList);
+
+ deviceList.notifyDataSetChanged();
+ startScan();
+
+ initializing.dismiss();
+ }
+ }
+
+ @Override
+ public void onScanStarted() {
+ invalidateOptionsMenu();
+ }
+
+ @Override
+ public void onScanStopped() {
+ invalidateOptionsMenu();
+ }
+
+ @Override
+ public void onNewDevice(String address) {
+ SmDevice device = smDevicesManager.getDevice(address);
+ deviceList.devices.add(device);
+ deviceList.notifyDataSetInvalidated();
+
+ Log.i(TAG, "deviceList.devices.size() = " + deviceList.devices.size());
+ }
+ }
}