package com.wozia.nophonezone;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DataHelper {
private static final String DATABASE_NAME = "NoPhoneZone.db";
private static final int DATABASE_VERSION = 4;
private Context context;
private SQLiteDatabase db;
public DataHelper(Context context) {
this.context = context;
OpenHelper openHelper = new OpenHelper(this.context);
this.db = openHelper.getWritableDatabase();
}
/** Start: Settings **/
public Cursor fetchSetting(String varname) throws SQLException {
Cursor c = db.query(true, "settings", new String[] { "varvalue" }, "`varname` = ?", new String[] { varname }, null, null, null, "1");
if (c != null) {
c.moveToFirst();
}
return c;
}
public void set(String name, String value) {
String sql = "UPDATE `settings` SET `varvalue` = ? WHERE `varname` = ?";
db.execSQL(sql, new Object[] { value, name } );
}
public String get(String name) {
Cursor c = fetchSetting(name);
String rval = "";
if (c.getCount() != 0) {
rval = c.getString(c.getColumnIndex("varvalue"));
}
c.close();
return rval;
}
/** End: Settings **/
/** Start: Private Group **/
public Cursor fetchContact(String phone) throws SQLException {
Cursor c = db.query(true, "private_group", new String[] { "name", "phone" }, "`phone` = ?", new String[] { phone }, null, null, null, "1");
if (c != null) {
c.moveToFirst();
}
return c;
}
public void addContact(String name, String phone) {
String sql = "INSERT INTO `private_group` (`id`, `name`, `phone`) VALUES (NULL, ?, ?)";
db.execSQL(sql, new Object[] { name, phone } );
}
public void deleteContact(String phone) {
String sql = "DELETE FROM `private_group` WHERE `phone` = ?";
db.execSQL(sql, new Object[] { phone } );
}
public String[] getContact(String phone) {
Cursor c = fetchContact(phone);
String[] rval = {"", ""};
if (c.getCount() != 0) {
rval[0] = c.getString(c.getColumnIndex("name"));
rval[1] = c.getString(c.getColumnIndex("phone"));
}
c.close();
return rval;
}
public String[] getContactAt(int index) {
Cursor c = db.query(true, "private_group", new String[] { "name", "phone" }, null, null, null, null, "name asc, phone asc", null);
if (c != null) {
c.moveToPosition(index);
}
String[] rval = {"", ""};
if (c.getCount() != 0) {
rval[0] = c.getString(c.getColumnIndex("name"));
rval[1] = c.getString(c.getColumnIndex("phone"));
}
c.close();
return rval;
}
public List<String> getAllContacts() {
List<String> list = new ArrayList<String>();
Cursor c = this.db.query("private_group", new String[] { "name", "phone" },
null, null, null, null, "name asc, phone asc");
if (c.moveToFirst()) {
do {
list.add(c.getString(0) + " (" + c.getString(1) + ")");
} while (c.moveToNext());
}
if (c != null && !c.isClosed()) {
c.close();
}
return list;
}
/** End: Private Group **/
/** Start: Warnings **/
public boolean warningExists(String phone, int minutes) {
Date curDate = new Date();
String date = "";
Calendar cal = Calendar.getInstance();
cal.setTime(curDate);
cal.add(Calendar.MINUTE, -minutes);
curDate = cal.getTime();
date = String.valueOf(curDate.getTime());
Cursor c = db.query(true, "warnings", new String[] { "id" }, "`phone` = ? AND `date` >= ?", new String[] { phone, date }, null, null, null, "1");
if (c != null) {
c.moveToFirst();
}
boolean rval = false;
if (c.getCount() != 0) {
rval = true;
}
c.close();
return rval;
}
public void addWarning(String phone) {
Date curDate = new Date();
long date = curDate.getTime();
String sql = "INSERT INTO `warnings` (`id`, `phone`, `date`) VALUES (NULL, ?, ?)";
db.execSQL(sql, new Object[] { phone, date } );
}
/** End: Warnings **/
public void deleteAll() {
this.db.delete("settings", null, null);
this.db.delete("private_group", null, null);
this.db.delete("warnings", null, null);
}
public void clearWarnings() {
db.execSQL("DELETE FROM `warnings`");
}
private static class OpenHelper extends SQLiteOpenHelper {
private static final String DATABASE_CREATE_1 = "CREATE TABLE IF NOT EXISTS `settings` (`varname` VARCHAR(20) PRIMARY KEY, `varvalue` TEXT)";
private static final String DATABASE_CREATE_2 = "CREATE TABLE IF NOT EXISTS `private_group` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(50), `phone` VARCHAR(30))";
private static final String DATABASE_CREATE_3 = "CREATE TABLE IF NOT EXISTS `warnings` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `phone` VARCHAR(30), `date` INTEGER)";
private static final String DATABASE_INSERT_1 = "INSERT INTO `settings` VALUES('entry_txt','')";
private static final String DATABASE_INSERT_2 = "INSERT INTO `settings` VALUES('silent','')";
private static final String DATABASE_INSERT_3 = "INSERT INTO `settings` VALUES('contacts_only','')";
private static final String DATABASE_INSERT_4 = "INSERT INTO `settings` VALUES('disclaimer','')";
private static final String DATABASE_INSERT_5 = "INSERT INTO `settings` VALUES('less_warnings','')";
OpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE_1);
db.execSQL(DATABASE_CREATE_2);
db.execSQL(DATABASE_CREATE_3);
db.execSQL(DATABASE_INSERT_1);
db.execSQL(DATABASE_INSERT_2);
db.execSQL(DATABASE_INSERT_3);
db.execSQL(DATABASE_INSERT_4);
db.execSQL(DATABASE_INSERT_5);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS `settings`");
//db.execSQL("DROP TABLE IF EXISTS `private_group`");
onCreate(db);
}
}
}