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 android.widget.TextView
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.databinding.ControlSetDeadlineBinding import org.tasks.databinding.ControlSetCreationDateBinding
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
@ -18,9 +18,9 @@ class CreationDateControlSet : TaskEditControlFragment() {
private lateinit var date: TextView private lateinit var date: TextView
override fun bind(parent: ViewGroup?) = 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) 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" + 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!!)) context?.getString( R.string.sort_modified_group, formatter.format( viewModel.modificationDate!!))
if (viewModel.completionDate!! != 0L) if (viewModel.completionDate!! != 0L)

@ -2,14 +2,21 @@ package org.tasks.ui
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.os.Bundle import androidx.compose.foundation.layout.padding
import android.view.ViewGroup import androidx.compose.material.ContentAlpha
import android.widget.TextView 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.andlib.utility.DateUtilities
import com.todoroo.astrid.data.Task.Companion.hasDueTime import com.todoroo.astrid.data.Task.Companion.hasDueTime
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.databinding.ControlSetDeadlineBinding import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.date.DateTimeUtils import org.tasks.date.DateTimeUtils
import org.tasks.dialogs.DateTimePicker import org.tasks.dialogs.DateTimePicker
import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker
@ -19,17 +26,11 @@ import java.util.*
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class DeadlineControlSet : TaskEditControlFragment() { class DeadlineControlSet : TaskEditControlComposeFragment() {
@Inject lateinit var activity: Activity @Inject lateinit var activity: Activity
@Inject lateinit var locale: Locale @Inject lateinit var locale: Locale
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
private lateinit var dueDate: TextView
override fun createView(savedInstanceState: Bundle?) {
refreshDisplayView()
}
override fun onRowClick() { override fun onRowClick() {
val fragmentManager = parentFragmentManager val fragmentManager = parentFragmentManager
if (fragmentManager.findFragmentByTag(FRAG_TAG_DATE_PICKER) == null) { if (fragmentManager.findFragmentByTag(FRAG_TAG_DATE_PICKER) == null) {
@ -44,11 +45,33 @@ class DeadlineControlSet : TaskEditControlFragment() {
override val isClickable = true override val isClickable = true
override fun bind(parent: ViewGroup?) = @Composable
ControlSetDeadlineBinding.inflate(layoutInflater, parent, true).let { override fun Body() {
dueDate = it.dueDate val context = LocalContext.current
it.root 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 override val icon = R.drawable.ic_outline_schedule_24px
@ -59,42 +82,21 @@ class DeadlineControlSet : TaskEditControlFragment() {
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
viewModel.setDueDate(data!!.getLongExtra(DateTimePicker.EXTRA_TIMESTAMP, 0L)) viewModel.setDueDate(data!!.getLongExtra(DateTimePicker.EXTRA_TIMESTAMP, 0L))
} }
refreshDisplayView()
} else { } else {
super.onActivityResult(requestCode, resultCode, data) 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 { companion object {
const val TAG = R.string.TEA_ctrl_when_pref const val TAG = R.string.TEA_ctrl_when_pref
private const val REQUEST_DATE = 504 private const val REQUEST_DATE = 504
private const val FRAG_TAG_DATE_PICKER = "frag_tag_date_picker" 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"?> <?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" <TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/due_date" android:id="@+id/creation_date"
style="@style/TaskEditTextPrimary" style="@style/TaskEditTextPrimary"
android:hint="@string/no_due_date" android:hint="@string/no_due_date"
android:layout_width="match_parent" android:layout_width="match_parent"
Loading…
Cancel
Save