From b24e9028e491b08ff2ca348c9189cba73e9442c5 Mon Sep 17 00:00:00 2001 From: Elouan BOITEUX Date: Tue, 21 Apr 2026 14:20:19 +0200 Subject: [PATCH] feat: Do not display the review pop-up again if the user clicks no --- .../core/inappreview/AppReviewSettingsRepository.kt | 3 +++ .../inappreview/reviewmanagers/InAppReviewManager.kt | 11 +++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/InAppReview/src/main/kotlin/com/infomaniak/core/inappreview/AppReviewSettingsRepository.kt b/InAppReview/src/main/kotlin/com/infomaniak/core/inappreview/AppReviewSettingsRepository.kt index 09dd5a76c..2230a07a5 100644 --- a/InAppReview/src/main/kotlin/com/infomaniak/core/inappreview/AppReviewSettingsRepository.kt +++ b/InAppReview/src/main/kotlin/com/infomaniak/core/inappreview/AppReviewSettingsRepository.kt @@ -57,6 +57,7 @@ class AppReviewSettingsRepository(private val context: Context) { private fun getInitialValue(key: Preferences.Key) = when (key) { APP_REVIEW_THRESHOLD_KEY -> appReviewThreshold ALREADY_GAVE_REVIEW_KEY -> DEFAULT_ALREADY_GAVE_REVIEW + DO_NOT_SHOW_AGAIN_KEY -> DEFAULT_DO_NOT_SHOW_AGAIN else -> throw IllegalArgumentException("Unknown Preferences.Key") } @@ -82,11 +83,13 @@ class AppReviewSettingsRepository(private val context: Context) { val APP_REVIEW_THRESHOLD_KEY = intPreferencesKey("appReviewThresholdKey") val ALREADY_GAVE_REVIEW_KEY = booleanPreferencesKey("alreadyGaveReview") + val DO_NOT_SHOW_AGAIN_KEY = booleanPreferencesKey("doNotShowAgainKey") internal const val DATA_STORE_NAME = "AppReviewSettingsDataStore" private const val DEFAULT_ALREADY_GAVE_REVIEW = false private const val DEFAULT_APP_REVIEW_THRESHOLD = 50 + private const val DEFAULT_DO_NOT_SHOW_AGAIN = false } } diff --git a/InAppReview/src/standard/kotlin/com/infomaniak/core/inappreview/reviewmanagers/InAppReviewManager.kt b/InAppReview/src/standard/kotlin/com/infomaniak/core/inappreview/reviewmanagers/InAppReviewManager.kt index a96aac561..2f86c0d82 100644 --- a/InAppReview/src/standard/kotlin/com/infomaniak/core/inappreview/reviewmanagers/InAppReviewManager.kt +++ b/InAppReview/src/standard/kotlin/com/infomaniak/core/inappreview/reviewmanagers/InAppReviewManager.kt @@ -25,6 +25,7 @@ import com.google.android.play.core.review.ReviewManagerFactory import com.infomaniak.core.inappreview.AppReviewSettingsRepository import com.infomaniak.core.inappreview.AppReviewSettingsRepository.Companion.ALREADY_GAVE_REVIEW_KEY import com.infomaniak.core.inappreview.AppReviewSettingsRepository.Companion.APP_REVIEW_THRESHOLD_KEY +import com.infomaniak.core.inappreview.AppReviewSettingsRepository.Companion.DO_NOT_SHOW_AGAIN_KEY import com.infomaniak.core.inappreview.BaseInAppReviewManager import com.infomaniak.core.webview.ui.WebViewActivity import kotlinx.coroutines.Dispatchers @@ -39,13 +40,14 @@ class InAppReviewManager(private val activity: ComponentActivity) : BaseInAppRev private val appReviewCountdown = appReviewSettingsRepository.flowFor(APP_REVIEW_THRESHOLD_KEY) private val alreadyGaveReview = appReviewSettingsRepository.flowFor(ALREADY_GAVE_REVIEW_KEY) + private val doNotShowAgain = appReviewSettingsRepository.flowFor(DO_NOT_SHOW_AGAIN_KEY) private var onUserWantsToReview: (() -> Unit)? = null private var onUserWantsToGiveFeedback: (() -> Unit)? = null override val shouldDisplayReviewDialog = - combine(alreadyGaveReview, appReviewCountdown) { alreadyGaveReview, countdown -> - !alreadyGaveReview && countdown <= 0 + combine(alreadyGaveReview, appReviewCountdown, doNotShowAgain) { alreadyGaveReview, countdown, doNotShowAgain -> + !alreadyGaveReview && countdown <= 0 && !doNotShowAgain }.distinctUntilChanged() override fun init( @@ -80,6 +82,7 @@ class InAppReviewManager(private val activity: ComponentActivity) : BaseInAppRev onUserWantsToGiveFeedback?.invoke() resetAppReviewSettings() WebViewActivity.startActivity(activity, feedbackUrl) + disableReviewDialog() } override fun onUserWantsToDismiss() { @@ -100,6 +103,10 @@ class InAppReviewManager(private val activity: ComponentActivity) : BaseInAppRev appReviewSettingsRepository.resetReviewSettings() } + private fun disableReviewDialog() = activity.lifecycleScope.launch(Dispatchers.IO) { + set(DO_NOT_SHOW_AGAIN_KEY, true) + } + private fun setAppReviewedStatus() = activity.lifecycleScope.launch(Dispatchers.IO) { set(ALREADY_GAVE_REVIEW_KEY, true) }