Create a new model MapObject to combine the returned list of Merchants and Tellers into the suggestions to appear under the MerchantsFragment's SearchView.
This commit is contained in:
parent
aebff15033
commit
9ecac53f62
2 changed files with 49 additions and 12 deletions
|
@ -36,17 +36,20 @@ import com.jakewharton.rxbinding3.appcompat.queryTextChangeEvents
|
||||||
import cy.agorise.bitsybitshareswallet.R
|
import cy.agorise.bitsybitshareswallet.R
|
||||||
import cy.agorise.bitsybitshareswallet.database.entities.Merchant
|
import cy.agorise.bitsybitshareswallet.database.entities.Merchant
|
||||||
import cy.agorise.bitsybitshareswallet.database.entities.Teller
|
import cy.agorise.bitsybitshareswallet.database.entities.Teller
|
||||||
|
import cy.agorise.bitsybitshareswallet.models.MapObject
|
||||||
import cy.agorise.bitsybitshareswallet.utils.Constants
|
import cy.agorise.bitsybitshareswallet.utils.Constants
|
||||||
import cy.agorise.bitsybitshareswallet.utils.MerchantClusterRenderer
|
import cy.agorise.bitsybitshareswallet.utils.MerchantClusterRenderer
|
||||||
import cy.agorise.bitsybitshareswallet.utils.TellerClusterRenderer
|
import cy.agorise.bitsybitshareswallet.utils.TellerClusterRenderer
|
||||||
import cy.agorise.bitsybitshareswallet.utils.toast
|
import cy.agorise.bitsybitshareswallet.utils.toast
|
||||||
import cy.agorise.bitsybitshareswallet.viewmodels.MerchantViewModel
|
import cy.agorise.bitsybitshareswallet.viewmodels.MerchantViewModel
|
||||||
|
import io.reactivex.Observable
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.disposables.CompositeDisposable
|
import io.reactivex.disposables.CompositeDisposable
|
||||||
|
import io.reactivex.functions.BiFunction
|
||||||
import io.reactivex.schedulers.Schedulers
|
import io.reactivex.schedulers.Schedulers
|
||||||
import java.math.BigInteger
|
import java.math.BigInteger
|
||||||
import java.util.*
|
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
|
|
||||||
class MerchantsFragment : Fragment(), OnMapReadyCallback, SearchView.OnSuggestionListener {
|
class MerchantsFragment : Fragment(), OnMapReadyCallback, SearchView.OnSuggestionListener {
|
||||||
|
@ -176,34 +179,60 @@ class MerchantsFragment : Fragment(), OnMapReadyCallback, SearchView.OnSuggestio
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateSearchViewSuggestions(query: String) {
|
private fun updateSearchViewSuggestions(query: String) {
|
||||||
val merchObs = mMerchantViewModel.queryMerchants(query)
|
// Obtain observable of the list of merchants matching the query
|
||||||
|
val merchantsObs = mMerchantViewModel.queryMerchants(query)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread()).toObservable()
|
||||||
|
|
||||||
|
// Obtain observable of the list of tellers matching the query
|
||||||
val tellerObs = mMerchantViewModel.queryTellers(query)
|
val tellerObs = mMerchantViewModel.queryTellers(query)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread()).toObservable()
|
||||||
|
|
||||||
//TODO: Combine the results of both the merchants and teller queries
|
//Combine the results of both the merchants and teller queries
|
||||||
// val combined: Observable<List<Any>> = Observable.combineLatest<List<Merchant>, List<Teller>, List<Any>>(merchObs, tellerObs, BiFunction { t1: List<Merchant>, t2:List<Teller> -> Arrays.asList(t1, t2)})
|
mDisposables.add(Observable.zip(merchantsObs, tellerObs,
|
||||||
|
BiFunction<List<Merchant>, List<Teller>, List<MapObject>> { t1, t2 ->
|
||||||
|
val mapObjects = ArrayList<MapObject>()
|
||||||
|
for (merchant in t1) {
|
||||||
|
val mapObject = MapObject(
|
||||||
|
merchant._id,
|
||||||
|
merchant.name,
|
||||||
|
merchant.address,
|
||||||
|
1
|
||||||
|
)
|
||||||
|
mapObjects.add(mapObject)
|
||||||
|
}
|
||||||
|
|
||||||
merchObs.subscribe({list ->
|
for (teller in t2) {
|
||||||
|
val mapObject = MapObject(
|
||||||
|
teller._id,
|
||||||
|
teller.gt_name,
|
||||||
|
teller.address,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
mapObjects.add(mapObject)
|
||||||
|
}
|
||||||
|
|
||||||
|
mapObjects
|
||||||
|
}
|
||||||
|
).subscribe({mapObjects ->
|
||||||
run {
|
run {
|
||||||
Log.d(TAG, "list with ${list.size} elements")
|
Log.d(TAG, "list with ${mapObjects.size} elements")
|
||||||
val cursor = MatrixCursor(
|
val cursor = MatrixCursor(
|
||||||
arrayOf(
|
arrayOf(
|
||||||
SUGGEST_COLUMN_ID, SUGGEST_COLUMN_NAME,
|
SUGGEST_COLUMN_ID, SUGGEST_COLUMN_NAME,
|
||||||
SUGGEST_COLUMN_ADDRESS, SUGGEST_COLUMN_IS_MERCHANT, SUGGEST_COLUMN_IMAGE_RESOURCE
|
SUGGEST_COLUMN_ADDRESS, SUGGEST_COLUMN_IS_MERCHANT, SUGGEST_COLUMN_IMAGE_RESOURCE
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
for (item in list) {
|
for (mapObject in mapObjects) {
|
||||||
cursor.addRow(arrayOf(BigInteger(item._id, 16).toLong(), item.name, item.address, 1, R.drawable.ic_merchant_pin))
|
cursor.addRow(arrayOf(BigInteger(mapObject._id, 16).toLong(), mapObject.name, mapObject.address,
|
||||||
|
mapObject.isMerchant, if (mapObject.isMerchant == 1) R.drawable.ic_merchant_pin else R.drawable.ic_teller_pin))
|
||||||
}
|
}
|
||||||
mSearchView?.suggestionsAdapter?.changeCursor(cursor)
|
mSearchView?.suggestionsAdapter?.changeCursor(cursor)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{error -> Log.e(TAG, "Error while retrieving autocomplete suggestions. Msg: ${error}")})
|
{error -> Log.e(TAG, "Error while retrieving autocomplete suggestions. Msg: $error")})
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSuggestionSelect(position: Int): Boolean {
|
override fun onSuggestionSelect(position: Int): Boolean {
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package cy.agorise.bitsybitshareswallet.models
|
||||||
|
|
||||||
|
class MapObject(
|
||||||
|
val _id: String,
|
||||||
|
val name: String,
|
||||||
|
val address: String?,
|
||||||
|
val isMerchant: Int
|
||||||
|
)
|
Loading…
Reference in a new issue