@@ -14,9 +14,11 @@ import io.constructor.injection.component.DaggerAppComponent
1414import io.constructor.injection.module.AppModule
1515import io.constructor.injection.module.NetworkModule
1616import io.constructor.util.broadcastIntent
17+ import io.constructor.util.e
1718import io.constructor.util.urlEncode
1819import io.reactivex.Completable
1920import io.reactivex.Observable
21+ import io.reactivex.disposables.CompositeDisposable
2022import io.reactivex.schedulers.Schedulers
2123import 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}
0 commit comments