From fce66be9d662d6d98d23191a3c623cae549a29b2 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Mon, 29 Jun 2015 23:41:53 +0200 Subject: o Supporting re-activation of the MainActivity. Must initialize the local data with the device list if it is already in the 'ready' state. --- .../soilmoisture/DefaultSoilMoistureService.java | 18 ++++++++++++++++-- .../java/io/trygvis/soilmoisture/MainActivity.java | 12 ++++++++++-- .../main/java/io/trygvis/soilmoisture/SmDevice.java | 8 ++++++++ .../io/trygvis/soilmoisture/SoilMoistureService.java | 4 ++++ 4 files changed, 38 insertions(+), 4 deletions(-) (limited to 'app/src/main/java/io/trygvis/soilmoisture') diff --git a/app/src/main/java/io/trygvis/soilmoisture/DefaultSoilMoistureService.java b/app/src/main/java/io/trygvis/soilmoisture/DefaultSoilMoistureService.java index 8f748a8..0becb24 100644 --- a/app/src/main/java/io/trygvis/soilmoisture/DefaultSoilMoistureService.java +++ b/app/src/main/java/io/trygvis/soilmoisture/DefaultSoilMoistureService.java @@ -63,6 +63,8 @@ public class DefaultSoilMoistureService extends Service implements SoilMoistureS private BtService btService; + private boolean ready; + @Override public IBinder onBind(Intent intent) { return binder; @@ -76,10 +78,12 @@ public class DefaultSoilMoistureService extends Service implements SoilMoistureS @SuppressWarnings("unchecked") @Override public void onServiceConnected(ComponentName componentName, IBinder service) { + Log.i(TAG, "onServiceConnected, componentName=" + componentName.toShortString() + ", binder=" + service.toString()); + btService = ((LocalBinder>) service).getService(); - boolean ok = btService.initialize(DefaultSoilMoistureService.this::createTag); + ready = btService.initialize(DefaultSoilMoistureService.this::createTag); - sendBroadcast(createReady(ok)); + sendBroadcast(createReady(ready)); } @Override @@ -279,6 +283,11 @@ public class DefaultSoilMoistureService extends Service implements SoilMoistureS // SmDevicesManager Implementation // ----------------------------------------------------------------------- + @Override + public List getDevices() { + return getDevices(SmDevice.addressComparator); + } + @Override public List getDevices(Comparator comparator) { Set devices = new TreeSet<>(comparator); @@ -293,6 +302,11 @@ public class DefaultSoilMoistureService extends Service implements SoilMoistureS return btService.getTag(address); } + @Override + public boolean isReady() { + return ready; + } + @Override public boolean isScanning() { return btService.isScanning(); diff --git a/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java b/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java index 984016a..017d207 100644 --- a/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java +++ b/app/src/main/java/io/trygvis/soilmoisture/MainActivity.java @@ -83,6 +83,14 @@ public class MainActivity extends ListActivity { Log.i(TAG, "onServiceConnected"); soilMoistureService = ((LocalBinder) service).getService(); registerReceiver(serviceListener, SoilMoistureListener.INTENT_FILTER); + + if (soilMoistureService.isReady()) { + serviceListener.onReady(true); + + for (SmDevice smDevice : soilMoistureService.getDevices()) { + serviceListener.onNewDevice(smDevice.getBtDevice().getAddress()); + } + } } @Override @@ -646,7 +654,8 @@ public class MainActivity extends ListActivity { @Override public void onReady(boolean ok) { - if (!ok) { + ready = ok; + if (!ready) { Toast.makeText(context, "Could not initialize services.", Toast.LENGTH_SHORT). @@ -654,7 +663,6 @@ public class MainActivity extends ListActivity { finish(); } else { - ready = true; deviceList = new DeviceListAdapter(); setListAdapter(deviceList); diff --git a/app/src/main/java/io/trygvis/soilmoisture/SmDevice.java b/app/src/main/java/io/trygvis/soilmoisture/SmDevice.java index e114f3c..f72020b 100644 --- a/app/src/main/java/io/trygvis/soilmoisture/SmDevice.java +++ b/app/src/main/java/io/trygvis/soilmoisture/SmDevice.java @@ -5,6 +5,7 @@ import android.util.Log; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import io.trygvis.android.Optional; @@ -35,6 +36,13 @@ class SmDevice { private List sensors = new ArrayList<>(); + public static Comparator addressComparator = new Comparator() { + @Override + public int compare(SmDevice lhs, SmDevice rhs) { + return lhs.btDevice.getAddress().compareTo(rhs.btDevice.getAddress()); + } + }; + public SmDevice(DefaultSoilMoistureService smService, BtDevice btDevice, long id) { this.smService = smService; this.btDevice = btDevice; diff --git a/app/src/main/java/io/trygvis/soilmoisture/SoilMoistureService.java b/app/src/main/java/io/trygvis/soilmoisture/SoilMoistureService.java index 40f4262..8b42c9e 100644 --- a/app/src/main/java/io/trygvis/soilmoisture/SoilMoistureService.java +++ b/app/src/main/java/io/trygvis/soilmoisture/SoilMoistureService.java @@ -9,12 +9,16 @@ import java.util.Comparator; import java.util.List; public interface SoilMoistureService { + List getDevices(); + List getDevices(Comparator comparator); SmDevice getDevice(String address); void probe(String address); + boolean isReady(); + boolean isScanning(); boolean startScanning(long scanPeriod); -- cgit v1.2.3