mirror of
https://github.com/Matte23/circolapp.git
synced 2025-12-06 07:29:10 +00:00
Add swipe to refresh
This commit is contained in:
@@ -48,6 +48,7 @@ dependencies {
|
||||
implementation "androidx.work:work-runtime-ktx:2.2.0"
|
||||
implementation "androidx.room:room-runtime:2.2.0-rc01"
|
||||
implementation 'androidx.preference:preference:1.1.0'
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
|
||||
kapt "androidx.room:room-compiler:2.2.0-rc01"
|
||||
implementation "androidx.room:room-ktx:2.2.0-rc01"
|
||||
testImplementation 'junit:junit:4.12'
|
||||
|
||||
@@ -48,6 +48,7 @@ class MainActivity : AppCompatActivity(), CircularLetterAdapter.AdapterCallback
|
||||
}
|
||||
|
||||
var searchCallback: SearchCallback? = null
|
||||
var refreshCallback: RefreshCallback? = null
|
||||
override var circularToDownload: Circular? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@@ -103,6 +104,10 @@ class MainActivity : AppCompatActivity(), CircularLetterAdapter.AdapterCallback
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
// Handle item selection
|
||||
return when (item.itemId) {
|
||||
R.id.menu_main_refresh -> {
|
||||
refreshCallback?.refresh()
|
||||
true
|
||||
}
|
||||
R.id.menu_main_settings -> {
|
||||
startActivity(Intent(this, SettingsActivity::class.java))
|
||||
true
|
||||
@@ -176,4 +181,8 @@ class MainActivity : AppCompatActivity(), CircularLetterAdapter.AdapterCallback
|
||||
interface SearchCallback {
|
||||
fun search(query: String)
|
||||
}
|
||||
|
||||
interface RefreshCallback {
|
||||
fun refresh()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,13 +28,15 @@ 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.*
|
||||
import kotlinx.android.synthetic.main.fragment_circular_letters.view.*
|
||||
import net.underdesk.circolapp.MainActivity
|
||||
import net.underdesk.circolapp.R
|
||||
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
||||
import net.underdesk.circolapp.viewmodels.CircularLetterViewModel
|
||||
|
||||
class CircularLetterFragment : Fragment(), MainActivity.SearchCallback {
|
||||
class CircularLetterFragment : Fragment(), MainActivity.SearchCallback,
|
||||
MainActivity.RefreshCallback {
|
||||
|
||||
private lateinit var circularLetterViewModel: CircularLetterViewModel
|
||||
|
||||
@@ -67,12 +69,27 @@ class CircularLetterFragment : Fragment(), MainActivity.SearchCallback {
|
||||
circularLetterViewModel.showMessage.postValue(false)
|
||||
}
|
||||
})
|
||||
circularLetterViewModel.circularsUpdated.observe(this, Observer {
|
||||
if (it) {
|
||||
root.circulars_refresh.isRefreshing = false
|
||||
|
||||
circularLetterViewModel.showMessage.postValue(false)
|
||||
}
|
||||
})
|
||||
|
||||
root.circulars_refresh.setOnRefreshListener { circularLetterViewModel.updateCirculars() }
|
||||
|
||||
(activity as MainActivity).searchCallback = this
|
||||
(activity as MainActivity).refreshCallback = this
|
||||
return root
|
||||
}
|
||||
|
||||
override fun search(query: String) {
|
||||
circularLetterViewModel.query.postValue(query)
|
||||
}
|
||||
|
||||
override fun refresh() {
|
||||
circulars_refresh.isRefreshing = true
|
||||
circularLetterViewModel.updateCirculars()
|
||||
}
|
||||
}
|
||||
@@ -44,6 +44,7 @@ class FavouritesFragment : Fragment(), MainActivity.SearchCallback {
|
||||
val root = inflater.inflate(R.layout.fragment_circular_letters, container, false)
|
||||
|
||||
root.circulars_list.layoutManager = LinearLayoutManager(context)
|
||||
root.circulars_refresh.isEnabled = false
|
||||
|
||||
favouritesViewModel =
|
||||
ViewModelProviders.of(this).get(FavouritesViewModel::class.java)
|
||||
@@ -56,6 +57,7 @@ class FavouritesFragment : Fragment(), MainActivity.SearchCallback {
|
||||
})
|
||||
|
||||
(activity as MainActivity).searchCallback = this
|
||||
(activity as MainActivity).refreshCallback = null
|
||||
return root
|
||||
}
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ class RemindersFragment : Fragment(), MainActivity.SearchCallback {
|
||||
val root = inflater.inflate(R.layout.fragment_circular_letters, container, false)
|
||||
|
||||
root.circulars_list.layoutManager = LinearLayoutManager(context)
|
||||
root.circulars_refresh.isEnabled = false
|
||||
|
||||
remindersViewModel =
|
||||
ViewModelProviders.of(this).get(RemindersViewModel::class.java)
|
||||
@@ -56,6 +57,7 @@ class RemindersFragment : Fragment(), MainActivity.SearchCallback {
|
||||
})
|
||||
|
||||
(activity as MainActivity).searchCallback = this
|
||||
(activity as MainActivity).refreshCallback = null
|
||||
return root
|
||||
}
|
||||
|
||||
|
||||
@@ -30,11 +30,7 @@ import java.io.IOException
|
||||
|
||||
class CircularLetterViewModel(application: Application) : AndroidViewModel(application) {
|
||||
init {
|
||||
object : Thread() {
|
||||
override fun run() {
|
||||
updateCirculars()
|
||||
}
|
||||
}.start()
|
||||
updateCirculars()
|
||||
}
|
||||
|
||||
val query = MutableLiveData<String>("")
|
||||
@@ -47,18 +43,31 @@ class CircularLetterViewModel(application: Application) : AndroidViewModel(appli
|
||||
}
|
||||
|
||||
val showMessage = MutableLiveData<Boolean>().apply { value = false }
|
||||
val circularsUpdated = MutableLiveData<Boolean>().apply { value = false }
|
||||
private var isNotUpdating = true
|
||||
|
||||
private fun updateCirculars() {
|
||||
val fetcher = DataFetcher()
|
||||
fun updateCirculars() {
|
||||
if (isNotUpdating) {
|
||||
object : Thread() {
|
||||
override fun run() {
|
||||
isNotUpdating = false
|
||||
val fetcher = DataFetcher()
|
||||
|
||||
try {
|
||||
val newCirculars = fetcher.getCircularsFromServer()
|
||||
if (newCirculars.size != circulars.value?.size ?: true) {
|
||||
AppDatabase.getInstance(getApplication()).circularDao().deleteAll()
|
||||
AppDatabase.getInstance(getApplication()).circularDao().insertAll(newCirculars)
|
||||
}
|
||||
} catch (exception: IOException) {
|
||||
showMessage.postValue(true)
|
||||
try {
|
||||
val newCirculars = fetcher.getCircularsFromServer()
|
||||
if (newCirculars.size != circulars.value?.size ?: true) {
|
||||
AppDatabase.getInstance(getApplication()).circularDao().deleteAll()
|
||||
AppDatabase.getInstance(getApplication()).circularDao()
|
||||
.insertAll(newCirculars)
|
||||
}
|
||||
circularsUpdated.postValue(true)
|
||||
} catch (exception: IOException) {
|
||||
showMessage.postValue(true)
|
||||
} finally {
|
||||
isNotUpdating = true
|
||||
}
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/circulars_refresh"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
@@ -7,4 +8,4 @@
|
||||
android:id="@+id/circulars_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||
@@ -8,6 +8,10 @@
|
||||
android:title="@string/menu_search"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/menu_main_refresh"
|
||||
android:title="@string/menu_refresh"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/menu_main_settings"
|
||||
android:title="@string/title_settings" />
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
<string name="menu_about">About</string>
|
||||
<string name="menu_search">Search</string>
|
||||
<string name="menu_refresh">Refresh</string>
|
||||
|
||||
<string name="preferences_general_header">General</string>
|
||||
<string name="preference_notifications_header">Notifications</string>
|
||||
|
||||
Reference in New Issue
Block a user