Advertisement
alpine12

Adapter

Mar 18th, 2020
1,011
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 4.94 KB | None | 0 0
  1. import android.content.Context
  2. import android.graphics.Typeface
  3. import android.text.style.StyleSpan
  4. import android.util.Log
  5. import android.view.LayoutInflater
  6. import android.view.View
  7. import android.view.ViewGroup
  8. import android.widget.Filter
  9. import android.widget.Filterable
  10. import androidx.recyclerview.widget.RecyclerView
  11. import com.google.android.gms.maps.model.LatLng
  12. import com.google.android.gms.tasks.Tasks
  13. import com.google.android.libraries.places.api.model.AutocompleteSessionToken
  14. import com.google.android.libraries.places.api.net.FindAutocompletePredictionsRequest
  15. import com.google.android.libraries.places.api.net.PlacesClient
  16. import com.joyn.joynprototype.R
  17. import kotlinx.android.synthetic.main.list_item_place_map_autocomplete.view.*
  18. import java.util.concurrent.ExecutionException
  19. import java.util.concurrent.TimeUnit
  20. import java.util.concurrent.TimeoutException
  21.  
  22. class PlacesAutoCompleteAdapter(
  23.     private var context: Context,
  24.     private var placesClient: PlacesClient,
  25.     private var latLang: LatLng?
  26. ) :
  27.     RecyclerView.Adapter<PlacesAutoCompleteAdapter.PredictionHolder>(), Filterable {
  28.  
  29.     var mResultList: List<PlacesAutoComplete> = ArrayList()
  30.  
  31.     override fun getFilter(): Filter {
  32.         return object : Filter() {
  33.             override fun performFiltering(constraint: CharSequence?): FilterResults {
  34.                 val result = FilterResults()
  35.                 Log.d("Filter", "Perform ${constraint.toString()}")
  36.                 // Skip the autocomplete query if no constraints are given.
  37.                 if (constraint != null) {
  38.  
  39.                     mResultList = getPrediction(constraint)
  40.                     result.values = mResultList
  41.                     result.count = mResultList.size
  42.                     Log.d("Filter", "Filter $constraint dan ${mResultList.size}")
  43.                 }
  44.                 return result
  45.             }
  46.  
  47.             override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
  48.                 if (results != null && results.count > 0) {
  49.                     notifyDataSetChanged()
  50.                 } else {
  51.  
  52.                 }
  53.             }
  54.         }
  55.     }
  56.  
  57.     private fun getPrediction(constraint: CharSequence): List<PlacesAutoComplete> {
  58.  
  59.         Log.d("getPrediction", "latlang $latLang")
  60.         val resultList = ArrayList<PlacesAutoComplete>()
  61.         val token = AutocompleteSessionToken.newInstance()
  62.         val request = FindAutocompletePredictionsRequest.builder()
  63.             .setOrigin(latLang)
  64.             .setCountry("ID")
  65.             .setSessionToken(token)
  66.             .setQuery(constraint.toString())
  67.             .build()
  68.  
  69.         var autoCompletePrediction = placesClient.findAutocompletePredictions(request)
  70.  
  71.         try {
  72.             Tasks.await(autoCompletePrediction, 60, TimeUnit.SECONDS)
  73.         } catch (e: ExecutionException) {
  74.             e.printStackTrace()
  75.         } catch (e: InterruptedException) {
  76.             e.printStackTrace()
  77.         } catch (e: TimeoutException) {
  78.             e.printStackTrace()
  79.         }
  80.  
  81.         if (autoCompletePrediction.isSuccessful) {
  82.             var findAutoCompletePredictionResponse = autoCompletePrediction.getResult()
  83.             if (findAutoCompletePredictionResponse != null) {
  84.                 for (prediction in findAutoCompletePredictionResponse.autocompletePredictions) {
  85.                     Log.d(
  86.                         "Prediction",
  87.                         " ${prediction.getSecondaryText(StyleSpan(Typeface.NORMAL)).toString()} distance = ${prediction.distanceMeters.toString()}"
  88.                     )
  89.                     resultList.add(
  90.                         PlacesAutoComplete(
  91.                             prediction.placeId,
  92.                             prediction.getPrimaryText(StyleSpan(Typeface.NORMAL)),
  93.                             prediction.getFullText(StyleSpan(Typeface.BOLD))
  94.                         )
  95.                     )
  96.                 }
  97.                 return resultList
  98.             }
  99.         }
  100.         return resultList
  101.     }
  102.  
  103.     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PredictionHolder {
  104.         val view = LayoutInflater.from(context)
  105.             .inflate(R.layout.list_item_place_map_autocomplete, parent, false)
  106.         return PredictionHolder(view)
  107.     }
  108.  
  109.     override fun getItemCount(): Int {
  110.         return mResultList.size
  111.     }
  112.  
  113.     override fun onBindViewHolder(holder: PredictionHolder, position: Int) {
  114.         holder.bind(mResultList[position])
  115.     }
  116.  
  117.     class PredictionHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
  118.         fun bind(item: PlacesAutoComplete) {
  119.             with(itemView) {
  120.                 place_address.text = item.address
  121.                 place_area.text = item.area
  122.             }
  123.         }
  124.     }
  125.  
  126.     data class PlacesAutoComplete(
  127.         var placeId: CharSequence? = null,
  128.         var area: CharSequence? = null,
  129.         var address: CharSequence? = null
  130.     )
  131.  
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement