mirror of
https://github.com/fork-maintainers/iceraven-browser
synced 2024-11-11 13:11:01 +00:00
Post: Clean up 'push' initialization code
This commit is contained in:
parent
d67fb3eed2
commit
8a9340fd9d
@ -191,16 +191,14 @@ open class FenixApplication : Application() {
|
|||||||
// Sets the PushFeature as the singleton instance for push messages to go to.
|
// Sets the PushFeature as the singleton instance for push messages to go to.
|
||||||
// We need the push feature setup here to deliver messages in the case where the service
|
// We need the push feature setup here to deliver messages in the case where the service
|
||||||
// starts up the app first.
|
// starts up the app first.
|
||||||
if (components.backgroundServices.pushConfig != null) {
|
components.backgroundServices.push?.let { autoPushFeature ->
|
||||||
Logger.info("Push configuration found; initializing autopush..")
|
Logger.info("AutoPushFeature is configured, initializing it...")
|
||||||
|
|
||||||
val push = components.backgroundServices.push
|
|
||||||
|
|
||||||
// Install the AutoPush singleton to receive messages.
|
// Install the AutoPush singleton to receive messages.
|
||||||
PushProcessor.install(push)
|
PushProcessor.install(autoPushFeature)
|
||||||
|
|
||||||
// Initialize the service. This could potentially be done in a coroutine in the future.
|
// Initialize the service. This could potentially be done in a coroutine in the future.
|
||||||
push.initialize()
|
autoPushFeature.initialize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,9 +9,6 @@ import android.os.Build
|
|||||||
import androidx.annotation.VisibleForTesting
|
import androidx.annotation.VisibleForTesting
|
||||||
import androidx.annotation.VisibleForTesting.PRIVATE
|
import androidx.annotation.VisibleForTesting.PRIVATE
|
||||||
import androidx.lifecycle.ProcessLifecycleOwner
|
import androidx.lifecycle.ProcessLifecycleOwner
|
||||||
import kotlinx.coroutines.CoroutineScope
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import mozilla.components.browser.storage.sync.PlacesBookmarksStorage
|
import mozilla.components.browser.storage.sync.PlacesBookmarksStorage
|
||||||
import mozilla.components.browser.storage.sync.PlacesHistoryStorage
|
import mozilla.components.browser.storage.sync.PlacesHistoryStorage
|
||||||
import mozilla.components.concept.push.Bus
|
import mozilla.components.concept.push.Bus
|
||||||
@ -89,10 +86,9 @@ class BackgroundServices(
|
|||||||
SyncConfig(setOf(SyncEngine.HISTORY, SyncEngine.BOOKMARKS), syncPeriodInMinutes = 240L) // four hours
|
SyncConfig(setOf(SyncEngine.HISTORY, SyncEngine.BOOKMARKS), syncPeriodInMinutes = 240L) // four hours
|
||||||
}
|
}
|
||||||
|
|
||||||
val pushConfig by lazy { makePushConfig() }
|
|
||||||
private val pushService by lazy { FirebasePush() }
|
private val pushService by lazy { FirebasePush() }
|
||||||
|
|
||||||
val push by lazy { makePush() }
|
val push by lazy { makePushConfig()?.let { makePush(it) } }
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// Make the "history" and "bookmark" stores accessible to workers spawned by the sync manager.
|
// Make the "history" and "bookmark" stores accessible to workers spawned by the sync manager.
|
||||||
@ -115,16 +111,16 @@ class BackgroundServices(
|
|||||||
context.components.analytics.metrics
|
context.components.analytics.metrics
|
||||||
)
|
)
|
||||||
|
|
||||||
private val pushAccountObserver = PushAccountObserver(push)
|
private val pushAccountObserver by lazy { push?.let { PushAccountObserver(it) } }
|
||||||
|
|
||||||
val accountManager = makeAccountManager(context, serverConfig, deviceConfig, syncConfig)
|
val accountManager = makeAccountManager(context, serverConfig, deviceConfig, syncConfig)
|
||||||
|
|
||||||
@VisibleForTesting(otherwise = PRIVATE)
|
@VisibleForTesting(otherwise = PRIVATE)
|
||||||
fun makePush(): AutoPushFeature {
|
fun makePush(pushConfig: PushConfig): AutoPushFeature {
|
||||||
return AutoPushFeature(
|
return AutoPushFeature(
|
||||||
context = context,
|
context = context,
|
||||||
service = pushService,
|
service = pushService,
|
||||||
config = pushConfig!!
|
config = pushConfig
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,38 +156,38 @@ class BackgroundServices(
|
|||||||
// This is a good example of an information leak at the API level.
|
// This is a good example of an information leak at the API level.
|
||||||
// See https://github.com/mozilla-mobile/android-components/issues/3732
|
// See https://github.com/mozilla-mobile/android-components/issues/3732
|
||||||
setOf("https://identity.mozilla.com/apps/oldsync")
|
setOf("https://identity.mozilla.com/apps/oldsync")
|
||||||
).also {
|
).also { accountManager ->
|
||||||
// TODO this needs to change once we have a SyncManager
|
// TODO this needs to change once we have a SyncManager
|
||||||
context.settings.fxaHasSyncedItems = syncConfig?.supportedEngines?.isNotEmpty() ?: false
|
context.settings.fxaHasSyncedItems = syncConfig?.supportedEngines?.isNotEmpty() ?: false
|
||||||
it.registerForDeviceEvents(deviceEventObserver, ProcessLifecycleOwner.get(), false)
|
accountManager.registerForDeviceEvents(deviceEventObserver, ProcessLifecycleOwner.get(), false)
|
||||||
|
|
||||||
// Register a telemetry account observer to keep track of FxA auth metrics.
|
// Register a telemetry account observer to keep track of FxA auth metrics.
|
||||||
it.register(telemetryAccountObserver)
|
accountManager.register(telemetryAccountObserver)
|
||||||
|
|
||||||
// Enable push if we have the config.
|
// Enable push if it's configured.
|
||||||
if (pushConfig != null) {
|
push?.let { autoPushFeature ->
|
||||||
// Register the push account observer so we know how to update our push subscriptions.
|
// Register the push account observer so we know how to update our push subscriptions.
|
||||||
it.register(pushAccountObserver)
|
accountManager.register(pushAccountObserver!!)
|
||||||
|
|
||||||
val logger = Logger("AutoPushFeature")
|
val logger = Logger("AutoPushFeature")
|
||||||
|
|
||||||
// Notify observers for Services' messages.
|
// Notify observers for Services' messages.
|
||||||
push.registerForPushMessages(
|
autoPushFeature.registerForPushMessages(
|
||||||
PushType.Services,
|
PushType.Services,
|
||||||
object : Bus.Observer<PushType, String> {
|
object : Bus.Observer<PushType, String> {
|
||||||
override fun onEvent(type: PushType, message: String) {
|
override fun onEvent(type: PushType, message: String) {
|
||||||
it.authenticatedAccount()?.deviceConstellation()
|
accountManager.authenticatedAccount()?.deviceConstellation()
|
||||||
?.processRawEventAsync(message)
|
?.processRawEventAsync(message)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Notify observers for subscription changes.
|
// Notify observers for subscription changes.
|
||||||
push.registerForSubscriptions(object : PushSubscriptionObserver {
|
autoPushFeature.registerForSubscriptions(object : PushSubscriptionObserver {
|
||||||
override fun onSubscriptionAvailable(subscription: AutoPushSubscription) {
|
override fun onSubscriptionAvailable(subscription: AutoPushSubscription) {
|
||||||
// Update for only the services subscription.
|
// Update for only the services subscription.
|
||||||
if (subscription.type == PushType.Services) {
|
if (subscription.type == PushType.Services) {
|
||||||
logger.info("New push subscription received for FxA")
|
logger.info("New push subscription received for FxA")
|
||||||
it.authenticatedAccount()?.deviceConstellation()
|
accountManager.authenticatedAccount()?.deviceConstellation()
|
||||||
?.setDevicePushSubscriptionAsync(
|
?.setDevicePushSubscriptionAsync(
|
||||||
DevicePushSubscription(
|
DevicePushSubscription(
|
||||||
endpoint = subscription.endpoint,
|
endpoint = subscription.endpoint,
|
||||||
@ -203,7 +199,7 @@ class BackgroundServices(
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
CoroutineScope(Dispatchers.Main).launch { it.initAsync().await() }
|
accountManager.initAsync()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,7 +42,7 @@ class BackgroundServicesTest {
|
|||||||
) = mockk<FxaAccountManager>(relaxed = true)
|
) = mockk<FxaAccountManager>(relaxed = true)
|
||||||
|
|
||||||
override fun makePushConfig() = mockk<PushConfig>(relaxed = true)
|
override fun makePushConfig() = mockk<PushConfig>(relaxed = true)
|
||||||
override fun makePush() = mockk<AutoPushFeature>(relaxed = true)
|
override fun makePush(pushConfig: PushConfig) = mockk<AutoPushFeature>(relaxed = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Loading…
Reference in New Issue
Block a user