|
|
@ -7,12 +7,14 @@ package com.todoroo.astrid.timers
|
|
|
|
|
|
|
|
|
|
|
|
import android.app.Activity
|
|
|
|
import android.app.Activity
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.os.Bundle
|
|
|
|
|
|
|
|
import android.text.format.DateUtils
|
|
|
|
import android.view.View
|
|
|
|
import android.view.View
|
|
|
|
import android.view.ViewGroup
|
|
|
|
import android.view.ViewGroup
|
|
|
|
import androidx.appcompat.app.AlertDialog
|
|
|
|
import androidx.appcompat.app.AlertDialog
|
|
|
|
import androidx.compose.ui.platform.ComposeView
|
|
|
|
import androidx.compose.ui.platform.ComposeView
|
|
|
|
import androidx.lifecycle.lifecycleScope
|
|
|
|
import androidx.lifecycle.lifecycleScope
|
|
|
|
import com.google.android.material.composethemeadapter.MdcTheme
|
|
|
|
import com.google.android.material.composethemeadapter.MdcTheme
|
|
|
|
|
|
|
|
import com.todoroo.andlib.utility.DateUtilities
|
|
|
|
import com.todoroo.astrid.data.Task
|
|
|
|
import com.todoroo.astrid.data.Task
|
|
|
|
import com.todoroo.astrid.ui.TimeDurationControlSet
|
|
|
|
import com.todoroo.astrid.ui.TimeDurationControlSet
|
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
@ -20,6 +22,7 @@ import kotlinx.coroutines.launch
|
|
|
|
import org.tasks.R
|
|
|
|
import org.tasks.R
|
|
|
|
import org.tasks.compose.collectAsStateLifecycleAware
|
|
|
|
import org.tasks.compose.collectAsStateLifecycleAware
|
|
|
|
import org.tasks.compose.edit.TimerRow
|
|
|
|
import org.tasks.compose.edit.TimerRow
|
|
|
|
|
|
|
|
import org.tasks.date.DateTimeUtils
|
|
|
|
import org.tasks.dialogs.DialogBuilder
|
|
|
|
import org.tasks.dialogs.DialogBuilder
|
|
|
|
import org.tasks.themes.Theme
|
|
|
|
import org.tasks.themes.Theme
|
|
|
|
import org.tasks.ui.TaskEditControlFragment
|
|
|
|
import org.tasks.ui.TaskEditControlFragment
|
|
|
@ -35,12 +38,12 @@ class TimerControlSet : TaskEditControlFragment() {
|
|
|
|
@Inject lateinit var activity: Activity
|
|
|
|
@Inject lateinit var activity: Activity
|
|
|
|
@Inject lateinit var dialogBuilder: DialogBuilder
|
|
|
|
@Inject lateinit var dialogBuilder: DialogBuilder
|
|
|
|
@Inject lateinit var theme: Theme
|
|
|
|
@Inject lateinit var theme: Theme
|
|
|
|
|
|
|
|
@Inject lateinit var timerPlugin: TimerPlugin
|
|
|
|
|
|
|
|
|
|
|
|
private lateinit var estimated: TimeDurationControlSet
|
|
|
|
private lateinit var estimated: TimeDurationControlSet
|
|
|
|
private lateinit var elapsed: TimeDurationControlSet
|
|
|
|
private lateinit var elapsed: TimeDurationControlSet
|
|
|
|
private var dialog: AlertDialog? = null
|
|
|
|
private var dialog: AlertDialog? = null
|
|
|
|
private lateinit var dialogView: View
|
|
|
|
private lateinit var dialogView: View
|
|
|
|
private lateinit var callback: TimerControlSetCallback
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun createView(savedInstanceState: Bundle?) {
|
|
|
|
override fun createView(savedInstanceState: Bundle?) {
|
|
|
|
dialogView = activity.layoutInflater.inflate(R.layout.control_set_timers_dialog, null)
|
|
|
|
dialogView = activity.layoutInflater.inflate(R.layout.control_set_timers_dialog, null)
|
|
|
@ -50,11 +53,6 @@ class TimerControlSet : TaskEditControlFragment() {
|
|
|
|
elapsed.setTimeDuration(viewModel.elapsedSeconds.value)
|
|
|
|
elapsed.setTimeDuration(viewModel.elapsedSeconds.value)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun onAttach(activity: Activity) {
|
|
|
|
|
|
|
|
super.onAttach(activity)
|
|
|
|
|
|
|
|
callback = activity as TimerControlSetCallback
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun onRowClick() {
|
|
|
|
private fun onRowClick() {
|
|
|
|
if (dialog == null) {
|
|
|
|
if (dialog == null) {
|
|
|
|
dialog = buildDialog()
|
|
|
|
dialog = buildDialog()
|
|
|
@ -77,12 +75,12 @@ class TimerControlSet : TaskEditControlFragment() {
|
|
|
|
private fun timerClicked() {
|
|
|
|
private fun timerClicked() {
|
|
|
|
lifecycleScope.launch {
|
|
|
|
lifecycleScope.launch {
|
|
|
|
if (timerActive()) {
|
|
|
|
if (timerActive()) {
|
|
|
|
val task = callback.stopTimer()
|
|
|
|
val task = stopTimer()
|
|
|
|
viewModel.elapsedSeconds.value = task.elapsedSeconds
|
|
|
|
viewModel.elapsedSeconds.value = task.elapsedSeconds
|
|
|
|
elapsed.setTimeDuration(task.elapsedSeconds)
|
|
|
|
elapsed.setTimeDuration(task.elapsedSeconds)
|
|
|
|
viewModel.timerStarted.value = 0
|
|
|
|
viewModel.timerStarted.value = 0
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
val task = callback.startTimer()
|
|
|
|
val task = startTimer()
|
|
|
|
viewModel.timerStarted.value = task.timerStart
|
|
|
|
viewModel.timerStarted.value = task.timerStart
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -107,9 +105,29 @@ class TimerControlSet : TaskEditControlFragment() {
|
|
|
|
|
|
|
|
|
|
|
|
private fun timerActive() = viewModel.timerStarted.value > 0
|
|
|
|
private fun timerActive() = viewModel.timerStarted.value > 0
|
|
|
|
|
|
|
|
|
|
|
|
interface TimerControlSetCallback {
|
|
|
|
private suspend fun stopTimer(): Task {
|
|
|
|
suspend fun stopTimer(): Task
|
|
|
|
val model = viewModel.task
|
|
|
|
suspend fun startTimer(): Task
|
|
|
|
timerPlugin.stopTimer(model)
|
|
|
|
|
|
|
|
val elapsedTime = DateUtils.formatElapsedTime(model.elapsedSeconds.toLong())
|
|
|
|
|
|
|
|
viewModel.addComment(String.format(
|
|
|
|
|
|
|
|
"%s %s\n%s %s", // $NON-NLS-1$
|
|
|
|
|
|
|
|
getString(R.string.TEA_timer_comment_stopped),
|
|
|
|
|
|
|
|
DateUtilities.getTimeString(context, DateTimeUtils.newDateTime()),
|
|
|
|
|
|
|
|
getString(R.string.TEA_timer_comment_spent),
|
|
|
|
|
|
|
|
elapsedTime),
|
|
|
|
|
|
|
|
null)
|
|
|
|
|
|
|
|
return model
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private suspend fun startTimer(): Task {
|
|
|
|
|
|
|
|
val model = viewModel.task
|
|
|
|
|
|
|
|
timerPlugin.startTimer(model)
|
|
|
|
|
|
|
|
viewModel.addComment(String.format(
|
|
|
|
|
|
|
|
"%s %s",
|
|
|
|
|
|
|
|
getString(R.string.TEA_timer_comment_started),
|
|
|
|
|
|
|
|
DateUtilities.getTimeString(context, DateTimeUtils.newDateTime())),
|
|
|
|
|
|
|
|
null)
|
|
|
|
|
|
|
|
return model
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
companion object {
|
|
|
|