Decouple the bug report service from the analytics one

This commit is contained in:
Stefan Ceriu
2024-05-30 14:10:51 +03:00
committed by Stefan Ceriu
parent c3571f4f4e
commit a4c9135b58
12 changed files with 58 additions and 94 deletions
@@ -15,6 +15,7 @@
//
import AnalyticsEvents
import Combine
import PostHog
/// A class responsible for managing a variety of analytics clients
@@ -34,20 +35,23 @@ class AnalyticsService {
/// The analytics client to send events with.
private let client: AnalyticsClientProtocol
private let appSettings: AppSettings
private let bugReportService: BugReportServiceProtocol
/// A signpost client for performance testing the app. This client doesn't respect the
/// `isRunning` state or behave any differently when `start`/`reset` are called.
let signpost = Signposter()
/// Whether or not the object is enabled and sending events to the server.
private let isRunningSubject: CurrentValueSubject<Bool, Never> = .init(false)
var isRunningPublisher: CurrentValuePublisher<Bool, Never> {
isRunningSubject.asCurrentValuePublisher()
}
init(client: AnalyticsClientProtocol, appSettings: AppSettings, bugReportService: BugReportServiceProtocol) {
init(client: AnalyticsClientProtocol, appSettings: AppSettings) {
self.client = client
self.appSettings = appSettings
self.bugReportService = bugReportService
}
/// Whether or not the object is enabled and sending events to the server.
var isRunning: Bool { client.isRunning }
isRunningSubject.send(client.isRunning)
}
/// Whether to show the user the analytics opt in prompt.
var shouldShowAnalyticsPrompt: Bool {
@@ -72,20 +76,21 @@ class AnalyticsService {
// The order is important here. PostHog ignores the reset if stopped.
reset()
client.stop()
bugReportService.stop()
isRunningSubject.send(false)
MXLog.info("Stopped.")
}
/// Starts the analytics client if the user has opted in, otherwise does nothing.
func startIfEnabled() {
guard isEnabled, !isRunning else { return }
guard isEnabled, !isRunningPublisher.value else { return }
client.start(analyticsConfiguration: appSettings.analyticsConfiguration)
bugReportService.start()
// Sanity check in case something went wrong.
guard client.isRunning else { return }
isRunningSubject.send(true)
MXLog.info("Started.")
}
@@ -95,7 +100,6 @@ class AnalyticsService {
/// Note: **MUST** be called before stopping PostHog or the reset is ignored.
func reset() {
client.reset()
bugReportService.reset()
MXLog.info("Reset.")
}