Allow task completion marking from the task list

This commit is contained in:
Jonas Lochmann 2020-11-30 01:00:00 +01:00
parent 020e4e2be0
commit a778a5cb74
No known key found for this signature in database
GPG key ID: 8B8C9AEE10FA5B36
7 changed files with 25 additions and 5 deletions

View file

@ -52,7 +52,7 @@ class LockTaskFragment: Fragment() {
if (task.pendingRequest) if (task.pendingRequest)
TaskReviewPendingDialogFragment.newInstance().show(parentFragmentManager) TaskReviewPendingDialogFragment.newInstance().show(parentFragmentManager)
else else
ConfirmTaskDialogFragment.newInstance(taskId = task.taskId, taskTitle = task.taskTitle).show(parentFragmentManager) ConfirmTaskDialogFragment.newInstance(taskId = task.taskId, taskTitle = task.taskTitle, fromManageScreen = false).show(parentFragmentManager)
} }
} }
} }

View file

@ -83,6 +83,7 @@ class ChildTaskAdapter: RecyclerView.Adapter<ChildTaskAdapter.Holder>() {
binding.lastGrant = item.taskItem.lastGrantTimestamp.let { time -> binding.lastGrant = item.taskItem.lastGrantTimestamp.let { time ->
if (time == 0L) null else DateUtil.formatAbsoluteDate(context, time) if (time == 0L) null else DateUtil.formatAbsoluteDate(context, time)
} }
binding.pendingReview = item.taskItem.pendingRequest
binding.executePendingBindings() binding.executePendingBindings()

View file

@ -43,6 +43,10 @@ class ChildTaskModel (application: Application): AndroidViewModel(application) {
} }
} }
val isChildTheCurrentDeviceUser = logic.deviceUserId.switchMap { deviceUserId ->
childIdLive.map { selectedId -> deviceUserId == selectedId }
}
fun init(childId: String) { fun init(childId: String) {
if (didInit) return if (didInit) return

View file

@ -32,11 +32,13 @@ class ConfirmTaskDialogFragment: DialogFragment() {
private const val DIALOG_TAG = "ConfirmTaskDialogFragment" private const val DIALOG_TAG = "ConfirmTaskDialogFragment"
private const val TASK_TITLE = "taskTitle" private const val TASK_TITLE = "taskTitle"
private const val TASK_ID = "taskId" private const val TASK_ID = "taskId"
private const val FROM_MANAGE_SCREEN = "fromManageScreen"
fun newInstance(taskId: String, taskTitle: String) = ConfirmTaskDialogFragment().apply { fun newInstance(taskId: String, taskTitle: String, fromManageScreen: Boolean) = ConfirmTaskDialogFragment().apply {
arguments = Bundle().apply { arguments = Bundle().apply {
putString(TASK_ID, taskId) putString(TASK_ID, taskId)
putString(TASK_TITLE, taskTitle) putString(TASK_TITLE, taskTitle)
putBoolean(FROM_MANAGE_SCREEN, fromManageScreen)
} }
} }
} }
@ -44,11 +46,15 @@ class ConfirmTaskDialogFragment: DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val taskId = requireArguments().getString(TASK_ID)!! val taskId = requireArguments().getString(TASK_ID)!!
val taskTitle = requireArguments().getString(TASK_TITLE)!! val taskTitle = requireArguments().getString(TASK_TITLE)!!
val fromManageScreen = requireArguments().getBoolean(FROM_MANAGE_SCREEN)
val logic = getActivityViewModel(requireActivity()).logic val logic = getActivityViewModel(requireActivity()).logic
val messagePrefix = if (fromManageScreen) getString(R.string.lock_task_confirm_dialog_from_manage_screen) + " " else ""
val message = messagePrefix + getString(R.string.lock_task_confirm_dialog)
return AlertDialog.Builder(requireContext(), theme) return AlertDialog.Builder(requireContext(), theme)
.setTitle(taskTitle) .setTitle(taskTitle)
.setMessage(R.string.lock_task_confirm_dialog) .setMessage(message)
.setNegativeButton(R.string.generic_no, null) .setNegativeButton(R.string.generic_no, null)
.setPositiveButton(R.string.generic_yes) { _, _ -> .setPositiveButton(R.string.generic_yes) { _, _ ->
runAsync { runAsync {

View file

@ -66,6 +66,7 @@ class ManageChildTasksFragment: Fragment(), EditTaskDialogFragment.Listener {
recycler.adapter = adapter recycler.adapter = adapter
model.listContent.observe(viewLifecycleOwner) { adapter.data = it } model.listContent.observe(viewLifecycleOwner) { adapter.data = it }
model.isChildTheCurrentDeviceUser.observe(viewLifecycleOwner) {/* keep the value fresh */}
adapter.listener = object: ChildTaskAdapter.Listener { adapter.listener = object: ChildTaskAdapter.Listener {
override fun onAddClicked() { override fun onAddClicked() {
@ -75,9 +76,15 @@ class ManageChildTasksFragment: Fragment(), EditTaskDialogFragment.Listener {
} }
override fun onTaskClicked(task: ChildTask) { override fun onTaskClicked(task: ChildTask) {
if (auth.requestAuthenticationOrReturnTrue()) { if (auth.isParentAuthenticated()) {
EditTaskDialogFragment.newInstance(childId = childId, taskId = task.taskId, listener = this@ManageChildTasksFragment).show(parentFragmentManager) EditTaskDialogFragment.newInstance(childId = childId, taskId = task.taskId, listener = this@ManageChildTasksFragment).show(parentFragmentManager)
} } else if (model.isChildTheCurrentDeviceUser.value == true && !task.pendingRequest) {
ConfirmTaskDialogFragment.newInstance(
taskId = task.taskId,
taskTitle = task.taskTitle,
fromManageScreen = true
).show(parentFragmentManager)
} else auth.requestAuthentication()
} }
} }

View file

@ -628,6 +628,7 @@
</string> </string>
<string name="lock_task_confirm_dialog">Hast Du diese Aufgabe erledigt? Die Zeit gibt es <string name="lock_task_confirm_dialog">Hast Du diese Aufgabe erledigt? Die Zeit gibt es
sowieso erst, wenn ein Elternteil das bestätigt hat.</string> sowieso erst, wenn ein Elternteil das bestätigt hat.</string>
<string name="lock_task_confirm_dialog_from_manage_screen">Zum Verändern der Aufgabe muss sich erst ein Elternteil anmelden.</string>
<string name="lock_task_review_pending_dialog">Die Erledigung der Aufgabe wurde markiert. <string name="lock_task_review_pending_dialog">Die Erledigung der Aufgabe wurde markiert.
Jetzt muss nur noch ein Elternteil das auf der Startseite von TimeLimit besätigen. Jetzt muss nur noch ein Elternteil das auf der Startseite von TimeLimit besätigen.
</string> </string>

View file

@ -684,6 +684,7 @@
</string> </string>
<string name="lock_task_confirm_dialog">Have you finished this task? The time <string name="lock_task_confirm_dialog">Have you finished this task? The time
will only be granted if a parent confirms it.</string> will only be granted if a parent confirms it.</string>
<string name="lock_task_confirm_dialog_from_manage_screen">A parent must sign in first to modify the task.</string>
<string name="lock_task_review_pending_dialog">It is noted that this task is finished. <string name="lock_task_review_pending_dialog">It is noted that this task is finished.
The only missing part is a parent which confirms this at the start screen of TimeLimit. The only missing part is a parent which confirms this at the start screen of TimeLimit.
</string> </string>