From 4a9533a7562694a27bbd270d91823e411a24e415 Mon Sep 17 00:00:00 2001 From: Matte23 Date: Thu, 19 Sep 2019 19:26:36 +0200 Subject: [PATCH] Add support for offline use --- .../fragments/CircularLetterFragment.kt | 13 +++++++++++++ .../viewmodels/CircularLetterViewModel.kt | 16 +++++++++++----- .../net/underdesk/circolapp/works/PollWork.kt | 7 ++++++- app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 32 insertions(+), 6 deletions(-) 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 2a531fd..43f0815 100644 --- a/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt +++ b/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt @@ -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(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 } } \ No newline at end of file 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 5b59cd5..0546065 100644 --- a/app/src/main/java/net/underdesk/circolapp/viewmodels/CircularLetterViewModel.kt +++ b/app/src/main/java/net/underdesk/circolapp/viewmodels/CircularLetterViewModel.kt @@ -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> = _circulars + val showMessage = MutableLiveData().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) } } } \ No newline at end of file diff --git a/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt b/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt index 51f76cf..a7d94be 100644 --- a/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt +++ b/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt @@ -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() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5183c97..b3ddee9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -11,4 +11,6 @@ Circular letters Notify when your school issue a new circular letter + + Network not available. Results may be outdated