Implemented chips for selecting dietary preferences

This commit is contained in:
denizk0461
2023-04-18 10:25:45 +02:00
parent 56cdc4c5ee
commit c385da4287
11 changed files with 299 additions and 24 deletions
@@ -41,6 +41,24 @@ interface EventDAO {
)
val allOffers: LiveData<List<CanteenOffer>>
@Query(
"SELECT * FROM offer_item " +
"JOIN offer_category ON offer_item.categoryId = offer_category.id " +
"JOIN offer_canteen ON offer_category.canteenId = offer_canteen.id " +
"JOIN offer_date ON offer_category.dateId = offer_date.id " +
"WHERE isFair = :isFair AND isFish = :isFish AND isPoultry = :isPoultry " +
"AND isLamb = :isLamb AND isVital = :isVital AND isBeef = :isBeef " +
"AND isPork = :isPork AND isVegan = :isVegan AND isVegetarian = :isVegetarian " +
"AND isGame = :isGame "
)
fun getOffersByPreference(
isFair: Boolean, isFish: Boolean, isPoultry: Boolean, isLamb: Boolean, isVital: Boolean,
isBeef: Boolean, isPork: Boolean, isVegan: Boolean, isVegetarian: Boolean, isGame: Boolean
): LiveData<List<CanteenOffer>>
@get:Query("SELECT id FROM offer_date")
val updateObserver: LiveData<List<Int>>
@Query("DELETE FROM offer_date")
fun nukeOfferDates()
@@ -2,11 +2,13 @@ package com.denizk0461.studip.db
import android.app.Application
import androidx.lifecycle.LiveData
import androidx.preference.PreferenceManager
import com.denizk0461.studip.model.*
class EventRepository(app: Application) {
class EventRepository(private val app: Application) {
private val dao: EventDAO = EventDatabase.getInstance(app.applicationContext).dao()
private val prefs = PreferenceManager.getDefaultSharedPreferences(app)
val allEvents: LiveData<List<StudIPEvent>> = dao.allEvents
@@ -16,6 +18,65 @@ class EventRepository(app: Application) {
val allOffers: LiveData<List<CanteenOffer>> = dao.allOffers
// is this better than List.filter?
fun getOffersByPreference(prefs: DietaryPrefObject = getDietaryPrefs()): LiveData<List<CanteenOffer>> {
return if (isPreferenceSet()) {
dao.getOffersByPreference(
isFair = prefs.isFair,
isFish = prefs.isFish,
isPoultry = prefs.isPoultry,
isLamb = prefs.isLamb,
isVital = prefs.isVital,
isBeef = prefs.isBeef,
isPork = prefs.isPork,
isVegan = prefs.isVegan,
isVegetarian = prefs.isVegetarian,
isGame = prefs.isGame,
)
} else {
dao.allOffers
}
}
private fun getDietaryPrefs(): DietaryPrefObject {
return DietaryPrefObject(
isFair = prefs.getBoolean(DietaryPreferences.FAIR.value, false),
isFish = prefs.getBoolean(DietaryPreferences.FISH.value, false),
isPoultry = prefs.getBoolean(DietaryPreferences.POULTRY.value, false),
isLamb = prefs.getBoolean(DietaryPreferences.LAMB.value, false),
isVital = prefs.getBoolean(DietaryPreferences.VITAL.value, false),
isBeef = prefs.getBoolean(DietaryPreferences.BEEF.value, false),
isPork = prefs.getBoolean(DietaryPreferences.PORK.value, false),
isVegan = prefs.getBoolean(DietaryPreferences.VEGAN.value, false),
isVegetarian = prefs.getBoolean(DietaryPreferences.VEGETARIAN.value, false),
isGame = prefs.getBoolean(DietaryPreferences.GAME.value, false),
)
}
private fun isPreferenceSet(): Boolean {
getDietaryPrefs().also { p ->
if (p.isFair) return true
if (p.isFish) return true
if (p.isPoultry) return true
if (p.isLamb) return true
if (p.isVital) return true
if (p.isBeef) return true
if (p.isPork) return true
if (p.isVegan) return true
if (p.isVegetarian) return true
if (p.isGame) return true
}
return false
}
fun setPreference(pref: DietaryPreferences, newValue: Boolean) {
prefs.edit().putBoolean(pref.value, newValue).apply()
}
fun getPreference(pref: DietaryPreferences): Boolean =
prefs.getBoolean(pref.value, false)
// fun insertOffers(offers: List<CanteenOffer>) { dao.insertOffers(offers) }
fun nukeOffers() {
dao.nukeOfferItems()