-
-
Notifications
You must be signed in to change notification settings - Fork 468
Expand file tree
/
Copy pathFragmentLifecycleIntegration.kt
More file actions
113 lines (97 loc) · 3.75 KB
/
FragmentLifecycleIntegration.kt
File metadata and controls
113 lines (97 loc) · 3.75 KB
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
package io.sentry.android.fragment
import android.app.Activity
import android.app.Application
import android.app.Application.ActivityLifecycleCallbacks
import android.os.Bundle
import androidx.fragment.app.FragmentActivity
import io.sentry.IScopes
import io.sentry.Integration
import io.sentry.SentryIntegrationPackageStorage
import io.sentry.SentryLevel.DEBUG
import io.sentry.SentryOptions
import io.sentry.util.IntegrationUtils.addIntegrationToSdkVersion
import java.io.Closeable
public class FragmentLifecycleIntegration(
private val application: Application,
private val filterFragmentLifecycleBreadcrumbs: Set<FragmentLifecycleState>,
private val enableAutoFragmentLifecycleTracing: Boolean
) :
ActivityLifecycleCallbacks,
Integration,
Closeable {
private companion object {
init {
SentryIntegrationPackageStorage.getInstance()
.addPackage("maven:io.sentry:sentry-android-fragment", BuildConfig.VERSION_NAME)
}
}
public constructor(application: Application) : this(
application = application,
filterFragmentLifecycleBreadcrumbs = FragmentLifecycleState.states,
enableAutoFragmentLifecycleTracing = false
)
public constructor(
application: Application,
enableFragmentLifecycleBreadcrumbs: Boolean,
enableAutoFragmentLifecycleTracing: Boolean
) : this(
application = application,
filterFragmentLifecycleBreadcrumbs = FragmentLifecycleState.states
.takeIf { enableFragmentLifecycleBreadcrumbs }
.orEmpty(),
enableAutoFragmentLifecycleTracing = enableAutoFragmentLifecycleTracing
)
private lateinit var scopes: IScopes
private lateinit var options: SentryOptions
override fun register(scopes: IScopes, options: SentryOptions) {
this.scopes = scopes
this.options = options
application.registerActivityLifecycleCallbacks(this)
options.logger.log(DEBUG, "FragmentLifecycleIntegration installed.")
addIntegrationToSdkVersion("FragmentLifecycle")
SentryIntegrationPackageStorage.getInstance()
.addPackage("maven:io.sentry:sentry-android-fragment", BuildConfig.VERSION_NAME)
}
override fun close() {
application.unregisterActivityLifecycleCallbacks(this)
if (::options.isInitialized) {
options.logger.log(DEBUG, "FragmentLifecycleIntegration removed.")
}
}
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
(activity as? FragmentActivity)
?.supportFragmentManager
?.registerFragmentLifecycleCallbacks(
SentryFragmentLifecycleCallbacks(
scopes = scopes,
filterFragmentLifecycleBreadcrumbs = filterFragmentLifecycleBreadcrumbs,
enableAutoFragmentLifecycleTracing = enableAutoFragmentLifecycleTracing
),
true
)
}
override fun onActivityStarted(activity: Activity) {
// no-op
}
override fun onActivityResumed(activity: Activity) {
// no-op
}
override fun onActivityPaused(activity: Activity) {
// no-op
}
override fun onActivityStopped(activity: Activity) {
// no-op
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
// no-op
}
override fun onActivityDestroyed(activity: Activity) {
/**
* It is not needed to unregister [SentryFragmentLifecycleCallbacks] as
* [androidx.fragment.app.FragmentManager] will do this on its own when it's destroyed.
*
* @see [androidx.fragment.app.FragmentManager.registerFragmentLifecycleCallbacks]
*/
// no-op
}
}