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..973e015bad --- /dev/null +++ b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/LocalizationSettingsBox.kt @@ -0,0 +1,49 @@ +package org.cru.godtools.ui.dashboard + +import androidx.annotation.StringRes +import androidx.compose.foundation.layout.Column +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.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 org.cru.godtools.R + +@Composable +internal 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(16.dp)) { + Text( + text = stringResource(title), + style = MaterialTheme.typography.titleMedium + ) + Text( + text = stringResource(description), + style = MaterialTheme.typography.bodyMedium + ) + Button( + onClick = onClickSettings, + modifier = Modifier + .align(Alignment.CenterHorizontally) + .padding(top = 8.dp) + ) { + Text(stringResource(R.string.dashboard_section_localization_box_button)) + } + } + } +} 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..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,8 +1,10 @@ package org.cru.godtools.ui.dashboard.lessons import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues +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 import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.lazy.LazyColumn @@ -20,16 +22,26 @@ 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.dashboard.personalization.rememberFloatLastItemsToBottomArrangement 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( + verticalArrangement = rememberFloatLastItemsToBottomArrangement( + numToFloat = if (state.mode == UiState.Mode.PERSONALIZATION) 1 else 0 + ), + modifier = modifier.fillMaxHeight() + ) { if (state.isPersonalizationEnabled) { item("mode-toggle", "mode-toggle") { PersonalizationToggle( @@ -42,9 +54,11 @@ 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.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 -> @@ -54,9 +68,23 @@ internal fun LessonsLayout(state: UiState, modifier: Modifier = Modifier) { showProgress = true, modifier = Modifier .animateItem() - .padding(top = 16.dp) + .padding(top = 16.dp, horizontal = MARGIN_LESSONS_LAYOUT_HORIZONTAL) ) } + + 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, + 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/lessons/LessonsPresenter.kt b/app/src/main/kotlin/org/cru/godtools/ui/dashboard/lessons/LessonsPresenter.kt index 8fdb399832..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,6 +54,7 @@ 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.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 +90,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 +116,7 @@ class LessonsPresenter @AssistedInject internal constructor( ) { when (it) { is UiEvent.ChangeMode -> mode = it.mode + is UiEvent.OpenLocalizationSettings -> navigator.goTo(CountrySettingsScreen) } } } 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 1fa39facec..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 @@ -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 @@ -30,6 +31,8 @@ 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.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 @@ -47,7 +50,13 @@ 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 = rememberFloatLastItemsToBottomArrangement( + numToFloat = if (state.mode == UiState.Mode.PERSONALIZATION) 1 else 0 + ), + modifier = modifier.fillMaxHeight() + ) { if (!state.dataLoaded) return@LazyColumn item("banners", "banners") { @@ -121,6 +130,16 @@ internal fun ToolsLayout(state: UiState, modifier: Modifier = Modifier) { .padding(bottom = 16.dp, horizontal = MARGIN_TOOLS_LAYOUT_HORIZONTAL) ) } + + if (state.mode == UiState.Mode.PERSONALIZATION) { + 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) } + ) + } + } } } 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..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. @@ -83,6 +85,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 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 +} 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..925feefd2d --- /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: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 new file mode 100644 index 0000000000..087227707e --- /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: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 new file mode 100644 index 0000000000..26b3d0700d --- /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: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 new file mode 100644 index 0000000000..d8f9cce371 --- /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: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 new file mode 100644 index 0000000000..593f73172d --- /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: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 new file mode 100644 index 0000000000..faa6841edb --- /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: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 new file mode 100644 index 0000000000..cb19d0f7ae --- /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: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 new file mode 100644 index 0000000000..74a31706ec --- /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: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 new file mode 100644 index 0000000000..e181cc55b7 --- /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: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 new file mode 100644 index 0000000000..15846cbc6f --- /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: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 4e81bb320e..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:cd0395f220bd21cbfc50a9bfd758c4bae1f359748802942bcf58e939fa361f48 -size 64070 +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 b4e6a8d05d..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:9586615ef859302a0e04da4cf4abfe510a7e6e7b616710241a1c23d351d42685 -size 64336 +oid sha256:a88e2d323d6e44bb60cca85bab8aa6af8378bab1fd68eedd353e4c762fb6ff49 +size 85617 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)