Commit d6676291 authored by ekager's avatar ekager Committed by Emily Kager
Browse files

For #6313 - On first load, hides engineView until firstContentfulPaint

parent 124b21d2
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -40,12 +40,6 @@ import org.mozilla.fenix.helpers.click
import org.mozilla.fenix.helpers.ext.waitNotNull

class BrowserRobot {

    fun verifyBrowserScreen() {
        onView(ViewMatchers.withResourceName("browserLayout"))
            .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))
    }

    fun verifyCurrentPrivateSession(context: Context) {
        val session = context.components.core.sessionManager.selectedSession
        assertTrue("Current session is private", session?.private!!)
@@ -79,6 +73,7 @@ class BrowserRobot {
    */
    fun verifyPageContent(expectedText: String) {
        val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
        mDevice.waitNotNull(Until.findObject(By.res("org.mozilla.fenix.debug:id/engineView")), waitingTime)
        mDevice.waitNotNull(Until.findObject(text(expectedText)), waitingTime)
    }

+11 −1
Original line number Diff line number Diff line
@@ -179,7 +179,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
            engineView = WeakReference(engineView),
            swipeRefresh = WeakReference(swipeRefresh),
            viewLifecycleScope = viewLifecycleOwner.lifecycleScope,
            arguments = requireArguments()
            arguments = requireArguments(),
            firstContentfulHappened = ::didFirstContentfulHappen
        ).apply {
            beginAnimateInIfNecessary()
        }
@@ -862,6 +863,15 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
        }
    }

    private fun didFirstContentfulHappen(): Boolean {
        val store = context?.components?.core?.store
        val tabState = store?.state?.tabs?.find {
            it.id == (customTabSessionId
                ?: context?.components?.core?.sessionManager?.selectedSession?.id)
        }
        return tabState?.content?.firstContentfulPaint == true
    }

    /*
     * Dereference these views when the fragment view is destroyed to prevent memory leaks
     */
+8 −18
Original line number Diff line number Diff line
@@ -33,7 +33,8 @@ class BrowserAnimator(
    private val engineView: WeakReference<EngineView>,
    private val swipeRefresh: WeakReference<View>,
    private val viewLifecycleScope: LifecycleCoroutineScope,
    private val arguments: Bundle
    private val arguments: Bundle,
    private val firstContentfulHappened: () -> Boolean
) {

    private val unwrappedEngineView: EngineView?
@@ -52,22 +53,9 @@ class BrowserAnimator(
        }

        doOnEnd {
            if (firstContentfulHappened()) {
                unwrappedEngineView?.asView()?.visibility = View.VISIBLE
            unwrappedSwipeRefresh?.background = null
            arguments.putBoolean(SHOULD_ANIMATE_FLAG, false)
        }

        interpolator = DecelerateInterpolator()
        duration = ANIMATION_DURATION
    }

    private val browserFadeInValueAnimator = ValueAnimator.ofFloat(0f, END_ANIMATOR_VALUE).apply {
        addUpdateListener {
            unwrappedSwipeRefresh?.alpha = it.animatedFraction
            }

        doOnEnd {
            unwrappedEngineView?.asView()?.visibility = View.VISIBLE
            unwrappedSwipeRefresh?.background = null
            arguments.putBoolean(SHOULD_ANIMATE_FLAG, false)
        }
@@ -92,7 +80,9 @@ class BrowserAnimator(
            }
        } else {
            unwrappedSwipeRefresh?.alpha = 1f
            if (firstContentfulHappened()) {
                unwrappedEngineView?.asView()?.visibility = View.VISIBLE
            }
            unwrappedSwipeRefresh?.background = null
        }
    }