From c9989beb82c68dcf42446e9bfafc9345f1fe65fc Mon Sep 17 00:00:00 2001 From: Matte23 Date: Wed, 18 Sep 2019 20:08:08 +0200 Subject: [PATCH] Add favourites support --- .../adapters/CircularLetterAdapter.kt | 10 +++++++ .../net/underdesk/circolapp/data/Circular.kt | 1 + .../underdesk/circolapp/data/CircularDao.kt | 12 +++++--- .../circolapp/fragments/FavouritesFragment.kt | 16 ++++++---- .../viewmodels/FavouritesViewModel.kt | 30 +++++++++++++++++++ .../main/res/layout/fragment_favourites.xml | 6 ---- app/src/main/res/menu/bottom_nav_menu.xml | 2 +- 7 files changed, 61 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/net/underdesk/circolapp/viewmodels/FavouritesViewModel.kt delete mode 100644 app/src/main/res/layout/fragment_favourites.xml diff --git a/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt b/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt index ba66a1d..63e65b3 100644 --- a/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt +++ b/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt @@ -32,6 +32,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.item_circular.view.* import net.underdesk.circolapp.R +import net.underdesk.circolapp.data.AppDatabase import net.underdesk.circolapp.data.Circular @@ -85,6 +86,15 @@ class CircularLetterAdapter(private val circulars: List) : (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 { if (holder.viewButton.visibility == View.VISIBLE) { holder.viewButton.visibility = View.GONE diff --git a/app/src/main/java/net/underdesk/circolapp/data/Circular.kt b/app/src/main/java/net/underdesk/circolapp/data/Circular.kt index a3bd7a6..afe1696 100644 --- a/app/src/main/java/net/underdesk/circolapp/data/Circular.kt +++ b/app/src/main/java/net/underdesk/circolapp/data/Circular.kt @@ -28,6 +28,7 @@ data class Circular( val name: String, val url: String, val date: String, + var favourite: Boolean = false, val attachmentsNames: MutableList = mutableListOf(), val attachmentsUrls: MutableList = mutableListOf() ) { diff --git a/app/src/main/java/net/underdesk/circolapp/data/CircularDao.kt b/app/src/main/java/net/underdesk/circolapp/data/CircularDao.kt index 2d506f9..6be0377 100644 --- a/app/src/main/java/net/underdesk/circolapp/data/CircularDao.kt +++ b/app/src/main/java/net/underdesk/circolapp/data/CircularDao.kt @@ -18,19 +18,23 @@ package net.underdesk.circolapp.data -import androidx.room.Dao -import androidx.room.Insert -import androidx.room.OnConflictStrategy -import androidx.room.Query +import androidx.lifecycle.LiveData +import androidx.room.* @Dao interface CircularDao { @Query("SELECT * FROM circulars ORDER BY id DESC") fun getCirculars(): List + @Query("SELECT * FROM circulars WHERE favourite ORDER BY id DESC") + fun getFavourites(): LiveData> + @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertAll(circulars: List) + @Update + fun update(circular: Circular) + @Query("DELETE FROM circulars") fun deleteAll() } \ No newline at end of file diff --git a/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt b/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt index 34f34e5..06df961 100644 --- a/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt +++ b/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt @@ -25,23 +25,29 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.Observer 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.viewmodels.CircularLetterViewModel +import net.underdesk.circolapp.adapters.CircularLetterAdapter +import net.underdesk.circolapp.viewmodels.FavouritesViewModel class FavouritesFragment : Fragment() { - private lateinit var circularLetterViewModel: CircularLetterViewModel + private lateinit var favouritesViewModel: FavouritesViewModel override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - circularLetterViewModel = - ViewModelProviders.of(this).get(CircularLetterViewModel::class.java) 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 } diff --git a/app/src/main/java/net/underdesk/circolapp/viewmodels/FavouritesViewModel.kt b/app/src/main/java/net/underdesk/circolapp/viewmodels/FavouritesViewModel.kt new file mode 100644 index 0000000..5c1ee26 --- /dev/null +++ b/app/src/main/java/net/underdesk/circolapp/viewmodels/FavouritesViewModel.kt @@ -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 . + */ + +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> = + AppDatabase.getInstance(getApplication()).circularDao().getFavourites() +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_favourites.xml b/app/src/main/res/layout/fragment_favourites.xml deleted file mode 100644 index 77d9ef6..0000000 --- a/app/src/main/res/layout/fragment_favourites.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml index 0264a66..9cd172f 100644 --- a/app/src/main/res/menu/bottom_nav_menu.xml +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -8,7 +8,7 @@