diff --git a/app/src/main/java/com/philliphsu/clock2/alarms/AlarmsCursorAdapter.java b/app/src/main/java/com/philliphsu/clock2/alarms/AlarmsCursorAdapter.java index 2d7a81c..dc4498e 100644 --- a/app/src/main/java/com/philliphsu/clock2/alarms/AlarmsCursorAdapter.java +++ b/app/src/main/java/com/philliphsu/clock2/alarms/AlarmsCursorAdapter.java @@ -38,9 +38,9 @@ public class AlarmsCursorAdapter extends BaseCursorAdapter { private final Drawable mCancelSnoozeDrawable; private final FragmentManager mFragmentManager; + // So far, Alarms are the only VH type that requires saving a reference to the listener, + // so that they may do extra stuff with it. + private final OnListItemInteractionListener mInteractionListener; + // These should only be changed from the OnTimeSet callback. // If we had initialized these in onBind(), they would be reset to their original values // from the Alarm each time the ViewHolder binds. @@ -79,6 +83,8 @@ public abstract class BaseAlarmViewHolder extends BaseViewHolder { AppCompatActivity act = (AppCompatActivity) getContext(); mFragmentManager = act.getSupportFragmentManager(); + mInteractionListener = listener; + // Are we recreating this because of a rotation? // If so, try finding any dialog that was last shown in our backstack, // and restore the callback. @@ -274,7 +280,12 @@ public abstract class BaseAlarmViewHolder extends BaseViewHolder { return new AddLabelDialog.OnLabelSetListener() { @Override public void onLabelSet(String label) { - mLabel.setText(label); + final Alarm oldAlarm = getAlarm(); + Alarm newAlarm = oldAlarm.toBuilder() + .label(label) + .build(); + oldAlarm.copyMutableFieldsTo(newAlarm); + mAlarmController.save(newAlarm); } }; } @@ -295,4 +306,8 @@ public abstract class BaseAlarmViewHolder extends BaseViewHolder { } }; } + + protected final OnListItemInteractionListener getInteractionListener() { + return mInteractionListener; + } } diff --git a/app/src/main/java/com/philliphsu/clock2/alarms/ExpandedAlarmViewHolder.java b/app/src/main/java/com/philliphsu/clock2/alarms/ExpandedAlarmViewHolder.java index a661376..ec28388 100644 --- a/app/src/main/java/com/philliphsu/clock2/alarms/ExpandedAlarmViewHolder.java +++ b/app/src/main/java/com/philliphsu/clock2/alarms/ExpandedAlarmViewHolder.java @@ -54,26 +54,13 @@ public class ExpandedAlarmViewHolder extends BaseAlarmViewHolder { listener.onListItemDeleted(getAlarm()); } }); + + // TODO: We can now do method binding instead, because our superclass provides an API + // to retrieve the interaction listener. mOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - final Alarm oldAlarm = getAlarm(); - Alarm newAlarm = Alarm.builder() - .hour(oldAlarm.hour()/*TODO*/) - .minutes(oldAlarm.minutes()/*TODO*/) - .label(mLabel.getText().toString()) - .ringtone(""/*TODO*/) - .vibrates(mVibrate.isChecked()) - .build(); - oldAlarm.copyMutableFieldsTo(newAlarm); - // ---------------------------------------------- - // TOneverDO: precede copyMutableFieldsTo() - newAlarm.setEnabled(mSwitch.isChecked()); - for (int i = SUNDAY; i <= SATURDAY; i++) { - newAlarm.setRecurring(i, isRecurringDay(i)); - } - // ---------------------------------------------- - listener.onListItemUpdate(newAlarm, getAdapterPosition()); + createNewAlarmAndWriteToDb(); } }); @@ -204,4 +191,24 @@ public class ExpandedAlarmViewHolder extends BaseAlarmViewHolder { // Return the state of this day according to its button return mDays[pos].isChecked(); } + + private void createNewAlarmAndWriteToDb() { + final Alarm oldAlarm = getAlarm(); + Alarm newAlarm = Alarm.builder() + .hour(oldAlarm.hour()/*TODO*/) + .minutes(oldAlarm.minutes()/*TODO*/) + .label(mLabel.getText().toString()) + .ringtone(""/*TODO*/) + .vibrates(mVibrate.isChecked()) + .build(); + oldAlarm.copyMutableFieldsTo(newAlarm); + // ---------------------------------------------- + // TOneverDO: precede copyMutableFieldsTo() + newAlarm.setEnabled(mSwitch.isChecked()); + for (int i = SUNDAY; i <= SATURDAY; i++) { + newAlarm.setRecurring(i, isRecurringDay(i)); + } + // ---------------------------------------------- + getInteractionListener().onListItemUpdate(newAlarm, getAdapterPosition()); + } }