|
|
@ -6,6 +6,7 @@ package org.mozilla.fenix.components.toolbar
|
|
|
|
|
|
|
|
|
|
|
|
import android.content.Intent
|
|
|
|
import android.content.Intent
|
|
|
|
import androidx.annotation.VisibleForTesting
|
|
|
|
import androidx.annotation.VisibleForTesting
|
|
|
|
|
|
|
|
import androidx.appcompat.app.AlertDialog
|
|
|
|
import androidx.navigation.NavController
|
|
|
|
import androidx.navigation.NavController
|
|
|
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
|
|
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
|
|
|
import com.google.android.material.snackbar.Snackbar
|
|
|
|
import com.google.android.material.snackbar.Snackbar
|
|
|
@ -19,6 +20,8 @@ import mozilla.components.browser.session.SessionManager
|
|
|
|
import mozilla.components.concept.engine.EngineSession.LoadUrlFlags
|
|
|
|
import mozilla.components.concept.engine.EngineSession.LoadUrlFlags
|
|
|
|
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
|
|
|
|
|
|
|
|
import mozilla.components.feature.top.sites.DefaultTopSitesStorage
|
|
|
|
|
|
|
|
import mozilla.components.feature.top.sites.TopSite
|
|
|
|
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
|
|
|
|
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
|
|
|
|
import org.mozilla.fenix.HomeActivity
|
|
|
|
import org.mozilla.fenix.HomeActivity
|
|
|
|
import org.mozilla.fenix.NavGraphDirections
|
|
|
|
import org.mozilla.fenix.NavGraphDirections
|
|
|
@ -62,7 +65,8 @@ class DefaultBrowserToolbarMenuController(
|
|
|
|
private val openInFenixIntent: Intent,
|
|
|
|
private val openInFenixIntent: Intent,
|
|
|
|
private val bookmarkTapped: (Session) -> Unit,
|
|
|
|
private val bookmarkTapped: (Session) -> Unit,
|
|
|
|
private val scope: CoroutineScope,
|
|
|
|
private val scope: CoroutineScope,
|
|
|
|
private val tabCollectionStorage: TabCollectionStorage
|
|
|
|
private val tabCollectionStorage: TabCollectionStorage,
|
|
|
|
|
|
|
|
private val topSitesStorage: DefaultTopSitesStorage
|
|
|
|
) : BrowserToolbarMenuController {
|
|
|
|
) : BrowserToolbarMenuController {
|
|
|
|
|
|
|
|
|
|
|
|
private val currentSession
|
|
|
|
private val currentSession
|
|
|
@ -124,23 +128,38 @@ class DefaultBrowserToolbarMenuController(
|
|
|
|
)
|
|
|
|
)
|
|
|
|
ToolbarMenu.Item.AddToTopSites -> {
|
|
|
|
ToolbarMenu.Item.AddToTopSites -> {
|
|
|
|
scope.launch {
|
|
|
|
scope.launch {
|
|
|
|
ioScope.launch {
|
|
|
|
val context = swipeRefresh.context
|
|
|
|
currentSession?.let {
|
|
|
|
val numPinnedSites =
|
|
|
|
with(activity.components.useCases.topSitesUseCase) {
|
|
|
|
topSitesStorage.cachedTopSites.filter { it.type != TopSite.Type.FRECENT }.size
|
|
|
|
addPinnedSites(it.title, it.url)
|
|
|
|
|
|
|
|
|
|
|
|
if (numPinnedSites >= settings.topSitesMaxLimit) {
|
|
|
|
|
|
|
|
AlertDialog.Builder(swipeRefresh.context).apply {
|
|
|
|
|
|
|
|
setTitle(R.string.top_sites_max_limit_title)
|
|
|
|
|
|
|
|
setMessage(R.string.top_sites_max_limit_content_2)
|
|
|
|
|
|
|
|
setPositiveButton(R.string.top_sites_max_limit_confirmation_button) { dialog, _ ->
|
|
|
|
|
|
|
|
dialog.dismiss()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
create()
|
|
|
|
}.join()
|
|
|
|
}.show()
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
ioScope.launch {
|
|
|
|
|
|
|
|
currentSession?.let {
|
|
|
|
|
|
|
|
with(activity.components.useCases.topSitesUseCase) {
|
|
|
|
|
|
|
|
addPinnedSites(it.title, it.url)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}.join()
|
|
|
|
|
|
|
|
|
|
|
|
FenixSnackbar.make(
|
|
|
|
FenixSnackbar.make(
|
|
|
|
view = swipeRefresh,
|
|
|
|
view = swipeRefresh,
|
|
|
|
duration = Snackbar.LENGTH_SHORT,
|
|
|
|
duration = Snackbar.LENGTH_SHORT,
|
|
|
|
isDisplayedWithBrowserToolbar = true
|
|
|
|
isDisplayedWithBrowserToolbar = true
|
|
|
|
)
|
|
|
|
|
|
|
|
.setText(
|
|
|
|
|
|
|
|
swipeRefresh.context.getString(R.string.snackbar_added_to_top_sites)
|
|
|
|
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.show()
|
|
|
|
.setText(
|
|
|
|
|
|
|
|
context.getString(R.string.snackbar_added_to_top_sites)
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
.show()
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ToolbarMenu.Item.AddToHomeScreen, ToolbarMenu.Item.InstallToHomeScreen -> {
|
|
|
|
ToolbarMenu.Item.AddToHomeScreen, ToolbarMenu.Item.InstallToHomeScreen -> {
|
|
|
|