|
|
@ -17,8 +17,8 @@ import kotlinx.android.synthetic.main.fragment_browser.*
|
|
|
|
import kotlinx.android.synthetic.main.fragment_browser.view.*
|
|
|
|
import kotlinx.android.synthetic.main.fragment_browser.view.*
|
|
|
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|
|
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|
|
|
import mozilla.components.browser.state.selector.findTab
|
|
|
|
import mozilla.components.browser.state.selector.findTab
|
|
|
|
import mozilla.components.browser.state.state.TabSessionState
|
|
|
|
|
|
|
|
import mozilla.components.browser.state.state.SessionState
|
|
|
|
import mozilla.components.browser.state.state.SessionState
|
|
|
|
|
|
|
|
import mozilla.components.browser.state.state.TabSessionState
|
|
|
|
import mozilla.components.browser.thumbnails.BrowserThumbnails
|
|
|
|
import mozilla.components.browser.thumbnails.BrowserThumbnails
|
|
|
|
import mozilla.components.browser.toolbar.BrowserToolbar
|
|
|
|
import mozilla.components.browser.toolbar.BrowserToolbar
|
|
|
|
import mozilla.components.feature.app.links.AppLinksUseCases
|
|
|
|
import mozilla.components.feature.app.links.AppLinksUseCases
|
|
|
@ -29,13 +29,14 @@ import mozilla.components.feature.tab.collections.TabCollection
|
|
|
|
import mozilla.components.feature.tabs.WindowFeature
|
|
|
|
import mozilla.components.feature.tabs.WindowFeature
|
|
|
|
import mozilla.components.support.base.feature.UserInteractionHandler
|
|
|
|
import mozilla.components.support.base.feature.UserInteractionHandler
|
|
|
|
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
|
|
|
|
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
|
|
|
|
|
|
|
|
import org.mozilla.fenix.FeatureFlags
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
import org.mozilla.fenix.components.FenixSnackbar
|
|
|
|
import org.mozilla.fenix.components.FenixSnackbar
|
|
|
|
import org.mozilla.fenix.components.TabCollectionStorage
|
|
|
|
import org.mozilla.fenix.components.TabCollectionStorage
|
|
|
|
import org.mozilla.fenix.components.metrics.Event
|
|
|
|
import org.mozilla.fenix.components.metrics.Event
|
|
|
|
import org.mozilla.fenix.ext.components
|
|
|
|
import org.mozilla.fenix.ext.components
|
|
|
|
import org.mozilla.fenix.ext.navigateBlockingForAsyncNavGraph
|
|
|
|
|
|
|
|
import org.mozilla.fenix.ext.nav
|
|
|
|
import org.mozilla.fenix.ext.nav
|
|
|
|
|
|
|
|
import org.mozilla.fenix.ext.navigateBlockingForAsyncNavGraph
|
|
|
|
import org.mozilla.fenix.ext.navigateSafe
|
|
|
|
import org.mozilla.fenix.ext.navigateSafe
|
|
|
|
import org.mozilla.fenix.ext.requireComponents
|
|
|
|
import org.mozilla.fenix.ext.requireComponents
|
|
|
|
import org.mozilla.fenix.ext.settings
|
|
|
|
import org.mozilla.fenix.ext.settings
|
|
|
@ -51,7 +52,8 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
|
|
|
|
|
|
|
|
|
|
|
|
private val windowFeature = ViewBoundFeatureWrapper<WindowFeature>()
|
|
|
|
private val windowFeature = ViewBoundFeatureWrapper<WindowFeature>()
|
|
|
|
private val openInAppOnboardingObserver = ViewBoundFeatureWrapper<OpenInAppOnboardingObserver>()
|
|
|
|
private val openInAppOnboardingObserver = ViewBoundFeatureWrapper<OpenInAppOnboardingObserver>()
|
|
|
|
private val trackingProtectionOverlayObserver = ViewBoundFeatureWrapper<TrackingProtectionOverlay>()
|
|
|
|
private val trackingProtectionOverlayObserver =
|
|
|
|
|
|
|
|
ViewBoundFeatureWrapper<TrackingProtectionOverlay>()
|
|
|
|
|
|
|
|
|
|
|
|
private var readerModeAvailable = false
|
|
|
|
private var readerModeAvailable = false
|
|
|
|
private var pwaOnboardingObserver: PwaOnboardingObserver? = null
|
|
|
|
private var pwaOnboardingObserver: PwaOnboardingObserver? = null
|
|
|
@ -76,27 +78,38 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
val homeAction = BrowserToolbar.Button(
|
|
|
|
if (FeatureFlags.showHomeButtonFeature) {
|
|
|
|
imageDrawable = AppCompatResources.getDrawable(requireContext(), R.drawable.ic_home)!!,
|
|
|
|
val homeAction = BrowserToolbar.Button(
|
|
|
|
contentDescription = requireContext().getString(R.string.browser_toolbar_home),
|
|
|
|
imageDrawable = AppCompatResources.getDrawable(
|
|
|
|
listener = browserToolbarInteractor::onHomeButtonClicked
|
|
|
|
requireContext(),
|
|
|
|
)
|
|
|
|
R.drawable.ic_home
|
|
|
|
|
|
|
|
)!!,
|
|
|
|
|
|
|
|
contentDescription = requireContext().getString(R.string.browser_toolbar_home),
|
|
|
|
|
|
|
|
listener = browserToolbarInteractor::onHomeButtonClicked
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
browserToolbarView.view.addNavigationAction(homeAction)
|
|
|
|
browserToolbarView.view.addNavigationAction(homeAction)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
val readerModeAction =
|
|
|
|
val readerModeAction =
|
|
|
|
BrowserToolbar.ToggleButton(
|
|
|
|
BrowserToolbar.ToggleButton(
|
|
|
|
image = AppCompatResources.getDrawable(requireContext(), R.drawable.ic_readermode)!!,
|
|
|
|
image = AppCompatResources.getDrawable(
|
|
|
|
|
|
|
|
requireContext(),
|
|
|
|
|
|
|
|
R.drawable.ic_readermode
|
|
|
|
|
|
|
|
)!!,
|
|
|
|
imageSelected =
|
|
|
|
imageSelected =
|
|
|
|
AppCompatResources.getDrawable(requireContext(), R.drawable.ic_readermode_selected)!!,
|
|
|
|
AppCompatResources.getDrawable(
|
|
|
|
|
|
|
|
requireContext(),
|
|
|
|
|
|
|
|
R.drawable.ic_readermode_selected
|
|
|
|
|
|
|
|
)!!,
|
|
|
|
contentDescription = requireContext().getString(R.string.browser_menu_read),
|
|
|
|
contentDescription = requireContext().getString(R.string.browser_menu_read),
|
|
|
|
contentDescriptionSelected = requireContext().getString(R.string.browser_menu_read_close),
|
|
|
|
contentDescriptionSelected = requireContext().getString(R.string.browser_menu_read_close),
|
|
|
|
visible = {
|
|
|
|
visible = {
|
|
|
|
readerModeAvailable
|
|
|
|
readerModeAvailable
|
|
|
|
},
|
|
|
|
},
|
|
|
|
selected = getCurrentTab()?.let {
|
|
|
|
selected = getCurrentTab()?.let {
|
|
|
|
activity?.components?.core?.store?.state?.findTab(it.id)?.readerState?.active
|
|
|
|
activity?.components?.core?.store?.state?.findTab(it.id)?.readerState?.active
|
|
|
|
} ?: false,
|
|
|
|
} ?: false,
|
|
|
|
listener = browserToolbarInteractor::onReaderModePressed
|
|
|
|
listener = browserToolbarInteractor::onReaderModePressed
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
@ -246,7 +259,11 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private val collectionStorageObserver = object : TabCollectionStorage.Observer {
|
|
|
|
private val collectionStorageObserver = object : TabCollectionStorage.Observer {
|
|
|
|
override fun onCollectionCreated(title: String, sessions: List<TabSessionState>, id: Long?) {
|
|
|
|
override fun onCollectionCreated(
|
|
|
|
|
|
|
|
title: String,
|
|
|
|
|
|
|
|
sessions: List<TabSessionState>,
|
|
|
|
|
|
|
|
id: Long?
|
|
|
|
|
|
|
|
) {
|
|
|
|
showTabSavedToCollectionSnackbar(sessions.size, true)
|
|
|
|
showTabSavedToCollectionSnackbar(sessions.size, true)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -254,7 +271,10 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
|
|
|
|
showTabSavedToCollectionSnackbar(sessions.size)
|
|
|
|
showTabSavedToCollectionSnackbar(sessions.size)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun showTabSavedToCollectionSnackbar(tabSize: Int, isNewCollection: Boolean = false) {
|
|
|
|
private fun showTabSavedToCollectionSnackbar(
|
|
|
|
|
|
|
|
tabSize: Int,
|
|
|
|
|
|
|
|
isNewCollection: Boolean = false
|
|
|
|
|
|
|
|
) {
|
|
|
|
view?.let { view ->
|
|
|
|
view?.let { view ->
|
|
|
|
val messageStringRes = when {
|
|
|
|
val messageStringRes = when {
|
|
|
|
isNewCollection -> {
|
|
|
|
isNewCollection -> {
|
|
|
@ -298,8 +318,10 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
|
|
|
|
context.components.useCases.contextMenuUseCases,
|
|
|
|
context.components.useCases.contextMenuUseCases,
|
|
|
|
view,
|
|
|
|
view,
|
|
|
|
FenixSnackbarDelegate(view)
|
|
|
|
FenixSnackbarDelegate(view)
|
|
|
|
) + ContextMenuCandidate.createOpenInExternalAppCandidate(requireContext(),
|
|
|
|
) + ContextMenuCandidate.createOpenInExternalAppCandidate(
|
|
|
|
contextMenuCandidateAppLinksUseCases)
|
|
|
|
requireContext(),
|
|
|
|
|
|
|
|
contextMenuCandidateAppLinksUseCases
|
|
|
|
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|