232 lines
6.8 KiB
Java
Executable File
232 lines
6.8 KiB
Java
Executable File
package com.hectorone.multismssender;
|
|
|
|
import android.content.ContentValues;
|
|
import android.content.Context;
|
|
import android.database.Cursor;
|
|
import android.database.SQLException;
|
|
import android.database.sqlite.SQLiteDatabase;
|
|
import android.database.sqlite.SQLiteOpenHelper;
|
|
import android.provider.ContactsContract.CommonDataKinds.Phone;
|
|
import android.provider.ContactsContract.Contacts;
|
|
import android.provider.ContactsContract.Data;
|
|
import android.util.Log;
|
|
|
|
/**
|
|
* Simple groups database access helper class. Defines the basic CRUD operations
|
|
* for the group add example, and gives the ability to list all groups as well
|
|
* as retrieve or modify a specific group.
|
|
*
|
|
*/
|
|
public class GroupsDbAdapter {
|
|
|
|
public static final String KEY_GROUP_NAME = "name";
|
|
public static final String KEY_GROUP_ROWID = "_id";
|
|
|
|
public static final String KEY_GROUP_TO_PHONE_ROWID = "_id";
|
|
public static final String KEY_GROUP_TO_PHONE_GROUPID = "gid";
|
|
public static final String KEY_GROUP_TO_PHONE_PHONEID = "pid";
|
|
|
|
private static final String TAG = "groupsDbAdapter";
|
|
private GroupDbHelper mDbHelper;
|
|
private SQLiteDatabase mDb;
|
|
|
|
/**
|
|
* Database creation sql statement
|
|
*/
|
|
private static final String DATABASE_GROUP_CREATE = "create table groups (_id integer primary key autoincrement, "
|
|
+ "name text not null);";
|
|
|
|
private static final String DATABASE_GROUP_TO_PHONE_CREATE = "create table group_TO_PHONE (_id integer primary key autoincrement, "
|
|
+ "gid integer not null, pid integer not null);";
|
|
|
|
private static final String DATABASE_NAME = "dataGroup";
|
|
private static final String DATABASE_GROUP_TABLE = "groups";
|
|
private static final String DATABASE_GROUP_TO_PHONE_TABLE = "group_TO_PHONE";
|
|
private static final int DATABASE_VERSION = 4;
|
|
|
|
private final Context mCtx;
|
|
|
|
private static class GroupDbHelper extends SQLiteOpenHelper {
|
|
|
|
GroupDbHelper(Context context) {
|
|
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
|
}
|
|
|
|
@Override
|
|
public void onCreate(SQLiteDatabase db) {
|
|
|
|
db.execSQL(DATABASE_GROUP_CREATE);
|
|
db.execSQL(DATABASE_GROUP_TO_PHONE_CREATE);
|
|
}
|
|
|
|
@Override
|
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
|
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
|
|
+ newVersion + ", which will destroy all old data");
|
|
db.execSQL("DROP TABLE IF EXISTS groups");
|
|
db.execSQL("DROP TABLE IF EXISTS group_TO_PHONE");
|
|
onCreate(db);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Constructor - takes the context to allow the database to be
|
|
* opened/created
|
|
*
|
|
* @param ctx
|
|
* the Context within which to work
|
|
*/
|
|
public GroupsDbAdapter(Context ctx) {
|
|
this.mCtx = ctx;
|
|
}
|
|
|
|
/**
|
|
* Open the groups database. If it cannot be opened, try to create a new
|
|
* instance of the database. If it cannot be created, throw an exception to
|
|
* signal the failure
|
|
*
|
|
* @return this (self reference, allowing this to be chained in an
|
|
* initialization call)
|
|
* @throws SQLException
|
|
* if the database could be neither opened or created
|
|
*/
|
|
public GroupsDbAdapter open() throws SQLException {
|
|
mDbHelper = new GroupDbHelper(mCtx);
|
|
mDb = mDbHelper.getWritableDatabase();
|
|
|
|
return this;
|
|
}
|
|
|
|
public void close() {
|
|
mDbHelper.close();
|
|
}
|
|
|
|
/**
|
|
* Create a new group using the name provided. If the group is successfully
|
|
* created return the new rowId for that group, otherwise return a -1 to
|
|
* indicate failure.
|
|
*
|
|
* @param name
|
|
* the name of the group
|
|
*/
|
|
public long createGroup(String name) {
|
|
ContentValues initialValues = new ContentValues();
|
|
initialValues.put(KEY_GROUP_NAME, name);
|
|
|
|
return mDb.insert(DATABASE_GROUP_TABLE, null, initialValues);
|
|
}
|
|
|
|
/**
|
|
* Delete the group with the given rowId
|
|
*
|
|
* @param rowId
|
|
* id of group to delete
|
|
* @return true if deleted, false otherwise
|
|
*/
|
|
public boolean deleteGroup(long rowId) {
|
|
|
|
return mDb.delete(DATABASE_GROUP_TABLE, KEY_GROUP_ROWID + "=" + rowId,
|
|
null) > 0
|
|
&& mDb.delete(DATABASE_GROUP_TO_PHONE_TABLE,
|
|
KEY_GROUP_TO_PHONE_GROUPID + "=" + rowId, null) > 0;
|
|
|
|
}
|
|
|
|
/**
|
|
* Return a Cursor over the list of all groups in the database
|
|
*
|
|
* @return Cursor over all groups
|
|
*/
|
|
public Cursor fetchAllGroups() {
|
|
|
|
return mDb.query(DATABASE_GROUP_TABLE, new String[] { KEY_GROUP_ROWID,
|
|
KEY_GROUP_NAME }, null, null, null, null, KEY_GROUP_NAME);
|
|
}
|
|
|
|
/**
|
|
* Return a Cursor positioned at the group that matches the given rowId
|
|
*
|
|
* @param rowId
|
|
* id of group to retrieve
|
|
* @return Cursor positioned to matching group, if found
|
|
* @throws SQLException
|
|
* if group could not be found/retrieved
|
|
*/
|
|
public Cursor fetchGroup(long rowId) throws SQLException {
|
|
|
|
Cursor mCursor =
|
|
|
|
mDb.query(true, DATABASE_GROUP_TABLE, new String[] { KEY_GROUP_ROWID,
|
|
KEY_GROUP_NAME }, KEY_GROUP_ROWID + "=" + rowId, null, null,
|
|
null, null, null);
|
|
if (mCursor != null) {
|
|
mCursor.moveToFirst();
|
|
}
|
|
return mCursor;
|
|
|
|
}
|
|
|
|
/**
|
|
* @param rowId
|
|
* id of group to update
|
|
* @param name
|
|
* value to set group name to
|
|
*/
|
|
public boolean updateGroup(long rowId, String name) {
|
|
ContentValues args = new ContentValues();
|
|
args.put(KEY_GROUP_NAME, name);
|
|
|
|
return mDb.update(DATABASE_GROUP_TABLE, args, KEY_GROUP_ROWID + "="
|
|
+ rowId, null) > 0;
|
|
}
|
|
|
|
public Cursor fetchPhonesFromGroup(long groupId) {
|
|
Cursor mCursor = mDb.query(true, DATABASE_GROUP_TO_PHONE_TABLE,
|
|
new String[] { KEY_GROUP_TO_PHONE_PHONEID },
|
|
KEY_GROUP_TO_PHONE_GROUPID + "=" + groupId, null, null, null,
|
|
null, null);
|
|
Cursor userCursor = null;
|
|
int phoneIdIdx = mCursor.getColumnIndex(KEY_GROUP_TO_PHONE_PHONEID);
|
|
if (mCursor != null) {
|
|
userCursor = mCtx.getContentResolver()
|
|
.query(Data.CONTENT_URI,
|
|
new String[] { Data._ID, Data.MIMETYPE,
|
|
Phone.NUMBER, Phone.TYPE, Phone.LABEL,
|
|
Contacts.DISPLAY_NAME },
|
|
Data._ID + " IN "
|
|
+ cursorToStringList(mCursor, phoneIdIdx),
|
|
null, Contacts.DISPLAY_NAME);
|
|
}
|
|
mCursor.close();
|
|
return userCursor;
|
|
}
|
|
|
|
public long addPhoneToGroup(long groupId, long phoneId) {
|
|
ContentValues initialValues = new ContentValues();
|
|
initialValues.put(KEY_GROUP_TO_PHONE_GROUPID, groupId);
|
|
initialValues.put(KEY_GROUP_TO_PHONE_PHONEID, phoneId);
|
|
|
|
return mDb.insert(DATABASE_GROUP_TO_PHONE_TABLE, null, initialValues);
|
|
}
|
|
|
|
public boolean removePhoneToGroup(long groupId, long phoneId) {
|
|
return mDb.delete(DATABASE_GROUP_TO_PHONE_TABLE,
|
|
KEY_GROUP_TO_PHONE_GROUPID + "=" + groupId + " AND "
|
|
+ KEY_GROUP_TO_PHONE_PHONEID + "=" + phoneId, null) > 0;
|
|
}
|
|
|
|
public String cursorToStringList(Cursor cursor, int columnIdx) {
|
|
cursor.moveToFirst();
|
|
String list = "( ";
|
|
while (!cursor.isAfterLast()) {
|
|
list += cursor.getString(columnIdx);
|
|
if (!cursor.isLast()) {
|
|
list += " , ";
|
|
}
|
|
cursor.moveToNext();
|
|
}
|
|
list += " )";
|
|
return list;
|
|
}
|
|
}
|