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:
parent
a6e65aee19
commit
bfddd11991
2 changed files with 39 additions and 24 deletions
|
@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue