package com.realtrackandroid.backend.reminders; import java.util.ArrayList; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.realtrackandroid.backend.GlobalDatabaseHelper; import com.realtrackandroid.models.reminders.Reminders; import com.realtrackandroid.reminderalarms.NotificationReceiver; /* * DAO object to update/delete/add reminders */ public class RemindersDAO { private GlobalDatabaseHelper opener; private SQLiteDatabase readDatabase; private SQLiteDatabase writeDatabase; public RemindersDAO(Context context) { this.opener = GlobalDatabaseHelper.getInstance(context); this.readDatabase = opener.getReadableDatabase(); this.writeDatabase = opener.getWritableDatabase(); closeDB(); } private void openDB() { if (!readDatabase.isOpen()) { readDatabase = opener.getReadableDatabase(); } if (!writeDatabase.isOpen()) { writeDatabase = opener.getWritableDatabase(); } } private void closeDB() { if (readDatabase.isOpen()) { readDatabase.close(); } if (writeDatabase.isOpen()) { writeDatabase.close(); } } public ArrayList<Reminders> getAllReminders() { openDB(); ArrayList<Reminders> output = null; String[] columnsToRead = new String[3]; columnsToRead[0] = Reminders.COLUMN_ID; columnsToRead[1] = Reminders.COLUMN_ACTIVITYID; columnsToRead[2] = Reminders.COLUMN_REMINDTIME; Cursor returnData = readDatabase.query(Reminders.REMINDERS_TABLE, columnsToRead, null, null, null, null, null); output = extractReminders(returnData); closeDB(); return output; } public ArrayList<Reminders> getAllRemindersForActivityId(int activityid) { openDB(); ArrayList<Reminders> output = null; String[] columnsToRead = new String[3]; columnsToRead[0] = Reminders.COLUMN_ID; columnsToRead[1] = Reminders.COLUMN_ACTIVITYID; columnsToRead[2] = Reminders.COLUMN_REMINDTIME; String whereClause = Reminders.COLUMN_ACTIVITYID + '=' + activityid; String orderbyClause = Reminders.COLUMN_REMINDTIME + " asc"; // order in ascending order of // remind time Cursor returnData = readDatabase.query(Reminders.REMINDERS_TABLE, columnsToRead, whereClause, null, null, null, orderbyClause); output = extractReminders(returnData); closeDB(); return output; } private ArrayList<Reminders> extractReminders(Cursor returnData) { // The output ArrayList is initialized ArrayList<Reminders> output = new ArrayList<Reminders>(); // Move the counter to the first item in the return data returnData.moveToFirst(); int count = 0; // While there are still values in the return data while (!returnData.isAfterLast()) { // Add the new Reminders to the ArrayList Reminders r = new Reminders(); r.setId(Integer.parseInt(returnData.getString(0))); r.setActivityid(Integer.parseInt(returnData.getString(1))); r.setRemindTime(returnData.getLong(2)); output.add(count, r); // Advance the Cursor returnData.moveToNext(); // Advance the counter count++; } // Return the ArrayList return output; } public Reminders getReminderWithId(int id) { openDB(); String[] columnsToRead = new String[2]; columnsToRead[0] = Reminders.COLUMN_ACTIVITYID; columnsToRead[1] = Reminders.COLUMN_REMINDTIME; String whereClause = Reminders.COLUMN_ID + '=' + id; Cursor returnData = readDatabase.query(Reminders.REMINDERS_TABLE, columnsToRead, whereClause, null, null, null, null); returnData.moveToFirst(); Reminders r = new Reminders(); r.setId(id); r.setActivityid(returnData.getInt(0)); r.setRemindTime(returnData.getLong(1)); closeDB(); // Return the constructed Reminders object return r; } public void addReminders(Reminders reminder, Context context) { openDB(); ContentValues newValue = new ContentValues(2); newValue.put(Reminders.COLUMN_ACTIVITYID, reminder.getActivityid()); newValue.put(Reminders.COLUMN_REMINDTIME, reminder.getRemindTime()); // Insert the item into the database writeDatabase.insert(Reminders.REMINDERS_TABLE, null, newValue); closeDB(); createOrUpdateAlarms(context); } public void updateReminders(Reminders reminder, Context context) { openDB(); ContentValues newValue = new ContentValues(2); newValue.put(Reminders.COLUMN_ACTIVITYID, reminder.getActivityid()); newValue.put(Reminders.COLUMN_REMINDTIME, reminder.getRemindTime()); String whereClause = Reminders.COLUMN_ID + '=' + reminder.getId(); // Update the item into the database writeDatabase.update(Reminders.REMINDERS_TABLE, newValue, whereClause, null); closeDB(); createOrUpdateAlarms(context); } public int deleteReminders(int id, Context context) { openDB(); String whereClause = Reminders.COLUMN_ID + '=' + id; // Return the total number of rows removed int numItemsDeleted = writeDatabase.delete(Reminders.REMINDERS_TABLE, whereClause, null); closeDB(); createOrUpdateAlarms(context); return numItemsDeleted; } private void createOrUpdateAlarms(Context context) { // Schedule an alarm for the notifications when the reminder is first created // this action is eventually performed in NotificationService // The same code is also invoked on a BOOT_COMPLETED event because the NotificationService // does not remember the alarms set before a reboot NotificationReceiver.scheduleAlarm(context); } }