that might be all you are interested in but here is the
AlarmDBAdapter, followed by the Alarm class, followed by the
PreferencesActivity layout for creating a new alarm, followed by the
associated class NewAlarm:
package net.esalazar.alarmsutta;
import java.util.Date;
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.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log;
public class AlarmDBAdapter {
public static final String DATABASE_NAME = "alarms.db";
public static final String DATABASE_TABLE = "alarmsTable";
public static final int DATABASE_VERSION = 1;
private SQLiteDatabase db;
private alarmDBOpenHelper dbHelper;
public static final String ID_KEY = "_id";
public static final int ID_COL = 0;
public static final String EXPIRY_KEY = "expiry";
public static final int EXPIRY_COL = 1;
public static final String TITLE_KEY = "title";
public static final int TITLE_COL = 2;
public static final String MESSAGE_KEY = "message";
public static final int MESSAGE_COL = 3;
public static final String ENABLED_KEY = "enabled";
public static final int ENABLED_COL = 4;
private static final String [] ALL_KEYS =
new String[]
{ID_KEY,EXPIRY_KEY,TITLE_KEY,MESSAGE_KEY,ENABLED_KEY};
public AlarmDBAdapter(Context context) {
dbHelper = new alarmDBOpenHelper(context, DATABASE_NAME, null,
DATABASE_VERSION);
}
public void close() {
db.close();
}
public void open() {
try {
db = dbHelper.getWritableDatabase();
} catch (SQLiteException e) {
db = dbHelper.getReadableDatabase();
}
}
private ContentValues setContentValuesFromAlarm(Alarm alarm) {
ContentValues newAlarmValues = new ContentValues();
newAlarmValues.put(EXPIRY_KEY,alarm.getExpiry().getTime());
newAlarmValues.put(TITLE_KEY, alarm.getTitle());
newAlarmValues.put(MESSAGE_KEY,alarm.getMessage());
newAlarmValues.put(ENABLED_KEY, alarm.isEnabled()?1:0);
return newAlarmValues;
}
// Methods for updating database
public long insertAlarm(Alarm alarm) {
return db.insert(DATABASE_TABLE, null, setContentValuesFromAlarm
(alarm));
}
public boolean removeAlarm(long id) {
return db.delete(DATABASE_TABLE, ID_KEY + "=" + id, null) > 0;
}
public boolean updateAlarm(long id, Alarm alarm) {
return db.update(DATABASE_TABLE,
setContentValuesFromAlarm(alarm),
ID_KEY + "=" + id, null) > 0;
}
// Methods for querying database
public Cursor getAllAlarmItemsCursor() {
return db.query(DATABASE_TABLE, ALL_KEYS, null, null, null,
null,
null);
}
public Cursor setCursorToAlarmItem(long id) throws SQLException {
Cursor result = db.query(DATABASE_TABLE, ALL_KEYS,
ID_KEY + "=" + id, null, null, null, null);
if(result.getCount() == 0 || !result.moveToFirst()) {
throw new SQLException("No to do item found for row: "
+ id);
}
return result;
}
public Alarm getAlarm(long id) throws SQLException {
return getAlarmFromCursor(setCursorToAlarmItem(id));
}
public Alarm getAlarmFromCursor(Cursor cursor) {
return new Alarm(
new Date(cursor.getLong(EXPIRY_COL)),
cursor.getString(TITLE_COL),
cursor.getString(MESSAGE_COL),
cursor.getInt(ENABLED_COL) == 1,
cursor.getInt(ID_COL)
);
}
private static class alarmDBOpenHelper extends SQLiteOpenHelper {
public alarmDBOpenHelper(Context context, String name,
CursorFactory
factory, int version) {
super(context,name,factory,version);
}
// create table alarmsTable (_id integer primary key
autoincrement,
// expiry integer not null, message text not null, title text
not
null,
// enabled integer not null)
private static final String DATABASE_CREATE = "create table " +
DATABASE_TABLE + " (" +
ID_KEY + " integer primary key autoincrement, " + EXPIRY_KEY + "
integer not null, " +
TITLE_KEY + " text not null, " + MESSAGE_KEY + " text not null,
" +
ENABLED_KEY + " integer not null)";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
Log.w("AlarmDBAdapter", "Upgrading from version " +
oldVersion + "
to " +
newVersion + ". All old data
destroyed.");
db.execSQL("drop table if exists " + DATABASE_TABLE);
onCreate(db);
}
}
}
Alarm.java:
package net.esalazar.alarmsutta;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Alarm {
private Date expiry;
private String title;
private String message;
private boolean enabled;
private int id;
private static SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/
yyyy HH:mm");
public Alarm( String eString, String title, String message, int id) {
setExpiry(eString);
this.title = title;
this.message = message;
this.enabled = true;
this.id = id;
}
public Alarm(Date expiry, String title, String message, boolean
enabled, int id) {
this.expiry = expiry;
this.title = title;
this.message = message;
this.enabled = enabled;
this.id = id;
}
public Alarm(Date expiry, String title, String message, int id) {
this.expiry = expiry;
this.title = title;
this.message = message;
this.enabled = true;
this.id = id;
}
public Date getExpiry() { return expiry; }
public String getTitle() { return title; }
public String getMessage() { return message; }
public boolean isEnabled() { return enabled; }
public int getId() { return id; }
public void setExpiry(Date expiry) { this.expiry = expiry; }
public void setTitle(String title) { this.title = title; }
public void setMessage(String message) { this.message = message; }
public void setEnabled(boolean enabled) { this.enabled = enabled; }
public void setID(int id) { this.id = id; }
public String getExpiryString() {
return sdf.format(expiry);
}
public void setExpiry(String expiryString) {
expiry = Calendar.getInstance().getTime();
try {
expiry = sdf.parse(expiryString);
} catch (ParseException e) {
e.printStackTrace();
}
}
@Override
public String toString() {
return title;
}
}
layout for new activity using PreferencesActivity:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/
android"
android:title="Alarm Settings">
<Preference android:key="expiry_time"
android:title="Time"/>
<Preference android:key="expiry_date"
android:title="Date"/>
<EditTextPreference android:key="title"
android:title="Title"
android:dialogTitle="Title" />
<EditTextPreference android:key="message"
android:title="Message"
android:dialogTitle="Message" />
<CheckBoxPreference android:key="enabled"
android:title="Enabled"/>
</PreferenceScreen>
NewAlarm.java:
package net.esalazar.alarmsutta;
import java.util.Calendar;
import java.util.Date;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.view.KeyEvent;
import android.widget.DatePicker;
import android.widget.TimePicker;
public class NewAlarm extends PreferenceActivity {
// references to each preference thing
private Preference timePref;
private Preference datePref;
private EditTextPreference titlePref;
private EditTextPreference messagePref;
private CheckBoxPreference enabledPref;
private int mHour;
private int mMinute;
private int mYear;
private int mMonth;
private int mDay;
private String mTitle;
private String mMessage;
private boolean mEnabled;
private static final int DIALOG_TIMEPICKER = 0;
private static final int DIALOG_DATEPICKER = 1;
private class OnSetExpiryTime implements
TimePickerDialog.OnTimeSetListener {
public void onTimeSet(TimePicker view, int hourOfDay, int
minute) {
mHour = hourOfDay;
mMinute = minute;
updateTime();
}
}
private class OnSetExpiryDate implements
DatePickerDialog.OnDateSetListener {
public void onDateSet(DatePicker view, int year, int
monthOfYear,
int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
updateDate();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.alarm_settings);
timePref = findPreference("expiry_time");
datePref = findPreference("expiry_date");
titlePref = (EditTextPreference)findPreference("title");
messagePref = (EditTextPreference)findPreference("message");
enabledPref = (CheckBoxPreference)findPreference("enabled");
Intent request = getIntent();
long expiryTime = request.getLongExtra("expiryTime", (new Date
().getTime()) );
Date expiry = new Date(expiryTime);
Calendar calendar = Calendar.getInstance();
calendar.setTime(expiry);
mHour = calendar.get(Calendar.HOUR_OF_DAY);
mMinute = calendar.get(Calendar.MINUTE);
mYear = calendar.get(Calendar.YEAR);
mMonth = calendar.get(Calendar.MONTH);
mDay = calendar.get(Calendar.DAY_OF_MONTH);
mTitle = request.getStringExtra("title");
mMessage = request.getStringExtra("message");
mEnabled = request.getBooleanExtra("enabled", true);
// Set defaults for title and message.
if(mTitle == null)
mTitle = "Alarm";
if(mMessage == null)
mMessage = "";
titlePref.setText(mTitle);
titlePref.setSummary(mTitle);
messagePref.setText(mMessage);
messagePref.setSummary(mMessage);
enabledPref.setChecked(mEnabled);
updateTime();
updateDate();
titlePref.setOnPreferenceChangeListener(new
Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object
newValue) {
mTitle = (String)newValue;
preference.setSummary(mTitle);
return true;
}
});
messagePref.setOnPreferenceChangeListener(new
Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference
preference, Object
newValue) {
mMessage = (String)newValue;
preference.setSummary(mMessage);
return false;
}
});
enabledPref.setOnPreferenceChangeListener(new
Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference
preference, Object
newValue) {
mEnabled = (Boolean)newValue;
((CheckBoxPreference)preference).setChecked(mEnabled);
return false;
}
});
}
private void updateTime() {
int twelveHour = mHour%12;
if(twelveHour == 0)
twelveHour = 12;
String minuteString = (mMinute < 10) ? minuteString = "0" +
mMinute : Integer.toString(mMinute);
String amPm = (mHour >= 12) ? "pm" : "am";
timePref.setSummary(twelveHour + ":" + minuteString + amPm);
}
private void updateDate() {
// Months are zero indexed in Calendar but 1 indexed irl
datePref.setSummary( (mMonth+1) + "/" + mDay + "/" + mYear);
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen
preferenceScreen,
Preference preference) {
if(preference == timePref) {
showDialog(DIALOG_TIMEPICKER);
} else if (preference == datePref) {
showDialog(DIALOG_DATEPICKER);
}
return super.onPreferenceTreeClick(preferenceScreen,
preference);
}
@Override
protected Dialog onCreateDialog(int id) {
Dialog d;
switch(id) {
case DIALOG_TIMEPICKER:
d = new TimePickerDialog(this, new
OnSetExpiryTime(), mHour,
mMinute, false);
d.setTitle("Time");
break;
case DIALOG_DATEPICKER:
d = new DatePickerDialog(this, new
OnSetExpiryDate(), mYear,
mMonth, mDay);
d.setTitle("Date");
break;
default:
d = null;
}
return d;
}
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
switch(id) {
case DIALOG_TIMEPICKER:
TimePickerDialog timeDialog =
(TimePickerDialog)dialog;
timeDialog.updateTime(mHour, mMinute);
break;
case DIALOG_DATEPICKER:
DatePickerDialog dateDialog =
(DatePickerDialog)dialog;
dateDialog.updateDate(mYear, mMonth, mDay);
break;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
exitWithResult();
return true;
}
return super.onKeyDown(keyCode, event);
}
protected void exitWithResult() {
// If something nasty is hapenning, don't try
// and save changes because they could be junk
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, mHour);
calendar.set(Calendar.MINUTE, mMinute);
calendar.set(Calendar.MONTH, mMonth );
calendar.set(Calendar.DAY_OF_MONTH, mDay );
calendar.set(Calendar.YEAR, mYear );
long expiryTime = calendar.getTime().getTime();
Intent result = new Intent();
result.putExtra("title", mTitle);
result.putExtra("message", mMessage);
result.putExtra("expiryTime", expiryTime);
result.putExtra("enabled", mEnabled);
// We need to copy around the id so we can find our id in the db
later
result.putExtra("id", getIntent().getIntExtra("id", -1));
setResult(RESULT_OK,result);
finish();
}
}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---