From 9106e3a9df11e8e71f7812ba1989b699414091c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20St=C4=99pie=C5=84?= Date: Thu, 2 Jan 2025 22:19:53 +0100 Subject: [PATCH] Rename packages, restructure ui --- .../feelbeatapp/androidclient/model/Player.kt | 3 + .../androidclient/model/PlayerWithResult.kt | 5 ++ .../{ui/state => model}/Playlist.kt | 2 +- .../androidclient/{ui/state => model}/Room.kt | 2 +- .../androidclient/model/RoomSettings.kt | 8 ++ .../feelbeatapp/androidclient/model/Song.kt | 3 + .../androidclient/ui/FeelBeatApp.kt | 16 ++-- .../AcceptGameScreen.kt | 6 +- .../AcceptGameViewModel.kt | 7 +- .../ui/{state => acceptgame}/GameState.kt | 7 +- .../androidclient/ui/game/GameScreen.kt | 38 ---------- .../androidclient/ui/game/GameViewModel.kt | 33 -------- .../GameResultScreen.kt | 4 +- .../GameResultViewModel.kt | 8 +- .../GuessResultScreen.kt | 2 +- .../GuessSongScreen.kt | 6 +- .../GuessSongViewModel.kt | 9 +-- .../ui/{state => guesssong}/GuessState.kt | 6 +- .../{guessSong => guesssong}/ResultStatus.kt | 2 +- .../androidclient/ui/home/HomeScreen.kt | 2 +- .../androidclient/ui/home/HomeViewModel.kt | 2 +- .../NewRoomSettingsViewModel.kt | 37 --------- .../ui/roomSettings/RoomSettingsViewModel.kt | 46 ----------- .../roomsettings/components/SettingSlider.kt | 44 +++++++++++ .../roomsettings/components/SettingSliders.kt | 37 +++++++++ .../screens/EditRoomSettingsScreen.kt} | 76 +++---------------- .../screens}/NewRoomSettingsScreen.kt | 73 ++---------------- .../viewmodels/EditRoomSettingsViewModel.kt | 3 + .../viewmodels/NewRoomSettingsViewModel.kt | 3 + .../viewmodels/RoomSettingsViewModel.kt | 31 ++++++++ .../StartGameScreen.kt | 4 +- .../StartGameViewModel.kt | 4 +- .../androidclient/ui/state/Player.kt | 3 - .../ui/state/PlayerWithResult.kt | 5 -- .../androidclient/ui/state/Song.kt | 3 - 35 files changed, 200 insertions(+), 340 deletions(-) create mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/model/Player.kt create mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/model/PlayerWithResult.kt rename app/src/main/java/com/github/feelbeatapp/androidclient/{ui/state => model}/Playlist.kt (53%) rename app/src/main/java/com/github/feelbeatapp/androidclient/{ui/state => model}/Room.kt (75%) create mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/model/RoomSettings.kt create mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/model/Song.kt rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{acceptGame => acceptgame}/AcceptGameScreen.kt (97%) rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{acceptGame => acceptgame}/AcceptGameViewModel.kt (85%) rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{state => acceptgame}/GameState.kt (50%) delete mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/game/GameScreen.kt delete mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/game/GameViewModel.kt rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{gameResult => gameresult}/GameResultScreen.kt (96%) rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{gameResult => gameresult}/GameResultViewModel.kt (84%) rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{guessSong => guesssong}/GuessResultScreen.kt (98%) rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{guessSong => guesssong}/GuessSongScreen.kt (97%) rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{guessSong => guesssong}/GuessSongViewModel.kt (93%) rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{state => guesssong}/GuessState.kt (63%) rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{guessSong => guesssong}/ResultStatus.kt (54%) delete mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/newRoomSettings/NewRoomSettingsViewModel.kt delete mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomSettings/RoomSettingsViewModel.kt create mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/components/SettingSlider.kt create mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/components/SettingSliders.kt rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{roomSettings/RoomSettingsScreen.kt => roomsettings/screens/EditRoomSettingsScreen.kt} (56%) rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{newRoomSettings => roomsettings/screens}/NewRoomSettingsScreen.kt (58%) create mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/EditRoomSettingsViewModel.kt create mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/NewRoomSettingsViewModel.kt create mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/RoomSettingsViewModel.kt rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{startGame => startgame}/StartGameScreen.kt (96%) rename app/src/main/java/com/github/feelbeatapp/androidclient/ui/{startGame => startgame}/StartGameViewModel.kt (88%) delete mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Player.kt delete mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/PlayerWithResult.kt delete mode 100644 app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Song.kt diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/model/Player.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/model/Player.kt new file mode 100644 index 0000000..ea69ee6 --- /dev/null +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/model/Player.kt @@ -0,0 +1,3 @@ +package com.github.feelbeatapp.androidclient.model + +data class Player(val name: String, val image: Int) diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/model/PlayerWithResult.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/model/PlayerWithResult.kt new file mode 100644 index 0000000..c02418f --- /dev/null +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/model/PlayerWithResult.kt @@ -0,0 +1,5 @@ +package com.github.feelbeatapp.androidclient.model + +import com.github.feelbeatapp.androidclient.ui.guesssong.ResultStatus + +data class PlayerWithResult(val player: Player, val resultStatus: ResultStatus, val points: Int) diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Playlist.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/model/Playlist.kt similarity index 53% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Playlist.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/model/Playlist.kt index 71d492b..ec96058 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Playlist.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/model/Playlist.kt @@ -1,3 +1,3 @@ -package com.github.feelbeatapp.androidclient.ui.state +package com.github.feelbeatapp.androidclient.model data class Playlist(val name: String, val songs: List) diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Room.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/model/Room.kt similarity index 75% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Room.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/model/Room.kt index a8ff9f7..3937326 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Room.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/model/Room.kt @@ -1,4 +1,4 @@ -package com.github.feelbeatapp.androidclient.ui.state +package com.github.feelbeatapp.androidclient.model data class Room( val id: Int, diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/model/RoomSettings.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/model/RoomSettings.kt new file mode 100644 index 0000000..e9660bb --- /dev/null +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/model/RoomSettings.kt @@ -0,0 +1,8 @@ +package com.github.feelbeatapp.androidclient.model + +data class RoomSettings( + val maxPlayers: Int, + val snippetDuration: Int, + val pointsToWin: Int, + val playlistLink: String, +) diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/model/Song.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/model/Song.kt new file mode 100644 index 0000000..475d2fa --- /dev/null +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/model/Song.kt @@ -0,0 +1,3 @@ +package com.github.feelbeatapp.androidclient.model + +data class Song(val id: Int, val title: String) diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/FeelBeatApp.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/FeelBeatApp.kt index 36ba656..02eb570 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/FeelBeatApp.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/FeelBeatApp.kt @@ -8,15 +8,15 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import com.github.feelbeatapp.androidclient.ui.acceptGame.AcceptGameScreen -import com.github.feelbeatapp.androidclient.ui.gameResult.GameResultScreen -import com.github.feelbeatapp.androidclient.ui.guessSong.GuessResultScreen -import com.github.feelbeatapp.androidclient.ui.guessSong.GuessSongScreen +import com.github.feelbeatapp.androidclient.ui.acceptgame.AcceptGameScreen +import com.github.feelbeatapp.androidclient.ui.gameresult.GameResultScreen +import com.github.feelbeatapp.androidclient.ui.guesssong.GuessResultScreen +import com.github.feelbeatapp.androidclient.ui.guesssong.GuessSongScreen import com.github.feelbeatapp.androidclient.ui.home.HomeScreen import com.github.feelbeatapp.androidclient.ui.login.LoginScreen -import com.github.feelbeatapp.androidclient.ui.newRoomSettings.NewRoomSettingsScreen -import com.github.feelbeatapp.androidclient.ui.roomSettings.RoomSettingsScreen -import com.github.feelbeatapp.androidclient.ui.startGame.StartGameScreen +import com.github.feelbeatapp.androidclient.ui.roomsettings.screens.EditRoomSettingsScreen +import com.github.feelbeatapp.androidclient.ui.roomsettings.screens.NewRoomSettingsScreen +import com.github.feelbeatapp.androidclient.ui.startgame.StartGameScreen import com.github.feelbeatapp.androidclient.ui.theme.FeelBeatTheme @Composable @@ -38,7 +38,7 @@ fun FeelBeatApp( NewRoomSettingsScreen(navController = navController) } composable(route = FeelBeatRoute.ROOM_SETTINGS.name) { - RoomSettingsScreen(navController = navController) + EditRoomSettingsScreen(navController = navController) } composable(route = FeelBeatRoute.ACCEPT_GAME.name) { AcceptGameScreen(navController = navController) diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptGame/AcceptGameScreen.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptgame/AcceptGameScreen.kt similarity index 97% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptGame/AcceptGameScreen.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptgame/AcceptGameScreen.kt index 4bde89d..d6d75cd 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptGame/AcceptGameScreen.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptgame/AcceptGameScreen.kt @@ -1,4 +1,4 @@ -package com.github.feelbeatapp.androidclient.ui.acceptGame +package com.github.feelbeatapp.androidclient.ui.acceptgame import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -34,8 +34,8 @@ import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.github.feelbeatapp.androidclient.R import com.github.feelbeatapp.androidclient.ui.FeelBeatRoute -import com.github.feelbeatapp.androidclient.ui.state.Song -import com.github.feelbeatapp.androidclient.ui.startGame.PlayerCard +import com.github.feelbeatapp.androidclient.model.Song +import com.github.feelbeatapp.androidclient.ui.startgame.PlayerCard @Composable fun AcceptGameScreen( diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptGame/AcceptGameViewModel.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptgame/AcceptGameViewModel.kt similarity index 85% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptGame/AcceptGameViewModel.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptgame/AcceptGameViewModel.kt index b7465df..225c8d8 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptGame/AcceptGameViewModel.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptgame/AcceptGameViewModel.kt @@ -1,11 +1,10 @@ -package com.github.feelbeatapp.androidclient.ui.acceptGame +package com.github.feelbeatapp.androidclient.ui.acceptgame import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.github.feelbeatapp.androidclient.R -import com.github.feelbeatapp.androidclient.ui.state.GameState -import com.github.feelbeatapp.androidclient.ui.state.Player -import com.github.feelbeatapp.androidclient.ui.state.Song +import com.github.feelbeatapp.androidclient.model.Player +import com.github.feelbeatapp.androidclient.model.Song import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/GameState.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptgame/GameState.kt similarity index 50% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/GameState.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptgame/GameState.kt index d324a12..fb82eab 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/GameState.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/acceptgame/GameState.kt @@ -1,4 +1,9 @@ -package com.github.feelbeatapp.androidclient.ui.state +package com.github.feelbeatapp.androidclient.ui.acceptgame + +import com.github.feelbeatapp.androidclient.model.Player +import com.github.feelbeatapp.androidclient.model.Playlist +import com.github.feelbeatapp.androidclient.model.Room +import com.github.feelbeatapp.androidclient.model.Song data class GameState( val players: List = emptyList(), diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/game/GameScreen.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/game/GameScreen.kt deleted file mode 100644 index bc64426..0000000 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/game/GameScreen.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.github.feelbeatapp.androidclient.ui.game - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.Text -import androidx.compose.material3.TextField -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import com.github.feelbeatapp.androidclient.ui.theme.FeelBeatTheme - -@Composable -fun GameScreen(viewModel: GameViewModel = hiltViewModel()) { - val uiState by viewModel.state.collectAsStateWithLifecycle() - - Column( - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.fillMaxSize(), - ) { - TextField( - value = uiState.textInput, - onValueChange = { text -> viewModel.setText(text) }, - label = { Text("Synced input") }, - ) - } -} - -@Preview -@Composable -fun GameScreenPreview() { - FeelBeatTheme { GameScreen() } -} diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/game/GameViewModel.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/game/GameViewModel.kt deleted file mode 100644 index 485f738..0000000 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/game/GameViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.github.feelbeatapp.androidclient.ui.game - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.github.feelbeatapp.androidclient.network.fullduplex.NetworkAgent -import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.update -import kotlinx.coroutines.launch - -data class GameState(val textInput: String) - -@HiltViewModel -class GameViewModel @Inject constructor(private val socket: NetworkAgent) : ViewModel() { - private val _state = MutableStateFlow(GameState("")) - val state: StateFlow = _state.asStateFlow() - - init { - viewModelScope.launch(Dispatchers.IO) { - socket.receiveFlow().collect { msg -> _state.update { GameState(msg) } } - } - } - - fun setText(string: String) { - _state.update { GameState(string) } - - viewModelScope.launch { socket.sendMessage(string) } - } -} diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameResult/GameResultScreen.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameresult/GameResultScreen.kt similarity index 96% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameResult/GameResultScreen.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameresult/GameResultScreen.kt index f441f02..d07a699 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameResult/GameResultScreen.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameresult/GameResultScreen.kt @@ -1,4 +1,4 @@ -package com.github.feelbeatapp.androidclient.ui.gameResult +package com.github.feelbeatapp.androidclient.ui.gameresult import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement @@ -31,7 +31,7 @@ import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.github.feelbeatapp.androidclient.R import com.github.feelbeatapp.androidclient.ui.FeelBeatRoute -import com.github.feelbeatapp.androidclient.ui.state.PlayerWithResult +import com.github.feelbeatapp.androidclient.model.PlayerWithResult @Composable fun GameResultScreen( diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameResult/GameResultViewModel.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameresult/GameResultViewModel.kt similarity index 84% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameResult/GameResultViewModel.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameresult/GameResultViewModel.kt index f3111d2..6ddb261 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameResult/GameResultViewModel.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/gameresult/GameResultViewModel.kt @@ -1,11 +1,11 @@ -package com.github.feelbeatapp.androidclient.ui.gameResult +package com.github.feelbeatapp.androidclient.ui.gameresult import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.github.feelbeatapp.androidclient.R -import com.github.feelbeatapp.androidclient.ui.state.Player -import com.github.feelbeatapp.androidclient.ui.state.PlayerWithResult -import com.github.feelbeatapp.androidclient.ui.guessSong.ResultStatus +import com.github.feelbeatapp.androidclient.model.Player +import com.github.feelbeatapp.androidclient.model.PlayerWithResult +import com.github.feelbeatapp.androidclient.ui.guesssong.ResultStatus import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/GuessResultScreen.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessResultScreen.kt similarity index 98% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/GuessResultScreen.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessResultScreen.kt index 7012e75..21d1ba7 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/GuessResultScreen.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessResultScreen.kt @@ -1,4 +1,4 @@ -package com.github.feelbeatapp.androidclient.ui.guessSong +package com.github.feelbeatapp.androidclient.ui.guesssong import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/GuessSongScreen.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessSongScreen.kt similarity index 97% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/GuessSongScreen.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessSongScreen.kt index 1cc55e9..2b4114a 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/GuessSongScreen.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessSongScreen.kt @@ -1,4 +1,4 @@ -package com.github.feelbeatapp.androidclient.ui.guessSong +package com.github.feelbeatapp.androidclient.ui.guesssong import androidx.compose.foundation.Image import androidx.compose.foundation.border @@ -41,8 +41,8 @@ import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.github.feelbeatapp.androidclient.R import com.github.feelbeatapp.androidclient.ui.FeelBeatRoute -import com.github.feelbeatapp.androidclient.ui.state.PlayerWithResult -import com.github.feelbeatapp.androidclient.ui.state.Song +import com.github.feelbeatapp.androidclient.model.PlayerWithResult +import com.github.feelbeatapp.androidclient.model.Song @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/GuessSongViewModel.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessSongViewModel.kt similarity index 93% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/GuessSongViewModel.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessSongViewModel.kt index e9880d9..d704574 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/GuessSongViewModel.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessSongViewModel.kt @@ -1,13 +1,12 @@ -package com.github.feelbeatapp.androidclient.ui.guessSong +package com.github.feelbeatapp.androidclient.ui.guesssong import androidx.compose.ui.text.input.TextFieldValue import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.github.feelbeatapp.androidclient.R -import com.github.feelbeatapp.androidclient.ui.state.GuessState -import com.github.feelbeatapp.androidclient.ui.state.Player -import com.github.feelbeatapp.androidclient.ui.state.PlayerWithResult -import com.github.feelbeatapp.androidclient.ui.state.Song +import com.github.feelbeatapp.androidclient.model.Player +import com.github.feelbeatapp.androidclient.model.PlayerWithResult +import com.github.feelbeatapp.androidclient.model.Song import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/GuessState.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessState.kt similarity index 63% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/GuessState.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessState.kt index c809000..ca5dd29 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/GuessState.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/GuessState.kt @@ -1,6 +1,10 @@ -package com.github.feelbeatapp.androidclient.ui.state +package com.github.feelbeatapp.androidclient.ui.guesssong import androidx.compose.ui.text.input.TextFieldValue +import com.github.feelbeatapp.androidclient.model.PlayerWithResult +import com.github.feelbeatapp.androidclient.model.Playlist +import com.github.feelbeatapp.androidclient.model.Room +import com.github.feelbeatapp.androidclient.model.Song data class GuessState( val players: List = emptyList(), diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/ResultStatus.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/ResultStatus.kt similarity index 54% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/ResultStatus.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/ResultStatus.kt index aa06694..3bc292c 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guessSong/ResultStatus.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/guesssong/ResultStatus.kt @@ -1,4 +1,4 @@ -package com.github.feelbeatapp.androidclient.ui.guessSong +package com.github.feelbeatapp.androidclient.ui.guesssong enum class ResultStatus { CORRECT, diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/home/HomeScreen.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/home/HomeScreen.kt index e0caa14..f6ed309 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/home/HomeScreen.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/home/HomeScreen.kt @@ -45,7 +45,7 @@ import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.github.feelbeatapp.androidclient.R import com.github.feelbeatapp.androidclient.ui.FeelBeatRoute -import com.github.feelbeatapp.androidclient.ui.state.Room +import com.github.feelbeatapp.androidclient.model.Room @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/home/HomeViewModel.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/home/HomeViewModel.kt index 112186a..9ecf055 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/home/HomeViewModel.kt @@ -4,7 +4,7 @@ import android.content.Context import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.github.feelbeatapp.androidclient.auth.AuthManager -import com.github.feelbeatapp.androidclient.ui.state.Room +import com.github.feelbeatapp.androidclient.model.Room import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/newRoomSettings/NewRoomSettingsViewModel.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/newRoomSettings/NewRoomSettingsViewModel.kt deleted file mode 100644 index e8bde69..0000000 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/newRoomSettings/NewRoomSettingsViewModel.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.github.feelbeatapp.androidclient.ui.newRoomSettings - -import androidx.lifecycle.ViewModel -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow - -class NewRoomSettingsViewModel : ViewModel() { - private val _maxPlayers = MutableStateFlow(0) - val maxPlayers: StateFlow = _maxPlayers.asStateFlow() - - private val _snippetDuration = MutableStateFlow(0) - val snippetDuration: StateFlow = _snippetDuration.asStateFlow() - - private val _pointsToWin = MutableStateFlow(0) - val pointsToWin: StateFlow = _pointsToWin.asStateFlow() - - private val _playlistLink = MutableStateFlow("") - val playlistLink: StateFlow - get() = _playlistLink.asStateFlow() - - fun setMaxPlayers(value: Int) { - _maxPlayers.value = value - } - - fun setSnippetDuration(value: Int) { - _snippetDuration.value = value - } - - fun setPointsToWin(value: Int) { - _pointsToWin.value = value - } - - fun setPlaylistLink(value: String) { - _playlistLink.value = value - } -} diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomSettings/RoomSettingsViewModel.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomSettings/RoomSettingsViewModel.kt deleted file mode 100644 index e95fc52..0000000 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomSettings/RoomSettingsViewModel.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.github.feelbeatapp.androidclient.ui.roomSettings - -import androidx.lifecycle.ViewModel -import com.github.feelbeatapp.androidclient.ui.state.Room -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow - -class RoomSettingsViewModel : ViewModel() { - - private val _maxPlayers = MutableStateFlow(0) - val maxPlayers: StateFlow = _maxPlayers.asStateFlow() - - private val _snippetDuration = MutableStateFlow(0) - val snippetDuration: StateFlow = _snippetDuration.asStateFlow() - - private val _pointsToWin = MutableStateFlow(0) - val pointsToWin: StateFlow = _pointsToWin.asStateFlow() - - private val _playlistLink = MutableStateFlow("") - val playlistLink: StateFlow - get() = _playlistLink.asStateFlow() - - fun loadRoomSettings(room: Room) { - _maxPlayers.value = room.maxPlayers - _snippetDuration.value = room.snippetDuration - _pointsToWin.value = room.pointsToWin - _playlistLink.value = room.playlistLink - } - - fun setMaxPlayers(value: Int) { - _maxPlayers.value = value - } - - fun setSnippetDuration(value: Int) { - _snippetDuration.value = value - } - - fun setPointsToWin(value: Int) { - _pointsToWin.value = value - } - - fun setPlaylistLink(value: String) { - _playlistLink.value = value - } -} diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/components/SettingSlider.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/components/SettingSlider.kt new file mode 100644 index 0000000..71d5818 --- /dev/null +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/components/SettingSlider.kt @@ -0,0 +1,44 @@ +package com.github.feelbeatapp.androidclient.ui.roomsettings.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.width +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Slider +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun SettingSlider( + label: String, + value: Int, + onValueChange: (Int) -> Unit, + valueRange: IntRange, + steps: Int, + modifier: Modifier = Modifier, +) { + Column(modifier = modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text(text = label, style = MaterialTheme.typography.bodyMedium) + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Slider( + value = value.toFloat(), + onValueChange = { onValueChange(it.toInt()) }, + valueRange = valueRange.first.toFloat()..valueRange.last.toFloat(), + steps = steps - 1, + modifier = Modifier.weight(1f), + ) + Spacer(modifier = Modifier.width(16.dp)) + Text(text = value.toString(), style = MaterialTheme.typography.bodyMedium) + } + } +} diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/components/SettingSliders.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/components/SettingSliders.kt new file mode 100644 index 0000000..51228af --- /dev/null +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/components/SettingSliders.kt @@ -0,0 +1,37 @@ +package com.github.feelbeatapp.androidclient.ui.roomsettings.components + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.res.stringResource +import com.github.feelbeatapp.androidclient.R +import com.github.feelbeatapp.androidclient.ui.roomsettings.viewmodels.RoomSettingsViewModel + +@Composable +fun SettingSliders(viewModel: RoomSettingsViewModel) { + val roomSettings by viewModel.roomSettings.collectAsState() + + SettingSlider( + label = stringResource(R.string.number_of_players), + value = roomSettings.maxPlayers, + onValueChange = { viewModel.setMaxPlayers(it.toInt()) }, + valueRange = 1..5, + steps = 4, + ) + + SettingSlider( + label = stringResource(R.string.snippet_duration), + value = roomSettings.snippetDuration, + onValueChange = { viewModel.setSnippetDuration(it.toInt()) }, + valueRange = 5..30, + steps = 5, + ) + + SettingSlider( + label = stringResource(R.string.points_to_win), + value = roomSettings.pointsToWin, + onValueChange = { viewModel.setPointsToWin(it.toInt()) }, + valueRange = 3..10, + steps = 6, + ) +} diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomSettings/RoomSettingsScreen.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/screens/EditRoomSettingsScreen.kt similarity index 56% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomSettings/RoomSettingsScreen.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/screens/EditRoomSettingsScreen.kt index 0d68aee..67cb905 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomSettings/RoomSettingsScreen.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/screens/EditRoomSettingsScreen.kt @@ -1,14 +1,11 @@ -package com.github.feelbeatapp.androidclient.ui.roomSettings +package com.github.feelbeatapp.androidclient.ui.roomsettings.screens import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Home import androidx.compose.material.icons.filled.Settings @@ -17,13 +14,11 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.Scaffold -import androidx.compose.material3.Slider import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview @@ -32,18 +27,18 @@ import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.github.feelbeatapp.androidclient.R import com.github.feelbeatapp.androidclient.ui.FeelBeatRoute +import com.github.feelbeatapp.androidclient.ui.roomsettings.components.SettingSliders +import com.github.feelbeatapp.androidclient.ui.roomsettings.viewmodels.EditRoomSettingsViewModel +import com.github.feelbeatapp.androidclient.ui.roomsettings.viewmodels.RoomSettingsViewModel @Composable -fun RoomSettingsScreen( - viewModel: RoomSettingsViewModel = RoomSettingsViewModel(), +fun EditRoomSettingsScreen( + viewModel: RoomSettingsViewModel = EditRoomSettingsViewModel(), navController: NavController, modifier: Modifier = Modifier, isRoomCreator: Boolean = true, ) { - val maxPlayers by viewModel.maxPlayers.collectAsState() - val snippetDuration by viewModel.snippetDuration.collectAsState() - val pointsToWin by viewModel.pointsToWin.collectAsState() - val playlistLink by viewModel.playlistLink.collectAsState() + val roomSettings by viewModel.roomSettings.collectAsState() Scaffold( bottomBar = { @@ -56,29 +51,7 @@ fun RoomSettingsScreen( modifier = modifier.fillMaxSize().padding(padding).padding(16.dp), verticalArrangement = Arrangement.spacedBy(24.dp), ) { - SettingSlider( - label = stringResource(R.string.number_of_players), - value = maxPlayers, - onValueChange = { viewModel.setMaxPlayers(it.toInt()) }, - valueRange = 1..5, - steps = 4, - ) - - SettingSlider( - label = stringResource(R.string.snippet_duration), - value = snippetDuration, - onValueChange = { viewModel.setSnippetDuration(it.toInt()) }, - valueRange = 5..30, - steps = 5, - ) - - SettingSlider( - label = stringResource(R.string.points_to_win), - value = pointsToWin, - onValueChange = { viewModel.setPointsToWin(it.toInt()) }, - valueRange = 3..10, - steps = 6, - ) + SettingSliders(viewModel) Text( text = stringResource(R.string.playlist_link), @@ -87,7 +60,7 @@ fun RoomSettingsScreen( ) TextField( - value = playlistLink, + value = roomSettings.playlistLink, onValueChange = { viewModel.setPlaylistLink(it) }, modifier = Modifier.fillMaxWidth().height(56.dp).padding(bottom = 16.dp), label = { Text(stringResource(R.string.enter_playlist_link)) }, @@ -97,35 +70,6 @@ fun RoomSettingsScreen( ) } -@Composable -fun SettingSlider( - label: String, - value: Int, - onValueChange: (Int) -> Unit, - valueRange: IntRange, - steps: Int, - modifier: Modifier = Modifier, -) { - Column(modifier = modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(8.dp)) { - Text(text = label, style = MaterialTheme.typography.bodyMedium) - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Slider( - value = value.toFloat(), - onValueChange = { onValueChange(it.toInt()) }, - valueRange = valueRange.first.toFloat()..valueRange.last.toFloat(), - steps = steps - 1, - modifier = Modifier.weight(1f), - ) - Spacer(modifier = Modifier.width(16.dp)) - Text(text = value.toString(), style = MaterialTheme.typography.bodyMedium) - } - } -} - @Composable fun BottomNavigationBar(navController: NavController, modifier: Modifier = Modifier) { NavigationBar( @@ -156,5 +100,5 @@ fun BottomNavigationBar(navController: NavController, modifier: Modifier = Modif @Composable fun PreviewRoomSettingsScreen() { val navController = rememberNavController() - RoomSettingsScreen(navController = navController) + EditRoomSettingsScreen(navController = navController) } diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/newRoomSettings/NewRoomSettingsScreen.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/screens/NewRoomSettingsScreen.kt similarity index 58% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/newRoomSettings/NewRoomSettingsScreen.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/screens/NewRoomSettingsScreen.kt index 58174e7..7c68537 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/newRoomSettings/NewRoomSettingsScreen.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/screens/NewRoomSettingsScreen.kt @@ -1,14 +1,11 @@ -package com.github.feelbeatapp.androidclient.ui.newRoomSettings +package com.github.feelbeatapp.androidclient.ui.roomsettings.screens import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft import androidx.compose.material3.Button @@ -17,14 +14,12 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold -import androidx.compose.material3.Slider import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview @@ -32,6 +27,8 @@ import androidx.compose.ui.unit.dp import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.github.feelbeatapp.androidclient.R +import com.github.feelbeatapp.androidclient.ui.roomsettings.components.SettingSliders +import com.github.feelbeatapp.androidclient.ui.roomsettings.viewmodels.NewRoomSettingsViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -40,7 +37,7 @@ fun NewRoomSettingsScreen( navController: NavController, modifier: Modifier = Modifier, ) { - val playlistLink by viewModel.playlistLink.collectAsState() + val roomSettings by viewModel.roomSettings.collectAsState() Scaffold( topBar = { @@ -70,7 +67,7 @@ fun NewRoomSettingsScreen( ) TextField( - value = playlistLink, + value = roomSettings.playlistLink, onValueChange = { viewModel.setPlaylistLink(it) }, modifier = Modifier.fillMaxWidth().height(56.dp).padding(bottom = 16.dp), label = { Text(stringResource(R.string.enter_playlist_link)) }, @@ -87,66 +84,6 @@ fun NewRoomSettingsScreen( ) } -@Composable -fun SettingSliders(viewModel: NewRoomSettingsViewModel) { - val maxPlayers by viewModel.maxPlayers.collectAsState() - val snippetDuration by viewModel.snippetDuration.collectAsState() - val pointsToWin by viewModel.pointsToWin.collectAsState() - - SettingSlider( - label = stringResource(R.string.number_of_players), - value = maxPlayers, - onValueChange = { viewModel.setMaxPlayers(it.toInt()) }, - valueRange = 1..5, - steps = 4, - ) - - SettingSlider( - label = stringResource(R.string.snippet_duration), - value = snippetDuration, - onValueChange = { viewModel.setSnippetDuration(it.toInt()) }, - valueRange = 5..30, - steps = 5, - ) - - SettingSlider( - label = stringResource(R.string.points_to_win), - value = pointsToWin, - onValueChange = { viewModel.setPointsToWin(it.toInt()) }, - valueRange = 3..10, - steps = 6, - ) -} - -@Composable -fun SettingSlider( - label: String, - value: Int, - onValueChange: (Int) -> Unit, - valueRange: IntRange, - steps: Int, - modifier: Modifier = Modifier, -) { - Column(modifier = modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(8.dp)) { - Text(text = label, style = MaterialTheme.typography.bodyMedium) - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Slider( - value = value.toFloat(), - onValueChange = { onValueChange(it.toInt()) }, - valueRange = valueRange.first.toFloat()..valueRange.last.toFloat(), - steps = steps - 1, - modifier = Modifier.weight(1f), - ) - Spacer(modifier = Modifier.width(16.dp)) - Text(text = value.toString(), style = MaterialTheme.typography.bodyMedium) - } - } -} - @Preview(showBackground = true, widthDp = 360, heightDp = 640) @Composable fun PreviewSettingsScreen() { diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/EditRoomSettingsViewModel.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/EditRoomSettingsViewModel.kt new file mode 100644 index 0000000..828b1c3 --- /dev/null +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/EditRoomSettingsViewModel.kt @@ -0,0 +1,3 @@ +package com.github.feelbeatapp.androidclient.ui.roomsettings.viewmodels + +class EditRoomSettingsViewModel : RoomSettingsViewModel() diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/NewRoomSettingsViewModel.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/NewRoomSettingsViewModel.kt new file mode 100644 index 0000000..2fa012e --- /dev/null +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/NewRoomSettingsViewModel.kt @@ -0,0 +1,3 @@ +package com.github.feelbeatapp.androidclient.ui.roomsettings.viewmodels + +class NewRoomSettingsViewModel : RoomSettingsViewModel() diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/RoomSettingsViewModel.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/RoomSettingsViewModel.kt new file mode 100644 index 0000000..b82e3dc --- /dev/null +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/roomsettings/viewmodels/RoomSettingsViewModel.kt @@ -0,0 +1,31 @@ +package com.github.feelbeatapp.androidclient.ui.roomsettings.viewmodels + +import androidx.lifecycle.ViewModel +import com.github.feelbeatapp.androidclient.model.RoomSettings +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update + +open class RoomSettingsViewModel : ViewModel() { + private val _roomSettings = + MutableStateFlow( + RoomSettings(maxPlayers = 0, snippetDuration = 0, pointsToWin = 0, playlistLink = "") + ) + val roomSettings = _roomSettings.asStateFlow() + + fun setMaxPlayers(value: Int) { + _roomSettings.update { it.copy(maxPlayers = value) } + } + + fun setSnippetDuration(value: Int) { + _roomSettings.update { it.copy(snippetDuration = value) } + } + + fun setPointsToWin(value: Int) { + _roomSettings.update { it.copy(pointsToWin = value) } + } + + fun setPlaylistLink(value: String) { + _roomSettings.update { it.copy(playlistLink = value) } + } +} diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/startGame/StartGameScreen.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/startgame/StartGameScreen.kt similarity index 96% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/startGame/StartGameScreen.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/startgame/StartGameScreen.kt index 90430fa..8a5821d 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/startGame/StartGameScreen.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/startgame/StartGameScreen.kt @@ -1,4 +1,4 @@ -package com.github.feelbeatapp.androidclient.ui.startGame +package com.github.feelbeatapp.androidclient.ui.startgame import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -31,7 +31,7 @@ import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.github.feelbeatapp.androidclient.R import com.github.feelbeatapp.androidclient.ui.FeelBeatRoute -import com.github.feelbeatapp.androidclient.ui.state.Player +import com.github.feelbeatapp.androidclient.model.Player @Composable fun StartGameScreen( diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/startGame/StartGameViewModel.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/startgame/StartGameViewModel.kt similarity index 88% rename from app/src/main/java/com/github/feelbeatapp/androidclient/ui/startGame/StartGameViewModel.kt rename to app/src/main/java/com/github/feelbeatapp/androidclient/ui/startgame/StartGameViewModel.kt index 6d1768e..e2cef20 100644 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/startGame/StartGameViewModel.kt +++ b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/startgame/StartGameViewModel.kt @@ -1,9 +1,9 @@ -package com.github.feelbeatapp.androidclient.ui.startGame +package com.github.feelbeatapp.androidclient.ui.startgame import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.github.feelbeatapp.androidclient.R -import com.github.feelbeatapp.androidclient.ui.state.Player +import com.github.feelbeatapp.androidclient.model.Player import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Player.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Player.kt deleted file mode 100644 index bdadede..0000000 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Player.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.github.feelbeatapp.androidclient.ui.state - -data class Player(val name: String, val image: Int) diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/PlayerWithResult.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/PlayerWithResult.kt deleted file mode 100644 index 8ba6b7a..0000000 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/PlayerWithResult.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.github.feelbeatapp.androidclient.ui.state - -import com.github.feelbeatapp.androidclient.ui.guessSong.ResultStatus - -data class PlayerWithResult(val player: Player, val resultStatus: ResultStatus, val points: Int) diff --git a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Song.kt b/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Song.kt deleted file mode 100644 index aede2b5..0000000 --- a/app/src/main/java/com/github/feelbeatapp/androidclient/ui/state/Song.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.github.feelbeatapp.androidclient.ui.state - -data class Song(val id: Int, val title: String)