Migrate to compose material3

pull/2912/head
Alex Baker 2 years ago
parent b918e87e05
commit 4c1121869d

@ -235,7 +235,6 @@ dependencies {
implementation("androidx.compose.foundation:foundation") implementation("androidx.compose.foundation:foundation")
implementation("androidx.compose.material:material") implementation("androidx.compose.material:material")
implementation("androidx.compose.runtime:runtime-livedata") implementation("androidx.compose.runtime:runtime-livedata")
implementation(libs.compose.theme.adapter)
implementation(libs.androidx.activity.compose) implementation(libs.androidx.activity.compose)
implementation("androidx.compose.material:material-icons-extended") implementation("androidx.compose.material:material-icons-extended")
implementation(libs.androidx.lifecycle.viewmodel.compose) implementation(libs.androidx.lifecycle.viewmodel.compose)

@ -20,7 +20,6 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.repeatOnLifecycle
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.astrid.activity.TaskEditFragment.Companion.newTaskEditFragment import com.todoroo.astrid.activity.TaskEditFragment.Companion.newTaskEditFragment
import com.todoroo.astrid.adapter.SubheaderClickHandler import com.todoroo.astrid.adapter.SubheaderClickHandler
@ -60,6 +59,7 @@ import org.tasks.location.LocationPickerActivity.Companion.EXTRA_PLACE
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.themes.TasksTheme
import org.tasks.themes.Theme import org.tasks.themes.Theme
import org.tasks.ui.EmptyTaskEditFragment.Companion.newEmptyTaskEditFragment import org.tasks.ui.EmptyTaskEditFragment.Companion.newEmptyTaskEditFragment
import org.tasks.ui.MainActivityEvent import org.tasks.ui.MainActivityEvent
@ -108,7 +108,7 @@ class MainActivity : AppCompatActivity() {
binding.composeView.setContent { binding.composeView.setContent {
val state = viewModel.state.collectAsStateLifecycleAware().value val state = viewModel.state.collectAsStateLifecycleAware().value
if (state.drawerOpen) { if (state.drawerOpen) {
MdcTheme { TasksTheme {
TasksMenu( TasksMenu(
bottomPadding = WindowInsets.mandatorySystemGestures bottomPadding = WindowInsets.mandatorySystemGestures
.asPaddingValues() .asPaddingValues()

@ -23,7 +23,7 @@ import androidx.appcompat.widget.Toolbar
import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.Divider import androidx.compose.material3.Divider
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -42,7 +42,6 @@ import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.AppBarLayout.Behavior.DragCallback import com.google.android.material.appbar.AppBarLayout.Behavior.DragCallback
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.AndroidUtilities.atLeastOreoMR1 import com.todoroo.andlib.utility.AndroidUtilities.atLeastOreoMR1
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
@ -103,6 +102,7 @@ import org.tasks.markdown.MarkdownProvider
import org.tasks.notifications.NotificationManager import org.tasks.notifications.NotificationManager
import org.tasks.play.PlayServices import org.tasks.play.PlayServices
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.TasksTheme
import org.tasks.ui.CalendarControlSet import org.tasks.ui.CalendarControlSet
import org.tasks.ui.ChipProvider import org.tasks.ui.ChipProvider
import org.tasks.ui.LocationControlSet import org.tasks.ui.LocationControlSet
@ -272,7 +272,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
} }
} }
binding.composeView.setContent { binding.composeView.setContent {
MdcTheme { TasksTheme {
Column(modifier = Modifier.gesturesDisabled(editViewModel.isReadOnly)) { Column(modifier = Modifier.gesturesDisabled(editViewModel.isReadOnly)) {
taskEditControlSetFragmentManager.displayOrder.forEachIndexed { index, tag -> taskEditControlSetFragmentManager.displayOrder.forEachIndexed { index, tag ->
if (index < taskEditControlSetFragmentManager.visibleSize) { if (index < taskEditControlSetFragmentManager.visibleSize) {
@ -340,7 +340,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
binding.banner.setContent { binding.banner.setContent {
var visible by rememberSaveable { mutableStateOf(true) } var visible by rememberSaveable { mutableStateOf(true) }
val context = LocalContext.current val context = LocalContext.current
MdcTheme { TasksTheme {
BeastModeBanner( BeastModeBanner(
visible, visible,
showSettings = { showSettings = {

@ -47,7 +47,6 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.bottomappbar.BottomAppBar import com.google.android.material.bottomappbar.BottomAppBar
import com.google.android.material.composethemeadapter.MdcTheme
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.adapter.TaskAdapter import com.todoroo.astrid.adapter.TaskAdapter
@ -124,6 +123,7 @@ import org.tasks.tasklist.SectionedDataSource
import org.tasks.tasklist.TaskViewHolder import org.tasks.tasklist.TaskViewHolder
import org.tasks.tasklist.ViewHolderFactory import org.tasks.tasklist.ViewHolderFactory
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.themes.TasksTheme
import org.tasks.themes.ThemeColor import org.tasks.themes.ThemeColor
import org.tasks.time.DateTimeUtils2.currentTimeMillis import org.tasks.time.DateTimeUtils2.currentTimeMillis
import org.tasks.ui.TaskEditEvent import org.tasks.ui.TaskEditEvent
@ -344,7 +344,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
binding.banner.setContent { binding.banner.setContent {
val context = LocalContext.current val context = LocalContext.current
val showBanner = listViewModel.state.collectAsStateLifecycleAware().value.begForSubscription val showBanner = listViewModel.state.collectAsStateLifecycleAware().value.begForSubscription
MdcTheme { TasksTheme {
SubscriptionNagBanner( SubscriptionNagBanner(
visible = showBanner, visible = showBanner,
subscribe = { subscribe = {

@ -13,7 +13,6 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
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 dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -26,6 +25,7 @@ import org.tasks.data.dao.TaskAttachmentDao
import org.tasks.dialogs.AddAttachmentDialog import org.tasks.dialogs.AddAttachmentDialog
import org.tasks.files.FileHelper import org.tasks.files.FileHelper
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.TasksTheme
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlFragment
import javax.inject.Inject import javax.inject.Inject
@ -48,7 +48,7 @@ class FilesControlSet : TaskEditControlFragment() {
override fun bind(parent: ViewGroup?): View = override fun bind(parent: ViewGroup?): View =
(parent as ComposeView).apply { (parent as ComposeView).apply {
setContent { setContent {
MdcTheme { TasksTheme {
AttachmentRow( AttachmentRow(
attachments = viewModel.selectedAttachments.collectAsStateLifecycleAware().value, attachments = viewModel.selectedAttachments.collectAsStateLifecycleAware().value,
openAttachment = { openAttachment = {

@ -12,7 +12,6 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
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.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.CaldavFilter
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
@ -27,6 +26,7 @@ import org.tasks.data.dao.CaldavDao
import org.tasks.repeats.BasicRecurrenceDialog import org.tasks.repeats.BasicRecurrenceDialog
import org.tasks.repeats.RecurrenceUtils.newRecur import org.tasks.repeats.RecurrenceUtils.newRecur
import org.tasks.repeats.RepeatRuleToString import org.tasks.repeats.RepeatRuleToString
import org.tasks.themes.TasksTheme
import org.tasks.time.DateTime import org.tasks.time.DateTime
import org.tasks.time.DateTimeUtils2.currentTimeMillis import org.tasks.time.DateTimeUtils2.currentTimeMillis
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlFragment
@ -85,7 +85,7 @@ class RepeatControlSet : TaskEditControlFragment() {
override fun bind(parent: ViewGroup?): View = override fun bind(parent: ViewGroup?): View =
(parent as ComposeView).apply { (parent as ComposeView).apply {
setContent { setContent {
MdcTheme { TasksTheme {
RepeatRow( RepeatRow(
recurrence = viewModel.recurrence.collectAsStateLifecycleAware().value?.let { recurrence = viewModel.recurrence.collectAsStateLifecycleAware().value?.let {
repeatRuleToString.toString(it) repeatRuleToString.toString(it)

@ -5,13 +5,13 @@ import android.content.Intent
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import org.tasks.R import org.tasks.R
import org.tasks.compose.collectAsStateLifecycleAware import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.TagsRow import org.tasks.compose.edit.TagsRow
import org.tasks.tags.TagPickerActivity import org.tasks.tags.TagPickerActivity
import org.tasks.themes.TasksTheme
import org.tasks.ui.ChipProvider import org.tasks.ui.ChipProvider
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlFragment
import javax.inject.Inject import javax.inject.Inject
@ -29,7 +29,7 @@ class TagsControlSet : TaskEditControlFragment() {
override fun bind(parent: ViewGroup?): View = override fun bind(parent: ViewGroup?): View =
(parent as ComposeView).apply { (parent as ComposeView).apply {
setContent { setContent {
MdcTheme { TasksTheme {
TagsRow( TagsRow(
tags = viewModel.selectedTags.collectAsStateLifecycleAware().value, tags = viewModel.selectedTags.collectAsStateLifecycleAware().value,
colorProvider = { chipProvider.getColor(it) }, colorProvider = { chipProvider.getColor(it) },

@ -13,17 +13,17 @@ 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.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import org.tasks.data.entity.Task
import com.todoroo.astrid.ui.TimeDurationControlSet import com.todoroo.astrid.ui.TimeDurationControlSet
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch 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.data.entity.Task
import org.tasks.date.DateTimeUtils import org.tasks.date.DateTimeUtils
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.themes.TasksTheme
import org.tasks.themes.Theme import org.tasks.themes.Theme
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlFragment
import javax.inject.Inject import javax.inject.Inject
@ -89,7 +89,7 @@ class TimerControlSet : TaskEditControlFragment() {
override fun bind(parent: ViewGroup?): View = override fun bind(parent: ViewGroup?): View =
(parent as ComposeView).apply { (parent as ComposeView).apply {
setContent { setContent {
MdcTheme { TasksTheme {
TimerRow( TimerRow(
started = viewModel.timerStarted.collectAsStateLifecycleAware().value, started = viewModel.timerStarted.collectAsStateLifecycleAware().value,
estimated = viewModel.estimatedSeconds.collectAsStateLifecycleAware().value, estimated = viewModel.estimatedSeconds.collectAsStateLifecycleAware().value,

@ -17,7 +17,6 @@ import androidx.compose.ui.platform.ComposeView
import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.PermissionStatus import com.google.accompanist.permissions.PermissionStatus
import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.rememberPermissionState
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
@ -30,6 +29,7 @@ import org.tasks.date.DateTimeUtils
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.MyTimePickerDialog import org.tasks.dialogs.MyTimePickerDialog
import org.tasks.scheduling.NotificationSchedulerIntentService import org.tasks.scheduling.NotificationSchedulerIntentService
import org.tasks.themes.TasksTheme
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlFragment
import java.util.Locale import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@ -76,7 +76,7 @@ class ReminderControlSet : TaskEditControlFragment() {
override fun bind(parent: ViewGroup?): View = override fun bind(parent: ViewGroup?): View =
(parent as ComposeView).apply { (parent as ComposeView).apply {
setContent { setContent {
MdcTheme { TasksTheme {
val ringMode by remember { this@ReminderControlSet.ringMode } val ringMode by remember { this@ReminderControlSet.ringMode }
val notificationPermissions = if (AndroidUtilities.atLeastTiramisu()) { val notificationPermissions = if (AndroidUtilities.atLeastTiramisu()) {
rememberPermissionState( rememberPermissionState(

@ -8,7 +8,6 @@ import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.andlib.utility.DateUtilities.getTimeString import com.todoroo.andlib.utility.DateUtilities.getTimeString
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
@ -22,9 +21,10 @@ import org.tasks.dialogs.StartDatePicker.Companion.EXTRA_TIME
import org.tasks.dialogs.StartDatePicker.Companion.NO_DAY import org.tasks.dialogs.StartDatePicker.Companion.NO_DAY
import org.tasks.dialogs.StartDatePicker.Companion.NO_TIME import org.tasks.dialogs.StartDatePicker.Companion.NO_TIME
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.TasksTheme
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlFragment
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.* import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -48,7 +48,7 @@ class StartDateControlSet : TaskEditControlFragment() {
override fun bind(parent: ViewGroup?) = override fun bind(parent: ViewGroup?) =
(parent as ComposeView).apply { (parent as ComposeView).apply {
setContent { setContent {
MdcTheme { TasksTheme {
val selectedDay = vm.selectedDay.collectAsStateLifecycleAware().value val selectedDay = vm.selectedDay.collectAsStateLifecycleAware().value
val selectedTime = vm.selectedTime.collectAsStateLifecycleAware().value val selectedTime = vm.selectedTime.collectAsStateLifecycleAware().value
StartDateRow( StartDateRow(

@ -9,7 +9,7 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember

@ -28,7 +28,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.Dialog
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import at.bitfire.dav4jvm.exception.HttpException import at.bitfire.dav4jvm.exception.HttpException
import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import net.openid.appauth.* import net.openid.appauth.*
@ -42,6 +41,7 @@ import org.tasks.compose.ConsentDialog
import org.tasks.compose.SignInDialog import org.tasks.compose.SignInDialog
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.extensions.Context.openUri import org.tasks.extensions.Context.openUri
import org.tasks.themes.TasksTheme
import org.tasks.themes.ThemeColor import org.tasks.themes.ThemeColor
import timber.log.Timber import timber.log.Timber
import java.util.concurrent.CountDownLatch import java.util.concurrent.CountDownLatch
@ -98,7 +98,7 @@ class SignInActivity : ComponentActivity() {
var selectedPlatform by rememberSaveable { var selectedPlatform by rememberSaveable {
mutableStateOf(autoSelect) mutableStateOf(autoSelect)
} }
MdcTheme { TasksTheme {
selectedPlatform selectedPlatform
?.let { ?.let {
Dialog(onDismissRequest = { finish() }) { Dialog(onDismissRequest = { finish() }) {

@ -9,7 +9,6 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.Dialog
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
@ -18,6 +17,7 @@ import org.tasks.analytics.Firebase
import org.tasks.compose.PurchaseText.PurchaseText import org.tasks.compose.PurchaseText.PurchaseText
import org.tasks.extensions.Context.toast import org.tasks.extensions.Context.toast
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.TasksTheme
import org.tasks.themes.Theme import org.tasks.themes.Theme
import java.util.Locale import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@ -53,7 +53,7 @@ class PurchaseActivity : AppCompatActivity(), OnPurchasesUpdated {
} }
setContent { setContent {
MdcTheme { TasksTheme {
Dialog(onDismissRequest = { finish() }) { Dialog(onDismissRequest = { finish() }) {
PurchaseText( PurchaseText(
nameYourPrice = nameYourPrice, nameYourPrice = nameYourPrice,

@ -22,7 +22,6 @@ import androidx.core.widget.addTextChangedListener
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import at.bitfire.dav4jvm.exception.HttpException import at.bitfire.dav4jvm.exception.HttpException
import com.franmontiel.persistentcookiejar.persistence.CookiePersistor import com.franmontiel.persistentcookiejar.persistence.CookiePersistor
import com.google.android.material.composethemeadapter.MdcTheme
import com.google.android.material.snackbar.BaseTransientBottomBar import com.google.android.material.snackbar.BaseTransientBottomBar
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
@ -47,6 +46,7 @@ import org.tasks.extensions.Context.openUri
import org.tasks.extensions.addBackPressedCallback import org.tasks.extensions.addBackPressedCallback
import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.injection.ThemedInjectingAppCompatActivity
import org.tasks.security.KeyStoreEncryption import org.tasks.security.KeyStoreEncryption
import org.tasks.themes.TasksTheme
import org.tasks.ui.DisplayableException import org.tasks.ui.DisplayableException
import timber.log.Timber import timber.log.Timber
import java.net.ConnectException import java.net.ConnectException
@ -138,7 +138,7 @@ abstract class BaseCaldavAccountSettingsActivity : ThemedInjectingAppCompatActiv
) )
binding.password.setOnFocusChangeListener { _, hasFocus -> onPasswordFocused(hasFocus) } binding.password.setOnFocusChangeListener { _, hasFocus -> onPasswordFocused(hasFocus) }
binding.serverSelector.setContent { binding.serverSelector.setContent {
MdcTheme { TasksTheme {
var selected by rememberSaveable { serverType } var selected by rememberSaveable { serverType }
ServerSelector(selected) { ServerSelector(selected) {
serverType.value = it serverType.value = it

@ -2,16 +2,15 @@ package org.tasks.caldav
import android.os.Bundle import android.os.Bundle
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.compose.material.FloatingActionButton import androidx.compose.material3.FloatingActionButton
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.R import org.tasks.R
@ -27,6 +26,7 @@ import org.tasks.data.entity.CaldavAccount.Companion.SERVER_SABREDAV
import org.tasks.data.entity.CaldavAccount.Companion.SERVER_TASKS import org.tasks.data.entity.CaldavAccount.Companion.SERVER_TASKS
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_OWNER import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_OWNER
import org.tasks.themes.TasksTheme
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -53,7 +53,7 @@ class CaldavCalendarSettingsActivity : BaseCaldavCalendarSettingsActivity() {
caldavCalendar?.takeIf { it.id > 0 }?.let { caldavCalendar?.takeIf { it.id > 0 }?.let {
findViewById<ComposeView>(R.id.people).setContent { findViewById<ComposeView>(R.id.people).setContent {
MdcTheme { TasksTheme {
val principals = principalDao.getPrincipals(it.id).collectAsStateLifecycleAware(initial = emptyList()).value val principals = principalDao.getPrincipals(it.id).collectAsStateLifecycleAware(initial = emptyList()).value
PrincipalList( PrincipalList(
principals = principals, principals = principals,
@ -66,7 +66,7 @@ class CaldavCalendarSettingsActivity : BaseCaldavCalendarSettingsActivity() {
findViewById<ComposeView>(R.id.fab) findViewById<ComposeView>(R.id.fab)
.apply { isVisible = true } .apply { isVisible = true }
.setContent { .setContent {
MdcTheme { TasksTheme {
val openDialog = rememberSaveable { mutableStateOf(false) } val openDialog = rememberSaveable { mutableStateOf(false) }
ShareInviteDialog( ShareInviteDialog(
openDialog, openDialog,
@ -77,11 +77,14 @@ class CaldavCalendarSettingsActivity : BaseCaldavCalendarSettingsActivity() {
openDialog.value = false openDialog.value = false
} }
} }
FloatingActionButton(onClick = { openDialog.value = true }) { FloatingActionButton(
onClick = { openDialog.value = true },
containerColor = MaterialTheme.colorScheme.primary
) {
Icon( Icon(
painter = painterResource(R.drawable.ic_outline_person_add_24), painter = painterResource(R.drawable.ic_outline_person_add_24),
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colors.onPrimary, tint = MaterialTheme.colorScheme.onPrimary,
) )
} }
} }

@ -5,14 +5,14 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.BuildConfig import org.tasks.BuildConfig
import org.tasks.R import org.tasks.R
import org.tasks.sync.AddAccountDialog.Platform import org.tasks.sync.AddAccountDialog.Platform
import org.tasks.themes.TasksTheme
@Composable @Composable
fun AddAccountDialog( fun AddAccountDialog(
@ -52,7 +52,7 @@ fun AddAccountDialog(
title = R.string.caldav, title = R.string.caldav,
description = R.string.caldav_selection_description, description = R.string.caldav_selection_description,
icon = R.drawable.ic_webdav_logo, icon = R.drawable.ic_webdav_logo,
tint = MaterialTheme.colors.onSurface.copy( tint = MaterialTheme.colorScheme.onSurface.copy(
alpha = ContentAlpha.medium alpha = ContentAlpha.medium
), ),
onClick = { selected(Platform.CALDAV) } onClick = { selected(Platform.CALDAV) }
@ -76,7 +76,7 @@ fun AddAccountDialog(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun AddAccountDialogPreview() { fun AddAccountDialogPreview() {
MdcTheme { TasksTheme {
AddAccountDialog(hasTasksAccount = false, selected = {}) AddAccountDialog(hasTasksAccount = false, selected = {})
} }
} }

@ -12,17 +12,17 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.AlertDialog
import androidx.compose.material.Divider
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedTextField
import androidx.compose.material.RadioButton
import androidx.compose.material.Text
import androidx.compose.material.TextFieldDefaults
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Autorenew import androidx.compose.material.icons.outlined.Autorenew
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Divider
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.OutlinedTextFieldDefaults
import androidx.compose.material3.RadioButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
@ -45,7 +45,6 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.astrid.ui.ReminderControlSetViewModel.ViewState import com.todoroo.astrid.ui.ReminderControlSetViewModel.ViewState
import kotlinx.coroutines.android.awaitFrame import kotlinx.coroutines.android.awaitFrame
import org.tasks.R import org.tasks.R
@ -56,6 +55,7 @@ import org.tasks.data.entity.Alarm.Companion.TYPE_REL_END
import org.tasks.data.entity.Alarm.Companion.TYPE_REL_START import org.tasks.data.entity.Alarm.Companion.TYPE_REL_START
import org.tasks.data.entity.Alarm.Companion.whenStarted import org.tasks.data.entity.Alarm.Companion.whenStarted
import org.tasks.reminders.AlarmToString.Companion.getRepeatString import org.tasks.reminders.AlarmToString.Companion.getRepeatString
import org.tasks.themes.TasksTheme
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@ExperimentalComposeUiApi @ExperimentalComposeUiApi
@ -411,9 +411,11 @@ fun OutlinedIntInput(
}, },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
modifier = modifier.padding(horizontal = 16.dp), modifier = modifier.padding(horizontal = 16.dp),
colors = TextFieldDefaults.outlinedTextFieldColors( colors = OutlinedTextFieldDefaults.colors(
textColor = MaterialTheme.colors.onSurface, focusedTextColor = MaterialTheme.colorScheme.onSurface,
focusedBorderColor = MaterialTheme.colors.onSurface unfocusedTextColor = MaterialTheme.colorScheme.onSurface,
focusedBorderColor = MaterialTheme.colorScheme.onSurface,
unfocusedBorderColor = MaterialTheme.colorScheme.onSurface,
), ),
isError = value.value.text.toIntOrNull()?.let { it < minValue } ?: true, isError = value.value.text.toIntOrNull()?.let { it < minValue } ?: true,
) )
@ -432,8 +434,8 @@ fun CenteredH6(text: String) {
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(vertical = 16.dp), .padding(vertical = 16.dp),
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.h6 style = MaterialTheme.typography.titleLarge
) )
} }
@ -475,8 +477,8 @@ fun BodyText(modifier: Modifier = Modifier, text: String) {
Text( Text(
text = text, text = text,
modifier = modifier, modifier = modifier,
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.body1, style = MaterialTheme.typography.bodyLarge,
) )
} }
@ -549,7 +551,7 @@ fun AddAlarmDialog(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun AddCustomReminderOne() = fun AddCustomReminderOne() =
MdcTheme { TasksTheme {
AddReminderDialog.AddCustomReminder( AddReminderDialog.AddCustomReminder(
time = remember { mutableStateOf(1) }, time = remember { mutableStateOf(1) },
units = remember { mutableStateOf(0) }, units = remember { mutableStateOf(0) },
@ -565,7 +567,7 @@ fun AddCustomReminderOne() =
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun AddCustomReminder() = fun AddCustomReminder() =
MdcTheme { TasksTheme {
AddReminderDialog.AddCustomReminder( AddReminderDialog.AddCustomReminder(
time = remember { mutableStateOf(15) }, time = remember { mutableStateOf(15) },
units = remember { mutableStateOf(1) }, units = remember { mutableStateOf(1) },
@ -581,7 +583,7 @@ fun AddCustomReminder() =
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun AddRepeatingReminderOne() = fun AddRepeatingReminderOne() =
MdcTheme { TasksTheme {
AddReminderDialog.AddRecurringReminder( AddReminderDialog.AddRecurringReminder(
openDialog = true, openDialog = true,
interval = remember { mutableStateOf(1) }, interval = remember { mutableStateOf(1) },
@ -595,7 +597,7 @@ fun AddRepeatingReminderOne() =
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun AddRepeatingReminder() = fun AddRepeatingReminder() =
MdcTheme { TasksTheme {
AddReminderDialog.AddRecurringReminder( AddReminderDialog.AddRecurringReminder(
openDialog = true, openDialog = true,
interval = remember { mutableStateOf(15) }, interval = remember { mutableStateOf(15) },
@ -609,7 +611,7 @@ fun AddRepeatingReminder() =
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun AddRandomReminderOne() = fun AddRandomReminderOne() =
MdcTheme { TasksTheme {
AddReminderDialog.AddRandomReminder( AddReminderDialog.AddRandomReminder(
time = remember { mutableStateOf(1) }, time = remember { mutableStateOf(1) },
units = remember { mutableStateOf(0) } units = remember { mutableStateOf(0) }
@ -621,7 +623,7 @@ fun AddRandomReminderOne() =
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun AddRandomReminder() = fun AddRandomReminder() =
MdcTheme { TasksTheme {
AddReminderDialog.AddRandomReminder( AddReminderDialog.AddRandomReminder(
time = remember { mutableStateOf(15) }, time = remember { mutableStateOf(15) },
units = remember { mutableStateOf(1) } units = remember { mutableStateOf(1) }
@ -632,7 +634,7 @@ fun AddRandomReminder() =
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun AddReminderDialog() = fun AddReminderDialog() =
MdcTheme { TasksTheme {
AddAlarmDialog( AddAlarmDialog(
viewState = ViewState(showAddAlarm = true), viewState = ViewState(showAddAlarm = true),
existingAlarms = emptyList(), existingAlarms = emptyList(),

@ -12,19 +12,19 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.Divider import androidx.compose.material3.Divider
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.material.TextButton import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.Tasks import org.tasks.Tasks
import org.tasks.themes.TasksTheme
@ExperimentalAnimationApi @ExperimentalAnimationApi
@Composable @Composable
@ -76,8 +76,9 @@ fun SubscriptionNagBanner(
R.string.tasks_needs_your_support R.string.tasks_needs_your_support
} }
), ),
style = MaterialTheme.typography.body1, style = MaterialTheme.typography.bodyLarge,
modifier = Modifier.padding(horizontal = 16.dp), modifier = Modifier.padding(horizontal = 16.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text( Text(
@ -88,8 +89,9 @@ fun SubscriptionNagBanner(
R.string.support_development_subscribe R.string.support_development_subscribe
} }
), ),
style = MaterialTheme.typography.body2, style = MaterialTheme.typography.bodyMedium,
modifier = Modifier.padding(horizontal = 16.dp), modifier = Modifier.padding(horizontal = 16.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
}, },
buttons = { buttons = {
@ -116,14 +118,16 @@ fun BeastModeBanner(
content = { content = {
Text( Text(
text = stringResource(id = R.string.hint_customize_edit_title), text = stringResource(id = R.string.hint_customize_edit_title),
style = MaterialTheme.typography.body1, style = MaterialTheme.typography.bodyLarge,
modifier = Modifier.padding(horizontal = 16.dp), modifier = Modifier.padding(horizontal = 16.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text( Text(
text = stringResource(id = R.string.hint_customize_edit_body), text = stringResource(id = R.string.hint_customize_edit_body),
style = MaterialTheme.typography.body2, style = MaterialTheme.typography.bodyMedium,
modifier = Modifier.padding(horizontal = 16.dp), modifier = Modifier.padding(horizontal = 16.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
}, },
buttons = { buttons = {
@ -138,8 +142,8 @@ fun BannerTextButton(text: Int, onClick: () -> Unit) {
TextButton(onClick = onClick) { TextButton(onClick = onClick) {
Text( Text(
text = stringResource(id = text), text = stringResource(id = text),
style = MaterialTheme.typography.button.copy( style = MaterialTheme.typography.labelLarge.copy(
color = MaterialTheme.colors.secondary color = MaterialTheme.colorScheme.onSurface
), ),
) )
} }
@ -149,7 +153,7 @@ fun BannerTextButton(text: Int, onClick: () -> Unit) {
@Preview(showBackground = true) @Preview(showBackground = true)
@Preview(showBackground = true, backgroundColor = 0x202124, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, backgroundColor = 0x202124, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
private fun BeastModePreview() = MdcTheme { private fun BeastModePreview() = TasksTheme {
BeastModeBanner(visible = true, showSettings = {}, dismiss = {}) BeastModeBanner(visible = true, showSettings = {}, dismiss = {})
} }
@ -157,7 +161,7 @@ private fun BeastModePreview() = MdcTheme {
@Preview(showBackground = true) @Preview(showBackground = true)
@Preview(showBackground = true, backgroundColor = 0x202124, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, backgroundColor = 0x202124, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
private fun SubscriptionNagPreview() = MdcTheme { private fun SubscriptionNagPreview() = TasksTheme {
SubscriptionNagBanner(visible = true, subscribe = {}, dismiss = {}) SubscriptionNagBanner(visible = true, subscribe = {}, dismiss = {})
} }

@ -1,8 +1,8 @@
package org.tasks.compose package org.tasks.compose
import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material.IconButton import androidx.compose.material3.IconButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color

@ -6,16 +6,16 @@ import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.ChipDefaults
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.FilterChip
import androidx.compose.material.Icon
import androidx.compose.material.LocalMinimumInteractiveComponentEnforcement
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Cancel import androidx.compose.material.icons.outlined.Cancel
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FilterChip
import androidx.compose.material3.FilterChipDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.LocalMinimumInteractiveComponentEnforcement
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -28,9 +28,9 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
import org.tasks.themes.TasksTheme
@Composable @Composable
fun Chip( fun Chip(
@ -52,7 +52,7 @@ fun Chip(
) )
} }
@OptIn(ExperimentalMaterialApi::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun Chip( fun Chip(
text: String? = null, text: String? = null,
@ -86,23 +86,24 @@ fun Chip(
} }
}, },
modifier = Modifier.defaultMinSize(minHeight = 26.dp), modifier = Modifier.defaultMinSize(minHeight = 26.dp),
colors = ChipDefaults.outlinedFilterChipColors( colors = FilterChipDefaults.filterChipColors(
backgroundColor = color.copy(alpha = .1f), containerColor = color.copy(alpha = .1f),
contentColor = MaterialTheme.colors.onSurface labelColor = MaterialTheme.colorScheme.onSurface,
), ),
) { label = {
if (text == null) { if (text == null) {
ChipIcon(iconRes = icon) ChipIcon(iconRes = icon)
} }
text?.let { text?.let {
Text( Text(
text = it, text = it,
style = MaterialTheme.typography.caption, style = MaterialTheme.typography.bodySmall,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis, overflow = TextOverflow.Ellipsis,
) )
}
} }
} )
} }
} }
@ -122,7 +123,7 @@ private fun ChipIcon(iconRes: Int?) {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun TasksChipIconAndTextPreview() { fun TasksChipIconAndTextPreview() {
MdcTheme { TasksTheme {
Chip( Chip(
text = "Home", text = "Home",
icon = CustomIcons.getIconResId(CustomIcons.LABEL), icon = CustomIcons.getIconResId(CustomIcons.LABEL),
@ -136,7 +137,7 @@ fun TasksChipIconAndTextPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun TasksChipIconTextAndClearPreview() { fun TasksChipIconTextAndClearPreview() {
MdcTheme { TasksTheme {
Chip( Chip(
text = "Home", text = "Home",
icon = CustomIcons.getIconResId(CustomIcons.LABEL), icon = CustomIcons.getIconResId(CustomIcons.LABEL),
@ -151,7 +152,7 @@ fun TasksChipIconTextAndClearPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun TasksChipIconPreview() { fun TasksChipIconPreview() {
MdcTheme { TasksTheme {
Chip( Chip(
text = null, text = null,
icon = CustomIcons.getIconResId(CustomIcons.LABEL), icon = CustomIcons.getIconResId(CustomIcons.LABEL),
@ -165,7 +166,7 @@ fun TasksChipIconPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun TasksChipTextPreview() { fun TasksChipTextPreview() {
MdcTheme { TasksTheme {
Chip( Chip(
text = "Home", text = "Home",
icon = null, icon = null,

@ -1,10 +1,11 @@
package org.tasks.compose package org.tasks.compose
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Clear import androidx.compose.material.icons.outlined.Clear
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha
@ -17,7 +18,8 @@ fun ClearButton(onClick: () -> Unit) {
Icon( Icon(
imageVector = Icons.Outlined.Clear, imageVector = Icons.Outlined.Clear,
modifier = Modifier.alpha(ContentAlpha.medium), modifier = Modifier.alpha(ContentAlpha.medium),
contentDescription = stringResource(id = R.string.delete) contentDescription = stringResource(id = R.string.delete),
tint = MaterialTheme.colorScheme.onSurface,
) )
} }
} }

@ -1,15 +1,15 @@
package org.tasks.compose package org.tasks.compose
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.material.ButtonDefaults
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.MaterialTheme import androidx.compose.material3.ButtonDefaults
import androidx.compose.material.Text import androidx.compose.material3.MaterialTheme
import androidx.compose.material.TextFieldDefaults import androidx.compose.material3.OutlinedTextFieldDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import java.util.* import java.util.Locale
object Constants { object Constants {
const val ICON_ALPHA = 0.54f const val ICON_ALPHA = 0.54f
@ -18,26 +18,25 @@ object Constants {
@Composable @Composable
fun TextButton(@StringRes text: Int, onClick: () -> Unit) { fun TextButton(@StringRes text: Int, onClick: () -> Unit) {
androidx.compose.material.TextButton( androidx.compose.material3.TextButton(
onClick = onClick, onClick = onClick,
colors = textButtonColors() colors = textButtonColors()
) { ) {
Text( Text(
stringResource(text).uppercase(Locale.getDefault()), stringResource(text).uppercase(Locale.getDefault()),
style = MaterialTheme.typography.button style = MaterialTheme.typography.labelLarge
) )
} }
} }
@Composable @Composable
fun textButtonColors() = ButtonDefaults.textButtonColors( fun textButtonColors() = ButtonDefaults.textButtonColors(
contentColor = MaterialTheme.colors.secondary contentColor = MaterialTheme.colorScheme.onSecondary
) )
@Composable @Composable
fun textFieldColors() = TextFieldDefaults.textFieldColors( fun textFieldColors() = OutlinedTextFieldDefaults.colors(
cursorColor = MaterialTheme.colors.secondary, cursorColor = MaterialTheme.colorScheme.secondary,
focusedLabelColor = MaterialTheme.colors.secondary.copy(alpha = ContentAlpha.high), focusedTextColor = MaterialTheme.colorScheme.onSecondary.copy(alpha = ContentAlpha.high),
focusedIndicatorColor = MaterialTheme.colors.secondary.copy(alpha = ContentAlpha.high),
) )
} }

@ -1,8 +1,9 @@
package org.tasks.compose package org.tasks.compose
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.Card import androidx.compose.material3.Card
import androidx.compose.material.MaterialTheme import androidx.compose.material3.CardDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -21,7 +22,7 @@ fun CustomDialog(
Card( Card(
shape = MaterialTheme.shapes.medium, shape = MaterialTheme.shapes.medium,
modifier = Modifier.padding(16.dp), modifier = Modifier.padding(16.dp),
elevation = 8.dp elevation = CardDefaults.cardElevation(defaultElevation = 8.dp),
) { ) {
content() content()
} }

@ -1,10 +1,10 @@
package org.tasks.compose package org.tasks.compose
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha

@ -4,8 +4,8 @@ import androidx.annotation.StringRes
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -19,7 +19,7 @@ fun DialogRow(@StringRes text: Int, onClick: () -> Unit) {
.clickable { onClick() } .clickable { onClick() }
.fillMaxWidth() .fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 12.dp), .padding(horizontal = 16.dp, vertical = 12.dp),
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.body1, style = MaterialTheme.typography.bodyLarge,
) )
} }

@ -3,8 +3,8 @@ package org.tasks.compose
import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha
@ -17,10 +17,11 @@ fun DisabledText(
) { ) {
Text( Text(
text = text, text = text,
style = MaterialTheme.typography.body1, style = MaterialTheme.typography.bodyLarge,
modifier = modifier modifier = modifier
.alpha(alpha = ContentAlpha.disabled) .alpha(alpha = ContentAlpha.disabled)
.padding(end = 16.dp) .padding(end = 16.dp)
.defaultMinSize(minHeight = 24.dp), .defaultMinSize(minHeight = 24.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
} }

@ -6,14 +6,14 @@ import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@Composable @Composable
fun border() = MaterialTheme.colors.onSurface.copy(alpha = .5f) fun border() = MaterialTheme.colorScheme.onSurface.copy(alpha = .5f)
@Composable @Composable
fun OutlinedBox( fun OutlinedBox(

@ -3,13 +3,13 @@ package org.tasks.compose
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.DropdownMenu
import androidx.compose.material.DropdownMenuItem
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ArrowDropDown import androidx.compose.material.icons.outlined.ArrowDropDown
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -34,11 +34,14 @@ fun OutlinedSpinner(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(start = 8.dp), modifier = Modifier.padding(start = 8.dp),
) { ) {
Text(text = text) Text(
text = text,
color = MaterialTheme.colorScheme.onSurface,
)
Icon( Icon(
imageVector = Icons.Outlined.ArrowDropDown, imageVector = Icons.Outlined.ArrowDropDown,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colors.onSurface, tint = MaterialTheme.colorScheme.onSurface,
) )
} }
DropdownMenu( DropdownMenu(
@ -52,10 +55,11 @@ fun OutlinedSpinner(
expanded = false expanded = false
onSelected(index) onSelected(index)
}, },
content = { text = {
Text( Text(
text = item, text = item,
style = MaterialTheme.typography.body2, style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurface,
) )
}, },
) )

@ -8,9 +8,9 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.TextFieldDefaults import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -26,7 +26,7 @@ import org.tasks.extensions.formatNumber
import org.tasks.extensions.parseInteger import org.tasks.extensions.parseInteger
import java.util.Locale import java.util.Locale
@OptIn(ExperimentalMaterialApi::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun OutlinedNumberInput( fun OutlinedNumberInput(
number: Int, number: Int,
@ -52,8 +52,8 @@ fun OutlinedNumberInput(
?: 0 ?: 0
onTextChanged(newValue) onTextChanged(newValue)
}, },
textStyle = MaterialTheme.typography.body1.copy( textStyle = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
), ),
modifier = Modifier modifier = Modifier
@ -70,12 +70,12 @@ fun OutlinedNumberInput(
.width(60.dp) .width(60.dp)
.height(45.dp) .height(45.dp)
.fillMaxWidth(), .fillMaxWidth(),
cursorBrush = SolidColor(MaterialTheme.colors.onBackground), cursorBrush = SolidColor(MaterialTheme.colorScheme.onSurface),
interactionSource = interactionSource, interactionSource = interactionSource,
singleLine = true, singleLine = true,
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
) { ) {
TextFieldDefaults.TextFieldDecorationBox( TextFieldDefaults.DecorationBox(
value = number.toString(), value = number.toString(),
innerTextField = it, innerTextField = it,
singleLine = true, singleLine = true,

@ -11,11 +11,10 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.MaterialTheme.colors import androidx.compose.material3.Text
import androidx.compose.material.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -37,6 +36,7 @@ import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_NO_RESPONSE
import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_UNKNOWN import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_UNKNOWN
import org.tasks.data.entity.Principal import org.tasks.data.entity.Principal
import org.tasks.data.entity.PrincipalAccess import org.tasks.data.entity.PrincipalAccess
import org.tasks.themes.TasksTheme
private val principals = listOf( private val principals = listOf(
PrincipalWithAccess( PrincipalWithAccess(
@ -52,14 +52,14 @@ private val principals = listOf(
@Preview(showBackground = true) @Preview(showBackground = true)
@Preview(showBackground = true, backgroundColor = 0x202124, uiMode = UI_MODE_NIGHT_YES) @Preview(showBackground = true, backgroundColor = 0x202124, uiMode = UI_MODE_NIGHT_YES)
@Composable @Composable
private fun Owner() = MaterialTheme { private fun Owner() = TasksTheme {
ListSettingsComposables.PrincipalList(principals) {} ListSettingsComposables.PrincipalList(principals) {}
} }
@Preview(showBackground = true) @Preview(showBackground = true)
@Preview(showBackground = true, backgroundColor = 0x202124, uiMode = UI_MODE_NIGHT_YES) @Preview(showBackground = true, backgroundColor = 0x202124, uiMode = UI_MODE_NIGHT_YES)
@Composable @Composable
private fun NotOwner() = MaterialTheme { private fun NotOwner() = TasksTheme {
ListSettingsComposables.PrincipalList(principals, null) ListSettingsComposables.PrincipalList(principals, null)
} }
@ -79,8 +79,8 @@ object ListSettingsComposables {
) { ) {
Text( Text(
stringResource(R.string.list_members), stringResource(R.string.list_members),
style = MaterialTheme.typography.h6, style = MaterialTheme.typography.titleLarge,
color = colors.onBackground color = MaterialTheme.colorScheme.onSurface,
) )
Spacer(Modifier.height(HALF_KEYLINE)) Spacer(Modifier.height(HALF_KEYLINE))
principals.forEach { principals.forEach {
@ -108,7 +108,7 @@ object ListSettingsComposables {
Icon( Icon(
painter = painterResource(R.drawable.ic_outline_perm_identity_24px), painter = painterResource(R.drawable.ic_outline_perm_identity_24px),
contentDescription = null, contentDescription = null,
tint = colors.onBackground, tint = MaterialTheme.colorScheme.onSurface,
modifier = Modifier modifier = Modifier
.padding(end = KEYLINE_FIRST) .padding(end = KEYLINE_FIRST)
.alpha(ICON_ALPHA), .alpha(ICON_ALPHA),
@ -121,8 +121,8 @@ object ListSettingsComposables {
Column { Column {
Text( Text(
principal.name, principal.name,
style = MaterialTheme.typography.body1, style = MaterialTheme.typography.bodyLarge,
color = colors.onBackground, color = MaterialTheme.colorScheme.onSurface,
) )
if (principal.inviteStatus != INVITE_ACCEPTED) { if (principal.inviteStatus != INVITE_ACCEPTED) {
Text( Text(
@ -135,10 +135,10 @@ object ListSettingsComposables {
R.string.invite_invalid R.string.invite_invalid
else -> throw IllegalStateException() else -> throw IllegalStateException()
}), }),
style = MaterialTheme.typography.body2, style = MaterialTheme.typography.bodyMedium,
color = when (principal.inviteStatus) { color = when (principal.inviteStatus) {
INVITE_DECLINED, INVITE_INVALID -> colorResource(R.color.overdue) INVITE_DECLINED, INVITE_INVALID -> colorResource(R.color.overdue)
else -> colors.onBackground else -> MaterialTheme.colorScheme.onSurface
}, },
) )
} }
@ -155,7 +155,7 @@ object ListSettingsComposables {
Icon( Icon(
painter = painterResource(R.drawable.ic_outline_clear_24px), painter = painterResource(R.drawable.ic_outline_clear_24px),
contentDescription = null, contentDescription = null,
tint = colors.onBackground, tint = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.alpha(ICON_ALPHA) modifier = Modifier.alpha(ICON_ALPHA)
) )
} }

@ -5,8 +5,8 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -18,8 +18,8 @@ import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.themes.TasksTheme
@Composable @Composable
fun ServerSelector(selected: Int, onSelected: (Int) -> Unit) { fun ServerSelector(selected: Int, onSelected: (Int) -> Unit) {
@ -29,7 +29,7 @@ fun ServerSelector(selected: Int, onSelected: (Int) -> Unit) {
.clickable { expanded = !expanded }) { .clickable { expanded = !expanded }) {
Text( Text(
text = stringResource(id = R.string.caldav_server_type), text = stringResource(id = R.string.caldav_server_type),
style = MaterialTheme.typography.caption.copy( style = MaterialTheme.typography.bodySmall.copy(
color = colorResource(id = R.color.text_secondary) color = colorResource(id = R.color.text_secondary)
), ),
) )
@ -47,7 +47,7 @@ fun ServerSelector(selected: Int, onSelected: (Int) -> Unit) {
setExpanded = { expanded = it }, setExpanded = { expanded = it },
modifier = Modifier modifier = Modifier
.padding(vertical = 6.dp) .padding(vertical = 6.dp)
.fillMaxWidth() .fillMaxWidth(),
) )
} }
} }
@ -56,6 +56,6 @@ fun ServerSelector(selected: Int, onSelected: (Int) -> Unit) {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun ServerSelectorPreview() = fun ServerSelectorPreview() =
MdcTheme { TasksTheme {
ServerSelector(1) {} ServerSelector(1) {}
} }

@ -5,15 +5,14 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.AlertDialog
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedTextField
import androidx.compose.material.Text
import androidx.compose.material.darkColors
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Email import androidx.compose.material.icons.outlined.Email
import androidx.compose.material.icons.outlined.Person import androidx.compose.material.icons.outlined.Person
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -27,28 +26,29 @@ import org.tasks.R
import org.tasks.compose.Constants.TextButton import org.tasks.compose.Constants.TextButton
import org.tasks.compose.Constants.textFieldColors import org.tasks.compose.Constants.textFieldColors
import org.tasks.compose.ShareInvite.ShareInvite import org.tasks.compose.ShareInvite.ShareInvite
import org.tasks.themes.TasksTheme
@Preview(showBackground = true, backgroundColor = 0xFFFFFF) @Preview(showBackground = true, backgroundColor = 0xFFFFFF)
@Composable @Composable
private fun Invite() = MaterialTheme { private fun Invite() = TasksTheme {
ShareInvite(true, remember { mutableStateOf("") }) ShareInvite(true, remember { mutableStateOf("") })
} }
@Preview(showBackground = true, backgroundColor = 0x202124) @Preview(showBackground = true, backgroundColor = 0x202124)
@Composable @Composable
private fun InviteDark() = MaterialTheme(darkColors()) { private fun InviteDark() = TasksTheme(useDarkTheme = true) {
ShareInvite(false, remember { mutableStateOf("") }) ShareInvite(false, remember { mutableStateOf("") })
} }
@Preview(showBackground = true, backgroundColor = 0xFFFFFF) @Preview(showBackground = true, backgroundColor = 0xFFFFFF)
@Composable @Composable
private fun InviteFilled() = MaterialTheme { private fun InviteFilled() = TasksTheme {
ShareInvite(true, remember { mutableStateOf("user@example.com") }) ShareInvite(true, remember { mutableStateOf("user@example.com") })
} }
@Preview(showBackground = true, backgroundColor = 0x202124) @Preview(showBackground = true, backgroundColor = 0x202124)
@Composable @Composable
private fun InviteDarkFilled() = MaterialTheme(darkColors()) { private fun InviteDarkFilled() = TasksTheme(useDarkTheme = true) {
ShareInvite(false, remember { mutableStateOf("user@example.com") }) ShareInvite(false, remember { mutableStateOf("user@example.com") })
} }
@ -84,14 +84,20 @@ object ShareInvite {
Column(modifier = Modifier.fillMaxWidth()) { Column(modifier = Modifier.fillMaxWidth()) {
Text( Text(
stringResource(R.string.share_list), stringResource(R.string.share_list),
style = MaterialTheme.typography.h6, style = MaterialTheme.typography.titleLarge,
color = MaterialTheme.colorScheme.onSurface,
) )
Spacer(Modifier.height(Constants.KEYLINE_FIRST)) Spacer(Modifier.height(Constants.KEYLINE_FIRST))
val label = stringResource(if (email) R.string.email else R.string.user) val label = stringResource(if (email) R.string.email else R.string.user)
OutlinedTextField( OutlinedTextField(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
value = text.value, value = text.value,
label = { Text(label) }, label = {
Text(
text = label,
color = MaterialTheme.colorScheme.onSurface,
)
},
keyboardOptions = KeyboardOptions( keyboardOptions = KeyboardOptions(
keyboardType = if (email) KeyboardType.Email else KeyboardType.Text keyboardType = if (email) KeyboardType.Email else KeyboardType.Text
), ),
@ -102,7 +108,7 @@ object ShareInvite {
contentDescription = label contentDescription = label
) )
}, },
textStyle = MaterialTheme.typography.body1, textStyle = MaterialTheme.typography.bodyLarge,
colors = textFieldColors(), colors = textFieldColors(),
) )
} }

@ -2,21 +2,26 @@ package org.tasks.compose
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.material.TextButton import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.auth.SignInActivity import org.tasks.auth.SignInActivity
import org.tasks.themes.TasksTheme
@Composable @Composable
fun SignInDialog( fun SignInDialog(
@ -27,12 +32,13 @@ fun SignInDialog(
Column( Column(
modifier = Modifier modifier = Modifier
.verticalScroll(rememberScrollState()) .verticalScroll(rememberScrollState())
.background(MaterialTheme.colors.surface) .background(MaterialTheme.colorScheme.surface)
) { ) {
Text( Text(
text = stringResource(id = R.string.sign_in_to_tasks), text = stringResource(id = R.string.sign_in_to_tasks),
style = MaterialTheme.typography.h6, style = MaterialTheme.typography.titleLarge,
modifier = Modifier.padding(16.dp), modifier = Modifier.padding(16.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
SyncAccount( SyncAccount(
title = R.string.sign_in_with_google, title = R.string.sign_in_with_google,
@ -44,7 +50,7 @@ fun SignInDialog(
title = R.string.sign_in_with_github, title = R.string.sign_in_with_github,
description = R.string.github_sponsors, description = R.string.github_sponsors,
icon = R.drawable.ic_octocat, icon = R.drawable.ic_octocat,
tint = MaterialTheme.colors.onSurface.copy( tint = MaterialTheme.colorScheme.onSurface.copy(
alpha = ContentAlpha.medium alpha = ContentAlpha.medium
), ),
onClick = { selected(SignInActivity.Platform.GITHUB) } onClick = { selected(SignInActivity.Platform.GITHUB) }
@ -55,11 +61,17 @@ fun SignInDialog(
.padding(16.dp) .padding(16.dp)
) { ) {
TextButton(onClick = help) { TextButton(onClick = help) {
Text(text = stringResource(id = R.string.help)) Text(
text = stringResource(id = R.string.help),
color = MaterialTheme.colorScheme.onSurface,
)
} }
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
TextButton(onClick = cancel) { TextButton(onClick = cancel) {
Text(text = stringResource(id = R.string.cancel)) Text(
text = stringResource(id = R.string.cancel),
color = MaterialTheme.colorScheme.onSurface,
)
} }
} }
} }
@ -69,15 +81,17 @@ fun SignInDialog(
fun ConsentDialog( fun ConsentDialog(
agree: (Boolean) -> Unit, agree: (Boolean) -> Unit,
) { ) {
Column(Modifier.background(MaterialTheme.colors.surface)) { Column(Modifier.background(MaterialTheme.colorScheme.surface)) {
Text( Text(
text = stringResource(id = R.string.sign_in_to_tasks), text = stringResource(id = R.string.sign_in_to_tasks),
style = MaterialTheme.typography.h6, style = MaterialTheme.typography.titleLarge,
modifier = Modifier.padding(16.dp), modifier = Modifier.padding(16.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
Text( Text(
text = stringResource(id = R.string.sign_in_to_tasks_disclosure), text = stringResource(id = R.string.sign_in_to_tasks_disclosure),
modifier = Modifier.padding(horizontal = 16.dp), modifier = Modifier.padding(horizontal = 16.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
Row( Row(
horizontalArrangement = Arrangement.End, horizontalArrangement = Arrangement.End,
@ -86,10 +100,16 @@ fun ConsentDialog(
.padding(16.dp), .padding(16.dp),
) { ) {
TextButton(onClick = { agree(false) }) { TextButton(onClick = { agree(false) }) {
Text(text = stringResource(id = R.string.consent_deny)) Text(
text = stringResource(id = R.string.consent_deny),
color = MaterialTheme.colorScheme.onSurface,
)
} }
TextButton(onClick = { agree(true) }) { TextButton(onClick = { agree(true) }) {
Text(text = stringResource(id = R.string.consent_agree)) Text(
text = stringResource(id = R.string.consent_agree),
color = MaterialTheme.colorScheme.onSurface,
)
} }
} }
} }
@ -99,7 +119,7 @@ fun ConsentDialog(
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun SignInDialogPreview() { fun SignInDialogPreview() {
MdcTheme { TasksTheme {
SignInDialog(selected = {}, help = {}, cancel = {}) SignInDialog(selected = {}, help = {}, cancel = {})
} }
} }
@ -108,7 +128,7 @@ fun SignInDialogPreview() {
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun DisclosurePreview() { fun DisclosurePreview() {
MdcTheme { TasksTheme {
ConsentDialog(agree = {}) ConsentDialog(agree = {})
} }
} }

@ -1,12 +1,13 @@
package org.tasks.compose package org.tasks.compose
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.material.DropdownMenu
import androidx.compose.material.DropdownMenuItem
import androidx.compose.material.Icon
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ArrowDropDown import androidx.compose.material.icons.outlined.ArrowDropDown
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -23,17 +24,28 @@ fun <T> Spinner(
val selectedIndex = values.indexOf(selected) val selectedIndex = values.indexOf(selected)
val selectedOption = options[selectedIndex] val selectedOption = options[selectedIndex]
Row(modifier = modifier) { Row(modifier = modifier) {
Text(text = selectedOption) Text(
Icon(imageVector = Icons.Outlined.ArrowDropDown, contentDescription = "") text = selectedOption,
color = MaterialTheme.colorScheme.onSurface,
)
Icon(
imageVector = Icons.Outlined.ArrowDropDown,
contentDescription = "",
tint = MaterialTheme.colorScheme.onSurface,
)
DropdownMenu(expanded = expanded, onDismissRequest = { DropdownMenu(expanded = expanded, onDismissRequest = {
setExpanded(false) setExpanded(false)
}) { }) {
options.forEach { options.forEach {
DropdownMenuItem(onClick = { DropdownMenuItem(
onSelected(values[options.indexOf(it)]) text = {
}) { Text(
Text(text = it) text = it,
} color = MaterialTheme.colorScheme.onSurface,
)
},
onClick = { onSelected(values[options.indexOf(it)]) }
)
} }
} }
} }

@ -3,11 +3,34 @@ package org.tasks.compose
import android.content.res.Configuration.UI_MODE_NIGHT_YES import android.content.res.Configuration.UI_MODE_NIGHT_YES
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.* import androidx.compose.material3.Badge
import androidx.compose.runtime.* import androidx.compose.material3.BadgedBox
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Divider
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Slider
import androidx.compose.material3.SliderDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@ -22,12 +45,12 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.compose.Constants.HALF_KEYLINE import org.tasks.compose.Constants.HALF_KEYLINE
import org.tasks.compose.Constants.KEYLINE_FIRST import org.tasks.compose.Constants.KEYLINE_FIRST
import org.tasks.compose.PurchaseText.PurchaseText import org.tasks.compose.PurchaseText.PurchaseText
import org.tasks.extensions.Context.openUri import org.tasks.extensions.Context.openUri
import org.tasks.themes.TasksTheme
object PurchaseText { object PurchaseText {
private const val POPPER = "\uD83C\uDF89" private const val POPPER = "\uD83C\uDF89"
@ -152,9 +175,9 @@ object PurchaseText {
val context = LocalContext.current val context = LocalContext.current
OutlinedButton( OutlinedButton(
onClick = { context.openUri(R.string.url_sponsor) }, onClick = { context.openUri(R.string.url_sponsor) },
colors = ButtonDefaults.textButtonColors( colors = ButtonDefaults.outlinedButtonColors(
backgroundColor = MaterialTheme.colors.secondary, containerColor = MaterialTheme.colorScheme.secondary,
contentColor = MaterialTheme.colors.onSecondary contentColor = MaterialTheme.colorScheme.onSecondary
), ),
modifier = Modifier.padding(KEYLINE_FIRST, 0.dp, KEYLINE_FIRST, KEYLINE_FIRST) modifier = Modifier.padding(KEYLINE_FIRST, 0.dp, KEYLINE_FIRST, KEYLINE_FIRST)
) { ) {
@ -165,8 +188,8 @@ object PurchaseText {
) )
Text( Text(
text = stringResource(R.string.github_sponsor), text = stringResource(R.string.github_sponsor),
color = MaterialTheme.colors.onSecondary, color = MaterialTheme.colorScheme.onSecondary,
style = MaterialTheme.typography.body1 style = MaterialTheme.typography.bodyLarge
) )
} }
} }
@ -177,8 +200,8 @@ object PurchaseText {
Text( Text(
modifier = Modifier.padding(KEYLINE_FIRST, KEYLINE_FIRST, KEYLINE_FIRST, 0.dp), modifier = Modifier.padding(KEYLINE_FIRST, KEYLINE_FIRST, KEYLINE_FIRST, 0.dp),
text = stringResource(resId), text = stringResource(resId),
color = MaterialTheme.colors.onBackground, color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.body1, style = MaterialTheme.typography.bodyLarge,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
) )
} }
@ -196,7 +219,7 @@ object PurchaseText {
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
) { ) {
Divider(color = MaterialTheme.colors.onSurface, thickness = 0.25.dp) Divider(color = MaterialTheme.colorScheme.onSurface, thickness = 0.25.dp)
Spacer(Modifier.height(KEYLINE_FIRST)) Spacer(Modifier.height(KEYLINE_FIRST))
if (nameYourPrice.value) { if (nameYourPrice.value) {
NameYourPrice(sliderPosition, subscribe) NameYourPrice(sliderPosition, subscribe)
@ -210,8 +233,8 @@ object PurchaseText {
pagerState.currentPage = 0 pagerState.currentPage = 0
}, },
colors = ButtonDefaults.textButtonColors( colors = ButtonDefaults.textButtonColors(
backgroundColor = if (solidButton) containerColor = if (solidButton)
MaterialTheme.colors.secondary MaterialTheme.colorScheme.primary
else else
Color.Transparent Color.Transparent
) )
@ -229,20 +252,20 @@ object PurchaseText {
R.string.more_options R.string.more_options
), ),
color = if (solidButton) color = if (solidButton)
MaterialTheme.colors.onSecondary MaterialTheme.colorScheme.onSecondary
else else
MaterialTheme.colors.secondary, MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.body1 style = MaterialTheme.typography.bodyLarge
) )
} }
} }
Text( Text(
text = stringResource(R.string.pro_free_trial), text = stringResource(R.string.pro_free_trial),
style = MaterialTheme.typography.caption, style = MaterialTheme.typography.bodySmall,
modifier = Modifier modifier = Modifier
.fillMaxWidth(.75f) .fillMaxWidth(.75f)
.padding(KEYLINE_FIRST), .padding(KEYLINE_FIRST),
color = MaterialTheme.colors.onBackground, color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
) )
} }
@ -281,7 +304,7 @@ object PurchaseText {
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(0.dp, 4.dp), .padding(0.dp, 4.dp),
color = MaterialTheme.colors.onBackground, color = MaterialTheme.colorScheme.onBackground,
style = TextStyle( style = TextStyle(
fontWeight = FontWeight.Bold, fontWeight = FontWeight.Bold,
fontSize = 14.sp, fontSize = 14.sp,
@ -292,7 +315,7 @@ object PurchaseText {
Text( Text(
text = stringResource(if (disabled) R.string.account_not_included else feature.description), text = stringResource(if (disabled) R.string.account_not_included else feature.description),
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
color = if (disabled) Color.Red else MaterialTheme.colors.onBackground, color = if (disabled) Color.Red else MaterialTheme.colorScheme.onBackground,
style = TextStyle( style = TextStyle(
fontWeight = if (disabled) FontWeight.Bold else FontWeight.Normal, fontWeight = if (disabled) FontWeight.Bold else FontWeight.Normal,
fontSize = 12.sp, fontSize = 12.sp,
@ -343,7 +366,7 @@ object PurchaseText {
Button( Button(
onClick = { onClick(price, monthly) }, onClick = { onClick(price, monthly) },
colors = ButtonDefaults.textButtonColors( colors = ButtonDefaults.textButtonColors(
backgroundColor = MaterialTheme.colors.secondary containerColor = MaterialTheme.colorScheme.secondary
) )
) { ) {
Text( Text(
@ -351,14 +374,14 @@ object PurchaseText {
if (monthly) R.string.price_per_month else R.string.price_per_year, if (monthly) R.string.price_per_month else R.string.price_per_year,
price price
), ),
color = MaterialTheme.colors.onSecondary, color = MaterialTheme.colorScheme.onSecondary,
style = MaterialTheme.typography.body1 style = MaterialTheme.typography.bodyLarge
) )
} }
Text( Text(
text = popperText, text = popperText,
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.caption, style = MaterialTheme.typography.bodySmall,
) )
} }
} }
@ -377,8 +400,8 @@ object PurchaseText {
valueRange = 1f..25f, valueRange = 1f..25f,
steps = 25, steps = 25,
colors = SliderDefaults.colors( colors = SliderDefaults.colors(
thumbColor = MaterialTheme.colors.secondary, thumbColor = MaterialTheme.colorScheme.secondary,
activeTrackColor = MaterialTheme.colors.secondary, activeTrackColor = MaterialTheme.colorScheme.secondary,
inactiveTrackColor = colorResource(R.color.text_tertiary), inactiveTrackColor = colorResource(R.color.text_tertiary),
activeTickColor = Color.Transparent, activeTickColor = Color.Transparent,
inactiveTickColor = Color.Transparent inactiveTickColor = Color.Transparent
@ -415,7 +438,7 @@ object PurchaseText {
@Preview(showBackground = true, uiMode = UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = UI_MODE_NIGHT_YES)
@Composable @Composable
private fun PurchaseDialogPreview() { private fun PurchaseDialogPreview() {
MdcTheme { TasksTheme {
PurchaseText { _, _ -> } PurchaseText { _, _ -> }
} }
} }
@ -424,7 +447,7 @@ private fun PurchaseDialogPreview() {
@Preview(showBackground = true, uiMode = UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = UI_MODE_NIGHT_YES)
@Composable @Composable
private fun PurchaseDialogPreviewSolid() { private fun PurchaseDialogPreviewSolid() {
MdcTheme { TasksTheme {
PurchaseText(solidButton = true) { _, _ -> } PurchaseText(solidButton = true) { _, _ -> }
} }
} }
@ -433,7 +456,7 @@ private fun PurchaseDialogPreviewSolid() {
@Preview(showBackground = true, uiMode = UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = UI_MODE_NIGHT_YES)
@Composable @Composable
private fun PurchaseDialogPreviewBadge() { private fun PurchaseDialogPreviewBadge() {
MdcTheme { TasksTheme {
PurchaseText(badge = true) { _, _ -> } PurchaseText(badge = true) { _, _ -> }
} }
} }

@ -3,10 +3,14 @@ package org.tasks.compose
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Column
import androidx.compose.material.Icon import androidx.compose.foundation.layout.Row
import androidx.compose.material.MaterialTheme import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.Text import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -39,11 +43,13 @@ fun SyncAccount(
Column { Column {
Text( Text(
text = stringResource(id = title), text = stringResource(id = title),
style = MaterialTheme.typography.body1, style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onSurface,
) )
Text( Text(
text = stringResource(id = description), text = stringResource(id = description),
style = MaterialTheme.typography.body2, style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurface,
) )
} }
} }

@ -2,7 +2,8 @@ package org.tasks.compose
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha
@ -14,5 +15,6 @@ fun TaskEditIcon(@DrawableRes id: Int, modifier: Modifier = Modifier) {
painter = painterResource(id = id), painter = painterResource(id = id),
contentDescription = null, contentDescription = null,
modifier = modifier.alpha(ContentAlpha.medium), modifier = modifier.alpha(ContentAlpha.medium),
tint = MaterialTheme.colorScheme.onSurface,
) )
} }

@ -22,8 +22,6 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Add import androidx.compose.material.icons.outlined.Add
import androidx.compose.material.icons.outlined.ExpandMore import androidx.compose.material.icons.outlined.ExpandMore
@ -32,6 +30,8 @@ import androidx.compose.material.icons.outlined.PermIdentity
import androidx.compose.material.icons.outlined.SyncProblem import androidx.compose.material.icons.outlined.SyncProblem
import androidx.compose.material3.Divider import androidx.compose.material3.Divider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -45,7 +45,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.astrid.api.FilterImpl import com.todoroo.astrid.api.FilterImpl
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
@ -53,6 +52,7 @@ import org.tasks.R
import org.tasks.Tasks.Companion.IS_GENERIC import org.tasks.Tasks.Companion.IS_GENERIC
import org.tasks.extensions.formatNumber import org.tasks.extensions.formatNumber
import org.tasks.filters.NavigationDrawerSubheader import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.themes.TasksTheme
@Composable @Composable
fun TaskListDrawer( fun TaskListDrawer(
@ -138,7 +138,7 @@ private fun FilterItem(
modifier = Modifier modifier = Modifier
.background( .background(
if (item.selected) if (item.selected)
MaterialTheme.colors.onSurface.copy(alpha = .1f) MaterialTheme.colorScheme.onSurface.copy(alpha = .1f)
else else
Color.Transparent Color.Transparent
) )
@ -151,7 +151,7 @@ private fun FilterItem(
Spacer(modifier = Modifier.width(16.dp)) Spacer(modifier = Modifier.width(16.dp))
Text( Text(
text = item.title, text = item.title,
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
) )
if (item.shareCount > 0) { if (item.shareCount > 0) {
@ -161,7 +161,7 @@ private fun FilterItem(
else -> Icons.Outlined.PeopleOutline else -> Icons.Outlined.PeopleOutline
}, },
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colors.onSurface.copy( tint = MaterialTheme.colorScheme.onSurface.copy(
alpha = ContentAlpha.medium alpha = ContentAlpha.medium
), ),
) )
@ -174,7 +174,7 @@ private fun FilterItem(
val locale = LocalConfiguration.current.locales[0] val locale = LocalConfiguration.current.locales[0]
Text( Text(
text = locale.formatNumber(item.count), text = locale.formatNumber(item.count),
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
) )
} }
} }
@ -192,7 +192,7 @@ private fun MenuAction(
Spacer(modifier = Modifier.width(16.dp)) Spacer(modifier = Modifier.width(16.dp))
Text( Text(
text = stringResource(id = title), text = stringResource(id = title),
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
) )
} }
@ -205,7 +205,7 @@ private fun DrawerIcon(icon: Int, color: Int = 0) {
painter = painterResource(id = icon), painter = painterResource(id = icon),
contentDescription = null, contentDescription = null,
tint = when (color) { tint = when (color) {
0 -> MaterialTheme.colors.onSurface 0 -> MaterialTheme.colorScheme.onSurface
else -> Color(color) else -> Color(color)
}.copy(alpha = ContentAlpha.medium) }.copy(alpha = ContentAlpha.medium)
) )
@ -228,7 +228,7 @@ private fun HeaderItem(
Text( Text(
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
text = item.title, text = item.title,
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
) )
IconButton(onClick = toggleCollapsed) { IconButton(onClick = toggleCollapsed) {
val rotation by animateFloatAsState( val rotation by animateFloatAsState(
@ -240,7 +240,7 @@ private fun HeaderItem(
modifier = Modifier.rotate(rotation), modifier = Modifier.rotate(rotation),
imageVector = Icons.Outlined.ExpandMore, imageVector = Icons.Outlined.ExpandMore,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colors.onSurface, tint = MaterialTheme.colorScheme.onSurface,
) )
} }
if (canAdd) { if (canAdd) {
@ -248,7 +248,7 @@ private fun HeaderItem(
Icon( Icon(
imageVector = Icons.Outlined.Add, imageVector = Icons.Outlined.Add,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colors.onSurface, tint = MaterialTheme.colorScheme.onSurface,
) )
} }
} }
@ -257,7 +257,7 @@ private fun HeaderItem(
Icon( Icon(
imageVector = Icons.Outlined.SyncProblem, imageVector = Icons.Outlined.SyncProblem,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colors.error, tint = MaterialTheme.colorScheme.error,
) )
} }
} }
@ -287,7 +287,7 @@ private fun MenuRow(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun MenuPreview() { fun MenuPreview() {
MdcTheme { TasksTheme {
TaskListDrawer( TaskListDrawer(
filters = persistentListOf( filters = persistentListOf(
DrawerItem.Filter( DrawerItem.Filter(

@ -3,7 +3,7 @@ package org.tasks.compose.drawer
import android.content.Intent import android.content.Intent
import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
@ -75,7 +75,7 @@ fun TasksMenu(
} }
ModalBottomSheet( ModalBottomSheet(
sheetState = sheetState, sheetState = sheetState,
containerColor = MaterialTheme.colors.surface, containerColor = MaterialTheme.colorScheme.surface,
onDismissRequest = { dismiss() } onDismissRequest = { dismiss() }
) { ) {
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()

@ -8,8 +8,8 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -22,7 +22,6 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.PermissionStatus import com.google.accompanist.permissions.PermissionStatus
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.astrid.ui.ReminderControlSetViewModel import com.todoroo.astrid.ui.ReminderControlSetViewModel
import org.tasks.R import org.tasks.R
import org.tasks.compose.AddAlarmDialog import org.tasks.compose.AddAlarmDialog
@ -33,6 +32,7 @@ import org.tasks.compose.TaskEditRow
import org.tasks.compose.collectAsStateLifecycleAware import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm
import org.tasks.reminders.AlarmToString import org.tasks.reminders.AlarmToString
import org.tasks.themes.TasksTheme
import java.util.Locale import java.util.Locale
@OptIn(ExperimentalPermissionsApi::class, ExperimentalComposeUiApi::class) @OptIn(ExperimentalPermissionsApi::class, ExperimentalComposeUiApi::class)
@ -85,7 +85,7 @@ fun AlarmRow(
) )
Text( Text(
text = stringResource(id = R.string.enable_reminders_description), text = stringResource(id = R.string.enable_reminders_description),
style = MaterialTheme.typography.caption, style = MaterialTheme.typography.bodySmall,
color = colorResource(id = R.color.red_500), color = colorResource(id = R.color.red_500),
) )
Spacer(modifier = Modifier.height(20.dp)) Spacer(modifier = Modifier.height(20.dp))
@ -163,12 +163,13 @@ fun Alarms(
else -> R.string.ring_once else -> R.string.ring_once
} }
), ),
style = MaterialTheme.typography.body1.copy( style = MaterialTheme.typography.bodyLarge.copy(
textDecoration = TextDecoration.Underline textDecoration = TextDecoration.Underline
), ),
modifier = Modifier modifier = Modifier
.padding(vertical = 12.dp, horizontal = 16.dp) .padding(vertical = 12.dp, horizontal = 16.dp)
.clickable(onClick = openRingType) .clickable(onClick = openRingType),
color = MaterialTheme.colorScheme.onSurface,
) )
} }
} }
@ -192,6 +193,7 @@ private fun AlarmRow(
modifier = Modifier modifier = Modifier
.padding(vertical = 12.dp) .padding(vertical = 12.dp)
.weight(weight = 1f), .weight(weight = 1f),
color = MaterialTheme.colorScheme.onSurface,
) )
ClearButton(onClick = remove) ClearButton(onClick = remove)
} }
@ -202,7 +204,7 @@ private fun AlarmRow(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun NoAlarms() { fun NoAlarms() {
MdcTheme { TasksTheme {
AlarmRow( AlarmRow(
alarms = emptyList(), alarms = emptyList(),
ringMode = 0, ringMode = 0,
@ -222,7 +224,7 @@ fun NoAlarms() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun PermissionDenied() { fun PermissionDenied() {
MdcTheme { TasksTheme {
AlarmRow( AlarmRow(
alarms = emptyList(), alarms = emptyList(),
ringMode = 0, ringMode = 0,

@ -3,15 +3,31 @@ package org.tasks.compose.edit
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.border import androidx.compose.foundation.border
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.* import androidx.compose.material.icons.outlined.Add
import androidx.compose.runtime.* import androidx.compose.material.icons.outlined.Cancel
import androidx.compose.material.icons.outlined.Description
import androidx.compose.material.icons.outlined.Image
import androidx.compose.material.icons.outlined.Movie
import androidx.compose.material.icons.outlined.MusicNote
import androidx.compose.material.icons.outlined.PlayCircle
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha
@ -34,13 +50,13 @@ import coil.decode.VideoFrameDecoder
import coil.request.CachePolicy import coil.request.CachePolicy
import coil.request.ImageRequest import coil.request.ImageRequest
import com.google.accompanist.flowlayout.FlowRow import com.google.accompanist.flowlayout.FlowRow
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities
import org.tasks.R import org.tasks.R
import org.tasks.compose.DisabledText import org.tasks.compose.DisabledText
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
import org.tasks.data.entity.TaskAttachment import org.tasks.data.entity.TaskAttachment
import org.tasks.files.FileHelper import org.tasks.files.FileHelper
import org.tasks.themes.TasksTheme
private val SIZE = 128.dp private val SIZE = 128.dp
@ -136,7 +152,7 @@ fun AttachmentRow(
.clickable { addAttachment() } .clickable { addAttachment() }
.border( .border(
width = 1.dp, width = 1.dp,
color = MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.medium), color = MaterialTheme.colorScheme.onSurface.copy(alpha = ContentAlpha.medium),
shape = RoundedCornerShape(8.dp), shape = RoundedCornerShape(8.dp),
), ),
) { ) {
@ -146,7 +162,7 @@ fun AttachmentRow(
modifier = Modifier modifier = Modifier
.size(48.dp) .size(48.dp)
.align(Alignment.Center), .align(Alignment.Center),
tint = MaterialTheme.colors.onSurface.copy( tint = MaterialTheme.colorScheme.onSurface.copy(
alpha = ContentAlpha.medium alpha = ContentAlpha.medium
), ),
) )
@ -178,7 +194,7 @@ fun NoThumbnail(
.clickable { open() } .clickable { open() }
.border( .border(
width = 1.dp, width = 1.dp,
color = MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.medium), color = MaterialTheme.colorScheme.onSurface.copy(alpha = ContentAlpha.medium),
shape = RoundedCornerShape(8.dp), shape = RoundedCornerShape(8.dp),
), ),
) { ) {
@ -194,15 +210,15 @@ fun NoThumbnail(
modifier = Modifier modifier = Modifier
.align(Alignment.CenterHorizontally) .align(Alignment.CenterHorizontally)
.alpha(ContentAlpha.medium), .alpha(ContentAlpha.medium),
tint = MaterialTheme.colors.onSurface.copy( tint = MaterialTheme.colorScheme.onSurface.copy(
alpha = ContentAlpha.medium alpha = ContentAlpha.medium
), ),
) )
Text( Text(
text = filename, text = filename,
style = MaterialTheme.typography.caption.copy( style = MaterialTheme.typography.bodySmall.copy(
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
), ),
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis, overflow = TextOverflow.Ellipsis,
@ -213,7 +229,7 @@ fun NoThumbnail(
} }
DeleteAttachment( DeleteAttachment(
onClick = { delete() }, onClick = { delete() },
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
) )
} }
} }
@ -239,7 +255,7 @@ fun BoxScope.DeleteAttachment(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun NoAttachments() { fun NoAttachments() {
MdcTheme { TasksTheme {
AttachmentRow( AttachmentRow(
attachments = emptyList(), attachments = emptyList(),
openAttachment = {}, openAttachment = {},
@ -253,7 +269,7 @@ fun NoAttachments() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun AttachmentPreview() { fun AttachmentPreview() {
MdcTheme { TasksTheme {
AttachmentRow( AttachmentRow(
attachments = listOf( attachments = listOf(
TaskAttachment( TaskAttachment(

@ -4,21 +4,22 @@ import android.content.res.Configuration
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.compose.DisabledText import org.tasks.compose.DisabledText
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
import org.tasks.themes.TasksTheme
@Composable @Composable
fun CalendarRow( fun CalendarRow(
@ -36,7 +37,8 @@ fun CalendarRow(
text = stringResource(id = R.string.gcal_TEA_showCalendar_label), text = stringResource(id = R.string.gcal_TEA_showCalendar_label),
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)
.padding(vertical = 20.dp) .padding(vertical = 20.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
IconButton( IconButton(
onClick = { clear() }, onClick = { clear() },
@ -53,6 +55,7 @@ fun CalendarRow(
Text( Text(
text = selectedCalendar, text = selectedCalendar,
modifier = Modifier.padding(vertical = 20.dp), modifier = Modifier.padding(vertical = 20.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
} else { } else {
DisabledText( DisabledText(
@ -69,7 +72,7 @@ fun CalendarRow(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun NoCalendar() { fun NoCalendar() {
MdcTheme { TasksTheme {
CalendarRow(eventUri = null, selectedCalendar = null, onClick = {}, clear = {}) CalendarRow(eventUri = null, selectedCalendar = null, onClick = {}, clear = {})
} }
} }
@ -78,7 +81,7 @@ fun NoCalendar() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun NewCalendar() { fun NewCalendar() {
MdcTheme { TasksTheme {
CalendarRow(eventUri = null, selectedCalendar = "Personal", onClick = {}, clear = {}) CalendarRow(eventUri = null, selectedCalendar = "Personal", onClick = {}, clear = {})
} }
} }
@ -87,7 +90,7 @@ fun NewCalendar() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun ExistingCalendar() { fun ExistingCalendar() {
MdcTheme { TasksTheme {
CalendarRow(eventUri = "abcd", selectedCalendar = null, onClick = {}, clear = {}) CalendarRow(eventUri = "abcd", selectedCalendar = null, onClick = {}, clear = {})
} }
} }

@ -7,8 +7,8 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -62,7 +62,10 @@ fun Comment(
) { ) {
comment.message?.let { comment.message?.let {
// TODO: linkify text // TODO: linkify text
Text(text = it) Text(
text = it,
color = MaterialTheme.colorScheme.onSurface,
)
} }
comment.pictureUri?.let { comment.pictureUri?.let {
AsyncImage( AsyncImage(
@ -73,7 +76,8 @@ fun Comment(
} }
Text( Text(
text = DateUtilities.getLongDateStringWithTime(comment.created!!, Locale.getDefault()), text = DateUtilities.getLongDateStringWithTime(comment.created!!, Locale.getDefault()),
style = MaterialTheme.typography.caption, style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurface,
) )
} }
DeleteButton( DeleteButton(

@ -14,12 +14,12 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.widget.addTextChangedListener import androidx.core.widget.addTextChangedListener
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities
import org.tasks.R import org.tasks.R
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
import org.tasks.dialogs.Linkify import org.tasks.dialogs.Linkify
import org.tasks.markdown.MarkdownProvider import org.tasks.markdown.MarkdownProvider
import org.tasks.themes.TasksTheme
@Composable @Composable
fun DescriptionRow( fun DescriptionRow(
@ -85,7 +85,7 @@ fun DescriptionRow(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun EmptyDescriptionPreview() { fun EmptyDescriptionPreview() {
MdcTheme { TasksTheme {
DescriptionRow( DescriptionRow(
text = null, text = null,
onChanged = {}, onChanged = {},
@ -100,7 +100,7 @@ fun EmptyDescriptionPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun DescriptionPreview() { fun DescriptionPreview() {
MdcTheme { TasksTheme {
DescriptionRow( DescriptionRow(
text = """ text = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

@ -2,8 +2,8 @@ package org.tasks.compose.edit
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -11,10 +11,10 @@ import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.compose.DisabledText import org.tasks.compose.DisabledText
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
import org.tasks.themes.TasksTheme
@Composable @Composable
fun DueDateRow( fun DueDateRow(
@ -47,7 +47,7 @@ fun DueDate(dueDate: String?, overdue: Boolean) {
color = if (overdue) { color = if (overdue) {
colorResource(id = R.color.overdue) colorResource(id = R.color.overdue)
} else { } else {
MaterialTheme.colors.onSurface MaterialTheme.colorScheme.onSurface
}, },
modifier = Modifier.padding(top = 20.dp, bottom = 20.dp, end = 16.dp) modifier = Modifier.padding(top = 20.dp, bottom = 20.dp, end = 16.dp)
) )
@ -59,7 +59,7 @@ fun DueDate(dueDate: String?, overdue: Boolean) {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun DueDatePreview() { fun DueDatePreview() {
MdcTheme { TasksTheme {
DueDateRow( DueDateRow(
dueDate = "Today", dueDate = "Today",
overdue = false, overdue = false,
@ -72,7 +72,7 @@ fun DueDatePreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun NoDueDatePreview() { fun NoDueDatePreview() {
MdcTheme { TasksTheme {
DueDateRow( DueDateRow(
dueDate = null, dueDate = null,
overdue = false, overdue = false,

@ -3,18 +3,19 @@ package org.tasks.compose.edit
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.Text import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
import org.tasks.themes.TasksTheme
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.Locale
@Composable @Composable
fun InfoRow( fun InfoRow(
@ -33,7 +34,8 @@ fun InfoRow(
text = stringResource( text = stringResource(
id = R.string.sort_created_group, id = R.string.sort_created_group,
formatter.format(it) formatter.format(it)
) ),
color = MaterialTheme.colorScheme.onSurface,
) )
} }
modificationDate?.let { modificationDate?.let {
@ -41,7 +43,8 @@ fun InfoRow(
text = stringResource( text = stringResource(
id = R.string.sort_modified_group, id = R.string.sort_modified_group,
formatter.format(it) formatter.format(it)
) ),
color = MaterialTheme.colorScheme.onSurface,
) )
} }
completionDate?.takeIf { it > 0 }?.let { completionDate?.takeIf { it > 0 }?.let {
@ -49,7 +52,8 @@ fun InfoRow(
text = stringResource( text = stringResource(
id = R.string.sort_completion_group, id = R.string.sort_completion_group,
formatter.format(it) formatter.format(it)
) ),
color = MaterialTheme.colorScheme.onSurface,
) )
} }
} }
@ -62,7 +66,7 @@ fun InfoRow(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun InfoPreview() { fun InfoPreview() {
MdcTheme { TasksTheme {
InfoRow( InfoRow(
creationDate = 1658727180000, creationDate = 1658727180000,
modificationDate = 1658813557000, modificationDate = 1658813557000,

@ -7,13 +7,13 @@ import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.FilterImpl import com.todoroo.astrid.api.FilterImpl
import org.tasks.R import org.tasks.R
import org.tasks.compose.ChipGroup import org.tasks.compose.ChipGroup
import org.tasks.compose.FilterChip import org.tasks.compose.FilterChip
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
import org.tasks.themes.TasksTheme
@Composable @Composable
fun ListRow( fun ListRow(
@ -46,7 +46,7 @@ fun ListRow(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun ListPreview() { fun ListPreview() {
MdcTheme { TasksTheme {
ListRow( ListRow(
list = FilterImpl("Default list", ""), list = FilterImpl("Default list", ""),
colorProvider = { -769226 }, colorProvider = { -769226 },

@ -5,19 +5,19 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Notifications import androidx.compose.material.icons.outlined.Notifications
import androidx.compose.material.icons.outlined.NotificationsOff import androidx.compose.material.icons.outlined.NotificationsOff
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.compose.DisabledText import org.tasks.compose.DisabledText
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
@ -25,6 +25,7 @@ import org.tasks.data.Location
import org.tasks.data.displayName import org.tasks.data.displayName
import org.tasks.data.entity.Geofence import org.tasks.data.entity.Geofence
import org.tasks.data.entity.Place import org.tasks.data.entity.Place
import org.tasks.themes.TasksTheme
@Composable @Composable
fun LocationRow( fun LocationRow(
@ -67,9 +68,15 @@ fun Location(
.weight(1f) .weight(1f)
.padding(vertical = 20.dp) .padding(vertical = 20.dp)
) { ) {
Text(text = name) Text(
text = name,
color = MaterialTheme.colorScheme.onSurface,
)
address?.takeIf { it.isNotBlank() && it != name }?.let { address?.takeIf { it.isNotBlank() && it != name }?.let {
Text(text = address) Text(
text = address,
color = MaterialTheme.colorScheme.onSurface,
)
} }
} }
IconButton( IconButton(
@ -84,6 +91,7 @@ fun Location(
}, },
contentDescription = null, contentDescription = null,
modifier = Modifier.alpha(ContentAlpha.medium), modifier = Modifier.alpha(ContentAlpha.medium),
tint = MaterialTheme.colorScheme.onSurface,
) )
} }
} }
@ -93,7 +101,7 @@ fun Location(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun NoLocation() { fun NoLocation() {
MdcTheme { TasksTheme {
LocationRow( LocationRow(
location = null, location = null,
hasPermissions = true, hasPermissions = true,
@ -107,7 +115,7 @@ fun NoLocation() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun SampleLocation() { fun SampleLocation() {
MdcTheme { TasksTheme {
LocationRow( LocationRow(
location = Location( location = Location(
Geofence(), Geofence(),

@ -9,12 +9,12 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material.LocalMinimumInteractiveComponentEnforcement import androidx.compose.material3.LocalMinimumInteractiveComponentEnforcement
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.RadioButton import androidx.compose.material3.RadioButton
import androidx.compose.material.RadioButtonDefaults import androidx.compose.material3.RadioButtonDefaults
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -25,11 +25,11 @@ import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.data.entity.Task
import org.tasks.R import org.tasks.R
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
import org.tasks.data.entity.Task
import org.tasks.themes.ColorProvider.Companion.priorityColor import org.tasks.themes.ColorProvider.Companion.priorityColor
import org.tasks.themes.TasksTheme
@Composable @Composable
fun PriorityRow( fun PriorityRow(
@ -84,15 +84,16 @@ fun PriorityLabeled(
) { ) {
Text( Text(
text = stringResource(id = R.string.TEA_importance_label), text = stringResource(id = R.string.TEA_importance_label),
style = MaterialTheme.typography.body1, style = MaterialTheme.typography.bodyLarge,
modifier = Modifier.padding(end = 16.dp) modifier = Modifier.padding(end = 16.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
Priority(selected = selected, onClick = onClick, desaturate = desaturate) Priority(selected = selected, onClick = onClick, desaturate = desaturate)
} }
} }
@OptIn(ExperimentalMaterialApi::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun RowScope.PriorityButton( fun RowScope.PriorityButton(
@Task.Priority priority: Int, @Task.Priority priority: Int,
@ -129,7 +130,7 @@ fun RowScope.PriorityButton(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun PriorityPreview() { fun PriorityPreview() {
MdcTheme { TasksTheme {
PriorityRow( PriorityRow(
priority = Task.Priority.MEDIUM, priority = Task.Priority.MEDIUM,
onChangePriority = {}, onChangePriority = {},
@ -142,7 +143,7 @@ fun PriorityPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun PriorityPreviewNoDesaturate() { fun PriorityPreviewNoDesaturate() {
MdcTheme { TasksTheme {
PriorityRow( PriorityRow(
priority = Task.Priority.MEDIUM, priority = Task.Priority.MEDIUM,
onChangePriority = {}, onChangePriority = {},
@ -155,7 +156,7 @@ fun PriorityPreviewNoDesaturate() {
@Preview(locale = "de", widthDp = 320, showBackground = true) @Preview(locale = "de", widthDp = 320, showBackground = true)
@Composable @Composable
fun PriorityNarrowWidth() { fun PriorityNarrowWidth() {
MdcTheme { TasksTheme {
PriorityRow( PriorityRow(
priority = Task.Priority.MEDIUM, priority = Task.Priority.MEDIUM,
onChangePriority = {}, onChangePriority = {},

@ -2,22 +2,33 @@ package org.tasks.compose.edit
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Column
import androidx.compose.material.DropdownMenu import androidx.compose.foundation.layout.Row
import androidx.compose.material.DropdownMenuItem import androidx.compose.foundation.layout.Spacer
import androidx.compose.material.MaterialTheme import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.material.Text import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.* import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.compose.DisabledText import org.tasks.compose.DisabledText
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
import org.tasks.themes.TasksTheme
@Composable @Composable
fun RepeatRow( fun RepeatRow(
@ -54,10 +65,14 @@ fun Repeat(
text = recurrence, text = recurrence,
modifier = Modifier.defaultMinSize(minHeight = 24.dp).padding(end = 16.dp).fillMaxWidth(), modifier = Modifier.defaultMinSize(minHeight = 24.dp).padding(end = 16.dp).fillMaxWidth(),
maxLines = Int.MAX_VALUE, maxLines = Int.MAX_VALUE,
color = MaterialTheme.colorScheme.onSurface,
) )
Spacer(modifier = Modifier.height(8.dp)) Spacer(modifier = Modifier.height(8.dp))
Row { Row {
Text(text = stringResource(id = R.string.repeats_from)) Text(
text = stringResource(id = R.string.repeats_from),
color = MaterialTheme.colorScheme.onSurface,
)
Spacer(modifier = Modifier.width(4.dp)) Spacer(modifier = Modifier.width(4.dp))
var expanded by remember { mutableStateOf(false) } var expanded by remember { mutableStateOf(false) }
Text( Text(
@ -67,28 +82,37 @@ fun Repeat(
else else
R.string.repeat_type_due R.string.repeat_type_due
), ),
style = MaterialTheme.typography.body1.copy( style = MaterialTheme.typography.bodyLarge.copy(
textDecoration = TextDecoration.Underline, textDecoration = TextDecoration.Underline,
), ),
modifier = Modifier.clickable { expanded = true } modifier = Modifier.clickable { expanded = true },
color = MaterialTheme.colorScheme.onSurface,
) )
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) { DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
DropdownMenuItem( DropdownMenuItem(
onClick = { onClick = {
expanded = false expanded = false
onRepeatFromChanged(false) onRepeatFromChanged(false)
},
text = {
Text(
text = stringResource(id = R.string.repeat_type_due),
color = MaterialTheme.colorScheme.onSurface,
)
} }
) { )
Text(text = stringResource(id = R.string.repeat_type_due))
}
DropdownMenuItem( DropdownMenuItem(
onClick = { onClick = {
expanded = false expanded = false
onRepeatFromChanged(true) onRepeatFromChanged(true)
},
text = {
Text(
text = stringResource(id = R.string.repeat_type_completion),
color = MaterialTheme.colorScheme.onSurface,
)
} }
) { )
Text(text = stringResource(id = R.string.repeat_type_completion))
}
} }
} }
} }
@ -101,7 +125,7 @@ fun Repeat(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun RepeatPreview() { fun RepeatPreview() {
MdcTheme { TasksTheme {
RepeatRow( RepeatRow(
recurrence = "Repeats weekly on Mon, Tue, Wed, Thu, Fri", recurrence = "Repeats weekly on Mon, Tue, Wed, Thu, Fri",
repeatAfterCompletion = false, repeatAfterCompletion = false,
@ -116,7 +140,7 @@ fun RepeatPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun NoRepeatPreview() { fun NoRepeatPreview() {
MdcTheme { TasksTheme {
RepeatRow( RepeatRow(
recurrence = null, recurrence = null,
repeatAfterCompletion = false, repeatAfterCompletion = false,

@ -4,8 +4,8 @@ import android.content.res.Configuration
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
@ -13,11 +13,11 @@ import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.astrid.ui.StartDateControlSet.Companion.getRelativeDateString import com.todoroo.astrid.ui.StartDateControlSet.Companion.getRelativeDateString
import org.tasks.R import org.tasks.R
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
import org.tasks.dialogs.StartDatePicker import org.tasks.dialogs.StartDatePicker
import org.tasks.themes.TasksTheme
import org.tasks.time.DateTimeUtils2.currentTimeMillis import org.tasks.time.DateTimeUtils2.currentTimeMillis
@Composable @Composable
@ -67,9 +67,9 @@ fun StartDate(
}, },
color = when { color = when {
selectedDay < 0 && !hasDueDate -> colorResource(id = R.color.overdue) selectedDay < 0 && !hasDueDate -> colorResource(id = R.color.overdue)
startDate == 0L -> MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.disabled) startDate == 0L -> MaterialTheme.colorScheme.onSurface.copy(alpha = ContentAlpha.disabled)
startDate < currentTime -> colorResource(id = R.color.overdue) startDate < currentTime -> colorResource(id = R.color.overdue)
else -> MaterialTheme.colors.onSurface else -> MaterialTheme.colorScheme.onSurface
}, },
modifier = Modifier modifier = Modifier
.padding(vertical = 20.dp) .padding(vertical = 20.dp)
@ -81,7 +81,7 @@ fun StartDate(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun NoStartDate() { fun NoStartDate() {
MdcTheme { TasksTheme {
StartDateRow( StartDateRow(
startDate = 0L, startDate = 0L,
selectedDay = StartDatePicker.NO_DAY, selectedDay = StartDatePicker.NO_DAY,
@ -98,7 +98,7 @@ fun NoStartDate() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun FutureStartDate() { fun FutureStartDate() {
MdcTheme { TasksTheme {
StartDateRow( StartDateRow(
startDate = 1657080392000L, startDate = 1657080392000L,
selectedDay = StartDatePicker.DUE_DATE, selectedDay = StartDatePicker.DUE_DATE,
@ -115,7 +115,7 @@ fun FutureStartDate() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun PastStartDate() { fun PastStartDate() {
MdcTheme { TasksTheme {
StartDateRow( StartDateRow(
startDate = 1657080392000L, startDate = 1657080392000L,
selectedDay = StartDatePicker.DUE_TIME, selectedDay = StartDatePicker.DUE_TIME,

@ -13,8 +13,8 @@ import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -33,7 +33,6 @@ import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
import org.tasks.compose.CheckBox import org.tasks.compose.CheckBox
@ -46,6 +45,7 @@ import org.tasks.data.TaskContainer
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
import org.tasks.data.isHidden import org.tasks.data.isHidden
import org.tasks.tasklist.SectionedDataSource import org.tasks.tasklist.SectionedDataSource
import org.tasks.themes.TasksTheme
import org.tasks.ui.TaskListViewModel import org.tasks.ui.TaskListViewModel
@Composable @Composable
@ -157,7 +157,7 @@ fun NewSubtaskRow(
text = it text = it
subtask.title = it subtask.title = it
}, },
cursorBrush = SolidColor(MaterialTheme.colors.onSurface), cursorBrush = SolidColor(MaterialTheme.colorScheme.onSurface),
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)
.focusable(enabled = true) .focusable(enabled = true)
@ -165,9 +165,9 @@ fun NewSubtaskRow(
.alpha(if (subtask.isCompleted) ContentAlpha.disabled else ContentAlpha.high) .alpha(if (subtask.isCompleted) ContentAlpha.disabled else ContentAlpha.high)
.align(Alignment.Top) .align(Alignment.Top)
.padding(top = 12.dp), .padding(top = 12.dp),
textStyle = MaterialTheme.typography.body1.copy( textStyle = MaterialTheme.typography.bodyLarge.copy(
textDecoration = if (subtask.isCompleted) TextDecoration.LineThrough else TextDecoration.None, textDecoration = if (subtask.isCompleted) TextDecoration.LineThrough else TextDecoration.None,
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
), ),
keyboardOptions = KeyboardOptions.Default.copy( keyboardOptions = KeyboardOptions.Default.copy(
capitalization = KeyboardCapitalization.Sentences, capitalization = KeyboardCapitalization.Sentences,
@ -218,8 +218,9 @@ fun ExistingSubtaskRow(
.alpha(if (task.isCompleted || task.task.isHidden) ContentAlpha.disabled else ContentAlpha.high) .alpha(if (task.isCompleted || task.task.isHidden) ContentAlpha.disabled else ContentAlpha.high)
.align(Alignment.Top) .align(Alignment.Top)
.padding(top = 12.dp), .padding(top = 12.dp),
style = MaterialTheme.typography.body1.copy( style = MaterialTheme.typography.bodyLarge.copy(
textDecoration = if (task.isCompleted) TextDecoration.LineThrough else TextDecoration.None textDecoration = if (task.isCompleted) TextDecoration.LineThrough else TextDecoration.None,
color = MaterialTheme.colorScheme.onSurface,
) )
) )
if (task.hasChildren()) { if (task.hasChildren()) {
@ -237,7 +238,7 @@ fun ExistingSubtaskRow(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun NoSubtasks() { fun NoSubtasks() {
MdcTheme { TasksTheme {
SubtaskRow( SubtaskRow(
originalFilter = null, originalFilter = null,
filter = null, filter = null,
@ -259,7 +260,7 @@ fun NoSubtasks() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun SubtasksPreview() { fun SubtasksPreview() {
MdcTheme { TasksTheme {
SubtaskRow( SubtaskRow(
originalFilter = null, originalFilter = null,
filter = null, filter = null,

@ -7,7 +7,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.compose.Chip import org.tasks.compose.Chip
import org.tasks.compose.ChipGroup import org.tasks.compose.ChipGroup
@ -16,6 +15,7 @@ import org.tasks.compose.TaskEditRow
import org.tasks.data.entity.TagData import org.tasks.data.entity.TagData
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
import org.tasks.themes.TasksTheme
@Composable @Composable
fun TagsRow( fun TagsRow(
@ -57,7 +57,7 @@ fun TagsRow(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun NoTags() { fun NoTags() {
MdcTheme { TasksTheme {
TagsRow( TagsRow(
tags = emptyList(), tags = emptyList(),
colorProvider = { 0 }, colorProvider = { 0 },
@ -71,7 +71,7 @@ fun NoTags() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun SingleTag() { fun SingleTag() {
MdcTheme { TasksTheme {
TagsRow( TagsRow(
tags = listOf( tags = listOf(
TagData( TagData(
@ -90,7 +90,7 @@ fun SingleTag() {
@Preview(showBackground = true, widthDp = 320) @Preview(showBackground = true, widthDp = 320)
@Composable @Composable
fun BunchOfTags() { fun BunchOfTags() {
MdcTheme { TasksTheme {
TagsRow( TagsRow(
tags = listOf( tags = listOf(
TagData(name = "One"), TagData(name = "One"),
@ -109,7 +109,7 @@ fun BunchOfTags() {
@Preview(showBackground = true, widthDp = 320) @Preview(showBackground = true, widthDp = 320)
@Composable @Composable
fun TagWithReallyLongName() { fun TagWithReallyLongName() {
MdcTheme { TasksTheme {
TagsRow( TagsRow(
tags = listOf( tags = listOf(
TagData( TagData(

@ -5,12 +5,13 @@ import android.text.format.DateUtils
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Pause import androidx.compose.material.icons.outlined.Pause
import androidx.compose.material.icons.outlined.PlayArrow import androidx.compose.material.icons.outlined.PlayArrow
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -22,11 +23,11 @@ import androidx.compose.ui.draw.alpha
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import org.tasks.R import org.tasks.R
import org.tasks.compose.DisabledText import org.tasks.compose.DisabledText
import org.tasks.compose.TaskEditRow import org.tasks.compose.TaskEditRow
import org.tasks.themes.TasksTheme
import org.tasks.time.DateTimeUtils2.currentTimeMillis import org.tasks.time.DateTimeUtils2.currentTimeMillis
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
@ -81,6 +82,7 @@ fun TimerRow(
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)
.padding(vertical = 20.dp), .padding(vertical = 20.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
} }
IconButton( IconButton(
@ -97,7 +99,8 @@ fun TimerRow(
Icons.Outlined.PlayArrow Icons.Outlined.PlayArrow
}, },
modifier = Modifier.alpha(ContentAlpha.medium), modifier = Modifier.alpha(ContentAlpha.medium),
contentDescription = null contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface,
) )
} }
} }
@ -116,7 +119,7 @@ fun TimerRow(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun NoTimer() { fun NoTimer() {
MdcTheme { TasksTheme {
TimerRow(started = 0, estimated = 0, elapsed = 0, timerClicked = {}, onClick = {}) TimerRow(started = 0, estimated = 0, elapsed = 0, timerClicked = {}, onClick = {})
} }
} }
@ -125,7 +128,7 @@ fun NoTimer() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun RunningTimer() { fun RunningTimer() {
MdcTheme { TasksTheme {
TimerRow(started = currentTimeMillis(), estimated = 900, elapsed = 400, timerClicked = {}, onClick = {}) TimerRow(started = currentTimeMillis(), estimated = 900, elapsed = 400, timerClicked = {}, onClick = {})
} }
} }

@ -6,7 +6,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -18,11 +18,11 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.rememberMultiplePermissionsState import com.google.accompanist.permissions.rememberMultiplePermissionsState
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.calendars.AndroidCalendar import org.tasks.calendars.AndroidCalendar
import org.tasks.calendars.CalendarPickerViewModel import org.tasks.calendars.CalendarPickerViewModel
import org.tasks.compose.collectAsStateLifecycleAware import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.themes.TasksTheme
@OptIn(ExperimentalPermissionsApi::class) @OptIn(ExperimentalPermissionsApi::class)
@Composable @Composable
@ -67,7 +67,7 @@ fun CalendarPickerList(
) { ) {
CheckableIconRow( CheckableIconRow(
icon = painterResource(id = R.drawable.ic_outline_block_24), icon = painterResource(id = R.drawable.ic_outline_block_24),
tint = MaterialTheme.colors.onSurface, tint = MaterialTheme.colorScheme.onSurface,
text = stringResource(id = R.string.dont_add_to_calendar), text = stringResource(id = R.string.dont_add_to_calendar),
selected = selectedCalendar == null, selected = selectedCalendar == null,
onClick = { onSelected(null) }, onClick = { onSelected(null) },
@ -88,7 +88,7 @@ fun CalendarPickerList(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun CalendarPickerPreview() { fun CalendarPickerPreview() {
MdcTheme { TasksTheme {
CalendarPickerList( CalendarPickerList(
calendars = listOf( calendars = listOf(
AndroidCalendar("1", "Home", -765666), AndroidCalendar("1", "Home", -765666),
@ -105,7 +105,7 @@ fun CalendarPickerPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, widthDp = 320)
@Composable @Composable
fun CalendarPickerNoneSelected() { fun CalendarPickerNoneSelected() {
MdcTheme { TasksTheme {
CalendarPickerList( CalendarPickerList(
calendars = listOf( calendars = listOf(
AndroidCalendar("1", "Home", -765666), AndroidCalendar("1", "Home", -765666),

@ -1,13 +1,18 @@
package org.tasks.compose.pickers package org.tasks.compose.pickers
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Check import androidx.compose.material.icons.outlined.Check
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -31,7 +36,8 @@ fun CheckableIconRow(
content = { content = {
Text( Text(
text = text, text = text,
style = MaterialTheme.typography.body1, style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurface,
) )
} }
) )
@ -64,7 +70,7 @@ fun CheckableIconRow(
Icon( Icon(
imageVector = Icons.Outlined.Check, imageVector = Icons.Outlined.Check,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colors.primary.copy(alpha = ContentAlpha.medium), tint = MaterialTheme.colorScheme.onSurface.copy(alpha = ContentAlpha.medium),
modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp), modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp),
) )
} else { } else {

@ -8,11 +8,11 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.KeyboardArrowUp import androidx.compose.material.icons.outlined.KeyboardArrowUp
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -36,8 +36,9 @@ fun CollapsibleRow(
) { ) {
Text( Text(
text = text, text = text,
style = MaterialTheme.typography.body2.copy( style = MaterialTheme.typography.bodyMedium.copy(
fontWeight = FontWeight.Medium, fontWeight = FontWeight.Medium,
color = MaterialTheme.colorScheme.onSurface,
), ),
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
) )
@ -48,7 +49,7 @@ fun CollapsibleRow(
Icon( Icon(
imageVector = Icons.Outlined.KeyboardArrowUp, imageVector = Icons.Outlined.KeyboardArrowUp,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.medium), tint = MaterialTheme.colorScheme.onSurface.copy(alpha = ContentAlpha.medium),
modifier = Modifier.rotate(rotationAngle) modifier = Modifier.rotate(rotationAngle)
) )
} }

@ -21,18 +21,20 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
import androidx.compose.material.RadioButton
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.material.TopAppBar
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ArrowBack import androidx.compose.material.icons.outlined.ArrowBack
import androidx.compose.material3.Divider import androidx.compose.material3.Divider
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.RadioButton
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -47,7 +49,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.core.os.ConfigurationCompat import androidx.core.os.ConfigurationCompat
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import net.fortuna.ical4j.model.Recur import net.fortuna.ical4j.model.Recur
import net.fortuna.ical4j.model.WeekDay import net.fortuna.ical4j.model.WeekDay
@ -57,11 +58,13 @@ import org.tasks.compose.OutlinedNumberInput
import org.tasks.compose.OutlinedSpinner import org.tasks.compose.OutlinedSpinner
import org.tasks.compose.border import org.tasks.compose.border
import org.tasks.repeats.CustomRecurrenceViewModel import org.tasks.repeats.CustomRecurrenceViewModel
import org.tasks.themes.TasksTheme
import java.time.DayOfWeek import java.time.DayOfWeek
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.time.format.TextStyle import java.time.format.TextStyle
import java.util.Locale import java.util.Locale
@OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun CustomRecurrence( fun CustomRecurrence(
state: CustomRecurrenceViewModel.ViewState, state: CustomRecurrenceViewModel.ViewState,
@ -81,6 +84,12 @@ fun CustomRecurrence(
Scaffold( Scaffold(
topBar = { topBar = {
TopAppBar( TopAppBar(
colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.surface,
titleContentColor = MaterialTheme.colorScheme.onSurface,
navigationIconContentColor = MaterialTheme.colorScheme.onSurface,
actionIconContentColor = MaterialTheme.colorScheme.onSurface,
),
title = { title = {
Text( Text(
text = stringResource(id = R.string.repeats_custom_recurrence), text = stringResource(id = R.string.repeats_custom_recurrence),
@ -91,7 +100,7 @@ fun CustomRecurrence(
Icon( Icon(
imageVector = Icons.Outlined.ArrowBack, imageVector = Icons.Outlined.ArrowBack,
contentDescription = stringResource(id = R.string.save), contentDescription = stringResource(id = R.string.save),
tint = MaterialTheme.colors.onSurface, tint = MaterialTheme.colorScheme.onSurface,
) )
} }
}, },
@ -99,19 +108,17 @@ fun CustomRecurrence(
TextButton(onClick = discard) { TextButton(onClick = discard) {
Text( Text(
text = stringResource(id = R.string.cancel), text = stringResource(id = R.string.cancel),
style = MaterialTheme.typography.body1.copy( style = MaterialTheme.typography.bodyLarge.copy(
fontFeatureSettings = "c2sc, smcp" fontFeatureSettings = "c2sc, smcp"
) )
) )
} }
}, },
backgroundColor = MaterialTheme.colors.surface,
contentColor = MaterialTheme.colors.onSurface,
) )
} }
) { padding -> ) { padding ->
Surface( Surface(
color = MaterialTheme.colors.surface, color = MaterialTheme.colorScheme.surface,
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.padding(padding), .padding(padding),
@ -190,8 +197,8 @@ fun CustomRecurrence(
private fun Header(resId: Int) { private fun Header(resId: Int) {
Text( Text(
text = stringResource(id = resId), text = stringResource(id = resId),
style = MaterialTheme.typography.caption, style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colors.onSurface, color = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.padding(horizontal = 16.dp), modifier = Modifier.padding(horizontal = 16.dp),
) )
} }
@ -230,7 +237,7 @@ private fun WeekdayPicker(
.size(36.dp) .size(36.dp)
.let { .let {
if (selected.contains(dayOfWeek)) { if (selected.contains(dayOfWeek)) {
it.background(MaterialTheme.colors.secondary, shape = CircleShape) it.background(MaterialTheme.colorScheme.secondary, shape = CircleShape)
} else { } else {
it.border(1.dp, border(), shape = CircleShape) it.border(1.dp, border(), shape = CircleShape)
} }
@ -240,8 +247,8 @@ private fun WeekdayPicker(
) { ) {
Text( Text(
text = string, text = string,
style = MaterialTheme.typography.body2, style = MaterialTheme.typography.bodyMedium,
color = if (selected.contains(dayOfWeek)) MaterialTheme.colors.onSecondary else MaterialTheme.colors.onSurface color = if (selected.contains(dayOfWeek)) MaterialTheme.colorScheme.onSecondary else MaterialTheme.colorScheme.onSurface
) )
} }
} }
@ -411,7 +418,7 @@ private val Recur.Frequency.plural: Int
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun WeeklyPreview() { fun WeeklyPreview() {
MdcTheme { TasksTheme {
CustomRecurrence( CustomRecurrence(
state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.WEEKLY), state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.WEEKLY),
save = {}, save = {},
@ -431,7 +438,7 @@ fun WeeklyPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun MonthlyPreview() { fun MonthlyPreview() {
MdcTheme { TasksTheme {
CustomRecurrence( CustomRecurrence(
state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.MONTHLY), state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.MONTHLY),
save = {}, save = {},
@ -451,7 +458,7 @@ fun MonthlyPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun MinutelyPreview() { fun MinutelyPreview() {
MdcTheme { TasksTheme {
CustomRecurrence( CustomRecurrence(
state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.MINUTELY), state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.MINUTELY),
save = {}, save = {},
@ -471,7 +478,7 @@ fun MinutelyPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun HourlyPreview() { fun HourlyPreview() {
MdcTheme { TasksTheme {
CustomRecurrence( CustomRecurrence(
state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.HOURLY), state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.HOURLY),
save = {}, save = {},
@ -491,7 +498,7 @@ fun HourlyPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun DailyPreview() { fun DailyPreview() {
MdcTheme { TasksTheme {
CustomRecurrence( CustomRecurrence(
state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.DAILY), state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.DAILY),
save = {}, save = {},
@ -511,7 +518,7 @@ fun DailyPreview() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun YearlyPreview() { fun YearlyPreview() {
MdcTheme { TasksTheme {
CustomRecurrence( CustomRecurrence(
state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.YEARLY), state = CustomRecurrenceViewModel.ViewState(frequency = Recur.Frequency.YEARLY),
save = {}, save = {},

@ -1,14 +1,10 @@
package org.tasks.compose.pickers package org.tasks.compose.pickers
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.Text
import androidx.compose.material3.DatePicker import androidx.compose.material3.DatePicker
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.material3.rememberDatePickerState import androidx.compose.material3.rememberDatePickerState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
@ -16,8 +12,8 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R import org.tasks.R
import org.tasks.themes.TasksTheme
import org.tasks.time.DateTime import org.tasks.time.DateTime
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -27,9 +23,7 @@ fun DatePickerDialog(
selected: (Long) -> Unit, selected: (Long) -> Unit,
dismiss: () -> Unit, dismiss: () -> Unit,
) { ) {
MaterialTheme( TasksTheme {
colorScheme = if (isSystemInDarkTheme()) darkColorScheme() else lightColorScheme()
) {
val initialDateUTC by remember(initialDate) { val initialDateUTC by remember(initialDate) {
derivedStateOf { derivedStateOf {
DateTime(initialDate).toUTC().millis DateTime(initialDate).toUTC().millis
@ -67,7 +61,7 @@ fun DatePickerDialog(
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun DatePickerPreview() { fun DatePickerPreview() {
MdcTheme { TasksTheme {
DatePickerDialog( DatePickerDialog(
initialDate = DateTime().plusDays(1).millis, initialDate = DateTime().plusDays(1).millis,
selected = {}, selected = {},

@ -6,9 +6,9 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment.Companion.CenterVertically import androidx.compose.ui.Alignment.Companion.CenterVertically
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -56,10 +56,11 @@ fun FilterPicker(
Row(verticalAlignment = CenterVertically) { Row(verticalAlignment = CenterVertically) {
Text( Text(
text = filter.title!!, text = filter.title!!,
style = MaterialTheme.typography.body2.copy( style = MaterialTheme.typography.bodyMedium.copy(
fontWeight = FontWeight.Medium fontWeight = FontWeight.Medium
), ),
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
color = MaterialTheme.colorScheme.onSurface,
) )
if (filter is CaldavFilter && filter.principals > 0) { if (filter is CaldavFilter && filter.principals > 0) {
Icon( Icon(

@ -7,8 +7,8 @@ import android.widget.ListAdapter
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import com.google.android.material.composethemeadapter.MdcTheme
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.tasks.themes.TasksTheme
class AlertDialogBuilder internal constructor(private val context: Context) { class AlertDialogBuilder internal constructor(private val context: Context) {
private val builder: AlertDialog.Builder private val builder: AlertDialog.Builder
@ -72,7 +72,7 @@ class AlertDialogBuilder internal constructor(private val context: Context) {
builder.setView(ComposeView(context) builder.setView(ComposeView(context)
.apply { .apply {
setContent { setContent {
MdcTheme { TasksTheme {
content() content()
} }
} }

@ -23,9 +23,9 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.ContentAlpha import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ArrowDownward import androidx.compose.material.icons.outlined.ArrowDownward
import androidx.compose.material.icons.outlined.ArrowUpward import androidx.compose.material.icons.outlined.ArrowUpward
@ -55,13 +55,13 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.astrid.core.SortHelper import com.todoroo.astrid.core.SortHelper
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.R import org.tasks.R
import org.tasks.compose.SystemBars import org.tasks.compose.SystemBars
import org.tasks.compose.collectAsStateLifecycleAware import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.themes.TasksTheme
@AndroidEntryPoint @AndroidEntryPoint
class SortSettingsActivity : ComponentActivity() { class SortSettingsActivity : ComponentActivity() {
@ -74,15 +74,15 @@ class SortSettingsActivity : ComponentActivity() {
WindowCompat.setDecorFitsSystemWindows(window, false) WindowCompat.setDecorFitsSystemWindows(window, false)
window.statusBarColor = ContextCompat.getColor(this, android.R.color.transparent) window.statusBarColor = ContextCompat.getColor(this, android.R.color.transparent)
setContent { setContent {
MdcTheme { TasksTheme {
val scrimColor = if (isSystemInDarkTheme()) val scrimColor = if (isSystemInDarkTheme())
Color(0x52454545) Color(0x52454545)
else else
MaterialTheme.colors.onSurface.copy(.5f) MaterialTheme.colorScheme.onSurface.copy(.5f)
// edge-to-edge potentially fixed in material3 v1.2.0 // edge-to-edge potentially fixed in material3 v1.2.0
SystemBars( SystemBars(
statusBarColor = scrimColor, statusBarColor = scrimColor,
navigationBarColor = MaterialTheme.colors.surface, navigationBarColor = MaterialTheme.colorScheme.surface,
) )
val state = viewModel.state.collectAsStateLifecycleAware().value val state = viewModel.state.collectAsStateLifecycleAware().value
val mainSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) val mainSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
@ -105,7 +105,7 @@ class SortSettingsActivity : ComponentActivity() {
overridePendingTransition(0, 0) overridePendingTransition(0, 0)
}, },
sheetState = mainSheetState, sheetState = mainSheetState,
containerColor = MaterialTheme.colors.surface, containerColor = MaterialTheme.colorScheme.surface,
scrimColor = scrimColor, scrimColor = scrimColor,
shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp),
content = { content = {
@ -144,7 +144,7 @@ class SortSettingsActivity : ComponentActivity() {
ModalBottomSheet( ModalBottomSheet(
onDismissRequest = closePicker, onDismissRequest = closePicker,
sheetState = sheetState, sheetState = sheetState,
containerColor = MaterialTheme.colors.surface, containerColor = MaterialTheme.colorScheme.surface,
scrimColor = Color.Transparent, scrimColor = Color.Transparent,
shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp),
content = { content = {
@ -179,7 +179,7 @@ class SortSettingsActivity : ComponentActivity() {
ModalBottomSheet( ModalBottomSheet(
onDismissRequest = closePicker, onDismissRequest = closePicker,
sheetState = sheetState, sheetState = sheetState,
containerColor = MaterialTheme.colors.surface, containerColor = MaterialTheme.colorScheme.surface,
scrimColor = Color.Transparent, scrimColor = Color.Transparent,
shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp),
content = { content = {
@ -218,7 +218,7 @@ class SortSettingsActivity : ComponentActivity() {
ModalBottomSheet( ModalBottomSheet(
onDismissRequest = closePicker, onDismissRequest = closePicker,
sheetState = sheetState, sheetState = sheetState,
containerColor = MaterialTheme.colors.surface, containerColor = MaterialTheme.colorScheme.surface,
scrimColor = Color.Transparent, scrimColor = Color.Transparent,
shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp),
content = { content = {
@ -253,7 +253,7 @@ class SortSettingsActivity : ComponentActivity() {
ModalBottomSheet( ModalBottomSheet(
onDismissRequest = closePicker, onDismissRequest = closePicker,
sheetState = sheetState, sheetState = sheetState,
containerColor = MaterialTheme.colors.surface, containerColor = MaterialTheme.colorScheme.surface,
scrimColor = Color.Transparent, scrimColor = Color.Transparent,
shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp),
content = { content = {
@ -424,19 +424,19 @@ fun SortOption(
) { ) {
Text( Text(
text = stringResource(id = resId), text = stringResource(id = resId),
style = MaterialTheme.typography.h6.copy( style = MaterialTheme.typography.titleLarge.copy(
color = when { color = when {
selected -> MaterialTheme.colors.primary selected -> MaterialTheme.colorScheme.primary
enabled -> MaterialTheme.colors.onSurface enabled -> MaterialTheme.colorScheme.onSurface
else -> MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.disabled) else -> MaterialTheme.colorScheme.onSurface.copy(alpha = ContentAlpha.disabled)
} }
), ),
) )
if (!enabled) { if (!enabled) {
Text( Text(
text = stringResource(id = R.string.sort_not_available), text = stringResource(id = R.string.sort_not_available),
style = MaterialTheme.typography.body2.copy( style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colors.error, color = MaterialTheme.colorScheme.error,
fontStyle = FontStyle.Italic, fontStyle = FontStyle.Italic,
), ),
) )
@ -516,7 +516,7 @@ fun BottomSheetContent(
) { ) {
Text( Text(
text = stringResource(R.string.completed_tasks_at_bottom), text = stringResource(R.string.completed_tasks_at_bottom),
style = MaterialTheme.typography.body1, style = MaterialTheme.typography.bodyLarge,
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
) )
Switch( Switch(
@ -567,8 +567,8 @@ fun SortRow(
.alpha(ContentAlpha.medium), .alpha(ContentAlpha.medium),
) )
Column(modifier = Modifier.weight(1f)) { Column(modifier = Modifier.weight(1f)) {
Text(text = stringResource(id = title), style = MaterialTheme.typography.body1) Text(text = stringResource(id = title), style = MaterialTheme.typography.bodyLarge)
Text(text = stringResource(id = body), style = MaterialTheme.typography.body2) Text(text = stringResource(id = body), style = MaterialTheme.typography.bodyMedium)
} }
if (showAscending) { if (showAscending) {
Spacer(modifier = Modifier.width(16.dp)) Spacer(modifier = Modifier.width(16.dp))
@ -609,7 +609,7 @@ fun OrderingButton(
) )
Text( Text(
text = stringResource(id = if (ascending) R.string.sort_ascending else R.string.sort_descending), text = stringResource(id = if (ascending) R.string.sort_ascending else R.string.sort_descending),
style = MaterialTheme.typography.body2, style = MaterialTheme.typography.bodyMedium,
) )
} }
} }
@ -633,7 +633,7 @@ private val Int.modeString: Int
@Preview(showBackground = true, uiMode = UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = UI_MODE_NIGHT_YES)
@Composable @Composable
fun PreviewSortBottomSheet() { fun PreviewSortBottomSheet() {
MdcTheme { TasksTheme {
Column { Column {
BottomSheetContent( BottomSheetContent(
groupMode = SortHelper.GROUP_NONE, groupMode = SortHelper.GROUP_NONE,

@ -6,10 +6,10 @@ import android.os.Bundle
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.compose.collectAsStateLifecycleAware import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.pickers.CustomRecurrence import org.tasks.compose.pickers.CustomRecurrence
import org.tasks.themes.TasksTheme
@AndroidEntryPoint @AndroidEntryPoint
class CustomRecurrenceActivity : FragmentActivity() { class CustomRecurrenceActivity : FragmentActivity() {
@ -18,7 +18,7 @@ class CustomRecurrenceActivity : FragmentActivity() {
override fun onPostCreate(savedInstanceState: Bundle?) { override fun onPostCreate(savedInstanceState: Bundle?) {
super.onPostCreate(savedInstanceState) super.onPostCreate(savedInstanceState)
setContent { setContent {
MdcTheme { TasksTheme {
CustomRecurrence( CustomRecurrence(
state = viewModel.state.collectAsStateLifecycleAware().value, state = viewModel.state.collectAsStateLifecycleAware().value,
save = { save = {

@ -5,7 +5,6 @@ import android.os.Bundle
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.fragment.app.setFragmentResult import androidx.fragment.app.setFragmentResult
import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
@ -35,12 +34,10 @@ class AddAccountDialog : DialogFragment() {
.newDialog() .newDialog()
.setTitle(R.string.choose_synchronization_service) .setTitle(R.string.choose_synchronization_service)
.setContent { .setContent {
MdcTheme { org.tasks.compose.AddAccountDialog(
org.tasks.compose.AddAccountDialog( hasTasksAccount = hasTasksAccount,
hasTasksAccount = hasTasksAccount, selected = this::selected
selected = this::selected )
)
}
} }
.setNeutralButton(R.string.help) { _, _ -> activity?.openUri(R.string.help_url_sync) } .setNeutralButton(R.string.help) { _, _ -> activity?.openUri(R.string.help_url_sync) }
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)

@ -15,12 +15,12 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.material.TextField import androidx.compose.material3.TextField
import androidx.compose.material.TextFieldDefaults import androidx.compose.material3.TextFieldDefaults
import androidx.compose.material.TriStateCheckbox import androidx.compose.material3.TriStateCheckbox
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.State import androidx.compose.runtime.State
import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.livedata.observeAsState
@ -35,7 +35,6 @@ import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.state.ToggleableState import androidx.compose.ui.state.ToggleableState
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.R import org.tasks.R
@ -46,6 +45,7 @@ import org.tasks.extensions.addBackPressedCallback
import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.injection.ThemedInjectingAppCompatActivity
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
import org.tasks.themes.TasksTheme
import org.tasks.themes.Theme import org.tasks.themes.Theme
import javax.inject.Inject import javax.inject.Inject
@ -78,7 +78,7 @@ class TagPickerActivity : ThemedInjectingAppCompatActivity() {
viewModel.search("") viewModel.search("")
setContent { setContent {
MdcTheme { TasksTheme {
TagPicker( TagPicker(
viewModel, viewModel,
onBackClicked = { handleBackPressed() }, onBackClicked = { handleBackPressed() },
@ -165,16 +165,23 @@ internal fun SearchBar(
"Done", "Done",
modifier = Modifier modifier = Modifier
.padding(6.dp) .padding(6.dp)
.clickable { onBack() } .clickable { onBack() },
tint = MaterialTheme.colorScheme.onSurface,
) )
TextField( TextField(
value = searchPattern.value, value = searchPattern.value,
onValueChange = { viewModel.search(it) }, onValueChange = { viewModel.search(it) },
placeholder = { Text(invitation) }, placeholder = {
colors = TextFieldDefaults.textFieldColors( Text(
textColor = MaterialTheme.colors.onBackground, text = invitation,
backgroundColor = Color.Transparent, color = MaterialTheme.colorScheme.onSurface,
)
},
colors = TextFieldDefaults.colors(
focusedTextColor = MaterialTheme.colorScheme.onSurface,
unfocusedContainerColor = Color.Transparent,
focusedContainerColor = Color.Transparent,
focusedIndicatorColor = Color.Transparent, focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent unfocusedIndicatorColor = Color.Transparent
), ),
@ -240,7 +247,9 @@ internal fun TagRow (
onClick: () -> Unit, onClick: () -> Unit,
checkBox: @Composable RowScope.() -> Unit = {} checkBox: @Composable RowScope.() -> Unit = {}
) { ) {
Row(modifier = Modifier.fillMaxWidth().clickable{ onClick() }, Row(modifier = Modifier
.fillMaxWidth()
.clickable { onClick() },
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
@ -251,7 +260,10 @@ internal fun TagRow (
) )
Text( Text(
text, text,
modifier = Modifier.weight(1f).padding(horizontal = 24.dp) modifier = Modifier
.weight(1f)
.padding(horizontal = 24.dp),
color = MaterialTheme.colorScheme.onSurface,
) )
checkBox() checkBox()
} }

@ -13,7 +13,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.CaldavFilter
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
@ -38,6 +37,7 @@ import org.tasks.dialogs.Linkify
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.markdown.Markdown import org.tasks.markdown.Markdown
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.TasksTheme
import org.tasks.time.DateTimeUtils.startOfDay import org.tasks.time.DateTimeUtils.startOfDay
import org.tasks.time.DateTimeUtils2.currentTimeMillis import org.tasks.time.DateTimeUtils2.currentTimeMillis
import org.tasks.ui.CheckBoxProvider import org.tasks.ui.CheckBoxProvider
@ -249,7 +249,7 @@ class TaskViewHolder internal constructor(
val toggleSubtasks = { task: Long, collapsed: Boolean -> callback.toggleSubtasks(task, collapsed) } val toggleSubtasks = { task: Long, collapsed: Boolean -> callback.toggleSubtasks(task, collapsed) }
val onClick = { it: Filter -> callback.onClick(it) } val onClick = { it: Filter -> callback.onClick(it) }
chipGroup.setContent { chipGroup.setContent {
MdcTheme { TasksTheme {
ChipGroup( ChipGroup(
modifier = Modifier.padding( modifier = Modifier.padding(
end = 16.dp, end = 16.dp,

@ -0,0 +1,19 @@
package org.tasks.themes
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
@Composable
fun TasksTheme(
useDarkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit,
) {
MaterialTheme(
colorScheme = if (useDarkTheme) darkColorScheme() else lightColorScheme(),
) {
content()
}
}

@ -8,7 +8,6 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast.LENGTH_SHORT import android.widget.Toast.LENGTH_SHORT
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.astrid.activity.TaskEditFragment import com.todoroo.astrid.activity.TaskEditFragment
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
@ -19,6 +18,7 @@ import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.CalendarRow import org.tasks.compose.edit.CalendarRow
import org.tasks.extensions.Context.toast import org.tasks.extensions.Context.toast
import org.tasks.preferences.PermissionChecker import org.tasks.preferences.PermissionChecker
import org.tasks.themes.TasksTheme
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@ -45,7 +45,7 @@ class CalendarControlSet : TaskEditControlFragment() {
override fun bind(parent: ViewGroup?): View = override fun bind(parent: ViewGroup?): View =
(parent as ComposeView).apply { (parent as ComposeView).apply {
setContent { setContent {
MdcTheme { TasksTheme {
CalendarRow( CalendarRow(
eventUri = viewModel.eventUri.collectAsStateLifecycleAware().value, eventUri = viewModel.eventUri.collectAsStateLifecycleAware().value,
selectedCalendar = viewModel.selectedCalendar.collectAsStateLifecycleAware().value?.let { selectedCalendar = viewModel.selectedCalendar.collectAsStateLifecycleAware().value?.let {

@ -10,7 +10,6 @@ import androidx.compose.ui.platform.ComposeView
import androidx.core.util.Pair import androidx.core.util.Pair
import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.rememberMultiplePermissionsState import com.google.accompanist.permissions.rememberMultiplePermissionsState
import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
@ -30,6 +29,7 @@ import org.tasks.location.LocationPickerActivity
import org.tasks.preferences.PermissionChecker import org.tasks.preferences.PermissionChecker
import org.tasks.preferences.PermissionChecker.backgroundPermissions import org.tasks.preferences.PermissionChecker.backgroundPermissions
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.TasksTheme
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -85,7 +85,7 @@ class LocationControlSet : TaskEditControlFragment() {
override fun bind(parent: ViewGroup?): View = override fun bind(parent: ViewGroup?): View =
(parent as ComposeView).apply { (parent as ComposeView).apply {
setContent { setContent {
MdcTheme { TasksTheme {
val hasPermissions = val hasPermissions =
rememberMultiplePermissionsState(permissions = backgroundPermissions()) rememberMultiplePermissionsState(permissions = backgroundPermissions())
.allPermissionsGranted .allPermissionsGranted

@ -8,7 +8,6 @@ import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.astrid.activity.MainActivityViewModel import com.todoroo.astrid.activity.MainActivityViewModel
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.service.TaskCompleter import com.todoroo.astrid.service.TaskCompleter
@ -24,6 +23,7 @@ import org.tasks.filters.SubtaskFilter
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.tasklist.SectionedDataSource import org.tasks.tasklist.SectionedDataSource
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.themes.TasksTheme
import org.tasks.time.DateTimeUtils2.currentTimeMillis import org.tasks.time.DateTimeUtils2.currentTimeMillis
import javax.inject.Inject import javax.inject.Inject
@ -52,7 +52,7 @@ class SubtaskControlSet : TaskEditControlFragment() {
(parent as ComposeView).apply { (parent as ComposeView).apply {
listViewModel = ViewModelProvider(requireParentFragment())[TaskListViewModel::class.java] listViewModel = ViewModelProvider(requireParentFragment())[TaskListViewModel::class.java]
setContent { setContent {
MdcTheme { TasksTheme {
SubtaskRow( SubtaskRow(
originalFilter = viewModel.originalList, originalFilter = viewModel.originalList,
filter = viewModel.selectedList.collectAsStateLifecycleAware().value, filter = viewModel.selectedList.collectAsStateLifecycleAware().value,

@ -1021,16 +1021,6 @@
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
+| +--- androidx.compose.runtime:runtime:1.6.7 (c) +| +--- androidx.compose.runtime:runtime:1.6.7 (c)
+| \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c) +| \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
++--- com.google.android.material:compose-theme-adapter:1.2.1
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20 -> 2.0.0 (*)
+| +--- com.google.android.material:compose-theme-adapter-core:1.0.1
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.20 -> 2.0.0 (*)
+| | +--- androidx.core:core-ktx:1.9.0 -> 1.13.0 (*)
+| | +--- androidx.appcompat:appcompat:1.5.1 -> 1.7.0 (*)
+| | +--- com.google.android.material:material:1.7.0 -> 1.12.0 (*)
+| | +--- androidx.compose.runtime:runtime:1.3.1 -> 1.6.7 (*)
+| | \--- androidx.compose.foundation:foundation:1.3.1 -> 1.6.7 (*)
+| \--- androidx.compose.material:material:1.3.1 -> 1.6.7 (*)
++--- androidx.activity:activity-compose:1.9.0 (*) ++--- androidx.activity:activity-compose:1.9.0 (*)
++--- androidx.compose.material:material-icons-extended -> 1.6.7 ++--- androidx.compose.material:material-icons-extended -> 1.6.7
+| \--- androidx.compose.material:material-icons-extended-android:1.6.7 +| \--- androidx.compose.material:material-icons-extended-android:1.6.7

@ -1250,16 +1250,6 @@
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*) +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.0.0 (*)
+| +--- androidx.compose.runtime:runtime:1.6.7 (c) +| +--- androidx.compose.runtime:runtime:1.6.7 (c)
+| \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c) +| \--- androidx.compose.runtime:runtime-saveable:1.6.7 (c)
++--- com.google.android.material:compose-theme-adapter:1.2.1
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20 -> 2.0.0 (*)
+| +--- com.google.android.material:compose-theme-adapter-core:1.0.1
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.20 -> 2.0.0 (*)
+| | +--- androidx.core:core-ktx:1.9.0 -> 1.13.0 (*)
+| | +--- androidx.appcompat:appcompat:1.5.1 -> 1.7.0 (*)
+| | +--- com.google.android.material:material:1.7.0 -> 1.12.0 (*)
+| | +--- androidx.compose.runtime:runtime:1.3.1 -> 1.6.7 (*)
+| | \--- androidx.compose.foundation:foundation:1.3.1 -> 1.6.7 (*)
+| \--- androidx.compose.material:material:1.3.1 -> 1.6.7 (*)
++--- androidx.activity:activity-compose:1.9.0 (*) ++--- androidx.activity:activity-compose:1.9.0 (*)
++--- androidx.compose.material:material-icons-extended -> 1.6.7 ++--- androidx.compose.material:material-icons-extended -> 1.6.7
+| \--- androidx.compose.material:material-icons-extended-android:1.6.7 +| \--- androidx.compose.material:material-icons-extended-android:1.6.7

@ -10,7 +10,6 @@ cert4android = "7814052"
coil = "2.6.0" coil = "2.6.0"
colorpicker = "0.0.15" colorpicker = "0.0.15"
compose = "2024.05.00" compose = "2024.05.00"
compose-theme-adapter = "1.2.1"
constraintlayout = "2.1.4" constraintlayout = "2.1.4"
dagger-hilt = "2.50" dagger-hilt = "2.50"
dashclock-api = "2.0.0" dashclock-api = "2.0.0"
@ -101,7 +100,6 @@ coil-gif = { module = "io.coil-kt:coil-gif", version.ref = "coil" }
coil-svg = { module = "io.coil-kt:coil-svg", version.ref = "coil" } coil-svg = { module = "io.coil-kt:coil-svg", version.ref = "coil" }
coil-video = { module = "io.coil-kt:coil-video", version.ref = "coil" } coil-video = { module = "io.coil-kt:coil-video", version.ref = "coil" }
colorpicker = { module = "com.github.QuadFlask:colorpicker", version.ref = "colorpicker" } colorpicker = { module = "com.github.QuadFlask:colorpicker", version.ref = "colorpicker" }
compose-theme-adapter = { module = "com.google.android.material:compose-theme-adapter", version.ref = "compose-theme-adapter" }
dagger-hilt = { module = "com.google.dagger:hilt-android", version.ref = "dagger-hilt" } dagger-hilt = { module = "com.google.dagger:hilt-android", version.ref = "dagger-hilt" }
dagger-hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "dagger-hilt" } dagger-hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "dagger-hilt" }
dagger-hilt-gradle = { module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "dagger-hilt" } dagger-hilt-gradle = { module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "dagger-hilt" }

Loading…
Cancel
Save