From 980594f21817b7231e249a2cadf7f84951301092 Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Thu, 1 Sep 2022 01:35:40 -0400 Subject: [PATCH] [fenix] For https://github.com/mozilla-mobile/fenix/issues/26756 - Don't show Jump Back In CFR if the synced tab CFR is shown --- .../home/sessioncontrol/SessionControlView.kt | 7 +++---- .../fenix/onboarding/JumpBackInCFRDialog.kt | 19 ++++++++++++++++++- .../fenix/onboarding/SyncCFRPresenter.kt | 18 +++++++++++------- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt index 067a53f1c..009387610 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt @@ -218,14 +218,13 @@ class SessionControlView( super.onLayoutCompleted(state) if (!context.settings().showHomeOnboardingDialog) { - JumpBackInCFRDialog(view).showIfNeeded() - - if (context.settings().showSyncCFR) { + if (context.settings().shouldShowJumpBackInCFR) { + JumpBackInCFRDialog(view).showIfNeeded() + } else if (context.settings().showSyncCFR) { SyncCFRPresenter( context = context, recyclerView = view, ).showSyncCFR() - context.settings().showSyncCFR = false } } diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/JumpBackInCFRDialog.kt b/app/src/main/java/org/mozilla/fenix/onboarding/JumpBackInCFRDialog.kt index c03a2fb0a..f362c81a7 100644 --- a/app/src/main/java/org/mozilla/fenix/onboarding/JumpBackInCFRDialog.kt +++ b/app/src/main/java/org/mozilla/fenix/onboarding/JumpBackInCFRDialog.kt @@ -14,6 +14,7 @@ import android.view.View import androidx.recyclerview.widget.RecyclerView import org.mozilla.fenix.databinding.OnboardingJumpBackInCfrBinding import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.home.recentsyncedtabs.view.RecentSyncedTabViewHolder import org.mozilla.fenix.home.recenttabs.view.RecentTabsHeaderViewHolder /** @@ -48,14 +49,30 @@ class JumpBackInCFRDialog(val recyclerView: RecyclerView) { return null } + private fun hasSyncTabsView(): Boolean { + val count = recyclerView.adapter?.itemCount ?: return false + + for (index in count downTo 0) { + val viewHolder = recyclerView.findViewHolderForAdapterPosition(index) + if (viewHolder is RecentSyncedTabViewHolder) { + return true + } + } + + return false + } + private fun createJumpCRF(anchor: View): Dialog? { val context: Context = recyclerView.context - if (!context.settings().showSyncCFR) { + + if (context.settings().showSyncCFR && hasSyncTabsView()) { context.settings().shouldShowJumpBackInCFR = false } + if (!context.settings().shouldShowJumpBackInCFR) { return null } + val anchorPosition = IntArray(2) val popupBinding = OnboardingJumpBackInCfrBinding.inflate(LayoutInflater.from(context)) val popup = Dialog(context) diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/SyncCFRPresenter.kt b/app/src/main/java/org/mozilla/fenix/onboarding/SyncCFRPresenter.kt index 0f27a9041..236636da5 100644 --- a/app/src/main/java/org/mozilla/fenix/onboarding/SyncCFRPresenter.kt +++ b/app/src/main/java/org/mozilla/fenix/onboarding/SyncCFRPresenter.kt @@ -13,6 +13,7 @@ import org.mozilla.fenix.GleanMetrics.Onboarding import org.mozilla.fenix.R import org.mozilla.fenix.compose.cfr.CFRPopup import org.mozilla.fenix.compose.cfr.CFRPopupProperties +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.home.recentsyncedtabs.view.RecentSyncedTabViewHolder /** @@ -21,10 +22,10 @@ import org.mozilla.fenix.home.recentsyncedtabs.view.RecentSyncedTabViewHolder private const val CFR_TO_ANCHOR_VERTICAL_PADDING = -16 /** - * Delegate for handling sync onboarding CFR. + * Delegate for handling synced tab onboarding CFR. * - * @param [Context] used for various Android interactions. - * @param [RecyclerView] will serve as anchor for the sync CFR. + * @param context [Context] used for various Android interactions. + * @param recyclerView [RecyclerView] will serve as anchor for the sync CFR. */ class SyncCFRPresenter( private val context: Context, @@ -34,7 +35,7 @@ class SyncCFRPresenter( private var syncCFR: CFRPopup? = null /** - * Check if [view] is available to show sync CFR. + * Find the synced view and if it is available, then show the synced tab CFR. */ fun showSyncCFR() { findSyncTabsView()?.let { @@ -51,12 +52,15 @@ class SyncCFRPresenter( false -> Onboarding.syncCfrImplicitDismissal.record(NoExtras()) } } - ) { - }.apply { + ).apply { syncCFR = this show() - Onboarding.synCfrShown.record(NoExtras()) } + + context.settings().showSyncCFR = false + context.settings().shouldShowJumpBackInCFR = false + + Onboarding.synCfrShown.record(NoExtras()) } }