diff --git a/src/androidTest/java/com/todoroo/astrid/reminders/NotificationTests.java b/src/androidTest/java/com/todoroo/astrid/reminders/NotificationTests.java index 707b44ead..0b4e63782 100644 --- a/src/androidTest/java/com/todoroo/astrid/reminders/NotificationTests.java +++ b/src/androidTest/java/com/todoroo/astrid/reminders/NotificationTests.java @@ -5,6 +5,7 @@ */ package com.todoroo.astrid.reminders; +import android.app.PendingIntent; import android.content.Intent; import com.todoroo.andlib.utility.DateUtilities; @@ -72,7 +73,7 @@ public class NotificationTests extends DatabaseTestCase { verify(broadcaster).requestNotification( eq(task.getId()), - any(Intent.class), + any(PendingIntent.class), eq(ReminderService.TYPE_DUE), eq("rubberduck"), eq("Tasks"), diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 172c6d32d..ab9d93136 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -156,7 +156,12 @@ + + diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java index 289ff534b..692fffa50 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java @@ -88,7 +88,7 @@ import java.util.concurrent.atomic.AtomicReference; import javax.inject.Inject; -import static org.tasks.intents.NewTaskIntent.getNewTaskIntent; +import static org.tasks.intents.TaskIntents.getNewTaskIntent; /** * Primary activity for the Bente application. Shows a list of upcoming tasks diff --git a/src/main/java/com/todoroo/astrid/reminders/Notifications.java b/src/main/java/com/todoroo/astrid/reminders/Notifications.java index 2ea8aa7f1..1dff12408 100644 --- a/src/main/java/com/todoroo/astrid/reminders/Notifications.java +++ b/src/main/java/com/todoroo/astrid/reminders/Notifications.java @@ -5,6 +5,7 @@ */ package com.todoroo.astrid.reminders; +import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -26,13 +27,12 @@ import org.tasks.Broadcaster; import org.tasks.R; import org.tasks.injection.ForApplication; import org.tasks.injection.InjectingBroadcastReceiver; +import org.tasks.intents.TaskIntents; import org.tasks.notifications.NotificationManager; import org.tasks.preferences.Preferences; import javax.inject.Inject; -import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybean; - public class Notifications extends InjectingBroadcastReceiver { private static final Logger log = LoggerFactory.getLogger(Notifications.class); @@ -130,15 +130,15 @@ public class Notifications extends InjectingBroadcastReceiver { String text = context.getString(R.string.app_name); - Intent intent = preferences.useNotificationActions() - ? createEditIntent(id, task) + PendingIntent intent = preferences.useNotificationActions() + ? TaskIntents.getEditTaskPendingIntent(context, null, task.getId()) : createNotificationIntent(id, taskTitle); broadcaster.requestNotification((int) id, intent, type, taskTitle, text, ringTimes); return true; } - public Intent createNotificationIntent(final long id, final String taskTitle) { + private PendingIntent createNotificationIntent(final long id, final String taskTitle) { final FilterWithCustomIntent itemFilter = new FilterWithCustomIntent(context.getString(R.string.rmd_NoA_filter), context.getString(R.string.rmd_NoA_filter), new QueryTemplate().where(TaskCriteria.byId(id)), @@ -148,21 +148,13 @@ public class Notifications extends InjectingBroadcastReceiver { customExtras.putString(EXTRAS_TITLE, taskTitle); itemFilter.customExtras = customExtras; itemFilter.customTaskList = new ComponentName(context, NotificationFragment.class); - - return new Intent(context, TaskListActivity.class) {{ + Intent intent = new Intent(context, TaskListActivity.class) {{ setAction("NOTIFY" + id); //$NON-NLS-1$ putExtra(TaskListFragment.TOKEN_FILTER, itemFilter); putExtra(NotificationFragment.TOKEN_ID, id); putExtra(EXTRAS_TITLE, taskTitle); setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); }}; - } - - public Intent createEditIntent(final long id, final Task task) { - return new Intent(context, TaskListActivity.class) {{ - setAction("NOTIFY" + id); - putExtra(TaskListActivity.OPEN_TASK, task.getId()); - setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); - }}; + return PendingIntent.getActivity(context, (int) id, intent, PendingIntent.FLAG_UPDATE_CURRENT); } } diff --git a/src/main/java/com/todoroo/astrid/reminders/ShowNotificationReceiver.java b/src/main/java/com/todoroo/astrid/reminders/ShowNotificationReceiver.java index aaddb0fef..50a242d16 100644 --- a/src/main/java/com/todoroo/astrid/reminders/ShowNotificationReceiver.java +++ b/src/main/java/com/todoroo/astrid/reminders/ShowNotificationReceiver.java @@ -12,7 +12,6 @@ import android.telephony.TelephonyManager; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.utility.Flags; import com.todoroo.astrid.voice.VoiceOutputAssistant; @@ -57,7 +56,8 @@ public class ShowNotificationReceiver extends InjectingBroadcastReceiver { showNotification( context, intent.getIntExtra(Notifications.EXTRAS_NOTIF_ID, 0), - intent.getParcelableExtra(Notifications.EXTRAS_CUSTOM_INTENT), + intent.getLongExtra(NotificationFragment.TOKEN_ID, 0L), + intent.getParcelableExtra(Notifications.EXTRAS_CUSTOM_INTENT), intent.getIntExtra(Notifications.EXTRAS_TYPE, 0), intent.getStringExtra(Notifications.EXTRAS_TITLE), intent.getStringExtra(Notifications.EXTRAS_TEXT), @@ -104,7 +104,7 @@ public class ShowNotificationReceiver extends InjectingBroadcastReceiver { * * @param ringTimes number of times to ring (-1 = nonstop) */ - private void showNotification(Context context, int notificationId, final Intent intent, int type, String title, + private void showNotification(Context context, int notificationId, final long taskId, final PendingIntent pendingIntent, int type, String title, String text, int ringTimes) { // don't ring multiple times if random reminder if (type == ReminderService.TYPE_RANDOM) { @@ -114,8 +114,6 @@ public class ShowNotificationReceiver extends InjectingBroadcastReceiver { // quiet hours? unless alarm clock boolean quietHours = isQuietHours(preferences); - PendingIntent pendingIntent = PendingIntent.getActivity(context, notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT); - NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.notif_astrid) .setTicker(title) @@ -124,7 +122,6 @@ public class ShowNotificationReceiver extends InjectingBroadcastReceiver { .setContentText(text) .setContentIntent(pendingIntent); if (preferences.useNotificationActions()) { - final long taskId = intent.getLongExtra(TaskListActivity.OPEN_TASK, 0L); PendingIntent completeIntent = PendingIntent.getBroadcast(context, notificationId, new Intent(context, CompleteTaskReceiver.class) {{ putExtra(CompleteTaskReceiver.TASK_ID, taskId); }}, PendingIntent.FLAG_UPDATE_CURRENT); diff --git a/src/main/java/org/tasks/Broadcaster.java b/src/main/java/org/tasks/Broadcaster.java index 39deecdf0..d990d3288 100644 --- a/src/main/java/org/tasks/Broadcaster.java +++ b/src/main/java/org/tasks/Broadcaster.java @@ -1,5 +1,6 @@ package org.tasks; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; @@ -43,7 +44,7 @@ public class Broadcaster { }}); } - public void requestNotification(final long taskId, final Intent intent, final int type, + public void requestNotification(final long taskId, final PendingIntent intent, final int type, final String title, final String text, final int ringTimes) { sendOrderedBroadcast(new Intent(BROADCAST_IN_APP_NOTIFY) {{ putExtra(Notifications.EXTRAS_NOTIF_ID, (int) taskId); diff --git a/src/main/java/org/tasks/intents/NewTaskIntent.java b/src/main/java/org/tasks/intents/TaskIntents.java similarity index 58% rename from src/main/java/org/tasks/intents/NewTaskIntent.java rename to src/main/java/org/tasks/intents/TaskIntents.java index 25eb54e29..24aa2c6c1 100644 --- a/src/main/java/org/tasks/intents/NewTaskIntent.java +++ b/src/main/java/org/tasks/intents/TaskIntents.java @@ -1,8 +1,10 @@ package org.tasks.intents; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.support.v4.app.TaskStackBuilder; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.astrid.activity.TaskEditActivity; @@ -14,7 +16,7 @@ import com.todoroo.astrid.api.FilterWithCustomIntent; import org.tasks.preferences.ActivityPreferences; -public class NewTaskIntent { +public class TaskIntents { public static Intent getNewTaskIntent(Context context, Filter filter) { Intent intent; @@ -45,4 +47,25 @@ public class NewTaskIntent { } return intent; } + + public static PendingIntent getEditTaskPendingIntent(Context context, final Filter filter, final long taskId) { + boolean tablet = ActivityPreferences.isTabletSized(context); + if (tablet) { + Intent intent = new Intent(context, TaskListActivity.class) {{ + putExtra(TaskListActivity.OPEN_TASK, taskId); + if (filter != null && filter instanceof FilterWithCustomIntent) { + Bundle customExtras = ((FilterWithCustomIntent) filter).customExtras; + putExtras(customExtras); + } + }}; + return PendingIntent.getActivity(context, (int) taskId, intent, PendingIntent.FLAG_UPDATE_CURRENT); + } else { + TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(context); + taskStackBuilder.addParentStack(TaskEditActivity.class); + taskStackBuilder.addNextIntent(new Intent(context, TaskEditActivity.class) {{ + putExtra(TaskEditFragment.TOKEN_ID, taskId); + }}); + return taskStackBuilder.getPendingIntent((int) taskId, PendingIntent.FLAG_UPDATE_CURRENT); + } + } } diff --git a/src/main/java/org/tasks/widget/WidgetHelper.java b/src/main/java/org/tasks/widget/WidgetHelper.java index 6ccb66e0e..d62d874ca 100644 --- a/src/main/java/org/tasks/widget/WidgetHelper.java +++ b/src/main/java/org/tasks/widget/WidgetHelper.java @@ -27,7 +27,7 @@ import com.todoroo.astrid.widget.TasksWidget; import com.todoroo.astrid.widget.WidgetConfigActivity; import org.tasks.R; -import org.tasks.intents.NewTaskIntent; +import org.tasks.intents.TaskIntents; import org.tasks.preferences.ActivityPreferences; import org.tasks.preferences.Preferences; @@ -132,7 +132,7 @@ public class WidgetHelper { } public PendingIntent getNewTaskIntent(Context context, Filter filter, int id) { - Intent intent = NewTaskIntent.getNewTaskIntent(context, filter); + Intent intent = TaskIntents.getNewTaskIntent(context, filter); intent.setFlags(flags); return PendingIntent.getActivity(context, -id, intent, 0); }