forked from mozilla-mobile/focus-android
/
Components.kt
125 lines (104 loc) · 5.08 KB
/
Components.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.focus
import android.content.Context
import mozilla.components.browser.search.SearchEngineManager
import mozilla.components.browser.search.provider.AssetsSearchEngineProvider
import mozilla.components.browser.search.provider.localization.LocaleSearchLocalizationProvider
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
import mozilla.components.browser.session.engine.EngineMiddleware
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.DefaultSettings
import mozilla.components.concept.engine.Engine
import mozilla.components.concept.fetch.Client
import mozilla.components.feature.app.links.AppLinksUseCases
import mozilla.components.feature.contextmenu.ContextMenuUseCases
import mozilla.components.feature.customtabs.store.CustomTabsServiceStore
import mozilla.components.feature.downloads.DownloadMiddleware
import mozilla.components.feature.downloads.DownloadsUseCases
import mozilla.components.feature.session.SessionUseCases
import mozilla.components.feature.session.SettingsUseCases
import mozilla.components.feature.session.TrackingProtectionUseCases
import mozilla.components.feature.tabs.CustomTabsUseCases
import mozilla.components.feature.tabs.TabsUseCases
import org.mozilla.focus.components.EngineProvider
import org.mozilla.focus.downloads.DownloadService
import org.mozilla.focus.engine.ClientWrapper
import org.mozilla.focus.engine.LocalizedContentInterceptor
import org.mozilla.focus.engine.SanityCheckMiddleware
import org.mozilla.focus.notification.PrivateNotificationMiddleware
import org.mozilla.focus.search.BingSearchEngineFilter
import org.mozilla.focus.search.CustomSearchEngineProvider
import org.mozilla.focus.search.HiddenSearchEngineFilter
import org.mozilla.focus.telemetry.TelemetryMiddleware
import org.mozilla.focus.utils.Settings
/**
* Helper object for lazily initializing components.
*/
class Components(
context: Context,
private val engineOverride: Engine? = null,
private val clientOverride: Client? = null
) {
val engineDefaultSettings by lazy {
val settings = Settings.getInstance(context)
DefaultSettings(
requestInterceptor = LocalizedContentInterceptor(context),
trackingProtectionPolicy = settings.createTrackingProtectionPolicy(),
javascriptEnabled = !settings.shouldBlockJavaScript(),
remoteDebuggingEnabled = settings.shouldEnableRemoteDebugging(),
webFontsEnabled = !settings.shouldBlockWebFonts()
)
}
val engine: Engine by lazy {
engineOverride ?: EngineProvider.createEngine(context, engineDefaultSettings).apply {
Settings.getInstance(context).setupSafeBrowsing(this)
}
}
val client: ClientWrapper by lazy {
ClientWrapper(clientOverride ?: EngineProvider.createClient(context))
}
val trackingProtectionUseCases by lazy { TrackingProtectionUseCases(store, engine) }
val settingsUseCases by lazy { SettingsUseCases(engine, store) }
val store by lazy {
BrowserStore(
middleware = listOf(
PrivateNotificationMiddleware(context),
TelemetryMiddleware(),
DownloadMiddleware(context, DownloadService::class.java),
SanityCheckMiddleware()
) + EngineMiddleware.create(engine, ::findSessionById)
)
}
@Suppress("DEPRECATION")
private fun findSessionById(tabId: String): Session? {
return sessionManager.findSessionById(tabId)
}
/**
* The [CustomTabsServiceStore] holds global custom tabs related data.
*/
val customTabsStore by lazy { CustomTabsServiceStore() }
@Suppress("DEPRECATION")
val sessionUseCases: SessionUseCases by lazy { SessionUseCases(store, sessionManager) }
@Suppress("DEPRECATION")
val tabsUseCases: TabsUseCases by lazy { TabsUseCases(store, sessionManager) }
val contextMenuUseCases: ContextMenuUseCases by lazy { ContextMenuUseCases(store) }
val downloadsUseCases: DownloadsUseCases by lazy { DownloadsUseCases(store) }
val appLinksUseCases: AppLinksUseCases by lazy { AppLinksUseCases(context.applicationContext) }
@Suppress("DEPRECATION")
val customTabsUseCases: CustomTabsUseCases by lazy { CustomTabsUseCases(sessionManager, sessionUseCases.loadUrl) }
@Deprecated("Use BrowserStore instead")
private val sessionManager by lazy {
SessionManager(engine, store)
}
val searchEngineManager by lazy {
val assetsProvider = AssetsSearchEngineProvider(
LocaleSearchLocalizationProvider(),
filters = listOf(BingSearchEngineFilter(), HiddenSearchEngineFilter()),
additionalIdentifiers = listOf("ddg"))
val customProvider = CustomSearchEngineProvider()
SearchEngineManager(listOf(assetsProvider, customProvider))
}
}