Removed usages of AlarmRepository

This commit is contained in:
Phillip Hsu 2016-06-28 02:44:27 -07:00
parent 7747e4ee39
commit 11c4be68b9
11 changed files with 96 additions and 65 deletions

View File

@ -38,7 +38,7 @@ public abstract class Alarm implements JsonSerializable {
@Deprecated
public static Alarm create(JSONObject jsonObject) {
return null;
throw new UnsupportedOperationException();
}
public static Builder builder() {
@ -184,30 +184,26 @@ public abstract class Alarm implements JsonSerializable {
return ringsIn() <= hours * 3600000;
}
@Deprecated
public int intId() {
return -1;
return (int) id;
}
public void setId(long id) {
this.id = id;
}
public long getId() {
return id;
}
@Deprecated
// TODO: Remove method signature from JsonSerializable interface.
// TODO: Remove final modifier.
@Override
public final long id() {
return -1;
return id;
}
@Deprecated
@Override
@NonNull
public JSONObject toJsonObject() {
return null;
throw new UnsupportedOperationException();
}
@AutoValue.Builder

View File

@ -4,7 +4,7 @@ import android.app.IntentService;
import android.content.Context;
import android.content.Intent;
import com.philliphsu.clock2.model.AlarmsRepository;
import com.philliphsu.clock2.model.DatabaseManager;
import com.philliphsu.clock2.util.AlarmUtils;
import java.util.List;
@ -60,7 +60,7 @@ public class OnBootUpAlarmScheduler extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
List<Alarm> alarms = AlarmsRepository.getInstance(this).getItems();
List<Alarm> alarms = DatabaseManager.getInstance(this).getAlarms();
for (Alarm a : alarms) {
if (a.isEnabled()) {
AlarmUtils.scheduleAlarm(this, a, false);

View File

@ -4,7 +4,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.philliphsu.clock2.model.AlarmsRepository;
import com.philliphsu.clock2.model.DatabaseManager;
import com.philliphsu.clock2.util.AlarmUtils;
import static com.philliphsu.clock2.util.Preconditions.checkNotNull;
@ -26,7 +26,7 @@ public class PendingAlarmScheduler extends BroadcastReceiver {
if (id < 0) {
throw new IllegalStateException("No alarm id received");
}
Alarm alarm = checkNotNull(AlarmsRepository.getInstance(context).getItem(id));
Alarm alarm = checkNotNull(DatabaseManager.getInstance(context).getAlarm(id));
AlarmUtils.scheduleAlarm(context, alarm, false);
}
}

View File

@ -8,7 +8,7 @@ import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import com.philliphsu.clock2.model.AlarmsRepository;
import com.philliphsu.clock2.model.DatabaseManager;
import com.philliphsu.clock2.util.AlarmUtils;
import static android.app.PendingIntent.FLAG_ONE_SHOT;
@ -35,7 +35,7 @@ public class UpcomingAlarmReceiver extends BroadcastReceiver {
if (ACTION_CANCEL_NOTIFICATION.equals(intent.getAction())) {
nm.cancel(getClass().getName(), (int) id);
} else {
Alarm alarm = checkNotNull(AlarmsRepository.getInstance(context).getItem(id));
Alarm alarm = checkNotNull(DatabaseManager.getInstance(context).getAlarm(id));
if (ACTION_DISMISS_NOW.equals(intent.getAction())) {
AlarmUtils.cancelAlarm(context, alarm, true);
} else {

View File

@ -3,7 +3,6 @@ package com.philliphsu.clock2.alarms;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
@ -13,8 +12,8 @@ import android.view.ViewGroup;
import com.philliphsu.clock2.Alarm;
import com.philliphsu.clock2.OnListItemInteractionListener;
import com.philliphsu.clock2.R;
import com.philliphsu.clock2.model.AlarmsRepository;
import com.philliphsu.clock2.model.BaseRepository;
import com.philliphsu.clock2.model.DatabaseManager;
import butterknife.Bind;
import butterknife.ButterKnife;
@ -27,14 +26,9 @@ import butterknife.ButterKnife;
*/
public class AlarmsFragment extends Fragment implements BaseRepository.DataObserver<Alarm> {
// TODO: Customize parameter argument names
private static final String ARG_COLUMN_COUNT = "column-count";
// TODO: Customize parameters
private int mColumnCount = 1;
private OnAlarmInteractionListener mListener;
private AlarmsRepository mRepo;
private AlarmsAdapter mAdapter;
private DatabaseManager mDatabaseManager;
@Bind(R.id.list) RecyclerView mList;
@ -49,7 +43,7 @@ public class AlarmsFragment extends Fragment implements BaseRepository.DataObser
public static AlarmsFragment newInstance(int columnCount) {
AlarmsFragment fragment = new AlarmsFragment();
Bundle args = new Bundle();
args.putInt(ARG_COLUMN_COUNT, columnCount);
// TODO Put any arguments in bundle
fragment.setArguments(args);
return fragment;
}
@ -59,8 +53,10 @@ public class AlarmsFragment extends Fragment implements BaseRepository.DataObser
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mColumnCount = getArguments().getInt(ARG_COLUMN_COUNT);
// TODO Read arguments
}
mDatabaseManager = DatabaseManager.getInstance(getActivity());
}
@Override
@ -70,12 +66,8 @@ public class AlarmsFragment extends Fragment implements BaseRepository.DataObser
ButterKnife.bind(this, view);
// Set the adapter
Context context = view.getContext();
if (mColumnCount <= 1) {
mList.setLayoutManager(new LinearLayoutManager(context));
} else {
mList.setLayoutManager(new GridLayoutManager(context, mColumnCount));
}
mAdapter = new AlarmsAdapter(mRepo.getItems(), mListener);
mList.setLayoutManager(new LinearLayoutManager(context));
mAdapter = new AlarmsAdapter(mDatabaseManager.getAlarms(), mListener);
mList.setAdapter(mAdapter);
return view;
}
@ -83,7 +75,15 @@ public class AlarmsFragment extends Fragment implements BaseRepository.DataObser
@Override
public void onPause() {
super.onPause();
AlarmsRepository.getInstance(getActivity()).saveItems();
// TODO: Do we need to save anything?
// AlarmsRepository.getInstance(getActivity()).saveItems();
}
@Override
public void onResume() {
super.onResume();
// TODO: Need to refresh the list's adapter for any item changes. Consider doing this in
// onNewActivity().
}
@Override
@ -101,16 +101,12 @@ public class AlarmsFragment extends Fragment implements BaseRepository.DataObser
throw new RuntimeException(context.toString()
+ " must implement OnAlarmInteractionListener");
}
mRepo = AlarmsRepository.getInstance(context);
mRepo.registerDataObserver(this);
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
mRepo.unregisterDataObserver();
mRepo = null;
}
@Override

View File

@ -79,9 +79,9 @@ public class EditAlarmActivity extends BaseActivity implements AlarmNumpad.KeyLi
super.onCreate(savedInstanceState);
setWeekDaysText();
mNumpad.setKeyListener(this);
mDatabaseManager = DatabaseManager.getInstance(this); // MUST be before loading alarm
loadAlarm(getIntent().getLongExtra(EXTRA_ALARM_ID, -1));
setTimeTextHint(); // TODO: private access
mDatabaseManager = DatabaseManager.getInstance(this);
}
@Override
@ -225,7 +225,7 @@ public class EditAlarmActivity extends BaseActivity implements AlarmNumpad.KeyLi
Log.d(TAG, "Cancelling old alarm first");
cancelAlarm(mOldAlarm, false);
}
mDatabaseManager.updateAlarm(mOldAlarm, alarm);
mDatabaseManager.updateAlarm(mOldAlarm.id(), alarm);
} else {
mDatabaseManager.insertAlarm(alarm);
}

View File

@ -23,6 +23,7 @@ import static com.philliphsu.clock2.DaysOfWeek.WEDNESDAY;
* TODO: We can generalize this class to all data models, not just Alarms.
*/
public class AlarmDatabaseHelper extends SQLiteOpenHelper {
private static final String TAG = "AlarmDatabaseHelper";
private static final String DB_NAME = "alarms.db";
private static final int VERSION_1 = 1;
@ -43,6 +44,7 @@ public class AlarmDatabaseHelper extends SQLiteOpenHelper {
// TODO: Consider creating an inner class that implements BaseColumns
// and defines all the columns.
private static final String TABLE_ALARM_RECURRING_DAYS = "alarm_recurring_days";
// TODO: change value to _id if changing this to a primary auto-incrementing key
private static final String COLUMN_ALARM_ID = "alarm_id";
private static final String COLUMN_SUNDAY = "sunday";
private static final String COLUMN_MONDAY = "monday";
@ -77,6 +79,8 @@ public class AlarmDatabaseHelper extends SQLiteOpenHelper {
private static void createRecurringDaysTable(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_ALARM_RECURRING_DAYS + " ("
// TODO: The ID can instead be a primary auto-incrementing key, since a recurrence entry
// will always be made in conjunction with an alarm entry.
+ COLUMN_ALARM_ID + " INTEGER REFERENCES " + TABLE_ALARMS + "(" + COLUMN_ID + "), "
+ COLUMN_SUNDAY + " INTEGER NOT NULL DEFAULT 0, "
+ COLUMN_MONDAY + " INTEGER NOT NULL DEFAULT 0, "
@ -117,16 +121,38 @@ public class AlarmDatabaseHelper extends SQLiteOpenHelper {
return id;
}
/**
* @deprecated Use {@link #updateAlarm(long, Alarm)} instead
*/
@Deprecated
public int updateAlarm(Alarm oldAlarm, Alarm newAlarm) {
newAlarm.setId(oldAlarm.getId());
newAlarm.setId(oldAlarm.id());
SQLiteDatabase db = getWritableDatabase();
int rowsUpdatedInAlarmsTable = db.update(TABLE_ALARMS,
toContentValues(newAlarm),
COLUMN_ID + " = " + newAlarm.getId(),
COLUMN_ID + " = " + newAlarm.id(),
null);
int rowsUpdatedInRecurrencesTable = db.update(TABLE_ALARM_RECURRING_DAYS,
toRecurrenceContentValues(newAlarm.getId(), newAlarm),
COLUMN_ALARM_ID + " = " + newAlarm.getId(),
toRecurrenceContentValues(newAlarm.id(), newAlarm),
COLUMN_ALARM_ID + " = " + newAlarm.id(),
null);
if (rowsUpdatedInAlarmsTable == rowsUpdatedInRecurrencesTable && rowsUpdatedInAlarmsTable == 1) {
return 1;
}
throw new IllegalStateException("rows updated in TABLE_ALARMS = " + rowsUpdatedInAlarmsTable +
", rows updated in TABLE_ALARM_RECURRING_DAYS = " + rowsUpdatedInRecurrencesTable);
}
public int updateAlarm(long id, Alarm newAlarm) {
newAlarm.setId(id);
SQLiteDatabase db = getWritableDatabase();
int rowsUpdatedInAlarmsTable = db.update(TABLE_ALARMS,
toContentValues(newAlarm),
COLUMN_ID + " = " + id,
null);
int rowsUpdatedInRecurrencesTable = db.update(TABLE_ALARM_RECURRING_DAYS,
toRecurrenceContentValues(id, newAlarm),
COLUMN_ALARM_ID + " = " + id,
null);
if (rowsUpdatedInAlarmsTable == rowsUpdatedInRecurrencesTable && rowsUpdatedInAlarmsTable == 1) {
return 1;
@ -138,10 +164,10 @@ public class AlarmDatabaseHelper extends SQLiteOpenHelper {
public int deleteAlarm(Alarm alarm) {
SQLiteDatabase db = getWritableDatabase();
int rowsDeletedInAlarmsTable = db.delete(TABLE_ALARMS,
COLUMN_ID + " = " + alarm.getId(),
COLUMN_ID + " = " + alarm.id(),
null);
int rowsDeletedInRecurrencesTable = db.delete(TABLE_ALARM_RECURRING_DAYS,
COLUMN_ALARM_ID + " = " + alarm.getId(),
COLUMN_ALARM_ID + " = " + alarm.id(),
null);
if (rowsDeletedInAlarmsTable == rowsDeletedInRecurrencesTable && rowsDeletedInAlarmsTable == 1) {
return 1;
@ -161,7 +187,7 @@ public class AlarmDatabaseHelper extends SQLiteOpenHelper {
"1"); // limit 1 row
Cursor recurrenceCursor = getReadableDatabase().query(TABLE_ALARM_RECURRING_DAYS,
null, // All columns
COLUMN_ID + " = " + id, // selection
COLUMN_ALARM_ID + " = " + id, // selection
null, // selection args
null, // group by
null, // order by
@ -232,13 +258,19 @@ public class AlarmDatabaseHelper extends SQLiteOpenHelper {
alarm.setId(getLong(getColumnIndex(COLUMN_ID)));
alarm.setEnabled(getInt(getColumnIndex(COLUMN_ENABLED)) == 1);
alarm.setSnoozing(getLong(getColumnIndex(COLUMN_SNOOZING_UNTIL_MILLIS)));
alarm.setRecurring(SUNDAY, isRecurring(INDEX_SUNDAY));
alarm.setRecurring(MONDAY, isRecurring(INDEX_MONDAY));
alarm.setRecurring(TUESDAY, isRecurring(INDEX_TUESDAY));
alarm.setRecurring(WEDNESDAY, isRecurring(INDEX_WEDNESDAY));
alarm.setRecurring(THURSDAY, isRecurring(INDEX_THURSDAY));
alarm.setRecurring(FRIDAY, isRecurring(INDEX_FRIDAY));
alarm.setRecurring(SATURDAY, isRecurring(INDEX_SATURDAY));
// DatabaseManager moves the primary cursor for you. However, you are responsible
// for moving the recurrence cursor yourself, because it is private to this class.
if (mRecurrenceCursor.moveToNext()) {
alarm.setRecurring(SUNDAY, isRecurring(INDEX_SUNDAY));
alarm.setRecurring(MONDAY, isRecurring(INDEX_MONDAY));
alarm.setRecurring(TUESDAY, isRecurring(INDEX_TUESDAY));
alarm.setRecurring(WEDNESDAY, isRecurring(INDEX_WEDNESDAY));
alarm.setRecurring(THURSDAY, isRecurring(INDEX_THURSDAY));
alarm.setRecurring(FRIDAY, isRecurring(INDEX_FRIDAY));
alarm.setRecurring(SATURDAY, isRecurring(INDEX_SATURDAY));
} else {
throw new IllegalStateException("No entry in recurrence table for alarm: " + alarm);
}
return alarm;
}

View File

@ -33,10 +33,18 @@ public class DatabaseManager {
return alarm;
}
/**
* @deprecated Use {@link #updateAlarm(long, Alarm)} instead
*/
@Deprecated
public int updateAlarm(Alarm oldAlarm, Alarm newAlarm) {
return mHelper.updateAlarm(oldAlarm, newAlarm);
}
public int updateAlarm(long id, Alarm newAlarm) {
return mHelper.updateAlarm(id, newAlarm);
}
public int deleteAlarm(Alarm alarm) {
return mHelper.deleteAlarm(alarm);
}

View File

@ -14,7 +14,7 @@ import android.widget.Button;
import com.philliphsu.clock2.Alarm;
import com.philliphsu.clock2.R;
import com.philliphsu.clock2.model.AlarmsRepository;
import com.philliphsu.clock2.model.DatabaseManager;
import com.philliphsu.clock2.util.AlarmUtils;
import com.philliphsu.clock2.util.LocalBroadcastHelper;
@ -52,7 +52,7 @@ public class RingtoneActivity extends AppCompatActivity {
if (id < 0) {
throw new IllegalStateException("Cannot start RingtoneActivity without item's id");
}
mAlarm = checkNotNull(AlarmsRepository.getInstance(this).getItem(id));
mAlarm = checkNotNull(DatabaseManager.getInstance(this).getAlarm(id));
Log.d(TAG, "Ringing alarm " + mAlarm);
// TODO: If the upcoming alarm notification isn't present, verify other notifications aren't affected.

View File

@ -23,7 +23,7 @@ import android.util.Log;
import com.philliphsu.clock2.Alarm;
import com.philliphsu.clock2.R;
import com.philliphsu.clock2.model.AlarmsRepository;
import com.philliphsu.clock2.model.DatabaseManager;
import com.philliphsu.clock2.util.AlarmUtils;
import com.philliphsu.clock2.util.LocalBroadcastHelper;
@ -84,7 +84,7 @@ public class RingtoneService extends Service { // TODO: abstract this, make subc
long id = intent.getLongExtra(EXTRA_ITEM_ID, -1);
if (id < 0)
throw new IllegalStateException("No item id set");
Alarm alarm = checkNotNull(AlarmsRepository.getInstance(this).getItem(id));
Alarm alarm = checkNotNull(DatabaseManager.getInstance(this).getAlarm(id));
if (intent.getAction() == null) {
playRingtone(alarm);

View File

@ -13,7 +13,7 @@ import com.philliphsu.clock2.Alarm;
import com.philliphsu.clock2.PendingAlarmScheduler;
import com.philliphsu.clock2.R;
import com.philliphsu.clock2.UpcomingAlarmReceiver;
import com.philliphsu.clock2.model.AlarmsRepository;
import com.philliphsu.clock2.model.DatabaseManager;
import com.philliphsu.clock2.ringtone.RingtoneActivity;
import com.philliphsu.clock2.ringtone.RingtoneService;
@ -112,19 +112,16 @@ public final class AlarmUtils {
}
}
save(c); // Save any changes
save(c, a);
// If service is not running, nothing happens
// TODO: Since RingtoneService is a bound service, will this destroy the service after returning?
// Note that if a stopped service still has ServiceConnection objects bound to it with the
// BIND_AUTO_CREATE set, it will not be destroyed until all of these bindings are removed.
c.stopService(new Intent(c, RingtoneService.class));
}
public static void snoozeAlarm(Context c, Alarm a) {
a.snooze(snoozeDuration(c));
scheduleAlarm(c, a, true);
save(c);
save(c, a);
}
public static void removeUpcomingAlarmNotification(Context c, Alarm a) {
@ -185,7 +182,9 @@ public final class AlarmUtils {
return pi;
}
private static void save(Context c) {
AlarmsRepository.getInstance(c).saveItems();
private static void save(Context c, Alarm alarm) {
// AlarmsRepository.getInstance(c).saveItems();
// Update the same alarm
DatabaseManager.getInstance(c).updateAlarm(alarm.id(), alarm);
}
}