Make CircularViewModel load LiveData from Room

This commit is contained in:
2019-09-22 20:38:42 +02:00
committed by Matte23
parent 799cdbfad3
commit 8b7f1fcaa4
6 changed files with 31 additions and 18 deletions

View File

@@ -46,7 +46,7 @@ import net.underdesk.circolapp.fragments.NewReminderFragment
class CircularLetterAdapter(
private val circulars: List<Circular>,
private var circulars: List<Circular>,
private val adapterCallback: AdapterCallback
) :
RecyclerView.Adapter<CircularLetterAdapter.CircularLetterViewHolder>() {
@@ -208,6 +208,11 @@ class CircularLetterAdapter(
}
}
fun changeDataSet(newCirculars: List<Circular>) {
circulars = newCirculars
notifyDataSetChanged()
}
override fun getItemCount() = circulars.size
interface AdapterCallback {

View File

@@ -26,6 +26,9 @@ interface CircularDao {
@Query("SELECT * FROM circulars ORDER BY id DESC")
fun getCirculars(): List<Circular>
@Query("SELECT * FROM circulars ORDER BY id DESC")
fun getLiveCirculars(): LiveData<List<Circular>>
@Query("SELECT * FROM circulars WHERE id = :id ORDER BY id DESC")
fun getCircular(id: Long): Circular

View File

@@ -50,7 +50,11 @@ class CircularLetterFragment : Fragment() {
circularLetterViewModel =
ViewModelProviders.of(this).get(CircularLetterViewModel::class.java)
circularLetterViewModel.circulars.observe(this, Observer {
root.circulars_list.adapter = CircularLetterAdapter(it, activity as MainActivity)
if (root.circulars_list.adapter == null) {
root.circulars_list.adapter = CircularLetterAdapter(it, activity as MainActivity)
} else {
(root.circulars_list.adapter as CircularLetterAdapter).changeDataSet(it)
}
})
circularLetterViewModel.showMessage.observe(this, Observer {
if (it) activity?.findViewById<ConstraintLayout>(R.id.container)?.let { view ->

View File

@@ -48,7 +48,11 @@ class FavouritesFragment : Fragment() {
favouritesViewModel =
ViewModelProviders.of(this).get(FavouritesViewModel::class.java)
favouritesViewModel.circulars.observe(this, Observer {
root.circulars_list.adapter = CircularLetterAdapter(it, activity as MainActivity)
if (root.circulars_list.adapter == null) {
root.circulars_list.adapter = CircularLetterAdapter(it, activity as MainActivity)
} else {
(root.circulars_list.adapter as CircularLetterAdapter).changeDataSet(it)
}
})
return root
}

View File

@@ -48,7 +48,11 @@ class RemindersFragment : Fragment() {
remindersViewModel =
ViewModelProviders.of(this).get(RemindersViewModel::class.java)
remindersViewModel.circulars.observe(this, Observer {
root.circulars_list.adapter = CircularLetterAdapter(it, activity as MainActivity)
if (root.circulars_list.adapter == null) {
root.circulars_list.adapter = CircularLetterAdapter(it, activity as MainActivity)
} else {
(root.circulars_list.adapter as CircularLetterAdapter).changeDataSet(it)
}
})
return root
}

View File

@@ -28,32 +28,25 @@ import net.underdesk.circolapp.server.DataFetcher
import java.io.IOException
class CircularLetterViewModel(application: Application) : AndroidViewModel(application) {
private val _circulars: MutableLiveData<List<Circular>> by lazy {
MutableLiveData<List<Circular>>().also {
loadCirculars()
}
}
val circulars: LiveData<List<Circular>> = _circulars
val showMessage = MutableLiveData<Boolean>().apply { value = false }
private fun loadCirculars() {
init {
object : Thread() {
override fun run() {
_circulars.postValue(AppDatabase.getInstance(getApplication()).circularDao().getCirculars())
updateCirculars()
}
}.start()
}
val circulars: LiveData<List<Circular>> =
AppDatabase.getInstance(getApplication()).circularDao().getLiveCirculars()
val showMessage = MutableLiveData<Boolean>().apply { value = false }
private fun updateCirculars() {
val fetcher = DataFetcher()
try {
val newCirculars = fetcher.getCircularsFromServer()
if (newCirculars.size != _circulars.value?.size ?: true) {
_circulars.postValue(newCirculars)
if (newCirculars.size != circulars.value?.size ?: true) {
AppDatabase.getInstance(getApplication()).circularDao().deleteAll()
AppDatabase.getInstance(getApplication()).circularDao().insertAll(newCirculars)
}