Bimba.git

ref: 6f38b586f615a021d17d794b1517d692eedb5be7

app/src/main/java/ml/adamsprogs/bimba/departures/DeparturesActivity.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
package ml.adamsprogs.bimba.departures

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.core.view.WindowCompat
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import ml.adamsprogs.bimba.api.*
import ml.adamsprogs.bimba.databinding.ActivityDeparturesBinding
import ml.adamsprogs.bimba.search.BimbaResultsAdapter
import java.io.InputStream

class DeparturesActivity : AppCompatActivity() {
	private var _binding: ActivityDeparturesBinding? = null

	private val binding get() = _binding!!

	private lateinit var adapter: BimbaDeparturesAdapter

	override fun onCreate(savedInstanceState: Bundle?) {
		super.onCreate(savedInstanceState)
		_binding = ActivityDeparturesBinding.inflate(layoutInflater)
		setContentView(binding.root)

//		setSupportActionBar(binding.departuresAppBar)
//		supportActionBar?.title = "Półwiejska"
		binding.collapsingLayout.title = intent?.extras?.getString("name")
		binding.departuresRecycler.layoutManager = LinearLayoutManager(this)
		adapter = BimbaDeparturesAdapter(layoutInflater, this, listOf()) {
			Log.v("Departure", "clicked: $it")
			// todo show bottom sheet
		}
		binding.departuresRecycler.adapter = adapter
		WindowCompat.setDecorFitsSystemWindows(window, false)

		// todo check every 30s

		MainScope().launch {
			intent?.extras?.getString("code")?.let {
				val departuresStream = getDepartures(it, null)
				updateItems(unmarshallDepartureResponse(departuresStream))
			}
		}
	}

	private suspend fun unmarshallDepartureResponse(stream: InputStream): DeparturesSuccess {
		return withContext(Dispatchers.IO) {
			when (val response = DeparturesResponse.unmarshall(stream)) {
				is DeparturesSuccess -> {
					return@withContext response
				}
				else -> {
					TODO("Error response")
				}
			}
		}
	}

	private fun updateItems(response: DeparturesSuccess) {
		binding.departuresProgress.visibility = View.GONE
		binding.departuresRecycler.visibility = View.VISIBLE
		adapter.update(response.departures)
		// todo alerts
		// todo stop info
	}
}