Commit 4a5f7c6c authored by clairehurst's avatar clairehurst 🌱 Committed by jwilde
Browse files

TB 44615: [android] Remove review prompt

parent d44030eb
Loading
Loading
Loading
Loading
+20 −1
Changes for mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt: 20 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -104,6 +104,12 @@ import org.mozilla.fenix.utils.isLargeScreenSize
import org.mozilla.fenix.wifi.WifiConnectionMonitor
import org.mozilla.gecko.search.SearchWidgetProvider

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

/**
@@ -267,7 +273,7 @@ class Components(

    val playStoreReviewPromptController by lazyMonitored {
        PlayStoreReviewPromptController(
            manager = ReviewManagerFactory.create(context),
            manager = NoopReviewManager(context),
            numberOfAppLaunches = { settings.numberOfAppLaunches },
        )
    }
@@ -513,6 +519,19 @@ class Components(
    }
}

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]. */
val components: Components
    @Composable @ReadOnlyComposable get() = LocalContext.current.components
+4 −55
Changes for mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/PlayStoreReviewPromptController.kt: 4 added lines, 55 removed lines.
Original line number Diff line number Diff line
@@ -38,47 +38,8 @@ class PlayStoreReviewPromptController(
    /** Launch the in-app review flow, unless we've hit the quota. */
    @Suppress("TooGenericExceptionCaught")
    suspend fun tryPromptReview(activity: Activity): ReviewPromptAttemptResult {
        logger.info("tryPromptReview in progress...")
        val reviewInfoTask = withContext(Dispatchers.IO) { manager.requestReviewFlow() }

        val result =
            try {
                val reviewInfo = reviewInfoTask.await()

                logger.info("Review flow launched.")
                // Launch the in-app flow.
                manager.launchReviewFlow(activity, reviewInfo)

                ReviewPromptAttemptResult.from(reviewInfo.toString())
            } catch (e: CancellationException) {
                throw e
            } catch (e: Exception) {
                Error(e)
            }

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

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

            Displayed,
            Unknown -> {}
        }

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

        logger.info("tryPromptReview completed.")

        return result
        logger.info("tryPromptReview has been successfully noop'ed.")
        return ReviewPromptAttemptResult.NotDisplayed
    }

    /** Try to launch the play store review flow. */
@@ -86,20 +47,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 −10
Changes for mobile/android/fenix/app/src/main/java/org/mozilla/fenix/reviewprompt/ReviewPromptMiddleware.kt: 1 added line, 10 removed lines.
Original line number Diff line number Diff line
@@ -95,16 +95,7 @@ class ReviewPromptMiddleware(
            return
        }

        val shouldShowPrompt: Boolean =
            createJexlHelper().use { jexlHelper ->
                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 −7
Changes for mobile/android/fenix/app/src/main/java/org/mozilla/fenix/reviewprompt/ReviewPromptReducer.kt: 1 added line, 7 removed lines.
Original line number Diff line number Diff line
@@ -19,12 +19,6 @@ import org.mozilla.fenix.reviewprompt.ReviewPromptState.NotEligible
/** [AppStore] reducer of [ReviewPromptAction]s. */
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 −9
Changes for mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt: 0 added lines, 9 removed lines.
Original line number Diff line number Diff line
@@ -555,15 +555,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