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

154 add safe args #159

Merged
merged 54 commits into from
Oct 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
e420aed
154_подключает плагин safeArgs
Eka666Sed Aug 19, 2024
5013f0b
154_подключает плагин parcelize
Eka666Sed Aug 19, 2024
99361c0
154_осуществляет переход от bundle к SafeArgs
Eka666Sed Aug 24, 2024
8dc6400
154_заменяет переход CoincidencesFragment -> RouletteFragment и Coinc…
Eka666Sed Aug 24, 2024
82a59af
154_заменяет другие переходы
Eka666Sed Aug 24, 2024
824e528
154_заменяет оставшие переходы
Eka666Sed Aug 24, 2024
ce54d3c
154_удаляет закоммиченный код и форматирует код
Eka666Sed Aug 24, 2024
5ab42c9
154_комментирует код, чтобы проверить как дальше работает навигация
Eka666Sed Aug 24, 2024
52795e4
154_фиксит баг перехода SelectMovieFragment на MatchedSessionListFra…
Eka666Sed Aug 26, 2024
b9fe737
154_фиксит очистку backstack до MainFragment
Eka666Sed Aug 26, 2024
3f46b98
154_редактирует OnboardingDataProvider и переходы на экраны после онб…
Eka666Sed Aug 26, 2024
8df0bb1
154_редактирует навинацию
Eka666Sed Aug 28, 2024
a521ef6
154_убирает лишний фрагмент на онбордингах
Eka666Sed Aug 28, 2024
5ca5472
154_убирает закоммиченный код
Eka666Sed Aug 28, 2024
1087942
154_заменяет получение объекта onboardingItem напрямую
Eka666Sed Aug 28, 2024
b044503
154_заменяет получение объекта onboardingItem напрямую в OnboardingFr…
Eka666Sed Aug 28, 2024
3a261c4
154_использует @Parcelize и Safe Args для movieDetails
Eka666Sed Aug 28, 2024
9ed22cb
154_редактирует остальные фрагменты, после замены movieDetails на объект
Eka666Sed Aug 28, 2024
7ec5565
154_завершает переход на SafeArgs с использованием объектов, где это …
Eka666Sed Aug 28, 2024
8c7074e
Merge remote-tracking branch 'origin/develop' into 154_add_safeArgs
Eka666Sed Sep 2, 2024
c2a3280
154_решает конфликт develop и RegistrationFragment
Eka666Sed Sep 2, 2024
28f8eb6
154_решает конфликт develop и SplashFragment
Eka666Sed Sep 2, 2024
5da8102
154_убирает null в SessionsHistoryRepositoryImpl
Eka666Sed Sep 2, 2024
b0c063e
154_вводит args.session
Eka666Sed Sep 2, 2024
9d8eee4
154_преобразует data class OnboardingItem в class OnboardingItem
Eka666Sed Sep 2, 2024
e58d2e6
154_убирает рекурсивный вызов
Eka666Sed Sep 2, 2024
487aa82
154_убирает nullable переменную movieDetails, переносит args в облас…
Eka666Sed Sep 2, 2024
2e9bb72
154_убирает nullable переменную OnboardingItem, переносит args в обл…
Eka666Sed Sep 2, 2024
13b3ec3
154_убирает неиспользуемый входной аргумент в ChangeNameBottomSheetFr…
Eka666Sed Sep 2, 2024
8fe29ee
154_убирает неиспользуемый входной аргумент в MatchBottomSheetFragment
Eka666Sed Sep 2, 2024
522d6a7
154_убирает замечания detekt в SelectMovieFragment
Eka666Sed Sep 2, 2024
b3f8ff8
154_убирает код, создающий сессию вручную
Eka666Sed Sep 3, 2024
6a5fdfd
154_изменение навигации для ChangeNameBottomSheetFragment через navGraph
Sep 3, 2024
09f0152
154_переносит навигацию через navGraph, вместо newInstance в MatchBot…
Eka666Sed Sep 4, 2024
da6755b
154_устраняет bug передачи аргументов
Eka666Sed Sep 4, 2024
a22652a
154_устраняет bug отсутствия анимации в MatchBottomSheetFragment
Eka666Sed Sep 5, 2024
3f32284
Merge remote-tracking branch 'origin/develop' into 154_add_safeArgs
Eka666Sed Sep 5, 2024
34513d7
154_вливает develop, решает конфликты
Eka666Sed Sep 5, 2024
734e8f6
154_редактирует class MatchBottomSheetArgs
Eka666Sed Sep 12, 2024
a18983e
154_возвращает action, убирает Deprecated и пустую функцию
Eka666Sed Sep 12, 2024
b87ee3f
154_редактирует метод subscribe, чтобы передавать session через args.…
Eka666Sed Sep 12, 2024
b6e4446
154_возвращает метод с incrementAnimation и переписывает его на SafeArgs
Eka666Sed Sep 12, 2024
72ac93c
Merge remote-tracking branch 'origin/develop' into 154_add_safeArgs
Eka666Sed Sep 12, 2024
fdc53a5
154_передает аргументы между CreateSession и WaitSession через SafeArgs
Eka666Sed Sep 12, 2024
422d0de
154_удаляет излишний вызов метода subscribe()
Eka666Sed Sep 18, 2024
b9238e7
154_делает поле movieDetails не nullable
Eka666Sed Sep 18, 2024
be53923
154_убирает проверку movieDetails на nullable во фрагменте
Eka666Sed Sep 18, 2024
e6e26de
154_возвращает комментарий
Eka666Sed Sep 18, 2024
9f14d9f
154_убирает внешнюю nullable переменную session
Eka666Sed Sep 18, 2024
d8547b0
Merge remote-tracking branch 'origin/develop' into 154_add_safeArgs
Eka666Sed Sep 18, 2024
e8917a0
154_вливает develop
Eka666Sed Sep 18, 2024
2b51dcd
154_удаляет закоммиченный код
Eka666Sed Sep 18, 2024
7e10dfe
154_Move comment
Sep 21, 2024
a2ccef8
Merge branch 'develop' into 154_add_safeArgs
Oct 21, 2024
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
2 changes: 2 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ plugins {
alias(libs.plugins.jetbrainsKotlinAndroid)
alias(libs.plugins.serialization)
alias(libs.plugins.ksp)
alias(libs.plugins.navigationSafeArgs)
alias(libs.plugins.kotlinParcelize)
}

android {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ abstract class BaseBottomSheetFragment<VB : ViewBinding, VM : BaseViewModel>(
when (navCommand) {
is NavigationCommand.ToDirection -> findNavController().navigate(
navCommand.directions,
navCommand.bundle
navCommand.navOptions
)

is NavigationCommand.Back -> findNavController().navigateUp()
Expand Down
1 change: 0 additions & 1 deletion app/src/main/java/com/davay/android/base/BaseFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ abstract class BaseFragment<VB : ViewBinding, VM : BaseViewModel>(
when (navCommand) {
is NavigationCommand.ToDirection -> findNavController().navigate(
navCommand.directions,
navCommand.bundle,
navCommand.navOptions
)

Expand Down
38 changes: 15 additions & 23 deletions app/src/main/java/com/davay/android/base/BaseViewModel.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.davay.android.base

import android.os.Bundle
import android.util.Log
import androidx.annotation.IdRes
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.navigation.NavDirections
import androidx.navigation.NavOptions
import com.davai.util.debounceUnitFun
import com.davay.android.BuildConfig
Expand All @@ -28,26 +27,14 @@ abstract class BaseViewModel : ViewModel() {
coroutineScope = viewModelScope
)

fun navigate(@IdRes navDirections: Int) {
fun navigate(navDirections: NavDirections) {
debounceNavigate(NavigationCommand.ToDirection(navDirections)) { command ->
_navigation.value = Event(command)
}
}

fun navigate(@IdRes navDirections: Int, bundle: Bundle) {
debounceNavigate(NavigationCommand.ToDirection(navDirections, bundle)) { command ->
_navigation.value = Event(command)
}
}

fun navigate(@IdRes navDirections: Int, navOptions: NavOptions) {
debounceNavigate(NavigationCommand.ToDirection(navDirections, null, navOptions)) { command ->
_navigation.value = Event(command)
}
}

fun navigate(@IdRes navDirections: Int, bundle: Bundle, navOptions: NavOptions) {
debounceNavigate(NavigationCommand.ToDirection(navDirections, bundle, navOptions)) { command ->
fun navigate(navDirections: NavDirections, navOptions: NavOptions) {
debounceNavigate(NavigationCommand.ToDirection(navDirections, navOptions)) { command ->
_navigation.value = Event(command)
}
}
Expand All @@ -61,17 +48,22 @@ abstract class BaseViewModel : ViewModel() {
/**
* Метод чистит backstack до MainFragment и делает сооветствующий переход
*/
fun clearBackStackToMain() {

fun clearBackStackToMain(navDirections: NavDirections) {
val navOptions = NavOptions.Builder()
.setPopUpTo(R.id.main_navigation_graph, inclusive = true)
.setPopUpTo(R.id.mainFragment, inclusive = false)
.build()

navigate(R.id.mainFragment, navOptions)
_navigation.value = Event(
NavigationCommand.ToDirection(
navDirections,
navOptions
)
)
}

fun clearBackStackToMainAndNavigate(@IdRes navDirections: Int) {
clearBackStackToMain()
navigate(navDirections)
fun clearBackStackToMainAndNavigate(navDirections: NavDirections) {
clearBackStackToMain(navDirections)
}

protected fun mapErrorToUiState(errorType: ErrorType): ErrorScreenState {
Expand Down
6 changes: 2 additions & 4 deletions app/src/main/java/com/davay/android/base/NavigationCommand.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package com.davay.android.base

import android.os.Bundle
import androidx.annotation.IdRes
import androidx.navigation.NavDirections
import androidx.navigation.NavOptions

sealed class NavigationCommand {
class ToDirection(
@IdRes val directions: Int,
val bundle: Bundle? = null,
val directions: NavDirections,
val navOptions: NavOptions? = null
) : NavigationCommand()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,25 +34,25 @@ class SessionsHistoryRepositoryImpl @Inject constructor(
Result.Error(ErrorType.UNKNOWN_ERROR)
}

override suspend fun getSessionWithMovies(sessionId: String): SessionWithMovies? =
override suspend fun getSessionWithMovies(session: Session): SessionWithMovies? =
@Suppress("TooGenericExceptionCaught", "PrintStackTrace")
try {
historyDao.getSessionWithMovies(sessionId).toDomain()
historyDao.getSessionWithMovies(session.id).toDomain()
} catch (e: Exception) {
if (BuildConfig.DEBUG) {
e.printStackTrace()
}
null
}

override suspend fun getSessionsHistory(): List<Session>? =
override suspend fun getSessionsHistory(): List<Session> =
@Suppress("TooGenericExceptionCaught", "PrintStackTrace")
try {
historyDao.getSessions().map { it.toDomain() }
} catch (e: Exception) {
if (BuildConfig.DEBUG) {
e.printStackTrace()
}
null
emptyList()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ interface SessionsHistoryRepository {
movies: List<MovieDetails>
): Result<Unit, ErrorType>

suspend fun getSessionsHistory(): List<Session>?
suspend fun getSessionWithMovies(sessionId: String): SessionWithMovies?
suspend fun getSessionsHistory(): List<Session>
suspend fun getSessionWithMovies(session: Session): SessionWithMovies?
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.davay.android.core.domain.models

import kotlinx.serialization.Serializable
import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Serializable
@Parcelize
data class MovieDetails(
val id: Int,
val name: String,
Expand All @@ -19,4 +20,4 @@ data class MovieDetails(
val genres: List<String>,
val directors: List<String>?,
val actors: List<String>?
)
) : Parcelable
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.davay.android.core.domain.models

import android.os.Parcelable
import com.davay.android.extensions.timeStamp
import kotlinx.serialization.Serializable
import kotlinx.parcelize.Parcelize

typealias userName = String

@Serializable
@Parcelize
data class Session(
val id: String,
val users: List<userName>,
Expand All @@ -14,4 +14,4 @@ data class Session(
val date: timeStamp,
val status: SessionStatus,
val imgUrl: String
)
) : Parcelable
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.davay.android.core.domain.models

import android.os.Parcelable
import com.davay.android.extensions.timeStamp
import kotlinx.serialization.Serializable
import kotlinx.parcelize.Parcelize

@Serializable
@Parcelize
data class SessionShort(
val id: String,
val users: List<userName>,
val date: timeStamp,
val imgUrl: String
)
) : Parcelable
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,7 @@ class ChangeNameBottomSheetFragment :
private const val BOTTOM_SHEET_HIDE_PERCENT_60 = 0.6f
private const val BOTTOM_SHEET_HEIGHT = 0.9f

private const val ARG_NAME = "name"
const val REQUEST_KEY = "changeNameRequestKey"
const val BUNDLE_KEY_NAME = "changedName"

fun newInstance(name: String) = ChangeNameBottomSheetFragment().apply {
arguments = Bundle().apply {
putString(ARG_NAME, name)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,8 @@ import com.davay.android.di.ScreenComponent
import com.davay.android.feature.coincidences.bottomsheetdialog.RouletteBottomSheetDialogFragment
import com.davay.android.feature.coincidences.di.DaggerCoincidencesFragmentComponent
import com.davay.android.feature.coincidences.presentation.adapter.MoviesGridAdapter
import com.davay.android.feature.moviecard.presentation.MovieCardFragment
import com.davay.android.feature.roulette.presentation.RouletteFragment.Companion.ROULETTE_INITIATOR
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

class CoincidencesFragment : BaseFragment<FragmentCoincidencesBinding, CoincidencesViewModel>(
FragmentCoincidencesBinding::inflate
Expand All @@ -37,11 +33,9 @@ class CoincidencesFragment : BaseFragment<FragmentCoincidencesBinding, Coinciden
override val viewModel: CoincidencesViewModel by injectViewModel<CoincidencesViewModel>()

private val moviesGridAdapter = MoviesGridAdapter(lifecycleScope) { movieDetails ->
val movie = Json.encodeToString(movieDetails)
val bundle = Bundle().apply {
putString(MovieCardFragment.MOVIE_DETAILS_KEY, movie)
}
viewModel.navigate(R.id.action_coincidencesFragment_to_movieCardFragment, bundle)
val action = CoincidencesFragmentDirections
.actionCoincidencesFragmentToMovieCardFragment(movieDetails)
viewModel.navigate(action)
}

private val bottomSheetFragmentLifecycleCallbacks =
Expand Down Expand Up @@ -128,10 +122,9 @@ class CoincidencesFragment : BaseFragment<FragmentCoincidencesBinding, Coinciden
setEndIconClickListener {
val coincidences = viewModel.getCoincidencesCount()
if (coincidences >= MIN_COINCIDENCES_FOR_NAVIGATION_3) {
val bundle = Bundle().apply {
putBoolean(ROULETTE_INITIATOR, true)
}
viewModel.navigate(R.id.action_coincidencesFragment_to_rouletteFragment, bundle)
val action = CoincidencesFragmentDirections
.actionCoincidencesFragmentToRouletteFragment(true)
viewModel.navigate(action)
} else {
val activity = requireActivity() as MainActivity
activity.updateBanner(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,14 @@
package com.davay.android.feature.createsession.presentation.createsession

import android.os.Bundle
import com.davay.android.R
import com.davay.android.base.BaseViewModel
import com.davay.android.core.domain.models.SessionShort
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import javax.inject.Inject

open class CreateSessionViewModel @Inject constructor() : BaseViewModel() {

protected fun navigateToWaitSession(session: SessionShort) {
val sessionJson = Json.encodeToString(session)
val bundle = Bundle().apply {
putString(SESSION_DATA, sessionJson)
}
navigate(
R.id.action_createSessionFragment_to_waitSessionFragment,
bundle
)
}

companion object {
const val SESSION_DATA = "session_data"
val action = CreateSessionFragmentDirections
.actionCreateSessionFragmentToWaitSessionFragment(session)
navigate(action)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class MainFragment :
override fun subscribe() {
with(binding) {
msbFavorite.setOnClickListener {
viewModel.navigate(R.id.action_mainFragment_to_matchedSessionListFragment)
viewModel.navigate(MainFragmentDirections.actionMainFragmentToMatchedSessionListFragment())
}
msbJoinSession.setOnClickListener {
joinSession()
Expand All @@ -74,8 +74,7 @@ class MainFragment :
ivEditUserName.setOnDebouncedClickListener(
coroutineScope = lifecycleScope
) {
val currentName = tvUserName.text.toString()
changeName(currentName)
changeName()
}
}
}
Expand All @@ -91,16 +90,16 @@ class MainFragment :
}

private fun joinSession() {
viewModel.navigate(R.id.action_mainFragment_to_sessionConnectionFragment)
viewModel.navigate(MainFragmentDirections.actionMainFragmentToSessionConnectionFragment())
}

private fun changeName(oldName: String) {
val bottomSheetFragment = ChangeNameBottomSheetFragment.newInstance(oldName)
bottomSheetFragment.show(parentFragmentManager, "tag")
private fun changeName() {
val action = MainFragmentDirections.actionMainFragmentToChangeNameFragment()
viewModel.navigate(action)
}

private fun createSession() {
viewModel.navigate(R.id.action_mainFragment_to_createSessionFragment)
viewModel.navigate(MainFragmentDirections.actionMainFragmentToCreateSessionFragment())
}

private fun updateUserName(newName: String?) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.davay.android.feature.match.presentation

import android.os.Parcelable
import com.davay.android.core.domain.models.MovieDetails
import kotlinx.parcelize.Parcelize

@Parcelize
class MatchBottomSheetArgs(
val movieDetails: MovieDetails,
val buttonText: String? = null,
val showDismisAnimation: Boolean = true,
val action: (() -> Unit)? = null
) : Parcelable
Loading
Loading