package com.ramostechie.android.taskmanager; import java.util.ArrayList; import com.ramostechie.android.taskmanager.tasks.Task; import com.ramostechie.android.taskmanager.tasks.TasksSQLiteOpenHelper; import static com.ramostechie.android.taskmanager.tasks.TasksSQLiteOpenHelper.*; import android.app.Application; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; //add to the manifest android:name=".TaskManagerApplication" public class TaskManagerApplication extends Application { private ArrayList<Task> currentTasks; private SQLiteDatabase database; @Override public void onCreate() { super.onCreate(); TasksSQLiteOpenHelper helper = new TasksSQLiteOpenHelper(this); database = helper.getWritableDatabase(); if (null == currentTasks) { loadTasks(); } } private void loadTasks() { currentTasks = new ArrayList<Task>(); Cursor tasksCursor = database.query( TASKS_TABLE, new String[] {TASK_ID, TASK_NAME, TASK_COMPLETE,TASK_DESCRIPTION, TASK_ADDRESS, TASK_LATITUDE, TASK_LONGITUDE}, null, null, null, null, String.format("%s,%s", TASK_COMPLETE, TASK_NAME,TASK_DESCRIPTION)); tasksCursor.moveToFirst(); Task t; if (! tasksCursor.isAfterLast()) { do { long id = tasksCursor.getLong(0); String name = tasksCursor.getString(1); String boolValue = tasksCursor.getString(2); String description = tasksCursor.getString(3); String address = tasksCursor.getString(4); float latitude = tasksCursor.getFloat(5); float longitude = tasksCursor.getFloat(6); boolean complete = Boolean.parseBoolean(boolValue); t = new Task(name); t.setId(id); t.setComplete(complete); t.setDescription(description); t.setAddress(address); t.setLatitude(latitude); t.setLongitude(longitude); currentTasks.add(t); } while (tasksCursor.moveToNext()); } tasksCursor.close(); } public void setCurrentTasks(ArrayList<Task> currentTasks) { this.currentTasks = currentTasks; } public ArrayList<Task> getCurrentTasks() { return currentTasks; } public void addTask(Task t) { assert(null != t); ContentValues values = new ContentValues(); values.put(TASK_NAME, t.getName()); values.put(TASK_COMPLETE, Boolean.toString(t.isComplete())); values.put(TASK_DESCRIPTION, t.getDescription()); values.put(TASK_ADDRESS, t.getAddress()); values.put(TASK_LATITUDE, t.getLatitude()); values.put(TASK_LONGITUDE, t.getLongitude()); t.setId(database.insert(TASKS_TABLE, null, values)); currentTasks.add(t); } public void saveTask(Task t) { assert(null != t); ContentValues values = new ContentValues(); values.put(TASK_NAME, t.getName()); values.put(TASK_COMPLETE, Boolean.toString(t.isComplete())); values.put(TASK_DESCRIPTION, t.getDescription()); values.put(TASK_ADDRESS, t.getAddress()); values.put(TASK_LATITUDE, t.getLatitude()); values.put(TASK_LONGITUDE, t.getLongitude()); long id = t.getId(); String where = String.format("%s = %d", TASK_ID, id); database.update(TASKS_TABLE, values, where, null); } public void deleteTasks(Long[] ids) { StringBuffer idList = new StringBuffer(); for (int i=0; i<ids.length; i++) { idList.append(ids[i]); if (i < ids.length - 1) { idList.append(","); } } String where = String.format("%s in (%s)", TASK_ID, idList); database.delete(TASKS_TABLE, where, null); } }