For #141 - Adds autocomplete ot the search screen
- Adds convenience extensions to Context and Fragment - Imports more components from Android Componentsnightly-build-test
parent
a038b5f8e4
commit
480ae93a72
@ -0,0 +1,8 @@
|
||||
package org.mozilla.fenix
|
||||
|
||||
import android.app.Application
|
||||
import org.mozilla.fenix.components.Components
|
||||
|
||||
class FenixApplication : Application() {
|
||||
val components by lazy { Components(this) }
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package org.mozilla.fenix.components
|
||||
|
||||
import android.content.Context
|
||||
|
||||
/**
|
||||
* Provides access to all components.
|
||||
*/
|
||||
class Components(private val context: Context) {
|
||||
val core by lazy { Core(context) }
|
||||
val search by lazy { Search(context) }
|
||||
val useCases by lazy { UseCases(context, core.sessionManager, search.searchEngineManager) }
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package org.mozilla.fenix.components
|
||||
|
||||
import android.content.Context
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import mozilla.components.browser.search.SearchEngineManager
|
||||
|
||||
|
||||
/**
|
||||
* Component group for all search engine integration related functionality.
|
||||
*/
|
||||
class Search(private val context: Context) {
|
||||
|
||||
/**
|
||||
* This component provides access to a centralized registry of search engines.
|
||||
*/
|
||||
val searchEngineManager by lazy {
|
||||
SearchEngineManager().apply {
|
||||
GlobalScope.launch {
|
||||
load(context).await()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package org.mozilla.fenix.components
|
||||
|
||||
import android.content.Context
|
||||
import mozilla.components.browser.search.SearchEngineManager
|
||||
import mozilla.components.browser.session.SessionManager
|
||||
import mozilla.components.feature.search.SearchUseCases
|
||||
import mozilla.components.feature.session.SessionUseCases
|
||||
|
||||
/**
|
||||
* Component group for all use cases. Use cases are provided by feature
|
||||
* modules and can be triggered by UI interactions.
|
||||
*/
|
||||
class UseCases(
|
||||
private val context: Context,
|
||||
private val sessionManager: SessionManager,
|
||||
private val searchEngineManager: SearchEngineManager
|
||||
) {
|
||||
|
||||
val searchUseCases by lazy { SearchUseCases(context, searchEngineManager, sessionManager) }
|
||||
val sessionUseCases by lazy { SessionUseCases(sessionManager) }
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package org.mozilla.fenix.components.toolbar
|
||||
|
||||
import android.content.Context
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.LifecycleObserver
|
||||
import androidx.lifecycle.OnLifecycleEvent
|
||||
import mozilla.components.browser.domains.autocomplete.DomainAutocompleteProvider
|
||||
import mozilla.components.browser.toolbar.BrowserToolbar
|
||||
import mozilla.components.feature.toolbar.ToolbarAutocompleteFeature
|
||||
import mozilla.components.feature.toolbar.ToolbarFeature
|
||||
import org.mozilla.fenix.ext.components
|
||||
|
||||
class ToolbarIntegration(
|
||||
context: Context,
|
||||
toolbar: BrowserToolbar,
|
||||
domainAutocompleteProvider: DomainAutocompleteProvider,
|
||||
sessionId: String? = null
|
||||
) : LifecycleObserver {
|
||||
init {
|
||||
ToolbarAutocompleteFeature(toolbar).apply {
|
||||
addDomainProvider(domainAutocompleteProvider)
|
||||
}
|
||||
}
|
||||
|
||||
private val toolbarFeature: ToolbarFeature = ToolbarFeature(
|
||||
toolbar,
|
||||
context.components.core.sessionManager,
|
||||
context.components.useCases.sessionUseCases.loadUrl,
|
||||
{ searchTerms -> context.components.useCases.searchUseCases.defaultSearch.invoke(searchTerms) },
|
||||
sessionId
|
||||
)
|
||||
|
||||
@OnLifecycleEvent(Lifecycle.Event.ON_START)
|
||||
fun start() {
|
||||
toolbarFeature.start()
|
||||
}
|
||||
|
||||
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
|
||||
fun stop() {
|
||||
toolbarFeature.stop()
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package org.mozilla.fenix.ext
|
||||
|
||||
import android.content.Context
|
||||
import org.mozilla.fenix.FenixApplication
|
||||
import org.mozilla.fenix.components.Components
|
||||
|
||||
val Context.application: FenixApplication
|
||||
get() = applicationContext as FenixApplication
|
||||
|
||||
val Context.components: Components
|
||||
get() = application.components
|
@ -0,0 +1,7 @@
|
||||
package org.mozilla.fenix.ext
|
||||
|
||||
import androidx.fragment.app.Fragment
|
||||
import org.mozilla.fenix.components.Components
|
||||
|
||||
val Fragment.requireComponents: Components
|
||||
get() = requireContext().components
|
Loading…
Reference in New Issue