Skip to content

Commit a676950

Browse files
authored
Merge pull request #800 from tunjid/tj/guest-mode-fix
FIx guest mode and settings row toggle spacing
2 parents 62efe8a + a7350f9 commit a676950

File tree

5 files changed

+52
-36
lines changed

5 files changed

+52
-36
lines changed

data/core/src/commonMain/kotlin/com/tunjid/heron/data/repository/AuthRepository.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import dev.zacsweers.metro.Inject
4545
import kotlinx.coroutines.async
4646
import kotlinx.coroutines.awaitAll
4747
import kotlinx.coroutines.flow.Flow
48+
import kotlinx.coroutines.flow.distinctUntilChanged
4849
import kotlinx.coroutines.flow.filter
4950
import kotlinx.coroutines.flow.first
5051
import kotlinx.coroutines.flow.flowOf
@@ -56,6 +57,8 @@ import sh.christian.ozone.api.Did
5657
interface AuthRepository {
5758
val isSignedIn: Flow<Boolean>
5859

60+
val isGuest: Flow<Boolean>
61+
5962
val signedInUser: Flow<Profile?>
6063

6164
fun isSignedInProfile(id: ProfileId): Flow<Boolean>
@@ -87,6 +90,13 @@ internal class AuthTokenRepository(
8790
savedStateDataSource.signedInAuth.map {
8891
it != null
8992
}
93+
.distinctUntilChanged()
94+
95+
override val isGuest: Flow<Boolean> =
96+
savedStateDataSource.savedState.map { savedState ->
97+
savedState.auth is SavedState.AuthTokens.Guest
98+
}
99+
.distinctUntilChanged()
90100

91101
override val signedInUser: Flow<Profile?> =
92102
savedStateDataSource.singleSessionFlow { signedInProfileId ->

data/core/src/commonMain/kotlin/com/tunjid/heron/data/repository/UserDataRepository.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ internal class OfflineUserDataRepository @Inject constructor(
6767
override val navigation: Flow<SavedState.Navigation>
6868
get() = savedStateDataSource.savedState
6969
.map { it.navigation }
70+
.distinctUntilChanged()
7071

7172
override suspend fun persistNavigationState(
7273
navigation: SavedState.Navigation,

feature/settings/src/commonMain/kotlin/com/tunjid/heron/settings/ui/AppearanceItem.kt

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,10 @@
1616

1717
package com.tunjid.heron.settings.ui
1818

19-
import androidx.compose.foundation.layout.Arrangement
20-
import androidx.compose.foundation.layout.Row
2119
import androidx.compose.foundation.layout.fillMaxWidth
2220
import androidx.compose.material.icons.Icons
2321
import androidx.compose.material.icons.rounded.Palette
24-
import androidx.compose.material3.Switch
25-
import androidx.compose.material3.Text
2622
import androidx.compose.runtime.Composable
27-
import androidx.compose.ui.Alignment
2823
import androidx.compose.ui.Modifier
2924
import com.tunjid.heron.data.core.models.Preferences
3025
import heron.feature.settings.generated.resources.Res
@@ -53,33 +48,17 @@ fun AppearanceItem(
5348
title = stringResource(Res.string.appearance),
5449
icon = Icons.Rounded.Palette,
5550
) {
56-
Row(
57-
modifier = Modifier.fillMaxWidth(),
58-
horizontalArrangement = Arrangement.SpaceBetween,
59-
verticalAlignment = Alignment.CenterVertically,
60-
) {
61-
Text(
62-
text = stringResource(Res.string.use_dynamic_theming),
63-
)
64-
Switch(
65-
checked = signedInProfilePreferences.useDynamicTheming,
66-
onCheckedChange = setDynamicThemingPreference,
67-
enabled = isDynamicThemingSupported,
68-
)
69-
}
70-
Row(
71-
modifier = Modifier.fillMaxWidth(),
72-
horizontalArrangement = Arrangement.SpaceBetween,
73-
verticalAlignment = Alignment.CenterVertically,
74-
) {
75-
Text(
76-
text = stringResource(Res.string.use_compact_navigation),
77-
)
78-
Switch(
79-
checked = signedInProfilePreferences.useCompactNavigation,
80-
onCheckedChange = setCompactNavigation,
81-
enabled = isCompactNavigationSupported,
82-
)
83-
}
51+
SettingsToggleItem(
52+
text = stringResource(Res.string.use_dynamic_theming),
53+
enabled = isDynamicThemingSupported,
54+
checked = signedInProfilePreferences.useDynamicTheming,
55+
onCheckedChange = setDynamicThemingPreference,
56+
)
57+
SettingsToggleItem(
58+
text = stringResource(Res.string.use_compact_navigation),
59+
enabled = isCompactNavigationSupported,
60+
checked = signedInProfilePreferences.useCompactNavigation,
61+
onCheckedChange = setCompactNavigation,
62+
)
8463
}
8564
}

feature/settings/src/commonMain/kotlin/com/tunjid/heron/settings/ui/SettingsItemRow.kt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import androidx.compose.material.icons.Icons
3737
import androidx.compose.material.icons.filled.ExpandLess
3838
import androidx.compose.material3.Icon
3939
import androidx.compose.material3.MaterialTheme
40+
import androidx.compose.material3.Switch
4041
import androidx.compose.material3.Text
4142
import androidx.compose.runtime.Composable
4243
import androidx.compose.runtime.getValue
@@ -155,6 +156,30 @@ fun ExpandableSettingsItemRow(
155156
}
156157
}
157158

159+
@Composable
160+
fun SettingsToggleItem(
161+
text: String,
162+
enabled: Boolean,
163+
checked: Boolean,
164+
onCheckedChange: (Boolean) -> Unit,
165+
) {
166+
Row(
167+
modifier = Modifier.fillMaxWidth(),
168+
verticalAlignment = Alignment.CenterVertically,
169+
) {
170+
Text(
171+
text = text,
172+
)
173+
Spacer(Modifier.weight(1f))
174+
Spacer(Modifier.width(16.dp))
175+
Switch(
176+
enabled = enabled,
177+
checked = checked,
178+
onCheckedChange = onCheckedChange,
179+
)
180+
}
181+
}
182+
158183
private val EnterTransition = fadeIn() + slideInVertically { -it }
159184
private val ExitTransition =
160185
shrinkOut { IntSize(it.width, 0) } + slideOutVertically { -it } + fadeOut()

scaffold/src/commonMain/kotlin/com/tunjid/heron/scaffold/navigation/NavigationMutator.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -496,12 +496,13 @@ private fun forceSignOutMutations(
496496
): Flow<Mutation<MultiStackNav>> =
497497
combine(
498498
authRepository.isSignedIn,
499+
authRepository.isGuest,
499500
userDataRepository.navigation,
500-
::Pair,
501+
::Triple,
501502
)
502-
.filter { (isSignedIn, navigation) ->
503+
.filter { (isSignedIn, isGuest, navigation) ->
503504
// No auth token and is displaying main navigation
504-
!isSignedIn && navigation != EmptyNavigation
505+
!isSignedIn && !isGuest && navigation != EmptyNavigation
505506
}
506507
.mapLatestToMutation {
507508
when (stacks[currentIndex].name) {

0 commit comments

Comments
 (0)