From c0962fc8326bbf067ae9a8ce2e872b631e69a464 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 1 Jan 2026 23:04:09 -0600 Subject: [PATCH] Fix lint errors --- .../todoroo/astrid/ui/StartDateControlSet.kt | 14 ++-- .../org/tasks/billing/PurchaseActivity.kt | 4 +- .../java/org/tasks/compose/FilterCondition.kt | 3 +- .../java/org/tasks/compose/SubtaskChip.kt | 13 ++-- .../org/tasks/compose/edit/StartDateRow.kt | 12 ++- .../tasks/compose/pickers/CustomRecurrence.kt | 78 +++++++++---------- .../tasks/compose/settings/SelectColorRow.kt | 3 +- .../tasks/compose/settings/SelectIconRow.kt | 3 +- .../java/org/tasks/tags/TagPickerActivity.kt | 11 ++- 9 files changed, 69 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/ui/StartDateControlSet.kt b/app/src/main/java/com/todoroo/astrid/ui/StartDateControlSet.kt index 4189dc4af..85cabbc6e 100644 --- a/app/src/main/java/com/todoroo/astrid/ui/StartDateControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/ui/StartDateControlSet.kt @@ -1,9 +1,10 @@ package com.todoroo.astrid.ui import android.app.Activity -import android.content.Context import android.content.Intent import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.fragment.app.viewModels @@ -113,11 +114,14 @@ class StartDateControlSet : TaskEditControlFragment() { private const val REQUEST_START_DATE = 11011 private const val FRAG_TAG_DATE_PICKER = "frag_tag_date_picker" - internal fun Context.getRelativeDateString(resId: Int, time: Int) = - if (time == NO_TIME) { - getString(resId) + @Composable + internal fun getRelativeDateString(resId: Int, time: Int): String { + val label = stringResource(resId) + return if (time == NO_TIME) { + label } else { - "${getString(resId)} ${getTimeString(currentTimeMillis().withMillisOfDay(time), this.is24HourFormat)}" + "$label ${getTimeString(currentTimeMillis().withMillisOfDay(time), LocalContext.current.is24HourFormat)}" } + } } } diff --git a/app/src/main/java/org/tasks/billing/PurchaseActivity.kt b/app/src/main/java/org/tasks/billing/PurchaseActivity.kt index f8259fc02..dee53de1a 100644 --- a/app/src/main/java/org/tasks/billing/PurchaseActivity.kt +++ b/app/src/main/java/org/tasks/billing/PurchaseActivity.kt @@ -9,6 +9,7 @@ import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import dagger.hilt.android.AndroidEntryPoint @@ -51,11 +52,12 @@ class PurchaseActivity : AppCompatActivity(), OnPurchasesUpdated { skus = state.skus, snackbarHostState = snackbarHostState, ) + val dismissLabel = stringResource(R.string.dismiss) LaunchedEffect(state.error) { if (state.error?.isNotBlank() == true) { snackbarHostState.showSnackbar( message = state.error, - actionLabel = context.getString(R.string.dismiss), + actionLabel = dismissLabel, duration = SnackbarDuration.Long, ) viewModel.dismissError() diff --git a/app/src/main/java/org/tasks/compose/FilterCondition.kt b/app/src/main/java/org/tasks/compose/FilterCondition.kt index 205951144..e54016de9 100644 --- a/app/src/main/java/org/tasks/compose/FilterCondition.kt +++ b/app/src/main/java/org/tasks/compose/FilterCondition.kt @@ -50,7 +50,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -309,7 +308,7 @@ object FilterCondition { ) if (isExtended) Text( - text = LocalContext.current.getString(R.string.CFA_button_add), + text = stringResource(R.string.CFA_button_add), modifier = Modifier.padding(end = 16.dp) ) } diff --git a/app/src/main/java/org/tasks/compose/SubtaskChip.kt b/app/src/main/java/org/tasks/compose/SubtaskChip.kt index 4126233f9..ad1fa8689 100644 --- a/app/src/main/java/org/tasks/compose/SubtaskChip.kt +++ b/app/src/main/java/org/tasks/compose/SubtaskChip.kt @@ -1,8 +1,9 @@ package org.tasks.compose import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.res.pluralStringResource import org.tasks.R import org.tasks.themes.TasksIcons import java.text.NumberFormat @@ -14,7 +15,7 @@ fun SubtaskChip( compact: Boolean, onClick: () -> Unit, ) { - val context = LocalContext.current + val chipColor = colorResource(R.color.default_chip_background).toArgb() Chip( icon = if (collapsed) TasksIcons.KEYBOARD_ARROW_DOWN @@ -23,13 +24,11 @@ fun SubtaskChip( name = if (compact) NumberFormat.getInstance().format(children) else - remember(children) { - context.resources.getQuantityString(R.plurals.subtask_count, children, children) - }, + pluralStringResource(R.plurals.subtask_count, children, children), theme = 0, showText = true, showIcon = true, onClick = onClick, - colorProvider = { context.getColor(R.color.default_chip_background) }, + colorProvider = { chipColor }, ) } diff --git a/app/src/main/java/org/tasks/compose/edit/StartDateRow.kt b/app/src/main/java/org/tasks/compose/edit/StartDateRow.kt index 3bf40a858..b485fd6f8 100644 --- a/app/src/main/java/org/tasks/compose/edit/StartDateRow.kt +++ b/app/src/main/java/org/tasks/compose/edit/StartDateRow.kt @@ -8,7 +8,6 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -57,15 +56,14 @@ fun StartDate( hasDueDate: Boolean, printDate: () -> String, ) { - val context = LocalContext.current Text( text = when (selectedDay) { - StartDatePicker.DUE_DATE -> context.getRelativeDateString(R.string.due_date, selectedTime) - StartDatePicker.DUE_TIME -> context.getString(R.string.due_time) - StartDatePicker.DAY_BEFORE_DUE -> context.getRelativeDateString(R.string.day_before_due, selectedTime) - StartDatePicker.WEEK_BEFORE_DUE -> context.getRelativeDateString(R.string.week_before_due, selectedTime) + StartDatePicker.DUE_DATE -> getRelativeDateString(R.string.due_date, selectedTime) + StartDatePicker.DUE_TIME -> stringResource(R.string.due_time) + StartDatePicker.DAY_BEFORE_DUE -> getRelativeDateString(R.string.day_before_due, selectedTime) + StartDatePicker.WEEK_BEFORE_DUE -> getRelativeDateString(R.string.week_before_due, selectedTime) in 1..Long.MAX_VALUE -> printDate() - else -> stringResource(id = R.string.no_start_date) + else -> stringResource(R.string.no_start_date) }, color = when { selectedDay < 0 && !hasDueDate -> MaterialTheme.colorScheme.error diff --git a/app/src/main/java/org/tasks/compose/pickers/CustomRecurrence.kt b/app/src/main/java/org/tasks/compose/pickers/CustomRecurrence.kt index 8ac03dce0..b03c4d3b9 100644 --- a/app/src/main/java/org/tasks/compose/pickers/CustomRecurrence.kt +++ b/app/src/main/java/org/tasks/compose/pickers/CustomRecurrence.kt @@ -43,7 +43,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview @@ -138,17 +137,12 @@ fun CustomRecurrence( number = state.interval, onTextChanged = setInterval, ) - val context = LocalContext.current - val options by remember(state.interval, state.frequency) { - derivedStateOf { - state.frequencyOptions.map { - context.resources.getQuantityString( - it.plural, - state.interval, - state.interval, - ) - } - } + val options = state.frequencyOptions.map { + pluralStringResource( + id = it.plural, + count = state.interval, + state.interval, + ) } OutlinedSpinner( text = pluralStringResource( @@ -279,36 +273,37 @@ private fun MonthlyPicker( modifier = Modifier.padding(vertical = 16.dp), color = border() ) - val context = LocalContext.current - val options = remember(dayNumber, dayOfWeek, nthWeek, isLastWeek, locale) { + val dayOfWeekDisplayName = remember(dayOfWeek, locale) { + dayOfWeek.getDisplayName(TextStyle.FULL, locale) + } + val onDayNumber = stringResource(R.string.repeat_monthly_on_day_number, dayNumber) + val nth = stringResource( + when (nthWeek - 1) { + 0 -> R.string.repeat_monthly_first_week + 1 -> R.string.repeat_monthly_second_week + 2 -> R.string.repeat_monthly_third_week + 3 -> R.string.repeat_monthly_fourth_week + 4 -> R.string.repeat_monthly_fifth_week + else -> throw IllegalArgumentException() + } + ) + val onNthWeekday = stringResource( + R.string.repeat_monthly_on_the_nth_weekday, + nth, + dayOfWeekDisplayName + ) + val lastWeekString = stringResource(R.string.repeat_monthly_last_week) + val onLastWeekday = stringResource( + R.string.repeat_monthly_on_the_nth_weekday, + lastWeekString, + dayOfWeekDisplayName + ) + val options = remember(onDayNumber, onNthWeekday, onLastWeekday, isLastWeek) { ArrayList().apply { - add(context.getString(R.string.repeat_monthly_on_day_number, dayNumber)) - val nth = context.getString( - when (nthWeek - 1) { - 0 -> R.string.repeat_monthly_first_week - 1 -> R.string.repeat_monthly_second_week - 2 -> R.string.repeat_monthly_third_week - 3 -> R.string.repeat_monthly_fourth_week - 4 -> R.string.repeat_monthly_fifth_week - else -> throw IllegalArgumentException() - } - ) - val dayOfWeekDisplayName = dayOfWeek.getDisplayName(TextStyle.FULL, locale) - add( - context.getString( - R.string.repeat_monthly_on_the_nth_weekday, - nth, - dayOfWeekDisplayName - ) - ) + add(onDayNumber) + add(onNthWeekday) if (isLastWeek) { - add( - context.getString( - R.string.repeat_monthly_on_the_nth_weekday, - context.getString(R.string.repeat_monthly_last_week), - dayOfWeekDisplayName - ) - ) + add(onLastWeekday) } } } @@ -347,8 +342,7 @@ private fun EndsPicker( RadioRow(selected = selection == 1, onClick = { setSelection(1) }) { Text(text = stringResource(id = R.string.repeats_on)) Spacer(modifier = Modifier.width(8.dp)) - val context = LocalContext.current - val endDateString by remember(context, endDate) { + val endDateString by remember(endDate) { derivedStateOf { runBlocking { getRelativeDay(endDate) diff --git a/app/src/main/java/org/tasks/compose/settings/SelectColorRow.kt b/app/src/main/java/org/tasks/compose/settings/SelectColorRow.kt index d24f60dd7..2cce750b7 100644 --- a/app/src/main/java/org/tasks/compose/settings/SelectColorRow.kt +++ b/app/src/main/java/org/tasks/compose/settings/SelectColorRow.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.colorResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.flask.colorpicker.ColorPickerView @@ -142,7 +143,7 @@ fun SelectColorRow( }, center = { Text( - text = LocalContext.current.getString(R.string.color), + text = stringResource(R.string.color), modifier = Modifier.padding(start = Constants.KEYLINE_FIRST) ) }, diff --git a/app/src/main/java/org/tasks/compose/settings/SelectIconRow.kt b/app/src/main/java/org/tasks/compose/settings/SelectIconRow.kt index 9e6fd83ae..fb95b6e17 100644 --- a/app/src/main/java/org/tasks/compose/settings/SelectIconRow.kt +++ b/app/src/main/java/org/tasks/compose/settings/SelectIconRow.kt @@ -8,6 +8,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.colorResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import org.tasks.R import org.tasks.compose.Constants @@ -30,7 +31,7 @@ fun SelectIconRow(icon: String, selectIcon: () -> Unit) = }, center = { Text( - text = LocalContext.current.getString(R.string.icon), + text = stringResource(R.string.icon), modifier = Modifier.padding(start = Constants.KEYLINE_FIRST) ) } diff --git a/app/src/main/java/org/tasks/tags/TagPickerActivity.kt b/app/src/main/java/org/tasks/tags/TagPickerActivity.kt index 9ef2e4c8f..90e8f6b0b 100644 --- a/app/src/main/java/org/tasks/tags/TagPickerActivity.kt +++ b/app/src/main/java/org/tasks/tags/TagPickerActivity.kt @@ -35,7 +35,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.state.ToggleableState import androidx.compose.ui.text.TextStyle @@ -175,7 +176,6 @@ internal fun SearchBar( onBack: () -> Unit ) { val searchPattern = remember { viewModel.searchText } - val invitation = LocalContext.current.getString(R.string.enter_tag_name) Row(verticalAlignment = Alignment.CenterVertically) { Icon( ImageVector.vectorResource(id = R.drawable.ic_outline_arrow_back_24px), @@ -191,7 +191,7 @@ internal fun SearchBar( onValueChange = { viewModel.search(it) }, placeholder = { Text( - text = invitation, + text = stringResource(R.string.enter_tag_name), color = MaterialTheme.colorScheme.onSurface, ) }, @@ -232,11 +232,10 @@ internal fun PickerBox ( LazyColumn { if (viewModel.tagToCreate.value != "") { item(key = -1) { - val text = LocalContext.current.getString(R.string.new_tag) + " \"${viewModel.tagToCreate.value}\"" TagRow( icon = TasksIcons.ADD, - iconColor = Color(LocalContext.current.getColor(R.color.icon_tint_with_alpha)), - text = text, + iconColor = colorResource(R.color.icon_tint_with_alpha), + text = "${stringResource(R.string.new_tag)} \"${viewModel.tagToCreate.value}\"", onClick = { newItem(viewModel.searchText.value) } ) }