From 7f2184f36c0ebeca2cd2f9dd14515f52e0bbd869 Mon Sep 17 00:00:00 2001 From: Mohamed Hassan <127283755+mohamedd-hassan@users.noreply.github.com> Date: Wed, 20 Aug 2025 00:57:13 +0300 Subject: [PATCH 1/4] fix: add to list dialog scroll --- .../components/AddToListDialog.kt | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/ui/src/main/java/com/amsterdam/ui/screens/movieDetails/components/AddToListDialog.kt b/ui/src/main/java/com/amsterdam/ui/screens/movieDetails/components/AddToListDialog.kt index 616656009..5c588639e 100644 --- a/ui/src/main/java/com/amsterdam/ui/screens/movieDetails/components/AddToListDialog.kt +++ b/ui/src/main/java/com/amsterdam/ui/screens/movieDetails/components/AddToListDialog.kt @@ -1,5 +1,6 @@ package com.amsterdam.ui.screens.movieDetails.components +import android.annotation.SuppressLint import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable @@ -7,15 +8,15 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource @@ -35,6 +36,7 @@ import com.amsterdam.ui.components.EmptyStateText import com.amsterdam.ui.utils.withEnglishDigits import com.amsterdam.viewmodel.movieDetails.WishListUiState +@SuppressLint("ConfigurationScreenWidthHeight") @Composable fun AddToListDialog( userLists: List, @@ -46,10 +48,11 @@ fun AddToListDialog( onCreateNewList: () -> Unit = {}, onDismiss: () -> Unit = {}, ) { + val maxDialogHeight = (LocalConfiguration.current.screenHeightDp * 0.8).dp Dialog( onDismiss = onDismiss, - scrollable = false, - modifier = modifier, + scrollable = true, + modifier = modifier.heightIn(max = maxDialogHeight), ) { Column( verticalArrangement = Arrangement.spacedBy(24.dp), @@ -59,11 +62,11 @@ fun AddToListDialog( onDismiss = onDismiss, ) if (userLists.isNotEmpty()) { - LazyColumn( + Column( verticalArrangement = Arrangement.spacedBy(12.dp), modifier = Modifier.fillMaxWidth() ) { - items(userLists) { userList -> + userLists.forEach { userList -> SelectionListItem( listName = userList.name, itemCount = userList.itemCount, @@ -146,7 +149,8 @@ private fun SelectionListItem( color = AppTheme.color.body, ) - val listItemCount = pluralStringResource(R.plurals.item_count, itemCount, itemCount).withEnglishDigits() + val listItemCount = + pluralStringResource(R.plurals.item_count, itemCount, itemCount).withEnglishDigits() Text( text = listItemCount, style = AppTheme.textStyle.label.small, @@ -205,7 +209,7 @@ private fun ActionButtonsSection( isLoading = false, isNegative = false, colors = ButtonDefaults.buttonColors(containerColor = AppTheme.color.primaryVariant) - ) + ) } } From eb5ea284aa9201e661903e7ab5648b8f19cb0b26 Mon Sep 17 00:00:00 2001 From: Mohamed Hassan <127283755+mohamedd-hassan@users.noreply.github.com> Date: Wed, 20 Aug 2025 00:57:25 +0300 Subject: [PATCH 2/4] fix: item count update when creating list --- .../movieDetails/MovieDetailsViewModel.kt | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt b/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt index 08e7a3ce8..57d6c7804 100644 --- a/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt +++ b/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt @@ -1,5 +1,6 @@ package com.amsterdam.viewmodel.movieDetails +import android.util.Log import androidx.lifecycle.viewModelScope import com.amsterdam.domain.exceptions.AflamiException import com.amsterdam.domain.useCase.authentication.GetsSessionType @@ -84,7 +85,9 @@ class MovieDetailsViewModel @Inject constructor( } private suspend fun loadUserWishListsWithMovieStatus() { + Log.d("details", "loadUserWishListsWithMovieStatus: start of load wish list") val list = getWishListsUseCase().toUiState() + Log.d("details", "loadUserWishListsWithMovieStatus: lists loaded") val userLists = list .map { lists -> lists.copy( @@ -94,7 +97,9 @@ class MovieDetailsViewModel @Inject constructor( ) ) } + Log.d("details", "loadUserWishListsWithMovieStatus: lists mapped") updateState { + Log.d("details", "loadUserWishListsWithMovieStatus: state updated") it.copy( userLists = userLists, ) @@ -225,14 +230,17 @@ class MovieDetailsViewModel @Inject constructor( movieId: Long, listIds: List, ) { + Log.d("details", "onSaveMovieToList: started") updateState { it.copy(isAddMovieToListLoading = true) } tryToExecute( action = { + Log.d("details", "onSaveMovieToList: in action") listIds.forEach { listId -> addMovieToListUseCase(movieId = movieId, listId = listId) } }, onSuccess = { + Log.d("details", "onSaveMovieToList: in onSuccess") sendNewEffect(MovieDetailsEffect.MovieAddedToListSuccessfully) setListToAdded(listIds) }, @@ -254,9 +262,11 @@ class MovieDetailsViewModel @Inject constructor( } private fun setListToAdded(listIds: List) { + Log.d("details", "setListToAdded: started") updateState { state -> state.copy( userLists = state.userLists.map { list -> + Log.d("details", "setListToAdded: updating $list state") if (list.id in listIds) { list.copy(isMovieInList = true, itemCount = list.itemCount + 1) } else { @@ -289,8 +299,7 @@ class MovieDetailsViewModel @Inject constructor( onSuccess = { listId -> sendNewEffect(MovieDetailsEffect.ListCreatedSuccessfully) onSaveMovieToList(state.value.movieId, listOf(listId.toLong())) - loadWishLists() - setListToAdded(listOf(listId.toLong())) + setNewList(listId.toLong(), state.value.listName) }, onError = { sendNewEffect(MovieDetailsEffect.FailedToCreateList) @@ -307,6 +316,23 @@ class MovieDetailsViewModel @Inject constructor( ) } + private fun setNewList(listId: Long, listName: String){ + val newWishList = state.value.userLists.toMutableList() + newWishList.add( + WishListUiState( + id = listId, + name = listName, + itemCount = 0, + isMovieInList = true + ) + ) + updateState { + it.copy( + userLists = newWishList + ) + } + } + override fun onSelectedListChange(selectedLists: List) { updateState { it.copy(selectedLists = selectedLists) } } From af029648f9d731f80771ac758d02b1239fdc1002 Mon Sep 17 00:00:00 2001 From: Mohamed Hassan <127283755+mohamedd-hassan@users.noreply.github.com> Date: Wed, 20 Aug 2025 01:00:06 +0300 Subject: [PATCH 3/4] refactor: remove logs from details viewmodel --- .../viewmodel/movieDetails/MovieDetailsViewModel.kt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt b/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt index 57d6c7804..08664cd3f 100644 --- a/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt +++ b/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt @@ -1,6 +1,5 @@ package com.amsterdam.viewmodel.movieDetails -import android.util.Log import androidx.lifecycle.viewModelScope import com.amsterdam.domain.exceptions.AflamiException import com.amsterdam.domain.useCase.authentication.GetsSessionType @@ -85,9 +84,7 @@ class MovieDetailsViewModel @Inject constructor( } private suspend fun loadUserWishListsWithMovieStatus() { - Log.d("details", "loadUserWishListsWithMovieStatus: start of load wish list") val list = getWishListsUseCase().toUiState() - Log.d("details", "loadUserWishListsWithMovieStatus: lists loaded") val userLists = list .map { lists -> lists.copy( @@ -97,9 +94,7 @@ class MovieDetailsViewModel @Inject constructor( ) ) } - Log.d("details", "loadUserWishListsWithMovieStatus: lists mapped") updateState { - Log.d("details", "loadUserWishListsWithMovieStatus: state updated") it.copy( userLists = userLists, ) @@ -230,17 +225,14 @@ class MovieDetailsViewModel @Inject constructor( movieId: Long, listIds: List, ) { - Log.d("details", "onSaveMovieToList: started") updateState { it.copy(isAddMovieToListLoading = true) } tryToExecute( action = { - Log.d("details", "onSaveMovieToList: in action") listIds.forEach { listId -> addMovieToListUseCase(movieId = movieId, listId = listId) } }, onSuccess = { - Log.d("details", "onSaveMovieToList: in onSuccess") sendNewEffect(MovieDetailsEffect.MovieAddedToListSuccessfully) setListToAdded(listIds) }, @@ -262,11 +254,9 @@ class MovieDetailsViewModel @Inject constructor( } private fun setListToAdded(listIds: List) { - Log.d("details", "setListToAdded: started") updateState { state -> state.copy( userLists = state.userLists.map { list -> - Log.d("details", "setListToAdded: updating $list state") if (list.id in listIds) { list.copy(isMovieInList = true, itemCount = list.itemCount + 1) } else { From d11b3531bd3bdcb5ef83a34c1a9f9339eb14100d Mon Sep 17 00:00:00 2001 From: Mohamed Hassan <127283755+mohamedd-hassan@users.noreply.github.com> Date: Wed, 20 Aug 2025 01:02:10 +0300 Subject: [PATCH 4/4] refactor: change function call order --- .../amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt b/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt index 08664cd3f..9b2ec0309 100644 --- a/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt +++ b/viewModel/src/main/java/com/amsterdam/viewmodel/movieDetails/MovieDetailsViewModel.kt @@ -288,8 +288,8 @@ class MovieDetailsViewModel @Inject constructor( }, onSuccess = { listId -> sendNewEffect(MovieDetailsEffect.ListCreatedSuccessfully) - onSaveMovieToList(state.value.movieId, listOf(listId.toLong())) setNewList(listId.toLong(), state.value.listName) + onSaveMovieToList(state.value.movieId, listOf(listId.toLong())) }, onError = { sendNewEffect(MovieDetailsEffect.FailedToCreateList)