mirror of
https://github.com/Matte23/circolapp.git
synced 2025-12-06 07:29:10 +00:00
Add favourites support
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
@@ -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>
|
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user