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(
|
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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
if (root.circulars_list.adapter == null) {
|
||||||
root.circulars_list.adapter = CircularLetterAdapter(it, activity as MainActivity)
|
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 ->
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
if (root.circulars_list.adapter == null) {
|
||||||
root.circulars_list.adapter = CircularLetterAdapter(it, activity as MainActivity)
|
root.circulars_list.adapter = CircularLetterAdapter(it, activity as MainActivity)
|
||||||
|
} else {
|
||||||
|
(root.circulars_list.adapter as CircularLetterAdapter).changeDataSet(it)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
return root
|
return root
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
if (root.circulars_list.adapter == null) {
|
||||||
root.circulars_list.adapter = CircularLetterAdapter(it, activity as MainActivity)
|
root.circulars_list.adapter = CircularLetterAdapter(it, activity as MainActivity)
|
||||||
|
} else {
|
||||||
|
(root.circulars_list.adapter as CircularLetterAdapter).changeDataSet(it)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
return root
|
return root
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user