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.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModelProviders
|
import androidx.lifecycle.ViewModelProviders
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import kotlinx.android.synthetic.main.fragment_circular_letters.view.*
|
import kotlinx.android.synthetic.main.fragment_circular_letters.view.*
|
||||||
import net.underdesk.circolapp.R
|
import net.underdesk.circolapp.R
|
||||||
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
||||||
@@ -49,6 +51,17 @@ class CircularLetterFragment : Fragment() {
|
|||||||
circularLetterViewModel.circulars.observe(this, Observer {
|
circularLetterViewModel.circulars.observe(this, Observer {
|
||||||
root.circulars_list.adapter = CircularLetterAdapter(it)
|
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
|
return root
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -25,6 +25,7 @@ import androidx.lifecycle.MutableLiveData
|
|||||||
import net.underdesk.circolapp.data.AppDatabase
|
import net.underdesk.circolapp.data.AppDatabase
|
||||||
import net.underdesk.circolapp.data.Circular
|
import net.underdesk.circolapp.data.Circular
|
||||||
import net.underdesk.circolapp.server.DataFetcher
|
import net.underdesk.circolapp.server.DataFetcher
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
class CircularLetterViewModel(application: Application) : AndroidViewModel(application) {
|
class CircularLetterViewModel(application: Application) : AndroidViewModel(application) {
|
||||||
|
|
||||||
@@ -35,6 +36,7 @@ class CircularLetterViewModel(application: Application) : AndroidViewModel(appli
|
|||||||
}
|
}
|
||||||
|
|
||||||
val circulars: LiveData<List<Circular>> = _circulars
|
val circulars: LiveData<List<Circular>> = _circulars
|
||||||
|
val showMessage = MutableLiveData<Boolean>().apply { value = false }
|
||||||
|
|
||||||
private fun loadCirculars() {
|
private fun loadCirculars() {
|
||||||
object : Thread() {
|
object : Thread() {
|
||||||
@@ -48,11 +50,15 @@ class CircularLetterViewModel(application: Application) : AndroidViewModel(appli
|
|||||||
private fun updateCirculars() {
|
private fun updateCirculars() {
|
||||||
val fetcher = DataFetcher()
|
val fetcher = DataFetcher()
|
||||||
|
|
||||||
val newCirculars = fetcher.getCircularsFromServer()
|
try {
|
||||||
if (newCirculars.size != _circulars.value?.size ?: true) {
|
val newCirculars = fetcher.getCircularsFromServer()
|
||||||
_circulars.postValue(newCirculars)
|
if (newCirculars.size != _circulars.value?.size ?: true) {
|
||||||
AppDatabase.getInstance(getApplication()).circularDao().deleteAll()
|
_circulars.postValue(newCirculars)
|
||||||
AppDatabase.getInstance(getApplication()).circularDao().insertAll(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.AppDatabase
|
||||||
import net.underdesk.circolapp.data.Circular
|
import net.underdesk.circolapp.data.Circular
|
||||||
import net.underdesk.circolapp.server.DataFetcher
|
import net.underdesk.circolapp.server.DataFetcher
|
||||||
|
import java.io.IOException
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
|
||||||
@@ -72,7 +73,11 @@ class PollWork(appContext: Context, workerParams: WorkerParameters) :
|
|||||||
val fetcher = DataFetcher()
|
val fetcher = DataFetcher()
|
||||||
|
|
||||||
val oldCirculars = AppDatabase.getInstance(applicationContext).circularDao().getCirculars()
|
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) {
|
if (newCirculars.size != oldCirculars.size) {
|
||||||
createNotificationChannel()
|
createNotificationChannel()
|
||||||
|
|||||||
@@ -11,4 +11,6 @@
|
|||||||
|
|
||||||
<string name="channel_name">Circular letters</string>
|
<string name="channel_name">Circular letters</string>
|
||||||
<string name="channel_description">Notify when your school issue a new circular letter</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>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user