Closed shompoe closed 4 years ago
I believe the ideal behaviour would be to have tasks filtered by start date if set or due date if not set. And to have them displayed under the day header for start date if set.... and move up the list as time progresses. Then to stay in Past and Due header until they are completed or rescheduled. If both start date and due date are set then they could be ordered in Past and Due by due date and highlighted once due date expires.
Thank you @shompoe for raising this. Your suggestion continues our discussion with @ekalin here and below: https://github.com/plusonelabs/calendar-widget/issues/308#issuecomment-513441404 where we didn't define / agree on proper tasks ordering / showing / filtering...
Reading your above posts I see the problem and I also see that different cases still need more details/clarification. Otherwise we will fix one case and break another...
In particular, it seems that we need to filter tasks by both start and due dates...
Hi again,
As far as I can see, if you do it how I suggest (use due date if start date not set, use start date if due date not set, but if both set then filter by start date and show under the day header from start date but sort by due date under Past and Due header) then it ought to work as the user expects regardless of whether the app they use has both start and due date or just one or the other???
I can't think of a scenario where this would cause unexpected behaviour.
@shompoe No :-) Suppose this case:
Following your description "filter by start date" the task should be filtered out i.e. hidden. ?!
No. It should stay under the Past and Due header regardless of start and due date until the task is marked complete. So actually, only future tasks filtered by start date but past tasks should remain unfiltered regardless of settings. I believe this is actually how the widget works at the moment. Ie. the display past events setting only affects events, but not tasks.
This should be considered expected behaviour because an event (say an appointment) expires at a certain time, regardless of wether you attend it or not. A task however, cannot expire until you have actioned it and so it becomes overdue.
I just did a quick test and this is what the widget is doing now, albeit filtering on due rather than start.
Does that make sense?
OK, so we extend our case:
I have these tasks in the Task app:
As we don't know, if tasks in the Task app have Start or Due date, we need:
tasks 1 to 5 and task8 will be shown task6 and task7 won't be shown at all...
Correct?
OR according to your words task4 shouldn't be shown also ?!
For the reference, current filtering logic is in this file: https://github.com/andstatus/todoagenda/blob/master/app/src/main/java/org/andstatus/todoagenda/task/dmfs/DmfsOpenTasksProvider.java
below this line:
private String getWhereClause() {
(currently it's at line 76)
tasks 1 to 5 and task8 will be shown task6 and task7 won't be shown at all...
Yes, this is what should happen. Show everything that is incomplete and either started in the past, will start within 1 month, or has no specified start date. Tasks that are complete must never be shown. And tasks that start after 1 month must not be shown.
You make an interesting point about task 4. My original reasoning was that some apps maybe don't have both start and due dates, some only start and some only due. I don't know if this is the case. If it is then it complicates things.
However, if the app supports both start and due then failure to set a start date could have different meanings for different people (I read the thread mentioned above)
For me, when I don't set start date it means something I should be starting at my earliest convenience. So I don't want to loose visibility of those tasks regardles of wether I have given them a due date.
So I think my original logic is only relevant for apps that don't have start date. Are there any? I don't know.
Going back to task 4. It would be useful for it to display the due date in the widget. But perhaps that's for another thread.
What do you think? I'd be happy to do some testing of a hyperthetical update to the widget if that helps.
To all! For discussion below I wrote the same tasks, but made it easier to understand, what is shown and where (if not obvious...). I added some more tasks for better coverage. Moreover, I sorted them in a way they will be sorted in the widget (assuming initially they are sorted according to their numbers)
For which events/tasks | Filter settings |
---|---|
For past events | "Show past events ended today" is on |
For current and future events | Date range: One month |
New option introduced: "Task scheduling" (What date gets main attention for a task) with two values: T1. Show tasks under date due (Due date gets main attention, and we are showing tasks at their due dates, where it makes sense). T2. Show tasks under date started (Start date gets main attention, and we are showing tasks at their start dates, where it makes sense).
In any case both start and due dates are taken into account, but differently.
task9 and task10 below (as other tasks without start and due dates) need special treatment i.e. additional option: "Tasks without start and due dates" with values: .1 Show at the end of the whole list (default option) .2 Show at the end of Today. .3 Hide. Below tables are shown with default option
Task visibility and sorting if option T1 (Due date...) is selected:
Task description | Show | Where to show |
---|---|---|
task11 starting last month (after task5) and due last week (at the same time as task5) (complete) | no | |
task5 starting last month and due last week (incomplete) | yes | Last week (or "Past and Due" if turned on. The same for others in the past) |
task3 without start date and due later today at 9PM (incomplete) | yes | Today or at 9PM |
task1 starting last week and due later today at 10PM (incomplete) | yes | Today at 10PM |
task6 starting last month and due tomorrow at 8AM (complete) | no | |
task7 starting today at 8AM and due tomorrow at 9AM (complete) | no | |
task12 starting today at 7AM and due tomorrow at 10AM (incomplete) | yes | at due date: Tomorrow at 10AM |
task17 starting in 10 days, without due date (incomplete) | yes | At start date |
task16 without start date and due in 20 days | yes | At due date |
End of list header | ||
task14 starting in 39 days, and without due date (incomplete) | no | |
task8 starting next week, due in 41 days (incomplete) | yes | End of list, closer to due date |
task4 without start date and due in 42 days (incomplete) | no | |
task2 starting last week and due in 43 days (incomplete) | yes | End of list |
task15 starting in 40 days, due in 45 days (incomplete) | no | |
task10 without start date and without due date (incomplete) | yes | (Position depends on "Tasks without start and due dates") |
task9 without start date and without due date (complete) | no | (Position depends on "Tasks without start and due dates") |
Task visibility and sorting if option T2 (Start date...) is selected:
Task description | Show | Where to show |
---|---|---|
task11 starting last month (after task5) and due last week (at the same time as task5) (complete) | no | |
task5 starting last month and due last week (incomplete) | yes | Last week (or "Past and Due" if turned on. The same for others in the past) |
task3 without start date and due later today at 9PM (incomplete) | yes | Start of today |
task1 starting last week and due later today at 10PM (incomplete) | yes | Start of Today |
task6 starting last month and due tomorrow at 8AM (complete) | no | |
task16 without start date and due in 20 days | yes | Start of today |
task4 without start date and due in 42 days (incomplete) | yes | Start of today |
task2 starting last week and due in 43 days (incomplete) | yes | Start of Today |
task12 starting today at 7AM and due tomorrow at 10AM (incomplete) | yes | Today at 7AM |
task7 starting today at 8AM and due tomorrow at 9AM (complete) | no | |
task8 starting next week, due in 41 days (incomplete) | yes | Next week |
task17 starting in 10 days, without due date (incomplete) | yes | At start date |
End of list header | ||
task14 starting in 39 days, and without due date (incomplete) | no | |
task15 starting in 40 days, due in 45 days (incomplete) | no | |
task10 without start date and without due date (incomplete) | yes | (Position depends on "Tasks without start and due dates") |
task9 without start date and without due date (complete) | no | (Position depends on "Tasks without start and due dates") |
Q1: decision to show task4 (and task10 also?) depends on a User's understanding of an empty start date. It may mean "today" (see "Where to show" column) or "don't care" (add such an option?)
For me, it means today.
Q2. As we noted in #358 task10 may need special treatment. E.g.: .1 Hide .2 Show today .3 Show only such tasks ???
For me, show today. But I go along with the principle that some users might like the ability to configure other behaviours.
Q3. Is sorting above correct? I see that sorting will depend on Q1 (how we treat no start day)
For me, the order is not correct. Start date just tells me if I'm working on a task or if I'm not yet concerned about it (ie. to display it in my date range or not) whereas due date tells me how long I have for each task and so should affect the priority (ie. tasks with shortest time to complete them at the top).
The decision to put tasks with no due date at the bottom is therefore correct.
@shompoe @gtbuchanan Maybe we really can solve all above problems with sorting and filtering with only one additional option:
How do we treat a task without start date:
?! (Maybe better wording is needed...)
How do we treat a task without start date:
Don't care about such a task (and hide it if no end date also).
Show today, or at the end of list, if no end date.
Seems like this would work for my purposes and for #358.
Can I suggest that the default should be option 2 because this is closer to what already happens and because new users might get confused if they don't see their tasks.
As we are onto the subject of sorting. After sorting first by due date, tasks should then be sorted by priority?
@shompoe I agree that option "2. Show today, or at the end of list, if no end date" should be default.
Regarding sorting, currently events (calendars events and tasks...) with the same date are sorted by the source, and then - by title. So I think that any other special sorting could be better done changing order of Calendars and Task lists. I.e. you can create different task lists for tasks with different priorities...
Yes, I see now. As the widget displays two different types of data, compromises are necessary. So I go along with what you say.
I think the proposal is quite reasonable. A few observations:
Task 4 should not be shown. Once it's in range to be shown (in 12 days), it will be displayed, but in the "due date" date. To make this clear, I'd add a Task 13 to the table, with no start date, ending in 10 days - It's shown, in the 10th day listing.
Task 10 should be shown, under Today. The reasoning I use is that a task with no start or end date is a reminder that doesn't need to be done by or at a certain date, but nevertheless I'd like to see it so that I can do it whenever possible.
There definitely exists apps that don't support a start date. Google Tasks (integrated with Google Calendar and probably Gmail) doesn't, and it's probably used a lot. It believe that if there is no start date (because the app doesn't provide one or if it's not set), internally the start date could be set to the due date, and that would work as expected. But I haven't analyzed each possible case.
For coverage (in particular of the querying, not much of the ordering), one could add two more tasks:
Also, I'm completely ignoring task times (again, which some apps don't support). I'm sure someone has an use case for them, and it might even be reasonable, but if you one really cares about the time, maybe they need a calendar event and not a task. But perhaps it could be used for sorting tasks in a day, but not for filtering.
This makes complete sense to me. 😊
@ekalin @shompoe I added two more tasks to the list above, as @ekalin suggested, and split one list into two depending on the selected "How do we treat a task without start date" option.
Please review.
As I see task10 is NOT where @ekalin expected :-)
Hi, I've read through the output for T2 a couple of times and I think that is how I'd like to see it.
A couple of thoughts for T1, though this is not how I use tasks. Task 12 is shown under tomorrow, because it is due tomorrow. So logically task 8 cannot be shown because the due date is beyond 1 month? And for task 10, should there be a separate option to show or not show it?
I agree with the current chart. Like @ekalin said, many people (including myself) are coming from Google Calendar where their "Reminders" only have a "due date" so there are no preconceived requirements about "start date". Nonetheless, I can see the usefulness of both sides being described.
I would like to mention that I personally don't care if "task 10" is hidden as long as it isn't displayed at the start of the widget (like "Today"). My main problem right now is my dozens of "task 10" situations push all my calendar events off-screen. I'd be okay if they were displayed at the end of the widget instead in T1. Though, I'm not certain if that is what you meant by "end of the list".
@gtbuchanan Maybe we really need to show task10 even for T1 ("Don't care") case:
I'm not sure I understand what your proposed option does, especially option T1.
I'm also not sure about the need for this option. It's one thing to add an option to hide tasks with no start and end date as in #358, but you seem to want to mix that feature with some other treatment. Moreover, in some cases it's not really the user's choice to set or not a start date, but a limitation on the task app.
Currently I have more issues with both your options than I had before :-) Hete's how I think it should look like. I've removed the completed tasks because they only make it harder to follow the chart, and I think everyone agrees that completed tasks are not to be shown:
Task description | Show | Where to show |
---|---|---|
task5 starting last month and due last week | yes | Last week (or "Past and Due" if turned on. The same for others in the past) |
task3 without start date and due later today at 9PM | yes | Today |
task1 starting last week and due later today at 10PM | yes | Today (after 3, since 1 is due later) |
task12 starting today at 7AM and due tomorrow | yes | Today |
task2 starting last week and due in 43 days | yes | Today |
task10 without start date and without due date | Depends on setting of #358 | If to be displayed, should be displayed today. |
task8 starting next week, due in 41 days | yes | At start date |
task16 without start date and due in 20 days | yes | At due date |
task4 without start date and due in 42 days | no | |
task15 starting in 40 days, due in 45 days | no | |
task14 starting in 39 days, and without due date | no |
Edit: Added task16
Yes, if T1 was added just for me then I agree with @ekalin chart for the new default behavior. Start dates always matter to me if there is one. For tasks without a start or due date I just use a separate task widget or my tasks app to set dates or complete when appropriate. However, if we still wanted to display them in this widget we can nix the original setting, use @ekalin chart, and add the single following option instead:
"Pin open-ended tasks to Today"
Default to true for current behavior. Setting to false would move the tasks with no start or end date to a new section at the bottom of the widget titled something like "Open-ended Tasks".
@ekalin wrote
I'm also not sure about the need for this option. It's one thing to add an option to hide tasks with no start and end date as in #358, but you seem to want to mix that feature with some other treatment.
"some other treatment" is exactly the topic of this issue. Please read it from the very beginning.
Placing tasks without any date at the bottom of the list is logical ("correct" as @shompoe confirmed): these are the latest tasks you should care about. I see that actually this is the only point that doesn't fit your needs?!
in some cases it's not really the user's choice to set or not a start date, but a limitation on the task app
ToDo Agenda doesn't support such Task apps: Samsung Calendar simply doesn't have start date, as implemented, Open Tasks allows to leave start date empty.
Samsung Calendar simply doesn't have start date, as implemented
That's exactly what I meant on limitation on the task app: since there's no way to set the start date, all tasks have start date empty, so whatever the user selects in that option will apply to all tasks.
@gtbuchanan
Yes, if T1 was added just for me...
No, the two cases appeared as a result of THIS issue's discussion. Your discomfort with tasks without both dates just happen to fit into the new reasoning...
Samsung Calendar simply doesn't have start date, as implemented
That's exactly what I meant on limitation on the task app: since there's no way to set the start date, all tasks have start date empty, so whatever the user selects in that option will apply to all tasks.
In previous implementation we set (absent) start date equal to present Due date. That was a workaround, because we didn't have logic that we are developing in this issue. I mean we can (or maybe even should) remove that workaround and leave Start date empty (as it wasn't actually set by a User!)
Edit: ... OR we can change the Samsung "Provider" behavior depending on the "How do we treat a task without start date" option value?!
@yvolk I see. Well, T1 does fit my need for #358 but it prevents me from ever using start date in a useful way as this ticket suggests (which was the reason I entered a separate ticket). I said it is fine with me for now since it solves my immediate issue and you are trying to avoid adding multiple new settings. If it were my choice, I would prefer the new fixed behavior @ekalin suggested and a new setting for where the "no start or due date" tasks are displayed. Sorry for the confusion.
@gtbuchanan As you see, this discussion is quite complex, it requires attention to details, to every line of the long post. So please write which exactly line in my post's tables you would change and why.
Comparing different tables with one word won't make us closer to the better solution. I think :-) Do you agree?
I agree, I'm just replying on my phone where it is more difficult to do that with tables. I'll compose a more detailed response when I'm back at my computer next week.
@gtbuchanan wrote:
T1 does fit my need for #358 but it prevents me from ever using start date in a useful way as this ticket suggests (which was the reason I entered a separate ticket).
Actually, it appears that currently in BOTH T1 and T2 options tasks without dates won't bother you, so you CAN use both settings!
Moreover, I asked you "Maybe we really need to show task10 even for T1 ("Don't care") case..." here: https://github.com/plusonelabs/calendar-widget/issues/356#issuecomment-559976840 but it looks like you missed that post?! (No wonder if you read this from a phone :-) )
Actually, it appears that currently in BOTH T1 and T2 options tasks without dates won't bother you, so you CAN use both settings!
I was unsure what you meant by "end of the list", which I thought was clear by my first response. I assumed it meant at the end of the widget but could also have meant at the end of "Today" section like it is now. I'll phrase it as a question next time to be more clear.
Moreover, I asked you "Maybe we really need to show task10 even for T1 ("Don't care") case..." here: #356 (comment) but it looks like you missed that post?!
I've already said that I personally don't care whether task 10 shows or not because I manage those tasks outside the widget. That is up to you. All I care about is that they aren't at the top of the widget pushing all my other events down.
@gtbuchanan I confirm another time that "end of the list" means after ALL other entries shown in the whole widget. So, once again, you can choose T1 or T2 option depending on your needs, and in both cases the problem that you encountered in #358 will be solved. I.e. that problem will be solved not because of introduction of the new option, but because we are re-thinking how our widget works.
The T1/T2 is a little confusing and I don't really understand the purpose of both settings. But @ekalin 's revised table seems like it could apply the same logic and cover both situations.
@shompoe
You already wrote "I've read through the output for T2 a couple of times and I think that is how I'd like to see it" Do you still like it or you changed your mind? If you changed your mind, please tell which exactly line is wrong and why. Comparing two tables as a whole is counterproductive.
If you struggle to understand, what is the difference in T1 comparing with (your) T2 and why: no problem. It is not your goal to understand the whole logic, after all. Is it?!
@shompoe @ekalin @gtbuchanan So far nobody confirmed that they need T1 ("Don't care...") option. This may mean that we really just can change the widget's behavior to what is written in T2 and DON'T ADD any new options at all, at least now.
?!
Both T2 and @ekalin's proposal would work for me. This is because functionaly there is little difference between the two. (The only difference I can see is the due date set but no start date scenario.)
I don't understand T1 and I think @ekalin said much the same but his proposal should satisfy both scenarios, making the widget function as one would expect refardless of wether they use google calendar or open notes etc.. So yes, we both seem to be saying that there is no need for 2 settings, but that @ekalin's logic would be the one to use, not T1 or T2.
As for task 10, it looks like we are also saying that there doesn't need to be a setting to hide it but that it should appear at the botton of today.
😁
Since you asked... here's why I don't like T2:
task4 (no start date, due in 42 days) should not be shown - since it's only due in 42 days and I only want to see events in the next 30 days, there's no need to see it now. And when it is displayed (less than 30 days to the due date), I'd like to see it in the due date, not "Today".
This can be worked around by setting a start date. Except that in some taks providers (Samsung (supported) and Google Tasks (not yet supported, but a good candiate for future support)) don't allow the user the set a start date. So not possible to work around in that case.
Also I'd rather see task10 (no dates) under Today, but this I realize here there is a larger matter of preference at play. This can be worked around by setting a due date (with the minor inconvenience that after the first day they'd be shown as past due not due today), but the ideal solution would be to set a start date - which is not possible for all users.
So perhaps #358 could be implemented with three options: hide those tasks, display under Today, display at the end of the list.
But never mind me, I don't actually use the widget because the changes you made to how tasks work (compared to how I implemented them originally), already made it too different from what I wanted.
@shompoe What I could understand from your answer:
As for task 10, it looks like we are also saying that there doesn't need to be a setting to hide it but that it should appear at the botton of today.
Is this about T2? If yes then it contradicts with point 1 above (T2 shows task10 at the bottom of the whole list, not of "Today's bottom"). Please clarify.
Please be concrete in order to avoid misunderstanding.
@ekalin I understood, why you're so pessimistic. Thank you for telling what's wrong instead of drawing the whole new table...
The answer to you is VERY simple: T1 is for you, not T2. Please look: I moved task10 only (!) in T1 table, and if fully fits in your response regarding T2!
I also added task16 to both tables in order to make it clear, how T1 and T2 differ. T1 acts exactly as you wish!
Any more concrete responses supposing that You selected T1 option?!
The current version of T1 does work for me now. Some previous version had some problems, but I won't go through each revision of the comment to check what was changed.
Though I'm not completely sure about task2 and 12, perhaps if there is a start date then the tasks should be displayed under the start date. But this is a minor issue, I guess I could live with it either way.
However, it's still not clear what's the intention of the option and what it effectively changes. And if I were a new user and saw that option, I'd be totally clueless to what it does.
@ekalin Thank you for the feedback. I also see that the names of the setting itself and of the two values (T1 and T2) should be changed...
So about T1: Regarding task2 and task12 and also about all other tasks having start date I also see some inconsistency, The whole T1 is about paying attention at due date (mostly...). So probably it would be better, in order to give a User a real choice between T1 and T2, show tasks with start date at due date also, (or at the end of the list, if due date is outside of the "Date range", but start date is before it?! Anyway, for consistency of the behaviour I'm moving task1 and task8 (the other two shown tasks with start days) later - to their due dates. I also moved not shown yet future task14 without due date to the End of Today (!) in order to express that this task will appear here, when start day falls into the Date Range.
Please look at these tasks now. Same logic with tasks not having Start Date?!
So it now seems that T1 is about ignoring the start date, even if it is set, for deciding where to sort the task, but the start date is still used in filtering which tasks are to be displayed (next X days of events to show).
If that's the rule, then T1 is consistent. But seems like a weird option to have. After all, if the user wants to ignore start dates, then maybe they should always be ignored (for sorting and filtering). But then there's no real need for the option, is there? Then user can simply leave the start date blank.
The logic of my proposal (which, I must add, has been approved by the other two participants in the thread) is:
[From a technical point of view, one could probably SELECT COALESCE(START_DATE, DUE_DATE) AS EFFECTIVE_START_DATE
and filter and sort in days based on EFFECTIVE_START_DATE
, no if
necessary except for tasks of item 6.]
@ekalin 1. Main difference now between T1 + T2 and what you are proposing is that: 1.1. Introducing two options I'm trying to give really two consistent options for showing tasks, namely: T1 - Due date gets main attention (and we are trying to show ALL tasks at their due dates) T2 - Start date gets main attention (and we are trying to show tasks at start dates)
In both cases both start and due dates are taken into account, but differently.
1.2. What you are proposing now is a mix between the two. And I see this as a confusion for users.
I added "task17 starting in 10 days, without due date (incomplete)" that emphasizes difference between T1 and T2 consistently.
@ekalin Regarding "my proposal was approved by...". @shompoe and @gtbuchanan are normal users, who can "approve" anything without going into details but later can easily point you to their words, where they asked for something that contradicts with what they "approved" :-) This is normal, most users behave this way. This is a Developer's task to understand, what they really want (or will want/like...) :-)
Oh, and people change their minds also. Both Users and Developers...
@yvolk Perhaps you would receive more friendly responses if you were less condescending. I'm a software engineer by trade as well, but you are free to make poor assumptions. I was trying to help but I'll just fork instead.
Yes, T2 most closely aligns with my uses and expectations, with the exception of point 3 below....
Incorrect, if T2 renders the widget useless for people who cannot set start date then I concur that another option is essential. I just wasn't sure that T1 reflected what those users would expect.
Indeed. I'm sorry for the confusion. Under T2 for task 10 you wrote "end of the list" and in my haste I interpreted that as "end of today." To be clear, for T2 I would want task 10 at the end of today.
You're right. Users do change their minds. Let me take some time to read through T2 very carefully again and make sure I haven't missed anything else.
If you want an option to hide task 10 then no skin off my nose. I just wouldn't use it.
@gtbuchanan Sorry to sound condescending :-) I'm not telling about profession, but about a role in this concrete issue. Of course it is much easier to do something for yourself... but it's not that interesting, I think :-)
@shompoe @gtbuchanan @ekalin Thank you all for helping with figuring out, how to filter and how to show tasks.
I will create automatic test using tasks from the T1 and T2 tables that we discussed (I will add some Calendar events there also...)
Please note that I plan to release new app versions for Android 7.1.1+ only. Hope you use such devices.
I've been through T2 option with a fine tooth comb. It's a minor point only, but task 7 (starting today) may be said to have already started and so it should appear at start of today. Otherwise I am presently 100% committed to this option.
@shompoe "task7" is complete and hence hidden, so I think that you mean "task12 starting today at 7AM and due tomorrow (incomplete)" It is shown at its start, at 7AM, and not at "Start of Today" meaning that e.g. some calendar event starting at 6AM Today will be placed before it.
?!
When the task app allows a start date and a due date, our natural inclination is surely to set the start date to the time we need to become concerned about the task, in other words, the time that the task should come into view. In this way we may schedule many tasks into the future but maintain our immediate visibility only on those tasks which we need to be focussed on in the present. And the due date, logically, is the time at which we plan to complete the task.
However, the present version of the widget filters tasks by due date. This means that if I have a task which is already scheduled to start tomorrow, but which I have allocated two weeks from start to completion, and I have a widget which filters all but today's tasks and events, my task will not appear in the widget untill the day it is due to be completed. So for the two weeks that have now transpired the widget has given me no warning that I needed to be working on that task.