mirror of https://github.com/tasks/tasks
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.9 KiB
Java
149 lines
4.9 KiB
Java
/**
|
|
* Copyright (c) 2012 Todoroo Inc
|
|
*
|
|
* See the file "LICENSE" for the full license governing this code.
|
|
*/
|
|
package com.todoroo.astrid.alarms;
|
|
|
|
import java.util.Date;
|
|
import java.util.LinkedHashSet;
|
|
|
|
import android.app.Activity;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.View.OnClickListener;
|
|
import android.widget.ImageButton;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.TextView;
|
|
|
|
import org.tasks.R;
|
|
import com.todoroo.andlib.data.TodorooCursor;
|
|
import com.todoroo.andlib.utility.DateUtilities;
|
|
import com.todoroo.astrid.data.Metadata;
|
|
import com.todoroo.astrid.data.Task;
|
|
import com.todoroo.astrid.helper.TaskEditControlSet;
|
|
import com.todoroo.astrid.ui.DateAndTimeDialog;
|
|
import com.todoroo.astrid.ui.DateAndTimeDialog.DateAndTimeDialogListener;
|
|
import com.todoroo.astrid.ui.DateAndTimePicker;
|
|
|
|
/**
|
|
* Control set to manage adding and removing tags
|
|
*
|
|
* @author Tim Su <tim@todoroo.com>
|
|
*
|
|
*/
|
|
public final class AlarmControlSet extends TaskEditControlSet {
|
|
|
|
// --- instance variables
|
|
|
|
private LinearLayout alertsContainer;
|
|
private DateAndTimeDialog pickerDialog;
|
|
|
|
public AlarmControlSet(Activity activity, int layout) {
|
|
super(activity, layout);
|
|
}
|
|
|
|
@Override
|
|
protected void readFromTaskOnInitialize() {
|
|
alertsContainer.removeAllViews();
|
|
TodorooCursor<Metadata> cursor = AlarmService.getInstance().getAlarms(model.getId());
|
|
try {
|
|
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
|
|
addAlarm(new Date(cursor.get(AlarmFields.TIME)));
|
|
}
|
|
} finally {
|
|
cursor.close();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void afterInflate() {
|
|
this.alertsContainer = (LinearLayout) getView().findViewById(R.id.alert_container);
|
|
View.OnClickListener addAlarmListener = new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View arg0) {
|
|
addAlarm(new Date());
|
|
}
|
|
};
|
|
getView().findViewById(R.id.alarms_add).setOnClickListener(addAlarmListener);
|
|
|
|
pickerDialog = new DateAndTimeDialog(activity, 0);
|
|
}
|
|
|
|
@Override
|
|
public String writeToModel(Task task) {
|
|
if (initialized && pickerDialog != null) {
|
|
pickerDialog.dismiss();
|
|
}
|
|
return super.writeToModel(task);
|
|
}
|
|
|
|
@Override
|
|
protected String writeToModelAfterInitialized(Task task) {
|
|
LinkedHashSet<Long> alarms = new LinkedHashSet<Long>();
|
|
for(int i = 0; i < alertsContainer.getChildCount(); i++) {
|
|
Long dateValue = (Long) alertsContainer.getChildAt(i).getTag();
|
|
if(dateValue == null) {
|
|
continue;
|
|
}
|
|
alarms.add(dateValue);
|
|
}
|
|
|
|
if(AlarmService.getInstance().synchronizeAlarms(task.getId(), alarms)) {
|
|
task.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private boolean addAlarm(Date alert) {
|
|
final View alertItem = LayoutInflater.from(activity).inflate(R.layout.alarm_edit_row, null);
|
|
alertsContainer.addView(alertItem);
|
|
|
|
alertItem.setOnClickListener(new OnClickListener() {
|
|
@Override
|
|
public void onClick(final View v) {
|
|
pickerDialog.setSelectedDateAndTime((Long) alertItem.getTag());
|
|
pickerDialog.setDateAndTimeDialogListener(new DateAndTimeDialogListener() {
|
|
@Override
|
|
public void onDateAndTimeSelected(long date) {
|
|
if (date > 0) {
|
|
if (!pickerDialog.hasTime()) {
|
|
Date d = new Date(date);
|
|
d.setHours(18);
|
|
d.setMinutes(0);
|
|
d.setSeconds(0);
|
|
date = d.getTime();
|
|
}
|
|
v.setTag(date);
|
|
TextView label = (TextView) v.findViewById(R.id.alarm_string);
|
|
label.setText(DateAndTimePicker.getDisplayString(activity, date));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onDateAndTimeCancelled() {
|
|
// Do nothing
|
|
}
|
|
});
|
|
pickerDialog.show();
|
|
}
|
|
});
|
|
|
|
alertItem.setTag(alert.getTime());
|
|
TextView display = (TextView) alertItem.findViewById(R.id.alarm_string);
|
|
display.setText(DateAndTimePicker.getDisplayString(activity, alert.getTime()));
|
|
|
|
ImageButton reminderRemoveButton;
|
|
reminderRemoveButton = (ImageButton)alertItem.findViewById(R.id.button1);
|
|
reminderRemoveButton.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
alertsContainer.removeView(alertItem);
|
|
}
|
|
});
|
|
|
|
return true;
|
|
}
|
|
}
|