Commit 55aed8d1 authored by clairehurst's avatar clairehurst 🌱 Committed by Pier Angelo Vendrame
Browse files

TB 44615: Remove review prompt

parent c4db9a00
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -110,6 +110,12 @@ import org.mozilla.fenix.utils.isLargeScreenSize
import org.mozilla.fenix.wifi.WifiConnectionMonitor
import java.util.concurrent.TimeUnit

import android.app.Activity
import com.google.android.gms.tasks.Task
import com.google.android.gms.tasks.Tasks
import com.google.android.play.core.review.ReviewInfo
import com.google.android.play.core.review.ReviewManager

private const val AMO_COLLECTION_MAX_CACHE_AGE = 2 * 24 * 60L // Two days in minutes

/**
@@ -274,7 +280,7 @@ class Components(private val context: Context) {

    val playStoreReviewPromptController by lazyMonitored {
        PlayStoreReviewPromptController(
            manager = ReviewManagerFactory.create(context),
            manager = NoopReviewManager(context),
            numberOfAppLaunches = { settings.numberOfAppLaunches },
        )
    }
@@ -523,6 +529,19 @@ class Components(private val context: Context) {
    val torController by lazyMonitored { TorControllerGV(context) }
}

class NoopReviewManager(val value: Context) : ReviewManager {
    override fun launchReviewFlow(
        p0: Activity,
        p1: ReviewInfo
    ): Task<Void?> {
        return Tasks.forResult(null)
    }

    override fun requestReviewFlow(): Task<ReviewInfo?> {
        return Tasks.forResult(null)
    }
}

/**
 * Returns the [Components] object from within a [Composable].
 */
+4 −56
Original line number Diff line number Diff line
@@ -43,46 +43,8 @@ class PlayStoreReviewPromptController(
        onNotDisplayed: () -> Unit = {},
        onError: () -> Unit = {},
    ) {
        logger.info("tryPromptReview in progress...")
        val reviewInfoTask = withContext(Dispatchers.IO) { manager.requestReviewFlow() }

        reviewInfoTask.addOnCompleteListener(activity) { task ->
            val result = if (task.isSuccessful) {
                logger.info("Review flow launched.")
                // Launch the in-app flow.
                manager.launchReviewFlow(activity, task.result)

                ReviewPromptAttemptResult.from(task.result.toString())
            } else {
                Error
            }

            when (result) {
                NotDisplayed -> {
                    logger.warn("In-app review flow reported as not displayed, even though there was no error.")

                    onNotDisplayed()
                }

                Error -> {
                    val reviewErrorCode =
                        (task.exception as? ReviewException)?.errorCode ?: ERROR_CODE_UNEXPECTED
                    logger.warn("Failed to launch in-app review flow due to: $reviewErrorCode.")

                    onError()
                }

                Displayed, Unknown -> {}
            }

            recordReviewPromptEvent(
                promptAttemptResult = result,
                numberOfAppLaunches = numberOfAppLaunches(),
                now = Date(),
            )
        }

        logger.info("tryPromptReview completed.")
        logger.info("tryPromptReview has been successfully noop'ed.")
        return
    }

    /**
@@ -92,22 +54,8 @@ class PlayStoreReviewPromptController(
        activity: Activity,
        openInNewTab: (url: String) -> Unit,
    ) {
        logger.info("tryLaunchPlayStoreReview in progress...")

        try {
            logger.info("Navigating to Play store listing.")
            activity.startActivity(
                Intent(Intent.ACTION_VIEW, SupportUtils.RATE_APP_URL.toUri()),
            )
        } catch (e: ActivityNotFoundException) {
            // Device without the play store installed.
            // Opening the play store website.
            openInNewTab(SupportUtils.FENIX_PLAY_STORE_URL)

            logger.warn("Failed to launch play store review flow due to: $e.")
        }

        logger.info("tryLaunchPlayStoreReview completed.")
        logger.info("tryLaunchPlayStoreReview has been successfully noop'ed.")
        return
    }

    companion object {
+1 −17
Original line number Diff line number Diff line
@@ -112,23 +112,7 @@ class ReviewPromptMiddleware(
            return
        }

        val shouldShowPrompt: Boolean = createJexlHelper().use { jexlHelper ->
            // Keep the legacy criteria around, but use the nimbus data and jexl to trigger.
            // Leaving the original if-else logic and early return for readability.
            if (!shouldUseNewTriggerCriteria()) {
                val legacyCriteriaSatisfied = buildTriggerLegacyCriteria(jexlHelper).all { it }
                return@use legacyCriteriaSatisfied
            }

            // Otherwise, we use the new criteria.
            val allMainCriteriaSatisfied = buildTriggerMainCriteria(jexlHelper).all { it }
            if (!allMainCriteriaSatisfied) {
                return@use false
            }

            val atLeastOneOfSubCriteriaSatisfied = buildTriggerSubCriteria(jexlHelper).any { it }
            return@use atLeastOneOfSubCriteriaSatisfied
        }
        val shouldShowPrompt: Boolean = false

        if (shouldShowPrompt) {
            if (shouldShowCustomPrompt()) {
+1 −6
Original line number Diff line number Diff line
@@ -21,11 +21,6 @@ import org.mozilla.fenix.reviewprompt.ReviewPromptState.NotEligible
 */
internal object ReviewPromptReducer {
    fun reduce(state: AppState, action: ReviewPromptAction): AppState {
        return when (action) {
            ShowPlayStorePrompt -> state.copy(reviewPrompt = Eligible(Type.PlayStore))
            ShowCustomReviewPrompt -> state.copy(reviewPrompt = Eligible(Type.Custom))
            DoNotShowReviewPrompt, ReviewPromptShown -> state.copy(reviewPrompt = NotEligible)
            CheckIfEligibleForReviewPrompt -> state
        }
        return state.copy(reviewPrompt = NotEligible)
    }
}
+0 −6
Original line number Diff line number Diff line
@@ -566,12 +566,6 @@ class SettingsFragment : PreferenceFragmentCompat(), SystemInsetsPaddedFragment,
                SettingsFragmentDirections.actionSettingsFragmentToSyncDebugFragment()
            }

            // About preferences
            resources.getString(R.string.pref_key_rate) -> {
                components.playStoreReviewPromptController.tryLaunchPlayStoreReview(requireActivity(), ::openInNewTab)
                null
            }

            resources.getString(R.string.pref_key_about) -> {
                SettingsFragmentDirections.actionSettingsFragmentToAboutFragment()
            }
Loading