Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 238fae04 authored by Trogel's avatar Trogel Committed by GitHub
Browse files

Update widgets when task starts or becomes due, #17 (#925)

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.
parent d7f08ff7
Loading
Loading
Loading
Loading
+58 −0
Original line number Diff line number Diff line
/*
 * 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);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -233,7 +233,7 @@ public class TaskListWidgetUpdaterService extends RemoteViewsService
                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())
                {
+5 −2
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import org.dmfs.tasks.actions.PinAction;
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;

@@ -180,8 +181,10 @@ public final class ActionService extends JobIntentService

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

            case ACTION_UNDO_COMPLETE:
                return new Composite(