Skip to content

Commit

Permalink
Update widgets when task starts or becomes due, #17 (#925)
Browse files Browse the repository at this point in the history
Also show task in widget in red color also if due date is equal to now. Otherwise a task would wrongly remain white if its view is updated exactly at the due date.
  • Loading branch information
Trogel authored Mar 31, 2020
1 parent d7f08ff commit 238fae0
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
* Copyright 2020 dmfs GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.dmfs.tasks.actions;

import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.ContentProviderClient;
import android.content.Context;
import android.net.Uri;

import org.dmfs.android.contentpal.RowDataSnapshot;
import org.dmfs.tasks.contract.TaskContract;
import org.dmfs.tasks.homescreen.TaskListWidgetProvider;
import org.dmfs.tasks.homescreen.TaskListWidgetProviderLarge;
import org.dmfs.tasks.R;


/**
* A {@link TaskAction} that updates the widgets.
*
* @author Trogel
*/
public final class UpdateWidgetsAction implements TaskAction
{
public UpdateWidgetsAction()
{
}


@Override
public void execute(Context context, ContentProviderClient contentProviderClient, RowDataSnapshot<TaskContract.Instances> rowSnapshot, Uri taskUri)
{
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
notifyTaskListDataChanged(appWidgetManager, new ComponentName(context, TaskListWidgetProvider.class));
notifyTaskListDataChanged(appWidgetManager, new ComponentName(context, TaskListWidgetProviderLarge.class));
}


private void notifyTaskListDataChanged(AppWidgetManager appWidgetManager, ComponentName componentName)
{
final int[] appWidgetIds = appWidgetManager.getAppWidgetIds(componentName);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.task_list_widget_lv);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ public RemoteViews getViewAt(int position)
row.setTextViewText(android.R.id.text1, mDueDateFormatter.format(dueDate, DateFormatContext.WIDGET_VIEW));

// highlight overdue dates & times
if ((!dueDate.allDay && dueDate.before(mNow) || dueDate.allDay
if ((!dueDate.allDay && Time.compare(dueDate, mNow) <= 0 || dueDate.allDay
&& (dueDate.year < mNow.year || dueDate.yearDay <= mNow.yearDay && dueDate.year == mNow.year))
&& !items[position].getIsClosed())
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
import org.dmfs.tasks.actions.PostUndoAction;
import org.dmfs.tasks.actions.RemoveNotificationAction;
import org.dmfs.tasks.actions.TaskAction;
import org.dmfs.tasks.actions.UpdateWidgetsAction;
import org.dmfs.tasks.actions.WipeNotificationAction;
import org.dmfs.tasks.contract.TaskContract;

Expand Down Expand Up @@ -180,8 +181,10 @@ private TaskAction resolveAction(String action)

case TaskContract.ACTION_BROADCAST_TASK_DUE:
case TaskContract.ACTION_BROADCAST_TASK_STARTING:
// post start and due notification on the due date channel
return new NotifyStickyAction(data -> CHANNEL_DUE_DATES, true);
return new Composite(
// post start and due notification on the due date channel
new NotifyStickyAction(data -> CHANNEL_DUE_DATES, true),
new UpdateWidgetsAction());

case ACTION_UNDO_COMPLETE:
return new Composite(
Expand Down

0 comments on commit 238fae0

Please sign in to comment.