package org.smartpaws.recycler.cards; import android.app.AlertDialog; import android.content.DialogInterface; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; import org.smartpaws.R; import org.smartpaws.notifications.AlarmService; import org.smartpaws.objects.Event; import org.smartpaws.recycler.ReminderRecyclerView; import org.smartpaws.util.TimeUtils; public class CardReminder extends RecyclerView.ViewHolder { private AlarmService.Reminder reminder; private View root; private TextView titleView; private TextView timeView; private TextView minsView; private ImageView closeIcon; private AlertDialog dialog; private int pos; private ReminderRecyclerView parent; public CardReminder(View root, final AlarmService.Reminder reminder, int pos, ReminderRecyclerView parent) { super(root); this.pos = pos; this.parent = parent; this.root = root; this.titleView = (TextView) root.findViewById(R.id.card_reminder_title); this.timeView = (TextView) root.findViewById(R.id.card_reminder_time); this.minsView = (TextView) root.findViewById(R.id.card_reminder_mins_before); this.closeIcon = (ImageView) root.findViewById(R.id.card_reminder_close); setReminder(reminder); this.dialog = buildDialog(); this.root.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.show(); } }); } public AlarmService.Reminder getReminder() { return reminder; } public void setReminder(final AlarmService.Reminder reminder) { this.reminder = reminder; final Event event = reminder.getEvent(); final int minsBefore = reminder.getMinsBefore(); this.titleView.setText(event.getName()); this.timeView.setText(TimeUtils.formatEventTime(event.getDateStart(), event.getDuration())); this.minsView.setText(getMinutesText(minsBefore)); this.closeIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlarmService.removeReminder(event); parent.removeItem(CardReminder.this); } }); } private String getMinutesText(int minsBefore) { // TODO: Translations String result; int hoursBefore = minsBefore % 60; if (hoursBefore == 0) { int hours = (minsBefore / 60); result = hours + " hour" + (hours > 1 ? "s" : ""); } else { result = minsBefore + " minute" + (minsBefore > 1 ? "s" : ""); } return result; } private AlertDialog buildDialog() { AlertDialog.Builder rb = new AlertDialog.Builder(root.getContext()); rb.setTitle(R.string.set_reminder); View rView = LayoutInflater.from(root.getContext()).inflate(R.layout.card_event_dialog_reminder, null); final RadioGroup group = (RadioGroup) rView.findViewById(R.id.dialog_radio_group); int minsTill = (int) ((reminder.getEvent().getDateStart().getTime() - System.currentTimeMillis()) / 60000); rb.setPositiveButton(R.string.alert_done, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { int id = group.getCheckedRadioButtonId(); Toast toast = null; int minsBefore = -1; switch (id) { case R.id.dialog_radio_0: { Toast.makeText(root.getContext(), R.string.reminder_removed, Toast.LENGTH_SHORT).show(); AlarmService.removeReminder(reminder.getEvent()); CardReminder.this.parent.removeItem(CardReminder.this); return; } case R.id.dialog_radio_5: { minsBefore = 5; toast = Toast.makeText(root.getContext(), R.string.reminder_updated, Toast.LENGTH_SHORT); break; } case R.id.dialog_radio_10: { minsBefore = 10; toast = Toast.makeText(root.getContext(), R.string.reminder_updated, Toast.LENGTH_SHORT); break; } case R.id.dialog_radio_15: { minsBefore = 15; toast = Toast.makeText(root.getContext(), R.string.reminder_updated, Toast.LENGTH_SHORT); break; } case R.id.dialog_radio_30: { minsBefore = 30; toast = Toast.makeText(root.getContext(), R.string.reminder_updated, Toast.LENGTH_SHORT); break; } case R.id.dialog_radio_60: { minsBefore = 60; toast = Toast.makeText(root.getContext(), R.string.reminder_updated, Toast.LENGTH_SHORT); break; } case R.id.dialog_radio_120: { minsBefore = 120; toast = Toast.makeText(root.getContext(), R.string.reminder_updated, Toast.LENGTH_SHORT); break; } } AlarmService.setReminder(reminder.getEvent(), minsBefore, reminder.getRoom()); if (toast != null) toast.show(); CardReminder.this.minsView.setText(getMinutesText(minsBefore)); CardReminder.this.minsView.invalidate(); dialog.dismiss(); } }); rb.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); rb.setView(rView); return rb.create(); } }