Skip to content

Commit 6a532f1

Browse files
#31 - state treatment from list
1 parent cde374c commit 6a532f1

File tree

6 files changed

+33
-25
lines changed

6 files changed

+33
-25
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ fun Project.configureAndroid() {
3535

3636
apply(plugin = "kotlin-android")
3737
apply(plugin = "kotlin-kapt")
38+
apply(plugin = "kotlin-parcelize")
3839

3940
configure<com.android.build.gradle.BaseExtension> {
4041
compileSdkVersion(Config.compileSdkVersion)

core-navigation/src/main/java/com/codandotv/streamplayerapp/core_navigation/bottomnavigation/StreamPlayerBottomNavigation.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ import androidx.navigation.NavController
1818
import com.codandotv.streamplayerapp.core_navigation.helper.currentRoute
1919

2020
private val bottomMenuItems = listOf(
21-
BottomNavItem.Home, BottomNavItem.Games, BottomNavItem.News, BottomNavItem.Downloads
21+
BottomNavItem.Home,
22+
BottomNavItem.Games,
23+
BottomNavItem.News,
24+
BottomNavItem.Downloads
2225
)
2326

2427
@Composable

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamViewModel.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,40 @@ import kotlinx.coroutines.launch
1616
class ListStreamViewModel(
1717
private val uiModel: ListStreamUimodel,
1818
private val useCase: ListStreamUseCase,
19-
) : ViewModel(), DefaultLifecycleObserver {
19+
) : ViewModel(), DefaultLifecycleObserver {
2020

21-
private val _uiState = mutableStateOf(
21+
val uiState = mutableStateOf(
2222
ListStreamsUIState(
2323
carousels = emptyList(),
2424
isLoading = false
2525
)
2626
)
27-
val uiState : State<ListStreamsUIState> = _uiState
2827

2928
override fun onCreate(owner: LifecycleOwner) {
3029
super.onCreate(owner)
31-
3230
viewModelScope.launch {
33-
useCase.getMovies()
34-
.onStart { onLoading() }
35-
.catchFailure {
36-
println(">>>> ${it.errorMessage}")
37-
}
38-
.onCompletion { loaded() }
39-
.collect {
40-
_uiState.value = uiModel.convertToCardContent(it)
41-
}
31+
if (uiState.value.carousels.isEmpty()) {
32+
useCase.getMovies()
33+
.onStart { onLoading() }
34+
.catchFailure {
35+
println(">>>> ${it.errorMessage}")
36+
}
37+
.onCompletion { loaded() }
38+
.collect {
39+
this@ListStreamViewModel.uiState.value = uiModel.convertToCardContent(it)
40+
}
41+
}
4242
}
4343
}
4444

4545
private fun loaded() {
46-
_uiState.value = _uiState.value.copy(
46+
this.uiState.value = this.uiState.value.copy(
4747
isLoading = false
4848
)
4949
}
5050

5151
private fun onLoading() {
52-
_uiState.value = _uiState.value.copy(
52+
this.uiState.value = this.uiState.value.copy(
5353
isLoading = true
5454
)
5555
}

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamsScreen.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens
22

33
import android.annotation.SuppressLint
4-
import androidx.activity.OnBackPressedCallback
5-
import androidx.activity.compose.LocalOnBackPressedDispatcherOwner
64
import androidx.compose.foundation.ScrollState
75
import androidx.compose.foundation.background
86
import androidx.compose.foundation.layout.*
@@ -11,9 +9,7 @@ import androidx.compose.material3.CircularProgressIndicator
119
import androidx.compose.material3.ExperimentalMaterial3Api
1210
import androidx.compose.material3.MaterialTheme
1311
import androidx.compose.material3.Scaffold
14-
import androidx.compose.runtime.Composable
15-
import androidx.compose.runtime.DisposableEffect
16-
import androidx.compose.runtime.remember
12+
import androidx.compose.runtime.*
1713
import androidx.compose.runtime.saveable.rememberSaveable
1814
import androidx.compose.ui.Alignment
1915
import androidx.compose.ui.Modifier
@@ -35,7 +31,7 @@ fun ListStreamsScreen(
3531
onNavigateDetailList: (String) -> Unit = {},
3632
disposable: () -> Unit = {}
3733
) {
38-
val uiState = remember {
34+
val uiState = rememberSaveable() {
3935
viewModel.uiState
4036
}
4137
val lifecycleOwner = LocalLifecycleOwner.current
@@ -47,6 +43,7 @@ fun ListStreamsScreen(
4743

4844
onDispose {
4945
lifecycle.removeObserver(viewModel)
46+
uiState.value = viewModel.uiState.value
5047
disposable.invoke()
5148
}
5249
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens
22

3+
import android.os.Parcelable
34
import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.widgets.StreamsCardContent
5+
import kotlinx.parcelize.Parcelize
46

7+
@Parcelize
58
data class CarouselData(
69
val categoryName: String,
710
val cards: List<StreamsCardContent>
8-
)
11+
) : Parcelable
912

13+
@Parcelize
1014
data class ListStreamsUIState(
1115
val carousels: List<CarouselData>,
1216
val isLoading: Boolean
13-
)
17+
) : Parcelable

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/widgets/StreamsCard.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.codandotv.streamplayerapp.feature_list_streams.list.presentation.widgets
22

3+
import android.os.Parcelable
34
import androidx.compose.foundation.clickable
45
import androidx.compose.foundation.layout.padding
56
import androidx.compose.foundation.layout.size
@@ -12,12 +13,14 @@ import androidx.compose.ui.tooling.preview.Preview
1213
import androidx.compose.ui.unit.dp
1314
import coil.compose.AsyncImage
1415
import com.codandotv.streamplayerapp.core_networking.Url.IMAGE_URL_SIZE_300
16+
import kotlinx.parcelize.Parcelize
1517

18+
@Parcelize
1619
data class StreamsCardContent(
1720
val id: String,
1821
val url: String,
1922
val contentDescription: String,
20-
)
23+
) : Parcelable
2124

2225
@Composable
2326
fun StreamsCard(

0 commit comments

Comments
 (0)