ref: 2919df3a7321d4e904d6ed9cdd1c3c8c32a5ef6c
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 72 73 74 75 76 77 78 |
package ml.adamsprogs.bimba.departures import android.content.Context import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.view.View import android.widget.Toast 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) if (departuresStream == null) { // todo show empty state Toast.makeText(this@DeparturesActivity as Context, "Couldn't get response", Toast.LENGTH_SHORT).show() } else { 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 } } |