mirror of
https://github.com/Matte23/circolapp.git
synced 2025-12-06 07:29:10 +00:00
Add support for offline use
This commit is contained in:
@@ -22,10 +22,12 @@ import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProviders
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import kotlinx.android.synthetic.main.fragment_circular_letters.view.*
|
||||
import net.underdesk.circolapp.R
|
||||
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
||||
@@ -49,6 +51,17 @@ class CircularLetterFragment : Fragment() {
|
||||
circularLetterViewModel.circulars.observe(this, Observer {
|
||||
root.circulars_list.adapter = CircularLetterAdapter(it)
|
||||
})
|
||||
circularLetterViewModel.showMessage.observe(this, Observer {
|
||||
if (it) activity?.findViewById<ConstraintLayout>(R.id.container)?.let { view ->
|
||||
Snackbar.make(
|
||||
view,
|
||||
getString(R.string.snackbar_connection_not_available),
|
||||
Snackbar.LENGTH_LONG
|
||||
).show()
|
||||
|
||||
circularLetterViewModel.showMessage.postValue(false)
|
||||
}
|
||||
})
|
||||
return root
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ import androidx.lifecycle.MutableLiveData
|
||||
import net.underdesk.circolapp.data.AppDatabase
|
||||
import net.underdesk.circolapp.data.Circular
|
||||
import net.underdesk.circolapp.server.DataFetcher
|
||||
import java.io.IOException
|
||||
|
||||
class CircularLetterViewModel(application: Application) : AndroidViewModel(application) {
|
||||
|
||||
@@ -35,6 +36,7 @@ class CircularLetterViewModel(application: Application) : AndroidViewModel(appli
|
||||
}
|
||||
|
||||
val circulars: LiveData<List<Circular>> = _circulars
|
||||
val showMessage = MutableLiveData<Boolean>().apply { value = false }
|
||||
|
||||
private fun loadCirculars() {
|
||||
object : Thread() {
|
||||
@@ -48,11 +50,15 @@ class CircularLetterViewModel(application: Application) : AndroidViewModel(appli
|
||||
private fun updateCirculars() {
|
||||
val fetcher = DataFetcher()
|
||||
|
||||
val newCirculars = fetcher.getCircularsFromServer()
|
||||
if (newCirculars.size != _circulars.value?.size ?: true) {
|
||||
_circulars.postValue(newCirculars)
|
||||
AppDatabase.getInstance(getApplication()).circularDao().deleteAll()
|
||||
AppDatabase.getInstance(getApplication()).circularDao().insertAll(newCirculars)
|
||||
try {
|
||||
val newCirculars = fetcher.getCircularsFromServer()
|
||||
if (newCirculars.size != _circulars.value?.size ?: true) {
|
||||
_circulars.postValue(newCirculars)
|
||||
AppDatabase.getInstance(getApplication()).circularDao().deleteAll()
|
||||
AppDatabase.getInstance(getApplication()).circularDao().insertAll(newCirculars)
|
||||
}
|
||||
} catch (exception: IOException) {
|
||||
showMessage.postValue(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,6 +32,7 @@ import net.underdesk.circolapp.R
|
||||
import net.underdesk.circolapp.data.AppDatabase
|
||||
import net.underdesk.circolapp.data.Circular
|
||||
import net.underdesk.circolapp.server.DataFetcher
|
||||
import java.io.IOException
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
|
||||
@@ -72,7 +73,11 @@ class PollWork(appContext: Context, workerParams: WorkerParameters) :
|
||||
val fetcher = DataFetcher()
|
||||
|
||||
val oldCirculars = AppDatabase.getInstance(applicationContext).circularDao().getCirculars()
|
||||
val newCirculars = fetcher.getCircularsFromServer()
|
||||
val newCirculars = try {
|
||||
fetcher.getCircularsFromServer()
|
||||
} catch (exception: IOException) {
|
||||
return Result.retry()
|
||||
}
|
||||
|
||||
if (newCirculars.size != oldCirculars.size) {
|
||||
createNotificationChannel()
|
||||
|
||||
@@ -11,4 +11,6 @@
|
||||
|
||||
<string name="channel_name">Circular letters</string>
|
||||
<string name="channel_description">Notify when your school issue a new circular letter</string>
|
||||
|
||||
<string name="snackbar_connection_not_available">Network not available. Results may be outdated</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user