ref: f2cd7e3794bbac9f3a507008e3dddb3a10ae783f
app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouriteEditRowAdapter.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
package ml.adamsprogs.bimba.models.adapters import android.support.v7.widget.RecyclerView import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import kotlinx.coroutines.experimental.DefaultDispatcher import kotlinx.coroutines.experimental.android.UI import kotlinx.coroutines.experimental.launch import kotlinx.coroutines.experimental.withContext import ml.adamsprogs.bimba.ProviderProxy import ml.adamsprogs.bimba.R import ml.adamsprogs.bimba.collections.FavouriteStorage import ml.adamsprogs.bimba.models.Favourite import ml.adamsprogs.bimba.models.Plate import ml.adamsprogs.bimba.models.StopSegment class FavouriteEditRowAdapter(private var favourite: Favourite) : RecyclerView.Adapter<FavouriteEditRowAdapter.ViewHolder>() { private val segments = HashMap<String, StopSegment>() private val providerProxy = ProviderProxy() init { launch(UI) { withContext(DefaultDispatcher) { favourite.segments.forEach { segments[it.stop] = providerProxy.fillStopSegment(it) ?: it } } this@FavouriteEditRowAdapter.notifyDataSetChanged() } } override fun getItemCount(): Int { return segments.flatMap { it.value.plates ?: emptyList<Plate.ID>() }.size } override fun onBindViewHolder(holder: ViewHolder, position: Int) { launch(UI) { val plates = segments.flatMap { it.value.plates ?: emptyList<Plate.ID>() } val favourites = FavouriteStorage.getFavouriteStorage() val id = plates.sortedBy { "${it.line}${it.stop}" }[position] val favouriteElement = withContext(DefaultDispatcher) { providerProxy.getStopName(id.stop).let { "${it ?: ""} (${id.stop}):\n${id.line} → ${id.headsign}" } } holder.rowTextView.text = favouriteElement holder.deleteButton.setOnClickListener { launch(UI) { favourite.segments.clear() favourite.segments.addAll(segments.map { it.value }) favourites.delete(favourite.name, id) favourite = favourites.favourites[favourite.name]!! notifyDataSetChanged() } } } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val context = parent.context val inflater = LayoutInflater.from(context) val rowView = inflater.inflate(R.layout.row_favourite_edit, parent, false) return ViewHolder(rowView) } inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val rowTextView: TextView = itemView.findViewById(R.id.favourite_edit_row) val deleteButton: ImageView = itemView.findViewById(R.id.favourite_edit_delete) } } |