Add 'Task completed' snackbar

pull/1758/head
Alex Baker 2 years ago
parent 985cdc47ce
commit 33c1dcee69

@ -470,7 +470,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
override fun onResume() {
super.onResume()
localBroadcastManager.registerRefreshReceiver(refreshReceiver)
localBroadcastManager.registerRepeatReceiver(repeatConfirmationReceiver)
localBroadcastManager.registerTaskCompletedReceiver(repeatConfirmationReceiver)
refresh()
}
@ -479,7 +479,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
}
private fun makeSnackbar(text: String): Snackbar? = activity?.let {
Snackbar.make(coordinatorLayout, text, 8000)
Snackbar.make(coordinatorLayout, text, 4000)
.setAnchorView(R.id.fab)
.setTextColor(it.getColor(R.color.snackbar_text_color))
.setActionTextColor(it.getColor(R.color.snackbar_action_color))
@ -861,20 +861,30 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
override fun onReceive(context: Context, intent: Intent) {
val taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, 0)
if (taskId > 0) {
val oldDueDate = intent.getLongExtra(AstridApiConstants.EXTRAS_OLD_DUE_DATE, 0)
val newDueDate = intent.getLongExtra(AstridApiConstants.EXTRAS_NEW_DUE_DATE, 0)
lifecycleScope.launch {
val task = taskDao.fetch(taskId) ?: return@launch
try {
val dueDateString = DateUtilities.getRelativeDateTime(
if (task.isRecurring && !task.isCompleted) {
val oldDueDate = intent.getLongExtra(AstridApiConstants.EXTRAS_OLD_DUE_DATE, 0)
val newDueDate = intent.getLongExtra(AstridApiConstants.EXTRAS_NEW_DUE_DATE, 0)
val dueDateString = DateUtilities.getRelativeDateTime(
context, newDueDate, locale.locale, FormatStyle.LONG, true)
makeSnackbar(R.string.repeat_snackbar, task.title, dueDateString)
makeSnackbar(R.string.repeat_snackbar, task.title, dueDateString)
?.setAction(R.string.DLG_undo) {
lifecycleScope.launch(NonCancellable) {
repeatTaskHelper.undoRepeat(task, oldDueDate, newDueDate)
}
}
?.show()
} else {
makeSnackbar(R.string.snackbar_task_completed)
?.setAction(R.string.DLG_undo) {
lifecycleScope.launch(NonCancellable) {
taskCompleter.setComplete(task, false)
}
}
?.show()
}
} catch (e: Exception) {
firebase.reportException(e)
}

@ -147,6 +147,9 @@ class TaskDao @Inject constructor(
localBroadcastManager.broadcastRefresh()
}
syncAdapters.sync(task, original)
if (justCompleted && !task.isRecurring) {
localBroadcastManager.broadcastTaskCompleted(task.id, 0L, 0L)
}
}
}
}

@ -39,8 +39,14 @@ class RepeatTaskHelper @Inject constructor(
val repeatAfterCompletion = task.repeatAfterCompletion()
val newDueDate: Long
val rrule: Recur
val count: Int
try {
rrule = initRRule(recurrence)
count = rrule.count
if (count == 1) {
localBroadcastManager.broadcastTaskCompleted(task.id, 0, 0)
return
}
newDueDate = computeNextDueDate(task, recurrence, repeatAfterCompletion)
if (newDueDate == -1L) {
return
@ -52,10 +58,7 @@ class RepeatTaskHelper @Inject constructor(
val oldDueDate = task.dueDate
val repeatUntil = task.repeatUntil
if (repeatFinished(newDueDate, repeatUntil)) {
return
}
val count = rrule.count
if (count == 1) {
localBroadcastManager.broadcastTaskCompleted(task.id, 0, 0)
return
}
if (count > 1) {
@ -74,7 +77,7 @@ class RepeatTaskHelper @Inject constructor(
?: newDueDate - (computeNextDueDate(task, recurrence, repeatAfterCompletion) - newDueDate)
alarmService.rescheduleAlarms(task.id, previousDueDate, newDueDate)
taskCompleter.setComplete(task, false)
localBroadcastManager.broadcastRepeat(task.id, previousDueDate, newDueDate)
localBroadcastManager.broadcastTaskCompleted(task.id, previousDueDate, newDueDate)
}
suspend fun undoRepeat(task: Task, oldDueDate: Long, newDueDate: Long) {

@ -13,7 +13,7 @@ public class LocalBroadcastManager {
public static final String REFRESH = BuildConfig.APPLICATION_ID + ".REFRESH";
public static final String REFRESH_LIST = BuildConfig.APPLICATION_ID + ".REFRESH_LIST";
private static final String REPEAT = BuildConfig.APPLICATION_ID + ".REPEAT";
private static final String TASK_COMPLETED = BuildConfig.APPLICATION_ID + ".REPEAT";
private static final String REFRESH_PURCHASES = BuildConfig.APPLICATION_ID + ".REFRESH_PURCHASES";
private static final String REFRESH_PREFERENCES = BuildConfig.APPLICATION_ID + ".REFRESH_PREFERENCES";
@ -38,8 +38,8 @@ public class LocalBroadcastManager {
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter);
}
public void registerRepeatReceiver(BroadcastReceiver broadcastReceiver) {
localBroadcastManager.registerReceiver(broadcastReceiver, new IntentFilter(REPEAT));
public void registerTaskCompletedReceiver(BroadcastReceiver broadcastReceiver) {
localBroadcastManager.registerReceiver(broadcastReceiver, new IntentFilter(TASK_COMPLETED));
}
public void registerPurchaseReceiver(BroadcastReceiver broadcastReceiver) {
@ -63,14 +63,8 @@ public class LocalBroadcastManager {
localBroadcastManager.sendBroadcast(new Intent(REFRESH_PREFERENCES));
}
/**
* Action name for broadcast intent notifying that task was created from repeating template
* <li>EXTRAS_TASK_ID id of the task
* <li>EXTRAS_OLD_DUE_DATE task old due date (could be 0)
* <li>EXTRAS_NEW_DUE_DATE task new due date (will not be 0)
*/
public void broadcastRepeat(long id, long oldDueDate, long newDueDate) {
Intent intent = new Intent(REPEAT);
public void broadcastTaskCompleted(long id, long oldDueDate, long newDueDate) {
Intent intent = new Intent(TASK_COMPLETED);
intent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, id);
intent.putExtra(AstridApiConstants.EXTRAS_OLD_DUE_DATE, oldDueDate);
intent.putExtra(AstridApiConstants.EXTRAS_NEW_DUE_DATE, newDueDate);

@ -712,4 +712,5 @@ File %1$s contained %2$s.\n\n
<string name="top">Top</string>
<string name="bottom">Bottom</string>
<string name="completed">Completed</string>
<string name="snackbar_task_completed">Task completed</string>
</resources>

Loading…
Cancel
Save