Przeglądaj źródła

refactor + datetime

David 9 lat temu
rodzic
commit
8c556ff4b6

+ 5 - 5
app/src/main/java/com/example/david/libretasker/Actions/Actions.java

@@ -33,21 +33,21 @@ public class Actions {
          */
         return ret;
     }
-    public static void Action(Context context, String name, Object payload) {
+    public static void Launch(Context context, String name, Object payload) {
         switch(name){
             case "Toast":
                 Toast.makeText(context, (String)payload, Toast.LENGTH_SHORT).show();
                 return;
             case "Notification":
                 HashMap<String, Object> tval = (HashMap<String, Object>)payload;
-                assert(tval.get("title") != null);
-                assert(tval.get("value") != null);
+                assert(tval.get("Title") != null);
+                assert(tval.get("Value") != null);
 
                 NotificationCompat.Builder mBuilder =
                         new NotificationCompat.Builder(context)
                                 .setSmallIcon(R.drawable.ic_stat_name)
-                                .setContentTitle((String)tval.get("title"))
-                                .setContentText((String)tval.get("value"));
+                                .setContentTitle((String)tval.get("Title"))
+                                .setContentText((String)tval.get("Value"));
                 NotificationManager mNotifyMgr =
                         (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
                 // Builds the notification and issues it.

+ 12 - 6
app/src/main/java/com/example/david/libretasker/EventReceiver.java

@@ -30,26 +30,32 @@ public class EventReceiver extends BroadcastReceiver {
             }
         };
 
-        ArrayList<HashMap<String, Object>> data = new ArrayList<>();
+        HashMap<String, Object> data = new HashMap<>();
+
+        HashMap<String, Object> event = new HashMap<>();
+        ArrayList<HashMap<String, Object>> actions = new ArrayList<>();
+
         switch (intent.getAction()) {
 
             case ConnectivityManager.CONNECTIVITY_ACTION:
                 e = new NetworkEvent();
                 data = UserData.getData("Network");
                 break;
+            case Intent.ACTION_TIME_TICK:
             case Intent.ACTION_TIME_CHANGED:
             case Intent.ACTION_TIMEZONE_CHANGED:
                 e = new TimeEvent();
-                data = UserData.getData("Time");
+                data = UserData.getData("DateTime");
                 break;
             default:
                 Log.d(TAG, intent.getAction());
                 break;
         }
-
-        for(HashMap<String, Object> el: data){
-            if ( e.trigger(context, el) ) {
-                Actions.Action(context, (String)el.get("trigger_type"), el.get("trigger_value"));
+        actions = (ArrayList<HashMap<String, Object>>)data.get("Actions");
+        event = (HashMap<String, Object>)data.get("Event");
+        if (e.trigger(context, event)) {
+            for (HashMap<String, Object> a : actions) {
+                Actions.Launch(context, (String) a.get("Type"), a.get("Value"));
             }
         }
     }

+ 2 - 2
app/src/main/java/com/example/david/libretasker/Events/Events.java

@@ -9,8 +9,8 @@ import java.util.ArrayList;
 public class Events {
     public static ArrayList<String> list() {
         ArrayList<String> ret = new ArrayList<>();
-        ret.add("Network changed");
-        ret.add("Time changed");
+        ret.add("Network");
+        ret.add("Date/Time");
         /*
          * Date(Day)
          * Date/Time

+ 1 - 1
app/src/main/java/com/example/david/libretasker/Events/NetworkEvent.java

@@ -15,7 +15,7 @@ import java.util.List;
  */
 public class NetworkEvent implements Event {
     @Override
-    public boolean trigger(Context context, HashMap data) {
+    public boolean trigger(Context context, HashMap<String, Object> data) {
 
         assert (data.get("type") != null);
 

+ 30 - 1
app/src/main/java/com/example/david/libretasker/Events/TimeEvent.java

@@ -2,7 +2,9 @@ package com.example.david.libretasker.Events;
 
 import android.content.Context;
 
+import java.util.Calendar;
 import java.util.HashMap;
+import java.util.List;
 
 /**
  * Created by david on 02/01/17.
@@ -11,6 +13,33 @@ import java.util.HashMap;
 public class TimeEvent implements Event {
     @Override
     public boolean trigger(Context ctx, HashMap<String, Object> hm) {
-        return false;
+        Calendar c = Calendar.getInstance();
+        List<Integer> months = (List<Integer>) hm.get("Month");
+        List<Integer> DOW = (List<Integer>) hm.get("DOW");
+        List<Integer> DOM = (List<Integer>) hm.get("DOM");
+        List<Integer> hours= (List<Integer>) hm.get("Hour");
+        List<Integer> minutes= (List<Integer>) hm.get("Minute");
+
+        boolean invertHour = (boolean) hm.get("InvertHour");
+        boolean invertMinute = (boolean) hm.get("InvertMinute");
+
+        if (months != null && !months.contains(c.MONTH))
+            return false;
+
+        if (DOW != null && !DOW.contains(c.DAY_OF_WEEK))
+            return false;
+
+        if (DOM != null && !DOM.contains(c.DAY_OF_MONTH))
+            return false;
+
+        if (hours != null && !hours.contains(c.HOUR_OF_DAY)) //HOUR == 12, HOUR_OF_DAY == 24
+            if ( !invertHour )
+                return false;
+
+        if (minutes != null && !minutes.contains(c.MINUTE))
+            if ( !invertMinute )
+                return false;
+
+        return true;
     }
 }

+ 51 - 27
app/src/main/java/com/example/david/libretasker/UserData/UserData.java

@@ -12,37 +12,61 @@ import java.util.HashMap;
  */
 
 public class UserData {
-    public static ArrayList<HashMap<String, Object>> getData(String key) {
-        ArrayList<HashMap<String, Object>> nes = new ArrayList<HashMap<String, Object>>();
+    //ArrayList<HashMap<String, Object>>
+    public static HashMap<String, Object> getData(String key) {
+        //HashMap<String, ArrayList<HashMap<String, Object>>> assoc = new HashMap<>();
+        HashMap<String, Object> assoc = new HashMap<>();
+        ArrayList<HashMap<String, Object>> actions = new ArrayList<>();
+        HashMap<String, Object> event = new HashMap<>();
+        HashMap<String, Object> action = new HashMap<>();
+
         switch (key) {
             case "Network":
-                HashMap<String, Object> hm = new HashMap();
-                hm.put("SSIDs", Arrays.asList("Cueva", "Cueva2"));
-                hm.put("type", ConnectivityManager.TYPE_WIFI);
-                hm.put("state", NetworkInfo.State.CONNECTED);
-                hm.put("trigger_type", "Toast");
-                hm.put("trigger_value", "Connected to cuevita");
-
-                HashMap<String, Object> hm2 = new HashMap(hm);
-                hm2.put("SSIDs", Arrays.asList("Banana"));
-                hm2.put("trigger_value", "Connected to banana");
-
-                HashMap<String, Object> hm3 = new HashMap(hm);
-                hm3.remove("SSIDs");
-                hm3.put("type", ConnectivityManager.TYPE_MOBILE);
-                hm3.put("trigger_type", "Beep");
-
-                HashMap<String, Object> tval = new HashMap<>();
-                tval.put("title", "Network status");
-                tval.put("value", "Connected to mobile");
-                hm3.put("trigger_value", tval);
-
-                nes.add(hm);
-                nes.add(hm2);
-                nes.add(hm3);
+                HashMap<String, Object> action2 = new HashMap<>();
+
+                event.put("SSIDs", Arrays.asList("Cueva", "Cueva2"));
+                event.put("type", ConnectivityManager.TYPE_WIFI);
+                event.put("state", NetworkInfo.State.CONNECTED);
+                event.put("Name", "Cuevita-Wifi");
+
+                action.put("Type", "Toast");
+                action.put("Value", "Connected to cuevita");
+                action.put("Name", "Toast-connected");
+                actions.add(action);
+
+                HashMap<String, String> notif = new HashMap<>();
+                notif.put("Title", "Title 2toast cuevita");
+                notif.put("Value", "2toast connected cuevita");
+
+                action2.put("Type", "Notification");
+                action2.put("Name", "2Toast");
+                action2.put("Value", notif);
+                actions.add(action2);
+
                 break;
+            case "DateTime":
+
+                event.put("Hour", Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8));
+                event.put("InvertHour", false);
 
+                event.put("Minute", null); //Null == *
+                event.put("InvertMinute", null);
+
+                event.put("DOM", null); //Null == *
+                event.put("DOW", Arrays.asList(0,1,2,3,4,5)); //Monday through friday, 0-8 AM
+
+                event.put("Month", null); //Null == *
+
+                action.put("Type", "Toast");
+                action.put("Value", "Time's up");
+                action.put("Name", "Sleepy time");
+
+                actions.add(action);
+
+                break;
         }
-        return nes;
+        assoc.put("Event", event);
+        assoc.put("Actions", actions);
+        return assoc;
     }
 }