From d433de7188fbd0e2e126cae1c2d1e92f1c1a9d9e Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski <mail@justjanne.de> Date: Sun, 12 Nov 2023 22:41:31 +0100 Subject: [PATCH] wip: update dependencies --- .../meteroid/sync/AccountProvider.kt | 9 ++-- .../meteroid/ui/drinks/DrinkListScreen.kt | 5 +- .../meteroid/ui/drinks/DrinkListViewModel.kt | 3 +- .../meteroid/ui/money/MoneyListScreen.kt | 5 +- .../meteroid/ui/money/MoneyListViewModel.kt | 5 +- .../chaosdorf/meteroid/ui/money/MoneyTile.kt | 2 - .../ui/navigation/MeteroidBottomBar.kt | 12 ++++- .../meteroid/ui/navigation/MeteroidTopBar.kt | 50 ++++++++++++------- .../meteroid/ui/purchases/PurchaseInfo.kt | 33 ++++++++++++ .../ui/purchases/PurchaseListScreen.kt | 5 +- .../ui/purchases/PurchaseViewModel.kt | 41 +++++++-------- .../meteroid/ui/users/UserListScreen.kt | 4 +- .../meteroid/ui/users/UserListViewModel.kt | 3 +- gradle/libs.versions.toml | 10 ++-- .../chaosdorf/meteroid/model/AccountInfo.kt | 30 +++++++++++ 15 files changed, 153 insertions(+), 64 deletions(-) create mode 100644 app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseInfo.kt create mode 100644 persistence/src/main/kotlin/de/chaosdorf/meteroid/model/AccountInfo.kt diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/sync/AccountProvider.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/sync/AccountProvider.kt index 4420a5e..1fd9259 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/sync/AccountProvider.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/sync/AccountProvider.kt @@ -24,9 +24,8 @@ package de.chaosdorf.meteroid.sync -import de.chaosdorf.meteroid.model.Server +import de.chaosdorf.meteroid.model.AccountInfo import de.chaosdorf.meteroid.model.ServerRepository -import de.chaosdorf.meteroid.model.User import de.chaosdorf.meteroid.model.UserRepository import de.chaosdorf.meteroid.storage.AccountPreferences import kotlinx.coroutines.flow.Flow @@ -40,7 +39,7 @@ class AccountProvider @Inject constructor( serverRepository: ServerRepository, userRepository: UserRepository, ) { - val account: Flow<Pair<Server, User?>?> = + val account: Flow<AccountInfo?> = accountPreferences.state.flatMapLatest { preferences -> if (preferences.server == null) { flowOf(null) @@ -49,10 +48,10 @@ class AccountProvider @Inject constructor( if (server == null) { flowOf(null) } else if (preferences.user == null) { - flowOf(Pair(server, null)) + flowOf(AccountInfo(server, null)) } else { userRepository.getFlow(server.serverId, preferences.user) - .mapLatest { user -> Pair(server, user) } + .mapLatest { user -> AccountInfo(server, user) } } } } diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/drinks/DrinkListScreen.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/drinks/DrinkListScreen.kt index 46b2833..e0708c3 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/drinks/DrinkListScreen.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/drinks/DrinkListScreen.kt @@ -38,6 +38,7 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp +import androidx.navigation.NavOptions import de.chaosdorf.meteroid.sync.SyncHandler import de.chaosdorf.meteroid.ui.navigation.HomeSections import de.chaosdorf.meteroid.ui.navigation.MeteroidBottomBar @@ -46,7 +47,7 @@ import de.chaosdorf.meteroid.ui.navigation.MeteroidTopBar @Composable fun DrinkListScreen( viewModel: DrinkListViewModel, - onNavigate: (String) -> Unit = {} + onNavigate: (String, NavOptions) -> Unit ) { val account by viewModel.account.collectAsState() val drinks by viewModel.drinks.collectAsState() @@ -56,7 +57,7 @@ fun DrinkListScreen( bottomBar = { MeteroidBottomBar( currentRoute = HomeSections.PURCHASE, - historyEnabled = account?.second?.audit == true, + historyEnabled = account?.user?.audit == true, navigateTo = onNavigate ) } diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/drinks/DrinkListViewModel.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/drinks/DrinkListViewModel.kt index 1a10f7d..bca3d10 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/drinks/DrinkListViewModel.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/drinks/DrinkListViewModel.kt @@ -27,6 +27,7 @@ package de.chaosdorf.meteroid.ui.drinks import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel +import de.chaosdorf.meteroid.model.AccountInfo import de.chaosdorf.meteroid.model.Drink import de.chaosdorf.meteroid.model.DrinkRepository import de.chaosdorf.meteroid.model.Server @@ -47,7 +48,7 @@ class DrinkListViewModel @Inject constructor( repository: DrinkRepository, syncHandler: DrinkSyncHandler ) : ViewModel() { - val account: StateFlow<Pair<Server, User?>?> = accountProvider.account + val account: StateFlow<AccountInfo?> = accountProvider.account .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) val drinks: StateFlow<List<Drink>> = accountProvider.account diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyListScreen.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyListScreen.kt index 9092436..14386ce 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyListScreen.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyListScreen.kt @@ -37,6 +37,7 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp +import androidx.navigation.NavOptions import de.chaosdorf.meteroid.ui.navigation.HomeSections import de.chaosdorf.meteroid.ui.navigation.MeteroidBottomBar import de.chaosdorf.meteroid.ui.navigation.MeteroidTopBar @@ -44,7 +45,7 @@ import de.chaosdorf.meteroid.ui.navigation.MeteroidTopBar @Composable fun MoneyListScreen( viewModel: MoneyListViewModel, - onNavigate: (String) -> Unit = {} + onNavigate: (String, NavOptions) -> Unit ) { val account by viewModel.account.collectAsState() @@ -53,7 +54,7 @@ fun MoneyListScreen( bottomBar = { MeteroidBottomBar( currentRoute = HomeSections.DEPOSIT, - historyEnabled = account?.second?.audit == true, + historyEnabled = account?.user?.audit == true, navigateTo = onNavigate ) } diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyListViewModel.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyListViewModel.kt index 1386617..508ccec 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyListViewModel.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyListViewModel.kt @@ -29,8 +29,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import de.chaosdorf.meteroid.R -import de.chaosdorf.meteroid.model.Server -import de.chaosdorf.meteroid.model.User +import de.chaosdorf.meteroid.model.AccountInfo import de.chaosdorf.meteroid.sync.AccountProvider import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -51,7 +50,7 @@ enum class MonetaryAmount(val amount: Double, @DrawableRes val image: Int) { class MoneyListViewModel @Inject constructor( accountProvider: AccountProvider ) : ViewModel() { - val account: StateFlow<Pair<Server, User?>?> = accountProvider.account + val account: StateFlow<AccountInfo?> = accountProvider.account .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) val money: List<MonetaryAmount> = MonetaryAmount.entries diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyTile.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyTile.kt index f584cb0..5ec0760 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyTile.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/money/MoneyTile.kt @@ -56,8 +56,6 @@ fun MoneyTile( contentDescription = null, contentScale = ContentScale.Fit, modifier = Modifier - .clip(CircleShape) - .background(MaterialTheme.colorScheme.primaryContainer) .aspectRatio(1.0f) .padding(8.dp) ) diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/navigation/MeteroidBottomBar.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/navigation/MeteroidBottomBar.kt index ebe94f2..18238c8 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/navigation/MeteroidBottomBar.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/navigation/MeteroidBottomBar.kt @@ -30,11 +30,12 @@ import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.navigation.NavOptions @Composable fun <T : MeteroidNavSection> MeteroidBottomBar( currentRoute: T, - navigateTo: (String) -> Unit, + navigateTo: (String, NavOptions) -> Unit, historyEnabled: Boolean, modifier: Modifier = Modifier ) { @@ -44,7 +45,14 @@ fun <T : MeteroidNavSection> MeteroidBottomBar( icon = { Icon(route.icon, contentDescription = route.title) }, label = { Text(route.title) }, selected = route == currentRoute, - onClick = { navigateTo(route.route) }, + onClick = { + navigateTo( + route.route, + NavOptions.Builder() + .setPopUpTo(Routes.Home.Root, true) + .build() + ) + }, modifier = modifier, enabled = route != HomeSections.HISTORY || historyEnabled ) diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/navigation/MeteroidTopBar.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/navigation/MeteroidTopBar.kt index 9cca0a1..e796d4f 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/navigation/MeteroidTopBar.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/navigation/MeteroidTopBar.kt @@ -31,9 +31,12 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarColors +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -43,37 +46,40 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.navigation.NavOptions import coil.compose.AsyncImage +import de.chaosdorf.meteroid.model.AccountInfo import de.chaosdorf.meteroid.model.Server import de.chaosdorf.meteroid.model.User @Composable fun MeteroidTopBar( - account: Pair<Server, User?>?, - onNavigate: (String) -> Unit = {} + account: AccountInfo?, + onNavigate: (String, NavOptions) -> Unit ) { TopAppBar( title = { Text( - account?.second?.name - ?: account?.first?.name + account?.user?.name + ?: account?.server?.name ?: "Meteroid" ) }, navigationIcon = { - AsyncImage( - account?.second?.gravatarUrl(), - contentDescription = "User List", - contentScale = ContentScale.Crop, - modifier = Modifier - .size(48.dp) - .clip(CircleShape) - .border(1.dp, Color.White, CircleShape) - .background(MaterialTheme.colorScheme.primaryContainer) - ) + AsyncImage( + account?.user?.gravatarUrl(), + contentDescription = "User List", + contentScale = ContentScale.Crop, + modifier = Modifier + .padding(start = 6.dp, end = 24.dp) + .size(40.dp) + .clip(CircleShape) + .border(1.dp, Color.White, CircleShape) + .background(MaterialTheme.colorScheme.primaryContainer) + ) }, actions = { - account?.second?.let { user -> + account?.user?.let { user -> val (foreground, background) = if (user.balance < 0) Pair(MaterialTheme.colorScheme.onError, MaterialTheme.colorScheme.error) @@ -95,7 +101,17 @@ fun MeteroidTopBar( } }, modifier = Modifier - .shadow(4.dp) - .clickable { onNavigate(Routes.Users.Root) } + .clickable { + onNavigate( + Routes.Users.Root, + NavOptions + .Builder() + .build() + ) + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer + ) ) } diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseInfo.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseInfo.kt new file mode 100644 index 0000000..b389efe --- /dev/null +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseInfo.kt @@ -0,0 +1,33 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2013-2023 Chaosdorf e.V. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package de.chaosdorf.meteroid.ui.purchases + +import de.chaosdorf.meteroid.model.Drink +import de.chaosdorf.meteroid.model.Purchase + +data class PurchaseInfo( + val purchase: Purchase, + val drink: Drink? +) diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseListScreen.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseListScreen.kt index 84d1f8b..ac31c25 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseListScreen.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseListScreen.kt @@ -35,6 +35,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import androidx.navigation.NavOptions import de.chaosdorf.meteroid.sync.SyncHandler import de.chaosdorf.meteroid.ui.navigation.HomeSections import de.chaosdorf.meteroid.ui.navigation.MeteroidBottomBar @@ -43,7 +44,7 @@ import de.chaosdorf.meteroid.ui.navigation.MeteroidTopBar @Composable fun PurchaseListScreen( viewModel: PurchaseViewModel, - onNavigate: (route: String) -> Unit = {} + onNavigate: (String, NavOptions) -> Unit ) { val account by viewModel.account.collectAsState() val purchases by viewModel.purchases.collectAsState() @@ -54,7 +55,7 @@ fun PurchaseListScreen( bottomBar = { MeteroidBottomBar( currentRoute = HomeSections.HISTORY, - historyEnabled = account?.second?.audit == true, + historyEnabled = account?.user?.audit == true, navigateTo = onNavigate ) } diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseViewModel.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseViewModel.kt index 86a6af8..b31def9 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseViewModel.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/purchases/PurchaseViewModel.kt @@ -27,12 +27,9 @@ package de.chaosdorf.meteroid.ui.purchases import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import de.chaosdorf.meteroid.model.Drink +import de.chaosdorf.meteroid.model.AccountInfo import de.chaosdorf.meteroid.model.DrinkRepository -import de.chaosdorf.meteroid.model.Purchase import de.chaosdorf.meteroid.model.PurchaseRepository -import de.chaosdorf.meteroid.model.Server -import de.chaosdorf.meteroid.model.User import de.chaosdorf.meteroid.sync.AccountProvider import de.chaosdorf.meteroid.sync.PurchaseSyncHandler import de.chaosdorf.meteroid.sync.SyncHandler @@ -53,47 +50,51 @@ class PurchaseViewModel @Inject constructor( drinkRepository: DrinkRepository, syncHandler: PurchaseSyncHandler ) : ViewModel() { - val account: StateFlow<Pair<Server, User?>?> = accountProvider.account + val account: StateFlow<AccountInfo?> = accountProvider.account .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) - val purchases: StateFlow<List<Pair<Purchase, Drink?>>> = accountProvider.account + val purchases: StateFlow<List<PurchaseInfo>> = accountProvider.account .flatMapLatest { account -> - account?.let { (server, user) -> - user?.let { user -> + account?.let { (server, maybeUser) -> + maybeUser?.let { user -> combine( repository.getAllFlow(server.serverId, user.userId), drinkRepository.getAllFlow(server.serverId) ) { purchases, drinks -> purchases.map { purchase -> - Pair(purchase, drinks.firstOrNull { drink -> drink.drinkId == purchase.drinkId }) + PurchaseInfo( + purchase, + drinks.firstOrNull { drink -> drink.drinkId == purchase.drinkId } + ) } } } } ?: flowOf(emptyList()) }.mapLatest { list -> list.mergeAdjecentDeposits() - .filter { it.second != null || it.first.difference != 0.0 } + .filter { it.drink != null || it.purchase.difference != 0.0 } }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), emptyList()) val syncState: StateFlow<SyncHandler.State> = syncHandler.state } -fun List<Pair<Purchase, Drink?>>.mergeAdjecentDeposits(): List<Pair<Purchase, Drink?>> { - val result = mutableListOf<Pair<Purchase, Drink?>>() +fun List<PurchaseInfo>.mergeAdjecentDeposits(): List<PurchaseInfo> { + val result = mutableListOf<PurchaseInfo>() for (entry in this) { val previous = result.lastOrNull() if (previous != null - && previous.first.difference > 0 - && entry.first.difference > 0 - && previous.second == null - && entry.second == null - && entry.first.createdAt.minus(previous.first.createdAt) < 5.minutes + && previous.purchase.difference > 0 + && entry.purchase.difference > 0 + && previous.drink == null + && entry.drink == null + && entry.purchase.createdAt.minus(previous.purchase.createdAt) < 5.minutes ) { result.removeLast() result.add( - Pair( - entry.first.copy(difference = entry.first.difference + previous.first.difference), - null + entry.copy( + purchase = entry.purchase.copy( + difference = entry.purchase.difference + previous.purchase.difference + ) ) ) } else { diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/users/UserListScreen.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/users/UserListScreen.kt index 25eb6f7..02b1229 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/users/UserListScreen.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/users/UserListScreen.kt @@ -68,13 +68,13 @@ fun UserListScreen( TopAppBar( title = { Text( - server?.first?.name + server?.server?.name ?: "Meteroid" ) }, navigationIcon = { AsyncImage( - server?.first?.logoUrl, + server?.server?.logoUrl, contentDescription = "User List", contentScale = ContentScale.Crop, modifier = Modifier diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/users/UserListViewModel.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/users/UserListViewModel.kt index 7e74e6b..bc36b14 100644 --- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/users/UserListViewModel.kt +++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/users/UserListViewModel.kt @@ -27,6 +27,7 @@ package de.chaosdorf.meteroid.ui.users import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel +import de.chaosdorf.meteroid.model.AccountInfo import de.chaosdorf.meteroid.model.Server import de.chaosdorf.meteroid.model.User import de.chaosdorf.meteroid.model.UserRepository @@ -46,7 +47,7 @@ class UserListViewModel @Inject constructor( repository: UserRepository, syncHandler: UserSyncHandler ) : ViewModel() { - val account: StateFlow<Pair<Server, User?>?> = accountProvider.account + val account: StateFlow<AccountInfo?> = accountProvider.account .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) val users: StateFlow<List<User>> = accountProvider.account diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0e5d0c5..7d17d98 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,22 +1,22 @@ [versions] -androidGradlePlugin = "8.1.2" +androidGradlePlugin = "8.1.3" androidx-activity = "1.8.0" androidx-appcompat = "1.6.1" androidx-compose-bom = "2023.10.01" -androidx-compose-compiler = "1.5.3" +androidx-compose-compiler = "1.5.4" androidx-compose-material = "1.5.0-alpha04" androidx-compose-material3 = "1.2.0-alpha10" androidx-compose-runtimetracing = "1.0.0-alpha04" androidx-compose-tooling = "1.6.0-alpha08" androidx-datastore = "1.0.0" -androidx-hilt = "1.0.0" +androidx-hilt = "1.1.0" androidx-navigation = "2.7.5" androidx-room = "2.6.0" coil = "2.4.0" dagger-hilt = "2.48.1" desugar-jdk = "2.0.4" -kotlin = "1.9.10" -kotlin-ksp = "1.9.10-1.0.13" +kotlin = "1.9.20" +kotlin-ksp = "1.9.20-1.0.14" kotlinxCoroutines = "1.7.1" kotlinxDatetime = "0.4.0" kotlinxSerializationJson = "1.5.1" diff --git a/persistence/src/main/kotlin/de/chaosdorf/meteroid/model/AccountInfo.kt b/persistence/src/main/kotlin/de/chaosdorf/meteroid/model/AccountInfo.kt new file mode 100644 index 0000000..581d020 --- /dev/null +++ b/persistence/src/main/kotlin/de/chaosdorf/meteroid/model/AccountInfo.kt @@ -0,0 +1,30 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2013-2023 Chaosdorf e.V. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package de.chaosdorf.meteroid.model + +data class AccountInfo( + val server: Server, + val user: User? +) -- GitLab