mirror of
https://github.com/Matte23/circolapp.git
synced 2025-12-06 07:29:10 +00:00
Make CircularViewModel load LiveData from Room
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -50,7 +50,11 @@ class CircularLetterFragment : Fragment() {
|
||||
circularLetterViewModel =
|
||||
ViewModelProviders.of(this).get(CircularLetterViewModel::class.java)
|
||||
circularLetterViewModel.circulars.observe(this, Observer {
|
||||
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 ->
|
||||
|
||||
@@ -48,7 +48,11 @@ class FavouritesFragment : Fragment() {
|
||||
favouritesViewModel =
|
||||
ViewModelProviders.of(this).get(FavouritesViewModel::class.java)
|
||||
favouritesViewModel.circulars.observe(this, Observer {
|
||||
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
|
||||
}
|
||||
|
||||
@@ -48,7 +48,11 @@ class RemindersFragment : Fragment() {
|
||||
remindersViewModel =
|
||||
ViewModelProviders.of(this).get(RemindersViewModel::class.java)
|
||||
remindersViewModel.circulars.observe(this, Observer {
|
||||
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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user