Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Navigation Safe Args Migration #107

Merged
merged 2 commits into from
Dec 23, 2023
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
4 changes: 1 addition & 3 deletions core/ui/src/main/java/com/jslee/core/ui/Const.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,4 @@ package com.jslee.core.ui
* @created 2023/11/06
*/

const val UNKNOWN_FIELD = "확인불가"

const val MOVIE_ID_KEY = "movieId"
const val UNKNOWN_FIELD = "확인불가"
1 change: 1 addition & 0 deletions presentation/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.kapt)
alias(libs.plugins.hilt.plugin)
id("androidx.navigation.safeargs.kotlin")
id("kotlin-parcelize")
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.jslee.presentation.feature.bookmark

import androidx.core.os.bundleOf
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.jslee.core.ui.MOVIE_ID_KEY
import com.jslee.core.ui.base.view.BaseFragment
import com.jslee.presentation.R
import com.jslee.presentation.databinding.FragmentBookmarkBinding
import com.jslee.presentation.feature.bookmark.FilterBottomSheetFragment.Companion.FILTER_BOTTOM_SHEET_TAG
import com.jslee.presentation.feature.bookmark.adapter.BookmarkAdapter
import com.jslee.presentation.feature.detail.MovieDetailFragmentDirections
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import javax.inject.Inject
Expand All @@ -29,8 +28,8 @@ class BookmarkFragment : BaseFragment<FragmentBookmarkBinding>(R.layout.fragment
private val bookmarkAdapter by lazy {
BookmarkAdapter(
onBookmarkClick = { movieId ->
val args = bundleOf(Pair(MOVIE_ID_KEY, movieId))
findNavController().navigate(R.id.action_to_movie_detail, args)
val action = MovieDetailFragmentDirections.actionToMovieDetail(movieId)
findNavController().navigate(action)
},
onNavigateHome = {
findNavController().popBackStack()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.jslee.presentation.feature.boxoffice

import androidx.core.os.bundleOf
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
Expand All @@ -9,7 +8,6 @@ import androidx.navigation.fragment.findNavController
import com.google.android.material.datepicker.CalendarConstraints
import com.google.android.material.datepicker.DateValidatorPointBackward
import com.google.android.material.datepicker.MaterialDatePicker
import com.jslee.core.ui.MOVIE_ID_KEY
import com.jslee.core.ui.base.view.BaseFragment
import com.jslee.core.ui.extension.toDisplayedDateWithDay
import com.jslee.core.ui.extension.toDisplayedPreviousDateWithDay
Expand All @@ -18,6 +16,7 @@ import com.jslee.core.ui.extension.toShortenDate
import com.jslee.presentation.R
import com.jslee.presentation.databinding.FragmentBoxOfficeBinding
import com.jslee.presentation.feature.boxoffice.adapter.BoxOfficeAdapter
import com.jslee.presentation.feature.detail.MovieDetailFragmentDirections
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
Expand All @@ -44,8 +43,8 @@ class BoxOfficeFragment : BaseFragment<FragmentBoxOfficeBinding>(R.layout.fragme
}

private fun navigateToMovieDetail(movieId: Long) {
val argument = bundleOf(Pair(MOVIE_ID_KEY, movieId))
findNavController().navigate(R.id.action_to_movie_detail, argument)
val action = MovieDetailFragmentDirections.actionToMovieDetail(movieId)
findNavController().navigate(action)
}

override fun initViews() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.jslee.presentation.feature.detail
import androidx.core.content.ContextCompat
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.jslee.core.external.ExternalLauncher
import com.jslee.core.ui.base.view.BaseFragment
import com.jslee.core.ui.decoration.DividerViewItemDecoration
Expand Down Expand Up @@ -32,7 +33,7 @@ class MovieDetailFragment :
lateinit var externalLauncher: ExternalLauncher

private val viewModel: MovieDetailViewModel by viewModels()
private val movieId: Long by lazy { arguments?.getLong("movieId") ?: 0L }
private val safeArgs: MovieDetailFragmentArgs by navArgs()
private val movieDetailAdapter by lazy {
MovieDetailAdapter(
onTrailerClick = { videoId ->
Expand All @@ -49,18 +50,10 @@ class MovieDetailFragment :
}

override fun initViews() {
// runCatching {
// requireArguments().getLong("movieId")
// }.onSuccess {
// viewModel.getMovieDetails(it)
// }.getOrElse {
// requireActivity().showToast("Error !!")
// }
viewModel.getMovieDetails(movieId)
viewModel.getMovieDetails(safeArgs.movieId)
initRecyclerView()
initClickListener()
setActionBarCollapsedListener()

}

private fun initRecyclerView() = with(binding.rvMovieDetail) {
Expand All @@ -79,7 +72,7 @@ class MovieDetailFragment :
}

binding.ivHeart.setOnClickListener {
viewModel.toggleBookmark(movieId)
viewModel.toggleBookmark(safeArgs.movieId)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
package com.jslee.presentation.feature.home

import androidx.core.os.bundleOf
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle
import androidx.navigation.fragment.findNavController
import com.jslee.core.designsystem.tooltip.builder.TooltipBuilder
import com.jslee.core.ui.MOVIE_ID_KEY
import com.jslee.core.ui.base.view.BaseFragment
import com.jslee.core.ui.decoration.DividerViewItemDecoration
import com.jslee.core.ui.model.PaddingValues
import com.jslee.presentation.R
import com.jslee.presentation.databinding.FragmentHomeBinding
import com.jslee.presentation.feature.detail.MovieDetailFragmentDirections
import com.jslee.presentation.feature.home.adapter.HomeAdapter
import com.jslee.presentation.feature.home.model.BannerUiModel
import com.jslee.presentation.feature.home.model.NowPlayingUiModel
Expand Down Expand Up @@ -107,16 +106,9 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(R.layout.fragment_home) {
6 -> findNavController().navigate(R.id.action_home_to_upComing)
else -> Unit
}


/**
* Android Studio Giraffe에서 발생중인 이슈
* - navArgs 사용 시 argument name에서 에러 발생
* - https://issuetracker.google.com/issues/293665984
* - 해결 시 navArgs로 전환
*/

private fun navigateToMovieDetail(movieId: Long) {
val bundle = bundleOf(MOVIE_ID_KEY to movieId)
findNavController().navigate(R.id.action_to_movie_detail, bundle)
val action = MovieDetailFragmentDirections.actionToMovieDetail(movieId)
findNavController().navigate(action)
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
package com.jslee.presentation.feature.now

import androidx.core.os.bundleOf
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle
import androidx.navigation.fragment.findNavController
import com.jslee.core.ui.MOVIE_ID_KEY
import com.jslee.core.ui.base.view.BaseFragment
import com.jslee.core.ui.decoration.CommonItemDecoration
import com.jslee.core.ui.decoration.LayoutType
import com.jslee.core.ui.model.PaddingValues
import com.jslee.presentation.R
import com.jslee.presentation.databinding.FragmentNowPlayingBinding
import com.jslee.presentation.feature.detail.MovieDetailFragmentDirections
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
Expand All @@ -28,8 +27,8 @@ class NowPlayingFragment :
private val nowPlayingAdapter: NowPlayingPagingAdapter by lazy {
NowPlayingPagingAdapter(
onPosterClick = {
val arguments = bundleOf(Pair(MOVIE_ID_KEY, it.movieId))
findNavController().navigate(R.id.action_to_movie_detail, arguments)
val action = MovieDetailFragmentDirections.actionToMovieDetail(it.movieId)
findNavController().navigate(action)
}
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
package com.jslee.presentation.feature.search

import androidx.core.os.bundleOf
import androidx.core.widget.addTextChangedListener
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.findNavController
import com.jslee.core.ui.MOVIE_ID_KEY
import com.jslee.core.ui.base.view.BaseFragment
import com.jslee.core.ui.extension.showToast
import com.jslee.presentation.R
import com.jslee.presentation.databinding.FragmentSearchBinding
import com.jslee.presentation.feature.detail.MovieDetailFragmentDirections
import com.jslee.presentation.feature.search.adapter.SearchAdapter
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
Expand All @@ -36,8 +35,8 @@ class SearchFragment : BaseFragment<FragmentSearchBinding>(R.layout.fragment_sea
}

private fun navigateToDetail(movieId: Long) {
val argument = bundleOf(Pair(MOVIE_ID_KEY, movieId))
findNavController().navigate(R.id.action_to_movie_detail, argument)
val action = MovieDetailFragmentDirections.actionToMovieDetail(movieId)
findNavController().navigate(action)
}

override fun initViews() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package com.jslee.presentation.feature.upcoming

import androidx.core.os.bundleOf
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.jslee.core.ui.MOVIE_ID_KEY
import com.jslee.core.ui.base.view.BaseFragment
import com.jslee.core.ui.decoration.CommonItemDecoration
import com.jslee.core.ui.decoration.LayoutType
import com.jslee.core.ui.model.PaddingValues
import com.jslee.presentation.R
import com.jslee.presentation.databinding.FragmentUpComingBinding
import com.jslee.presentation.feature.detail.MovieDetailFragmentDirections
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
Expand All @@ -26,8 +25,8 @@ class UpComingFragment : BaseFragment<FragmentUpComingBinding>(R.layout.fragment
private val upComingPagingAdapter: UpComingPagingAdapter by lazy {
UpComingPagingAdapter(
onPosterClick = {
val argument = bundleOf(Pair(MOVIE_ID_KEY, it.movieId))
findNavController().navigate(R.id.action_to_movie_detail, argument)
val action = MovieDetailFragmentDirections.actionToMovieDetail(it.movieId)
findNavController().navigate(action)
}
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@
android:id="@+id/movieDetailFragment"
android:name="com.jslee.presentation.feature.detail.MovieDetailFragment"
android:label="MovieDetailFragment"
tools:layout="@layout/fragment_movie_detail" />
tools:layout="@layout/fragment_movie_detail">

<argument android:name="movieId"
app:argType="long" />
</fragment>

<action
android:id="@+id/action_to_movie_detail"
Expand Down
Loading