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() { override fun onResume() {
super.onResume() super.onResume()
localBroadcastManager.registerRefreshReceiver(refreshReceiver) localBroadcastManager.registerRefreshReceiver(refreshReceiver)
localBroadcastManager.registerRepeatReceiver(repeatConfirmationReceiver) localBroadcastManager.registerTaskCompletedReceiver(repeatConfirmationReceiver)
refresh() refresh()
} }
@ -479,7 +479,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
} }
private fun makeSnackbar(text: String): Snackbar? = activity?.let { private fun makeSnackbar(text: String): Snackbar? = activity?.let {
Snackbar.make(coordinatorLayout, text, 8000) Snackbar.make(coordinatorLayout, text, 4000)
.setAnchorView(R.id.fab) .setAnchorView(R.id.fab)
.setTextColor(it.getColor(R.color.snackbar_text_color)) .setTextColor(it.getColor(R.color.snackbar_text_color))
.setActionTextColor(it.getColor(R.color.snackbar_action_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) { override fun onReceive(context: Context, intent: Intent) {
val taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, 0) val taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, 0)
if (taskId > 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 { lifecycleScope.launch {
val task = taskDao.fetch(taskId) ?: return@launch val task = taskDao.fetch(taskId) ?: return@launch
try { 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) 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) { ?.setAction(R.string.DLG_undo) {
lifecycleScope.launch(NonCancellable) { lifecycleScope.launch(NonCancellable) {
repeatTaskHelper.undoRepeat(task, oldDueDate, newDueDate) repeatTaskHelper.undoRepeat(task, oldDueDate, newDueDate)
} }
} }
?.show() ?.show()
} else {
makeSnackbar(R.string.snackbar_task_completed)
?.setAction(R.string.DLG_undo) {
lifecycleScope.launch(NonCancellable) {
taskCompleter.setComplete(task, false)
}
}
?.show()
}
} catch (e: Exception) { } catch (e: Exception) {
firebase.reportException(e) firebase.reportException(e)
} }

@ -147,6 +147,9 @@ class TaskDao @Inject constructor(
localBroadcastManager.broadcastRefresh() localBroadcastManager.broadcastRefresh()
} }
syncAdapters.sync(task, original) 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 repeatAfterCompletion = task.repeatAfterCompletion()
val newDueDate: Long val newDueDate: Long
val rrule: Recur val rrule: Recur
val count: Int
try { try {
rrule = initRRule(recurrence) rrule = initRRule(recurrence)
count = rrule.count
if (count == 1) {
localBroadcastManager.broadcastTaskCompleted(task.id, 0, 0)
return
}
newDueDate = computeNextDueDate(task, recurrence, repeatAfterCompletion) newDueDate = computeNextDueDate(task, recurrence, repeatAfterCompletion)
if (newDueDate == -1L) { if (newDueDate == -1L) {
return return
@ -52,10 +58,7 @@ class RepeatTaskHelper @Inject constructor(
val oldDueDate = task.dueDate val oldDueDate = task.dueDate
val repeatUntil = task.repeatUntil val repeatUntil = task.repeatUntil
if (repeatFinished(newDueDate, repeatUntil)) { if (repeatFinished(newDueDate, repeatUntil)) {
return localBroadcastManager.broadcastTaskCompleted(task.id, 0, 0)
}
val count = rrule.count
if (count == 1) {
return return
} }
if (count > 1) { if (count > 1) {
@ -74,7 +77,7 @@ class RepeatTaskHelper @Inject constructor(
?: newDueDate - (computeNextDueDate(task, recurrence, repeatAfterCompletion) - newDueDate) ?: newDueDate - (computeNextDueDate(task, recurrence, repeatAfterCompletion) - newDueDate)
alarmService.rescheduleAlarms(task.id, previousDueDate, newDueDate) alarmService.rescheduleAlarms(task.id, previousDueDate, newDueDate)
taskCompleter.setComplete(task, false) 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) { 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 = BuildConfig.APPLICATION_ID + ".REFRESH";
public static final String REFRESH_LIST = BuildConfig.APPLICATION_ID + ".REFRESH_LIST"; 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_PURCHASES = BuildConfig.APPLICATION_ID + ".REFRESH_PURCHASES";
private static final String REFRESH_PREFERENCES = BuildConfig.APPLICATION_ID + ".REFRESH_PREFERENCES"; private static final String REFRESH_PREFERENCES = BuildConfig.APPLICATION_ID + ".REFRESH_PREFERENCES";
@ -38,8 +38,8 @@ public class LocalBroadcastManager {
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter); localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter);
} }
public void registerRepeatReceiver(BroadcastReceiver broadcastReceiver) { public void registerTaskCompletedReceiver(BroadcastReceiver broadcastReceiver) {
localBroadcastManager.registerReceiver(broadcastReceiver, new IntentFilter(REPEAT)); localBroadcastManager.registerReceiver(broadcastReceiver, new IntentFilter(TASK_COMPLETED));
} }
public void registerPurchaseReceiver(BroadcastReceiver broadcastReceiver) { public void registerPurchaseReceiver(BroadcastReceiver broadcastReceiver) {
@ -63,14 +63,8 @@ public class LocalBroadcastManager {
localBroadcastManager.sendBroadcast(new Intent(REFRESH_PREFERENCES)); localBroadcastManager.sendBroadcast(new Intent(REFRESH_PREFERENCES));
} }
/** public void broadcastTaskCompleted(long id, long oldDueDate, long newDueDate) {
* Action name for broadcast intent notifying that task was created from repeating template Intent intent = new Intent(TASK_COMPLETED);
* <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);
intent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, id); intent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, id);
intent.putExtra(AstridApiConstants.EXTRAS_OLD_DUE_DATE, oldDueDate); intent.putExtra(AstridApiConstants.EXTRAS_OLD_DUE_DATE, oldDueDate);
intent.putExtra(AstridApiConstants.EXTRAS_NEW_DUE_DATE, newDueDate); 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="top">Top</string>
<string name="bottom">Bottom</string> <string name="bottom">Bottom</string>
<string name="completed">Completed</string> <string name="completed">Completed</string>
<string name="snackbar_task_completed">Task completed</string>
</resources> </resources>

Loading…
Cancel
Save