For #2681 - Adds ability to bypass cache when reloading
parent
57ac6fc36d
commit
46f010f247
|
@ -17,6 +17,7 @@ import kotlinx.coroutines.launch
|
|||
import mozilla.appservices.places.BookmarkRoot
|
||||
import mozilla.components.browser.session.Session
|
||||
import mozilla.components.browser.session.SessionManager
|
||||
import mozilla.components.concept.engine.EngineSession.LoadUrlFlags
|
||||
import mozilla.components.concept.engine.EngineView
|
||||
import mozilla.components.concept.engine.prompt.ShareData
|
||||
import mozilla.components.feature.session.SessionFeature
|
||||
|
@ -177,7 +178,15 @@ class DefaultBrowserToolbarController(
|
|||
sessionUseCases.goForward.invoke(currentSession)
|
||||
}
|
||||
}
|
||||
ToolbarMenu.Item.Reload -> sessionUseCases.reload.invoke(currentSession)
|
||||
is ToolbarMenu.Item.Reload -> {
|
||||
val flags = if (item.bypassCache) {
|
||||
LoadUrlFlags.select(LoadUrlFlags.BYPASS_CACHE)
|
||||
} else {
|
||||
LoadUrlFlags.none()
|
||||
}
|
||||
|
||||
sessionUseCases.reload.invoke(currentSession, flags = flags)
|
||||
}
|
||||
ToolbarMenu.Item.Stop -> sessionUseCases.stopLoading.invoke(currentSession)
|
||||
ToolbarMenu.Item.Settings -> browserAnimator.captureEngineViewAndDrawStatically {
|
||||
val directions = BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment()
|
||||
|
@ -340,7 +349,7 @@ class DefaultBrowserToolbarController(
|
|||
val eventItem = when (item) {
|
||||
ToolbarMenu.Item.Back -> Event.BrowserMenuItemTapped.Item.BACK
|
||||
is ToolbarMenu.Item.Forward -> Event.BrowserMenuItemTapped.Item.FORWARD
|
||||
ToolbarMenu.Item.Reload -> Event.BrowserMenuItemTapped.Item.RELOAD
|
||||
is ToolbarMenu.Item.Reload -> Event.BrowserMenuItemTapped.Item.RELOAD
|
||||
ToolbarMenu.Item.Stop -> Event.BrowserMenuItemTapped.Item.STOP
|
||||
ToolbarMenu.Item.Settings -> Event.BrowserMenuItemTapped.Item.SETTINGS
|
||||
is ToolbarMenu.Item.RequestDesktop ->
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
package org.mozilla.fenix.components.toolbar
|
||||
|
||||
import android.view.HapticFeedbackConstants
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
@ -156,6 +157,7 @@ class BrowserToolbarView(
|
|||
customTabSession?.id,
|
||||
shouldReverseItems = toolbarPosition == ToolbarPosition.TOP,
|
||||
onItemTapped = {
|
||||
it.performHapticIfNeeded(view)
|
||||
interactor.onBrowserToolbarMenuItemTapped(it)
|
||||
}
|
||||
)
|
||||
|
@ -164,7 +166,10 @@ class BrowserToolbarView(
|
|||
context = this,
|
||||
hasAccountProblem = components.backgroundServices.accountManager.accountNeedsReauth(),
|
||||
shouldReverseItems = toolbarPosition == ToolbarPosition.TOP,
|
||||
onItemTapped = { interactor.onBrowserToolbarMenuItemTapped(it) },
|
||||
onItemTapped = {
|
||||
it.performHapticIfNeeded(view)
|
||||
interactor.onBrowserToolbarMenuItemTapped(it)
|
||||
},
|
||||
lifecycleOwner = lifecycleOwner,
|
||||
sessionManager = sessionManager,
|
||||
store = components.core.store,
|
||||
|
@ -244,4 +249,12 @@ class BrowserToolbarView(
|
|||
companion object {
|
||||
private const val TOOLBAR_ELEVATION = 16
|
||||
}
|
||||
|
||||
private fun ToolbarMenu.Item.performHapticIfNeeded(view: View) {
|
||||
(this as? ToolbarMenu.Item.Reload)?.also { reload ->
|
||||
if (reload.bypassCache) {
|
||||
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -98,12 +98,13 @@ class DefaultToolbarMenu(
|
|||
secondaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_stop,
|
||||
secondaryContentDescription = context.getString(R.string.browser_menu_stop),
|
||||
secondaryImageTintResource = primaryTextColor(),
|
||||
disableInSecondaryState = false
|
||||
disableInSecondaryState = false,
|
||||
longClickListener = { onItemTapped.invoke(ToolbarMenu.Item.Reload(bypassCache = true)) }
|
||||
) {
|
||||
if (session?.loading == true) {
|
||||
onItemTapped.invoke(ToolbarMenu.Item.Stop)
|
||||
} else {
|
||||
onItemTapped.invoke(ToolbarMenu.Item.Reload)
|
||||
onItemTapped.invoke(ToolbarMenu.Item.Reload(bypassCache = false))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ interface ToolbarMenu {
|
|||
object Share : Item()
|
||||
object Back : Item()
|
||||
data class Forward(val viewHistory: Boolean) : Item()
|
||||
object Reload : Item()
|
||||
data class Reload(val bypassCache: Boolean) : Item()
|
||||
object Stop : Item()
|
||||
object OpenInFenix : Item()
|
||||
object SaveToCollection : Item()
|
||||
|
|
|
@ -91,12 +91,13 @@ class CustomTabToolbarMenu(
|
|||
secondaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_stop,
|
||||
secondaryContentDescription = context.getString(R.string.browser_menu_stop),
|
||||
secondaryImageTintResource = primaryTextColor(),
|
||||
disableInSecondaryState = false
|
||||
disableInSecondaryState = false,
|
||||
longClickListener = { onItemTapped.invoke(ToolbarMenu.Item.Reload(bypassCache = true)) }
|
||||
) {
|
||||
if (session?.loading == true) {
|
||||
onItemTapped.invoke(ToolbarMenu.Item.Stop)
|
||||
} else {
|
||||
onItemTapped.invoke(ToolbarMenu.Item.Reload)
|
||||
onItemTapped.invoke(ToolbarMenu.Item.Reload(bypassCache = false))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ import mozilla.components.browser.state.state.BrowserState
|
|||
import mozilla.components.browser.state.state.ReaderState
|
||||
import mozilla.components.browser.state.state.createTab
|
||||
import mozilla.components.browser.state.store.BrowserStore
|
||||
import mozilla.components.concept.engine.EngineSession
|
||||
import mozilla.components.concept.engine.EngineView
|
||||
import mozilla.components.concept.engine.prompt.ShareData
|
||||
import mozilla.components.feature.search.SearchUseCases
|
||||
|
@ -235,7 +236,7 @@ class DefaultBrowserToolbarControllerTest {
|
|||
|
||||
@Test
|
||||
fun handleToolbarReloadPress() = runBlockingTest {
|
||||
val item = ToolbarMenu.Item.Reload
|
||||
val item = ToolbarMenu.Item.Reload(false)
|
||||
|
||||
every { activity.components.useCases.sessionUseCases } returns sessionUseCases
|
||||
|
||||
|
@ -246,6 +247,24 @@ class DefaultBrowserToolbarControllerTest {
|
|||
verify { sessionUseCases.reload(currentSession) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun handleToolbarReloadLongPress() = runBlockingTest {
|
||||
val item = ToolbarMenu.Item.Reload(true)
|
||||
|
||||
every { activity.components.useCases.sessionUseCases } returns sessionUseCases
|
||||
|
||||
val controller = createController(scope = this)
|
||||
controller.handleToolbarItemInteraction(item)
|
||||
|
||||
verify { metrics.track(Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.RELOAD)) }
|
||||
verify {
|
||||
sessionUseCases.reload(
|
||||
currentSession,
|
||||
EngineSession.LoadUrlFlags.select(EngineSession.LoadUrlFlags.BYPASS_CACHE)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun handleToolbarStopPress() = runBlockingTest {
|
||||
val item = ToolbarMenu.Item.Stop
|
||||
|
|
Loading…
Reference in New Issue