Skip to content

Commit 38daf67

Browse files
authored
Merge pull request #112 from fmasa/feat/compendium-visibility
Compendium item visiblity
2 parents 7df7099 + 4c61a84 commit 38daf67

File tree

80 files changed

+623
-183
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+623
-183
lines changed

app/src/main/kotlin/cz/muni/fi/rpg/ui/shell/Startup.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@ package cz.muni.fi.rpg.ui.shell
22

33
import androidx.compose.runtime.Composable
44
import androidx.compose.runtime.CompositionLocalProvider
5-
import cz.frantisekmasa.wfrp_master.common.auth.LocalAuthenticationManager
5+
import cz.frantisekmasa.wfrp_master.common.auth.AuthenticationManager
66
import cz.frantisekmasa.wfrp_master.common.core.auth.LocalUser
77
import cz.frantisekmasa.wfrp_master.common.core.ui.flow.collectWithLifecycle
88
import cz.muni.fi.rpg.ui.startup.StartupScreen
9+
import org.kodein.di.compose.localDI
10+
import org.kodein.di.instance
911

1012
@Composable
1113
fun Startup(content: @Composable () -> Unit) {
12-
val auth = LocalAuthenticationManager.current
14+
val auth: AuthenticationManager by localDI().instance()
1315
val user = auth.user.collectWithLifecycle().value
1416

1517
if (user == null) {
16-
StartupScreen()
18+
StartupScreen(auth)
1719
return
1820
}
1921

app/src/main/kotlin/cz/muni/fi/rpg/ui/startup/StartupScreen.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
1515
import androidx.compose.runtime.setValue
1616
import androidx.compose.ui.platform.LocalContext
1717
import com.google.android.gms.auth.api.signin.GoogleSignIn
18-
import cz.frantisekmasa.wfrp_master.common.auth.LocalAuthenticationManager
18+
import cz.frantisekmasa.wfrp_master.common.auth.AuthenticationManager
1919
import cz.frantisekmasa.wfrp_master.common.auth.LocalWebClientId
2020
import cz.frantisekmasa.wfrp_master.common.core.shared.SettingsStorage
2121
import cz.frantisekmasa.wfrp_master.common.core.shared.edit
@@ -32,11 +32,9 @@ import org.kodein.di.compose.localDI
3232
import org.kodein.di.instance
3333

3434
@Composable
35-
fun StartupScreen() {
35+
fun StartupScreen(authenticationManager: AuthenticationManager) {
3636
SplashScreen()
3737

38-
val authenticationManager = LocalAuthenticationManager.current
39-
4038
val authenticated by authenticationManager.authenticated.collectWithLifecycle()
4139

4240
Napier.d("Authenticated: $authenticated")

common/src/androidMain/kotlin/cz/frantisekmasa/wfrp_master/common/DependencyInjection.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.google.firebase.firestore.ktx.firestore
77
import com.google.firebase.firestore.ktx.firestoreSettings
88
import com.google.firebase.functions.ktx.functions
99
import com.google.firebase.ktx.Firebase
10+
import cz.frantisekmasa.wfrp_master.common.auth.AuthenticationManager
1011
import cz.frantisekmasa.wfrp_master.common.core.shared.SettingsStorage
1112
import cz.frantisekmasa.wfrp_master.common.firebase.firestore.Firestore
1213
import cz.frantisekmasa.wfrp_master.common.firebase.functions.CloudFunctions
@@ -36,6 +37,8 @@ actual val platformModule = DI.Module("android") {
3637
Firestore(firestore)
3738
}
3839

40+
bindSingleton { AuthenticationManager(instance()) }
41+
3942
bindSingleton {
4043
val functions = Firebase.functions
4144
val url = BuildConfig.FUNCTIONS_EMULATOR_URL

common/src/androidMain/kotlin/cz/frantisekmasa/wfrp_master/common/auth/AuthenticationManager.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import com.google.android.gms.auth.api.signin.GoogleSignInOptions
99
import com.google.firebase.auth.FirebaseAuth
1010
import com.google.firebase.auth.FirebaseAuthUserCollisionException
1111
import com.google.firebase.auth.GoogleAuthProvider
12-
import com.google.firebase.auth.ktx.auth
13-
import com.google.firebase.ktx.Firebase
1412
import cz.frantisekmasa.wfrp_master.common.core.auth.User
13+
import cz.frantisekmasa.wfrp_master.common.core.auth.UserId
14+
import cz.frantisekmasa.wfrp_master.common.core.auth.UserProvider
1515
import cz.frantisekmasa.wfrp_master.common.core.logging.Reporter
1616
import io.github.aakira.napier.Napier
1717
import kotlinx.coroutines.CoroutineScope
@@ -25,10 +25,9 @@ import kotlinx.coroutines.flow.stateIn
2525
import kotlinx.coroutines.launch
2626
import kotlinx.coroutines.tasks.await
2727

28-
val LocalAuthenticationManager = staticCompositionLocalOf { AuthenticationManager(Firebase.auth) }
2928
val LocalWebClientId = staticCompositionLocalOf<String> { error("LocalWebTokenId was not set") }
3029

31-
class AuthenticationManager(private val auth: FirebaseAuth) {
30+
class AuthenticationManager(private val auth: FirebaseAuth) : UserProvider {
3231
val coroutineScope = CoroutineScope(Dispatchers.Default)
3332

3433
val authenticated: StateFlow<Boolean?> = callbackFlow {
@@ -63,11 +62,13 @@ class AuthenticationManager(private val auth: FirebaseAuth) {
6362
awaitClose { auth.removeAuthStateListener(listener) }
6463
}.map {
6564
User(
66-
id = it.uid,
65+
id = UserId(it.uid),
6766
email = if (it.email == "") null else it.email
6867
)
6968
}.stateIn(coroutineScope, SharingStarted.Eagerly, null)
7069

70+
override val userId: UserId? get() = user.value?.id
71+
7172
init {
7273
coroutineScope.launch {
7374
user.collect { it?.let { Reporter.setUserId(it.id) } }

common/src/androidMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/logging/Reporter.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import com.google.firebase.analytics.ktx.analytics
44
import com.google.firebase.analytics.ktx.logEvent
55
import com.google.firebase.crashlytics.FirebaseCrashlytics
66
import com.google.firebase.ktx.Firebase
7+
import cz.frantisekmasa.wfrp_master.common.core.auth.UserId
78

89
actual object Reporter {
910
private val crashlytics by lazy { FirebaseCrashlytics.getInstance() }
1011

11-
actual fun setUserId(id: String) {
12-
crashlytics.setUserId(id)
12+
actual fun setUserId(id: UserId) {
13+
crashlytics.setUserId(id.toString())
1314
}
1415

1516
actual fun log(message: String) {

common/src/androidMain/kotlin/cz/frantisekmasa/wfrp_master/common/settings/SignInCard.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import cafe.adriel.voyager.navigator.LocalNavigator
3636
import cafe.adriel.voyager.navigator.currentOrThrow
3737
import com.google.android.gms.auth.api.signin.GoogleSignIn
3838
import com.google.firebase.auth.FirebaseAuthUserCollisionException
39-
import cz.frantisekmasa.wfrp_master.common.auth.LocalAuthenticationManager
39+
import cz.frantisekmasa.wfrp_master.common.auth.AuthenticationManager
4040
import cz.frantisekmasa.wfrp_master.common.auth.LocalWebClientId
4141
import cz.frantisekmasa.wfrp_master.common.core.auth.LocalUser
4242
import cz.frantisekmasa.wfrp_master.common.core.shared.Resources
@@ -56,10 +56,12 @@ import kotlinx.coroutines.launch
5656
import kotlinx.coroutines.tasks.await
5757
import kotlinx.coroutines.withContext
5858
import kotlinx.parcelize.Parcelize
59+
import org.kodein.di.compose.localDI
60+
import org.kodein.di.instance
5961

6062
@Composable
6163
actual fun SignInCard(settingsScreenModel: SettingsScreenModel) {
62-
val authManager = LocalAuthenticationManager.current
64+
val authManager: AuthenticationManager by localDI().instance()
6365
val webClientId = LocalWebClientId.current
6466
val contract = remember(authManager) { authManager.googleSignInContract(webClientId) }
6567
val context = LocalContext.current
@@ -69,6 +71,7 @@ actual fun SignInCard(settingsScreenModel: SettingsScreenModel) {
6971

7072
pendingSingInConfirmation?.let {
7173
ConfirmSignInDialog(
74+
authManager,
7275
it.idToken,
7376
settingsScreenModel,
7477
onDismissRequest = { pendingSingInConfirmation = null },
@@ -151,11 +154,11 @@ actual fun SignInCard(settingsScreenModel: SettingsScreenModel) {
151154

152155
@Composable
153156
fun ConfirmSignInDialog(
157+
authManager: AuthenticationManager,
154158
idToken: String,
155159
screenModel: SettingsScreenModel,
156160
onDismissRequest: () -> Unit,
157161
) {
158-
val authManager = LocalAuthenticationManager.current
159162
val coroutineScope = rememberCoroutineScope()
160163
val userId = LocalUser.current.id
161164

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/DependencyInjection.kt

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ val appModule = DI.Module("Common") {
172172
instance(),
173173
instance(),
174174
instance(),
175+
instance(),
176+
instance(),
175177
)
176178
}
177179
bindFactory { partyId: PartyId -> CharacterPickerScreenModel(partyId, instance()) }
@@ -181,19 +183,27 @@ val appModule = DI.Module("Common") {
181183
EncounterDetailScreenModel(encounterId, instance(), instance(), instance(), instance())
182184
}
183185
bindFactory { characterId: CharacterId ->
184-
SkillsScreenModel(characterId, instance(), instance())
186+
SkillsScreenModel(characterId, instance(), instance(), instance(), instance())
185187
}
186188
bindFactory { characterId: CharacterId ->
187-
SpellsScreenModel(characterId, instance(), instance())
189+
SpellsScreenModel(characterId, instance(), instance(), instance(), instance())
188190
}
189191
bindFactory { characterId: CharacterId ->
190-
TalentsScreenModel(characterId, instance(), instance(), instance(), instance())
192+
TalentsScreenModel(
193+
characterId,
194+
instance(),
195+
instance(),
196+
instance(),
197+
instance(),
198+
instance(),
199+
instance(),
200+
)
191201
}
192202
bindFactory { characterId: CharacterId ->
193-
MiraclesScreenModel(characterId, instance(), instance())
203+
MiraclesScreenModel(characterId, instance(), instance(), instance(), instance())
194204
}
195205
bindFactory { characterId: CharacterId ->
196-
BlessingsScreenModel(characterId, instance(), instance())
206+
BlessingsScreenModel(characterId, instance(), instance(), instance(), instance())
197207
}
198208

199209
bindFactory { partyId: PartyId ->
@@ -220,7 +230,15 @@ val appModule = DI.Module("Common") {
220230

221231
bindSingleton { EffectManager(instance(), instance(), instance()) }
222232
bindFactory { characterId: CharacterId ->
223-
TraitsScreenModel(characterId, instance(), instance(), instance(), instance())
233+
TraitsScreenModel(
234+
characterId,
235+
instance(),
236+
instance(),
237+
instance(),
238+
instance(),
239+
instance(),
240+
instance(),
241+
)
224242
}
225243
bindProvider { InvitationScreenModel(instance(), instance(), instance()) }
226244
bindProvider { PartyListScreenModel(instance()) }
@@ -229,7 +247,9 @@ val appModule = DI.Module("Common") {
229247
CharacterCreationScreenModel(
230248
partyId,
231249
instance(),
232-
instance()
250+
instance(),
251+
instance(),
252+
instance(),
233253
)
234254
}
235255
bindFactory { partyId: PartyId ->

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/character/CharacterDetailScreen.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ import cz.frantisekmasa.wfrp_master.common.combat.ActiveCombatBanner
4444
import cz.frantisekmasa.wfrp_master.common.core.LocalStaticConfiguration
4545
import cz.frantisekmasa.wfrp_master.common.core.PartyScreenModel
4646
import cz.frantisekmasa.wfrp_master.common.core.auth.LocalUser
47-
import cz.frantisekmasa.wfrp_master.common.core.auth.UserId
4847
import cz.frantisekmasa.wfrp_master.common.core.config.Platform
4948
import cz.frantisekmasa.wfrp_master.common.core.domain.character.Character
5049
import cz.frantisekmasa.wfrp_master.common.core.domain.character.CharacterTab
@@ -142,8 +141,8 @@ data class CharacterDetailScreen(
142141
) {
143142
val characterPickerScreenModel: CharacterPickerScreenModel =
144143
rememberScreenModel(arg = party.id)
145-
val userId = UserId(LocalUser.current.id)
146-
val isGameMaster = party.gameMasterId == null || party.gameMasterId == userId.toString()
144+
val userId = LocalUser.current.id
145+
val isGameMaster = party.gameMasterId == null || party.gameMasterId == userId
147146
val canAddCharacters = !isGameMaster
148147

149148
val allCharacters = remember {

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/character/CharacterPickerScreen.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import cafe.adriel.voyager.navigator.LocalNavigator
1414
import cafe.adriel.voyager.navigator.currentOrThrow
1515
import cz.frantisekmasa.wfrp_master.common.characterCreation.CharacterCreationScreen
1616
import cz.frantisekmasa.wfrp_master.common.core.auth.LocalUser
17-
import cz.frantisekmasa.wfrp_master.common.core.auth.UserId
1817
import cz.frantisekmasa.wfrp_master.common.core.domain.character.CharacterType
1918
import cz.frantisekmasa.wfrp_master.common.core.domain.identifiers.CharacterId
2019
import cz.frantisekmasa.wfrp_master.common.core.domain.party.PartyId
@@ -34,7 +33,7 @@ data class CharacterPickerScreen(
3433
@Composable
3534
override fun Content() {
3635
val screenModel: CharacterPickerScreenModel = rememberScreenModel(arg = partyId)
37-
val userId = UserId(LocalUser.current.id)
36+
val userId = LocalUser.current.id
3837

3938
val characters = remember { screenModel.allUserCharacters(userId) }
4039
.collectWithLifecycle(null).value

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/character/CharacterPickerScreenModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class CharacterPickerScreenModel(
1616
fun allUserCharacters(userId: UserId): Flow<List<Character>> {
1717
return characters.inParty(partyId, CharacterType.PLAYER_CHARACTER).map {
1818
it.filter { character ->
19-
character.userId == userId.toString() || character.id == userId.toString()
19+
character.userId == userId || character.id == userId.toString()
2020
}
2121
}
2222
}

0 commit comments

Comments
 (0)