Convert DeadlineControlSet to compose

pull/1923/head
Alex Baker 2 years ago
parent 6513c40c97
commit 8e8b8c9f64

@ -4,7 +4,7 @@ import android.view.ViewGroup
import android.widget.TextView
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.databinding.ControlSetDeadlineBinding
import org.tasks.databinding.ControlSetCreationDateBinding
import org.tasks.preferences.Preferences
import java.text.SimpleDateFormat
import java.util.*
@ -18,9 +18,9 @@ class CreationDateControlSet : TaskEditControlFragment() {
private lateinit var date: TextView
override fun bind(parent: ViewGroup?) =
ControlSetDeadlineBinding.inflate(layoutInflater, parent, true).let {
ControlSetCreationDateBinding.inflate(layoutInflater, parent, true).let {
val formatter = SimpleDateFormat( "yyyy-MM-dd HH:mm", locale)
date = it.dueDate
date = it.creationDate
var dateRecords = context?.getString( R.string.sort_created_group, formatter.format( viewModel.creationDate!!)) + "\n" +
context?.getString( R.string.sort_modified_group, formatter.format( viewModel.modificationDate!!))
if (viewModel.completionDate!! != 0L)

@ -2,14 +2,21 @@ package org.tasks.ui
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.view.ViewGroup
import android.widget.TextView
import androidx.compose.foundation.layout.padding
import androidx.compose.material.ContentAlpha
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.data.Task.Companion.hasDueTime
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.databinding.ControlSetDeadlineBinding
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.date.DateTimeUtils
import org.tasks.dialogs.DateTimePicker
import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker
@ -19,17 +26,11 @@ import java.util.*
import javax.inject.Inject
@AndroidEntryPoint
class DeadlineControlSet : TaskEditControlFragment() {
class DeadlineControlSet : TaskEditControlComposeFragment() {
@Inject lateinit var activity: Activity
@Inject lateinit var locale: Locale
@Inject lateinit var preferences: Preferences
private lateinit var dueDate: TextView
override fun createView(savedInstanceState: Bundle?) {
refreshDisplayView()
}
override fun onRowClick() {
val fragmentManager = parentFragmentManager
if (fragmentManager.findFragmentByTag(FRAG_TAG_DATE_PICKER) == null) {
@ -44,11 +45,33 @@ class DeadlineControlSet : TaskEditControlFragment() {
override val isClickable = true
override fun bind(parent: ViewGroup?) =
ControlSetDeadlineBinding.inflate(layoutInflater, parent, true).let {
dueDate = it.dueDate
it.root
@Composable
override fun Body() {
val context = LocalContext.current
val dueDate = viewModel.dueDate.collectAsStateLifecycleAware().value
val text = if (dueDate == 0L) {
stringResource(id = R.string.no_due_date)
} else {
DateUtilities.getRelativeDateTime(
context,
dueDate,
locale,
FormatStyle.FULL,
preferences.alwaysDisplayFullDate,
false
)
}
val color = when {
dueDate == 0L -> MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.disabled)
dueDate.isOverdue -> colorResource(id = R.color.overdue)
else -> MaterialTheme.colors.onSurface
}
Text(
text = text,
color = color,
modifier = Modifier.padding(vertical = 20.dp)
)
}
override val icon = R.drawable.ic_outline_schedule_24px
@ -59,42 +82,21 @@ class DeadlineControlSet : TaskEditControlFragment() {
if (resultCode == Activity.RESULT_OK) {
viewModel.setDueDate(data!!.getLongExtra(DateTimePicker.EXTRA_TIMESTAMP, 0L))
}
refreshDisplayView()
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}
private fun refreshDisplayView() {
val date = viewModel.dueDate.value
if (date == 0L) {
dueDate.text = ""
setTextColor(false)
} else {
dueDate.text = DateUtilities.getRelativeDateTime(
activity,
date,
locale,
FormatStyle.FULL,
preferences.alwaysDisplayFullDate,
false
)
setTextColor(if (hasDueTime(date)) {
DateTimeUtils.newDateTime(date).isBeforeNow
} else {
DateTimeUtils.newDateTime(date).endOfDay().isBeforeNow
})
}
}
private fun setTextColor(overdue: Boolean) {
dueDate.setTextColor(
activity.getColor(if (overdue) R.color.overdue else R.color.text_primary))
}
companion object {
const val TAG = R.string.TEA_ctrl_when_pref
private const val REQUEST_DATE = 504
private const val FRAG_TAG_DATE_PICKER = "frag_tag_date_picker"
private val Long.isOverdue: Boolean
get() = if (hasDueTime(this)) {
DateTimeUtils.newDateTime(this).isBeforeNow
} else {
DateTimeUtils.newDateTime(this).endOfDay().isBeforeNow
}
}
}

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/due_date"
android:id="@+id/creation_date"
style="@style/TaskEditTextPrimary"
android:hint="@string/no_due_date"
android:layout_width="match_parent"
Loading…
Cancel
Save