diff --git a/app/src/main/java/com/denizk0461/studip/adapter/CanteenOfferItemAdapter.kt b/app/src/main/java/com/denizk0461/studip/adapter/CanteenOfferItemAdapter.kt index a9ad9de..0a25dd8 100644 --- a/app/src/main/java/com/denizk0461/studip/adapter/CanteenOfferItemAdapter.kt +++ b/app/src/main/java/com/denizk0461/studip/adapter/CanteenOfferItemAdapter.kt @@ -10,8 +10,9 @@ import com.denizk0461.studip.databinding.ItemCanteenBinding import com.denizk0461.studip.databinding.ItemCanteenLineBinding import com.denizk0461.studip.databinding.ItemIconBinding import com.denizk0461.studip.model.CanteenOffer +import com.denizk0461.studip.model.CanteenOfferGroup -class CanteenOfferItemAdapter(private val offers: List) : RecyclerView.Adapter() { +class CanteenOfferItemAdapter(private val offers: List) : RecyclerView.Adapter() { class OfferViewHolder(val binding: ItemCanteenBinding) : RecyclerView.ViewHolder(binding.root) @@ -30,29 +31,31 @@ class CanteenOfferItemAdapter(private val offers: List) : Recycler override fun onBindViewHolder(holder: OfferViewHolder, position: Int) { val currentItem = offers[position] - val line = ItemCanteenLineBinding.inflate( - LayoutInflater.from(holder.binding.root.context), -// holder.binding.root, -// true, - ) holder.binding.textCategory.text = currentItem.category - line.content.text = currentItem.title - val indices = arrayListOf() - currentItem.dietaryPreferences.filterIndexed { index, char -> - if (char == 't') { - indices.add(index) - true - } else false - } - if (indices.isEmpty()) indices.add(10) - indices.forEach { index -> - val img = ItemIconBinding.inflate(LayoutInflater.from(holder.binding.root.context)) -// holder.binding.root.resources.getDrawable(Misc.indexToDrawable[index]!!, holder.binding.root.context.theme) - img.imageView.setImageDrawable(holder.binding.root.context.getDrawable(Misc.indexToDrawable[index]!!)) - line.imageViewContainer.addView(img.root) - } - holder.binding.lineContainer.addView(line.root) + currentItem.offers.forEach { offer -> + val line = ItemCanteenLineBinding.inflate( + LayoutInflater.from(holder.binding.root.context), + ) + + line.content.text = offer.title + val indices = arrayListOf() + offer.dietaryPreferences.filterIndexed { index, char -> + if (char == 't') { + indices.add(index) + true + } else false + } + if (indices.isEmpty()) indices.add(10) + indices.forEach { index -> + val img = ItemIconBinding.inflate(LayoutInflater.from(holder.binding.root.context)) +// holder.binding.root.resources.getDrawable(Misc.indexToDrawable[index]!!, holder.binding.root.context.theme) + img.imageView.setImageDrawable(holder.binding.root.context.getDrawable(Misc.indexToDrawable[index]!!)) + line.imageViewContainer.addView(img.root) + } + + holder.binding.lineContainer.addView(line.root) + } // holder.binding.textCategory.text = currentItem.category // holder.binding.tempContent.text = "${currentItem.title} • ${currentItem.price}" diff --git a/app/src/main/java/com/denizk0461/studip/adapter/CanteenOfferPageAdapter.kt b/app/src/main/java/com/denizk0461/studip/adapter/CanteenOfferPageAdapter.kt index 8098c54..227732a 100644 --- a/app/src/main/java/com/denizk0461/studip/adapter/CanteenOfferPageAdapter.kt +++ b/app/src/main/java/com/denizk0461/studip/adapter/CanteenOfferPageAdapter.kt @@ -7,8 +7,10 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.denizk0461.studip.databinding.ItemScrollablePageBinding import com.denizk0461.studip.model.CanteenOffer +import com.denizk0461.studip.model.CanteenOfferGroup +import com.denizk0461.studip.model.CanteenOfferGroupElement -class CanteenOfferPageAdapter(private var offers: List, private var daysCovered: Int, private var prefsRegex: Regex) : RecyclerView.Adapter() { +class CanteenOfferPageAdapter(private var offers: List, private var daysCovered: Int, private var prefsRegex: Regex) : RecyclerView.Adapter() { class CanteenOfferPageViewHolder(val binding: ItemScrollablePageBinding) : RecyclerView.ViewHolder(binding.root) @@ -31,30 +33,19 @@ class CanteenOfferPageAdapter(private var offers: List, private va // TODO second filter needs to be worked on; it shouldn't filter out something if two options are selected and only one is met // Log.d("eek!5", prefsRegex.toString()) - val filteredForDate = offers.filter { it.dateId == position } - val filteredForPreferences = if (prefsRegex.toString() == "ffffffffff") { - // show all elements and skip filtering - filteredForDate - } else { - filteredForDate.filter { - Log.d("eek!5", "${it.title}: - ${prefsRegex} vs ${it.dietaryPreferences}") - prefsRegex.matches(it.dietaryPreferences) - } - } // .filter { it.dietaryPreferences == prefs.deconstruct() } // val filtered2 = filtered // offers - - adapter = CanteenOfferItemAdapter(filteredForPreferences) // TODO check if empty + adapter = CanteenOfferItemAdapter(offers.filter { it.dateId == position }) // TODO check if empty scheduleLayoutAnimation() } } - fun setNewItems(items: List, daysCovered: Int) { + fun setNewItems(items: List, daysCovered: Int) { this.daysCovered = daysCovered offers = items notifyDataSetChanged() diff --git a/app/src/main/java/com/denizk0461/studip/fragment/CanteenFragment.kt b/app/src/main/java/com/denizk0461/studip/fragment/CanteenFragment.kt index 6fe058e..033ec8c 100644 --- a/app/src/main/java/com/denizk0461/studip/fragment/CanteenFragment.kt +++ b/app/src/main/java/com/denizk0461/studip/fragment/CanteenFragment.kt @@ -11,6 +11,8 @@ import androidx.lifecycle.LiveData import com.denizk0461.studip.adapter.CanteenOfferPageAdapter import com.denizk0461.studip.databinding.FragmentCanteenBinding import com.denizk0461.studip.model.CanteenOffer +import com.denizk0461.studip.model.CanteenOfferGroup +import com.denizk0461.studip.model.CanteenOfferGroupElement import com.denizk0461.studip.model.DietaryPreferences import com.denizk0461.studip.viewmodel.CanteenViewModel import com.google.android.material.tabs.TabLayoutMediator @@ -76,10 +78,12 @@ class CanteenFragment : Fragment() { liveData = viewModel.allOffers liveData.observe(viewLifecycleOwner) { offers -> - dates = offers.map { it.date }.distinct() + val groupedElements = offers.groupElements().distinct() + + dates = groupedElements.map { it.date }.distinct() createTabLayoutMediator() - viewPagerAdapter.setNewItems(offers, dates.size) + viewPagerAdapter.setNewItems(groupedElements, dates.size) // TODO this must be changed. if an exception is raised, then this will not fire binding.swipeRefreshLayout.isRefreshing = false @@ -118,4 +122,47 @@ class CanteenFragment : Fragment() { private fun getPrefRegex(): Regex = // Regex(viewModel.getDietaryPrefs().deconstruct().replace('t', '.')) Regex(viewModel.getDietaryPrefs().deconstruct().replace('f', '.')) + + private fun List.groupElements(): List { + + val prefsRegex = getPrefRegex() + + + + val filteredForPreferences = if (prefsRegex.toString() == "ffffffffff") { + // show all elements and skip filtering + this + } else { + this.filter { +// Log.d("eek!5", "${it.title}: - ${prefsRegex} vs ${it.dietaryPreferences}") + prefsRegex.matches(it.dietaryPreferences) + } + } + + val a = filteredForPreferences.map { + CanteenOfferGroupElement( + it.title, + it.price, + it.dietaryPreferences, + ) + } + val b = filteredForPreferences.map { offer -> + CanteenOfferGroup( + offer.date, + offer.dateId, + offer.category, + offer.canteen, + filteredForPreferences.filter { + it.category == offer.category && it.date == offer.date && it.canteen == offer.canteen + }.map { + CanteenOfferGroupElement( + it.title, + it.price, + it.dietaryPreferences, + ) + } + ) + } + return b + } } \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/studip/model/CanteenOfferGroup.kt b/app/src/main/java/com/denizk0461/studip/model/CanteenOfferGroup.kt new file mode 100644 index 0000000..3ce0e5b --- /dev/null +++ b/app/src/main/java/com/denizk0461/studip/model/CanteenOfferGroup.kt @@ -0,0 +1,9 @@ +package com.denizk0461.studip.model + +data class CanteenOfferGroup( + val date: String, + val dateId: Int, + val category: String, + val canteen: String, + val offers: List, +) diff --git a/app/src/main/java/com/denizk0461/studip/model/CanteenOfferGroupElement.kt b/app/src/main/java/com/denizk0461/studip/model/CanteenOfferGroupElement.kt new file mode 100644 index 0000000..1ac0465 --- /dev/null +++ b/app/src/main/java/com/denizk0461/studip/model/CanteenOfferGroupElement.kt @@ -0,0 +1,7 @@ +package com.denizk0461.studip.model + +data class CanteenOfferGroupElement( + val title: String, + val price: String, + val dietaryPreferences: String, +)