Fix some compose theme issues

pull/3145/head
Alex Baker 1 year ago
parent f48224e555
commit 82ceda7108

@ -129,7 +129,7 @@ class MainActivity : AppCompatActivity() {
binding.composeView.setContent { binding.composeView.setContent {
if (viewModel.drawerOpen.collectAsStateWithLifecycle().value) { if (viewModel.drawerOpen.collectAsStateWithLifecycle().value) {
TasksTheme { TasksTheme(theme = theme.themeBase.index) {
val sheetState = rememberModalBottomSheetState( val sheetState = rememberModalBottomSheetState(
skipPartiallyExpanded = true, skipPartiallyExpanded = true,
confirmValueChange = { true }, confirmValueChange = { true },

@ -143,6 +143,7 @@ import org.tasks.tasklist.TasksResults
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.TasksTheme
import org.tasks.themes.Theme
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
@ -185,6 +186,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
@Inject lateinit var taskEditEventBus: TaskEditEventBus @Inject lateinit var taskEditEventBus: TaskEditEventBus
@Inject lateinit var database: Database @Inject lateinit var database: Database
@Inject lateinit var markdown: MarkdownProvider @Inject lateinit var markdown: MarkdownProvider
@Inject lateinit var theme: Theme
private val listViewModel: TaskListViewModel by viewModels() private val listViewModel: TaskListViewModel by viewModels()
private val mainViewModel: MainActivityViewModel by activityViewModels() private val mainViewModel: MainActivityViewModel by activityViewModels()
@ -363,7 +365,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
binding.banner.setContent { binding.banner.setContent {
val context = LocalContext.current val context = LocalContext.current
val state = listViewModel.state.collectAsStateWithLifecycle().value val state = listViewModel.state.collectAsStateWithLifecycle().value
TasksTheme { TasksTheme(theme = theme.themeBase.index) {
val hasRemindersPermission by rememberReminderPermissionState() val hasRemindersPermission by rememberReminderPermissionState()
val notificationPermissions = if (AndroidUtilities.atLeastTiramisu()) { val notificationPermissions = if (AndroidUtilities.atLeastTiramisu()) {
rememberPermissionState( rememberPermissionState(

@ -63,7 +63,7 @@ abstract class BaseListSettingsActivity : ThemedInjectingAppCompatActivity(), To
setOnClickListener { showThemePicker() } setOnClickListener { showThemePicker() }
} }
findViewById<ComposeView>(R.id.icon).setContent { findViewById<ComposeView>(R.id.icon).setContent {
TasksTheme { TasksTheme(theme = tasksTheme.themeBase.index) {
Row( Row(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {

@ -30,7 +30,14 @@ import androidx.lifecycle.lifecycleScope
import at.bitfire.dav4jvm.exception.HttpException import at.bitfire.dav4jvm.exception.HttpException
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.AuthState
import net.openid.appauth.AuthorizationException
import net.openid.appauth.AuthorizationRequest
import net.openid.appauth.AuthorizationServiceConfiguration
import net.openid.appauth.ClientSecretBasic
import net.openid.appauth.RegistrationRequest
import net.openid.appauth.RegistrationResponse
import net.openid.appauth.ResponseTypeValues
import org.tasks.R import org.tasks.R
import org.tasks.Tasks.Companion.IS_GENERIC import org.tasks.Tasks.Companion.IS_GENERIC
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
@ -42,7 +49,7 @@ 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.TasksTheme
import org.tasks.themes.ThemeColor import org.tasks.themes.Theme
import timber.log.Timber import timber.log.Timber
import java.util.concurrent.CountDownLatch import java.util.concurrent.CountDownLatch
import java.util.concurrent.ExecutorService import java.util.concurrent.ExecutorService
@ -61,7 +68,7 @@ import javax.inject.Inject
*/ */
@AndroidEntryPoint @AndroidEntryPoint
class SignInActivity : ComponentActivity() { class SignInActivity : ComponentActivity() {
@Inject lateinit var themeColor: ThemeColor @Inject lateinit var theme: Theme
@Inject lateinit var inventory: Inventory @Inject lateinit var inventory: Inventory
@Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var firebase: Firebase @Inject lateinit var firebase: Firebase
@ -98,7 +105,7 @@ class SignInActivity : ComponentActivity() {
var selectedPlatform by rememberSaveable { var selectedPlatform by rememberSaveable {
mutableStateOf(autoSelect) mutableStateOf(autoSelect)
} }
TasksTheme { TasksTheme(theme = theme.themeBase.index) {
selectedPlatform selectedPlatform
?.let { ?.let {
Dialog(onDismissRequest = { finish() }) { Dialog(onDismissRequest = { finish() }) {
@ -349,7 +356,7 @@ class SignInActivity : ComponentActivity() {
Timber.i("Warming up browser instance for auth request") Timber.i("Warming up browser instance for auth request")
mAuthIntent.set(authService.createCustomTabsIntent( mAuthIntent.set(authService.createCustomTabsIntent(
mAuthRequest.get().toUri(), mAuthRequest.get().toUri(),
themeColor.primaryColor theme.themeColor.primaryColor
)) ))
mAuthIntentLatch.countDown() mAuthIntentLatch.countDown()
} }

@ -56,7 +56,7 @@ class PurchaseActivity : AppCompatActivity(), OnPurchasesUpdated {
} }
setContent { setContent {
TasksTheme { TasksTheme(theme = theme.themeBase.index) {
BackHandler { BackHandler {
finish() finish()
} }

@ -24,7 +24,6 @@ import at.bitfire.dav4jvm.exception.HttpException
import com.franmontiel.persistentcookiejar.persistence.CookiePersistor import com.franmontiel.persistentcookiejar.persistence.CookiePersistor
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 com.todoroo.astrid.service.TaskDeleter import com.todoroo.astrid.service.TaskDeleter
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
@ -34,9 +33,10 @@ import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity import org.tasks.billing.PurchaseActivity
import org.tasks.compose.ServerSelector import org.tasks.compose.ServerSelector
import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.SERVER_UNKNOWN import org.tasks.data.entity.CaldavAccount.Companion.SERVER_UNKNOWN
import org.tasks.data.dao.CaldavDao import org.tasks.data.entity.Task
import org.tasks.databinding.ActivityCaldavAccountSettingsBinding import org.tasks.databinding.ActivityCaldavAccountSettingsBinding
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.Linkify import org.tasks.dialogs.Linkify
@ -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 {
TasksTheme { TasksTheme(theme = tasksTheme.themeBase.index) {
var selected by rememberSaveable { serverType } var selected by rememberSaveable { serverType }
ServerSelector(selected) { ServerSelector(selected) {
serverType.value = it serverType.value = it

@ -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 {
TasksTheme { TasksTheme(theme = tasksTheme.themeBase.index) {
val principals = principalDao.getPrincipals(it.id).collectAsStateWithLifecycle(initialValue = emptyList()).value val principals = principalDao.getPrincipals(it.id).collectAsStateWithLifecycle(initialValue = 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 {
TasksTheme { TasksTheme(theme = tasksTheme.themeBase.index) {
val openDialog = rememberSaveable { mutableStateOf(false) } val openDialog = rememberSaveable { mutableStateOf(false) }
ShareInviteDialog( ShareInviteDialog(
openDialog, openDialog,

@ -9,27 +9,32 @@ import androidx.fragment.app.Fragment
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.compose.pickers.CalendarPicker import org.tasks.compose.pickers.CalendarPicker
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.themes.TasksTheme
import org.tasks.themes.Theme
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class CalendarPicker : DialogFragment() { class CalendarPicker : DialogFragment() {
@Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var theme: Theme
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return dialogBuilder return dialogBuilder
.newDialog() .newDialog()
.setContent { .setContent {
CalendarPicker( TasksTheme(theme = theme.themeBase.index) {
selected = arguments?.getString(EXTRA_SELECTED), CalendarPicker(
onSelected = { selected = arguments?.getString(EXTRA_SELECTED),
targetFragment!!.onActivityResult( onSelected = {
targetRequestCode, targetFragment!!.onActivityResult(
Activity.RESULT_OK, targetRequestCode,
Intent().putExtra(EXTRA_CALENDAR_ID, it?.id) Activity.RESULT_OK,
) Intent().putExtra(EXTRA_CALENDAR_ID, it?.id)
dismiss() )
}, dismiss()
) },
)
}
} }
.show() .show()
} }

@ -28,17 +28,19 @@ import org.tasks.billing.PurchaseActivity.Companion.EXTRA_NAME_YOUR_PRICE
import org.tasks.compose.pickers.IconPicker import org.tasks.compose.pickers.IconPicker
import org.tasks.compose.pickers.IconPickerViewModel import org.tasks.compose.pickers.IconPickerViewModel
import org.tasks.themes.TasksTheme import org.tasks.themes.TasksTheme
import org.tasks.themes.Theme
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class IconPickerActivity : AppCompatActivity() { class IconPickerActivity : AppCompatActivity() {
@Inject lateinit var inventory: Inventory @Inject lateinit var inventory: Inventory
@Inject lateinit var theme: Theme
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContent { setContent {
TasksTheme { TasksTheme(theme = theme.themeBase.index) {
var hasPro by remember { mutableStateOf(false) } var hasPro by remember { mutableStateOf(false) }
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) { LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
hasPro = inventory.hasPro hasPro = inventory.hasPro

@ -23,37 +23,35 @@ fun DatePickerDialog(
selected: (Long) -> Unit, selected: (Long) -> Unit,
dismiss: () -> Unit, dismiss: () -> Unit,
) { ) {
TasksTheme { val initialDateUTC by remember(initialDate) {
val initialDateUTC by remember(initialDate) { derivedStateOf {
derivedStateOf { DateTime(initialDate).toUTC().millis
DateTime(initialDate).toUTC().millis
}
} }
val datePickerState = rememberDatePickerState( }
initialSelectedDateMillis = initialDateUTC, val datePickerState = rememberDatePickerState(
) initialSelectedDateMillis = initialDateUTC,
androidx.compose.material3.DatePickerDialog( )
onDismissRequest = { dismiss() }, androidx.compose.material3.DatePickerDialog(
dismissButton = { onDismissRequest = { dismiss() },
TextButton(onClick = dismiss) { dismissButton = {
Text(text = stringResource(id = R.string.cancel)) TextButton(onClick = dismiss) {
} Text(text = stringResource(id = R.string.cancel))
}, }
confirmButton = { },
TextButton( confirmButton = {
onClick = { TextButton(
datePickerState onClick = {
.selectedDateMillis datePickerState
?.let { selected(it - DateTime(it).offset) } .selectedDateMillis
dismiss() ?.let { selected(it - DateTime(it).offset) }
} dismiss()
) {
Text(text = stringResource(id = R.string.ok))
} }
) {
Text(text = stringResource(id = R.string.ok))
} }
) {
DatePicker(state = datePickerState)
} }
) {
DatePicker(state = datePickerState)
} }
} }

@ -8,7 +8,6 @@ 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.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,9 +71,7 @@ class AlertDialogBuilder internal constructor(private val context: Context) {
builder.setView(ComposeView(context) builder.setView(ComposeView(context)
.apply { .apply {
setContent { setContent {
TasksTheme { content()
content()
}
} }
} }
) )

@ -62,10 +62,14 @@ 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.themes.TasksTheme import org.tasks.themes.TasksTheme
import org.tasks.themes.Theme
import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class SortSettingsActivity : ComponentActivity() { class SortSettingsActivity : ComponentActivity() {
@Inject lateinit var theme: Theme
private val viewModel: SortSettingsViewModel by viewModels() private val viewModel: SortSettingsViewModel by viewModels()
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -74,7 +78,7 @@ 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 {
TasksTheme { TasksTheme(theme = theme.themeBase.index) {
val scrimColor = if (isSystemInDarkTheme()) val scrimColor = if (isSystemInDarkTheme())
Color(0x52454545) Color(0x52454545)
else else

@ -10,15 +10,19 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.compose.pickers.CustomRecurrence import org.tasks.compose.pickers.CustomRecurrence
import org.tasks.themes.TasksTheme import org.tasks.themes.TasksTheme
import org.tasks.themes.Theme
import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class CustomRecurrenceActivity : FragmentActivity() { class CustomRecurrenceActivity : FragmentActivity() {
@Inject lateinit var theme: Theme
val viewModel: CustomRecurrenceViewModel by viewModels() val viewModel: CustomRecurrenceViewModel by viewModels()
override fun onPostCreate(savedInstanceState: Bundle?) { override fun onPostCreate(savedInstanceState: Bundle?) {
super.onPostCreate(savedInstanceState) super.onPostCreate(savedInstanceState)
setContent { setContent {
TasksTheme { TasksTheme(theme = theme.themeBase.index) {
CustomRecurrence( CustomRecurrence(
state = viewModel.state.collectAsStateWithLifecycle().value, state = viewModel.state.collectAsStateWithLifecycle().value,
save = { save = {

@ -9,12 +9,15 @@ import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
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.Theme
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class AddAccountDialog : DialogFragment() { class AddAccountDialog : DialogFragment() {
@Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var theme: Theme
private val hasTasksAccount: Boolean private val hasTasksAccount: Boolean
get() = arguments?.getBoolean(EXTRA_HAS_TASKS_ACCOUNT) ?: false get() = arguments?.getBoolean(EXTRA_HAS_TASKS_ACCOUNT) ?: false
@ -34,10 +37,12 @@ class AddAccountDialog : DialogFragment() {
.newDialog() .newDialog()
.setTitle(R.string.choose_synchronization_service) .setTitle(R.string.choose_synchronization_service)
.setContent { .setContent {
org.tasks.compose.AddAccountDialog( TasksTheme(theme = theme.themeBase.index) {
hasTasksAccount = hasTasksAccount, org.tasks.compose.AddAccountDialog(
selected = this::selected hasTasksAccount = hasTasksAccount,
) 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)

@ -83,7 +83,7 @@ class TagPickerActivity : ThemedInjectingAppCompatActivity() {
viewModel.search("") viewModel.search("")
setContent { setContent {
TasksTheme { TasksTheme(theme = theme.themeBase.index) {
TagPicker( TagPicker(
viewModel, viewModel,
onBackClicked = { handleBackPressed() }, onBackClicked = { handleBackPressed() },

@ -41,6 +41,7 @@ import org.tasks.markdown.Markdown
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.TasksIcons import org.tasks.themes.TasksIcons
import org.tasks.themes.TasksTheme import org.tasks.themes.TasksTheme
import org.tasks.themes.Theme
import org.tasks.time.DateTimeUtils2.currentTimeMillis import org.tasks.time.DateTimeUtils2.currentTimeMillis
import org.tasks.time.startOfDay import org.tasks.time.startOfDay
import org.tasks.ui.CheckBoxProvider import org.tasks.ui.CheckBoxProvider
@ -64,7 +65,8 @@ class TaskViewHolder internal constructor(
private val rowPaddingDp: Int, private val rowPaddingDp: Int,
private val rowPaddingPx: Int, private val rowPaddingPx: Int,
private val linkify: Linkify, private val linkify: Linkify,
private val markdown: Markdown private val markdown: Markdown,
private val theme: Theme,
) : RecyclerView.ViewHolder(binding.root) { ) : RecyclerView.ViewHolder(binding.root) {
private val row: ViewGroup = binding.row private val row: ViewGroup = binding.row
private val dueDate: TextView = binding.dueDate.apply { private val dueDate: TextView = binding.dueDate.apply {
@ -255,7 +257,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 {
TasksTheme { TasksTheme(theme = theme.themeBase.index) {
ChipGroup( ChipGroup(
modifier = Modifier.padding( modifier = Modifier.padding(
end = 16.dp, end = 16.dp,

@ -14,17 +14,19 @@ import org.tasks.markdown.MarkdownProvider
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.preferences.ResourceResolver import org.tasks.preferences.ResourceResolver
import org.tasks.tasklist.TaskViewHolder.ViewHolderCallbacks import org.tasks.tasklist.TaskViewHolder.ViewHolderCallbacks
import org.tasks.themes.Theme
import org.tasks.ui.CheckBoxProvider import org.tasks.ui.CheckBoxProvider
import org.tasks.ui.ChipProvider import org.tasks.ui.ChipProvider
import javax.inject.Inject import javax.inject.Inject
class ViewHolderFactory @Inject constructor( class ViewHolderFactory @Inject constructor(
@param:ActivityContext private val context: Context, @param:ActivityContext private val context: Context,
private val preferences: Preferences, private val preferences: Preferences,
private val chipProvider: ChipProvider, private val chipProvider: ChipProvider,
private val checkBoxProvider: CheckBoxProvider, private val checkBoxProvider: CheckBoxProvider,
private val linkify: Linkify, private val linkify: Linkify,
private val headerFormatter: HeaderFormatter, private val headerFormatter: HeaderFormatter,
private val theme: Theme,
) { ) {
private val textColorSecondary: Int = ResourceResolver.getData(context, android.R.attr.textColorSecondary) private val textColorSecondary: Int = ResourceResolver.getData(context, android.R.attr.textColorSecondary)
private val textColorOverdue: Int = context.getColor(R.color.overdue) private val textColorOverdue: Int = context.getColor(R.color.overdue)
@ -47,21 +49,22 @@ class ViewHolderFactory @Inject constructor(
fun newViewHolder(parent: ViewGroup?, callbacks: ViewHolderCallbacks) = fun newViewHolder(parent: ViewGroup?, callbacks: ViewHolderCallbacks) =
TaskViewHolder( TaskViewHolder(
context as Activity, context as Activity,
TaskAdapterRowBinding.inflate(LayoutInflater.from(context), parent, false), TaskAdapterRowBinding.inflate(LayoutInflater.from(context), parent, false),
preferences, preferences,
fontSize, fontSize,
chipProvider, chipProvider,
checkBoxProvider, checkBoxProvider,
textColorOverdue, textColorOverdue,
textColorSecondary, textColorSecondary,
callbacks, callbacks,
metrics, metrics,
background, background,
selectedColor, selectedColor,
rowPaddingDp, rowPaddingDp,
rowPaddingPx, rowPaddingPx,
linkify, linkify,
markdown markdown,
theme = theme,
) )
} }

@ -13,10 +13,29 @@ import androidx.compose.ui.graphics.luminance
const val BLUE = -14575885 const val BLUE = -14575885
const val WHITE = -1 const val WHITE = -1
@Composable @Composable
fun ColorScheme.isDark() = this.background.luminance() <= 0.5 fun ColorScheme.isDark() = this.background.luminance() <= 0.5
private val lightColorScheme = lightColorScheme(
surface = Color.White,
background = Color.White,
)
private val darkColorScheme = darkColorScheme(
surface = Color(0xFF202124),
background = Color(0xFF202124),
)
private val blackColorScheme = darkColorScheme.copy(
background = Color.Black,
surface = Color.Black,
)
private val wallpaperScheme = darkColorScheme.copy(
background = Color.Transparent,
surface = Color(0x99000000),
)
@Composable @Composable
fun TasksTheme( fun TasksTheme(
theme: Int = 5, theme: Int = 5,
@ -24,14 +43,11 @@ fun TasksTheme(
content: @Composable () -> Unit, content: @Composable () -> Unit,
) { ) {
val colorScheme = when (theme) { val colorScheme = when (theme) {
0 -> lightColorScheme() 0 -> lightColorScheme
1 -> darkColorScheme( 1 -> blackColorScheme
surface = Color.Black, 2 -> darkColorScheme
background = Color.Black, 3 -> wallpaperScheme
) else -> if (isSystemInDarkTheme()) darkColorScheme else lightColorScheme
2, 3 -> darkColorScheme()
else -> if (isSystemInDarkTheme()) darkColorScheme() else lightColorScheme()
} }
val colorOnPrimary = remember(primary) { val colorOnPrimary = remember(primary) {
if (calculateContrast(WHITE, primary) < 3) { if (calculateContrast(WHITE, primary) < 3) {
@ -48,4 +64,4 @@ fun TasksTheme(
) { ) {
content() content()
} }
} }

Loading…
Cancel
Save