Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,20 @@ package soup.movie.feature.detail.impl

import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Surface
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
import soup.movie.resources.R

@Composable
internal fun DetailContent(
Expand All @@ -32,7 +40,14 @@ internal fun DetailContent(
onItemClick: (ContentItemUiModel) -> Unit,
modifier: Modifier = Modifier,
) {
Surface(modifier = modifier) {
val snackbarHostState = remember { SnackbarHostState() }
val coroutineScope = rememberCoroutineScope()
Scaffold(
modifier = modifier,
snackbarHost = {
SnackbarHost(hostState = snackbarHostState)
},
) { paddingValues ->
when (uiModel) {
is DetailUiModel.None -> {}
is DetailUiModel.Success -> {
Expand All @@ -57,16 +72,30 @@ internal fun DetailContent(
},
items = uiModel.items,
onItemClick = { item -> onItemClick(item) },
modifier = Modifier.padding(paddingValues),
)
}
is DetailUiModel.Failure -> {
DetailError(
onRetryClick = {
viewModel.onRetryClick()
},
modifier = Modifier.fillMaxSize(),
modifier = Modifier.padding(paddingValues).fillMaxSize(),
)
}
}
}

val context = LocalContext.current
val showOpenDateAlarmMessage by viewModel.showOpenDateAlarmMessage.collectAsState()
LaunchedEffect(showOpenDateAlarmMessage) {
if (showOpenDateAlarmMessage) {
coroutineScope.launch {
snackbarHostState.showSnackbar(
message = context.getString(R.string.action_toast_opendate_alarm),
)
viewModel.onOpenDateAlarmMessageShown()
}
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,10 @@ internal fun DetailList(
header: @Composable () -> Unit,
items: List<ContentItemUiModel>,
onItemClick: (ContentItemUiModel) -> Unit,
modifier: Modifier = Modifier,
) {
LazyColumn(
modifier = modifier,
contentPadding = WindowInsets.systemBars.asPaddingValues(),
) {
item {
Expand Down Expand Up @@ -167,7 +169,9 @@ private fun Cgv(
modifier = modifier.padding(start = 12.dp, end = 4.dp, bottom = 8.dp),
) {
Column(
modifier = Modifier.fillMaxSize().padding(top = 4.dp, bottom = 6.dp),
modifier = Modifier
.fillMaxSize()
.padding(top = 4.dp, bottom = 6.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
AssistChip(
Expand Down Expand Up @@ -213,7 +217,9 @@ private fun Lotte(
modifier = modifier.padding(start = 4.dp, end = 4.dp, bottom = 8.dp),
) {
Column(
modifier = Modifier.fillMaxSize().padding(top = 4.dp, bottom = 6.dp),
modifier = Modifier
.fillMaxSize()
.padding(top = 4.dp, bottom = 6.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
AssistChip(
Expand Down Expand Up @@ -259,7 +265,9 @@ private fun Megabox(
modifier = modifier.padding(start = 4.dp, end = 12.dp, bottom = 8.dp),
) {
Column(
modifier = Modifier.fillMaxSize().padding(top = 4.dp, bottom = 6.dp),
modifier = Modifier
.fillMaxSize()
.padding(top = 4.dp, bottom = 6.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
AssistChip(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
Expand All @@ -37,7 +36,6 @@ import androidx.compose.ui.text.TextLinkStyles
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.withLink
import soup.movie.core.designsystem.showToast
import soup.movie.core.designsystem.theme.MovieTheme
import soup.movie.core.external.YouTube
import soup.movie.core.external.executeWeb
Expand All @@ -51,13 +49,6 @@ fun DetailScreen(
) {
val context = LocalContext.current
val uiModel: DetailUiModel by viewModel.uiModel.collectAsState()
LaunchedEffect(Unit) {
viewModel.uiEvent.collect { event ->
when (event) {
is ToastAction -> context.showToast(event.resId)
}
}
}

var showPrivacyDialog by remember { mutableStateOf(false) }
DetailContent(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,9 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import soup.movie.common.DefaultDispatcher
Expand All @@ -35,7 +33,6 @@ import soup.movie.domain.movie.yesterday
import soup.movie.log.Logger
import soup.movie.model.MovieDetailModel
import soup.movie.model.OpenDateAlarmModel
import soup.movie.resources.R
import javax.inject.Inject

@HiltViewModel
Expand All @@ -53,8 +50,8 @@ class DetailViewModel @Inject constructor(
private val _isFavorite = MutableStateFlow(false)
val isFavorite: StateFlow<Boolean> = _isFavorite

private val _uiEvent = MutableSharedFlow<UiEvent>()
val uiEvent: SharedFlow<UiEvent> = _uiEvent.asSharedFlow()
private val _showOpenDateAlarmMessage = MutableStateFlow(false)
val showOpenDateAlarmMessage: StateFlow<Boolean> = _showOpenDateAlarmMessage

init {
viewModelScope.launch {
Expand Down Expand Up @@ -179,7 +176,8 @@ class DetailViewModel @Inject constructor(
}

fun onFavoriteButtonClick(isFavorite: Boolean) {
val movie = (_uiModel.value as? DetailUiModel.Success)?.header?.movie ?: return
val uiModel = _uiModel.value as? DetailUiModel.Success ?: return
val movie = uiModel.header.movie
viewModelScope.launch {
if (isFavorite) {
repository.addFavoriteMovie(movie)
Expand All @@ -191,7 +189,7 @@ class DetailViewModel @Inject constructor(
movie.openDate,
),
)
_uiEvent.emit(ToastAction(R.string.action_toast_opendate_alarm))
_showOpenDateAlarmMessage.update { true }
}
} else {
repository.removeFavoriteMovie(movie.id)
Expand All @@ -200,6 +198,10 @@ class DetailViewModel @Inject constructor(
}
}

fun onOpenDateAlarmMessageShown() {
_showOpenDateAlarmMessage.update { false }
}

fun onRetryClick() {
viewModelScope.launch {
loadDetail(movieId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,16 @@ import androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi
import androidx.compose.animation.graphics.res.animatedVectorResource
import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter
import androidx.compose.animation.graphics.vector.AnimatedImageVector
import androidx.compose.foundation.layout.Box
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.hilt.navigation.compose.hiltViewModel
import soup.movie.core.designsystem.icon.MovieIcons
import soup.movie.core.designsystem.showToast
import soup.movie.feature.home.impl.favorite.HomeFavoriteScreen
import soup.movie.model.MovieModel
import soup.movie.resources.R
Expand All @@ -51,26 +48,20 @@ fun HomeNavGraph(
viewModel.onMainTabSelected(mainTab)
},
) {
Box {
when (currentMainTab) {
MainTabUiModel.Home -> {
HomeScreen(
viewModel = viewModel,
onSearchClick = onSearchClick,
onMovieItemClick = onMovieItemClick,
)
}
MainTabUiModel.Favorite -> {
val context = LocalContext.current
HomeFavoriteScreen(
viewModel = hiltViewModel(),
onSettingsClick = onSettingsClick,
onItemClick = onMovieItemClick,
onItemLongClick = {
context.showToast(it.title)
},
)
}
when (currentMainTab) {
MainTabUiModel.Home -> {
HomeScreen(
viewModel = viewModel,
onSearchClick = onSearchClick,
onMovieItemClick = onMovieItemClick,
)
}
MainTabUiModel.Favorite -> {
HomeFavoriteScreen(
viewModel = hiltViewModel(),
onSettingsClick = onSettingsClick,
onItemClick = onMovieItemClick,
)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,11 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import kotlinx.coroutines.launch
import soup.movie.core.designsystem.icon.MovieIcons
import soup.movie.core.designsystem.showToast
import soup.movie.core.designsystem.theme.MovieTheme
import soup.movie.feature.home.impl.filter.HomeFilterScreen
import soup.movie.feature.home.impl.now.HomeNowList
Expand All @@ -64,7 +62,6 @@ fun HomeScreen(
onSearchClick: () -> Unit,
onMovieItemClick: (MovieModel) -> Unit,
) {
val context = LocalContext.current
val coroutineScope = rememberCoroutineScope()
val selectedTab by viewModel.selectedHomeTab.collectAsState()

Expand Down Expand Up @@ -160,7 +157,11 @@ fun HomeScreen(
)
},
) { paddingValues ->
Box(modifier = Modifier.fillMaxSize().padding(paddingValues)) {
Box(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues),
) {
when (selectedTab) {
HomeTabUiModel.Now -> HomeNowList(
viewModel = hiltViewModel(),
Expand All @@ -169,7 +170,9 @@ fun HomeScreen(
onMovieItemClick(it)
},
onItemLongClick = {
context.showToast(it.title)
coroutineScope.launch {
bottomSheetScaffoldState.snackbarHostState.showSnackbar(message = it.title)
}
},
)
HomeTabUiModel.Plan -> HomePlanList(
Expand All @@ -179,7 +182,9 @@ fun HomeScreen(
onMovieItemClick(it)
},
onItemLongClick = {
context.showToast(it.title)
coroutineScope.launch {
bottomSheetScaffoldState.snackbarHostState.showSnackbar(message = it.title)
}
},
)
}
Expand Down
Loading
Loading