Add complete and snooze notification actions

pull/253/head
Alex Baker 9 years ago
parent 839a3e58c7
commit e6e7f76e81

@ -280,6 +280,10 @@
android:name="com.todoroo.astrid.calls.MissedCallActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<activity
android:name=".reminders.SnoozeActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<!-- tags -->
<receiver android:name="com.todoroo.astrid.tags.TagCustomFilterCriteriaExposer">
<intent-filter>

@ -379,6 +379,10 @@ public class AndroidUtilities {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
}
public static boolean atLeastJellybean() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
}
public static boolean atLeastLollipop() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
}

@ -31,6 +31,8 @@ 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);
@ -131,8 +133,16 @@ public class Notifications extends InjectingBroadcastReceiver {
String title = context.getString(R.string.app_name);
Intent notifyIntent = new Intent(context, TaskListActivity.class);
FilterWithCustomIntent itemFilter = new FilterWithCustomIntent(context.getString(R.string.rmd_NoA_filter),
Intent intent = atLeastJellybean()
? createEditIntent(id, task)
: createNotificationIntent(id, taskTitle);
broadcaster.requestNotification((int) id, intent, type, title, taskTitle, ringTimes);
return true;
}
public Intent 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)),
null);
@ -142,13 +152,20 @@ public class Notifications extends InjectingBroadcastReceiver {
itemFilter.customExtras = customExtras;
itemFilter.customTaskList = new ComponentName(context, NotificationFragment.class);
notifyIntent.setAction("NOTIFY" + id); //$NON-NLS-1$
notifyIntent.putExtra(TaskListFragment.TOKEN_FILTER, itemFilter);
notifyIntent.putExtra(NotificationFragment.TOKEN_ID, id);
notifyIntent.putExtra(EXTRAS_TEXT, taskTitle);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
return new Intent(context, TaskListActivity.class) {{
setAction("NOTIFY" + id); //$NON-NLS-1$
putExtra(TaskListFragment.TOKEN_FILTER, itemFilter);
putExtra(NotificationFragment.TOKEN_ID, id);
putExtra(EXTRAS_TEXT, taskTitle);
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
}};
}
broadcaster.requestNotification((int) id, notifyIntent, type, title, taskTitle, ringTimes);
return true;
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,6 +12,7 @@ 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;
@ -22,12 +23,15 @@ import org.tasks.R;
import org.tasks.injection.InjectingBroadcastReceiver;
import org.tasks.notifications.NotificationManager;
import org.tasks.preferences.Preferences;
import org.tasks.receivers.CompleteTaskReceiver;
import org.tasks.reminders.SnoozeActivity;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.inject.Inject;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybean;
import static org.tasks.date.DateTimeUtils.currentTimeMillis;
/**
@ -101,7 +105,7 @@ public class ShowNotificationReceiver extends InjectingBroadcastReceiver {
*
* @param ringTimes number of times to ring (-1 = nonstop)
*/
private void showNotification(Context context, int notificationId, Intent intent, int type, String title,
private void showNotification(Context context, int notificationId, final Intent intent, int type, String title,
String text, int ringTimes) {
// don't ring multiple times if random reminder
if (type == ReminderService.TYPE_RANDOM) {
@ -113,14 +117,30 @@ public class ShowNotificationReceiver extends InjectingBroadcastReceiver {
PendingIntent pendingIntent = PendingIntent.getActivity(context, notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(context)
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.notif_astrid)
.setTicker(text)
.setWhen(System.currentTimeMillis())
.setContentTitle(title)
.setContentText(text)
.setContentIntent(pendingIntent)
.build();
.setContentIntent(pendingIntent);
if (atLeastJellybean()) {
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);
PendingIntent snoozePendingIntent = PendingIntent.getActivity(context, notificationId, new Intent(context, SnoozeActivity.class) {{
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
putExtra(SnoozeActivity.TASK_ID, taskId);
}}, PendingIntent.FLAG_UPDATE_CURRENT);
builder.addAction(R.drawable.ic_action_tick, context.getResources().getString(R.string.rmd_NoA_done), completeIntent)
.addAction(R.drawable.ic_action_alarm, context.getResources().getString(R.string.rmd_NoA_snooze), snoozePendingIntent);
}
Notification notification = builder.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
if (preferences.getBoolean(R.string.p_rmd_persistent, true)) {
notification.flags |= Notification.FLAG_NO_CLEAR | Notification.FLAG_SHOW_LIGHTS;

@ -26,6 +26,7 @@ import com.todoroo.astrid.tags.DeleteTagActivity;
import com.todoroo.astrid.tags.RenameTagActivity;
import com.todoroo.astrid.widget.WidgetConfigActivity;
import org.tasks.reminders.SnoozeActivity;
import org.tasks.voice.VoiceCommandActivity;
import javax.inject.Singleton;
@ -58,7 +59,8 @@ import dagger.Provides;
BeastModePreferences.class,
DefaultsPreferences.class,
ReminderPreferences.class,
AACRecordingActivity.class
AACRecordingActivity.class,
SnoozeActivity.class
})
public class ActivityModule {

@ -0,0 +1,65 @@
package org.tasks.reminders;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.reminders.SnoozeCallback;
import com.todoroo.astrid.reminders.SnoozeDialog;
import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.TaskService;
import org.tasks.R;
import org.tasks.injection.InjectingActivity;
import org.tasks.notifications.NotificationManager;
import org.tasks.preferences.ActivityPreferences;
import javax.inject.Inject;
public class SnoozeActivity extends InjectingActivity {
public static final String TASK_ID = "id";
@Inject StartupService startupService;
@Inject ActivityPreferences preferences;
@Inject TaskService taskService;
@Inject NotificationManager notificationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
preferences.applyTranslucentDialogTheme();
startupService.onStartupApplication(this);
long taskId = getIntent().getLongExtra(TASK_ID, 0L);
snooze(taskId);
}
private void snooze(final long taskId) {
SnoozeCallback callback = new SnoozeCallback() {
@Override
public void snoozeForTime(long time) {
setResult(RESULT_OK);
Task task = new Task();
task.setId(taskId);
task.setReminderSnooze(time);
taskService.save(task);
notificationManager.cancel(taskId);
finish();
}
};
SnoozeDialog sd = new SnoozeDialog(this, callback);
new AlertDialog.Builder(this)
.setTitle(R.string.rmd_NoA_snooze)
.setView(sd)
.setPositiveButton(android.R.string.ok, sd)
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setResult(RESULT_CANCELED);
finish();
}
})
.show().setOwnerActivity(this);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Loading…
Cancel
Save