meili-epfl/Meili

View on GitHub
app/src/main/java/com/github/epfl/meili/profile/favoritepois/FavoritePoisActivity.kt

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
package com.github.epfl.meili.profile.favoritepois

import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import com.github.epfl.meili.R
import com.github.epfl.meili.database.FirestoreDatabase
import com.github.epfl.meili.map.MapActivity
import com.github.epfl.meili.poi.PointOfInterestStatus
import com.github.epfl.meili.models.PointOfInterest
import com.github.epfl.meili.poi.PoiInfoActivity
import com.github.epfl.meili.profile.ProfileActivity.Companion.USER_KEY
import com.github.epfl.meili.util.MeiliViewModel
import com.github.epfl.meili.util.RecyclerViewInitializer.initRecyclerView


class FavoritePoisActivity : AppCompatActivity() {
    companion object {
        private const val ACTIVITY_TITLE = "Favorite POIs"
        const val DB_PATH = "poi-favorite/%s/poi-favorite"
    }

    private val recyclerAdapter = FavoritePoisRecyclerAdapter()
    private lateinit var viewModel: MeiliViewModel<PointOfInterest>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_favorite_pois)

        title = ACTIVITY_TITLE

        val userKey = intent.getStringExtra(USER_KEY)

        initViewModel(userKey!!)
        initRecyclerView(
            recyclerAdapter,
            findViewById(R.id.favorite_pois_recycler_view),
            this
        )
    }

    override fun onDestroy() {
        super.onDestroy()
        viewModel.onDestroy()
    }

    fun onFavoritePoisButtonClick(view: View) {
        startActivity(
            Intent(this, PoiInfoActivity::class.java).putExtra(
                MapActivity.POI_KEY,
                viewModel.getElements().value?.get((view.findViewById(R.id.poi_id) as TextView).text.toString())
            )
                .putExtra(MapActivity.POI_STATUS_KEY, PointOfInterestStatus.VISIBLE)
        )
    }

    @Suppress("UNCHECKED_CAST")
    private fun initViewModel(userKey: String) {
        viewModel =
            ViewModelProvider(this).get(MeiliViewModel::class.java) as MeiliViewModel<PointOfInterest>

        viewModel.initDatabase(
            FirestoreDatabase(
                String.format(DB_PATH, userKey),
                PointOfInterest::class.java
            )
        )
        viewModel.getElements().observe(this, { map ->
            favoritePoisMapListener(map)
        })
    }

    private fun favoritePoisMapListener(map: Map<String, PointOfInterest>) {
        recyclerAdapter.submitList(map.toList())
        recyclerAdapter.notifyDataSetChanged()
    }
}