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)