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

118_добавил проверку на первый показ подсказки по рулетке #153

Merged
merged 1 commit into from
Aug 26, 2024
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.davay.android.feature.coincidences.data

import com.davay.android.core.domain.lounchcontrol.api.FirstTimeFlagRepository
import com.davay.android.core.domain.lounchcontrol.api.FirstTimeFlagStorage

class CoincidencesRepositoryImpl(
private val firstTimeFlagStorage: FirstTimeFlagStorage
) : FirstTimeFlagRepository {
override fun isFirstTimeLaunch(): Boolean {
return firstTimeFlagStorage.isFirstTimeLaunch()
}

override fun markFirstTimeLaunch() {
firstTimeFlagStorage.markFirstTimeLaunch()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.davay.android.feature.coincidences.data

import android.content.SharedPreferences
import com.davay.android.core.domain.lounchcontrol.api.FirstTimeFlagStorage

class CoincidencesStorageImpl(
private val sharedPreferences: SharedPreferences
) : FirstTimeFlagStorage {
override fun isFirstTimeLaunch(): Boolean {
return sharedPreferences.getBoolean(FIRST_TIME_FLAG_FOR_COINCIDENCES_KEY, true)
}

override fun markFirstTimeLaunch() {
sharedPreferences.edit().putBoolean(FIRST_TIME_FLAG_FOR_COINCIDENCES_KEY, false).apply()
}

private companion object {
const val FIRST_TIME_FLAG_FOR_COINCIDENCES_KEY = "isFirstTimeCoincidencesHint"
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,50 @@
package com.davay.android.feature.coincidences.di

import android.content.Context
import android.content.SharedPreferences
import com.davay.android.core.domain.lounchcontrol.api.FirstTimeFlagRepository
import com.davay.android.core.domain.lounchcontrol.api.FirstTimeFlagStorage
import com.davay.android.core.domain.mockdata.api.GetData
import com.davay.android.core.domain.models.ErrorType
import com.davay.android.core.domain.models.MovieDetails
import com.davay.android.feature.coincidences.data.CoincidencesRepositoryImpl
import com.davay.android.feature.coincidences.data.CoincidencesStorageImpl
import com.davay.android.feature.coincidences.data.TestMovieRepository
import com.davay.android.feature.coincidences.domain.CoincidencesInteractor
import com.davay.android.feature.coincidences.domain.CoincidencesInteractorImpl
import dagger.Module
import dagger.Provides
import javax.inject.Named

const val GET_TEST_MOVIE_USE_CASE = "GET_TEST_MOVIE_USE_CASE"

@Module
class CoincidencesDataModule {

@Provides
fun provideCoincidencesStorage(sharedPreferences: SharedPreferences): FirstTimeFlagStorage =
CoincidencesStorageImpl(sharedPreferences)

@Provides
fun provideSharedPreferences(context: Context): SharedPreferences =
context.getSharedPreferences(
FirstTimeFlagStorage.STORAGE_NAME,
Context.MODE_PRIVATE
)

@Provides
fun provideCoincidencesRepository(
firstTimeFlagStorage: FirstTimeFlagStorage
): FirstTimeFlagRepository = CoincidencesRepositoryImpl(firstTimeFlagStorage)

@Provides
fun provideCoincidencesInteractor(
repository: FirstTimeFlagRepository
): CoincidencesInteractor = CoincidencesInteractorImpl(repository)

@Provides
fun testMovieRepository(context: Context): TestMovieRepository =
TestMovieRepository(context)
TestMovieRepository(context = context)

@Provides
@Named(GET_TEST_MOVIE_USE_CASE)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.davay.android.feature.coincidences.domain

interface CoincidencesInteractor {
fun markFirstTimeLaunch()
fun isFirstTimeLaunch(): Boolean
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.davay.android.feature.coincidences.domain

import com.davay.android.core.domain.lounchcontrol.api.FirstTimeFlagRepository

class CoincidencesInteractorImpl(
private val repository: FirstTimeFlagRepository
) : CoincidencesInteractor {
override fun markFirstTimeLaunch() {
repository.markFirstTimeLaunch()
}

override fun isFirstTimeLaunch(): Boolean {
return repository.isFirstTimeLaunch()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -93,15 +93,16 @@ class CoincidencesFragment : BaseFragment<FragmentCoincidencesBinding, Coinciden
* Показывает подсказку, если она еще не показана
*/
private fun showHint() {
if (viewModel.isHintShown()) {
if (viewModel.isFirstTimeLaunch()) {
showBottomSheetDialogFragment()
viewModel.markFirstTimeLaunch()
} else {
val existingFragment = parentFragmentManager.findFragmentByTag(
RouletteBottomSheetDialogFragment::class.java.simpleName
)
if (existingFragment is RouletteBottomSheetDialogFragment) {
rouletteBottomSheetDialogFragment = existingFragment
}
} else {
showBottomSheetDialogFragment()
}

parentFragmentManager.registerFragmentLifecycleCallbacks(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.davay.android.core.domain.mockdata.api.GetData
import com.davay.android.core.domain.models.ErrorType
import com.davay.android.core.domain.models.MovieDetails
import com.davay.android.feature.coincidences.di.GET_TEST_MOVIE_USE_CASE
import com.davay.android.feature.coincidences.domain.CoincidencesInteractor
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
Expand All @@ -15,7 +16,8 @@ import javax.inject.Named

class CoincidencesViewModel @Inject constructor(
@Named(GET_TEST_MOVIE_USE_CASE)
private val getData: GetData<MovieDetails, ErrorType>
private val getData: GetData<MovieDetails, ErrorType>,
private val coincidencesInteractor: CoincidencesInteractor
) : BaseViewModel() {

private val _state: MutableStateFlow<UiState> = MutableStateFlow(UiState.Empty)
Expand All @@ -25,7 +27,7 @@ class CoincidencesViewModel @Inject constructor(
getCoincidences()
}

fun getCoincidences() {
private fun getCoincidences() {
viewModelScope.launch(Dispatchers.IO) {
_state.emit(UiState.Loading)

Expand All @@ -42,7 +44,11 @@ class CoincidencesViewModel @Inject constructor(
}

@Suppress("Detekt.FunctionOnlyReturningConstant")
fun isHintShown(): Boolean = false // Запровайдить префы
fun isFirstTimeLaunch(): Boolean = coincidencesInteractor.isFirstTimeLaunch()

fun markFirstTimeLaunch() {
coincidencesInteractor.markFirstTimeLaunch()
}

fun getCoincidencesCount(): Int {
val currentState = _state.value
Expand Down
Loading