From da80f3d219c0c05568db0cb9a8910f02cc281d47 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Fri, 2 Jan 2015 21:38:52 +0100 Subject: o Getting closer to something that actually work. --- .../java/io/trygvis/soilmoisture/MainActivity.java | 178 ++++++++++----------- 1 file changed, 89 insertions(+), 89 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 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 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) service).getService(); - if (!btService.initialize(serviceListener, SmDevice::new)) { - finish(); - } - - deviceList = new DeviceListAdapter(); - deviceList.notifyDataSetChanged(); - setListAdapter(deviceList); - - startScan(); + Log.i(TAG, "onServiceConnected"); + smDevicesManager = ((LocalBinder) 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 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 serviceListener = new BtServiceListener() { - @Override - public void onScanStarted() { - invalidateOptionsMenu(); - } - - @Override - public void onNewDevice(BtDevice 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 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 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()); + } + } } -- cgit v1.2.3