mirror of https://github.com/tasks/tasks
added repeat detail exposer, now repeat pushes hide until too
parent
f04cf12caa
commit
87fd8ca231
@ -0,0 +1,118 @@
|
|||||||
|
/**
|
||||||
|
* See the file "LICENSE" for the full license governing this code.
|
||||||
|
*/
|
||||||
|
package com.todoroo.astrid.repeats;
|
||||||
|
|
||||||
|
import java.text.DateFormatSymbols;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
|
||||||
|
import com.google.ical.values.Frequency;
|
||||||
|
import com.google.ical.values.RRule;
|
||||||
|
import com.google.ical.values.WeekdayNum;
|
||||||
|
import com.timsu.astrid.R;
|
||||||
|
import com.todoroo.andlib.service.Autowired;
|
||||||
|
import com.todoroo.andlib.service.DependencyInjectionService;
|
||||||
|
import com.todoroo.astrid.api.AstridApiConstants;
|
||||||
|
import com.todoroo.astrid.api.TaskDetail;
|
||||||
|
import com.todoroo.astrid.model.Task;
|
||||||
|
import com.todoroo.astrid.service.TaskService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exposes {@link TaskDetail} for tags, i.e. "Tags: frogs, animals"
|
||||||
|
*
|
||||||
|
* @author Tim Su <tim@todoroo.com>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class RepeatDetailExposer extends BroadcastReceiver {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
TaskService taskService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
// get tags associated with this task
|
||||||
|
long taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, -1);
|
||||||
|
if(taskId == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
DependencyInjectionService.getInstance().inject(this);
|
||||||
|
Task task = taskService.fetchById(taskId, Task.FLAGS, Task.RECURRENCE);
|
||||||
|
if(task == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Resources r = context.getResources();
|
||||||
|
|
||||||
|
String recurrence = task.getValue(Task.RECURRENCE);
|
||||||
|
if(recurrence != null && recurrence.length() > 0) {
|
||||||
|
RRule rrule;
|
||||||
|
try {
|
||||||
|
rrule = new RRule(recurrence);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String interval;
|
||||||
|
switch(rrule.getFreq()) {
|
||||||
|
case HOURLY:
|
||||||
|
interval = r.getQuantityString(R.plurals.DUt_hours, rrule.getInterval(),
|
||||||
|
rrule.getInterval());
|
||||||
|
break;
|
||||||
|
case DAILY:
|
||||||
|
interval = r.getQuantityString(R.plurals.DUt_days, rrule.getInterval(),
|
||||||
|
rrule.getInterval());
|
||||||
|
break;
|
||||||
|
case WEEKLY:
|
||||||
|
interval = r.getQuantityString(R.plurals.DUt_weeks, rrule.getInterval(),
|
||||||
|
rrule.getInterval());
|
||||||
|
break;
|
||||||
|
case MONTHLY:
|
||||||
|
interval = r.getQuantityString(R.plurals.DUt_months, rrule.getInterval(),
|
||||||
|
rrule.getInterval());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// not designed to be used, only a fail-safe
|
||||||
|
interval = rrule.getInterval() + "-" + rrule.getFreq().name(); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
interval = "<b>" + interval + "</b>"; //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
if(rrule.getFreq() == Frequency.WEEKLY) {
|
||||||
|
List<WeekdayNum> byDay = rrule.getByDay();
|
||||||
|
if(byDay.size() > 0) {
|
||||||
|
StringBuilder byDayString = new StringBuilder();
|
||||||
|
DateFormatSymbols dfs = new DateFormatSymbols();
|
||||||
|
String[] weekdays = dfs.getShortWeekdays();
|
||||||
|
for(int i = 0; i < byDay.size(); i++) {
|
||||||
|
byDayString.append(weekdays[byDay.get(i).wday.javaDayNum]);
|
||||||
|
if(i < byDay.size() - 1)
|
||||||
|
byDayString.append(", "); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
interval = r.getString(R.string.repeat_detail_byday).replace("$I", //$NON-NLS-1$
|
||||||
|
interval).replace("$D", byDayString); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
String detail;
|
||||||
|
if(task.getFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION))
|
||||||
|
detail = context.getString(R.string.repeat_detail_completion, interval);
|
||||||
|
else
|
||||||
|
detail = context.getString(R.string.repeat_detail_duedate, interval);
|
||||||
|
|
||||||
|
|
||||||
|
TaskDetail taskDetail = new TaskDetail(RepeatsPlugin.IDENTIFIER, detail);
|
||||||
|
|
||||||
|
// transmit
|
||||||
|
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_DETAILS);
|
||||||
|
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, taskDetail);
|
||||||
|
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId);
|
||||||
|
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue