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

Commit dedb8f93 authored by Marten Gajda's avatar Marten Gajda
Browse files

Open first instance of newly created task, fixes #862 (#866)

The Task Editor used to launch the details view for newly created tasks using the task Uri. In general this works, but it fails when the details view uses the Uri with the notification service (because that currently requires an instance Uri). So to fix this we load the first instance after creating a new task and use that one to show the details view.
parent 32c1f824
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
def jems_version = '1.24'
def contentpal_version = '0.5'
def contentpal_version = '0.6'
def androidx_test_runner_version = '1.1.1'

ext.deps = [
+13 −2
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package org.dmfs.provider.tasks.utils;

import org.dmfs.jems.optional.Optional;
import org.dmfs.jems.optional.adapters.SinglePresent;
import org.dmfs.jems.procedure.Procedure;
import org.dmfs.jems.single.Single;

@@ -30,7 +32,7 @@ import org.dmfs.jems.single.Single;
@Deprecated
public final class With<T> implements Procedure<Procedure<T>>
{
    private final Single<T> mValue;
    private final Optional<T> mValue;


    public With(T value)
@@ -40,6 +42,12 @@ public final class With<T> implements Procedure<Procedure<T>>


    public With(Single<T> value)
    {
        this(new SinglePresent<>(value));
    }


    public With(Optional<T> value)
    {
        mValue = value;
    }
@@ -47,7 +55,10 @@ public final class With<T> implements Procedure<Procedure<T>>

    @Override
    public void process(Procedure<T> delegate)
    {
        if (mValue.isPresent())
        {
            delegate.process(mValue.value());
        }
    }
}
+30 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package org.dmfs.tasks;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
@@ -41,10 +42,20 @@ import android.widget.Spinner;
import android.widget.Toast;

import org.dmfs.android.bolts.color.elementary.ValueColor;
import org.dmfs.android.contentpal.predicates.AllOf;
import org.dmfs.android.contentpal.predicates.EqArg;
import org.dmfs.android.contentpal.predicates.ReferringTo;
import org.dmfs.android.contentpal.references.RowUriReference;
import org.dmfs.android.contentpal.rowsets.Frozen;
import org.dmfs.android.contentpal.rowsets.QueryRowSet;
import org.dmfs.android.retentionmagic.SupportFragment;
import org.dmfs.android.retentionmagic.annotations.Parameter;
import org.dmfs.android.retentionmagic.annotations.Retain;
import org.dmfs.jems.optional.adapters.First;
import org.dmfs.opentaskspal.readdata.Id;
import org.dmfs.opentaskspal.views.InstancesView;
import org.dmfs.provider.tasks.AuthorityUtil;
import org.dmfs.provider.tasks.utils.With;
import org.dmfs.tasks.contract.TaskContract;
import org.dmfs.tasks.contract.TaskContract.TaskLists;
import org.dmfs.tasks.contract.TaskContract.Tasks;
@@ -722,9 +733,25 @@ public class EditTaskFragment extends SupportFragment implements LoaderManager.L
                activity.finish();
                if (isNewTask)
                {
                    // When creating a new task we're dealing with a task URI, for now we start the details view with an instance URI though
                    // so get the first instance of the new task and open it
                    new With<>(
                            new First<>(
                                    new Frozen<>(
                                            new QueryRowSet<>(
                                                    new InstancesView<>(mAuthority, activity.getContentResolver().acquireContentProviderClient(mAuthority)),
                                                    Id.PROJECTION,
                                                    new AllOf<>(
                                                            new EqArg<>(TaskContract.Instances.DISTANCE_FROM_CURRENT, 0),
                                                            new ReferringTo<>(TaskContract.Instances.TASK_ID, new RowUriReference<Tasks>(mTaskUri)))))))
                            .process(
                                    snapShot ->
                                            activity.startActivity(
                            new Intent(Intent.ACTION_VIEW, mTaskUri)
                                    .putExtra(ViewTaskActivity.EXTRA_COLOR, mListColor));
                                                    new Intent(
                                                            Intent.ACTION_VIEW,
                                                            ContentUris.withAppendedId(TaskContract.Instances.getContentUri(mAuthority),
                                                                    new Id(snapShot.values()).value()))
                                                            .putExtra(ViewTaskActivity.EXTRA_COLOR, mListColor)));
                }
            }
            else
+2 −2
Original line number Diff line number Diff line
@@ -71,9 +71,9 @@ public final class StaleListBroadcastReceiver extends BroadcastReceiver
                                        new QueryRowSet<>(
                                                new TaskListsView(authority, context.getContentResolver().acquireContentProviderClient(authority)),
                                                new MultiProjection<>(TaskContract.TaskLists.ACCOUNT_NAME, TaskContract.TaskLists.ACCOUNT_TYPE),
                                                new Not(new AnyOf(
                                                new Not<>(new AnyOf<>(
                                                        new Joined<>(new Seq<>(
                                                                new EqArg(TaskContract.TaskLists.ACCOUNT_TYPE, TaskContract.LOCAL_ACCOUNT_TYPE)),
                                                                new EqArg<>(TaskContract.TaskLists.ACCOUNT_TYPE, TaskContract.LOCAL_ACCOUNT_TYPE)),
                                                                new Mapped<>(AccountEq::new, new Seq<>(accountManager.getAccounts()))))))))))
        {
            context.startActivity(accountRequestIntent);
+1 −1
Original line number Diff line number Diff line
@@ -124,7 +124,7 @@ public final class ActionService extends JobIntentService
                            TaskTitle.PROJECTION,
                            TaskVersion.PROJECTION,
                            TaskIsClosed.PROJECTION),
                    new EqArg(TaskContract.Instances._ID, ContentUris.parseId(instanceUri))))
                    new EqArg<>(TaskContract.Instances._ID, ContentUris.parseId(instanceUri))))
            {
                resolveAction(intent.getAction()).execute(this, contentProviderClient, snapshot.values(), instanceUri);
            }
Loading