Skip to content

Commit 4874c0c

Browse files
authored
Split tracking functions for easier consumption (#49)
* Split tracking functions into internal and external functions * Updated code * Updates
1 parent cd4f258 commit 4874c0c

File tree

4 files changed

+100
-62
lines changed

4 files changed

+100
-62
lines changed

library/src/main/java/io/constructor/core/ConstructorIo.kt

Lines changed: 67 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@ import io.constructor.injection.component.DaggerAppComponent
1414
import io.constructor.injection.module.AppModule
1515
import io.constructor.injection.module.NetworkModule
1616
import io.constructor.util.broadcastIntent
17+
import io.constructor.util.e
1718
import io.constructor.util.urlEncode
1819
import io.reactivex.Completable
1920
import io.reactivex.Observable
21+
import io.reactivex.disposables.CompositeDisposable
2022
import io.reactivex.schedulers.Schedulers
2123
import java.util.*
2224

@@ -29,7 +31,7 @@ object ConstructorIo {
2931
private lateinit var preferenceHelper: PreferencesHelper
3032
private lateinit var configMemoryHolder: ConfigMemoryHolder
3133
private lateinit var context: Context
32-
private var broadcast = true
34+
private var disposable = CompositeDisposable()
3335

3436
var userId: String?
3537
get() = configMemoryHolder.userId
@@ -45,7 +47,7 @@ object ConstructorIo {
4547
}
4648

4749
private var sessionIncrementHandler: (String) -> Unit = {
48-
trackSessionStartInternal()
50+
trackSessionStart()
4951
}
5052

5153
fun init(context: Context?, constructorIoConfig: ConstructorIoConfig) {
@@ -84,7 +86,6 @@ object ConstructorIo {
8486
this.dataManager = dataManager
8587
this.preferenceHelper = preferenceHelper
8688
this.configMemoryHolder = configMemoryHolder
87-
this.broadcast = false
8889
}
8990

9091
fun appMovedToForeground() {
@@ -121,8 +122,14 @@ object ConstructorIo {
121122
}
122123

123124
/**
124-
* Tracks Session Start Events
125+
* Tracks session start events
125126
*/
127+
private fun trackSessionStart() {
128+
var completable = trackSessionStartInternal()
129+
disposable.add(completable.subscribeOn(Schedulers.io()).subscribe({}, {
130+
t -> e("Session Start event error: ${t.message}")
131+
}))
132+
}
126133
internal fun trackSessionStartInternal (): Completable {
127134
return dataManager.trackSessionStart(
128135
arrayOf(Constants.QueryConstants.ACTION to Constants.QueryValues.EVENT_SESSION_START)
@@ -132,7 +139,13 @@ object ConstructorIo {
132139
/**
133140
* Tracks input focus events
134141
*/
135-
fun trackInputFocus(term: String?): Completable {
142+
fun trackInputFocus(term: String?) {
143+
var completable = trackInputFocusInternal(term)
144+
disposable.add(completable.subscribeOn(Schedulers.io()).subscribe({}, {
145+
t -> e("Input Focus event error: ${t.message}")
146+
}))
147+
}
148+
internal fun trackInputFocusInternal(term: String?): Completable {
136149
preferenceHelper.getSessionId(sessionIncrementHandler)
137150
return dataManager.trackInputFocus(term, arrayOf(
138151
Constants.QueryConstants.ACTION to Constants.QueryValues.EVENT_INPUT_FOCUS
@@ -142,53 +155,59 @@ object ConstructorIo {
142155
/**
143156
* Tracks autocomplete select events
144157
*/
145-
fun trackAutocompleteSelect(searchTerm: String, originalQuery: String, sectionName: String, group: Group? = null, resultID: String? = null): Completable {
158+
fun trackAutocompleteSelect(searchTerm: String, originalQuery: String, sectionName: String, group: Group? = null, resultID: String? = null) {
159+
var completable = trackAutocompleteSelectInternal(searchTerm, originalQuery, sectionName, group, resultID);
160+
disposable.add(completable.subscribeOn(Schedulers.io()).subscribe({
161+
context.broadcastIntent(Constants.EVENT_QUERY_SENT, Constants.EXTRA_TERM to searchTerm)
162+
}, {
163+
t -> e("Autocomplete Select error: ${t.message}")
164+
}))
165+
}
166+
internal fun trackAutocompleteSelectInternal(searchTerm: String, originalQuery: String, sectionName: String, group: Group? = null, resultID: String? = null): Completable {
146167
preferenceHelper.getSessionId(sessionIncrementHandler)
147168
val encodedParams: ArrayList<Pair<String, String>> = arrayListOf()
148169
group?.groupId?.let { encodedParams.add(Constants.QueryConstants.GROUP_ID.urlEncode() to it) }
149170
group?.displayName?.let { encodedParams.add(Constants.QueryConstants.GROUP_DISPLAY_NAME.urlEncode() to it.urlEncode()) }
150171
resultID?.let { encodedParams.add(Constants.QueryConstants.RESULT_ID.urlEncode() to it.urlEncode()) }
151-
val completable = dataManager.trackAutocompleteSelect(searchTerm, arrayOf(
172+
return dataManager.trackAutocompleteSelect(searchTerm, arrayOf(
152173
Constants.QueryConstants.AUTOCOMPLETE_SECTION to sectionName,
153174
Constants.QueryConstants.ORIGINAL_QUERY to originalQuery,
154175
Constants.QueryConstants.EVENT to Constants.QueryValues.EVENT_CLICK
155-
), encodedParams.toTypedArray()).subscribeOn(Schedulers.io())
156-
157-
if (this.broadcast) {
158-
completable.subscribeOn(Schedulers.io()).subscribe {
159-
context.broadcastIntent(Constants.EVENT_QUERY_SENT, Constants.EXTRA_TERM to searchTerm)
160-
}
161-
}
162-
163-
return completable
176+
), encodedParams.toTypedArray())
164177
}
165178

166179
/**
167180
* Tracks search submit events
168181
*/
169-
fun trackSearchSubmit(searchTerm: String, originalQuery: String, group: Group?): Completable {
182+
fun trackSearchSubmit(searchTerm: String, originalQuery: String, group: Group?) {
183+
var completable = trackSearchSubmitInternal(searchTerm, originalQuery, group)
184+
disposable.add(completable.subscribeOn(Schedulers.io()).subscribe({
185+
context.broadcastIntent(Constants.EVENT_QUERY_SENT, Constants.EXTRA_TERM to searchTerm)
186+
}, {
187+
t -> e("Search Submit error: ${t.message}")
188+
}))
189+
}
190+
internal fun trackSearchSubmitInternal(searchTerm: String, originalQuery: String, group: Group?): Completable {
170191
preferenceHelper.getSessionId(sessionIncrementHandler)
171192
val encodedParams: ArrayList<Pair<String, String>> = arrayListOf()
172193
group?.groupId?.let { encodedParams.add(Constants.QueryConstants.GROUP_ID.urlEncode() to it) }
173194
group?.displayName?.let { encodedParams.add(Constants.QueryConstants.GROUP_DISPLAY_NAME.urlEncode() to it.urlEncode()) }
174-
val completable = dataManager.trackSearchSubmit(searchTerm, arrayOf(
195+
return dataManager.trackSearchSubmit(searchTerm, arrayOf(
175196
Constants.QueryConstants.ORIGINAL_QUERY to originalQuery,
176197
Constants.QueryConstants.EVENT to Constants.QueryValues.EVENT_SEARCH
177198
), encodedParams.toTypedArray())
178-
179-
if (this.broadcast) {
180-
completable.subscribeOn(Schedulers.io()).subscribe {
181-
context.broadcastIntent(Constants.EVENT_QUERY_SENT, Constants.EXTRA_TERM to searchTerm)
182-
}
183-
}
184-
185-
return completable
186199
}
187200

188201
/**
189202
* Tracks search results loaded (a.k.a. search results viewed) events
190203
*/
191-
fun trackSearchResultsLoaded(term: String, resultCount: Int): Completable {
204+
fun trackSearchResultsLoaded(term: String, resultCount: Int) {
205+
var completable = trackSearchResultsLoadedInternal(term, resultCount)
206+
disposable.add(completable.subscribeOn(Schedulers.io()).subscribe({}, {
207+
t -> e("Search Results Loaded error: ${t.message}")
208+
}))
209+
}
210+
internal fun trackSearchResultsLoadedInternal(term: String, resultCount: Int): Completable {
192211
preferenceHelper.getSessionId(sessionIncrementHandler)
193212
return dataManager.trackSearchResultsLoaded(term, resultCount, arrayOf(
194213
Constants.QueryConstants.ACTION to Constants.QueryValues.EVENT_SEARCH_RESULTS
@@ -198,7 +217,13 @@ object ConstructorIo {
198217
/**
199218
* Tracks search result click events
200219
*/
201-
fun trackSearchResultClick(itemName: String, customerId: String, searchTerm: String = Constants.QueryConstants.TERM_UNKNOWN, sectionName: String? = null, resultID: String? = null): Completable {
220+
fun trackSearchResultClick(itemName: String, customerId: String, searchTerm: String = Constants.QueryConstants.TERM_UNKNOWN, sectionName: String? = null, resultID: String? = null) {
221+
var completable = trackSearchResultClickInternal(itemName, customerId, searchTerm, sectionName, resultID)
222+
disposable.add(completable.subscribeOn(Schedulers.io()).subscribe({}, {
223+
t -> e("Search Result Click error: ${t.message}")
224+
}))
225+
}
226+
internal fun trackSearchResultClickInternal(itemName: String, customerId: String, searchTerm: String = Constants.QueryConstants.TERM_UNKNOWN, sectionName: String? = null, resultID: String? = null): Completable {
202227
preferenceHelper.getSessionId(sessionIncrementHandler)
203228
val encodedParams: ArrayList<Pair<String, String>> = arrayListOf()
204229
resultID?.let { encodedParams.add(Constants.QueryConstants.RESULT_ID.urlEncode() to it.urlEncode()) }
@@ -212,7 +237,13 @@ object ConstructorIo {
212237
/**
213238
* Tracks conversion (a.k.a add to cart) events
214239
*/
215-
fun trackConversion(itemName: String, customerId: String, revenue: Double?, searchTerm: String = Constants.QueryConstants.TERM_UNKNOWN, sectionName: String? = null): Completable {
240+
fun trackConversion(itemName: String, customerId: String, revenue: Double?, searchTerm: String = Constants.QueryConstants.TERM_UNKNOWN, sectionName: String? = null) {
241+
var completable = trackConversionInternal(itemName, customerId, revenue, searchTerm, sectionName)
242+
disposable.add(completable.subscribeOn(Schedulers.io()).subscribe({}, {
243+
t -> e("Conversion error: ${t.message}")
244+
}))
245+
}
246+
internal fun trackConversionInternal(itemName: String, customerId: String, revenue: Double?, searchTerm: String = Constants.QueryConstants.TERM_UNKNOWN, sectionName: String? = null): Completable {
216247
preferenceHelper.getSessionId(sessionIncrementHandler)
217248
val revenueString = revenue?.let { "%.2f".format(revenue) }
218249
return dataManager.trackConversion(searchTerm, itemName, customerId, revenueString, arrayOf(
@@ -223,12 +254,17 @@ object ConstructorIo {
223254
/**
224255
* Tracks purchase events
225256
*/
226-
fun trackPurchase(clientIds: Array<String>, revenue: Double?, orderID: String, sectionName: String? = null): Completable {
257+
fun trackPurchase(clientIds: Array<String>, revenue: Double?, orderID: String, sectionName: String? = null) {
258+
var completable = trackPurchaseInternal(clientIds, revenue, orderID, sectionName)
259+
disposable.add(completable.subscribeOn(Schedulers.io()).subscribe({}, {
260+
t -> e("Purchase error: ${t.message}")
261+
}))
262+
}
263+
internal fun trackPurchaseInternal(clientIds: Array<String>, revenue: Double?, orderID: String, sectionName: String? = null): Completable {
227264
preferenceHelper.getSessionId(sessionIncrementHandler)
228265
val sectionNameParam = sectionName ?: preferenceHelper.defaultItemSection
229266
val revenueString = revenue?.let { "%.2f".format(revenue) }
230267
val params = mutableListOf(Constants.QueryConstants.AUTOCOMPLETE_SECTION to sectionNameParam)
231268
return dataManager.trackPurchase(clientIds.toList(), revenueString, orderID, params.toTypedArray())
232269
}
233-
234270
}

library/src/main/java/io/constructor/util/Extensions.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ fun String.urlEncode() = URLEncoder.encode(this, "UTF-8").replace("+", "%20")
3737

3838
fun Any.d(msg: String) = Log.d(this::class.qualifiedName, msg)
3939

40+
fun Any.e(msg: String) = Log.e(this::class.qualifiedName, msg)
41+
4042
fun String.base64Encode(): String? {
4143
return String(Base64.encode(toByteArray(), Base64.NO_WRAP or Base64.NO_PADDING))
4244
}

0 commit comments

Comments
 (0)