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