From 83dc575ba9105fd5c9fda9b5fe8ec9999dd46e6f Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 15 Mar 2019 12:05:02 -0500 Subject: [PATCH] Handle widget clicks in activity Previous broadcast solution violated Q background activity launch restrictions --- app/src/main/AndroidManifest.xml | 9 ++- .../tasks/injection/ActivityComponent.java | 3 + .../tasks/widget/ScrollableViewsFactory.java | 16 +++--- .../java/org/tasks/widget/TasksWidget.java | 49 +--------------- .../org/tasks/widget/WidgetClickActivity.java | 56 +++++++++++++++++++ app/src/main/res/values/styles.xml | 1 + 6 files changed, 76 insertions(+), 58 deletions(-) create mode 100644 app/src/main/java/org/tasks/widget/WidgetClickActivity.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d7654c883..9242719b7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -200,8 +200,6 @@ android:name=".widget.TasksWidget"> - - + + - TaskIntents.getEditTaskIntent( - context, - defaultFilterProvider.getFilterFromPreference( - intent.getStringExtra(EXTRA_FILTER_ID)), - taskDao.fetch(taskId))) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe((Consumer) context::startActivity); - break; - } - } - @Override protected void inject(BroadcastComponent component) { component.inject(this); @@ -157,8 +112,8 @@ public class TasksWidget extends InjectingAppWidgetProvider { } private PendingIntent getPendingIntentTemplate(Context context) { - Intent intent = new Intent(context, TasksWidget.class); - return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + return PendingIntent.getActivity( + context, 0, new Intent(context, WidgetClickActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); } private PendingIntent getOpenListIntent(Context context, Filter filter, int widgetId) { diff --git a/app/src/main/java/org/tasks/widget/WidgetClickActivity.java b/app/src/main/java/org/tasks/widget/WidgetClickActivity.java new file mode 100644 index 000000000..a2a136898 --- /dev/null +++ b/app/src/main/java/org/tasks/widget/WidgetClickActivity.java @@ -0,0 +1,56 @@ +package org.tasks.widget; + +import android.content.Intent; +import android.os.Bundle; +import com.google.common.base.Strings; +import com.todoroo.astrid.dao.TaskDao; +import com.todoroo.astrid.data.Task; +import javax.inject.Inject; +import org.tasks.injection.ActivityComponent; +import org.tasks.injection.InjectingAppCompatActivity; +import org.tasks.intents.TaskIntents; + +public class WidgetClickActivity extends InjectingAppCompatActivity { + + public static final String COMPLETE_TASK = "COMPLETE_TASK"; + public static final String EDIT_TASK = "EDIT_TASK"; + public static final String EXTRA_FILTER = "extra_filter"; + public static final String EXTRA_TASK = "extra_task"; // $NON-NLS-1$ + + @Inject TaskDao taskDao; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent intent = getIntent(); + + String action = intent.getAction(); + + if (Strings.isNullOrEmpty(action)) { + return; + } + + Task task = intent.getParcelableExtra(EXTRA_TASK); + + switch (action) { + case COMPLETE_TASK: + taskDao.setComplete(task, !task.isCompleted()); + break; + case EDIT_TASK: + startActivity( + TaskIntents.getEditTaskIntent( + this, + intent.getParcelableExtra(EXTRA_FILTER), + intent.getParcelableExtra(EXTRA_TASK))); + break; + } + + finish(); + } + + @Override + public void inject(ActivityComponent component) { + component.inject(this); + } +} diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5e4d20735..77d1ac6fd 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -15,6 +15,7 @@ @android:color/transparent @null true + false