Prechádzať zdrojové kódy

Notifications fetched.

Notifications are now fetched using the V1 API and stored into the database, but they are not being shown yet.
seavenois 9 rokov pred
rodič
commit
f2143ddfaa

+ 68 - 6
app/src/main/java/com/ivalentin/margolariak/AlarmReceiver.java

@@ -2,6 +2,7 @@ package com.ivalentin.margolariak;
 
 //TODO: This doesn't work. Revise once the notification API is ready
 
+import android.app.Activity;
 import android.app.AlarmManager;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
@@ -19,6 +20,9 @@ import android.support.v4.app.TaskStackBuilder;
 import android.content.BroadcastReceiver;
 import android.util.Log;
 
+import org.json.JSONArray;
+import org.json.JSONObject;
+
 /**
  * Manages alarms to perform actions in the background, such as sync and receive notifications.
  * 
@@ -55,11 +59,65 @@ public class AlarmReceiver extends BroadcastReceiver {
 			//Get the file
 			try{
 				fu = new FetchURL();
-				fu.Run(GM.API.SERVER + "/app/notifications.php");
-				Log.d("Alarm", "Fetched notifications");
+				fu.Run(GM.API.SERVER + GM.API.NOTIFICATION.PATH);
+				Log.d("NOTIFICATIONS", "Fetched notifications");
 
 				//Parse info
 				String o = fu.getOutput().toString();
+
+				//Open database
+				SQLiteDatabase db = context.openOrCreateDatabase(GM.DB.NAME, Activity.MODE_PRIVATE, null);
+				if (db.isReadOnly()){
+					Log.e("NOTIFICATIONS", "Database is locked and in read only mode.");
+					return;
+				}
+				Cursor cursor;
+
+				//Values for parsing
+				String not, title_es, title_en, title_eu, text_es, text_en, text_eu, dtime, action;
+				int id, gm, duration;
+
+				int counter = 0;
+				while (counter < 10 && o.contains("\"}")){
+
+					//Get the notifications
+					not = o.substring(o.indexOf("{\"") + 2, o.indexOf("\"}"));
+
+					//Extract data
+					id = Integer.valueOf(not.substring(not.indexOf("\"id\":") + 6, not.indexOf("\",")));
+					title_es = not.substring(not.indexOf("\"title_es\":") + 12, not.indexOf("\"", not.indexOf("\"title_es\":") + 13));
+					title_en = not.substring(not.indexOf("\"title_en\":") + 12, not.indexOf("\"", not.indexOf("\"title_en\":") + 13));
+					title_eu = not.substring(not.indexOf("\"title_eu\":") + 12, not.indexOf("\"", not.indexOf("\"title_eu\":") + 13));
+					text_es = not.substring(not.indexOf("\"text_es\":") + 11, not.indexOf("\"", not.indexOf("\"text_es\":") + 12));
+					text_en = not.substring(not.indexOf("\"text_en\":") + 11, not.indexOf("\"", not.indexOf("\"text_en\":") + 12));
+					text_eu = not.substring(not.indexOf("\"text_eu\":") + 11, not.indexOf("\"", not.indexOf("\"text_eu\":") + 12));
+					dtime = not.substring(not.indexOf("\"dtime\":") + 9, not.indexOf("\"", not.indexOf("\"dtime\":") + 10));
+					action = not.substring(not.indexOf("\"action\":") + 10, not.indexOf("\"", not.indexOf("\"action\":") + 11));
+					gm = Integer.valueOf(not.substring(not.indexOf("\"gm\":") + 6, not.indexOf("\"", not.indexOf("\"gm\":") + 7)));
+					duration = Integer.valueOf(not.substring(not.indexOf("\"duration\":") + 12, not.indexOf("\"", not.indexOf("\"duration\":") + 13)));
+					duration = 60;
+
+
+					//Compare with the database
+					cursor = db.rawQuery("SELECT id FROM notification WHERE id = " + id + ";", null);
+					if (cursor.getCount() == 0){
+						db.execSQL("INSERT INTO notification (id, title_es, title_en, title_eu, text_es, text_en, text_eu, dtime, internal, duration, action) VALUES " +
+								"(" + id + ", \"" + title_es + "\", \"" + title_en + "\", \"" + title_eu + "\", \"" + text_es + "\", \"" + text_en + "\", \"" + text_eu + "\", \"" + dtime + "\", " + gm + ", " + duration + ", \"" + action + "\");");
+					}
+					cursor.close();
+
+					//TODO: Show notification;
+
+					o = o.substring(o.indexOf("\"}") + 3);
+					counter ++;
+				}
+				db.close();
+
+
+
+
+				//Parse info
+				/*String o = fu.getOutput().toString();
 				while (o.contains("<notification>")){
 					//Get non-language-dependant fields
 					String notification = o.substring(o.indexOf("<notification>") + 14, o.indexOf("</notification>"));
@@ -131,10 +189,13 @@ public class AlarmReceiver extends BroadcastReceiver {
 						}
 					}
 				o = o.substring(o.indexOf("</notification>") + 15);
-				}
+				}*/
+			}
+			catch(NumberFormatException ex) {
+				Log.e("NOTIFICATION", "Error parsing remote file: " + ex.toString());
 			}
-			catch(Exception ex) {
-				Log.e("Notification error", "Error fetching remote file: " + ex.toString());
+			catch (Exception ex){
+				Log.e("NOTIFICATION", "Error fetching notifications: " + ex.toString());
 			}
     	}
 
@@ -157,7 +218,8 @@ public class AlarmReceiver extends BroadcastReceiver {
 			PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
 
 			//Set the alarm cycle.
-			alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, GM.PERIOD_SYNC.FESTIVALS, GM.PERIOD_SYNC.NORMAL, alarmIntent);
+			//alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, GM.PERIOD_SYNC.FESTIVALS, GM.PERIOD_SYNC.NORMAL, alarmIntent);
+			alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, GM.PERIOD_SYNC.FESTIVALS, GM.PERIOD_SYNC.FESTIVALS, alarmIntent);
 
 			// Enable SampleBootReceiver to automatically restart the alarm when the device is rebooted.
 			ComponentName receiver = new ComponentName(context, BootReceiver.class);

+ 1 - 1
app/src/main/java/com/ivalentin/margolariak/GM.java

@@ -826,7 +826,7 @@ final class GM {
 			/**
 			 * Path to the API.
 			 */
-			static final String PATH = "/API/v1/sync.php";
+			static final String PATH = "/API/v1/notifications.php";
 
 			/**
 			 * Keys fotr the API parameters.

+ 18 - 10
app/src/main/res/layout/dialog_notification.xml

@@ -1,24 +1,32 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-    android:background="@drawable/section"
-    android:orientation="vertical"
-    android:padding="7dp" >
+              android:layout_width="fill_parent"
+              android:layout_height="wrap_content"
+              android:background="@drawable/section"
+              android:orientation="vertical"
+              android:layout_margin="20dp">
 
     <TextView
         android:id="@+id/tv_dialog_notification_title"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:ellipsize="end"
-        android:maxLines="2"
-        android:textAppearance="@android:style/TextAppearance.Large"
-        android:textStyle="bold"/>
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:textStyle="bold"
+        android:background="@drawable/section_title"
+        android:paddingBottom="4dp"
+        android:paddingEnd="10dp"
+        android:paddingLeft="20dp"
+        android:paddingRight="10dp"
+        android:paddingStart="20dp"
+        android:paddingTop="4dp"
+        android:textColor="@color/section_title"/>
 
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical"
-        android:background="@drawable/entry">
+        android:background="@drawable/entry"
+        android:layout_margin="8dp"
+        android:padding="7dp">
 
         <TextView
             android:id="@+id/tv_dialog_notification_text"