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( class CircularLetterAdapter(
private val circulars: List<Circular>, private var circulars: List<Circular>,
private val adapterCallback: AdapterCallback private val adapterCallback: AdapterCallback
) : ) :
RecyclerView.Adapter<CircularLetterAdapter.CircularLetterViewHolder>() { RecyclerView.Adapter<CircularLetterAdapter.CircularLetterViewHolder>() {
@@ -208,6 +208,11 @@ class CircularLetterAdapter(
} }
} }
fun changeDataSet(newCirculars: List<Circular>) {
circulars = newCirculars
notifyDataSetChanged()
}
override fun getItemCount() = circulars.size override fun getItemCount() = circulars.size
interface AdapterCallback { interface AdapterCallback {

View File

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

View File

@@ -50,7 +50,11 @@ class CircularLetterFragment : Fragment() {
circularLetterViewModel = circularLetterViewModel =
ViewModelProviders.of(this).get(CircularLetterViewModel::class.java) ViewModelProviders.of(this).get(CircularLetterViewModel::class.java)
circularLetterViewModel.circulars.observe(this, Observer { 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 { circularLetterViewModel.showMessage.observe(this, Observer {
if (it) activity?.findViewById<ConstraintLayout>(R.id.container)?.let { view -> if (it) activity?.findViewById<ConstraintLayout>(R.id.container)?.let { view ->

View File

@@ -48,7 +48,11 @@ class FavouritesFragment : Fragment() {
favouritesViewModel = favouritesViewModel =
ViewModelProviders.of(this).get(FavouritesViewModel::class.java) ViewModelProviders.of(this).get(FavouritesViewModel::class.java)
favouritesViewModel.circulars.observe(this, Observer { 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 return root
} }

View File

@@ -48,7 +48,11 @@ class RemindersFragment : Fragment() {
remindersViewModel = remindersViewModel =
ViewModelProviders.of(this).get(RemindersViewModel::class.java) ViewModelProviders.of(this).get(RemindersViewModel::class.java)
remindersViewModel.circulars.observe(this, Observer { 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 return root
} }

View File

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