parent
1846a61475
commit
48aeb19db1
|
@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
## [Unreleased]
|
||||
### Added
|
||||
- #3695 - Made search suggestions for other tabs clickable
|
||||
|
||||
## [1.1.0 and earlier] - 2019-07-23
|
||||
### Added
|
||||
- #2770 - Added ability to receive tabs from other FxA devices
|
||||
- #919 - Enabled bookmark synchronization
|
||||
- #916 - Added the ability to save and delete bookmarks
|
||||
|
|
|
@ -7,11 +7,15 @@ package org.mozilla.fenix.search
|
|||
import android.content.Context
|
||||
import androidx.navigation.NavController
|
||||
import mozilla.components.browser.search.SearchEngine
|
||||
import mozilla.components.browser.session.Session
|
||||
import mozilla.components.support.ktx.kotlin.isUrl
|
||||
import org.mozilla.fenix.BrowserDirection
|
||||
import org.mozilla.fenix.HomeActivity
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.components.metrics.Event
|
||||
import org.mozilla.fenix.ext.components
|
||||
import org.mozilla.fenix.ext.metrics
|
||||
import org.mozilla.fenix.ext.nav
|
||||
import org.mozilla.fenix.ext.searchEngineManager
|
||||
import org.mozilla.fenix.search.awesomebar.AwesomeBarInteractor
|
||||
import org.mozilla.fenix.search.toolbar.ToolbarInteractor
|
||||
|
@ -25,6 +29,7 @@ class SearchInteractor(
|
|||
private val navController: NavController,
|
||||
private val store: SearchStore
|
||||
) : AwesomeBarInteractor, ToolbarInteractor {
|
||||
|
||||
override fun onUrlCommitted(url: String) {
|
||||
if (url.isNotBlank()) {
|
||||
(context as HomeActivity).openToBrowserAndLoad(
|
||||
|
@ -85,6 +90,12 @@ class SearchInteractor(
|
|||
navController.navigate(directions)
|
||||
}
|
||||
|
||||
override fun onExistingSessionSelected(session: Session) {
|
||||
val directions = SearchFragmentDirections.actionSearchFragmentToBrowserFragment(null)
|
||||
navController.nav(R.id.searchFragment, directions)
|
||||
context.components.core.sessionManager.select(session)
|
||||
}
|
||||
|
||||
private fun createSearchEvent(engine: SearchEngine, isSuggestion: Boolean): Event.PerformedSearch {
|
||||
val isShortcut = engine != context.searchEngineManager.defaultSearchEngine
|
||||
|
||||
|
|
|
@ -13,14 +13,16 @@ import androidx.core.graphics.drawable.toBitmap
|
|||
import kotlinx.android.extensions.LayoutContainer
|
||||
import mozilla.components.browser.awesomebar.BrowserAwesomeBar
|
||||
import mozilla.components.browser.search.SearchEngine
|
||||
import mozilla.components.browser.session.Session
|
||||
import mozilla.components.concept.engine.EngineSession
|
||||
import mozilla.components.feature.awesomebar.provider.SearchSuggestionProvider
|
||||
import mozilla.components.feature.awesomebar.provider.BookmarksStorageSuggestionProvider
|
||||
import mozilla.components.feature.awesomebar.provider.ClipboardSuggestionProvider
|
||||
import mozilla.components.feature.awesomebar.provider.HistoryStorageSuggestionProvider
|
||||
import mozilla.components.feature.awesomebar.provider.BookmarksStorageSuggestionProvider
|
||||
import mozilla.components.feature.awesomebar.provider.SearchSuggestionProvider
|
||||
import mozilla.components.feature.awesomebar.provider.SessionSuggestionProvider
|
||||
import mozilla.components.feature.search.SearchUseCases
|
||||
import mozilla.components.feature.session.SessionUseCases
|
||||
import mozilla.components.feature.tabs.TabsUseCases
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.ThemeManager
|
||||
import org.mozilla.fenix.ext.components
|
||||
|
@ -55,6 +57,11 @@ interface AwesomeBarInteractor {
|
|||
* Called whenever the "Search Engine Settings" item is tapped
|
||||
*/
|
||||
fun onClickSearchEngineSettings()
|
||||
|
||||
/**
|
||||
* Called whenever an existing session is selected from the sessionSuggestionProvider
|
||||
*/
|
||||
fun onExistingSessionSelected(session: Session)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -96,6 +103,12 @@ class AwesomeBarView(
|
|||
}
|
||||
}
|
||||
|
||||
private val selectTabUseCase = object : TabsUseCases.SelectTabUseCase {
|
||||
override fun invoke(session: Session) {
|
||||
interactor.onExistingSessionSelected(session)
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
with(container.context) {
|
||||
val primaryTextColor = ContextCompat.getColor(
|
||||
|
@ -116,8 +129,9 @@ class AwesomeBarView(
|
|||
sessionProvider =
|
||||
SessionSuggestionProvider(
|
||||
components.core.sessionManager,
|
||||
components.useCases.tabsUseCases.selectTab,
|
||||
components.core.icons
|
||||
selectTabUseCase,
|
||||
components.core.icons,
|
||||
excludeSelectedSession = true
|
||||
)
|
||||
|
||||
historyStorageProvider =
|
||||
|
|
|
@ -4,7 +4,9 @@
|
|||
|
||||
package org.mozilla.fenix.search
|
||||
|
||||
import android.content.Context
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavDestination
|
||||
import androidx.navigation.NavDirections
|
||||
import io.mockk.Runs
|
||||
import io.mockk.every
|
||||
|
@ -13,9 +15,12 @@ import io.mockk.mockk
|
|||
import io.mockk.verify
|
||||
import mozilla.components.browser.search.SearchEngine
|
||||
import mozilla.components.browser.search.SearchEngineManager
|
||||
import mozilla.components.browser.session.Session
|
||||
import org.junit.Test
|
||||
import org.mozilla.fenix.BrowserDirection
|
||||
import org.mozilla.fenix.FenixApplication
|
||||
import org.mozilla.fenix.HomeActivity
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.ext.metrics
|
||||
import org.mozilla.fenix.ext.searchEngineManager
|
||||
|
||||
|
@ -153,4 +158,21 @@ class SearchInteractorTest {
|
|||
navController.navigate(SearchFragmentDirections.actionSearchFragmentToSearchEngineFragment())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun onExistingSessionSelected() {
|
||||
val navController: NavController = mockk(relaxed = true)
|
||||
every { navController.currentDestination } returns NavDestination("").apply { id = R.id.searchFragment }
|
||||
val context: Context = mockk(relaxed = true)
|
||||
val applicationContext: FenixApplication = mockk(relaxed = true)
|
||||
every { context.applicationContext } returns applicationContext
|
||||
val interactor = SearchInteractor(context, navController, mockk())
|
||||
val session = Session("http://mozilla.org", false)
|
||||
|
||||
interactor.onExistingSessionSelected(session)
|
||||
|
||||
verify {
|
||||
navController.navigate(SearchFragmentDirections.actionSearchFragmentToBrowserFragment(null))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue