Add favourites support

This commit is contained in:
2019-09-18 20:08:08 +02:00
committed by Matte23
parent 1fcb6bbe97
commit c9989beb82
7 changed files with 61 additions and 16 deletions

View File

@@ -32,6 +32,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.item_circular.view.* import kotlinx.android.synthetic.main.item_circular.view.*
import net.underdesk.circolapp.R import net.underdesk.circolapp.R
import net.underdesk.circolapp.data.AppDatabase
import net.underdesk.circolapp.data.Circular import net.underdesk.circolapp.data.Circular
@@ -85,6 +86,15 @@ class CircularLetterAdapter(private val circulars: List<Circular>) :
(context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager).enqueue(request) (context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager).enqueue(request)
} }
holder.favouriteButton.setOnClickListener {
object : Thread() {
override fun run() {
AppDatabase.getInstance(context).circularDao()
.update(circulars[position].apply { favourite = !favourite })
}
}.start()
}
holder.collapseButton.setOnClickListener { holder.collapseButton.setOnClickListener {
if (holder.viewButton.visibility == View.VISIBLE) { if (holder.viewButton.visibility == View.VISIBLE) {
holder.viewButton.visibility = View.GONE holder.viewButton.visibility = View.GONE

View File

@@ -28,6 +28,7 @@ data class Circular(
val name: String, val name: String,
val url: String, val url: String,
val date: String, val date: String,
var favourite: Boolean = false,
val attachmentsNames: MutableList<String> = mutableListOf(), val attachmentsNames: MutableList<String> = mutableListOf(),
val attachmentsUrls: MutableList<String> = mutableListOf() val attachmentsUrls: MutableList<String> = mutableListOf()
) { ) {

View File

@@ -18,19 +18,23 @@
package net.underdesk.circolapp.data package net.underdesk.circolapp.data
import androidx.room.Dao import androidx.lifecycle.LiveData
import androidx.room.Insert import androidx.room.*
import androidx.room.OnConflictStrategy
import androidx.room.Query
@Dao @Dao
interface CircularDao { interface CircularDao {
@Query("SELECT * FROM circulars ORDER BY id DESC") @Query("SELECT * FROM circulars ORDER BY id DESC")
fun getCirculars(): List<Circular> fun getCirculars(): List<Circular>
@Query("SELECT * FROM circulars WHERE favourite ORDER BY id DESC")
fun getFavourites(): LiveData<List<Circular>>
@Insert(onConflict = OnConflictStrategy.REPLACE) @Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAll(circulars: List<Circular>) fun insertAll(circulars: List<Circular>)
@Update
fun update(circular: Circular)
@Query("DELETE FROM circulars") @Query("DELETE FROM circulars")
fun deleteAll() fun deleteAll()
} }

View File

@@ -25,23 +25,29 @@ import android.view.ViewGroup
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 kotlinx.android.synthetic.main.fragment_circular_letters.view.*
import net.underdesk.circolapp.R import net.underdesk.circolapp.R
import net.underdesk.circolapp.viewmodels.CircularLetterViewModel import net.underdesk.circolapp.adapters.CircularLetterAdapter
import net.underdesk.circolapp.viewmodels.FavouritesViewModel
class FavouritesFragment : Fragment() { class FavouritesFragment : Fragment() {
private lateinit var circularLetterViewModel: CircularLetterViewModel private lateinit var favouritesViewModel: FavouritesViewModel
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
circularLetterViewModel =
ViewModelProviders.of(this).get(CircularLetterViewModel::class.java)
val root = inflater.inflate(R.layout.fragment_circular_letters, container, false) val root = inflater.inflate(R.layout.fragment_circular_letters, container, false)
circularLetterViewModel.circulars.observe(this, Observer {
root.circulars_list.layoutManager = LinearLayoutManager(context)
favouritesViewModel =
ViewModelProviders.of(this).get(FavouritesViewModel::class.java)
favouritesViewModel.circulars.observe(this, Observer {
root.circulars_list.adapter = CircularLetterAdapter(it)
}) })
return root return root
} }

View File

@@ -0,0 +1,30 @@
/*
* Circolapp
* Copyright (C) 2019 Matteo Schiff
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package net.underdesk.circolapp.viewmodels
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import net.underdesk.circolapp.data.AppDatabase
import net.underdesk.circolapp.data.Circular
class FavouritesViewModel(application: Application) : AndroidViewModel(application) {
val circulars: LiveData<List<Circular>> =
AppDatabase.getInstance(getApplication()).circularDao().getFavourites()
}

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -8,7 +8,7 @@
<item <item
android:id="@+id/navigation_favourites" android:id="@+id/navigation_favourites"
android:icon="@drawable/ic_dashboard_black_24dp" android:icon="@drawable/baseline_star_24"
android:title="@string/title_favourites" /> android:title="@string/title_favourites" />
<item <item