Setup back stack when launched from notification

pull/281/head
Alex Baker 11 years ago
parent 3b1c5e4453
commit 5183e72363

@ -5,6 +5,7 @@
*/ */
package com.todoroo.astrid.reminders; package com.todoroo.astrid.reminders;
import android.app.PendingIntent;
import android.content.Intent; import android.content.Intent;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
@ -72,7 +73,7 @@ public class NotificationTests extends DatabaseTestCase {
verify(broadcaster).requestNotification( verify(broadcaster).requestNotification(
eq(task.getId()), eq(task.getId()),
any(Intent.class), any(PendingIntent.class),
eq(ReminderService.TYPE_DUE), eq(ReminderService.TYPE_DUE),
eq("rubberduck"), eq("rubberduck"),
eq("Tasks"), eq("Tasks"),

@ -156,7 +156,12 @@
<!-- Activity that creates or edits tasks --> <!-- Activity that creates or edits tasks -->
<activity <activity
android:name="com.todoroo.astrid.activity.TaskEditActivity" android:name="com.todoroo.astrid.activity.TaskEditActivity"
android:parentActivityName="com.todoroo.astrid.activity.TaskListActivity"
android:windowSoftInputMode="stateHidden"> android:windowSoftInputMode="stateHidden">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.todoroo.astrid.activity.TaskListActivity" />
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />

@ -88,7 +88,7 @@ import java.util.concurrent.atomic.AtomicReference;
import javax.inject.Inject; 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 * Primary activity for the Bente application. Shows a list of upcoming tasks

@ -5,6 +5,7 @@
*/ */
package com.todoroo.astrid.reminders; package com.todoroo.astrid.reminders;
import android.app.PendingIntent;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -26,13 +27,12 @@ import org.tasks.Broadcaster;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.ForApplication; import org.tasks.injection.ForApplication;
import org.tasks.injection.InjectingBroadcastReceiver; import org.tasks.injection.InjectingBroadcastReceiver;
import org.tasks.intents.TaskIntents;
import org.tasks.notifications.NotificationManager; import org.tasks.notifications.NotificationManager;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import javax.inject.Inject; import javax.inject.Inject;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybean;
public class Notifications extends InjectingBroadcastReceiver { public class Notifications extends InjectingBroadcastReceiver {
private static final Logger log = LoggerFactory.getLogger(Notifications.class); 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); String text = context.getString(R.string.app_name);
Intent intent = preferences.useNotificationActions() PendingIntent intent = preferences.useNotificationActions()
? createEditIntent(id, task) ? TaskIntents.getEditTaskPendingIntent(context, null, task.getId())
: createNotificationIntent(id, taskTitle); : createNotificationIntent(id, taskTitle);
broadcaster.requestNotification((int) id, intent, type, taskTitle, text, ringTimes); broadcaster.requestNotification((int) id, intent, type, taskTitle, text, ringTimes);
return true; 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), final FilterWithCustomIntent itemFilter = new FilterWithCustomIntent(context.getString(R.string.rmd_NoA_filter),
context.getString(R.string.rmd_NoA_filter), context.getString(R.string.rmd_NoA_filter),
new QueryTemplate().where(TaskCriteria.byId(id)), new QueryTemplate().where(TaskCriteria.byId(id)),
@ -148,21 +148,13 @@ public class Notifications extends InjectingBroadcastReceiver {
customExtras.putString(EXTRAS_TITLE, taskTitle); customExtras.putString(EXTRAS_TITLE, taskTitle);
itemFilter.customExtras = customExtras; itemFilter.customExtras = customExtras;
itemFilter.customTaskList = new ComponentName(context, NotificationFragment.class); itemFilter.customTaskList = new ComponentName(context, NotificationFragment.class);
Intent intent = new Intent(context, TaskListActivity.class) {{
return new Intent(context, TaskListActivity.class) {{
setAction("NOTIFY" + id); //$NON-NLS-1$ setAction("NOTIFY" + id); //$NON-NLS-1$
putExtra(TaskListFragment.TOKEN_FILTER, itemFilter); putExtra(TaskListFragment.TOKEN_FILTER, itemFilter);
putExtra(NotificationFragment.TOKEN_ID, id); putExtra(NotificationFragment.TOKEN_ID, id);
putExtra(EXTRAS_TITLE, taskTitle); putExtra(EXTRAS_TITLE, taskTitle);
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
}}; }};
} return PendingIntent.getActivity(context, (int) id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
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);
}};
} }
} }

@ -12,7 +12,6 @@ import android.telephony.TelephonyManager;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.utility.Flags; import com.todoroo.astrid.utility.Flags;
import com.todoroo.astrid.voice.VoiceOutputAssistant; import com.todoroo.astrid.voice.VoiceOutputAssistant;
@ -57,7 +56,8 @@ public class ShowNotificationReceiver extends InjectingBroadcastReceiver {
showNotification( showNotification(
context, context,
intent.getIntExtra(Notifications.EXTRAS_NOTIF_ID, 0), intent.getIntExtra(Notifications.EXTRAS_NOTIF_ID, 0),
intent.<Intent>getParcelableExtra(Notifications.EXTRAS_CUSTOM_INTENT), intent.getLongExtra(NotificationFragment.TOKEN_ID, 0L),
intent.<PendingIntent>getParcelableExtra(Notifications.EXTRAS_CUSTOM_INTENT),
intent.getIntExtra(Notifications.EXTRAS_TYPE, 0), intent.getIntExtra(Notifications.EXTRAS_TYPE, 0),
intent.getStringExtra(Notifications.EXTRAS_TITLE), intent.getStringExtra(Notifications.EXTRAS_TITLE),
intent.getStringExtra(Notifications.EXTRAS_TEXT), intent.getStringExtra(Notifications.EXTRAS_TEXT),
@ -104,7 +104,7 @@ public class ShowNotificationReceiver extends InjectingBroadcastReceiver {
* *
* @param ringTimes number of times to ring (-1 = nonstop) * @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) { String text, int ringTimes) {
// don't ring multiple times if random reminder // don't ring multiple times if random reminder
if (type == ReminderService.TYPE_RANDOM) { if (type == ReminderService.TYPE_RANDOM) {
@ -114,8 +114,6 @@ public class ShowNotificationReceiver extends InjectingBroadcastReceiver {
// quiet hours? unless alarm clock // quiet hours? unless alarm clock
boolean quietHours = isQuietHours(preferences); boolean quietHours = isQuietHours(preferences);
PendingIntent pendingIntent = PendingIntent.getActivity(context, notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context) NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.notif_astrid) .setSmallIcon(R.drawable.notif_astrid)
.setTicker(title) .setTicker(title)
@ -124,7 +122,6 @@ public class ShowNotificationReceiver extends InjectingBroadcastReceiver {
.setContentText(text) .setContentText(text)
.setContentIntent(pendingIntent); .setContentIntent(pendingIntent);
if (preferences.useNotificationActions()) { if (preferences.useNotificationActions()) {
final long taskId = intent.getLongExtra(TaskListActivity.OPEN_TASK, 0L);
PendingIntent completeIntent = PendingIntent.getBroadcast(context, notificationId, new Intent(context, CompleteTaskReceiver.class) {{ PendingIntent completeIntent = PendingIntent.getBroadcast(context, notificationId, new Intent(context, CompleteTaskReceiver.class) {{
putExtra(CompleteTaskReceiver.TASK_ID, taskId); putExtra(CompleteTaskReceiver.TASK_ID, taskId);
}}, PendingIntent.FLAG_UPDATE_CURRENT); }}, PendingIntent.FLAG_UPDATE_CURRENT);

@ -1,5 +1,6 @@
package org.tasks; package org.tasks;
import android.app.PendingIntent;
import android.content.Context; import android.content.Context;
import android.content.Intent; 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) { final String title, final String text, final int ringTimes) {
sendOrderedBroadcast(new Intent(BROADCAST_IN_APP_NOTIFY) {{ sendOrderedBroadcast(new Intent(BROADCAST_IN_APP_NOTIFY) {{
putExtra(Notifications.EXTRAS_NOTIF_ID, (int) taskId); putExtra(Notifications.EXTRAS_NOTIF_ID, (int) taskId);

@ -1,8 +1,10 @@
package org.tasks.intents; package org.tasks.intents;
import android.app.PendingIntent;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.TaskStackBuilder;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.activity.TaskEditActivity; import com.todoroo.astrid.activity.TaskEditActivity;
@ -14,7 +16,7 @@ import com.todoroo.astrid.api.FilterWithCustomIntent;
import org.tasks.preferences.ActivityPreferences; import org.tasks.preferences.ActivityPreferences;
public class NewTaskIntent { public class TaskIntents {
public static Intent getNewTaskIntent(Context context, Filter filter) { public static Intent getNewTaskIntent(Context context, Filter filter) {
Intent intent; Intent intent;
@ -45,4 +47,25 @@ public class NewTaskIntent {
} }
return intent; 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);
}
}
} }

@ -27,7 +27,7 @@ import com.todoroo.astrid.widget.TasksWidget;
import com.todoroo.astrid.widget.WidgetConfigActivity; import com.todoroo.astrid.widget.WidgetConfigActivity;
import org.tasks.R; import org.tasks.R;
import org.tasks.intents.NewTaskIntent; import org.tasks.intents.TaskIntents;
import org.tasks.preferences.ActivityPreferences; import org.tasks.preferences.ActivityPreferences;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
@ -132,7 +132,7 @@ public class WidgetHelper {
} }
public PendingIntent getNewTaskIntent(Context context, Filter filter, int id) { public PendingIntent getNewTaskIntent(Context context, Filter filter, int id) {
Intent intent = NewTaskIntent.getNewTaskIntent(context, filter); Intent intent = TaskIntents.getNewTaskIntent(context, filter);
intent.setFlags(flags); intent.setFlags(flags);
return PendingIntent.getActivity(context, -id, intent, 0); return PendingIntent.getActivity(context, -id, intent, 0);
} }

Loading…
Cancel
Save