From 9c143045b4ad022b66fab6963ed160fd0cfe9e9d Mon Sep 17 00:00:00 2001 From: Phillip Hsu Date: Tue, 20 Sep 2016 22:01:50 -0700 Subject: [PATCH] Use RingtonePickerDialogController --- .../clock2/alarms/BaseAlarmViewHolder.java | 4 -- .../alarms/ExpandedAlarmViewHolder.java | 46 +++++++++---------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/philliphsu/clock2/alarms/BaseAlarmViewHolder.java b/app/src/main/java/com/philliphsu/clock2/alarms/BaseAlarmViewHolder.java index 40373e7..26b0565 100644 --- a/app/src/main/java/com/philliphsu/clock2/alarms/BaseAlarmViewHolder.java +++ b/app/src/main/java/com/philliphsu/clock2/alarms/BaseAlarmViewHolder.java @@ -55,8 +55,6 @@ public abstract class BaseAlarmViewHolder extends BaseViewHolder { private final Drawable mDismissNowDrawable; private final Drawable mCancelSnoozeDrawable; - // TODO: THis is still here for ExpandedVH's RingtonePickerDialog. If we ever write a - // Controller for it, finally delete this. final FragmentManager mFragmentManager; @Bind(R.id.time) TextView mTime; @@ -79,7 +77,6 @@ public abstract class BaseAlarmViewHolder extends BaseViewHolder { AppCompatActivity act = (AppCompatActivity) getContext(); mFragmentManager = act.getSupportFragmentManager(); mAddLabelDialogController = new AddLabelDialogController(mFragmentManager, - // TODO: Why can't we implement the interface and pass `this` instead? new AddLabelDialog.OnLabelSetListener() { @Override public void onLabelSet(String label) { @@ -93,7 +90,6 @@ public abstract class BaseAlarmViewHolder extends BaseViewHolder { } ); mTimePickerDialogController = new TimePickerDialogController(mFragmentManager, getContext(), - // TODO: Why can't we implement the interface and pass `this` instead? new OnTimeSetListener() { @Override public void onTimeSet(ViewGroup viewGroup, int hourOfDay, int minute) { 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 a0bdfb7..a847662 100644 --- a/app/src/main/java/com/philliphsu/clock2/alarms/ExpandedAlarmViewHolder.java +++ b/app/src/main/java/com/philliphsu/clock2/alarms/ExpandedAlarmViewHolder.java @@ -4,6 +4,7 @@ import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; import android.media.RingtoneManager; import android.net.Uri; +import android.support.annotation.IdRes; import android.support.v4.graphics.drawable.DrawableCompat; import android.util.Log; import android.view.View; @@ -18,7 +19,9 @@ import com.philliphsu.clock2.OnListItemInteractionListener; import com.philliphsu.clock2.R; import com.philliphsu.clock2.RingtonePickerDialog; import com.philliphsu.clock2.aospdatetimepicker.Utils; +import com.philliphsu.clock2.settings.RingtonePickerDialogController; import com.philliphsu.clock2.util.AlarmController; +import com.philliphsu.clock2.util.FragmentTagUtils; import butterknife.Bind; import butterknife.OnClick; @@ -28,7 +31,6 @@ import butterknife.OnClick; */ public class ExpandedAlarmViewHolder extends BaseAlarmViewHolder { private static final String TAG = "ExpandedAlarmViewHolder"; - private static final String TAG_RINGTONE_PICKER = "ringtone_picker"; @Bind(R.id.ok) Button mOk; @Bind(R.id.delete) Button mDelete; @@ -38,6 +40,7 @@ public class ExpandedAlarmViewHolder extends BaseAlarmViewHolder { ToggleButton[] mDays; private final ColorStateList mDayToggleColors; + private final RingtonePickerDialogController mRingtonePickerController; public ExpandedAlarmViewHolder(ViewGroup parent, final OnListItemInteractionListener listener, AlarmController controller) { @@ -86,17 +89,26 @@ public class ExpandedAlarmViewHolder extends BaseAlarmViewHolder { }; mDayToggleColors = new ColorStateList(states, colors); - RingtonePickerDialog picker = (RingtonePickerDialog) - mFragmentManager.findFragmentByTag(TAG_RINGTONE_PICKER); - if (picker != null) { - Log.i(TAG, "Restoring ringtone picker callback"); - picker.setOnRingtoneSelectedListener(newOnRingtoneSelectedListener()); - } + mRingtonePickerController = new RingtonePickerDialogController(mFragmentManager, + new RingtonePickerDialog.OnRingtoneSelectedListener() { + @Override + public void onRingtoneSelected(Uri ringtoneUri) { + Log.d(TAG, "Selected ringtone: " + ringtoneUri.toString()); + final Alarm oldAlarm = getAlarm(); + Alarm newAlarm = oldAlarm.toBuilder() + .ringtone(ringtoneUri.toString()) + .build(); + oldAlarm.copyMutableFieldsTo(newAlarm); + persistUpdatedAlarm(newAlarm, false); + } + } + ); } @Override public void onBind(Alarm alarm) { super.onBind(alarm); + mRingtonePickerController.tryRestoreCallback(makeTag(R.id.ringtone)); bindDays(alarm); bindRingtone(); bindVibrate(alarm.vibrates()); @@ -131,9 +143,8 @@ public class ExpandedAlarmViewHolder extends BaseAlarmViewHolder { // // TODO: This is VERY BAD. Use a Controller/Presenter instead. // // The result will be delivered to MainActivity, and then delegated to AlarmsFragment. // ((Activity) getContext()).startActivityForResult(intent, AlarmsFragment.REQUEST_PICK_RINGTONE); - RingtonePickerDialog dialog = RingtonePickerDialog.newInstance( - newOnRingtoneSelectedListener(), getSelectedRingtoneUri()); - dialog.show(mFragmentManager, TAG_RINGTONE_PICKER); + + mRingtonePickerController.show(getSelectedRingtoneUri(), makeTag(R.id.ringtone)); } @OnClick(R.id.vibrate) @@ -207,18 +218,7 @@ public class ExpandedAlarmViewHolder extends BaseAlarmViewHolder { : Uri.parse(ringtone); } - private RingtonePickerDialog.OnRingtoneSelectedListener newOnRingtoneSelectedListener() { - return new RingtonePickerDialog.OnRingtoneSelectedListener() { - @Override - public void onRingtoneSelected(Uri ringtoneUri) { - Log.d(TAG, "Selected ringtone: " + ringtoneUri.toString()); - final Alarm oldAlarm = getAlarm(); - Alarm newAlarm = oldAlarm.toBuilder() - .ringtone(ringtoneUri.toString()) - .build(); - oldAlarm.copyMutableFieldsTo(newAlarm); - persistUpdatedAlarm(newAlarm, false); - } - }; + private String makeTag(@IdRes int viewId) { + return FragmentTagUtils.makeTag(ExpandedAlarmViewHolder.class, viewId, getItemId()); } }