From 0e90b61ed93de5b7d14f6fd9f7d6822cf75716c0 Mon Sep 17 00:00:00 2001
From: Maulana Wisnu <wisnu1291@gmail.com>
Date: Wed, 26 Jul 2017 10:32:22 +0700
Subject: [PATCH 01/21] model and task notification

---
 .../ac/ui/cs/myui/model/NotificationItem.java |  56 ++++++++++
 .../cs/myui/model/NotificationItemTest.java   | 104 ++++++++++++++++++
 2 files changed, 160 insertions(+)
 create mode 100644 app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
 create mode 100644 app/src/test/java/id/ac/ui/cs/myui/model/NotificationItemTest.java

diff --git a/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java b/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
new file mode 100644
index 00000000..e090b50d
--- /dev/null
+++ b/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
@@ -0,0 +1,56 @@
+package id.ac.ui.cs.myui.model;
+
+/**
+ * Created by maulana.wisnu on 26/07/17.
+ */
+
+public class NotificationItem {
+    private static final String TIPE_NEWS = "news";
+    private static final String TIPE_CALENDAR = "calendar";
+    String title;
+    String description;
+    String type;
+    String date;
+
+    public NotificationItem(String title, String description, String type, String date) {
+        this.title = title;
+        this.description = description;
+        this.type = type;
+        this.date = date;
+    }
+
+    public NotificationItem() {
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+    }
+}
\ No newline at end of file
diff --git a/app/src/test/java/id/ac/ui/cs/myui/model/NotificationItemTest.java b/app/src/test/java/id/ac/ui/cs/myui/model/NotificationItemTest.java
new file mode 100644
index 00000000..ca4b530d
--- /dev/null
+++ b/app/src/test/java/id/ac/ui/cs/myui/model/NotificationItemTest.java
@@ -0,0 +1,104 @@
+package id.ac.ui.cs.myui.model;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+
+/**
+ * Created by maulana.wisnu on 26/07/17.
+ */
+
+public class NotificationItemTest {
+    String title;
+    String description;
+    String type;
+    String date;
+
+    String titleReset;
+    String descriptionReset;
+    String typeReset;
+    String dateReset;
+
+    NotificationItem notificationItem;
+
+
+    @Before
+    public void setUp(){
+        title = "titleTest";
+        description = "descriptionTest";
+        type = "typeTest";
+        date = "dateTest";
+
+        titleReset = "titleTestReset";
+        descriptionReset = "descriptionTestReset";
+        typeReset = "typeTestReset";
+        dateReset = "dateTestReset";
+
+        notificationItem = new NotificationItem(title, description, type, date);
+
+    }
+
+    @Test
+    public void constructor1Test(){
+        NotificationItem notificationItem1 = new NotificationItem(title, description, type, date);
+        assertNotNull(notificationItem1);
+    }
+
+    @Test
+    public void constructor2Test(){
+        NotificationItem notificationItem2 = new NotificationItem();
+        assertNotNull(notificationItem2);
+    }
+
+    @Test
+    public void getTitleTest(){
+        assertEquals(title, notificationItem.getTitle());
+    }
+
+    @Test
+    public void getDescriptionTest(){
+        assertEquals(description, notificationItem.getDescription());
+    }
+
+    @Test
+    public void getTypeTest(){
+        assertEquals(type, notificationItem.getType());
+    }
+
+    @Test
+    public void getDateTest(){
+        assertEquals(date, notificationItem.getDate());
+    }
+
+    @Test
+    public void setTitleTest(){
+        notificationItem.setTitle(titleReset);
+        assertEquals(titleReset, notificationItem.getTitle());
+
+    }
+
+    @Test
+    public void setDescriptionTest(){
+        notificationItem.setDescription(descriptionReset);
+        assertEquals(descriptionReset, notificationItem.getDescription());
+    }
+
+    @Test
+    public void setTypeTest(){
+        notificationItem.setType(typeReset);
+        assertEquals(typeReset, notificationItem.getType());
+    }
+
+    @Test
+    public void setDateTest(){
+        notificationItem.setDate(dateReset);
+        assertEquals(dateReset, notificationItem.getDate());
+
+    }
+
+
+
+
+}
-- 
GitLab


From 6c3b9c4d7bf5f66f14fdfc50c9f8ab2f5451ff88 Mon Sep 17 00:00:00 2001
From: Maulana Wisnu <wisnu1291@gmail.com>
Date: Wed, 26 Jul 2017 10:33:41 +0700
Subject: [PATCH 02/21] model and task notification Ina-Wisnu

---
 app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java  | 2 +-
 .../test/java/id/ac/ui/cs/myui/model/NotificationItemTest.java  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java b/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
index e090b50d..2114098a 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
@@ -1,7 +1,7 @@
 package id.ac.ui.cs.myui.model;
 
 /**
- * Created by maulana.wisnu on 26/07/17.
+ * Created by maulana.wisnu & ina sakinah on 26/07/17.
  */
 
 public class NotificationItem {
diff --git a/app/src/test/java/id/ac/ui/cs/myui/model/NotificationItemTest.java b/app/src/test/java/id/ac/ui/cs/myui/model/NotificationItemTest.java
index ca4b530d..1599581e 100644
--- a/app/src/test/java/id/ac/ui/cs/myui/model/NotificationItemTest.java
+++ b/app/src/test/java/id/ac/ui/cs/myui/model/NotificationItemTest.java
@@ -7,7 +7,7 @@ import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertNotNull;
 
 /**
- * Created by maulana.wisnu on 26/07/17.
+ * Created by maulana.wisnu & ina sakinah on 26/07/17.
  */
 
 public class NotificationItemTest {
-- 
GitLab


From 006922d0e37d2a75c16767abe34cf02e7b0c6c41 Mon Sep 17 00:00:00 2001
From: ayuannisa <ayunisa.annisa@gmail.com>
Date: Wed, 26 Jul 2017 10:39:19 +0700
Subject: [PATCH 03/21] Add NotificationActivity and NotificationTask (Ivan,
 Ayu)

---
 .../myui/activity/NotificationActivity.java   |  43 ++++++
 .../ac/ui/cs/myui/task/NotificationTask.java  | 125 ++++++++++++++++++
 2 files changed, 168 insertions(+)
 create mode 100644 app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java
 create mode 100644 app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java

diff --git a/app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java b/app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java
new file mode 100644
index 00000000..b4c486e0
--- /dev/null
+++ b/app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java
@@ -0,0 +1,43 @@
+package id.ac.ui.cs.myui.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.widget.FrameLayout;
+
+import com.crashlytics.android.Crashlytics;
+
+import id.ac.ui.cs.myui.R;
+import id.ac.ui.cs.myui.task.NotificationTask;
+import io.fabric.sdk.android.Fabric;
+
+/**
+ * Created by ayu.annisa41 and muhammad.ivan41 on 26/07/17.
+ */
+
+public class NotificationActivity extends DrawerActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Fabric.with(this, new Crashlytics());
+        setTitle("Notifications");
+        //setContentView(R.layout.activity_news_home);
+
+        //id nya diganti disesuaikan dengan layout notification
+        FrameLayout contentFrameLayout = (FrameLayout) findViewById(R.id.content_bookmark); //Remember this is the FrameLayout area within your activity_main.xml
+        getLayoutInflater().inflate(R.layout.activity_news_home, contentFrameLayout);
+
+
+        new NotificationTask(this).execute();
+
+    }
+
+    @Override
+    public void onBackPressed() {
+        Intent intent = new Intent(Intent.ACTION_MAIN);
+        intent.addCategory(Intent.CATEGORY_HOME);
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        startActivity(intent);
+
+    }
+}
diff --git a/app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java b/app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java
new file mode 100644
index 00000000..4cfbe299
--- /dev/null
+++ b/app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java
@@ -0,0 +1,125 @@
+package id.ac.ui.cs.myui.task;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ListView;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+import id.ac.ui.cs.myui.R;
+import id.ac.ui.cs.myui.activity.NewsDetailActivity;
+import id.ac.ui.cs.myui.adapter.NewsAdapter;
+import id.ac.ui.cs.myui.database.DatabaseHandler;
+import id.ac.ui.cs.myui.model.ItemNews;
+import id.ac.ui.cs.myui.model.News;
+import id.ac.ui.cs.myui.model.NewsScele;
+import id.ac.ui.cs.myui.service.NewsService;
+import retrofit2.Call;
+import retrofit2.Response;
+import retrofit2.Retrofit;
+import retrofit2.converter.simplexml.SimpleXmlConverterFactory;
+
+/**
+ * Created by ayu.annisa41 and muhammad.ivan41 on 26/07/17.
+ */
+
+public class NotificationTask extends AsyncTask<Object,Object,ArrayList<News>> {
+    private Context context;
+    private DatabaseHandler dbhandler;
+
+    public NotificationTask(Context context) {
+        this.context = context;
+        this.dbhandler = new DatabaseHandler(context);
+    }
+
+    @Override
+    protected ArrayList<News> doInBackground(Object... objects) {
+        Retrofit client = new Retrofit.Builder()
+                .baseUrl("https://scele.cs.ui.ac.id/")
+                .addConverterFactory(SimpleXmlConverterFactory.create())
+                .build();
+
+        NewsService service = client.create(NewsService.class);
+
+        Call<NewsScele> call = service.listNewsScele();
+
+        Response<NewsScele> posts = null;
+
+
+        try {
+            posts = call.execute();
+
+            ArrayList<ItemNews> itemNews = posts.body().getChannel().item;
+
+            ArrayList<News> news = new ArrayList<>();
+
+
+            for (int i=0; i<itemNews.size(); i++){
+                String title = itemNews.get(i).getTitle();
+                String desc = itemNews.get(i).getContent();
+                String link = itemNews.get(i).getLink();
+                String date = itemNews.get(i).getPubdate();
+                String author = itemNews.get(i).getAuthor();
+
+                if (dbhandler.findNews(title)) {
+                    break;
+                } else {
+                    news.add(new News(title, desc, link, date, author));
+
+                }
+                Log.d("newsfeed", news.toString()+"news");
+            }
+
+            return news;
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return new ArrayList<News>();
+
+    }
+
+    @Override
+    protected void onPostExecute(ArrayList<News> newsSceles) {
+        Activity newsHome = (Activity) context;
+        final ListView listView = (ListView) newsHome.findViewById(R.id.list_news);
+        if(newsSceles.size()!=0){
+            dbhandler.insertNewsItem(newsSceles);
+        }
+
+        ArrayList<News> listMenuItems = dbhandler.getAllNews();
+
+
+        final NewsAdapter listMenuAdapter = new NewsAdapter(context, R.layout.news_item_layout, listMenuItems);
+        listView.setAdapter(listMenuAdapter);
+        final Intent intent = new Intent(context, NewsDetailActivity.class);
+
+        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
+                String title = listMenuAdapter.getItem(i).getTitle();
+                String description = listMenuAdapter.getItem(i).getDescription();
+                String date = listMenuAdapter.getItem(i).getDate();
+                String author = listMenuAdapter.getItem(i).getAuthor();
+                String link = listMenuAdapter.getItem(i).getLink();
+                intent.putExtra("Description", description);
+                intent.putExtra("Date", date);
+                intent.putExtra("Author", author);
+                intent.putExtra("Title", title);
+                intent.putExtra("link", link);
+                intent.putExtra("contextParent", "newsHome");
+
+                context.startActivity(intent);
+            }
+        });
+
+
+    }
+}
-- 
GitLab


From 3fc4253445696940632c49f394d77fd0e14a47ef Mon Sep 17 00:00:00 2001
From: ayuannisa <ayunisa.annisa@gmail.com>
Date: Wed, 26 Jul 2017 10:55:35 +0700
Subject: [PATCH 04/21] Add NotificationSchema and edit NotificationItem,
 DatabaseHandler (Ivan, Ayu)

---
 .../ui/cs/myui/database/DatabaseHandler.java  | 29 +++++++++++++++----
 .../ac/ui/cs/myui/model/NotificationItem.java |  7 ++---
 .../ui/cs/myui/schema/NotificationSchema.java | 19 ++++++++++++
 3 files changed, 46 insertions(+), 9 deletions(-)
 create mode 100644 app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java

diff --git a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
index 23569b3b..de06d1ce 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
@@ -20,6 +20,7 @@ import id.ac.ui.cs.myui.model.CalendarItem;
 import id.ac.ui.cs.myui.model.News;
 import id.ac.ui.cs.myui.schema.CalendarSchema;
 import id.ac.ui.cs.myui.schema.NewsSchema;
+import id.ac.ui.cs.myui.schema.NotificationSchema;
 
 /**
  * Created by muhammad.ghozi41 on 18/07/17.
@@ -69,6 +70,17 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     private static final String SQL_DROP_TABLE =
             "DROP TABLE IF EXIST " + CalendarSchema.CalendarTable.TABLE_NAME;
 
+    private static final String SQL_CREATE_NOTIFICATIONS_TABLE =
+            "CREATE TABLE " + NotificationSchema.NotificationTable.TABLE_NAME + "(" +
+                    NotificationSchema.NotificationTable._ID + " INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "+
+                    NotificationSchema.NotificationTable.COLUMN_NAME_TITLE + " TEXT, " +
+                    NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION + " TEXT, " +
+                    NotificationSchema.NotificationTable.COLUMN_NAME_DATE + " TEXT, " +
+                    NotificationSchema.NotificationTable.COLUMN_NAME_TYPE + " TEXT)";
+
+    private static final String SQL_DROP_NOTIFICATIONS_TABLE =
+            "DROP TABLE IF EXIST " + NotificationSchema.NotificationTable.TABLE_NAME;
+
     private SQLiteDatabase db;
     private String databasePath;
 
@@ -86,6 +98,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     public void onCreate(SQLiteDatabase db) {
         db.execSQL(CREATE_NEWS_TABLE);
         db.execSQL(SQL_SCHEDULE_TABLE);
+        db.execSQL(SQL_CREATE_NOTIFICATIONS_TABLE);
         Log.d("buatdb","buat db");
     }
 
@@ -93,8 +106,10 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
-        //Drop User Table if exist
+        //Drop User Table if exists
         db.execSQL(DROP_NEWS_TABLE);
+        db.execSQL(SQL_DROP_TABLE); //punya table schedule
+        db.execSQL(SQL_DROP_NOTIFICATIONS_TABLE);
 
         // Create tables again
         onCreate(db);
@@ -114,15 +129,19 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         if(!checkTable(CalendarSchema.CalendarTable.TABLE_NAME)) {
             Log.d("DEBUG", "Table is not exist, create new one");
             db.execSQL(SQL_SCHEDULE_TABLE);
-        }
-        else
+        } else
+            Log.d("DEBUG", "Table exists");
+
+        if(!checkTable(NotificationSchema.NotificationTable.TABLE_NAME)) {
+            Log.d("DEBUG", "Table is not exist, create new one");
+            db.execSQL(SQL_CREATE_NOTIFICATIONS_TABLE);
+        } else
             Log.d("DEBUG", "Table exists");
 
         if(!checkTable(TABLE_NEWS)) {
             Log.d("DEBUG", "Table is not exist, create new one");
             db.execSQL(CREATE_NEWS_TABLE);
-        }
-        else
+        } else
             Log.d("DEBUG", "Table exists");
     }
 
diff --git a/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java b/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
index 2114098a..323cbe9b 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
@@ -5,8 +5,8 @@ package id.ac.ui.cs.myui.model;
  */
 
 public class NotificationItem {
-    private static final String TIPE_NEWS = "news";
-    private static final String TIPE_CALENDAR = "calendar";
+    private static final String NEWS_TYPE = "news";
+    private static final String CALENDAR_TYPE = "calendar";
     String title;
     String description;
     String type;
@@ -19,8 +19,7 @@ public class NotificationItem {
         this.date = date;
     }
 
-    public NotificationItem() {
-    }
+    public NotificationItem() { }
 
     public String getTitle() {
         return title;
diff --git a/app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java b/app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java
new file mode 100644
index 00000000..7be3263d
--- /dev/null
+++ b/app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java
@@ -0,0 +1,19 @@
+package id.ac.ui.cs.myui.schema;
+
+import android.provider.BaseColumns;
+
+/**
+ * Created by ayu.annisa41 on 26/07/17.
+ */
+
+public class NotificationSchema {
+    private NotificationSchema() {}
+
+    public static class NotificationTable implements BaseColumns {
+        public static final String TABLE_NAME = "notifications_item";
+        public static final String COLUMN_NAME_TITLE = "title";
+        public static final String COLUMN_NAME_DESCRIPTION = "description";
+        public static final String COLUMN_NAME_TYPE = "type";
+        public static final String COLUMN_NAME_DATE = "date";
+    }
+}
-- 
GitLab


From 22551ca40e7512f77f514f62f07e6593955f3ddb Mon Sep 17 00:00:00 2001
From: ayuannisa <ayunisa.annisa@gmail.com>
Date: Wed, 26 Jul 2017 11:07:48 +0700
Subject: [PATCH 05/21] Add addNotification function in DatabaseHandler (Ivan,
 Ayu)

---
 .../id/ac/ui/cs/myui/database/DatabaseHandler.java   | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
index de06d1ce..bdfa14cf 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
@@ -18,6 +18,7 @@ import java.util.List;
 
 import id.ac.ui.cs.myui.model.CalendarItem;
 import id.ac.ui.cs.myui.model.News;
+import id.ac.ui.cs.myui.model.NotificationItem;
 import id.ac.ui.cs.myui.schema.CalendarSchema;
 import id.ac.ui.cs.myui.schema.NewsSchema;
 import id.ac.ui.cs.myui.schema.NotificationSchema;
@@ -515,7 +516,18 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         return counter;
     }
 
+    public void addNotification(NotificationItem notificationItem) {
+        SQLiteDatabase db = this.getWritableDatabase();
 
+        ContentValues values = new ContentValues();
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_TITLE, notificationItem.getTitle());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION, notificationItem.getDescription());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DATE, notificationItem.getDate());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_TYPE, notificationItem.getType());
 
+        // Inserting Row
+        db.insert(NotificationSchema.NotificationTable.TABLE_NAME, null, values);
+        db.close();
+    }
 
 }
-- 
GitLab


From 4e75f0e7ebb0f0daea0359e34b1191b6c9d8af96 Mon Sep 17 00:00:00 2001
From: ayuannisa <ayunisa.annisa@gmail.com>
Date: Wed, 26 Jul 2017 11:42:04 +0700
Subject: [PATCH 06/21] Add addAllNotification and getAllNotification function
 in DatabaseHandler (Ivan, Ayu)

---
 .../ui/cs/myui/database/DatabaseHandler.java  | 41 ++++++++++++++++---
 .../cs/myui/database/DatabaseHandlerTest.java |  5 +++
 2 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
index bdfa14cf..1b894fee 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
@@ -207,7 +207,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     // DONE
     // Insert a News into databse
     public void addNews(News news){
-        SQLiteDatabase db = this.getWritableDatabase();
+        db = this.getWritableDatabase();
 
         ContentValues values = new ContentValues();
         values.put(COLUMN_TITLE, news.getTitle());
@@ -226,8 +226,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     // DONE
     // Set bookmark on a News
     public void setBookmark(News news){
-
-        SQLiteDatabase db = this.getWritableDatabase();
+        db = this.getWritableDatabase();
 
         ContentValues values = new ContentValues();
         values.put(COLUMN_BOOKMARKED, 1);
@@ -242,7 +241,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     }
 
     public void deleteBookmark(News news){
-        SQLiteDatabase db = this.getWritableDatabase();
+        db = this.getWritableDatabase();
 
         ContentValues values = new ContentValues();
         values.put(COLUMN_BOOKMARKED, 0);
@@ -258,7 +257,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     // DONE
     // Update bookmark on a News
     public void updateBookmark(News news){
-        SQLiteDatabase db = this.getWritableDatabase();
+        db = this.getWritableDatabase();
 
         ContentValues values = new ContentValues();
         values.put(COLUMN_TITLE, news.getTitle());
@@ -530,4 +529,36 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         db.close();
     }
 
+    public void addAllNotification(List<NotificationItem> notificationItems) {
+        for (NotificationItem item : notificationItems) {
+            addNotification(item);
+        }
+    }
+
+    public List<NotificationItem> getAllNotification() {
+        db = this.getReadableDatabase();
+        List<NotificationItem> notificationItemList = new ArrayList<NotificationItem>();
+        String query = "SELECT * FROM "+ NotificationSchema.NotificationTable.TABLE_NAME;
+        Cursor cur = db.rawQuery(query, null);
+        Log.d("DEBUG ALL PARENT", "Total Menu = "+cur.getCount());
+        if(cur.getCount() > 0) {
+            if(cur.moveToFirst()) {
+                Log.i("tes", "masuk ke 1");
+                while(!cur.isAfterLast()) {
+
+                    NotificationItem item = new NotificationItem();
+                    item.setTitle(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_TITLE)));
+                    item.setDate(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_DATE)));
+                    item.setDescription(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION)));
+                    item.setType(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_TYPE)));
+                    notificationItemList.add(item);
+                    cur.moveToNext();
+                }
+            }
+        }
+        cur.close();
+        db.close();
+        return notificationItemList;
+    }
+
 }
diff --git a/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java b/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java
index d32f4138..6f470272 100644
--- a/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java
+++ b/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java
@@ -167,4 +167,9 @@ public class DatabaseHandlerTest {
         assertEquals(true,  dbhandler.findNews(news3.getTitle()));
 
     }
+
+    @Test
+    public void addNotificationTest() {
+
+    }
 }
-- 
GitLab


From d44c902ded59bd025e5986a5ef237f3c080b88b9 Mon Sep 17 00:00:00 2001
From: "agni.wira" <agniwp1@live.com>
Date: Wed, 26 Jul 2017 11:58:39 +0700
Subject: [PATCH 07/21] add background service agni&irma

---
 app/src/main/AndroidManifest.xml              |  6 ++
 .../ui/cs/myui/activity/CalendarActivity.java |  7 +-
 .../ui/cs/myui/activity/NewsHomeActivity.java | 59 ++++++++++-
 .../ui/cs/myui/database/DatabaseHandler.java  | 47 +++++++++
 .../ac/ui/cs/myui/model/NotificationItem.java | 56 +++++++++++
 .../ui/cs/myui/schema/NotificationSchema.java | 23 +++++
 .../BackgroundServiceNewsSchedule.java        | 55 +++++++++++
 .../ac/ui/cs/myui/task/NotificationTask.java  | 99 +++++++++++++++++++
 8 files changed, 348 insertions(+), 4 deletions(-)
 create mode 100644 app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
 create mode 100644 app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java
 create mode 100644 app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java
 create mode 100644 app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c2c8dca6..060e9e42 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,6 +52,12 @@
             </intent-filter>
         </service>
 
+        <service
+            android:name=".service.BackgroundServiceNewsSchedule"
+            android:enabled="true"
+           >
+        </service>
+
 
         <meta-data
             android:name="io.fabric.ApiKey"
diff --git a/app/src/main/java/id/ac/ui/cs/myui/activity/CalendarActivity.java b/app/src/main/java/id/ac/ui/cs/myui/activity/CalendarActivity.java
index bedefc76..bed68b1d 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/activity/CalendarActivity.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/activity/CalendarActivity.java
@@ -3,6 +3,7 @@ package id.ac.ui.cs.myui.activity;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
 import android.util.Log;
 import android.view.View;
 import android.widget.AdapterView;
@@ -12,12 +13,16 @@ import android.widget.ListView;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Timer;
+import java.util.TimerTask;
 
 import id.ac.ui.cs.myui.R;
 import id.ac.ui.cs.myui.adapter.ListCalendarAdapter;
 import id.ac.ui.cs.myui.database.DatabaseHandler;
 import id.ac.ui.cs.myui.model.CalendarItem;
+import id.ac.ui.cs.myui.service.BackgroundServiceNewsSchedule;
 import id.ac.ui.cs.myui.task.CalendarTask;
+import id.ac.ui.cs.myui.task.NewsSceleTask;
 
 public class CalendarActivity extends DrawerActivity {
 
@@ -43,8 +48,6 @@ public class CalendarActivity extends DrawerActivity {
 
 
 
-
-
     }
 
 
diff --git a/app/src/main/java/id/ac/ui/cs/myui/activity/NewsHomeActivity.java b/app/src/main/java/id/ac/ui/cs/myui/activity/NewsHomeActivity.java
index 14adbc02..1434759d 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/activity/NewsHomeActivity.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/activity/NewsHomeActivity.java
@@ -4,11 +4,24 @@ import android.content.Intent;
 
 import android.os.Bundle;
 
+import android.os.Handler;
+import android.view.View;
+import android.widget.AdapterView;
 import android.widget.FrameLayout;
+import android.widget.ListView;
 
 
 import com.crashlytics.android.Crashlytics;
+
+import java.util.ArrayList;
+import java.util.Timer;
+import java.util.TimerTask;
+
 import id.ac.ui.cs.myui.R;
+import id.ac.ui.cs.myui.adapter.NewsAdapter;
+import id.ac.ui.cs.myui.database.DatabaseHandler;
+import id.ac.ui.cs.myui.model.News;
+import id.ac.ui.cs.myui.service.BackgroundServiceNewsSchedule;
 import id.ac.ui.cs.myui.task.NewsSceleTask;
 import io.fabric.sdk.android.Fabric;
 
@@ -23,9 +36,51 @@ public class NewsHomeActivity extends DrawerActivity {
 
         FrameLayout contentFrameLayout = (FrameLayout) findViewById(R.id.content_bookmark); //Remember this is the FrameLayout area within your activity_main.xml
         getLayoutInflater().inflate(R.layout.activity_news_home, contentFrameLayout);
-        
 
-        new NewsSceleTask(this).execute();
+        final Handler handler = new Handler();
+
+        TimerTask timertask = new TimerTask() {
+            @Override
+            public void run() {
+                handler.post(new Runnable() {
+                    public void run() {
+                        startService(new Intent(getApplicationContext(), BackgroundServiceNewsSchedule.class));
+                    }
+                });
+            }
+        };
+        Timer timer = new Timer();
+        timer.schedule(timertask, 0, 10000);
+
+        //new NewsSceleTask(this).execute();
+
+        DatabaseHandler dbhandler = new DatabaseHandler(getApplicationContext());
+        ArrayList<News> listMenuItems = dbhandler.getAllNews();
+        final ListView listView = (ListView) findViewById(R.id.list_news);
+
+        final NewsAdapter listMenuAdapter = new NewsAdapter(NewsHomeActivity.this, R.layout.news_item_layout, listMenuItems);
+        listView.setAdapter(listMenuAdapter);
+        final Intent intent = new Intent(NewsHomeActivity.this, NewsDetailActivity.class);
+
+        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
+                String title = listMenuAdapter.getItem(i).getTitle();
+                String description = listMenuAdapter.getItem(i).getDescription();
+                String date = listMenuAdapter.getItem(i).getDate();
+                String author = listMenuAdapter.getItem(i).getAuthor();
+                String link = listMenuAdapter.getItem(i).getLink();
+                intent.putExtra("Description", description);
+                intent.putExtra("Date", date);
+                intent.putExtra("Author", author);
+                intent.putExtra("Title", title);
+                intent.putExtra("link", link);
+                intent.putExtra("contextParent", "newsHome");
+
+                startActivity(intent);
+            }
+        });
+
 
     }
 
diff --git a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
index 23569b3b..84e76c60 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
@@ -18,8 +18,10 @@ import java.util.List;
 
 import id.ac.ui.cs.myui.model.CalendarItem;
 import id.ac.ui.cs.myui.model.News;
+import id.ac.ui.cs.myui.model.NotificationItem;
 import id.ac.ui.cs.myui.schema.CalendarSchema;
 import id.ac.ui.cs.myui.schema.NewsSchema;
+import id.ac.ui.cs.myui.schema.NotificationSchema;
 
 /**
  * Created by muhammad.ghozi41 on 18/07/17.
@@ -66,6 +68,13 @@ public class DatabaseHandler extends SQLiteOpenHelper {
                     CalendarSchema.CalendarTable.COLUMN_NAME_EXECUTOR + " TEXT, " +
                     CalendarSchema.CalendarTable.COLUMN_NAME_EVENT_NAME + " TEXT"+")";
 
+    private String CREATE_NOTIFICATION_TABLE = "CREATE TABLE " + NotificationSchema.NotificationTable.TABLE_NAME +
+            "("+ COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+            + NotificationSchema.NotificationTable.COLUMN_NAME_TITLE + " TEXT,"
+            + NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION + " TEXT,"
+            + NotificationSchema.NotificationTable.COLUMN_NAME_DATE + " TEXT,"  +
+            NotificationSchema.NotificationTable.COLUMN_NAME_TYPE +" TEXT"+")";
+
     private static final String SQL_DROP_TABLE =
             "DROP TABLE IF EXIST " + CalendarSchema.CalendarTable.TABLE_NAME;
 
@@ -85,6 +94,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     @Override
     public void onCreate(SQLiteDatabase db) {
         db.execSQL(CREATE_NEWS_TABLE);
+        db.execSQL(CREATE_NOTIFICATION_TABLE);
         db.execSQL(SQL_SCHEDULE_TABLE);
         Log.d("buatdb","buat db");
     }
@@ -287,9 +297,11 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         List<News> currNewsList= getAllNews();
         for (News currNews : currNewsList) {
             if (currNews.getTitle().equalsIgnoreCase(title)) {
+                Log.d("newsnotif","true"+currNewsList.size());
                 return true;
             }
         }
+        Log.d("newsnotif","false");
         return false;
     }
 
@@ -497,6 +509,41 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     }
 
 
+    // Insert a News into databse
+    public void addNotification(NotificationItem item){
+        SQLiteDatabase db = this.getWritableDatabase();
+
+        ContentValues values = new ContentValues();
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_TITLE, item.getTitle());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION , item.getDescription());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DATE, item.getDate());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_TYPE, item.getType());
+
+        // Inserting Row
+        db.insert(NotificationSchema.NotificationTable.TABLE_NAME, null, values);
+        db.close();
+    }
+
+    public int getSizeNotificationDB (){
+        db = this.getReadableDatabase();
+        int counter =0;
+
+        Cursor c = db.rawQuery("SELECT * FROM notification_item", null);
+        if(c.moveToFirst()){
+            do{
+                //assing values
+                String column1 = c.getString(0);
+                //Do something Here with values
+                counter++;
+
+
+            }while(c.moveToNext());
+        }
+        c.close();
+        db.close();
+
+        return counter;
+    }
 
 
 }
diff --git a/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java b/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
new file mode 100644
index 00000000..9c4a64fd
--- /dev/null
+++ b/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
@@ -0,0 +1,56 @@
+package id.ac.ui.cs.myui.model;
+
+/**
+ * Created by maulana.wisnu & ina sakinah on 26/07/17.
+ */
+
+public class NotificationItem {
+    public static final String TIPE_NEWS = "news";
+    public static final String TIPE_CALENDAR = "calendar";
+    String title;
+    String description;
+    String type;
+    String date;
+
+    public NotificationItem(String title, String description, String type, String date) {
+        this.title = title;
+        this.description = description;
+        this.type = type;
+        this.date = date;
+    }
+
+    public NotificationItem() {
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java b/app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java
new file mode 100644
index 00000000..47788fe5
--- /dev/null
+++ b/app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java
@@ -0,0 +1,23 @@
+package id.ac.ui.cs.myui.schema;
+
+import android.provider.BaseColumns;
+
+/**
+ * Created by agni.wira on 26/07/17.
+ */
+
+public class NotificationSchema {
+
+    public NotificationSchema() {
+    }
+
+    public static class NotificationTable implements BaseColumns {
+        public static final String TABLE_NAME = "notification_item";
+        public static final String COLUMN_NAME_TITLE = "title";
+        public static final String COLUMN_NAME_DESCRIPTION = "description";
+        public static final String COLUMN_NAME_DATE = "date";
+        public static final String COLUMN_NAME_TYPE = "type";
+
+
+    }
+}
diff --git a/app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java b/app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java
new file mode 100644
index 00000000..08c41ce0
--- /dev/null
+++ b/app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java
@@ -0,0 +1,55 @@
+package id.ac.ui.cs.myui.service;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.support.annotation.Nullable;
+import android.support.v4.app.NotificationCompat;
+import android.util.Log;
+
+import java.util.Date;
+
+import id.ac.ui.cs.myui.R;
+import id.ac.ui.cs.myui.activity.NewsHomeActivity;
+import id.ac.ui.cs.myui.database.DatabaseHandler;
+import id.ac.ui.cs.myui.task.NotificationTask;
+
+/**
+ * Created by agni.wira dan irma on 26/07/17.
+ */
+
+public class BackgroundServiceNewsSchedule extends IntentService {
+
+    public BackgroundServiceNewsSchedule() {
+        super("MyService");
+        // TODO Auto-generated constructor stub
+    }
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        Log.d("coba service", new Date().toString());
+        Intent notificationIntent = new Intent(this, BackgroundServiceNewsSchedule.class);
+        DatabaseHandler db = new DatabaseHandler(getApplicationContext());
+
+        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
+                notificationIntent, 0);
+
+        Notification notification = new NotificationCompat.Builder(this)
+                .setSmallIcon(R.mipmap.ic_launcher)
+                .setContentTitle("My Awesome App")
+                .setContentText(db.getSizeNotificationDB()+"")
+                .setContentIntent(pendingIntent).build();
+        startForeground(1337, notification);
+
+        new NotificationTask(getApplicationContext()).execute();
+        return START_STICKY;
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+
+    }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java b/app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java
new file mode 100644
index 00000000..36e0c32b
--- /dev/null
+++ b/app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java
@@ -0,0 +1,99 @@
+package id.ac.ui.cs.myui.task;
+
+/**
+ * Created by agni.wira on 26/07/17.
+ */
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ListView;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+import id.ac.ui.cs.myui.R;
+import id.ac.ui.cs.myui.activity.NewsDetailActivity;
+import id.ac.ui.cs.myui.adapter.NewsAdapter;
+import id.ac.ui.cs.myui.database.DatabaseHandler;
+import id.ac.ui.cs.myui.model.ItemNews;
+import id.ac.ui.cs.myui.model.News;
+import id.ac.ui.cs.myui.model.NewsScele;
+import id.ac.ui.cs.myui.model.NotificationItem;
+import id.ac.ui.cs.myui.service.NewsService;
+import retrofit2.Call;
+import retrofit2.Response;
+import retrofit2.Retrofit;
+import retrofit2.converter.simplexml.SimpleXmlConverterFactory;
+/**
+ * Created by agni.wira on 17/07/17.
+ */
+
+public class NotificationTask extends AsyncTask<Object,Object,ArrayList<News>> {
+    private Context context;
+    private DatabaseHandler dbhandler;
+
+    public NotificationTask(Context context) {
+        this.context = context;
+        this.dbhandler = new DatabaseHandler(context);
+    }
+
+    @Override
+    protected ArrayList<News> doInBackground(Object... objects) {
+        Retrofit client = new Retrofit.Builder()
+                .baseUrl("https://scele.cs.ui.ac.id/")
+                .addConverterFactory(SimpleXmlConverterFactory.create())
+                .build();
+
+        NewsService service = client.create(NewsService.class);
+
+        Call<NewsScele> call = service.listNewsScele();
+
+        Response<NewsScele> posts = null;
+
+
+        try {
+            posts = call.execute();
+
+            ArrayList<ItemNews> itemNews = posts.body().getChannel().item;
+
+            ArrayList<News> news = new ArrayList<>();
+
+
+            for (int i=0; i<itemNews.size(); i++){
+                String title = itemNews.get(i).getTitle();
+                String desc = itemNews.get(i).getContent();
+                String link = itemNews.get(i).getLink();
+                String date = itemNews.get(i).getPubdate();
+                String author = itemNews.get(i).getAuthor();
+
+                if (!dbhandler.findNews(title)) {
+                    news.add(new News(title, desc, link, date, author));
+                    dbhandler.addNotification(new NotificationItem(title,desc,NotificationItem.TIPE_NEWS,date));
+                    Log.d("newsnotif", "insert notif news" + dbhandler.getSizeNotificationDB());
+                }
+
+            }
+
+            dbhandler.insertNewsItem(news);
+            return news;
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return new ArrayList<News>();
+
+    }
+
+    @Override
+    protected void onPostExecute(ArrayList<News> newsSceles) {
+
+
+    }
+}
+
-- 
GitLab


From 7403c72a04392889cdfa4ca2e91cd750f5795e96 Mon Sep 17 00:00:00 2001
From: Muhammad Ghozi <ghozi.mghozi@gmail.com>
Date: Wed, 26 Jul 2017 13:02:23 +0700
Subject: [PATCH 08/21] fungsi delete -rifki ghozi

---
 .../ac/ui/cs/myui/database/DatabaseHandler.java   | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
index 1b894fee..1e502bd2 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
@@ -251,6 +251,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 //        db.insert(TABLE_NEWS, null, values);
         db.update(TABLE_NEWS,values, COLUMN_TITLE + " = '"+news.getTitle()+"'", null);
         // String "UPDATE myTable SET Column1 = someValue WHERE columnId = "+ someValue;
+
         db.close();
     }
 
@@ -560,5 +561,19 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         db.close();
         return notificationItemList;
     }
+    public void deleteNotification(List<NotificationItem> notificationItemList){
+        db = this.getWritableDatabase();
+        for (NotificationItem ni:notificationItemList) {
+            db.delete(NotificationSchema.NotificationTable.TABLE_NAME,NotificationSchema.NotificationTable.COLUMN_NAME_TITLE +" = '"+ni.getTitle()+"'",null);
+        }
+        db.close();
+    }
+
+    public void deleteAllNotification(){
+        db = this.getWritableDatabase();
+        db.execSQL("delete from "+ NotificationSchema.NotificationTable.TABLE_NAME);
+        db.close();
+    }
+
 
 }
-- 
GitLab


From 00b0f40b183b27f25feb00bc4f47b1e7a61eee15 Mon Sep 17 00:00:00 2001
From: "agni.wira" <agniwp1@live.com>
Date: Wed, 26 Jul 2017 13:14:04 +0700
Subject: [PATCH 09/21] add background service notification

---
 app/build.gradle                              |  2 +-
 app/src/main/AndroidManifest.xml              | 61 ++++++++++---------
 .../ui/cs/myui/activity/NewsHomeActivity.java | 20 ++----
 .../ui/cs/myui/activity/SplashActivity.java   | 47 ++++++++++++++
 .../BackgroundServiceNewsSchedule.java        | 10 +--
 .../ac/ui/cs/myui/task/NotificationTask.java  |  2 +
 .../res/drawable-xhdpi/background_splash.xml  | 14 +++++
 app/src/main/res/layout/activity_splash.xml   |  9 +++
 app/src/main/res/values/styles.xml            |  4 ++
 9 files changed, 120 insertions(+), 49 deletions(-)
 create mode 100644 app/src/main/java/id/ac/ui/cs/myui/activity/SplashActivity.java
 create mode 100644 app/src/main/res/drawable-xhdpi/background_splash.xml
 create mode 100644 app/src/main/res/layout/activity_splash.xml

diff --git a/app/build.gradle b/app/build.gradle
index c625ae84..e8617ea5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -59,7 +59,7 @@ dependencies {
         exclude group: 'stax', module: 'stax-api'
         exclude group: 'stax', module: 'stax'
     }
-    
+
     compile 'com.android.support:support-annotations:' + rootProject.supportLibVersion;
     // Force usage of support annotations in the test app, since it is internally used by the runner module.
     androidTestCompile 'com.android.support:support-annotations:' + rootProject.supportLibVersion;
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 060e9e42..3075ce00 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="id.ac.ui.cs.myui">
+
     <uses-permission android:name="android.permission.INTERNET" />
 
     <application
@@ -10,58 +11,60 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <activity android:name=".activity.LoginActivity"
-            android:theme="@style/Theme.AppCompat.Light.NoActionBar"
-            android:fullBackupContent="true">
-        </activity>
+        <activity
+            android:name=".activity.LoginActivity"
+            android:fullBackupContent="true"
+            android:theme="@style/Theme.AppCompat.Light.NoActionBar"></activity>
         <activity android:name=".activity.HomeActivity" />
         <activity android:name=".activity.DetailActivity" />
-        <activity android:name=".activity.NewsDetailActivity"
-            android:label="Detail News"/>
-        <activity android:name=".activity.NewsHomeActivity"
-            android:theme="@style/AppTheme.NoActionBar">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-        <activity android:name=".activity.CalendarActivity"
+        <activity
+            android:name=".activity.NewsDetailActivity"
+            android:label="Detail News" />
+        <activity
+            android:name=".activity.NewsHomeActivity"
+            android:theme="@style/AppTheme.NoActionBar"></activity>
+        <activity
+            android:name=".activity.CalendarActivity"
             android:exported="true"
             android:theme="@style/AppTheme.NoActionBar">
-
-        </activity>>
-        <activity android:name=".activity.CalendarDetailActivity"/>
-        <activity android:name=".activity.BookmarkNewsActivity"
-            android:theme="@style/AppTheme.NoActionBar">
         </activity>
+        >
+        <activity android:name=".activity.CalendarDetailActivity" />
+        <activity
+            android:name=".activity.BookmarkNewsActivity"
+            android:theme="@style/AppTheme.NoActionBar"></activity>
         <activity
             android:name=".activity.DrawerActivity"
             android:label="@string/title_activity_bookmark"
-            android:theme="@style/AppTheme.NoActionBar">
-        </activity>
+            android:theme="@style/AppTheme.NoActionBar"></activity>
 
         <service android:name=".firebase_notification.MyFirebaseMessagingService">
             <intent-filter>
-                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
+                <action android:name="com.google.firebase.MESSAGING_EVENT" />
             </intent-filter>
         </service>
-
         <service android:name=".firebase_notification.FirebaseIDService">
             <intent-filter>
-                <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
+                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
             </intent-filter>
         </service>
-
         <service
             android:name=".service.BackgroundServiceNewsSchedule"
-            android:enabled="true"
-           >
-        </service>
-
+            android:enabled="true"></service>
 
         <meta-data
             android:name="io.fabric.ApiKey"
             android:value="99acc7a22ccc8b155fab53154477e9752b4604ba" />
+
+        <activity android:name=".activity.SplashActivity"
+            android:theme="@style/SplashTheme">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+
+        </activity>
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/id/ac/ui/cs/myui/activity/NewsHomeActivity.java b/app/src/main/java/id/ac/ui/cs/myui/activity/NewsHomeActivity.java
index 1434759d..427be67c 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/activity/NewsHomeActivity.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/activity/NewsHomeActivity.java
@@ -23,8 +23,11 @@ import id.ac.ui.cs.myui.database.DatabaseHandler;
 import id.ac.ui.cs.myui.model.News;
 import id.ac.ui.cs.myui.service.BackgroundServiceNewsSchedule;
 import id.ac.ui.cs.myui.task.NewsSceleTask;
+import id.ac.ui.cs.myui.task.NotificationTask;
 import io.fabric.sdk.android.Fabric;
-
+/**
+ * modified by agni.wira dan irma on 26/07/17.
+ */
 public class NewsHomeActivity extends DrawerActivity {
 
     @Override
@@ -37,25 +40,12 @@ public class NewsHomeActivity extends DrawerActivity {
         FrameLayout contentFrameLayout = (FrameLayout) findViewById(R.id.content_bookmark); //Remember this is the FrameLayout area within your activity_main.xml
         getLayoutInflater().inflate(R.layout.activity_news_home, contentFrameLayout);
 
-        final Handler handler = new Handler();
-
-        TimerTask timertask = new TimerTask() {
-            @Override
-            public void run() {
-                handler.post(new Runnable() {
-                    public void run() {
-                        startService(new Intent(getApplicationContext(), BackgroundServiceNewsSchedule.class));
-                    }
-                });
-            }
-        };
-        Timer timer = new Timer();
-        timer.schedule(timertask, 0, 10000);
 
         //new NewsSceleTask(this).execute();
 
         DatabaseHandler dbhandler = new DatabaseHandler(getApplicationContext());
         ArrayList<News> listMenuItems = dbhandler.getAllNews();
+
         final ListView listView = (ListView) findViewById(R.id.list_news);
 
         final NewsAdapter listMenuAdapter = new NewsAdapter(NewsHomeActivity.this, R.layout.news_item_layout, listMenuItems);
diff --git a/app/src/main/java/id/ac/ui/cs/myui/activity/SplashActivity.java b/app/src/main/java/id/ac/ui/cs/myui/activity/SplashActivity.java
new file mode 100644
index 00000000..beb349ea
--- /dev/null
+++ b/app/src/main/java/id/ac/ui/cs/myui/activity/SplashActivity.java
@@ -0,0 +1,47 @@
+package id.ac.ui.cs.myui.activity;
+
+import android.content.Intent;
+import android.os.Handler;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+import id.ac.ui.cs.myui.R;
+import id.ac.ui.cs.myui.service.BackgroundServiceNewsSchedule;
+/**
+ * Created by agni.wira dan irma on 26/07/17.
+ */
+public class SplashActivity extends AppCompatActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        final Handler handler = new Handler();
+        handler.postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                Intent intent = new Intent(SplashActivity.this, NewsHomeActivity.class);
+                startActivity(intent);
+                finish();
+            }
+        }, 2000);
+
+
+        TimerTask timertask = new TimerTask() {
+            @Override
+            public void run() {
+                handler.post(new Runnable() {
+                    public void run() {
+                        startService(new Intent(getApplicationContext(), BackgroundServiceNewsSchedule.class));
+                    }
+                });
+            }
+        };
+        Timer timer = new Timer();
+        timer.schedule(timertask, 0, 10000);
+
+    }
+}
diff --git a/app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java b/app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java
index 08c41ce0..2866134a 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java
@@ -28,7 +28,9 @@ public class BackgroundServiceNewsSchedule extends IntentService {
 
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
-        Log.d("coba service", new Date().toString());
+
+        new NotificationTask(getApplicationContext()).execute();
+
         Intent notificationIntent = new Intent(this, BackgroundServiceNewsSchedule.class);
         DatabaseHandler db = new DatabaseHandler(getApplicationContext());
 
@@ -37,12 +39,12 @@ public class BackgroundServiceNewsSchedule extends IntentService {
 
         Notification notification = new NotificationCompat.Builder(this)
                 .setSmallIcon(R.mipmap.ic_launcher)
-                .setContentTitle("My Awesome App")
-                .setContentText(db.getSizeNotificationDB()+"")
+                .setContentTitle("Notification MyUI")
+                .setContentText(db.getSizeNotificationDB()+" notifications")
                 .setContentIntent(pendingIntent).build();
         startForeground(1337, notification);
 
-        new NotificationTask(getApplicationContext()).execute();
+
         return START_STICKY;
     }
 
diff --git a/app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java b/app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java
index 36e0c32b..85431607 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/task/NotificationTask.java
@@ -36,6 +36,7 @@ import retrofit2.converter.simplexml.SimpleXmlConverterFactory;
 public class NotificationTask extends AsyncTask<Object,Object,ArrayList<News>> {
     private Context context;
     private DatabaseHandler dbhandler;
+    public static boolean finished =false;
 
     public NotificationTask(Context context) {
         this.context = context;
@@ -86,6 +87,7 @@ public class NotificationTask extends AsyncTask<Object,Object,ArrayList<News>> {
             e.printStackTrace();
         }
 
+        finished = true;
         return new ArrayList<News>();
 
     }
diff --git a/app/src/main/res/drawable-xhdpi/background_splash.xml b/app/src/main/res/drawable-xhdpi/background_splash.xml
new file mode 100644
index 00000000..32402ba8
--- /dev/null
+++ b/app/src/main/res/drawable-xhdpi/background_splash.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item
+        android:drawable="@color/colorAccent"/>
+
+    <item>
+        <bitmap
+            android:gravity="center"
+            android:src="@mipmap/ic_launcher"/>
+    </item>
+
+</layer-list>
+
diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml
new file mode 100644
index 00000000..239854df
--- /dev/null
+++ b/app/src/main/res/layout/activity_splash.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="id.ac.ui.cs.myui.activity.SplashActivity">
+
+</android.support.constraint.ConstraintLayout>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 545b9c6d..0ed96a85 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -17,4 +17,8 @@
 
     <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
 
+    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
+        <item name="android:windowBackground">@drawable/background_splash</item>
+    </style>
+
 </resources>
-- 
GitLab


From d1eafaa8a9ae26d6abc073c8dc5b7b51faaa0453 Mon Sep 17 00:00:00 2001
From: EKANARADHIPA DEYNAGAMA DJACARIA - 1406569806 <ekanaradhipad@gmail.com>
Date: Wed, 26 Jul 2017 13:14:50 +0700
Subject: [PATCH 10/21] create base for notification test eka, emon

---
 .../cs/myui/NotificationInstrumentedTest.java | 44 +++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 app/src/androidTest/java/id/ac/ui/cs/myui/NotificationInstrumentedTest.java

diff --git a/app/src/androidTest/java/id/ac/ui/cs/myui/NotificationInstrumentedTest.java b/app/src/androidTest/java/id/ac/ui/cs/myui/NotificationInstrumentedTest.java
new file mode 100644
index 00000000..f2f7dc54
--- /dev/null
+++ b/app/src/androidTest/java/id/ac/ui/cs/myui/NotificationInstrumentedTest.java
@@ -0,0 +1,44 @@
+package id.ac.ui.cs.myui;
+
+import android.support.test.rule.ActivityTestRule;
+
+import org.junit.Rule;
+import org.junit.Test;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
+
+
+/**
+ * Created by ekanaradhipa.d on 26/07/17.
+ */
+
+public class NotificationInstrumentedTest {
+
+    @Rule
+    public ActivityTestRule<NotificationActivity> mActivityRule = new ActivityTestRule(NotificationActivity.class);
+
+    @Test
+    public void testNotificationActivity() {
+        onView(withId(R.id.)).check(matches(isDisplayed()));
+        onView(withId(R.id.)).check(matches(isDisplayed()));
+        onView(withId(R.id.)).check(matches(isDisplayed()));
+        onView(withId(R.id.)).check(matches(isDisplayed()));
+        onView(withId(R.id.)).check(matches(isDisplayed()));
+        onView(withId(R.id.)).check(matches(isDisplayed()));
+    }
+
+    @Test
+    public void deleteNotification() {
+        onView(withId(R.id.)).perform(click());
+    }
+
+    @Test
+    public void clickNotification() {
+        onView(withId(R.id.)).perform(click());
+    }
+    
+}
-- 
GitLab


From 13847276f076a0967fd989363932b682ff228a23 Mon Sep 17 00:00:00 2001
From: Muhammad Ghozi <ghozi.mghozi@gmail.com>
Date: Wed, 26 Jul 2017 13:17:57 +0700
Subject: [PATCH 11/21] -rifki ghozi

---
 .../ui/cs/myui/database/DatabaseHandler.java  | 56 +++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
index 23569b3b..a007d002 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
@@ -496,6 +496,62 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         return counter;
     }
 
+<<<<<<< Updated upstream
+=======
+    public void addNotification(NotificationItem notificationItem) {
+        SQLiteDatabase db = this.getWritableDatabase();
+
+        ContentValues values = new ContentValues();
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_TITLE, notificationItem.getTitle());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION, notificationItem.getDescription());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DATE, notificationItem.getDate());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_TYPE, notificationItem.getType());
+
+        // Inserting Row
+        db.insert(NotificationSchema.NotificationTable.TABLE_NAME, null, values);
+        db.close();
+    }
+
+    public void addAllNotification(List<NotificationItem> notificationItems) {
+        for (NotificationItem item : notificationItems) {
+            addNotification(item);
+        }
+    }
+
+    public List<NotificationItem> getAllNotification() {
+        db = this.getReadableDatabase();
+        List<NotificationItem> notificationItemList = new ArrayList<NotificationItem>();
+        String query = "SELECT * FROM "+ NotificationSchema.NotificationTable.TABLE_NAME;
+        Cursor cur = db.rawQuery(query, null);
+        Log.d("DEBUG ALL PARENT", "Total Menu = "+cur.getCount());
+        if(cur.getCount() > 0) {
+            if(cur.moveToFirst()) {
+                Log.i("tes", "masuk ke 1");
+                while(!cur.isAfterLast()) {
+
+                    NotificationItem item = new NotificationItem();
+                    item.setTitle(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_TITLE)));
+                    item.setDate(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_DATE)));
+                    item.setDescription(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION)));
+                    item.setType(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_TYPE)));
+                    notificationItemList.add(item);
+                    cur.moveToNext();
+                }
+            }
+        }
+        cur.close();
+        db.close();
+        return notificationItemList;
+    }
+    public void deleteNotification(List<NotificationItem> notificationItemList){
+        db = this.getWritableDatabase();
+        for (NotificationItem ni:notificationItemList) {
+            db.delete(NotificationSchema.NotificationTable.TABLE_NAME,NotificationSchema.NotificationTable.COLUMN_NAME_TITLE
+                    +" = '"+ni.getTitle()+"'",null);
+        }
+        db.close();
+    }
+>>>>>>> Stashed changes
 
 
 
-- 
GitLab


From 274d823fad725b86e76dfed918a77ea25d6ad6e7 Mon Sep 17 00:00:00 2001
From: "agni.wira" <agniwp1@live.com>
Date: Wed, 26 Jul 2017 13:21:38 +0700
Subject: [PATCH 12/21] merge with userstory calendar agni & irma

---
 .../ui/cs/myui/database/DatabaseHandler.java  | 22 +------------------
 1 file changed, 1 insertion(+), 21 deletions(-)

diff --git a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
index cd4d8f94..c7383dd4 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
@@ -508,27 +508,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         return counter;
     }
 
-<<<<<<< Updated upstream
-=======
-    public void addNotification(NotificationItem notificationItem) {
-        SQLiteDatabase db = this.getWritableDatabase();
 
-        ContentValues values = new ContentValues();
-        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_TITLE, notificationItem.getTitle());
-        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION, notificationItem.getDescription());
-        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DATE, notificationItem.getDate());
-        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_TYPE, notificationItem.getType());
-
-        // Inserting Row
-        db.insert(NotificationSchema.NotificationTable.TABLE_NAME, null, values);
-        db.close();
-    }
-
-    public void addAllNotification(List<NotificationItem> notificationItems) {
-        for (NotificationItem item : notificationItems) {
-            addNotification(item);
-        }
-    }
 
     public List<NotificationItem> getAllNotification() {
         db = this.getReadableDatabase();
@@ -563,7 +543,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         }
         db.close();
     }
->>>>>>> Stashed changes
+
 
     // Insert a News into databse
     public void addNotification(NotificationItem item){
-- 
GitLab


From f43117d8fe94fa6d62eb1c477e5ab7b816eafda1 Mon Sep 17 00:00:00 2001
From: Muhammad Ghozi <ghozi.mghozi@gmail.com>
Date: Wed, 26 Jul 2017 13:22:36 +0700
Subject: [PATCH 13/21] merge -ghozi rifki

---
 .../main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java  | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
index a007d002..07a74ce5 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
@@ -496,8 +496,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         return counter;
     }
 
-<<<<<<< Updated upstream
-=======
     public void addNotification(NotificationItem notificationItem) {
         SQLiteDatabase db = this.getWritableDatabase();
 
@@ -551,7 +549,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         }
         db.close();
     }
->>>>>>> Stashed changes
+
 
 
 
-- 
GitLab


From 0a8621ef5ce97fcd1aac855523d37dec705b9416 Mon Sep 17 00:00:00 2001
From: "agni.wira" <agniwp1@live.com>
Date: Wed, 26 Jul 2017 13:42:00 +0700
Subject: [PATCH 14/21] resolve conflict notification task irma&agni

---
 .../id/ac/ui/cs/myui/activity/NotificationActivity.java  | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java b/app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java
index b4c486e0..850fb99f 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java
@@ -1,12 +1,17 @@
 package id.ac.ui.cs.myui.activity;
 
+import android.app.Notification;
 import android.content.Intent;
 import android.os.Bundle;
 import android.widget.FrameLayout;
 
 import com.crashlytics.android.Crashlytics;
 
+import java.util.ArrayList;
+
 import id.ac.ui.cs.myui.R;
+import id.ac.ui.cs.myui.database.DatabaseHandler;
+import id.ac.ui.cs.myui.model.NotificationItem;
 import id.ac.ui.cs.myui.task.NotificationTask;
 import io.fabric.sdk.android.Fabric;
 
@@ -27,8 +32,10 @@ public class NotificationActivity extends DrawerActivity {
         FrameLayout contentFrameLayout = (FrameLayout) findViewById(R.id.content_bookmark); //Remember this is the FrameLayout area within your activity_main.xml
         getLayoutInflater().inflate(R.layout.activity_news_home, contentFrameLayout);
 
+        DatabaseHandler dbhandler = new DatabaseHandler(getApplicationContext());
+        ArrayList<NotificationItem> listMenuItems = (ArrayList) dbhandler.getAllNotification();
+
 
-        new NotificationTask(this).execute();
 
     }
 
-- 
GitLab


From b1058de91e0a68fca07dcc55404755e0f2b79131 Mon Sep 17 00:00:00 2001
From: Muhammad Ghozi <ghozi.mghozi@gmail.com>
Date: Wed, 26 Jul 2017 13:43:34 +0700
Subject: [PATCH 15/21] add todo delete function -ghozi rifki

---
 .../ui/cs/myui/database/DatabaseHandler.java  | 31 +++++++++++++++++--
 1 file changed, 28 insertions(+), 3 deletions(-)

diff --git a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
index b652a2a7..cb9aaa2a 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
@@ -28,8 +28,8 @@ import id.ac.ui.cs.myui.schema.NotificationSchema;
  */
 /**
  * modified by Agni wira Buana on 24/07/17 15:23.
- * modified by M Ivan & Ekanaradhipa on 25/07/17 15:23.
- *
+ * modified by M Ivan & Ekanaradhipa on 25/07/17
+ * modifid by M Ghozi & Rifki Adrian on 25/07017 add delete notification
  */
 
 public class DatabaseHandler extends SQLiteOpenHelper {
@@ -576,6 +576,31 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         db.execSQL("delete from "+ NotificationSchema.NotificationTable.TABLE_NAME);
         db.close();
     }
-
+    // TODO: 26/07/17 check tanggalnya jika sudah lebih dari 3 hari maka hapus dari database
+//    public void cleanNotification(){
+//        db=this.getWritableDatabase();
+//        List<NotificationItem> notificationItemList = new ArrayList<NotificationItem>();
+//        String query = "SELECT * FROM "+ NotificationSchema.NotificationTable.TABLE_NAME;
+//        Cursor cur = db.rawQuery(query, null);
+//        if(cur.getCount() > 0) {
+//            if(cur.moveToFirst()) {
+//
+//                while(!cur.isAfterLast()) {
+//                    NotificationItem item = new NotificationItem();
+//                    item.setTitle(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_TITLE)));
+//                    item.setDate(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_DATE)));
+//                    item.setDescription(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION)));
+//                    item.setType(cur.getString(cur.getColumnIndex(NotificationSchema.NotificationTable.COLUMN_NAME_TYPE)));
+//                    if(item.getDate()- this date > 3){
+//                        notificationItemList.add(item);
+//                    }
+//                    cur.moveToNext();
+//                }
+//            }
+//        }
+//        deleteNotification(notificationItemList);
+//        cur.close();
+//        db.close();
+//    }
 
 }
-- 
GitLab


From 3bce0b63d4667a08f33ed6f09bf06b2993a2692d Mon Sep 17 00:00:00 2001
From: idiotme <meityadianti@gmail.com>
Date: Wed, 26 Jul 2017 14:05:55 +0700
Subject: [PATCH 16/21] Adding and fixing database handler test -Haryo&Meitya-

---
 .../cs/myui/database/DatabaseHandlerTest.java | 148 ++++++++++--------
 1 file changed, 82 insertions(+), 66 deletions(-)

diff --git a/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java b/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java
index 6f470272..a3132dfa 100644
--- a/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java
+++ b/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java
@@ -1,18 +1,9 @@
 package id.ac.ui.cs.myui.database;
 
-import android.app.Activity;
-import android.content.Context;
-import android.test.RenamingDelegatingContext;
-import android.util.Log;
-
-import junit.framework.Assert;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.robolectric.Robolectric;
-import org.robolectric.RobolectricGradleTestRunner;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
@@ -22,11 +13,9 @@ import java.util.List;
 
 import id.ac.ui.cs.myui.BuildConfig;
 import id.ac.ui.cs.myui.model.CalendarItem;
-import id.ac.ui.cs.myui.database.DatabaseHandler;
 import id.ac.ui.cs.myui.model.News;
+import id.ac.ui.cs.myui.model.NotificationItem;
 
-import static android.os.Build.VERSION_CODES.LOLLIPOP;
-import static java.security.AccessController.getContext;
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertNotNull;
 
@@ -34,6 +23,8 @@ import static junit.framework.Assert.assertNotNull;
  * Created by muhammad.ghozi41 on 18/07/17.
  *
  * modified by M Ivan & Ekanaradhipa on 25/07/17 15:23.
+ *
+ * modified by Haryo & Meitya on 26/07/17
 
  */
 
@@ -41,23 +32,26 @@ import static junit.framework.Assert.assertNotNull;
 @Config(constants = BuildConfig.class)
 public class DatabaseHandlerTest {
 
-
     DatabaseHandler dbhandler;
 
+    /*Modified by haryo-meitya 26/07 */
     @Before
     public void setUp() {
-
         dbhandler = new DatabaseHandler(RuntimeEnvironment.application);
-    }
 
-    @After
-    public void tearDown(){
+        //Setup for notification testing
+        NotificationItem ni1 = new NotificationItem("test1", "", "", "");
+        NotificationItem ni2 = new NotificationItem("test2", "", "", "");
+        NotificationItem ni3 = new NotificationItem("test3", "", "", "");
 
-        dbhandler.close();
-    }
+        List<NotificationItem> lni = new ArrayList<NotificationItem>();
+        lni.add(ni1);
+        lni.add(ni2);
+        lni.add(ni3);
 
-    @Test
-    public void calenderTest(){
+        dbhandler.addAllNotification(lni);
+
+        //Setup for calendar testing
         CalendarItem ci1 = new CalendarItem(1,"","",1,"","test1");
         CalendarItem ci2 = new CalendarItem(2,"","",2,"","test2");
         CalendarItem ci3 = new CalendarItem(3,"","",3,"","test3");
@@ -68,21 +62,18 @@ public class DatabaseHandlerTest {
         lci.add(ci3);
 
         dbhandler.insertMenu(lci);
-        assertNotNull(dbhandler.getAllParentMenu());
-        List<CalendarItem> dariDatabase = dbhandler.getAllParentMenu();
-        assertEquals("test1",dariDatabase.get(0).getEventName());
-        assertEquals("test2",dariDatabase.get(1).getEventName());
-        assertEquals("test3",dariDatabase.get(2).getEventName());
-    }
-    @Test
-    public void bookmarkTest(){
+
+        //Setup for news testing
         News news1 = new News();
         News news2 = new News();
         News news3 = new News();
 
         news1.setTitle("test1");
+        news1.setLink("linkTest1");
         news2.setTitle("test2");
+        news2.setLink("linkTest2");
         news3.setTitle("test3");
+        news3.setLink("linkTest3");
 
         dbhandler.addNews(news1);
         dbhandler.addNews(news2);
@@ -90,6 +81,29 @@ public class DatabaseHandlerTest {
         dbhandler.setBookmark(news1);
         dbhandler.setBookmark(news2);
         dbhandler.setBookmark(news3);
+    }
+
+    @After
+    public void tearDown(){
+        dbhandler.close();
+    }
+
+    /*Modified by haryo-meitya 26/07 */
+    @Test
+    public void calenderTest(){
+        assertNotNull(dbhandler.getAllParentMenu());
+        List<CalendarItem> dariDatabase = dbhandler.getAllParentMenu();
+        assertEquals("test1",dariDatabase.get(0).getEventName());
+        assertEquals("test2",dariDatabase.get(1).getEventName());
+        assertEquals("test3",dariDatabase.get(2).getEventName());
+    }
+
+    /*Modified by haryo-meitya 26/07 */
+    @Test
+    public void bookmarkTest(){
+        News news1 = dbhandler.getAllNews().get(0);
+        News news2 = dbhandler.getAllNews().get(1);
+        News news3 = dbhandler.getAllNews().get(2);
 
         //Test in model: is bookmarked should be true
         assertEquals(news1.isBookmarked(), true);
@@ -103,27 +117,15 @@ public class DatabaseHandlerTest {
         assertEquals(listBookmark.get(0).getTitle().equals("test1"), true);
         assertEquals(listBookmark.get(1).getTitle().equals("test2"), true);
         assertEquals(listBookmark.get(2).getTitle().equals("test3"), true);
-
     }
 
+    /*Modified by haryo-meitya 26/07 */
     @Test
     public void unBookmarkTest(){
-        News news1 = new News();
-        News news2 = new News();
-        News news3 = new News();
-
-        news1.setTitle("test1");
-        news1.setLink("linkTest1");
-        news2.setTitle("test2");
-        news2.setLink("linkTest2");
-        news3.setTitle("test3");
-        news3.setLink("linkTest3");
+        News news1 = dbhandler.getAllNews().get(0);
+        News news2 = dbhandler.getAllNews().get(1);
+        News news3 = dbhandler.getAllNews().get(2);
 
-        dbhandler.addNews(news1);
-        dbhandler.addNews(news2);
-        dbhandler.addNews(news3);
-        dbhandler.setBookmark(news2);
-        dbhandler.setBookmark(news3);
         dbhandler.deleteBookmark(news1);
 
         //Test in model: is bookmarked should be true, except news1
@@ -138,38 +140,52 @@ public class DatabaseHandlerTest {
         assertEquals(listBookmark.get(0).getTitle().equals("test2"), true);
         assertEquals(listBookmark.get(1).getTitle().equals("test3"), true);
         dbhandler.updateBookmark(news2);
-       listBookmark = dbhandler.getAllBookmarkedNews();
-
+        listBookmark = dbhandler.getAllBookmarkedNews();
         assertEquals(listBookmark.size(), 1);
     }
+
+    /*Modified by haryo-meitya 26/07 */
     @Test
-   public void findNewsTest(){
-        News news1 = new News("test1","a","a","a","a");
-        News news2 = new News("test2","","","","");
-        News news3 = new News("test3","","","","");
-
-        List<News> newsList = new ArrayList<>();
-        newsList.add(news1);
-        newsList.add(news2);
-        dbhandler.insertNewsItem(newsList);
-        List<News> currentList = new ArrayList<>();
-//        dbhandler.findNews("tes1t");
+    public void successFindNewsTest(){
+        News news1 = dbhandler.getAllNews().get(0);
+        News news2 = dbhandler.getAllNews().get(1);
+        News news3 = dbhandler.getAllNews().get(2);
+
         assertEquals(true,  dbhandler.findNews(news1.getTitle()));
-        assertEquals(false,  dbhandler.findNews(news3.getTitle()));
-        currentList = dbhandler.getAllNews();
-        assertEquals(currentList.size(), 2);
-     //   newsList.add(news3);
-        dbhandler.addNews(news3);
+        assertEquals(true,  dbhandler.findNews(news2.getTitle()));
+        assertEquals(true,  dbhandler.findNews(news3.getTitle()));
 
-        currentList = dbhandler.getAllNews();
-        assertEquals(currentList.size(), 3);
+    }
 
-        assertEquals(true,  dbhandler.findNews(news3.getTitle()));
+    /*Modified by haryo-meitya 26/07 */
+    @Test
+    public  void failedFindNewsTest() {
+        News news4 = new News("test4", "", "", "", "");
 
+        assertEquals(false,  dbhandler.findNews(news4.getTitle()));
     }
 
+    /*Created by haryo-meitya 26/07 */
     @Test
     public void addNotificationTest() {
+        assertNotNull(dbhandler.getAllNotification());
+    }
 
+    /*Created by haryo-meitya 26/07 */
+    @Test
+    public void deleteNotificationTest() {
+        assertEquals(dbhandler.getAllNotification().size(), 3);
+        List<NotificationItem> delTarget = new ArrayList<NotificationItem>();
+        delTarget.add(dbhandler.getAllNotification().get(0));
+        dbhandler.deleteNotification(delTarget);
+        assertEquals(dbhandler.getAllNotification().size(), 2);
+    }
+
+    /*Created by haryo-meitya 26/07 */
+    @Test
+    public void deleteAllNotificationTest() {
+        assertEquals(dbhandler.getAllNotification().size(), 3);
+        dbhandler.deleteAllNotification();
+        assertEquals(dbhandler.getAllNotification().size(), 0);
     }
 }
-- 
GitLab


From 07f92e946707636ccf2c7c0ead8e611d0ed06d06 Mon Sep 17 00:00:00 2001
From: idiotme <meityadianti@gmail.com>
Date: Wed, 26 Jul 2017 14:09:51 +0700
Subject: [PATCH 17/21] Resolved conflict for pushing at userstory
 -Haryo&Meitya-

---
 .../id/ac/ui/cs/myui/database/DatabaseHandlerTest.java   | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java b/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java
index a3132dfa..67b9d309 100644
--- a/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java
+++ b/app/src/test/java/id/ac/ui/cs/myui/database/DatabaseHandlerTest.java
@@ -44,12 +44,9 @@ public class DatabaseHandlerTest {
         NotificationItem ni2 = new NotificationItem("test2", "", "", "");
         NotificationItem ni3 = new NotificationItem("test3", "", "", "");
 
-        List<NotificationItem> lni = new ArrayList<NotificationItem>();
-        lni.add(ni1);
-        lni.add(ni2);
-        lni.add(ni3);
-
-        dbhandler.addAllNotification(lni);
+        dbhandler.addNotification(ni1);
+        dbhandler.addNotification(ni2);
+        dbhandler.addNotification(ni3);
 
         //Setup for calendar testing
         CalendarItem ci1 = new CalendarItem(1,"","",1,"","test1");
-- 
GitLab


From 9305b4442c0817384f0f1b3081d256bcca9d41f9 Mon Sep 17 00:00:00 2001
From: "agni.wira" <agniwp1@live.com>
Date: Wed, 26 Jul 2017 14:21:28 +0700
Subject: [PATCH 18/21] add intent on notification agni&irma

---
 app/src/main/AndroidManifest.xml                |  7 ++++++-
 .../ac/ui/cs/myui/activity/SplashActivity.java  |  2 +-
 .../service/BackgroundServiceNewsSchedule.java  | 17 +++++++++++++++--
 3 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3075ce00..98b0df6b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,7 +28,12 @@
             android:exported="true"
             android:theme="@style/AppTheme.NoActionBar">
         </activity>
-        >
+        <activity
+            android:name=".activity.NotificationActivity"
+            android:exported="true"
+            android:theme="@style/AppTheme.NoActionBar">
+        </activity>
+
         <activity android:name=".activity.CalendarDetailActivity" />
         <activity
             android:name=".activity.BookmarkNewsActivity"
diff --git a/app/src/main/java/id/ac/ui/cs/myui/activity/SplashActivity.java b/app/src/main/java/id/ac/ui/cs/myui/activity/SplashActivity.java
index beb349ea..eca10b20 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/activity/SplashActivity.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/activity/SplashActivity.java
@@ -35,7 +35,7 @@ public class SplashActivity extends AppCompatActivity {
             public void run() {
                 handler.post(new Runnable() {
                     public void run() {
-                        startService(new Intent(getApplicationContext(), BackgroundServiceNewsSchedule.class));
+                        startService(new Intent(SplashActivity.this, BackgroundServiceNewsSchedule.class));
                     }
                 });
             }
diff --git a/app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java b/app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java
index 2866134a..6d2292d4 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/service/BackgroundServiceNewsSchedule.java
@@ -2,7 +2,9 @@ package id.ac.ui.cs.myui.service;
 
 import android.app.IntentService;
 import android.app.Notification;
+import android.app.NotificationManager;
 import android.app.PendingIntent;
+import android.content.Context;
 import android.content.Intent;
 import android.support.annotation.Nullable;
 import android.support.v4.app.NotificationCompat;
@@ -12,6 +14,7 @@ import java.util.Date;
 
 import id.ac.ui.cs.myui.R;
 import id.ac.ui.cs.myui.activity.NewsHomeActivity;
+import id.ac.ui.cs.myui.activity.NotificationActivity;
 import id.ac.ui.cs.myui.database.DatabaseHandler;
 import id.ac.ui.cs.myui.task.NotificationTask;
 
@@ -31,18 +34,28 @@ public class BackgroundServiceNewsSchedule extends IntentService {
 
         new NotificationTask(getApplicationContext()).execute();
 
-        Intent notificationIntent = new Intent(this, BackgroundServiceNewsSchedule.class);
+        Intent notificationIntent = new Intent(this, NotificationActivity.class);
+        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
+                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+
         DatabaseHandler db = new DatabaseHandler(getApplicationContext());
 
+        NotificationManager notificationManager = (NotificationManager) getApplicationContext()
+                .getSystemService(Context.NOTIFICATION_SERVICE);
+
         PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
-                notificationIntent, 0);
+                notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
 
         Notification notification = new NotificationCompat.Builder(this)
                 .setSmallIcon(R.mipmap.ic_launcher)
                 .setContentTitle("Notification MyUI")
                 .setContentText(db.getSizeNotificationDB()+" notifications")
                 .setContentIntent(pendingIntent).build();
+
+        notification.flags |= Notification.FLAG_AUTO_CANCEL;
+
         startForeground(1337, notification);
+        //notificationManager.notify(0, notification);
 
 
         return START_STICKY;
-- 
GitLab


From 7a090fa8207e26258d87433e511fbbf378e956f9 Mon Sep 17 00:00:00 2001
From: EKANARADHIPA DEYNAGAMA DJACARIA - 1406569806 <ekanaradhipad@gmail.com>
Date: Wed, 26 Jul 2017 14:24:28 +0700
Subject: [PATCH 19/21] unfinished instrumented task

---
 .../cs/myui/NotificationInstrumentedTest.java | 36 +++++++++++--------
 .../cs/myui/activity/NewsDetailActivity.java  |  7 ++--
 2 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/app/src/androidTest/java/id/ac/ui/cs/myui/NotificationInstrumentedTest.java b/app/src/androidTest/java/id/ac/ui/cs/myui/NotificationInstrumentedTest.java
index f2f7dc54..b878cffc 100644
--- a/app/src/androidTest/java/id/ac/ui/cs/myui/NotificationInstrumentedTest.java
+++ b/app/src/androidTest/java/id/ac/ui/cs/myui/NotificationInstrumentedTest.java
@@ -5,11 +5,16 @@ import android.support.test.rule.ActivityTestRule;
 import org.junit.Rule;
 import org.junit.Test;
 
+import id.ac.ui.cs.myui.activity.NotificationActivity;
+
+import static android.support.test.espresso.Espresso.onData;
 import static android.support.test.espresso.Espresso.onView;
 import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.action.ViewActions.swipeLeft;
 import static android.support.test.espresso.assertion.ViewAssertions.matches;
 import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.withId;
+import static org.hamcrest.Matchers.anything;
 
 
 /**
@@ -23,22 +28,23 @@ public class NotificationInstrumentedTest {
 
     @Test
     public void testNotificationActivity() {
-        onView(withId(R.id.)).check(matches(isDisplayed()));
-        onView(withId(R.id.)).check(matches(isDisplayed()));
-        onView(withId(R.id.)).check(matches(isDisplayed()));
-        onView(withId(R.id.)).check(matches(isDisplayed()));
-        onView(withId(R.id.)).check(matches(isDisplayed()));
-        onView(withId(R.id.)).check(matches(isDisplayed()));
-    }
+//        onView(withId(R.id.)).check(matches(isDisplayed()));
+//        onView(withId(R.id.)).check(matches(isDisplayed()));
+//        onView(withId(R.id.)).check(matches(isDisplayed()));
+//        onView(withId(R.id.)).check(matches(isDisplayed()));
+//        onView(withId(R.id.)).check(matches(isDisplayed()));
+//        onView(withId(R.id.)).check(matches(isDisplayed()));
 
-    @Test
-    public void deleteNotification() {
-        onView(withId(R.id.)).perform(click());
     }
 
-    @Test
-    public void clickNotification() {
-        onView(withId(R.id.)).perform(click());
-    }
-    
+//    @Test
+//    public void deleteNotification() {
+//        onData(anything()).inAdapterView(withId(R.id.list_notification)).atPosition(0).perform(swipeLeft());
+//    }
+//
+//    @Test
+//    public void clickNotification() {
+//        onView(withId(R.id.)).perform(click());
+//    }
+
 }
diff --git a/app/src/main/java/id/ac/ui/cs/myui/activity/NewsDetailActivity.java b/app/src/main/java/id/ac/ui/cs/myui/activity/NewsDetailActivity.java
index d5c2aaa8..cb189a44 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/activity/NewsDetailActivity.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/activity/NewsDetailActivity.java
@@ -37,7 +37,7 @@ public class NewsDetailActivity extends AppCompatActivity {
     ImageButton ibShareWA;
 
     DatabaseHandler databaseHandler;
-    String parent; //Activity that showed before this activity. It can be bookmark activity or news home activity.
+    String parent = ""; //Activity that showed before this activity. It can be bookmark activity or news home activity.
     //If former activity was bookmark: parent.equals("bookmark"), otherwise: parent.equals("newsHome").
 
     @Override
@@ -55,14 +55,15 @@ public class NewsDetailActivity extends AppCompatActivity {
         final String author = intent.getStringExtra("Author");
         final String title = intent.getStringExtra("Title");
         final String link = intent.getStringExtra("link");
-        parent = getIntent().getStringExtra("contextParent");
+        parent = intent.getStringExtra("contextParent");
+     //   System.out.println("parent : " + parent);
 
 
         ibShareLine = (ImageButton) findViewById(R.id.button_line);
         ibShare = (ImageButton) findViewById(R.id.button_share);
         ibShareWA = (ImageButton) findViewById(R.id.button_wa);
 
-        Log.d("desc",description);
+        //Log.d("desc",description);
         final TextView pubDate = (TextView) findViewById(R.id.pubdate);
         final TextView news_title = (TextView) findViewById(R.id.news_title);
         final TextView news_author = (TextView) findViewById(R.id.news_author);
-- 
GitLab


From b95c1a0c081058175a03b15a404009f9ffce8609 Mon Sep 17 00:00:00 2001
From: "agni.wira" <agniwp1@live.com>
Date: Wed, 26 Jul 2017 14:37:49 +0700
Subject: [PATCH 20/21] update notification bar agni&irma

---
 .../myui/activity/NotificationActivity.java   |  7 +++++-
 .../ui/cs/myui/database/DatabaseHandler.java  | 24 +++++++++++++++++--
 .../ac/ui/cs/myui/model/NotificationItem.java | 10 ++++++++
 .../ui/cs/myui/schema/NotificationSchema.java |  1 +
 4 files changed, 39 insertions(+), 3 deletions(-)

diff --git a/app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java b/app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java
index 850fb99f..8d915573 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/activity/NotificationActivity.java
@@ -33,7 +33,12 @@ public class NotificationActivity extends DrawerActivity {
         getLayoutInflater().inflate(R.layout.activity_news_home, contentFrameLayout);
 
         DatabaseHandler dbhandler = new DatabaseHandler(getApplicationContext());
-        ArrayList<NotificationItem> listMenuItems = (ArrayList) dbhandler.getAllNotification();
+        ArrayList<NotificationItem> items = (ArrayList) dbhandler.getAllNotification();
+
+        for(int i=0; i<items.size();i++){
+            dbhandler.updateNotification(items.get(i));
+        }
+
 
 
 
diff --git a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
index a319a5f4..498889ad 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/database/DatabaseHandler.java
@@ -84,7 +84,8 @@ public class DatabaseHandler extends SQLiteOpenHelper {
                     NotificationSchema.NotificationTable.COLUMN_NAME_TITLE + " TEXT, " +
                     NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION + " TEXT, " +
                     NotificationSchema.NotificationTable.COLUMN_NAME_DATE + " TEXT, " +
-                    NotificationSchema.NotificationTable.COLUMN_NAME_TYPE + " TEXT)";
+                    NotificationSchema.NotificationTable.COLUMN_NAME_TYPE + " TEXT," +
+                    NotificationSchema.NotificationTable.COLUMN_NAME_SEEN + " INT)";
 
     private static final String SQL_DROP_NOTIFICATIONS_TABLE =
             "DROP TABLE IF EXIST " + NotificationSchema.NotificationTable.TABLE_NAME;
@@ -579,6 +580,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION , item.getDescription());
         values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DATE, item.getDate());
         values.put(NotificationSchema.NotificationTable.COLUMN_NAME_TYPE, item.getType());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_SEEN, item.getSeen());
 
         // Inserting Row
         db.insert(NotificationSchema.NotificationTable.TABLE_NAME, null, values);
@@ -589,7 +591,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         db = this.getReadableDatabase();
         int counter =0;
 
-        Cursor c = db.rawQuery("SELECT * FROM notifications_item", null);
+        Cursor c = db.rawQuery("SELECT * FROM notifications_item WHERE seen=0", null);
         if(c.moveToFirst()){
             do{
                 //assing values
@@ -606,6 +608,24 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         return counter;
     }
 
+    public void updateNotification(NotificationItem item){
+        db = this.getWritableDatabase();
+
+        ContentValues values = new ContentValues();
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_TITLE, item.getTitle());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DESCRIPTION , item.getDescription());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_DATE, item.getDate());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_TYPE, item.getType());
+        values.put(NotificationSchema.NotificationTable.COLUMN_NAME_SEEN, 1);
+
+        // updating row
+        db.update(NotificationSchema.NotificationTable.TABLE_NAME, values, COLUMN_TITLE + " = '" + item.getTitle() + "'", null);
+        db.close();
+    }
+
+
+
+
 
     // TODO: 26/07/17 check tanggalnya jika sudah lebih dari 3 hari maka hapus dari database
 //    public void cleanNotification(){
diff --git a/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java b/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
index 54c36cb9..0da4df48 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/model/NotificationItem.java
@@ -13,18 +13,28 @@ public class NotificationItem {
     String description;
     String type;
     String date;
+    int seen;
 
     public NotificationItem(String title, String description, String type, String date) {
         this.title = title;
         this.description = description;
         this.type = type;
         this.date = date;
+        this.seen = 0;
     }
 
 
     public NotificationItem() {
     }
 
+    public int getSeen() {
+        return seen;
+    }
+
+    public void setSeen(int seen) {
+        this.seen = seen;
+    }
+
     public String getTitle() {
         return title;
     }
diff --git a/app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java b/app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java
index 8a0952af..6931c941 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/schema/NotificationSchema.java
@@ -12,6 +12,7 @@ public class NotificationSchema {
         public static final String COLUMN_NAME_DESCRIPTION = "description";
         public static final String COLUMN_NAME_TYPE = "type";
         public static final String COLUMN_NAME_DATE = "date";
+        public static final String COLUMN_NAME_SEEN = "seen";
 
     }
 }
-- 
GitLab


From 3f9300c30879e75627669c5b975042ba2f383f27 Mon Sep 17 00:00:00 2001
From: EKANARADHIPA DEYNAGAMA DJACARIA - 1406569806 <ekanaradhipad@gmail.com>
Date: Wed, 26 Jul 2017 16:07:29 +0700
Subject: [PATCH 21/21] fixing NewsDetailInstrumentedTest

---
 .../cs/myui/NewsDetailInstrumentedTest.java   | 35 +++++++++++++++++--
 .../cs/myui/activity/NewsDetailActivity.java  |  6 ++--
 2 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/app/src/androidTest/java/id/ac/ui/cs/myui/NewsDetailInstrumentedTest.java b/app/src/androidTest/java/id/ac/ui/cs/myui/NewsDetailInstrumentedTest.java
index 03747417..cd0cc499 100644
--- a/app/src/androidTest/java/id/ac/ui/cs/myui/NewsDetailInstrumentedTest.java
+++ b/app/src/androidTest/java/id/ac/ui/cs/myui/NewsDetailInstrumentedTest.java
@@ -1,5 +1,9 @@
 package id.ac.ui.cs.myui;
 
+import android.content.Context;
+import android.content.Intent;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.espresso.action.ViewActions;
 import android.support.test.filters.LargeTest;
 import android.support.test.rule.ActivityTestRule;
 import android.support.test.runner.AndroidJUnit4;
@@ -10,8 +14,10 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import id.ac.ui.cs.myui.activity.NewsDetailActivity;
+import id.ac.ui.cs.myui.activity.NewsHomeActivity;
 import id.ac.ui.cs.myui.helper.AppsHelper;
 
+import static android.support.test.espresso.Espresso.onData;
 import static android.support.test.espresso.Espresso.onView;
 import static android.support.test.espresso.action.ViewActions.click;
 import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
@@ -21,9 +27,17 @@ import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.withId;
 import static android.support.test.espresso.matcher.ViewMatchers.withResourceName;
 import static android.support.test.espresso.matcher.ViewMatchers.withText;
+import static java.lang.Thread.sleep;
+import static org.hamcrest.Matchers.anything;
+
 /**
  * Created by Ivan on 7/19/17.
  */
+
+/**
+ * modified by muhmmad.yusuf43 and eka naradhipa on 26/07/17 15:59.
+ */
+
 @RunWith(AndroidJUnit4.class)
 @LargeTest
 public class NewsDetailInstrumentedTest {
@@ -33,14 +47,19 @@ public class NewsDetailInstrumentedTest {
     @Before
     public void initValidString() {
         // Specify a valid string.
-
     }
 
     @Rule
-    public ActivityTestRule<NewsDetailActivity> mActivityRule = new ActivityTestRule(NewsDetailActivity.class);
+    public ActivityTestRule<NewsHomeActivity> mActivityRule = new ActivityTestRule(NewsHomeActivity.class);
+
+    @Test
+    public void testNewsHomeActivity() {
+        onView(withId(R.id.list_news)).check(matches(isDisplayed()));
+    }
 
     @Test
     public void testNewsDetailActivity() {
+        onData(anything()).inAdapterView(withId(R.id.list_news)).atPosition(0).perform(click());
         onView(withId(R.id.pubdate)).check(matches(isDisplayed()));
         onView(withId(R.id.button_wa)).check(matches(isDisplayed()));
         onView(withId(R.id.button_line)).check(matches(isDisplayed()));
@@ -51,13 +70,25 @@ public class NewsDetailInstrumentedTest {
 
     @Test
     public void testShareButtonLine() {
+        onData(anything()).inAdapterView(withId(R.id.list_news)).atPosition(0).perform(click());
+        ViewActions.scrollTo(); // scroll to the bottom screen in case it has a long description
         onView(withId(R.id.button_line)).perform(click());
         AppsHelper.isAppRunning(NewsDetailActivity.context, PACKAGE_LINE);
     }
 
     @Test
     public void testShareButtonWA() {
+        onData(anything()).inAdapterView(withId(R.id.list_news)).atPosition(0).perform(click());
+        ViewActions.scrollTo(); // scroll to the bottom screen in case it has a long description
         onView(withId(R.id.button_wa)).perform(click());
         AppsHelper.isAppRunning(NewsDetailActivity.context, PACKAGE_WA);
     }
+
+    @Test
+    public void testBookmarkButton() {
+        onData(anything()).inAdapterView(withId(R.id.list_news)).atPosition(0).perform(click());
+        ViewActions.scrollTo(); // scroll to the bottom screen in case it has a long description
+        onView(withId(R.id.button_bookmark)).perform(click());
+        // TODO perform check toast message
+    }
 }
diff --git a/app/src/main/java/id/ac/ui/cs/myui/activity/NewsDetailActivity.java b/app/src/main/java/id/ac/ui/cs/myui/activity/NewsDetailActivity.java
index d5c2aaa8..dd18ac67 100644
--- a/app/src/main/java/id/ac/ui/cs/myui/activity/NewsDetailActivity.java
+++ b/app/src/main/java/id/ac/ui/cs/myui/activity/NewsDetailActivity.java
@@ -62,7 +62,7 @@ public class NewsDetailActivity extends AppCompatActivity {
         ibShare = (ImageButton) findViewById(R.id.button_share);
         ibShareWA = (ImageButton) findViewById(R.id.button_wa);
 
-        Log.d("desc",description);
+      //  Log.d("desc",description);
         final TextView pubDate = (TextView) findViewById(R.id.pubdate);
         final TextView news_title = (TextView) findViewById(R.id.news_title);
         final TextView news_author = (TextView) findViewById(R.id.news_author);
@@ -80,12 +80,10 @@ public class NewsDetailActivity extends AppCompatActivity {
         news_title.setText(title);
         news_author.setText(author);
 
-
-        news_author.setText(intent.getStringExtra("author"));
         news_author.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                Log.d("CLICK", "Next update can see author profile");
+                Toast.makeText(context,"Next update can see author profile",Toast.LENGTH_SHORT).show();
             }
         });
 
-- 
GitLab