Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrelves2008-01-25 17:18:10 +0000
committerrelves2008-01-25 17:18:10 +0000
commit88e73172848afe181261a8177711014cec4d144d (patch)
tree70e391e370c525784cbc2bfd91a6c09afd66a753 /org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn
parent65b92d9b3eac6e3d32cb3257ee8b4b1fd42731df (diff)
downloadorg.eclipse.mylyn.tasks-88e73172848afe181261a8177711014cec4d144d.tar.gz
org.eclipse.mylyn.tasks-88e73172848afe181261a8177711014cec4d144d.tar.xz
org.eclipse.mylyn.tasks-88e73172848afe181261a8177711014cec4d144d.zip
NEW - bug 206566: improve the usability of scheduling and workweek focus and get rid of "red Mondays"
https://bugs.eclipse.org/bugs/show_bug.cgi?id=206566
Diffstat (limited to 'org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn')
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskContainer.java55
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java52
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityUtil.java23
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java18
4 files changed, 114 insertions, 34 deletions
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskContainer.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskContainer.java
index 573a536e6..b71a88796 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskContainer.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskContainer.java
@@ -29,6 +29,8 @@ public class ScheduledTaskContainer extends AbstractTaskContainer {
private Calendar endDate;
+ private boolean captureFloating = false;
+
private TaskActivityManager activityManager;
public ScheduledTaskContainer(TaskActivityManager activityManager, GregorianCalendar startDate,
@@ -108,10 +110,6 @@ public class ScheduledTaskContainer extends AbstractTaskContainer {
// ignore
}
- public Set<ScheduledTaskDelegate> getDateRangeDelegates() {
- return dateRangeDelegates;
- }
-
public boolean isFuture() {
return !isPresent() && getStart().after(Calendar.getInstance());
}
@@ -120,6 +118,10 @@ public class ScheduledTaskContainer extends AbstractTaskContainer {
return getStart().before(Calendar.getInstance()) && getEnd().after(Calendar.getInstance());
}
+ public boolean isToday() {
+ return TaskActivityUtil.getCalendar().get(Calendar.DAY_OF_MONTH) == getStart().get(Calendar.DAY_OF_MONTH);
+ }
+
@Override
public int hashCode() {
final int prime = 31;
@@ -167,29 +169,27 @@ public class ScheduledTaskContainer extends AbstractTaskContainer {
@Override
public Set<AbstractTask> getChildren() {
Set<AbstractTask> children = new HashSet<AbstractTask>();
- if (isPresent()) {
- // add all overdue
- Calendar beginning = Calendar.getInstance();
- beginning.setTimeInMillis(0);
- Calendar end = Calendar.getInstance();
- end.set(5000, 12, 1);
- for (AbstractTask task : activityManager.getDueTasks(beginning, getStart())) {
- if (activityManager.isOverdue(task)) {
+ Calendar beginning = Calendar.getInstance();
+ beginning.setTimeInMillis(0);
+ if (isCaptureFloating() && !isFuture()) {
+ for (AbstractTask task : activityManager.getScheduledTasks(beginning, getEnd())) {
+ if (task.internalIsFloatingScheduledDate()) {
children.add(task);
}
}
-
- // add all over scheduled
- for (AbstractTask task : activityManager.getScheduledTasks(beginning, getStart())) {
- if (task.isPastReminder() && !task.isCompleted()) {
+ } else if (isPresent()) {
+ // add all due/overdue
+ Calendar end = Calendar.getInstance();
+ end.set(5000, 12, 1);
+ for (AbstractTask task : activityManager.getDueTasks(beginning, getEnd())) {
+ if (activityManager.isOwnedByUser(task)) {
children.add(task);
}
}
- /*bug#212489 */
- //children.addAll(activityManager.getActiveTasks(getStart(), getEnd()));
- children.addAll(activityManager.getScheduledTasks(getStart(), getEnd()));
- for (AbstractTask task : activityManager.getDueTasks(getStart(), getEnd())) {
- if (activityManager.isOwnedByUser(task)) {
+
+ // add all scheduled/overscheduled
+ for (AbstractTask task : activityManager.getScheduledTasks(beginning, getEnd())) {
+ if (!task.internalIsFloatingScheduledDate() && !task.isCompleted()) {
children.add(task);
}
}
@@ -207,7 +207,6 @@ public class ScheduledTaskContainer extends AbstractTaskContainer {
children.add(activeTask);
}
}
- return children;
} else if (isFuture()) {
children.addAll(activityManager.getScheduledTasks(getStart(), getEnd()));
for (AbstractTask task : activityManager.getDueTasks(getStart(), getEnd())) {
@@ -215,12 +214,10 @@ public class ScheduledTaskContainer extends AbstractTaskContainer {
children.add(task);
}
}
- return children;
} else {
children.addAll(activityManager.getActiveTasks(getStart(), getEnd()));
- return children;
-
}
+ return children;
}
@Override
@@ -228,4 +225,12 @@ public class ScheduledTaskContainer extends AbstractTaskContainer {
return getChildren();
}
+ public boolean isCaptureFloating() {
+ return captureFloating;
+ }
+
+ public void setCaptureFloating(boolean captureFloating) {
+ this.captureFloating = captureFloating;
+ }
+
}
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java
index 6ac5982a1..1ac90f082 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java
@@ -457,7 +457,13 @@ public class TaskActivityManager {
}
}
+
public void setScheduledFor(AbstractTask task, Date reminderDate) {
+ setScheduledFor(task, reminderDate, false);
+ }
+
+
+ public void setScheduledFor(AbstractTask task, Date reminderDate, boolean floating) {
// API-3.0: remove check
if (task == null)
return;
@@ -467,6 +473,7 @@ public class TaskActivityManager {
}
task.setScheduledForDate(reminderDate);
+ task.internalSetFloatingScheduledDate(floating);
if (reminderDate == null) {
removeScheduledTask(task);
} else {
@@ -574,6 +581,18 @@ public class TaskActivityManager {
}
return false;
}
+
+ public boolean isScheduledForNextWeek(AbstractTask task) {
+ if (task != null) {
+ Date reminder = task.getScheduledForDate();
+ if (reminder != null) {
+ Calendar time = TaskActivityUtil.getCalendar();
+ time.setTime(reminder);
+ return TaskActivityUtil.isNextWeek(time);
+ }
+ }
+ return false;
+ }
/**
* TODO: move to activity manager
@@ -592,19 +611,19 @@ public class TaskActivityManager {
// scheduledEndHour = TasksUiPlugin.getDefault().getPreferenceStore().getInt(
// TasksUiPreferenceConstants.PLANNING_ENDHOUR);
- Calendar pastStart = GregorianCalendar.getInstance();
+ Calendar pastStart = TaskActivityUtil.getCalendar();
pastStart.setTimeInMillis(0);
// pastStart.setFirstDayOfWeek(startDay);
// pastStart.setTime(startTime);
// pastStart.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_PAST_START);
-// snapToStartOfWeek(pastStart);
+// TaskActivityUtil.snapToStartOfWeek(pastStart);
GregorianCalendar pastEnd = new GregorianCalendar();
pastEnd.setFirstDayOfWeek(startDay);
pastEnd.setTime(startTime);
pastEnd.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_PAST_END);
TaskActivityUtil.snapEndOfWeek(pastEnd);
scheduledPast = new ScheduledTaskContainer(this, pastStart.getTime(), pastEnd.getTime(), DESCRIPTION_PAST);
- scheduleContainers.add(scheduledPast);
+ //scheduleContainers.add(scheduledPast);
scheduleWeekDays.clear();
for (int x = startDay; x < (startDay + 7); x++) {
@@ -661,16 +680,28 @@ public class TaskActivityManager {
scheduleContainers.add(day);
}
- GregorianCalendar currentBegin = new GregorianCalendar();
- currentBegin.setFirstDayOfWeek(startDay);
+
+ Calendar currentBegin = TaskActivityUtil.getCalendar();
currentBegin.setTime(startTime);
TaskActivityUtil.snapStartOfWorkWeek(currentBegin);
- GregorianCalendar currentEnd = new GregorianCalendar();
- currentEnd.setFirstDayOfWeek(startDay);
+ Calendar currentEnd = TaskActivityUtil.getCalendar();
currentEnd.setTime(startTime);
TaskActivityUtil.snapEndOfWeek(currentEnd);
scheduledThisWeek = new ScheduledTaskContainer(this, currentBegin, currentEnd, DESCRIPTION_THIS_WEEK);
- // dateRangeContainers.add(activityThisWeek);
+ scheduledThisWeek.setCaptureFloating(true);
+ //scheduleContainers.add(scheduledThisWeek);
+
+// GregorianCalendar currentBegin = new GregorianCalendar();
+// currentBegin.setFirstDayOfWeek(startDay);
+// currentBegin.setTime(startTime);
+// TaskActivityUtil.snapStartOfWorkWeek(currentBegin);
+// GregorianCalendar currentEnd = new GregorianCalendar();
+// currentEnd.setFirstDayOfWeek(startDay);
+// currentEnd.setTime(startTime);
+// TaskActivityUtil.snapEndOfWeek(currentEnd);
+// scheduledThisWeek = new ScheduledTaskContainer(this, currentBegin, currentEnd, DESCRIPTION_THIS_WEEK);
+// scheduledThisWeek.setCaptureFloating(true);
+// //scheduleContainers.add(scheduledThisWeek);
GregorianCalendar nextStart = new GregorianCalendar();
nextStart.setFirstDayOfWeek(startDay);
@@ -684,7 +715,9 @@ public class TaskActivityManager {
TaskActivityUtil.snapEndOfWeek(nextEnd);
scheduledNextWeek = new ScheduledTaskContainer(this, nextStart.getTime(), nextEnd.getTime(),
DESCRIPTION_NEXT_WEEK);
+ scheduledNextWeek.setCaptureFloating(true);
scheduleContainers.add(scheduledNextWeek);
+
GregorianCalendar futureStart = new GregorianCalendar();
futureStart.setFirstDayOfWeek(startDay);
@@ -698,6 +731,7 @@ public class TaskActivityManager {
TaskActivityUtil.snapEndOfWeek(futureEnd);
scheduledFuture = new ScheduledTaskContainer(this, futureStart.getTime(), futureEnd.getTime(),
DESCRIPTION_FUTURE);
+ scheduledFuture.setCaptureFloating(true);
scheduleContainers.add(scheduledFuture);
GregorianCalendar previousStart = new GregorianCalendar();
@@ -712,7 +746,7 @@ public class TaskActivityManager {
TaskActivityUtil.snapEndOfWeek(previousEnd);
scheduledPrevious = new ScheduledTaskContainer(this, previousStart.getTime(), previousEnd.getTime(),
DESCRIPTION_PREVIOUS_WEEK);
- scheduleContainers.add(scheduledPrevious);
+ //scheduleContainers.add(scheduledPrevious);
}
public List<ScheduledTaskContainer> getDateRanges() {
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityUtil.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityUtil.java
index abf3eb6f1..ee6ae0d88 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityUtil.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityUtil.java
@@ -70,6 +70,17 @@ public class TaskActivityUtil {
snapEndOfDay(cal);
return cal;
}
+
+ public static Calendar snapEndOfNextWeek(Calendar cal) {
+ if (cal.getFirstDayOfWeek() == Calendar.MONDAY) {
+ cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
+ } else {
+ cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
+ }
+ snapEndOfWeek(cal);
+ cal.add(Calendar.WEEK_OF_MONTH, 1);
+ return cal;
+ }
public static Calendar snapForwardNumDays(Calendar calendar, int days) {
calendar.add(Calendar.DAY_OF_MONTH, days);
@@ -126,6 +137,18 @@ public class TaskActivityUtil {
}
return false;
}
+
+ public static boolean isNextWeek(Calendar time) {
+ if (time != null) {
+ Calendar weekStart = getCalendar();
+ snapNextWorkWeek(weekStart);
+ Calendar weekEnd = getCalendar();
+ snapNextWorkWeek(weekEnd);
+ snapEndOfWeek(weekEnd);
+ return (time.compareTo(weekStart) >= 0 && time.compareTo(weekEnd) <= 0);
+ }
+ return false;
+ }
public static boolean isToday(Calendar time) {
if (time != null) {
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java
index 64f76051f..f8ec79692 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java
@@ -48,6 +48,8 @@ public abstract class AbstractTask extends AbstractTaskContainer {
private boolean isNotifiedIncoming = false;
private boolean reminded = false;
+
+ private boolean floatingScheduledDate = false;
private String categoryHandle = "";
@@ -469,4 +471,20 @@ public abstract class AbstractTask extends AbstractTaskContainer {
this.categoryHandle = categoryHandle;
}
+ /**
+ * @since 2.3
+ * @API 3.0: rename/move
+ */
+ public boolean internalIsFloatingScheduledDate() {
+ return floatingScheduledDate;
+ }
+
+ /**
+ * @since 2.3
+ * @API 3.0: rename/move
+ */
+ public void internalSetFloatingScheduledDate(boolean floatingScheduledDate) {
+ this.floatingScheduledDate = floatingScheduledDate;
+ }
+
}

Back to the top