1
0
Fork 0
mirror of https://github.com/MatomoCamp/matomocamp-companion-android.git synced 2024-09-19 16:13:46 +02:00

Don't share the ViewModel between PersonInfoActivity and PersonInfoListFragment; get the year from ScheduleDao directly

This commit is contained in:
Christophe Beyls 2022-01-22 15:45:51 +01:00
parent a6e65aee19
commit bfddd11991
2 changed files with 39 additions and 24 deletions

View file

@ -4,55 +4,59 @@ import android.content.ActivityNotFoundException
import android.net.Uri
import android.os.Bundle
import android.view.View
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.browser.customtabs.CustomTabsIntent
import androidx.fragment.app.add
import androidx.fragment.app.commit
import androidx.lifecycle.lifecycleScope
import be.digitalia.fosdem.R
import be.digitalia.fosdem.db.ScheduleDao
import be.digitalia.fosdem.fragments.PersonInfoListFragment
import be.digitalia.fosdem.model.Person
import be.digitalia.fosdem.utils.configureToolbarColors
import be.digitalia.fosdem.viewmodels.PersonInfoViewModel
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class PersonInfoActivity : AppCompatActivity(R.layout.person_info) {
private val viewModel: PersonInfoViewModel by viewModels()
@Inject
lateinit var scheduleDao: ScheduleDao
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setSupportActionBar(findViewById(R.id.toolbar))
val person: Person = intent.getParcelableExtra(EXTRA_PERSON)!!
viewModel.setPerson(person)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
title = person.name
findViewById<View>(R.id.fab).setOnClickListener {
// Look for the first non-placeholder event in the paged list
val statusEvent = viewModel.events.value?.firstOrNull { it != null }
if (statusEvent != null) {
val url = person.getUrl(statusEvent.event.day.date.year)
if (url != null) {
try {
CustomTabsIntent.Builder()
.configureToolbarColors(this, R.color.light_color_primary)
.setStartAnimations(this, R.anim.slide_in_right, R.anim.slide_out_left)
.setExitAnimations(this, R.anim.slide_in_left, R.anim.slide_out_right)
.build()
.launchUrl(this, Uri.parse(url))
} catch (ignore: ActivityNotFoundException) {
}
}
}
openPersonDetails(person)
}
if (savedInstanceState == null) {
supportFragmentManager.commit {
add<PersonInfoListFragment>(R.id.content)
add<PersonInfoListFragment>(R.id.content,
args = PersonInfoListFragment.createArguments(person))
}
}
}
private fun openPersonDetails(person: Person) {
val context = this
lifecycleScope.launchWhenStarted {
person.getUrl(scheduleDao.getYear())?.let { url ->
try {
CustomTabsIntent.Builder()
.configureToolbarColors(context, R.color.light_color_primary)
.setStartAnimations(context, R.anim.slide_in_right, R.anim.slide_out_left)
.setExitAnimations(context, R.anim.slide_in_left, R.anim.slide_out_right)
.build()
.launchUrl(context, Uri.parse(url))
} catch (ignore: ActivityNotFoundException) {
}
}
}
}

View file

@ -5,13 +5,14 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.ConcatAdapter
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import be.digitalia.fosdem.R
import be.digitalia.fosdem.adapters.EventsAdapter
import be.digitalia.fosdem.api.FosdemApi
import be.digitalia.fosdem.model.Person
import be.digitalia.fosdem.viewmodels.PersonInfoViewModel
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@ -21,12 +22,14 @@ class PersonInfoListFragment : Fragment(R.layout.recyclerview) {
@Inject
lateinit var api: FosdemApi
// Fetch data from parent Activity's ViewModel
private val viewModel: PersonInfoViewModel by activityViewModels()
private val viewModel: PersonInfoViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val person: Person = requireArguments().getParcelable(ARG_PERSON)!!
viewModel.setPerson(person)
val adapter = EventsAdapter(view.context)
val holder = RecyclerViewViewHolder(view).apply {
recyclerView.apply {
@ -70,4 +73,12 @@ class PersonInfoListFragment : Fragment(R.layout.recyclerview) {
private class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
}
companion object {
private const val ARG_PERSON = "person"
fun createArguments(person: Person) = Bundle(1).apply {
putParcelable(ARG_PERSON, person)
}
}
}