diff --git a/library/src/main/java/io/constructor/core/ConstructorIo.kt b/library/src/main/java/io/constructor/core/ConstructorIo.kt index d0b87aa6..4286a04c 100755 --- a/library/src/main/java/io/constructor/core/ConstructorIo.kt +++ b/library/src/main/java/io/constructor/core/ConstructorIo.kt @@ -93,6 +93,10 @@ object ConstructorIo { } } + fun appMovedToForeground() { + preferenceHelper.getSessionId(sessionIncrementEventHandler) + } + fun getAutocompleteResults(query: String): Observable?>> { val params = mutableListOf>() configMemoryHolder.autocompleteResultCount?.entries?.forEach { diff --git a/library/src/main/java/io/constructor/data/local/PreferencesHelper.kt b/library/src/main/java/io/constructor/data/local/PreferencesHelper.kt index 5c5aed59..c1ca2f5b 100755 --- a/library/src/main/java/io/constructor/data/local/PreferencesHelper.kt +++ b/library/src/main/java/io/constructor/data/local/PreferencesHelper.kt @@ -30,13 +30,13 @@ constructor(@ApplicationContext context: Context, prefFileName: String = PREF_FI get() = preferences.getLong(SESSION_LAST_ACCESS, System.currentTimeMillis()) set(value) = preferences.edit().putLong(SESSION_LAST_ACCESS, value).apply() - fun getSessionId(sessionIncrementAction: ((String) -> Unit)? = null): Int { + fun getSessionId(sessionIncrementAction: ((String) -> Unit)? = null, forceIncrement: Boolean = false): Int { if (!preferences.contains(SESSION_ID)) { return resetSession(sessionIncrementAction) } val sessionTime = lastSessionAccess val timeDiff = System.currentTimeMillis() - sessionTime - if (timeDiff > SESSION_TIME_THRESHOLD) { + if (timeDiff > SESSION_TIME_THRESHOLD || forceIncrement) { var sessionId = preferences.getInt(SESSION_ID, 1) preferences.edit().putInt(SESSION_ID, ++sessionId).apply() sessionIncrementAction?.invoke(sessionId.toString()) diff --git a/library/src/main/java/io/constructor/ui/suggestion/SuggestionsPresenter.kt b/library/src/main/java/io/constructor/ui/suggestion/SuggestionsPresenter.kt index 0bdfecd5..a042b03f 100755 --- a/library/src/main/java/io/constructor/ui/suggestion/SuggestionsPresenter.kt +++ b/library/src/main/java/io/constructor/ui/suggestion/SuggestionsPresenter.kt @@ -1,13 +1,11 @@ package io.constructor.ui.suggestion import io.constructor.core.ConstructorIo -import io.constructor.data.ConstructorData import io.constructor.data.local.PreferencesHelper -import io.constructor.data.model.Suggestion import io.constructor.features.base.BasePresenter import io.constructor.injection.ConfigPersistent import io.constructor.util.d -import io.constructor.util.rx.scheduler.SchedulerUtils +import io.constructor.util.io2ui import io.reactivex.disposables.CompositeDisposable import io.reactivex.schedulers.Schedulers import java.util.concurrent.TimeUnit @@ -21,7 +19,7 @@ constructor(private val preferencesHelper: PreferencesHelper) : BasePresenter()).subscribe({ query -> + disposables.add(mvpView.queryChanged().debounce(300, TimeUnit.MILLISECONDS).io2ui().subscribe({ query -> getSuggestions(query) }, {error -> error.printStackTrace() @@ -46,10 +44,11 @@ constructor(private val preferencesHelper: PreferencesHelper) : BasePresenter?>>()).subscribe { data -> + disposables.add(ConstructorIo.getAutocompleteResults(text).io2ui().subscribe { data -> data.onValue { - ConstructorIo.trackSearchResultsLoaded(text, it!!.size) - mvpView.showSuggestions(it, preferencesHelper.groupsShownForFirstTerm) + it?.let { + mvpView.showSuggestions(it, preferencesHelper.groupsShownForFirstTerm) + } } data.onError { if (it is NoSuchElementException) { diff --git a/library/src/main/java/io/constructor/util/Extensions.kt b/library/src/main/java/io/constructor/util/Extensions.kt index 076aefa2..43f7aa26 100755 --- a/library/src/main/java/io/constructor/util/Extensions.kt +++ b/library/src/main/java/io/constructor/util/Extensions.kt @@ -6,6 +6,9 @@ import android.os.Parcelable import android.support.v4.content.LocalBroadcastManager import android.util.Base64 import android.util.Log +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers import java.io.Serializable import java.net.URLEncoder @@ -43,3 +46,9 @@ fun String.base64Encode(): String? { fun String.base64Decode(): String { return String(Base64.decode(this, Base64.NO_WRAP or Base64.NO_PADDING)) } + +fun Observable.io2ui(): Observable { + return compose { + it.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + } +} diff --git a/library/src/main/java/io/constructor/util/rx/scheduler/SchedulerUtils.kt b/library/src/main/java/io/constructor/util/rx/scheduler/SchedulerUtils.kt deleted file mode 100755 index 2ad83e8d..00000000 --- a/library/src/main/java/io/constructor/util/rx/scheduler/SchedulerUtils.kt +++ /dev/null @@ -1,12 +0,0 @@ -package io.constructor.util.rx.scheduler - -/** - * Created by lam on 2/6/17. - */ - -object SchedulerUtils { - - fun ioToMain(): IoMainScheduler { - return IoMainScheduler() - } -} diff --git a/library/src/test/java/io/constructor/core/ConstructorIoTest.kt b/library/src/test/java/io/constructor/core/ConstructorIoTest.kt index f88c845d..1d8982b2 100755 --- a/library/src/test/java/io/constructor/core/ConstructorIoTest.kt +++ b/library/src/test/java/io/constructor/core/ConstructorIoTest.kt @@ -44,6 +44,7 @@ class ConstructorIoTest { every { pref.id } returns "1" every { pref.getSessionId() } returns 1 every { pref.getSessionId(any()) } returns 1 + every { pref.getSessionId(any(), any()) } returns 1 constructorIo.testInit(ctx, ConstructorIoConfig("dummyKey", testCells = listOf("1" to "2", "3" to "4")), data, pref, configMemoryHolder) } diff --git a/sample/src/main/java/io/constructor/sample/MainActivity.kt b/sample/src/main/java/io/constructor/sample/MainActivity.kt index 61a7a5a5..0a963b54 100755 --- a/sample/src/main/java/io/constructor/sample/MainActivity.kt +++ b/sample/src/main/java/io/constructor/sample/MainActivity.kt @@ -12,9 +12,10 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + ConstructorIo.appMovedToForeground() button.setOnClickListener { startActivity(Intent(this, SampleActivity::class.java)) } button2.setOnClickListener { startActivity(Intent(this, SampleActivityCustom::class.java)) } - button3.setOnClickListener { ConstructorIo.trackConversion("testId", "id", 11.99) } + button3.setOnClickListener { ConstructorIo.trackConversion("testId", "id", 11.0) } button4.setOnClickListener { ConstructorIo.trackSearchResultClick("testTerm", "testId", "1") } button5.setOnClickListener { ConstructorIo.trackSearchResultsLoaded("testTerm", Random().nextInt(99) + 1) } }