diff --git a/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt b/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt index 933b566..ea29231 100644 --- a/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt +++ b/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt @@ -46,7 +46,7 @@ import net.underdesk.circolapp.fragments.NewReminderFragment class CircularLetterAdapter( - private val circulars: List, + private var circulars: List, private val adapterCallback: AdapterCallback ) : RecyclerView.Adapter() { @@ -208,6 +208,11 @@ class CircularLetterAdapter( } } + fun changeDataSet(newCirculars: List) { + circulars = newCirculars + notifyDataSetChanged() + } + override fun getItemCount() = circulars.size interface AdapterCallback { diff --git a/app/src/main/java/net/underdesk/circolapp/data/CircularDao.kt b/app/src/main/java/net/underdesk/circolapp/data/CircularDao.kt index 5e1eaad..16e6f27 100644 --- a/app/src/main/java/net/underdesk/circolapp/data/CircularDao.kt +++ b/app/src/main/java/net/underdesk/circolapp/data/CircularDao.kt @@ -26,6 +26,9 @@ interface CircularDao { @Query("SELECT * FROM circulars ORDER BY id DESC") fun getCirculars(): List + @Query("SELECT * FROM circulars ORDER BY id DESC") + fun getLiveCirculars(): LiveData> + @Query("SELECT * FROM circulars WHERE id = :id ORDER BY id DESC") fun getCircular(id: Long): Circular diff --git a/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt b/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt index 28951ca..9baf54f 100644 --- a/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt +++ b/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt @@ -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(R.id.container)?.let { view -> diff --git a/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt b/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt index 7abe2b8..f5630a8 100644 --- a/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt +++ b/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt @@ -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 } diff --git a/app/src/main/java/net/underdesk/circolapp/fragments/RemindersFragment.kt b/app/src/main/java/net/underdesk/circolapp/fragments/RemindersFragment.kt index fbc297e..886a517 100644 --- a/app/src/main/java/net/underdesk/circolapp/fragments/RemindersFragment.kt +++ b/app/src/main/java/net/underdesk/circolapp/fragments/RemindersFragment.kt @@ -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 } diff --git a/app/src/main/java/net/underdesk/circolapp/viewmodels/CircularLetterViewModel.kt b/app/src/main/java/net/underdesk/circolapp/viewmodels/CircularLetterViewModel.kt index 0546065..e5f902d 100644 --- a/app/src/main/java/net/underdesk/circolapp/viewmodels/CircularLetterViewModel.kt +++ b/app/src/main/java/net/underdesk/circolapp/viewmodels/CircularLetterViewModel.kt @@ -28,32 +28,25 @@ import net.underdesk.circolapp.server.DataFetcher import java.io.IOException class CircularLetterViewModel(application: Application) : AndroidViewModel(application) { - - private val _circulars: MutableLiveData> by lazy { - MutableLiveData>().also { - loadCirculars() - } - } - - val circulars: LiveData> = _circulars - val showMessage = MutableLiveData().apply { value = false } - - private fun loadCirculars() { + init { object : Thread() { override fun run() { - _circulars.postValue(AppDatabase.getInstance(getApplication()).circularDao().getCirculars()) updateCirculars() } }.start() } + val circulars: LiveData> = + AppDatabase.getInstance(getApplication()).circularDao().getLiveCirculars() + + val showMessage = MutableLiveData().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) }