|
|
|
@ -5,6 +5,7 @@
|
|
|
|
|
package org.mozilla.fenix.browser
|
|
|
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
|
import android.content.res.Configuration
|
|
|
|
|
import android.os.StrictMode
|
|
|
|
|
import android.view.View
|
|
|
|
|
import android.view.ViewGroup
|
|
|
|
@ -52,6 +53,11 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
|
|
|
|
|
private var readerModeAvailable = false
|
|
|
|
|
private var pwaOnboardingObserver: PwaOnboardingObserver? = null
|
|
|
|
|
|
|
|
|
|
private var forwardAction: BrowserToolbar.TwoStateButton? = null
|
|
|
|
|
private var backAction: BrowserToolbar.TwoStateButton? = null
|
|
|
|
|
private var refreshAction: BrowserToolbar.TwoStateButton? = null
|
|
|
|
|
private var isTablet: Boolean = false
|
|
|
|
|
|
|
|
|
|
@Suppress("LongMethod")
|
|
|
|
|
override fun initializeUI(view: View, tab: SessionState) {
|
|
|
|
|
super.initializeUI(view, tab)
|
|
|
|
@ -84,10 +90,105 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
|
|
|
|
|
|
|
|
|
|
browserToolbarView.view.addNavigationAction(homeAction)
|
|
|
|
|
|
|
|
|
|
if (resources.getBoolean(R.bool.tablet)) {
|
|
|
|
|
setScreenSize(isTablet = resources.getBoolean(R.bool.tablet))
|
|
|
|
|
|
|
|
|
|
val readerModeAction =
|
|
|
|
|
BrowserToolbar.ToggleButton(
|
|
|
|
|
image = AppCompatResources.getDrawable(
|
|
|
|
|
context,
|
|
|
|
|
R.drawable.ic_readermode,
|
|
|
|
|
)!!,
|
|
|
|
|
imageSelected =
|
|
|
|
|
AppCompatResources.getDrawable(
|
|
|
|
|
context,
|
|
|
|
|
R.drawable.ic_readermode_selected,
|
|
|
|
|
)!!,
|
|
|
|
|
contentDescription = context.getString(R.string.browser_menu_read),
|
|
|
|
|
contentDescriptionSelected = context.getString(R.string.browser_menu_read_close),
|
|
|
|
|
visible = {
|
|
|
|
|
readerModeAvailable
|
|
|
|
|
},
|
|
|
|
|
selected = getCurrentTab()?.let {
|
|
|
|
|
activity?.components?.core?.store?.state?.findTab(it.id)?.readerState?.active
|
|
|
|
|
} ?: false,
|
|
|
|
|
listener = browserToolbarInteractor::onReaderModePressed,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
browserToolbarView.view.addPageAction(readerModeAction)
|
|
|
|
|
|
|
|
|
|
thumbnailsFeature.set(
|
|
|
|
|
feature = BrowserThumbnails(context, binding.engineView, components.core.store),
|
|
|
|
|
owner = this,
|
|
|
|
|
view = view,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
readerViewFeature.set(
|
|
|
|
|
feature = components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
|
|
|
|
|
ReaderViewFeature(
|
|
|
|
|
context,
|
|
|
|
|
components.core.engine,
|
|
|
|
|
components.core.store,
|
|
|
|
|
binding.readerViewControlsBar,
|
|
|
|
|
) { available, active ->
|
|
|
|
|
if (available) {
|
|
|
|
|
ReaderMode.available.record(NoExtras())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
readerModeAvailable = available
|
|
|
|
|
readerModeAction.setSelected(active)
|
|
|
|
|
safeInvalidateBrowserToolbarView()
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
owner = this,
|
|
|
|
|
view = view,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
windowFeature.set(
|
|
|
|
|
feature = WindowFeature(
|
|
|
|
|
store = components.core.store,
|
|
|
|
|
tabsUseCases = components.useCases.tabsUseCases,
|
|
|
|
|
),
|
|
|
|
|
owner = this,
|
|
|
|
|
view = view,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if (context.settings().shouldShowOpenInAppCfr) {
|
|
|
|
|
openInAppOnboardingObserver.set(
|
|
|
|
|
feature = OpenInAppOnboardingObserver(
|
|
|
|
|
context = context,
|
|
|
|
|
store = context.components.core.store,
|
|
|
|
|
lifecycleOwner = this,
|
|
|
|
|
navController = findNavController(),
|
|
|
|
|
settings = context.settings(),
|
|
|
|
|
appLinksUseCases = context.components.useCases.appLinksUseCases,
|
|
|
|
|
container = binding.browserLayout as ViewGroup,
|
|
|
|
|
shouldScrollWithTopToolbar = !context.settings().shouldUseBottomToolbar,
|
|
|
|
|
),
|
|
|
|
|
owner = this,
|
|
|
|
|
view = view,
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun setScreenSize(isTablet: Boolean) {
|
|
|
|
|
if (isTablet == this.isTablet) return
|
|
|
|
|
|
|
|
|
|
if (isTablet) {
|
|
|
|
|
addTabletActions(requireContext())
|
|
|
|
|
} else {
|
|
|
|
|
removeTabletActions()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.isTablet = isTablet
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Suppress("LongMethod")
|
|
|
|
|
private fun addTabletActions(context: Context) {
|
|
|
|
|
val enableTint = ThemeManager.resolveAttribute(R.attr.textPrimary, context)
|
|
|
|
|
val disableTint = ThemeManager.resolveAttribute(R.attr.textDisabled, context)
|
|
|
|
|
val backAction = BrowserToolbar.TwoStateButton(
|
|
|
|
|
|
|
|
|
|
if (backAction == null) {
|
|
|
|
|
backAction = BrowserToolbar.TwoStateButton(
|
|
|
|
|
primaryImage = AppCompatResources.getDrawable(
|
|
|
|
|
context,
|
|
|
|
|
R.drawable.mozac_ic_back,
|
|
|
|
@ -108,8 +209,14 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
browserToolbarView.view.addNavigationAction(backAction)
|
|
|
|
|
val forwardAction = BrowserToolbar.TwoStateButton(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
backAction?.let {
|
|
|
|
|
browserToolbarView.view.addNavigationAction(it)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (forwardAction == null) {
|
|
|
|
|
forwardAction = BrowserToolbar.TwoStateButton(
|
|
|
|
|
primaryImage = AppCompatResources.getDrawable(
|
|
|
|
|
context,
|
|
|
|
|
R.drawable.mozac_ic_forward,
|
|
|
|
@ -130,8 +237,14 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
browserToolbarView.view.addNavigationAction(forwardAction)
|
|
|
|
|
val refreshAction = BrowserToolbar.TwoStateButton(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
forwardAction?.let {
|
|
|
|
|
browserToolbarView.view.addNavigationAction(it)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (refreshAction == null) {
|
|
|
|
|
refreshAction = BrowserToolbar.TwoStateButton(
|
|
|
|
|
primaryImage = AppCompatResources.getDrawable(
|
|
|
|
|
context,
|
|
|
|
|
R.drawable.mozac_ic_refresh,
|
|
|
|
@ -162,84 +275,22 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
browserToolbarView.view.addNavigationAction(refreshAction)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val readerModeAction =
|
|
|
|
|
BrowserToolbar.ToggleButton(
|
|
|
|
|
image = AppCompatResources.getDrawable(
|
|
|
|
|
context,
|
|
|
|
|
R.drawable.ic_readermode,
|
|
|
|
|
)!!,
|
|
|
|
|
imageSelected =
|
|
|
|
|
AppCompatResources.getDrawable(
|
|
|
|
|
context,
|
|
|
|
|
R.drawable.ic_readermode_selected,
|
|
|
|
|
)!!,
|
|
|
|
|
contentDescription = context.getString(R.string.browser_menu_read),
|
|
|
|
|
contentDescriptionSelected = context.getString(R.string.browser_menu_read_close),
|
|
|
|
|
visible = {
|
|
|
|
|
readerModeAvailable
|
|
|
|
|
},
|
|
|
|
|
selected = getCurrentTab()?.let {
|
|
|
|
|
activity?.components?.core?.store?.state?.findTab(it.id)?.readerState?.active
|
|
|
|
|
} ?: false,
|
|
|
|
|
listener = browserToolbarInteractor::onReaderModePressed,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
browserToolbarView.view.addPageAction(readerModeAction)
|
|
|
|
|
|
|
|
|
|
thumbnailsFeature.set(
|
|
|
|
|
feature = BrowserThumbnails(context, binding.engineView, components.core.store),
|
|
|
|
|
owner = this,
|
|
|
|
|
view = view,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
readerViewFeature.set(
|
|
|
|
|
feature = components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
|
|
|
|
|
ReaderViewFeature(
|
|
|
|
|
context,
|
|
|
|
|
components.core.engine,
|
|
|
|
|
components.core.store,
|
|
|
|
|
binding.readerViewControlsBar,
|
|
|
|
|
) { available, active ->
|
|
|
|
|
if (available) {
|
|
|
|
|
ReaderMode.available.record(NoExtras())
|
|
|
|
|
refreshAction?.let {
|
|
|
|
|
browserToolbarView.view.addNavigationAction(it)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
readerModeAvailable = available
|
|
|
|
|
readerModeAction.setSelected(active)
|
|
|
|
|
safeInvalidateBrowserToolbarView()
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
owner = this,
|
|
|
|
|
view = view,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
windowFeature.set(
|
|
|
|
|
feature = WindowFeature(
|
|
|
|
|
store = components.core.store,
|
|
|
|
|
tabsUseCases = components.useCases.tabsUseCases,
|
|
|
|
|
),
|
|
|
|
|
owner = this,
|
|
|
|
|
view = view,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if (context.settings().shouldShowOpenInAppCfr) {
|
|
|
|
|
openInAppOnboardingObserver.set(
|
|
|
|
|
feature = OpenInAppOnboardingObserver(
|
|
|
|
|
context = context,
|
|
|
|
|
store = context.components.core.store,
|
|
|
|
|
lifecycleOwner = this,
|
|
|
|
|
navController = findNavController(),
|
|
|
|
|
settings = context.settings(),
|
|
|
|
|
appLinksUseCases = context.components.useCases.appLinksUseCases,
|
|
|
|
|
container = binding.browserLayout as ViewGroup,
|
|
|
|
|
shouldScrollWithTopToolbar = !context.settings().shouldUseBottomToolbar,
|
|
|
|
|
),
|
|
|
|
|
owner = this,
|
|
|
|
|
view = view,
|
|
|
|
|
)
|
|
|
|
|
private fun removeTabletActions() {
|
|
|
|
|
forwardAction?.let {
|
|
|
|
|
browserToolbarView.view.removeNavigationAction(it)
|
|
|
|
|
}
|
|
|
|
|
backAction?.let {
|
|
|
|
|
browserToolbarView.view.removeNavigationAction(it)
|
|
|
|
|
}
|
|
|
|
|
refreshAction?.let {
|
|
|
|
|
browserToolbarView.view.removeNavigationAction(it)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -396,4 +447,9 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
|
|
|
|
|
internal fun updateLastBrowseActivity() {
|
|
|
|
|
requireContext().settings().lastBrowseActivity = System.currentTimeMillis()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onConfigurationChanged(newConfig: Configuration) {
|
|
|
|
|
super.onConfigurationChanged(newConfig)
|
|
|
|
|
setScreenSize(isTablet = resources.getBoolean(R.bool.tablet))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|