From 9ca0ee6b7b5acf2d45efb2a2b42b3e215471fc8d Mon Sep 17 00:00:00 2001
From: massimiliano <massimiliano@disroot.org>
Date: Tue, 2 Apr 2019 14:58:35 +0200
Subject: [PATCH] First steps trying to make Status notification as service

---
 app/src/main/AndroidManifest.xml              |   3 +
 .../disrootapp/service/CachetService.java     | 177 ++++++++++++++++++
 .../disroot/disrootapp/ui/MainActivity.java   |   8 +
 3 files changed, 188 insertions(+)
 create mode 100644 app/src/main/java/org/disroot/disrootapp/service/CachetService.java

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ff5dcba..578324a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -62,6 +62,9 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
+        <service
+            android:name=".service.CachetService"
+            android:exported="false"/>
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/org/disroot/disrootapp/service/CachetService.java b/app/src/main/java/org/disroot/disrootapp/service/CachetService.java
new file mode 100644
index 0000000..5abfbf6
--- /dev/null
+++ b/app/src/main/java/org/disroot/disrootapp/service/CachetService.java
@@ -0,0 +1,177 @@
+package org.disroot.disrootapp.service;
+
+import android.annotation.SuppressLint;
+import android.app.IntentService;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.graphics.Color;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.support.v4.app.NotificationCompat;
+import android.util.Log;
+import android.widget.ListView;
+import android.widget.Toast;
+
+import org.disroot.disrootapp.R;
+import org.disroot.disrootapp.ui.MainActivity;
+import org.disroot.disrootapp.ui.StateMessagesActivity;
+import org.disroot.disrootapp.utils.HttpHandler;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Timer;
+import java.util.TimerTask;
+
+public class CachetService extends IntentService {
+
+    private static final String TAG = MainActivity.class.getSimpleName();
+
+    //status report
+    private ListView lv;
+    public SharedPreferences checkDate;
+    // URL to get data JSON
+    static String incidenturl0 ="https://state.disroot.org/api/v1/incidents?sort=id&order=desc";
+    ArrayList<HashMap<String, String>> messageList;
+    ArrayList<HashMap<String, String>> getDate;
+
+
+
+    public CachetService(String status) {
+        super( CachetService.class.getName());
+        setIntentRedelivery(true);
+    }
+
+
+
+
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+
+        messageList = new ArrayList<>();
+        getDate = new ArrayList<>();
+        lv = lv.findViewById( R.id.list);
+        checkDate = getSharedPreferences("storeDate", Context.MODE_PRIVATE);
+
+        //Check json for updates
+        Timer timer = new Timer();
+        timer.schedule(new TimerTask() {
+            @Override
+            public void run() {
+                /*runOnUiThread(new Runnable() {
+
+                    @Override
+                    public void run() {
+                        new CachetService.GetList().execute();
+                    }
+                });*/
+            }
+        }, 100, 100000);//100000=100sec
+    }
+
+    @SuppressLint("StaticFieldLeak")
+    class GetList extends AsyncTask<Void, Void, Void> {
+
+        @Override
+        protected Void doInBackground(Void... arg0) {
+            HttpHandler sh = new HttpHandler();
+
+            String jsonStrincidents0 = sh.makeServiceCall(incidenturl0);
+
+            Log.e(TAG, "Service response from url: " + incidenturl0);
+
+            if (jsonStrincidents0 != null) {//Incidaetnts page
+                try {
+                    JSONObject jsonObj = new JSONObject(jsonStrincidents0);
+                    JSONArray data = jsonObj.getJSONArray("data");
+                    int a=0;
+                    JSONObject o = data.getJSONObject(a);
+                    String callid = o.getString("id");
+                    String updated = o.getString("updated_at");
+                    HashMap<String, String> date = new HashMap<>();
+                    date.put("id", callid);
+                    date.put("updated", updated);
+                    getDate.add(date);
+                    String stateDate = date.put( "updated", updated );
+                    String dateStored= checkDate.getString( "storeDate","" );
+
+                    if (dateStored.equals( "" ))
+                    {
+                        checkDate.edit().putString( "storeDate", stateDate).apply();
+                        //return null;
+                    }
+                    else if (!stateDate.equals( dateStored )&& !stateDate.equals( "" ))//dateStored
+                    {
+                        checkDate.edit().putString( "storeDate", stateDate).apply();
+                        Log.e(TAG, "service date: " + dateStored);
+                        Log.e(TAG, "service date2: " + stateDate);
+                        sendNotification();//Call notification
+                        return null;
+                    }
+                    else
+                        Log.e(TAG, "updated json service");
+                    return null;
+
+                } catch (final JSONException e) {
+                    Log.e(TAG, "Json parsing error: " + e.getMessage());
+                   /* runOnUiThread(new Runnable() {
+                        @Override
+                        public void run() {
+                            Toast.makeText(getApplicationContext(),
+                                    "Json parsing error: " + e.getMessage(),
+                                    Toast.LENGTH_LONG)
+                                    .show();
+                        }
+                    });*/
+                }
+            }else {
+                Log.e(TAG, "Couldn't get json from server.");
+            }
+            return null;
+        }
+
+    }
+
+
+    //Notification
+    private void sendNotification() throws JSONException {
+        HttpHandler sh = new HttpHandler();
+        String jsonStrincidents0 = sh.makeServiceCall(incidenturl0);
+        JSONObject jsonObj = new JSONObject(jsonStrincidents0);
+        JSONArray data = jsonObj.getJSONArray("data");
+        int a=0;
+        JSONObject o = data.getJSONObject(a);
+        String name = o.getString( "name" );
+        String message = o.getString( "message" );
+        HashMap<String, String> date = new HashMap<>();
+        date.put("name", name);
+        date.put("message", message);
+        Log.e(TAG, "message: " + name);
+
+        Intent goState = new Intent(CachetService.this, StateMessagesActivity.class);
+        PendingIntent launchStateMessages = PendingIntent.getActivity(CachetService.this,0, goState, PendingIntent.FLAG_UPDATE_CURRENT);
+        NotificationCompat.Builder mBuilder =
+                new NotificationCompat.Builder(this)
+                        .setAutoCancel( true )
+                        .setOngoing(true)
+                        .setSmallIcon(R.drawable.ic_state)
+                        .setContentTitle( getString( R.string.NotificationTitle ) )
+                        .setContentText(name)//get text Title from json :-)
+                        .setContentInfo(message)//get text message from json :-)
+                        .setContentIntent(launchStateMessages);
+        Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
+        mBuilder.setSound(alarmSound)
+                .setVibrate(new long[]{50,500,100,300,50,300})
+                .setLights( Color.MAGENTA, 3000, 3000);
+        NotificationManager mNotificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+        mNotificationManager.notify(001, mBuilder.build());
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java b/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java
index 2eb87d7..3c18af0 100644
--- a/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java
+++ b/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java
@@ -66,6 +66,7 @@ import android.widget.Toast;
 
 
 import org.disroot.disrootapp.R;
+import org.disroot.disrootapp.service.CachetService;
 import org.disroot.disrootapp.utils.Constants;
 import org.disroot.disrootapp.utils.HttpHandler;
 import org.disroot.disrootapp.webviews.DisWebChromeClient;
@@ -688,6 +689,13 @@ public class MainActivity extends AppCompatActivity implements View.OnLongClickL
                 });
             }
         }, 100, 100000);//100000=100sec
+
+        // start CachetService
+        Intent intent = new Intent(this, CachetService.class);
+        // Put some data for use by the IntentService
+        //intent.putExtra("foo", "bar");
+        startService(intent);
+
     }
 
     //Dialog windows
-- 
GitLab