You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.4 KiB
Kotlin
76 lines
2.4 KiB
Kotlin
/* 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.fenix.browser
|
|
|
|
import androidx.annotation.VisibleForTesting
|
|
import androidx.fragment.app.FragmentActivity
|
|
import androidx.lifecycle.LifecycleOwner
|
|
import mozilla.components.browser.session.Session
|
|
import mozilla.components.browser.session.SessionManager
|
|
import org.mozilla.fenix.components.metrics.MetricController
|
|
import org.mozilla.fenix.ext.components
|
|
import org.mozilla.fenix.ext.metrics
|
|
import org.mozilla.fenix.ext.sessionsOfType
|
|
import org.mozilla.fenix.ext.settings
|
|
import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry
|
|
import org.mozilla.fenix.utils.Settings
|
|
|
|
class UriOpenedObserver(
|
|
private val settings: Settings,
|
|
private val owner: LifecycleOwner,
|
|
private val sessionManager: SessionManager,
|
|
metrics: MetricController,
|
|
ads: AdsTelemetry
|
|
) : SessionManager.Observer {
|
|
|
|
constructor(activity: FragmentActivity) : this(
|
|
activity.applicationContext.settings(),
|
|
activity,
|
|
activity.components.core.sessionManager,
|
|
activity.metrics,
|
|
activity.components.core.adsTelemetry
|
|
)
|
|
|
|
@VisibleForTesting
|
|
internal val singleSessionObserver = TelemetrySessionObserver(metrics, ads)
|
|
|
|
init {
|
|
sessionManager.register(this, owner)
|
|
sessionManager.selectedSession?.register(singleSessionObserver, owner)
|
|
}
|
|
|
|
override fun onSessionSelected(session: Session) {
|
|
session.register(singleSessionObserver, owner)
|
|
}
|
|
|
|
private fun saveOpenTabsCount() {
|
|
settings.setOpenTabsCount(sessionManager.sessionsOfType(private = false).count())
|
|
}
|
|
|
|
override fun onAllSessionsRemoved() {
|
|
saveOpenTabsCount()
|
|
sessionManager.sessions.forEach {
|
|
it.unregister(singleSessionObserver)
|
|
}
|
|
}
|
|
|
|
override fun onSessionAdded(session: Session) {
|
|
saveOpenTabsCount()
|
|
session.register(singleSessionObserver, owner)
|
|
}
|
|
|
|
override fun onSessionRemoved(session: Session) {
|
|
saveOpenTabsCount()
|
|
session.unregister(singleSessionObserver)
|
|
}
|
|
|
|
override fun onSessionsRestored() {
|
|
saveOpenTabsCount()
|
|
sessionManager.sessions.forEach {
|
|
it.register(singleSessionObserver, owner)
|
|
}
|
|
}
|
|
}
|