From cc91d14b5ab241a6473e7304ff1ebf71b0c2bd96 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 8 May 2026 10:03:33 -0400 Subject: [PATCH 01/26] Add Surface box to end of tools layout for personalization --- .../ui/dashboard/tools/ToolsLayout.kt | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt index 1fa39facec..ef438241d5 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt @@ -15,6 +15,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SegmentedButton import androidx.compose.material3.SegmentedButtonDefaults import androidx.compose.material3.SingleChoiceSegmentedButtonRow +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -23,6 +24,7 @@ import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.components.SingletonComponent @@ -121,6 +123,28 @@ internal fun ToolsLayout(state: UiState, modifier: Modifier = Modifier) { .padding(bottom = 16.dp, horizontal = MARGIN_TOOLS_LAYOUT_HORIZONTAL) ) } + + item("localization-settings-box", "localization-settings-box") { + Surface( + color = MaterialTheme.colorScheme.primaryContainer, + modifier = Modifier + .fillMaxWidth() + ) { + Column( + modifier = Modifier.padding(32.dp) + ) { + Text( + text = stringResource(R.string.country_settings_subtitle_header), + fontWeight = FontWeight.Bold, + style = MaterialTheme.typography.bodyMedium + ) + Text( + text = stringResource(R.string.country_settings_subtitle_body), + style = MaterialTheme.typography.bodySmall + ) + } + } + } } } From cf69aa853240ddd09dbfc57d0ede92d289845478 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 8 May 2026 11:55:07 -0400 Subject: [PATCH 02/26] Create and insert localizations settings box for tools and lessons pages; lessons WIP --- .../ui/dashboard/LocalizationSettingsBox.kt | 57 +++++++++++++++++++ .../ui/dashboard/tools/ToolsLayout.kt | 27 +++------ .../ui/dashboard/tools/ToolsPresenter.kt | 3 + app/src/main/res/values/strings_dashboard.xml | 3 + 4 files changed, 71 insertions(+), 19 deletions(-) create mode 100644 app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt new file mode 100644 index 0000000000..e9b886b4dd --- /dev/null +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt @@ -0,0 +1,57 @@ +package org.cru.godtools.ui.dashboard + +import androidx.annotation.StringRes +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import org.cru.godtools.R + +@Composable +fun LocalizationSettingsBox( + @StringRes title: Int, + @StringRes description: Int, + onClickSettings: () -> Unit, + modifier: Modifier = Modifier, +) { + Surface( + color = MaterialTheme.colorScheme.primaryContainer, + modifier = modifier.fillMaxWidth(), + ) { + Column(modifier = Modifier.padding(32.dp)) { + Text( + text = stringResource(title), + fontWeight = FontWeight.Bold, + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurface, + ) + Text( + text = stringResource(description), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurface, + ) + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + horizontalArrangement = Arrangement.Center, + ) { + Button( + onClick = onClickSettings, + ) { + Text(stringResource(R.string.dashboard_section_localization_box_button)) + } + } + } + } +} diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt index ef438241d5..5351cd8dbd 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt @@ -3,6 +3,7 @@ package org.cru.godtools.ui.dashboard.tools import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentWidth @@ -10,6 +11,7 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.material3.Button import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SegmentedButton @@ -32,6 +34,7 @@ import org.ccci.gto.android.common.compose.foundation.layout.padding import org.cru.godtools.R import org.cru.godtools.base.ui.circuit.screen.dashboard.page.ToolsScreen import org.cru.godtools.ui.banner.Banners +import org.cru.godtools.ui.dashboard.LocalizationSettingsBox import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiEvent import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiState import org.cru.godtools.ui.tools.SquareToolCard @@ -125,25 +128,11 @@ internal fun ToolsLayout(state: UiState, modifier: Modifier = Modifier) { } item("localization-settings-box", "localization-settings-box") { - Surface( - color = MaterialTheme.colorScheme.primaryContainer, - modifier = Modifier - .fillMaxWidth() - ) { - Column( - modifier = Modifier.padding(32.dp) - ) { - Text( - text = stringResource(R.string.country_settings_subtitle_header), - fontWeight = FontWeight.Bold, - style = MaterialTheme.typography.bodyMedium - ) - Text( - text = stringResource(R.string.country_settings_subtitle_body), - style = MaterialTheme.typography.bodySmall - ) - } - } + LocalizationSettingsBox( + title = R.string.dashboard_tools_section_personalized_localization_title, + description = R.string.dashboard_tools_section_personalized_localization_text, + onClickSettings = { state.eventSink(UiEvent.OpenLocalizationSettings) } + ) } } } diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsPresenter.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsPresenter.kt index da2eccb9d9..1d698fe95f 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsPresenter.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsPresenter.kt @@ -43,6 +43,7 @@ import org.cru.godtools.ui.dashboard.SyncTaskRegistry.Companion.syncTaskRegistry import org.cru.godtools.ui.dashboard.tools.ToolFiltersStateProducer.Filters import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiState import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiState.Mode +import org.cru.godtools.ui.settings.country.CountrySettingsScreen import org.cru.godtools.ui.tooldetails.ToolDetailsScreen import org.cru.godtools.ui.tools.ToolCardPresenter import org.cru.godtools.ui.tools.ToolCardPresenter.ToolCardEvent @@ -79,6 +80,7 @@ class ToolsPresenter @AssistedInject internal constructor( sealed interface UiEvent : CircuitUiEvent { data class ChangeMode(val mode: Mode) : UiEvent + data object OpenLocalizationSettings : UiEvent } // endregion UiState / UiEvent @@ -120,6 +122,7 @@ class ToolsPresenter @AssistedInject internal constructor( ) { when (it) { is UiEvent.ChangeMode -> mode = it.mode + is UiEvent.OpenLocalizationSettings -> navigator.goTo(CountrySettingsScreen) } } } diff --git a/app/src/main/res/values/strings_dashboard.xml b/app/src/main/res/values/strings_dashboard.xml index 51486d7454..51f76eaa6e 100644 --- a/app/src/main/res/values/strings_dashboard.xml +++ b/app/src/main/res/values/strings_dashboard.xml @@ -83,6 +83,9 @@ An online version can be found at https://knowgod.com/ All Tools Featured Here are some tools we thought you might like + Displaying localized Tools list + The tools shown in your Personalized Tools page are selected based on your Language and Localization setting. You can alter this by editing your setting. + Change Localization Settings From fc99ef8d2cddf995194a87ebf93dd0e1d768aae7 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 8 May 2026 16:53:38 -0400 Subject: [PATCH 03/26] Add string resources for lessons layout personalization --- app/src/main/res/values/strings_dashboard.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values/strings_dashboard.xml b/app/src/main/res/values/strings_dashboard.xml index 51f76eaa6e..82e4902e8e 100644 --- a/app/src/main/res/values/strings_dashboard.xml +++ b/app/src/main/res/values/strings_dashboard.xml @@ -49,6 +49,8 @@ An online version can be found at https://knowgod.com/ Completed %1$d%% Complete + Displaying localized Lessons list + The lessons shown on this page are based on your Localization setting. You can alter this at any time. From 42a0af0a491e6157381c39b6cb29c9301de533ab Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 8 May 2026 16:54:24 -0400 Subject: [PATCH 04/26] Add UiEvent for going to localization settings from lesson layout --- .../org/cru/godtools/ui/dashboard/lessons/LessonsPresenter.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsPresenter.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsPresenter.kt index 8fdb399832..579692cb83 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsPresenter.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsPresenter.kt @@ -54,6 +54,8 @@ import org.cru.godtools.sync.GodToolsSyncService import org.cru.godtools.ui.dashboard.SyncTaskRegistry.Companion.syncTaskRegistry import org.cru.godtools.ui.dashboard.filters.FilterMenu import org.cru.godtools.ui.dashboard.lessons.LessonsPresenter.UiState +import org.cru.godtools.ui.dashboard.tools.ToolsPresenter +import org.cru.godtools.ui.settings.country.CountrySettingsScreen import org.cru.godtools.ui.tools.ToolCardPresenter import org.cru.godtools.ui.tools.ToolCardPresenter.ToolCardEvent import org.cru.godtools.util.createToolIntent @@ -89,6 +91,7 @@ class LessonsPresenter @AssistedInject internal constructor( internal sealed interface UiEvent : CircuitUiEvent { data class ChangeMode(val mode: UiState.Mode) : UiEvent + data object OpenLocalizationSettings : UiEvent } // endregion UiState / UiEvent @@ -114,6 +117,7 @@ class LessonsPresenter @AssistedInject internal constructor( ) { when (it) { is UiEvent.ChangeMode -> mode = it.mode + is UiEvent.OpenLocalizationSettings -> navigator.goTo(CountrySettingsScreen) } } } From 5ccbf155253a7dc8ebe9c7ad750fac5dceafac2b Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 8 May 2026 16:55:51 -0400 Subject: [PATCH 05/26] Add locationSettingsBox to lessons layout; Make padding similar to tools layout --- .../ui/dashboard/lessons/LessonsLayout.kt | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt index 4dd655489e..6f26c34872 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt @@ -1,7 +1,6 @@ package org.cru.godtools.ui.dashboard.lessons import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentWidth @@ -20,16 +19,20 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.components.SingletonComponent +import org.ccci.gto.android.common.compose.foundation.layout.padding import org.cru.godtools.R import org.cru.godtools.base.ui.circuit.screen.dashboard.page.LessonsScreen +import org.cru.godtools.ui.dashboard.LocalizationSettingsBox import org.cru.godtools.ui.dashboard.lessons.LessonsPresenter.UiEvent import org.cru.godtools.ui.dashboard.lessons.LessonsPresenter.UiState import org.cru.godtools.ui.tools.LessonToolCard +internal val MARGIN_LESSONS_LAYOUT_HORIZONTAL = 16.dp + @Composable @CircuitInject(LessonsScreen::class, SingletonComponent::class) internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { - LazyColumn(contentPadding = PaddingValues(start = 16.dp, end = 16.dp, bottom = 16.dp), modifier = modifier) { + LazyColumn(modifier = modifier) { if (state.isPersonalizationEnabled) { item("mode-toggle", "mode-toggle") { PersonalizationToggle( @@ -42,9 +45,12 @@ internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { } item("header", "header") { - LessonsHeader(state.mode, modifier = Modifier.padding(top = 16.dp)) - HorizontalDivider(modifier = Modifier.padding(vertical = 12.dp)) - LessonFilters(state) + LessonsHeader( + state.mode, + modifier = Modifier.padding(top = 16.dp, bottom = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL) + ) + HorizontalDivider(modifier = Modifier.padding(horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL)) + LessonFilters(state, modifier.padding(vertical = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL)) } items(state.lessons, { it.toolCode.orEmpty() }, { "lesson" }) { toolState -> @@ -54,7 +60,15 @@ internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { showProgress = true, modifier = Modifier .animateItem() - .padding(top = 16.dp) + .padding(bottom = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL) + ) + } + + item("localization-settings-box", "localization-settings-box") { + LocalizationSettingsBox( + title = R.string.dashboard_lessons_section_personalized_localization_title, + description = R.string.dashboard_lessons_section_personalized_localization_text, + onClickSettings = { state.eventSink(UiEvent.OpenLocalizationSettings) } ) } } From 87a4eb8a1b9cb2af0972a350ff0c876c3c6a96da Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 8 May 2026 16:56:21 -0400 Subject: [PATCH 06/26] Remove unused imports --- .../org/cru/godtools/ui/dashboard/lessons/LessonsPresenter.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsPresenter.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsPresenter.kt index 579692cb83..58924ec3cd 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsPresenter.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsPresenter.kt @@ -54,7 +54,6 @@ import org.cru.godtools.sync.GodToolsSyncService import org.cru.godtools.ui.dashboard.SyncTaskRegistry.Companion.syncTaskRegistry import org.cru.godtools.ui.dashboard.filters.FilterMenu import org.cru.godtools.ui.dashboard.lessons.LessonsPresenter.UiState -import org.cru.godtools.ui.dashboard.tools.ToolsPresenter import org.cru.godtools.ui.settings.country.CountrySettingsScreen import org.cru.godtools.ui.tools.ToolCardPresenter import org.cru.godtools.ui.tools.ToolCardPresenter.ToolCardEvent From 963815e53af62805ca37e4b1972f8d7b5788ade2 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 8 May 2026 16:57:54 -0400 Subject: [PATCH 07/26] Remove unnecessary Row composable for center alignment; Remove unused imports and style declarations --- .../ui/dashboard/LocalizationSettingsBox.kt | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt index e9b886b4dd..bf832b434d 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt @@ -1,9 +1,7 @@ package org.cru.godtools.ui.dashboard import androidx.annotation.StringRes -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button @@ -11,6 +9,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight @@ -28,29 +27,23 @@ fun LocalizationSettingsBox( color = MaterialTheme.colorScheme.primaryContainer, modifier = modifier.fillMaxWidth(), ) { - Column(modifier = Modifier.padding(32.dp)) { + Column(modifier = Modifier.padding(16.dp)) { Text( text = stringResource(title), fontWeight = FontWeight.Bold, - style = MaterialTheme.typography.bodyLarge, - color = MaterialTheme.colorScheme.onSurface, + style = MaterialTheme.typography.bodyLarge ) Text( text = stringResource(description), - style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurface, + style = MaterialTheme.typography.bodySmall ) - Row( + Button( + onClick = onClickSettings, modifier = Modifier - .fillMaxWidth() - .padding(top = 8.dp), - horizontalArrangement = Arrangement.Center, + .align(Alignment.CenterHorizontally) + .padding(top = 8.dp) ) { - Button( - onClick = onClickSettings, - ) { - Text(stringResource(R.string.dashboard_section_localization_box_button)) - } + Text(stringResource(R.string.dashboard_section_localization_box_button)) } } } From b3e13962b3d70d1c06c3759ba6f6c01b7c78da22 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 8 May 2026 16:59:09 -0400 Subject: [PATCH 08/26] Remove unused imports --- .../kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt index 5351cd8dbd..357d03acb4 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt @@ -3,7 +3,6 @@ package org.cru.godtools.ui.dashboard.tools import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentWidth @@ -11,13 +10,11 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState -import androidx.compose.material3.Button import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SegmentedButton import androidx.compose.material3.SegmentedButtonDefaults import androidx.compose.material3.SingleChoiceSegmentedButtonRow -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -26,7 +23,6 @@ import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.components.SingletonComponent From 1a2bc22e6029acabd24d954bee8790e1e45b0c80 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 8 May 2026 17:03:02 -0400 Subject: [PATCH 09/26] Gate the localization settings banner based on the isPersonalizationEnabled flag --- .../godtools/ui/dashboard/lessons/LessonsLayout.kt | 14 ++++++++------ .../cru/godtools/ui/dashboard/tools/ToolsLayout.kt | 14 ++++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt index 6f26c34872..0dbbbd6b6f 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt @@ -64,12 +64,14 @@ internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { ) } - item("localization-settings-box", "localization-settings-box") { - LocalizationSettingsBox( - title = R.string.dashboard_lessons_section_personalized_localization_title, - description = R.string.dashboard_lessons_section_personalized_localization_text, - onClickSettings = { state.eventSink(UiEvent.OpenLocalizationSettings) } - ) + if (state.isPersonalizationEnabled) { + item("localization-settings-box", "localization-settings-box") { + LocalizationSettingsBox( + title = R.string.dashboard_lessons_section_personalized_localization_title, + description = R.string.dashboard_lessons_section_personalized_localization_text, + onClickSettings = { state.eventSink(UiEvent.OpenLocalizationSettings) } + ) + } } } } diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt index 357d03acb4..a708da3786 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt @@ -123,12 +123,14 @@ internal fun ToolsLayout(state: UiState, modifier: Modifier = Modifier) { ) } - item("localization-settings-box", "localization-settings-box") { - LocalizationSettingsBox( - title = R.string.dashboard_tools_section_personalized_localization_title, - description = R.string.dashboard_tools_section_personalized_localization_text, - onClickSettings = { state.eventSink(UiEvent.OpenLocalizationSettings) } - ) + if (state.isPersonalizationEnabled) { + item("localization-settings-box", "localization-settings-box") { + LocalizationSettingsBox( + title = R.string.dashboard_tools_section_personalized_localization_title, + description = R.string.dashboard_tools_section_personalized_localization_text, + onClickSettings = { state.eventSink(UiEvent.OpenLocalizationSettings) } + ) + } } } } From 51125614b74ec7801239e851d837d1e7e7bd413b Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 8 May 2026 17:08:05 -0400 Subject: [PATCH 10/26] Minor lint fix --- .../org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt index 0dbbbd6b6f..9541b3624d 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt @@ -47,10 +47,13 @@ internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { item("header", "header") { LessonsHeader( state.mode, - modifier = Modifier.padding(top = 16.dp, bottom = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL) + Modifier.padding(top = 16.dp, bottom = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL) ) HorizontalDivider(modifier = Modifier.padding(horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL)) - LessonFilters(state, modifier.padding(vertical = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL)) + LessonFilters( + state, + modifier = Modifier.padding(vertical = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL) + ) } items(state.lessons, { it.toolCode.orEmpty() }, { "lesson" }) { toolState -> From 210a55d8b818bfb3e9f2c893285c4dffcf42cfea Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 8 May 2026 17:11:39 -0400 Subject: [PATCH 11/26] Make localizationSettingsBox internal following lessons and tools layout convention --- .../org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt index bf832b434d..c040224208 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.unit.dp import org.cru.godtools.R @Composable -fun LocalizationSettingsBox( +internal fun LocalizationSettingsBox( @StringRes title: Int, @StringRes description: Int, onClickSettings: () -> Unit, From 63f45a80fcc276805bab1953db884b3bf93749fc Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Tue, 12 May 2026 13:51:04 -0400 Subject: [PATCH 12/26] Revert erroneous padding changes and correct personalization if statement --- .../ui/dashboard/lessons/LessonsLayout.kt | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt index 9541b3624d..7984689ccd 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt @@ -1,7 +1,9 @@ package org.cru.godtools.ui.dashboard.lessons import androidx.compose.foundation.layout.Column +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.wrapContentWidth import androidx.compose.foundation.lazy.LazyColumn @@ -45,15 +47,14 @@ internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { } item("header", "header") { - LessonsHeader( - state.mode, - Modifier.padding(top = 16.dp, bottom = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL) - ) - HorizontalDivider(modifier = Modifier.padding(horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL)) - LessonFilters( - state, - modifier = Modifier.padding(vertical = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL) + LessonsHeader(state.mode, Modifier.padding(top = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL)) + HorizontalDivider( + modifier = Modifier.padding( + vertical = 12.dp, + horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL + ) ) + LessonFilters(state, modifier = Modifier.padding(horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL)) } items(state.lessons, { it.toolCode.orEmpty() }, { "lesson" }) { toolState -> @@ -63,11 +64,15 @@ internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { showProgress = true, modifier = Modifier .animateItem() - .padding(bottom = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL) + .padding(top = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL) ) } - if (state.isPersonalizationEnabled) { + item("spacer", "spacer") { + Spacer(modifier = Modifier.height(16.dp)) + } + + if (state.mode == UiState.Mode.PERSONALIZATION) { item("localization-settings-box", "localization-settings-box") { LocalizationSettingsBox( title = R.string.dashboard_lessons_section_personalized_localization_title, From 91e8186d067f9ca31b81890fbbbe15c952748a87 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Tue, 12 May 2026 13:51:46 -0400 Subject: [PATCH 13/26] Correct personalization if statement for personalization settings box --- .../kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt index a708da3786..93f8292280 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt @@ -123,7 +123,7 @@ internal fun ToolsLayout(state: UiState, modifier: Modifier = Modifier) { ) } - if (state.isPersonalizationEnabled) { + if (state.mode == UiState.Mode.PERSONALIZATION) { item("localization-settings-box", "localization-settings-box") { LocalizationSettingsBox( title = R.string.dashboard_tools_section_personalized_localization_title, From 91983dd7627f6affbf670018b0e05d7210694e43 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Tue, 12 May 2026 13:54:26 -0400 Subject: [PATCH 14/26] Add snapshot tests for lessons and tools localization settings box --- .../dashboard/DashboardLayoutPaparazziTest.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/src/testDebug/kotlin/org/cru/godtools/ui/dashboard/DashboardLayoutPaparazziTest.kt b/app/src/testDebug/kotlin/org/cru/godtools/ui/dashboard/DashboardLayoutPaparazziTest.kt index 13739919fd..5befbe7864 100644 --- a/app/src/testDebug/kotlin/org/cru/godtools/ui/dashboard/DashboardLayoutPaparazziTest.kt +++ b/app/src/testDebug/kotlin/org/cru/godtools/ui/dashboard/DashboardLayoutPaparazziTest.kt @@ -194,6 +194,17 @@ class DashboardLayoutPaparazziTest( snapshotDashboardLayout(state.copy(initialPage = ToolsScreen)) } + @Test + fun `ToolsLayout() - Personalization - Localization Settings Box`() { + assumeTrue(locale == null) + toolsState = toolsState.copy( + mode = ToolsPresenter.UiState.Mode.PERSONALIZATION, + spotlightTools = emptyList(), + tools = emptyList(), + ) + snapshotDashboardLayout(state.copy(initialPage = ToolsScreen)) + } + @Test fun `ToolsLayout() - No Personalization`() { assumeTrue(locale == null) @@ -303,6 +314,16 @@ class DashboardLayoutPaparazziTest( snapshotDashboardLayout(state.copy(initialPage = LessonsScreen)) } + @Test + fun `LessonsLayout() - Personalization - Localization Settings Box`() { + assumeTrue(locale == null) + lessonsState = lessonsState.copy( + mode = LessonsPresenter.UiState.Mode.PERSONALIZATION, + lessons = emptyList(), + ) + snapshotDashboardLayout(state.copy(initialPage = LessonsScreen)) + } + @Test fun `LessonsLayout() - Personalization Disabled`() { lessonsState = lessonsState.copy(isPersonalizationEnabled = false) From 8603cfb9522f5fdbc228b5f6e35da78610ed4b54 Mon Sep 17 00:00:00 2001 From: tjohnson009 Date: Tue, 12 May 2026 18:31:06 +0000 Subject: [PATCH 15/26] Record updated snapshots --- ...ttings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png | 3 +++ ...ttings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png | 3 +++ ...ngs_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 3 +++ ...gs_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png | 3 +++ ...Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 3 +++ ...ttings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png | 3 +++ ...ttings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png | 3 +++ ...ngs_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 3 +++ ...gs_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png | 3 +++ ...Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 3 +++ ..._Tools[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...ols[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 4 ++-- 12 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png create mode 100644 app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png create mode 100644 app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png create mode 100644 app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png create mode 100644 app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png create mode 100644 app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png create mode 100644 app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png create mode 100644 app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png create mode 100644 app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png create mode 100644 app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png new file mode 100644 index 0000000000..ff90d0807e --- /dev/null +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88037b43364778a17ea541a5a9ff91f18dab4ca7ec23f8c78af9a4d84ffe1491 +size 59923 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png new file mode 100644 index 0000000000..1b47fb2801 --- /dev/null +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e6c69f37ea620d68a34459e12ac4ea49e703c8b0082d2dfea8562ab7bc02263 +size 146077 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png new file mode 100644 index 0000000000..c33044e913 --- /dev/null +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db0c7e87e5f3f182c6fdde7f067a5a258448d3cd6eda17bedb729c8b4a8e3af1 +size 58623 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png new file mode 100644 index 0000000000..f1c79d68eb --- /dev/null +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b64905c8817b7182ca5e99aea6db85661b4af3207012c2e6f9d94b4c2ec6b081 +size 44690 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png new file mode 100644 index 0000000000..2203013141 --- /dev/null +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cad7865b6949418356558a50675fb14d2c4aed2c69f6f1d91429663ae9f9cc16 +size 43957 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png new file mode 100644 index 0000000000..bfb94106db --- /dev/null +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b61990b52f911bc8a5a5fa53786486e4fb252d167b3c88df20d3c6088c2c898 +size 69438 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png new file mode 100644 index 0000000000..00b72e388a --- /dev/null +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5223c77950ff1d1a83c1674d52ec37cdf95042e8ef2faa0241ffb4cedb3b4b0 +size 157046 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png new file mode 100644 index 0000000000..3309f4a252 --- /dev/null +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d4a9cf501ece687a5ab2363f40fdcaaaf83298b12ae75cdc57cad10a635d321 +size 68049 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png new file mode 100644 index 0000000000..5e3c7be9e5 --- /dev/null +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2825c6736d960c1a01f5f7f839271dfcd4b78eb4f50fcf9f0f68d0070e5e93b1 +size 51644 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png new file mode 100644 index 0000000000..943d5b9cf3 --- /dev/null +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:581d1ee0bd2c7f5170fd8252e06c4bd3421199fe952e53cab7fb0063d958fd8e +size 50638 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png index 4e81bb320e..9b791c270a 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd0395f220bd21cbfc50a9bfd758c4bae1f359748802942bcf58e939fa361f48 -size 64070 +oid sha256:75327f0afc1d9e0e38eb3601131b9c513f3f2a72660620099eefe89dbdfc3f96 +size 83602 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png index b4e6a8d05d..df713a50c1 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9586615ef859302a0e04da4cf4abfe510a7e6e7b616710241a1c23d351d42685 -size 64336 +oid sha256:f91a6b47f6726f443ba0066dfae4f9f219fe2e82956b5f766c984ffabf94708a +size 83134 From a02e9fd78577e0929c8c2735faf56dc3424e4686 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Tue, 12 May 2026 15:52:54 -0400 Subject: [PATCH 16/26] Retrigger CI From eddeda0357d7ea7b735979605f2900e489775387 Mon Sep 17 00:00:00 2001 From: Tim Johnson <62769082+tjohnson009@users.noreply.github.com> Date: Tue, 12 May 2026 19:49:53 -0400 Subject: [PATCH 17/26] Update modifier line to single line Co-authored-by: Daniel Frett --- .../org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt index 7984689ccd..b0af1c808b 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt @@ -49,10 +49,7 @@ internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { item("header", "header") { LessonsHeader(state.mode, Modifier.padding(top = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL)) HorizontalDivider( - modifier = Modifier.padding( - vertical = 12.dp, - horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL - ) + modifier = Modifier.padding(vertical = 12.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL) ) LessonFilters(state, modifier = Modifier.padding(horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL)) } From 88f340bb4576c3db5ed8258a4bd5c8ddcf3ebb37 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 15 May 2026 11:02:47 -0400 Subject: [PATCH 18/26] Add a custom vertical arrangement to LazyColumn to pin localization to the bottom --- .../ui/dashboard/lessons/LessonsLayout.kt | 23 ++++++++++++++++++- .../ui/dashboard/tools/ToolsLayout.kt | 23 ++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt index b0af1c808b..3c66f456a4 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt @@ -1,7 +1,9 @@ package org.cru.godtools.ui.dashboard.lessons +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding @@ -15,9 +17,11 @@ import androidx.compose.material3.SegmentedButtonDefaults import androidx.compose.material3.SingleChoiceSegmentedButtonRow import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.dp import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.components.SingletonComponent @@ -34,7 +38,24 @@ internal val MARGIN_LESSONS_LAYOUT_HORIZONTAL = 16.dp @Composable @CircuitInject(LessonsScreen::class, SingletonComponent::class) internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { - LazyColumn(modifier = modifier) { + LazyColumn( + verticalArrangement = remember { + object : Arrangement.Vertical { + override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) { + var currentOffset = 0 + sizes.forEachIndexed { index, size -> + if (index == sizes.lastIndex) { + outPositions[index] = maxOf(currentOffset, totalSize - size) + } else { + outPositions[index] = currentOffset + currentOffset += size + } + } + } + } + }, + modifier = modifier.fillMaxHeight() + ) { if (state.isPersonalizationEnabled) { item("mode-toggle", "mode-toggle") { PersonalizationToggle( diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt index 93f8292280..31caa866c3 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt @@ -3,6 +3,7 @@ package org.cru.godtools.ui.dashboard.tools import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentWidth @@ -19,10 +20,12 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.dp import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.components.SingletonComponent @@ -48,7 +51,25 @@ internal fun ToolsLayout(state: UiState, modifier: Modifier = Modifier) { val columnState = rememberLazyListState() LaunchedEffect(state.banner?.type) { if (state.banner != null) columnState.animateScrollToItem(0) } - LazyColumn(state = columnState, modifier = modifier) { + LazyColumn( + state = columnState, + verticalArrangement = remember { + object : Arrangement.Vertical { + override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) { + var currentOffset = 0 + sizes.forEachIndexed { index, size -> + if (index == sizes.lastIndex) { + outPositions[index] = maxOf(currentOffset, totalSize - size) + } else { + outPositions[index] = currentOffset + currentOffset += size + } + } + } + } + }, + modifier = modifier.fillMaxHeight() + ) { if (!state.dataLoaded) return@LazyColumn item("banners", "banners") { From d4f475efd96430cd659f70ce9a56b70fd0790a1d Mon Sep 17 00:00:00 2001 From: tjohnson009 Date: Fri, 15 May 2026 15:29:47 +0000 Subject: [PATCH 19/26] Record updated snapshots --- ...ttings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...ttings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png | 4 ++-- ...ngs_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...gs_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...ttings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...ttings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png | 4 ++-- ...ngs_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...gs_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png index ff90d0807e..9cc80b6a77 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88037b43364778a17ea541a5a9ff91f18dab4ca7ec23f8c78af9a4d84ffe1491 -size 59923 +oid sha256:223de3c1d5283869ac730cca95788b6a1122921036e5722eb1e32370c6362987 +size 60043 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png index 1b47fb2801..a511a406c4 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e6c69f37ea620d68a34459e12ac4ea49e703c8b0082d2dfea8562ab7bc02263 -size 146077 +oid sha256:50f9c12981aacf04a2e7fb0909121a0ff9d0338a7570bdcab1fd4f16f35c84ca +size 146395 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png index c33044e913..96827beb39 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db0c7e87e5f3f182c6fdde7f067a5a258448d3cd6eda17bedb729c8b4a8e3af1 -size 58623 +oid sha256:3a547c724078ef2096d3e4df4ee724f29bfc31f5259b2b7b78c6d253f0010463 +size 58701 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png index f1c79d68eb..9c5685063c 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b64905c8817b7182ca5e99aea6db85661b4af3207012c2e6f9d94b4c2ec6b081 -size 44690 +oid sha256:586eb4f58f275a668f82efec023468ee3917a494dd3a3aa7bd90f9f696b3f396 +size 44577 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png index 2203013141..8275c7c9ed 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cad7865b6949418356558a50675fb14d2c4aed2c69f6f1d91429663ae9f9cc16 -size 43957 +oid sha256:8eb692fd567ca51706f0edaece89c52551cd8e0c15f61e6fe7404779e28ec4d0 +size 43721 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png index bfb94106db..c1c483d12a 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b61990b52f911bc8a5a5fa53786486e4fb252d167b3c88df20d3c6088c2c898 -size 69438 +oid sha256:06fa331a198dc5acf0b458d070e3c047a549670b0210960117a35f12e572ff2f +size 69913 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png index 00b72e388a..90e4413809 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5223c77950ff1d1a83c1674d52ec37cdf95042e8ef2faa0241ffb4cedb3b4b0 -size 157046 +oid sha256:edd797205e5a38f4bedc083b692724d09da10c346811a7c29ce8c90a63d06ae7 +size 156915 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png index 3309f4a252..9033e87ddb 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d4a9cf501ece687a5ab2363f40fdcaaaf83298b12ae75cdc57cad10a635d321 -size 68049 +oid sha256:279c8dca72575095e1063919122111353447063c7f8f16d5a485ea9de31e9453 +size 68679 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png index 5e3c7be9e5..b57f142691 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2825c6736d960c1a01f5f7f839271dfcd4b78eb4f50fcf9f0f68d0070e5e93b1 -size 51644 +oid sha256:e52c076fdbf7202bd61e14029b879dcd806054f14e28c8b4031a0b7d6acb74cf +size 51646 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png index 943d5b9cf3..1a2a078167 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:581d1ee0bd2c7f5170fd8252e06c4bd3421199fe952e53cab7fb0063d958fd8e -size 50638 +oid sha256:c27c28af55a1caa04349fd632e200fffbb4c9f0a3fc1763fc9217301e85c5573 +size 50577 From 24a5326867cbf20d6d5d886ac521b3441ff7aeb7 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Tue, 12 May 2026 15:52:54 -0400 Subject: [PATCH 20/26] Retrigger CI From 9cdeb786a07559fbf8737721f98af555165635ab Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 15 May 2026 16:41:46 -0400 Subject: [PATCH 21/26] Bring in rememberPinLastArrangement composable to both tools and lessons --- .../ui/dashboard/lessons/LessonsLayout.kt | 24 +++++++------------ .../ui/dashboard/tools/ToolsLayout.kt | 24 ++++++------------- 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt index 3c66f456a4..c760769989 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt @@ -21,7 +21,6 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.dp import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.components.SingletonComponent @@ -31,6 +30,7 @@ import org.cru.godtools.base.ui.circuit.screen.dashboard.page.LessonsScreen import org.cru.godtools.ui.dashboard.LocalizationSettingsBox import org.cru.godtools.ui.dashboard.lessons.LessonsPresenter.UiEvent import org.cru.godtools.ui.dashboard.lessons.LessonsPresenter.UiState +import org.cru.godtools.ui.dashboard.rememberPinLastItemBottomArrangement import org.cru.godtools.ui.tools.LessonToolCard internal val MARGIN_LESSONS_LAYOUT_HORIZONTAL = 16.dp @@ -38,22 +38,14 @@ internal val MARGIN_LESSONS_LAYOUT_HORIZONTAL = 16.dp @Composable @CircuitInject(LessonsScreen::class, SingletonComponent::class) internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { + val verticalArrangement = if (state.mode == UiState.Mode.PERSONALIZATION) { + rememberPinLastItemBottomArrangement(state.lessons.size) + } else { + Arrangement.Top + } + LazyColumn( - verticalArrangement = remember { - object : Arrangement.Vertical { - override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) { - var currentOffset = 0 - sizes.forEachIndexed { index, size -> - if (index == sizes.lastIndex) { - outPositions[index] = maxOf(currentOffset, totalSize - size) - } else { - outPositions[index] = currentOffset - currentOffset += size - } - } - } - } - }, + verticalArrangement = remember { verticalArrangement }, modifier = modifier.fillMaxHeight() ) { if (state.isPersonalizationEnabled) { diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt index 31caa866c3..45878dd718 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt @@ -20,12 +20,10 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.dp import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.components.SingletonComponent @@ -34,6 +32,7 @@ import org.cru.godtools.R import org.cru.godtools.base.ui.circuit.screen.dashboard.page.ToolsScreen import org.cru.godtools.ui.banner.Banners import org.cru.godtools.ui.dashboard.LocalizationSettingsBox +import org.cru.godtools.ui.dashboard.rememberPinLastItemBottomArrangement import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiEvent import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiState import org.cru.godtools.ui.tools.SquareToolCard @@ -50,24 +49,15 @@ internal fun ToolsLayout(state: UiState, modifier: Modifier = Modifier) { val columnState = rememberLazyListState() LaunchedEffect(state.banner?.type) { if (state.banner != null) columnState.animateScrollToItem(0) } + val verticalArrangement = if (state.mode == UiState.Mode.PERSONALIZATION) { + rememberPinLastItemBottomArrangement(state.tools.size) + } else { + Arrangement.Top + } LazyColumn( state = columnState, - verticalArrangement = remember { - object : Arrangement.Vertical { - override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) { - var currentOffset = 0 - sizes.forEachIndexed { index, size -> - if (index == sizes.lastIndex) { - outPositions[index] = maxOf(currentOffset, totalSize - size) - } else { - outPositions[index] = currentOffset - currentOffset += size - } - } - } - } - }, + verticalArrangement = verticalArrangement, modifier = modifier.fillMaxHeight() ) { if (!state.dataLoaded) return@LazyColumn From f4c0a1bb50ed392168e23f544daa2bccb2eab52a Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 15 May 2026 16:42:40 -0400 Subject: [PATCH 22/26] Create rememberPinLastItemBottomArrangement composable for reuse in tools and lessons --- .../dashboard/PinLastItemBottomArrangement.kt | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt new file mode 100644 index 0000000000..6ced6818e1 --- /dev/null +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt @@ -0,0 +1,23 @@ +package org.cru.godtools.ui.dashboard + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.unit.Density + +@Composable +internal fun rememberPinLastItemBottomArrangement(items: Int): Arrangement.Vertical = remember(items) { + object : Arrangement.Vertical { + override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) { + var currentOffset = 0 + sizes.forEachIndexed { index, size -> + if (index == sizes.lastIndex) { + outPositions[index] = maxOf(currentOffset, totalSize - size) + } else { + outPositions[index] = currentOffset + currentOffset += size + } + } + } + } +} From b5647d14df75318c9b49604e8f1ddb5e89986200 Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 22 May 2026 15:42:08 -0400 Subject: [PATCH 23/26] Adjust the rememberlastItem call to reflect changes --- .../org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt | 6 +++--- .../org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt index c760769989..cd590b4a02 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt @@ -17,7 +17,6 @@ import androidx.compose.material3.SegmentedButtonDefaults import androidx.compose.material3.SingleChoiceSegmentedButtonRow import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource @@ -38,14 +37,15 @@ internal val MARGIN_LESSONS_LAYOUT_HORIZONTAL = 16.dp @Composable @CircuitInject(LessonsScreen::class, SingletonComponent::class) internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { + val pinLastItem = rememberPinLastItemBottomArrangement() val verticalArrangement = if (state.mode == UiState.Mode.PERSONALIZATION) { - rememberPinLastItemBottomArrangement(state.lessons.size) + pinLastItem } else { Arrangement.Top } LazyColumn( - verticalArrangement = remember { verticalArrangement }, + verticalArrangement = verticalArrangement, modifier = modifier.fillMaxHeight() ) { if (state.isPersonalizationEnabled) { diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt index 45878dd718..7a71cb7126 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt @@ -49,8 +49,9 @@ internal fun ToolsLayout(state: UiState, modifier: Modifier = Modifier) { val columnState = rememberLazyListState() LaunchedEffect(state.banner?.type) { if (state.banner != null) columnState.animateScrollToItem(0) } + val pinLastItem = rememberPinLastItemBottomArrangement() val verticalArrangement = if (state.mode == UiState.Mode.PERSONALIZATION) { - rememberPinLastItemBottomArrangement(state.tools.size) + pinLastItem } else { Arrangement.Top } From 6cb5543e766dc3cdf27b0f2cdebed14f29d8532a Mon Sep 17 00:00:00 2001 From: Tim Johnson Date: Fri, 22 May 2026 15:44:09 -0400 Subject: [PATCH 24/26] Remove unnecessary key from remember and params --- .../cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt index 6ced6818e1..0a59cec109 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.unit.Density @Composable -internal fun rememberPinLastItemBottomArrangement(items: Int): Arrangement.Vertical = remember(items) { +internal fun rememberPinLastItemBottomArrangement(): Arrangement.Vertical = remember { object : Arrangement.Vertical { override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) { var currentOffset = 0 From d8e3e97091a2c8f4b2390b788b04d549d350d5dc Mon Sep 17 00:00:00 2001 From: Daniel Frett Date: Tue, 26 May 2026 10:34:49 -0600 Subject: [PATCH 25/26] Rename and generalize PinLastItemBottomArrangement to FloatLastItemsToBottomArrangement Co-Authored-By: Claude Sonnet 4.6 --- .../dashboard/PinLastItemBottomArrangement.kt | 23 ------ .../ui/dashboard/lessons/LessonsLayout.kt | 14 +--- .../FloatLastItemsToBottomArrangement.kt | 28 +++++++ .../ui/dashboard/tools/ToolsLayout.kt | 12 +-- .../FloatLastItemsToBottomArrangementTest.kt | 80 +++++++++++++++++++ 5 files changed, 116 insertions(+), 41 deletions(-) delete mode 100644 app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt create mode 100644 app/src/main/kotlin/org/cru/godtools/ui/dashboard/personalization/FloatLastItemsToBottomArrangement.kt create mode 100644 app/src/test/kotlin/org/cru/godtools/ui/dashboard/personalization/FloatLastItemsToBottomArrangementTest.kt diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt deleted file mode 100644 index 0a59cec109..0000000000 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/PinLastItemBottomArrangement.kt +++ /dev/null @@ -1,23 +0,0 @@ -package org.cru.godtools.ui.dashboard - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.unit.Density - -@Composable -internal fun rememberPinLastItemBottomArrangement(): Arrangement.Vertical = remember { - object : Arrangement.Vertical { - override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) { - var currentOffset = 0 - sizes.forEachIndexed { index, size -> - if (index == sizes.lastIndex) { - outPositions[index] = maxOf(currentOffset, totalSize - size) - } else { - outPositions[index] = currentOffset - currentOffset += size - } - } - } - } -} diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt index cd590b4a02..b9debb7f54 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsLayout.kt @@ -1,6 +1,5 @@ package org.cru.godtools.ui.dashboard.lessons -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight @@ -29,7 +28,7 @@ import org.cru.godtools.base.ui.circuit.screen.dashboard.page.LessonsScreen import org.cru.godtools.ui.dashboard.LocalizationSettingsBox import org.cru.godtools.ui.dashboard.lessons.LessonsPresenter.UiEvent import org.cru.godtools.ui.dashboard.lessons.LessonsPresenter.UiState -import org.cru.godtools.ui.dashboard.rememberPinLastItemBottomArrangement +import org.cru.godtools.ui.dashboard.personalization.rememberFloatLastItemsToBottomArrangement import org.cru.godtools.ui.tools.LessonToolCard internal val MARGIN_LESSONS_LAYOUT_HORIZONTAL = 16.dp @@ -37,15 +36,10 @@ internal val MARGIN_LESSONS_LAYOUT_HORIZONTAL = 16.dp @Composable @CircuitInject(LessonsScreen::class, SingletonComponent::class) internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { - val pinLastItem = rememberPinLastItemBottomArrangement() - val verticalArrangement = if (state.mode == UiState.Mode.PERSONALIZATION) { - pinLastItem - } else { - Arrangement.Top - } - LazyColumn( - verticalArrangement = verticalArrangement, + verticalArrangement = rememberFloatLastItemsToBottomArrangement( + numToFloat = if (state.mode == UiState.Mode.PERSONALIZATION) 1 else 0 + ), modifier = modifier.fillMaxHeight() ) { if (state.isPersonalizationEnabled) { diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/personalization/FloatLastItemsToBottomArrangement.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/personalization/FloatLastItemsToBottomArrangement.kt new file mode 100644 index 0000000000..a7a7af4016 --- /dev/null +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/personalization/FloatLastItemsToBottomArrangement.kt @@ -0,0 +1,28 @@ +package org.cru.godtools.ui.dashboard.personalization + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.unit.Density + +@Composable +internal fun rememberFloatLastItemsToBottomArrangement(numToFloat: Int) = + remember(numToFloat) { FloatLastItemsToBottomArrangement(numToFloat) } + +internal class FloatLastItemsToBottomArrangement(val numToFloat: Int) : Arrangement.Vertical { + override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) { + var currentOffset = 0 + sizes.forEachIndexed { index, size -> + outPositions[index] = currentOffset + currentOffset += size + } + + if (currentOffset < totalSize && numToFloat > 0) { + currentOffset = totalSize + sizes.takeLast(numToFloat).reversed().forEachIndexed { index, size -> + currentOffset -= size + outPositions[sizes.lastIndex - index] = currentOffset + } + } + } +} diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt index 7a71cb7126..e22c48b253 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/tools/ToolsLayout.kt @@ -32,7 +32,7 @@ import org.cru.godtools.R import org.cru.godtools.base.ui.circuit.screen.dashboard.page.ToolsScreen import org.cru.godtools.ui.banner.Banners import org.cru.godtools.ui.dashboard.LocalizationSettingsBox -import org.cru.godtools.ui.dashboard.rememberPinLastItemBottomArrangement +import org.cru.godtools.ui.dashboard.personalization.rememberFloatLastItemsToBottomArrangement import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiEvent import org.cru.godtools.ui.dashboard.tools.ToolsPresenter.UiState import org.cru.godtools.ui.tools.SquareToolCard @@ -49,16 +49,12 @@ internal fun ToolsLayout(state: UiState, modifier: Modifier = Modifier) { val columnState = rememberLazyListState() LaunchedEffect(state.banner?.type) { if (state.banner != null) columnState.animateScrollToItem(0) } - val pinLastItem = rememberPinLastItemBottomArrangement() - val verticalArrangement = if (state.mode == UiState.Mode.PERSONALIZATION) { - pinLastItem - } else { - Arrangement.Top - } LazyColumn( state = columnState, - verticalArrangement = verticalArrangement, + verticalArrangement = rememberFloatLastItemsToBottomArrangement( + numToFloat = if (state.mode == UiState.Mode.PERSONALIZATION) 1 else 0 + ), modifier = modifier.fillMaxHeight() ) { if (!state.dataLoaded) return@LazyColumn diff --git a/app/src/test/kotlin/org/cru/godtools/ui/dashboard/personalization/FloatLastItemsToBottomArrangementTest.kt b/app/src/test/kotlin/org/cru/godtools/ui/dashboard/personalization/FloatLastItemsToBottomArrangementTest.kt new file mode 100644 index 0000000000..fa7b162732 --- /dev/null +++ b/app/src/test/kotlin/org/cru/godtools/ui/dashboard/personalization/FloatLastItemsToBottomArrangementTest.kt @@ -0,0 +1,80 @@ +package org.cru.godtools.ui.dashboard.personalization + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.ui.unit.Density +import kotlin.test.Test +import kotlin.test.assertContentEquals + +class FloatLastItemsToBottomArrangementTest { + private val density = Density(1f) + + private fun Arrangement.Vertical.testArrange(totalSize: Int, vararg sizes: Int): IntArray { + val outPositions = IntArray(sizes.size) + with(density) { arrange(totalSize, sizes, outPositions) } + return outPositions + } + + // region numToFloat = 0 + @Test + fun `numToFloat=0 - items positioned sequentially from top`() { + val arrangement = FloatLastItemsToBottomArrangement(numToFloat = 0) + assertContentEquals(intArrayOf(0, 100, 200), arrangement.testArrange(500, 100, 100, 100)) + } + // endregion numToFloat = 0 + + // region numToFloat = 1 + @Test + fun `numToFloat=1 - last item floats to bottom when content fits`() { + val arrangement = FloatLastItemsToBottomArrangement(numToFloat = 1) + assertContentEquals(intArrayOf(0, 100, 400), arrangement.testArrange(500, 100, 100, 100)) + } + + @Test + fun `numToFloat=1 - no floating when content overflows container`() { + val arrangement = FloatLastItemsToBottomArrangement(numToFloat = 1) + assertContentEquals(intArrayOf(0, 100, 200), arrangement.testArrange(200, 100, 100, 100)) + } + + @Test + fun `numToFloat=1 - single item floats to bottom`() { + val arrangement = FloatLastItemsToBottomArrangement(numToFloat = 1) + assertContentEquals(intArrayOf(400), arrangement.testArrange(500, 100)) + } + // endregion numToFloat = 1 + + // region numToFloat = 2 + @Test + fun `numToFloat=2 - last 2 items float to bottom when content fits`() { + val arrangement = FloatLastItemsToBottomArrangement(numToFloat = 2) + assertContentEquals(intArrayOf(0, 300, 400), arrangement.testArrange(500, 100, 100, 100)) + } + + @Test + fun `numToFloat=2 - no floating when content exactly fills container`() { + val arrangement = FloatLastItemsToBottomArrangement(numToFloat = 2) + assertContentEquals(intArrayOf(0, 100, 200), arrangement.testArrange(300, 100, 100, 100)) + } + // endregion numToFloat = 2 + + // region numToFloat exceeds item count + @Test + fun `numToFloat exceeds item count - all items float to bottom`() { + val arrangement = FloatLastItemsToBottomArrangement(numToFloat = 5) + assertContentEquals(intArrayOf(200, 300, 400), arrangement.testArrange(500, 100, 100, 100)) + } + // endregion numToFloat exceeds item count + + // region edge cases + @Test + fun `empty item list`() { + val arrangement = FloatLastItemsToBottomArrangement(numToFloat = 1) + assertContentEquals(intArrayOf(), arrangement.testArrange(500)) + } + + @Test + fun `variable item sizes - floating item positioned correctly`() { + val arrangement = FloatLastItemsToBottomArrangement(numToFloat = 1) + assertContentEquals(intArrayOf(0, 50, 350), arrangement.testArrange(500, 50, 200, 150)) + } + // endregion edge cases +} From 089ff26788c5eb92da02c694c2dea6c8ae8bee91 Mon Sep 17 00:00:00 2001 From: Daniel Frett Date: Tue, 26 May 2026 11:16:13 -0600 Subject: [PATCH 26/26] Update LocalizationSettingsBox typography to titleMedium and bodyMedium Co-Authored-By: Claude Sonnet 4.6 --- .../org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt | 5 ++--- ...tings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...tings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png | 4 ++-- ...gs_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...s_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...ox[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...tings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...tings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png | 4 ++-- ...gs_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...s_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...ox[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...Tools[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png | 4 ++-- ...ls[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png | 4 ++-- 13 files changed, 26 insertions(+), 27 deletions(-) diff --git a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt index c040224208..973e015bad 100644 --- a/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt @@ -30,12 +30,11 @@ internal fun LocalizationSettingsBox( Column(modifier = Modifier.padding(16.dp)) { Text( text = stringResource(title), - fontWeight = FontWeight.Bold, - style = MaterialTheme.typography.bodyLarge + style = MaterialTheme.typography.titleMedium ) Text( text = stringResource(description), - style = MaterialTheme.typography.bodySmall + style = MaterialTheme.typography.bodyMedium ) Button( onClick = onClickSettings, diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png index 9cc80b6a77..925feefd2d 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:223de3c1d5283869ac730cca95788b6a1122921036e5722eb1e32370c6362987 -size 60043 +oid sha256:4d9d96f5cdfaf62bc45e1509300796ddf4a69ae2fff390919fd764edf323f22b +size 61882 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png index a511a406c4..087227707e 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:50f9c12981aacf04a2e7fb0909121a0ff9d0338a7570bdcab1fd4f16f35c84ca -size 146395 +oid sha256:04d1e03ce2c6572cbeb3af4df08c432c71e3662eb98b8da07591b322366b1bf0 +size 148513 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png index 96827beb39..26b3d0700d 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a547c724078ef2096d3e4df4ee724f29bfc31f5259b2b7b78c6d253f0010463 -size 58701 +oid sha256:e4f144fce3a76e433cc79a770839208d716481d3e5e1e8be0a1409ecc5e1c6e2 +size 60360 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png index 9c5685063c..d8f9cce371 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:586eb4f58f275a668f82efec023468ee3917a494dd3a3aa7bd90f9f696b3f396 -size 44577 +oid sha256:3c0e48a2493a3c1860f2a1ad290dc3324031a6a00da1338379fc8027f1ec7362 +size 46047 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png index 8275c7c9ed..593f73172d 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_LessonsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8eb692fd567ca51706f0edaece89c52551cd8e0c15f61e6fe7404779e28ec4d0 -size 43721 +oid sha256:50dc48e17855a6a6e18776cafb327ad6bd8e7337f0764e35a3244fdcb56d59c5 +size 45114 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png index c1c483d12a..faa6841edb 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06fa331a198dc5acf0b458d070e3c047a549670b0210960117a35f12e572ff2f -size 69913 +oid sha256:45a0081d5b2ed7025a3c289c3be22099581ee57fcc5d8184a2372e8d648e8660 +size 73336 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png index 90e4413809..cb19d0f7ae 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:edd797205e5a38f4bedc083b692724d09da10c346811a7c29ce8c90a63d06ae7 -size 156915 +oid sha256:bace108f18b26b4dba80e5a047091215df488d791eecf3e9d79ad6c836d9291e +size 160719 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png index 9033e87ddb..74a31706ec 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Nexus_5,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:279c8dca72575095e1063919122111353447063c7f8f16d5a485ea9de31e9453 -size 68679 +oid sha256:c8765a440547eba4d5a24f06155f5850a09ee172e70a8262a553100bc4ace887 +size 72000 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png index b57f142691..e181cc55b7 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e52c076fdbf7202bd61e14029b879dcd806054f14e28c8b4031a0b7d6acb74cf -size 51646 +oid sha256:7a7bbe4a9791dda7e0d64860195906bd36e666e0cffd1029f0ae67263ce7ef52 +size 53834 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png index 1a2a078167..15846cbc6f 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_Localization_Settings_Box[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c27c28af55a1caa04349fd632e200fffbb4c9f0a3fc1763fc9217301e85c5573 -size 50577 +oid sha256:a9438172eb74a1bb2d8ddcecdc95c347fd5ea35c6282b4fb27e2a955b0df2e7f +size 52931 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png index 9b791c270a..c2ab773582 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75327f0afc1d9e0e38eb3601131b9c513f3f2a72660620099eefe89dbdfc3f96 -size 83602 +oid sha256:aacde15f51d24ec4b38b3e2e1f509ae1bf46753fe5c97892c8838483db9376dd +size 85784 diff --git a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png index df713a50c1..bf9bc2465a 100644 --- a/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png +++ b/app/src/test/snapshots/images/org.cru.godtools.ui.dashboard_DashboardLayoutPaparazziTest_ToolsLayout()_-_Personalization_-_No_Tools[Pixel_6_Pro,locale=null,NOTNIGHT,NO_ACCESSIBILITY].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f91a6b47f6726f443ba0066dfae4f9f219fe2e82956b5f766c984ffabf94708a -size 83134 +oid sha256:a88e2d323d6e44bb60cca85bab8aa6af8378bab1fd68eedd353e4c762fb6ff49 +size 85617