[fenix] For https://github.com/mozilla-mobile/fenix/issues/1901: Screenshot engineView to remove GV flash

Co-authored-by: ekager <ekager@mozilla.com>
pull/600/head
Sawyer Blatz 5 years ago
parent 0da13d7f00
commit 496d02ab20

@ -15,6 +15,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.annotation.CallSuper import androidx.annotation.CallSuper
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.graphics.drawable.toDrawable
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
@ -475,11 +476,18 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
private fun adjustBackgroundAndNavigate(directions: NavDirections) { private fun adjustBackgroundAndNavigate(directions: NavDirections) {
context?.let { context?.let {
swipeRefresh?.background = ColorDrawable(Color.TRANSPARENT) engineView.captureThumbnail { bitmap ->
engineView?.asView()?.visibility = View.GONE lifecycleScope.launch {
// If the bitmap is null, the best we can do to reduce the flash is set transparent
swipeRefresh.background = bitmap?.toDrawable(it.resources)
?: ColorDrawable(Color.TRANSPARENT)
engineView.asView().visibility = View.GONE
findNavController().nav(R.id.browserFragment, directions) findNavController().nav(R.id.browserFragment, directions)
} }
} }
}
}
@CallSuper @CallSuper
override fun onSessionSelected(session: Session) { override fun onSessionSelected(session: Session) {

@ -11,6 +11,7 @@ import android.graphics.drawable.ColorDrawable
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
import androidx.core.graphics.drawable.toDrawable
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.NavDirections import androidx.navigation.NavDirections
import androidx.navigation.NavOptions import androidx.navigation.NavOptions
@ -184,14 +185,18 @@ class DefaultBrowserToolbarController(
val directions = BrowserFragmentDirections.actionBrowserFragmentToSearchFragment( val directions = BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(
sessionId = null sessionId = null
) )
adjustBackgroundAndNavigate.invoke(directions)
// Do not adjustBackground here or an exception gets thrown as we switch themes
navController.nav(R.id.browserFragment, directions)
browsingModeManager.mode = BrowsingMode.Normal browsingModeManager.mode = BrowsingMode.Normal
} }
ToolbarMenu.Item.NewPrivateTab -> { ToolbarMenu.Item.NewPrivateTab -> {
val directions = BrowserFragmentDirections.actionBrowserFragmentToSearchFragment( val directions = BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(
sessionId = null sessionId = null
) )
adjustBackgroundAndNavigate.invoke(directions)
// Do not adjustBackground here or an exception gets thrown as we switch themes
navController.nav(R.id.browserFragment, directions)
browsingModeManager.mode = BrowsingMode.Private browsingModeManager.mode = BrowsingMode.Private
} }
ToolbarMenu.Item.FindInPage -> { ToolbarMenu.Item.FindInPage -> {
@ -299,7 +304,11 @@ class DefaultBrowserToolbarController(
browserLayout, browserLayout,
"${TAB_ITEM_TRANSITION_NAME}${currentSession?.id}" "${TAB_ITEM_TRANSITION_NAME}${currentSession?.id}"
).build() ).build()
swipeRefresh.background = ColorDrawable(Color.TRANSPARENT) engineView.captureThumbnail { bitmap ->
scope.launch {
// If the bitmap is null, the best we can do to reduce the flash is set transparent
swipeRefresh.background = bitmap?.toDrawable(activity.resources)
?: ColorDrawable(Color.TRANSPARENT)
engineView.asView().visibility = View.GONE engineView.asView().visibility = View.GONE
if (!navController.popBackStack(R.id.homeFragment, false)) { if (!navController.popBackStack(R.id.homeFragment, false)) {
navController.nav( navController.nav(
@ -311,6 +320,8 @@ class DefaultBrowserToolbarController(
) )
} }
} }
}
}
@SuppressWarnings("ComplexMethod") @SuppressWarnings("ComplexMethod")
private fun trackToolbarItemInteraction(item: ToolbarMenu.Item) { private fun trackToolbarItemInteraction(item: ToolbarMenu.Item) {

@ -367,7 +367,7 @@ class DefaultBrowserToolbarControllerTest {
verify { verify {
val directions = BrowserFragmentDirections val directions = BrowserFragmentDirections
.actionBrowserFragmentToSearchFragment(sessionId = null) .actionBrowserFragmentToSearchFragment(sessionId = null)
adjustBackgroundAndNavigate.invoke(directions) navController.nav(R.id.browserFragment, directions)
} }
verify { browsingModeManager.mode = BrowsingMode.Private } verify { browsingModeManager.mode = BrowsingMode.Private }
} }
@ -438,7 +438,7 @@ class DefaultBrowserToolbarControllerTest {
verify { verify {
val directions = BrowserFragmentDirections val directions = BrowserFragmentDirections
.actionBrowserFragmentToSearchFragment(sessionId = null) .actionBrowserFragmentToSearchFragment(sessionId = null)
adjustBackgroundAndNavigate.invoke(directions) navController.nav(R.id.browserFragment, directions)
} }
verify { browsingModeManager.mode = BrowsingMode.Normal } verify { browsingModeManager.mode = BrowsingMode.Normal }
} }

Loading…
Cancel
Save