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;
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"),

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

@ -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

@ -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);
}
}

@ -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.<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.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);

@ -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);

@ -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);
}
}
}

@ -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);
}

Loading…
Cancel
Save