1
1
package com.sofakingforever.analytics
2
2
3
- import android.content.Context
4
- import android.util.Log
5
3
import com.sofakingforever.analytics.events.base.Event
6
4
import com.sofakingforever.analytics.exceptions.EventNotTrackedException
5
+ import com.sofakingforever.analytics.version.VersionChecker
7
6
8
7
/* *
9
8
* The *Analytics* class is in charge of tracking any *Event* implementation.
@@ -13,55 +12,74 @@ import com.sofakingforever.analytics.exceptions.EventNotTrackedException
13
12
*
14
13
* @constructor create an instance of the *Analytics* class
15
14
*/
16
- class Analytics (context : Context , private vararg val dispatchers : AnalyticsDispatcher ) {
15
+ class Analytics (val settings : AnalyticsSettings , private vararg val dispatchers : AnalyticsDispatcher ) {
17
16
17
+ var exceptionHandler: ExceptionHandler ? = null
18
18
19
- private val enabledKitMap: EnabledMap <AnalyticsKit > = EnabledMap ()
20
- private val enabledDispatcherMap: EnabledMap <String > = EnabledMap ()
19
+ init {
21
20
22
- val settings: AnalyticsSettings = AnalyticsSettings ()
21
+ // check for new library version if enabled
22
+ if (settings.checkForUpdates) VersionChecker .onCheckVersion()
23
23
24
- init {
24
+ // init all dispatchers
25
25
dispatchers.forEach { dispatcher ->
26
26
if (dispatcher.init ) {
27
- dispatcher.initDispatcher(context.applicationContext)
27
+ dispatcher.initDispatcher(settings. context.applicationContext)
28
28
}
29
29
}
30
+
30
31
}
31
32
33
+
32
34
/* *
33
35
* Call this to track one or more *Events*
34
36
*/
35
37
fun track (vararg events : Event ) {
36
38
37
39
if (settings.isAnalyticsEnabled.not ()) return
38
40
39
- events.forEach {
41
+
42
+ events.forEach { event ->
43
+
40
44
dispatchers.forEach { dispatcher ->
41
45
42
- if (enabledKitMap.isDisabled(dispatcher.kit)) {
43
- return
44
- }
45
- if (enabledDispatcherMap.isDisabled(dispatcher.dispatcherName)) {
46
- return
47
- }
46
+ if (settings.enabledKits.isDisabled(dispatcher.kit)) return
47
+
48
+ if (settings.enabledDispatchers.isDisabled(dispatcher.dispatcherName)) return
49
+
48
50
try {
49
- dispatcher.track(it )
51
+ dispatcher.track(event )
50
52
} catch (e: Exception ) {
51
- settings. exceptionHandler?.onException(EventNotTrackedException (dispatcher, it , e))
53
+ exceptionHandler?.onException(EventNotTrackedException (dispatcher, event , e))
52
54
}
53
55
}
54
56
55
57
56
58
}
57
59
}
58
60
61
+ /* *
62
+ * Set Kit as enabled or disabled for future event dispatches
63
+ */
59
64
fun setKitEnabled (kit : AnalyticsKit , enabled : Boolean ) {
60
- enabledKitMap [kit] = enabled
65
+ settings.enabledKits [kit] = enabled
61
66
}
62
67
68
+ /* *
69
+ * Set Dispatcher as enabled or disabled for future event dispatches
70
+ */
63
71
fun setDispatcherEnabled (dispatcherName : String , enabled : Boolean ) {
64
- enabledDispatcherMap[dispatcherName] = enabled
72
+ settings.enabledDispatchers[dispatcherName] = enabled
73
+ }
74
+
75
+ /* *
76
+ * Just an exception callback to log/monitor exceptions,
77
+ * thrown by the *Analytics* class or any of its dispatchers.
78
+ */
79
+ interface ExceptionHandler {
80
+
81
+ fun onException (e : Exception )
82
+
65
83
}
66
84
67
85
}
0 commit comments