Bimba.git

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)
    }
}