package edu.mit.mitmobile2.emergency; import edu.mit.mitmobile2.objs.EmergencyItem.Contact; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.provider.BaseColumns; public class EmergencyDB { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "emergency.db"; private static final String CONTACTS_TABLE = "emergency_contacts"; private static final String SHORT_LIST_LIMIT = "3"; // table columns static final class ContactsTable implements BaseColumns { static final String CONTACT_NAME = "contact"; static final String CONTACT_DESCRIPTION = "description"; static final String CONTACT_PHONE = "phone"; } SQLiteOpenHelper mDBHelper; private static EmergencyDB sInstance = null; public static EmergencyDB getInstance(Context context) { if (sInstance == null) { sInstance = new EmergencyDB(context); } return sInstance; } private EmergencyDB(Context context) { mDBHelper = new EmergencyDBOpenHelper(context); } public Cursor getLimitedContactsCursor() { SQLiteDatabase db = mDBHelper.getReadableDatabase(); Cursor cursor = db.query(CONTACTS_TABLE, new String[] { ContactsTable._ID, ContactsTable.CONTACT_NAME, ContactsTable.CONTACT_PHONE, ContactsTable.CONTACT_DESCRIPTION }, null, null, null, null, null, SHORT_LIST_LIMIT); return cursor; } public Cursor getContactsCursor() { SQLiteDatabase db = mDBHelper.getReadableDatabase(); Cursor cursor = db.query(CONTACTS_TABLE, new String[] { ContactsTable._ID, ContactsTable.CONTACT_NAME, ContactsTable.CONTACT_PHONE, ContactsTable.CONTACT_DESCRIPTION }, null, null, null, null, null); return cursor; } public Contact getContact(int position) { SQLiteDatabase db = mDBHelper.getReadableDatabase(); Contact contact = null; Cursor cursor = db.query(CONTACTS_TABLE,new String[] { ContactsTable._ID, ContactsTable.CONTACT_NAME, ContactsTable.CONTACT_PHONE, ContactsTable.CONTACT_DESCRIPTION }, null, null, null, null, null, String.valueOf(position) + ",1"); cursor.moveToFirst(); if (cursor.getCount() > 0) { contact = new Contact(); contact.contact = cursor.getString(cursor.getColumnIndex(ContactsTable.CONTACT_NAME)); contact.phone = cursor.getString(cursor.getColumnIndex(ContactsTable.CONTACT_PHONE)); contact.description = cursor.getString(cursor.getColumnIndex(ContactsTable.CONTACT_DESCRIPTION)); } cursor.close(); return contact; } synchronized void clearAll() { SQLiteDatabase db = mDBHelper.getWritableDatabase(); db.delete(CONTACTS_TABLE, null, null); } void startTransaction() { mDBHelper.getWritableDatabase().beginTransaction(); } void endTransaction() { mDBHelper.getWritableDatabase().setTransactionSuccessful(); mDBHelper.getWritableDatabase().endTransaction(); } synchronized void addContact(Contact contact) { SQLiteDatabase db = mDBHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(ContactsTable.CONTACT_NAME, contact.contact); values.put(ContactsTable.CONTACT_PHONE, contact.phone); if (contact.description != null) { values.put(ContactsTable.CONTACT_DESCRIPTION, contact.description); } db.insert(CONTACTS_TABLE, ContactsTable.CONTACT_NAME, values); } private static class EmergencyDBOpenHelper extends SQLiteOpenHelper { public EmergencyDBOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + CONTACTS_TABLE + " (" + ContactsTable._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + ContactsTable.CONTACT_NAME + " TEXT," + ContactsTable.CONTACT_PHONE + " TEXT," + ContactsTable.CONTACT_DESCRIPTION + " TEXT" + ");"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO implement when upgrades available } } }