Skip to content

Commit 80adbdb

Browse files
author
Simon Pinfold
committed
Added alerts for when the WiFire leaves the geofence
1 parent 697ef84 commit 80adbdb

File tree

5 files changed

+66
-6
lines changed

5 files changed

+66
-6
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.imgtec.hobbyist.flow;
2+
3+
/**
4+
* Created by simon.pinfold on 09/02/2015.
5+
*/
6+
public interface AlertListener {
7+
void onAlertReceived(AsyncMessage asyncMsg);
8+
}

app/src/main/java/com/imgtec/hobbyist/flow/AsyncMessage.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
public class AsyncMessage {
3232

3333
public enum MessageType {
34-
COMMAND("command"), RESPONSE("response"), MESSAGE("message"), EMPTY("");
34+
COMMAND("command"), RESPONSE("response"), MESSAGE("message"), ALERT("alert"), EMPTY("");
3535

3636
String string;
3737

@@ -122,15 +122,15 @@ public void setNodesFromXml(String xml) {
122122
}
123123
} catch (XmlPullParserException | IOException e) {
124124
DebugLogger.log(getClass().getSimpleName(), "parsing xml failed");
125-
e.printStackTrace();
125+
e.printStackTrace();
126126
}
127127
}
128128

129129
public void setType(MessageType type) {
130-
if (type.equals(MessageType.COMMAND) || type.equals(MessageType.RESPONSE) || type.equals(MessageType.MESSAGE)) {
130+
if (type.equals(MessageType.COMMAND) || type.equals(MessageType.RESPONSE) || type.equals(MessageType.MESSAGE) || type.equals(MessageType.ALERT)) {
131131
this.type = type;
132132
} else {
133-
throw new IllegalArgumentException("Message must have a type of COMMAND, RESPONSE or MESSAGE");
133+
throw new IllegalArgumentException("Message must have a type of COMMAND, RESPONSE, ALERT or MESSAGE");
134134
}
135135
}
136136

app/src/main/java/com/imgtec/hobbyist/flow/FlowEntities.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public class FlowEntities {
6161
* Listeners which inform appropriate parts of app UI about changes in flow.
6262
*/
6363
private AsyncMessageListener asyncMessageListener;
64+
private AlertListener alertListener;
6465
private List<DevicePresenceListener> devicePresenceListeners = new ArrayList<>();
6566
private List<DeviceToFlowConnectionListener> deviceToFlowConnectionListeners = new ArrayList<>();
6667
private List<DeviceOnlineInFlowListener> deviceOnlineInFlowListeners = new ArrayList<>();
@@ -90,6 +91,14 @@ public void handleMessage(Message msg) {
9091
case COMMAND:
9192
asyncMessageListener.onCommandMessageReceived(asyncMsg);
9293
break;
94+
case ALERT:
95+
new Thread(new Runnable() {
96+
public void run() {
97+
if (alertListener != null) {
98+
alertListener.onAlertReceived(asyncMsg);
99+
}
100+
}
101+
}).start();
93102
case RESPONSE:
94103
new Thread(new Runnable() {
95104
public void run() {
@@ -458,4 +467,8 @@ public WifireDevice getCurrentDevice() {
458467
public void setCurrentDevice(WifireDevice currentDevice) {
459468
this.currentDevice = currentDevice;
460469
}
470+
471+
public void setAlertListener(AlertListener alertListener) {
472+
this.alertListener = alertListener;
473+
}
461474
}

app/src/main/java/com/imgtec/hobbyist/flow/FlowHelper.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.imgtec.flow.client.users.UserHelper;
4141
import com.imgtec.hobbyist.R;
4242
import com.imgtec.hobbyist.activities.ActivitiesAndFragmentsHelper;
43+
import com.imgtec.hobbyist.fragments.menu.InteractiveModeFragment;
4344
import com.imgtec.hobbyist.utils.Constants;
4445
import com.imgtec.hobbyist.utils.DateFormatter;
4546
import com.imgtec.hobbyist.utils.DebugLogger;
@@ -481,4 +482,8 @@ public void addDeviceOnlineInFlowListener(DeviceOnlineInFlowListener listener) {
481482
public void removeDeviceOnlineInFlowListener(DeviceOnlineInFlowListener listener) {
482483
flowEntities.removeDeviceOnlineInFlowListener(listener);
483484
}
485+
486+
public void setAlertListener(AlertListener alertListener) {
487+
flowEntities.setAlertListener(alertListener);
488+
}
484489
}

app/src/main/java/com/imgtec/hobbyist/fragments/menu/InteractiveModeFragment.java

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
package com.imgtec.hobbyist.fragments.menu;
1616

1717
import android.app.Activity;
18+
import android.app.AlertDialog;
1819
import android.content.Context;
20+
import android.content.DialogInterface;
1921
import android.content.Intent;
2022
import android.content.IntentFilter;
2123
import android.graphics.Color;
@@ -60,16 +62,19 @@
6062
import com.google.android.gms.maps.model.MarkerOptions;
6163
import com.google.android.gms.maps.model.Polyline;
6264
import com.google.android.gms.maps.model.PolylineOptions;
65+
import com.imgtec.flow.Flow;
6366
import com.imgtec.flow.MessagingEvent;
6467
import com.imgtec.flow.client.users.DataStore;
6568
import com.imgtec.flow.client.users.DataStoreItem;
6669
import com.imgtec.flow.client.users.DataStoreItems;
6770
import com.imgtec.hobbyist.R;
6871
import com.imgtec.hobbyist.activities.ActivitiesAndFragmentsHelper;
6972
import com.imgtec.hobbyist.activities.FlowActivity;
73+
import com.imgtec.hobbyist.flow.AlertListener;
7074
import com.imgtec.hobbyist.flow.AsyncMessage;
7175
import com.imgtec.hobbyist.flow.AsyncMessageListener;
7276
import com.imgtec.hobbyist.flow.DevicePresenceListener;
77+
import com.imgtec.hobbyist.flow.FlowEntities;
7378
import com.imgtec.hobbyist.flow.FlowHelper;
7479
import com.imgtec.hobbyist.flow.GPSReading;
7580
import com.imgtec.hobbyist.flow.Geofence;
@@ -90,6 +95,9 @@
9095
import java.text.ParseException;
9196
import java.text.SimpleDateFormat;
9297
import java.util.ArrayList;
98+
import java.util.Arrays;
99+
import java.util.Collections;
100+
import java.util.Comparator;
93101
import java.util.Date;
94102
import java.util.HashMap;
95103
import java.util.Iterator;
@@ -105,7 +113,7 @@
105113
public class InteractiveModeFragment extends NDListeningFragment implements
106114
BackgroundExecutor.Callbacks<List<GPSReading>>, GooglePlayServicesClient.ConnectionCallbacks,
107115
GooglePlayServicesClient.OnConnectionFailedListener, LocationListener, AsyncMessageListener,
108-
DevicePresenceListener {
116+
DevicePresenceListener, AlertListener {
109117

110118
// **************** Constants *********************
111119
public static final String TAG = "InteractiveModeFragment";
@@ -244,6 +252,7 @@ public void onResume() {
244252
flowHelper.addDevicePresenceListener(this);
245253
connectionReceiver = new ConnectivityReceiver(new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
246254
connectionReceiver.register(appContext);
255+
247256
//online = true;
248257
fetchWiFireLocation();
249258
sendCommand("GET GEOFENCE", null, new CommandResponseHandler() {
@@ -325,6 +334,7 @@ public void onPause() {
325334
private void initFlowHelper() {
326335
flowHelper = FlowHelper.getInstance(getActivity());
327336
flowHelper.setAsyncMessageListener(this);
337+
flowHelper.setAlertListener(this);
328338
}
329339

330340
public void initUI() {
@@ -602,7 +612,31 @@ public void run() {
602612
//fetchWiFireLocation();
603613
}
604614

605-
private interface CommandResponseHandler {
615+
@Override
616+
public void onAlertReceived(AsyncMessage asyncMsg) {
617+
if (asyncMsg.getNode("type").equals("GEOFENCE ESCAPED")) {
618+
getActivity().runOnUiThread(new Runnable() {
619+
@Override
620+
public void run() {
621+
new AlertDialog.Builder(getActivity())
622+
.setTitle("Escaped Geofence")
623+
.setMessage("The GPS has been detected outside the geofence!")
624+
.setNeutralButton("OK",
625+
new DialogInterface.OnClickListener() {
626+
public void onClick(DialogInterface dialog, int id) {
627+
dialog.cancel();
628+
}
629+
})
630+
.setIcon(android.R.drawable.ic_dialog_alert)
631+
.show();
632+
}
633+
});
634+
}
635+
Log.e("onAlertReceived", asyncMsg.buildXml());
636+
Log.e("onAlertReceived", asyncMsg.getNode("type"));
637+
}
638+
639+
private interface CommandResponseHandler {
606640
void onCommandResponse(AsyncMessage response);
607641
}
608642
private void fetchWiFireLocation() {

0 commit comments

Comments
 (0)