added 2nd week menus & option to disable buffet in the mensa tab

* the GUI now shows a second week for Mensa menus
* you can disable the buffet in the Mensa tab now
This commit is contained in:
Jannik 2019-03-10 13:37:13 +01:00
parent 3e3a80442e
commit a4eceeddc9
9 changed files with 102 additions and 74 deletions

View File

@ -26,7 +26,7 @@ import android.content.Context
import android.graphics.Color import android.graphics.Color
import org.jetbrains.anko.defaultSharedPreferences import org.jetbrains.anko.defaultSharedPreferences
import org.mosad.seil0.projectlaogai.hsoparser.Course import org.mosad.seil0.projectlaogai.hsoparser.Course
import org.mosad.seil0.projectlaogai.hsoparser.Meal import org.mosad.seil0.projectlaogai.hsoparser.MealWeek
import org.mosad.seil0.projectlaogai.hsoparser.TimeTable import org.mosad.seil0.projectlaogai.hsoparser.TimeTable
/** /**
@ -37,13 +37,14 @@ class PreferencesController {
companion object { companion object {
var cCourseTTLinkList = ArrayList<Course>() var cCourseTTLinkList = ArrayList<Course>()
var cMenusCurrentWeek = ArrayList<Meal>() var cMenusCurrentWeek = MealWeek()
var cMenusNextWeek = ArrayList<Meal>() var cMenusNextWeek = MealWeek()
var cTimeTableCurrentWeek = TimeTable() var cTimeTableCurrentWeek = TimeTable()
var cTimeTableNextWeek = TimeTable() var cTimeTableNextWeek = TimeTable()
var cColorPrimary: Int = Color.BLACK var cColorPrimary: Int = Color.BLACK
var cColorAccent: Int = Color.BLACK var cColorAccent: Int = Color.BLACK
var cCourse = Course("https://www.hs-offenburg.de/index.php?id=6627&class=class&iddV=DA64F6FE-9DDB-429E-A677-05D0D40CB636&week=0", "AI3") var cCourse = Course("https://www.hs-offenburg.de/index.php?id=6627&class=class&iddV=DA64F6FE-9DDB-429E-A677-05D0D40CB636&week=0", "AI3")
var cShowBuffet = true
// the save function // the save function
fun save(context: Context) { fun save(context: Context) {
@ -68,6 +69,12 @@ class PreferencesController {
apply() apply()
} }
// save showBuffet
with (sharedPref.edit()) {
putBoolean(context.getString(R.string.save_key_showBuffet), cShowBuffet)
apply()
}
} }
// the load function // the load function
@ -82,6 +89,9 @@ class PreferencesController {
// load saved colors // load saved colors
cColorPrimary = sharedPref.getInt(context.getString(R.string.save_key_colorPrimary), Color.BLACK) cColorPrimary = sharedPref.getInt(context.getString(R.string.save_key_colorPrimary), Color.BLACK)
cColorAccent = sharedPref.getInt(context.getString(R.string.save_key_colorAccent), Color.parseColor("#FF1744")) cColorAccent = sharedPref.getInt(context.getString(R.string.save_key_colorAccent), Color.parseColor("#FF1744"))
// load showBuffet
cShowBuffet = sharedPref.getBoolean(context.getString(R.string.save_key_showBuffet), true)
} }
} }

View File

@ -71,10 +71,11 @@ class HomeFragment : Fragment() {
val dayMenus: ArrayList<Meal> val dayMenus: ArrayList<Meal>
val cal = Calendar.getInstance() val cal = Calendar.getInstance()
if (cal.get(Calendar.HOUR_OF_DAY) < 15) { if (cal.get(Calendar.HOUR_OF_DAY) < 15) {
dayMenus = MensaParser().getMensaMenuDay(cMenusCurrentWeek, cal.get(Calendar.DAY_OF_WEEK)) dayMenus = cMenusCurrentWeek.day[NotRetardedCalendar().getDayOfWeekIndex()]
} else { } else {
dayMenus = MensaParser().getMensaMenuDay(cMenusCurrentWeek, cal.get(Calendar.DAY_OF_WEEK) + 1) dayMenus = cMenusCurrentWeek.day[NotRetardedCalendar().getTomorrowWeekIndex()]
uiThread { uiThread {
txtView_Menu1Heading.text = resources.getString(R.string.meal_1_tomorrow) txtView_Menu1Heading.text = resources.getString(R.string.meal_1_tomorrow)
txtView_Menu2Heading.text = resources.getString(R.string.meal_2_tomorrow) txtView_Menu2Heading.text = resources.getString(R.string.meal_2_tomorrow)

View File

@ -31,10 +31,13 @@ import android.widget.LinearLayout
import org.jetbrains.anko.doAsync import org.jetbrains.anko.doAsync
import org.jetbrains.anko.uiThread import org.jetbrains.anko.uiThread
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cMenusCurrentWeek import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cMenusCurrentWeek
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cMenusNextWeek
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cShowBuffet
import org.mosad.seil0.projectlaogai.R import org.mosad.seil0.projectlaogai.R
import org.mosad.seil0.projectlaogai.hsoparser.MealWeek
import org.mosad.seil0.projectlaogai.hsoparser.NotRetardedCalendar
import org.mosad.seil0.projectlaogai.uicomponents.MensaDayCardView import org.mosad.seil0.projectlaogai.uicomponents.MensaDayCardView
import org.mosad.seil0.projectlaogai.uicomponents.MenuCardView import org.mosad.seil0.projectlaogai.uicomponents.MenuCardView
import java.util.*
/** /**
* The mensa controller class * The mensa controller class
@ -50,54 +53,50 @@ class MensaFragment : Fragment() {
linLayoutMensaFragment = view.findViewById(R.id.linLayout_MensaFragment) linLayoutMensaFragment = view.findViewById(R.id.linLayout_MensaFragment)
addCurrentWeek() // add the current week (week starts on sunday)
val dayCurrent = if(NotRetardedCalendar().getDayOfWeekIndex() == 6) 0 else NotRetardedCalendar().getDayOfWeekIndex()
addWeek(cMenusCurrentWeek, dayCurrent)
// add the next week
addWeek(cMenusNextWeek, 0)
return view return view
} }
private fun addCurrentWeek() { /**
* add all menus from dayStart to Friday for a given week
*/
private fun addWeek(menusWeek: MealWeek, dayStart: Int) {
doAsync { doAsync {
uiThread { uiThread {
// only add the days dayStart to Fri since the mensa is closed on Sat/Sun
for(day in Calendar.getInstance().get(Calendar.DAY_OF_WEEK)..7) { for (dayIndex in dayStart..4) {
val strDay: String = when(day) {
Calendar.MONDAY -> "Mon"
Calendar.TUESDAY -> "Die"
Calendar.WEDNESDAY -> "Mit"
Calendar.THURSDAY -> "Don"
Calendar.FRIDAY -> "Fre"
Calendar.SATURDAY -> "Sam"
else -> "TODAY" // the app will likely crash here
}
val cardViewMensaDay = MensaDayCardView(context!!, null) val cardViewMensaDay = MensaDayCardView(context!!, null)
var add = false
for (meal in cMenusCurrentWeek) { for (meal in menusWeek.day[dayIndex]) {
//println("Day: " + meal.day) val menuViewMenu = MenuCardView(context!!, null)
if (meal.day.contains(strDay)) { menuViewMenu.setMenuHeading(meal.heading)
val menuViewMenu = MenuCardView(context!!, null) meal.parts.forEachIndexed { partIndex, part ->
menuViewMenu.setMenuHeading(meal.heading) menuViewMenu.getTxtViewMenu().append(part)
if(partIndex < (meal.parts.size - 2))
for ((i, part) in meal.parts.withIndex()) { menuViewMenu.getTxtViewMenu().append("\n")
menuViewMenu.getTxtViewMenu().append(part)
if(i < (meal.parts.size - 2))
menuViewMenu.getTxtViewMenu().append("\n")
}
cardViewMensaDay.setDayHeading(meal.day)
cardViewMensaDay.getLinLayoutMensaDay().addView(menuViewMenu)
add = true
} }
cardViewMensaDay.setDayHeading(meal.day)
if(meal.heading != "Buffet" || cShowBuffet)
cardViewMensaDay.getLinLayoutMensaDay().addView(menuViewMenu)
} }
println("$dayIndex:" + cardViewMensaDay.getLinLayoutMensaDay().childCount) // remove
if(add) if(cardViewMensaDay.getLinLayoutMensaDay().childCount > 1)
linLayoutMensaFragment.addView(cardViewMensaDay) linLayoutMensaFragment.addView(cardViewMensaDay)
} }
// add a card if there are no more meals in this week // add a card if there are no more meals in this week
@ -107,8 +106,8 @@ class MensaFragment : Fragment() {
linLayoutMensaFragment.addView(cardViewNoMoreFood) linLayoutMensaFragment.addView(cardViewNoMoreFood)
} }
} }
} }
} }
} }

View File

@ -22,12 +22,12 @@
package org.mosad.seil0.projectlaogai.fragments package org.mosad.seil0.projectlaogai.fragments
import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.Switch
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.afollestad.aesthetic.Aesthetic import com.afollestad.aesthetic.Aesthetic
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
@ -42,6 +42,7 @@ import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cColorPrima
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cColorAccent import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cColorAccent
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cCourse import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cCourse
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cCourseTTLinkList import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cCourseTTLinkList
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cShowBuffet
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cTimeTableCurrentWeek import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cTimeTableCurrentWeek
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cTimeTableNextWeek import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cTimeTableNextWeek
import org.mosad.seil0.projectlaogai.R import org.mosad.seil0.projectlaogai.R
@ -60,6 +61,7 @@ class SettingsFragment : Fragment() {
private lateinit var linLayoutInfo: LinearLayout private lateinit var linLayoutInfo: LinearLayout
private lateinit var linLayoutPrimaryColor: LinearLayout private lateinit var linLayoutPrimaryColor: LinearLayout
private lateinit var linLayoutAccentColor: LinearLayout private lateinit var linLayoutAccentColor: LinearLayout
private lateinit var switchBuffet: Switch
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -70,6 +72,7 @@ class SettingsFragment : Fragment() {
linLayoutInfo = view.findViewById(R.id.linLayout_Info) linLayoutInfo = view.findViewById(R.id.linLayout_Info)
linLayoutPrimaryColor = view.findViewById(R.id.linLayout_PrimaryColor) linLayoutPrimaryColor = view.findViewById(R.id.linLayout_PrimaryColor)
linLayoutAccentColor = view.findViewById(R.id.linLayout_AccentColor) linLayoutAccentColor = view.findViewById(R.id.linLayout_AccentColor)
switchBuffet = view.findViewById(R.id.switch_buffet)
initActions() initActions()
@ -81,6 +84,7 @@ class SettingsFragment : Fragment() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
txtView_Course.text = cCourse.courseName txtView_Course.text = cCourse.courseName
switch_buffet.isChecked = cShowBuffet // init switch
} }
/** /**
@ -170,6 +174,12 @@ class SettingsFragment : Fragment() {
.show() .show()
} }
switchBuffet.setOnClickListener {
cShowBuffet = switchBuffet.isChecked
PreferencesController.save(context!!)
println(switchBuffet.isChecked)
}
} }
} }

View File

@ -24,6 +24,7 @@ package org.mosad.seil0.projectlaogai.hsoparser
import android.graphics.Color import android.graphics.Color
import java.util.* import java.util.*
import kotlin.collections.ArrayList
class DataTypes { class DataTypes {
val times = arrayOf("8.00 - 9.30", "9.45 - 11.15" ,"11.35 - 13.05", "14.00 -15.30", "15.45 - 17.15", "17.30 - 19.00") val times = arrayOf("8.00 - 9.30", "9.45 - 11.15" ,"11.35 - 13.05", "14.00 -15.30", "15.45 - 17.15", "17.30 - 19.00")
@ -96,13 +97,26 @@ class NotRetardedCalendar {
} }
} }
fun getTomorrowWeekIndex(): Int {
return when(calendar.get(Calendar.DAY_OF_WEEK) + 1) {
Calendar.MONDAY -> 0
Calendar.TUESDAY -> 1
Calendar.WEDNESDAY -> 2
Calendar.THURSDAY -> 3
Calendar.FRIDAY -> 4
Calendar.SATURDAY -> 5
Calendar.SUNDAY -> 6
else -> 7
}
}
} }
data class Course(val courseLink: String, val courseName: String) data class Course(val courseLink: String, val courseName: String)
data class Meal(val day: String, val heading: String, val parts: ArrayList<String>, val additives: String) data class Meal(val day: String, val heading: String, val parts: ArrayList<String>, val additives: String)
data class MealWeek(val day: Array<ArrayList<Meal>> = Array(7) { ArrayList<Meal>() })
data class Lesson(val lessonSubject: String, val lessonTeacher: String, val lessonRoom:String, val lessonRemark: String) data class Lesson(val lessonSubject: String, val lessonTeacher: String, val lessonRoom:String, val lessonRemark: String)
data class TimeTableDay( val timeslots: Array<ArrayList<Lesson>> = Array(6) { ArrayList<Lesson>()}) data class TimeTableDay( val timeslots: Array<ArrayList<Lesson>> = Array(6) { ArrayList<Lesson>()})

View File

@ -24,32 +24,47 @@ package org.mosad.seil0.projectlaogai.hsoparser
import org.jsoup.Jsoup import org.jsoup.Jsoup
import java.util.* import java.util.*
import kotlin.collections.ArrayList
class MensaParser { class MensaParser {
/** /**
* returns the mensa menu for the a week * returns the mensa menu for the a week
*/ */
fun getMensaMenu(menuLink: String): ArrayList<Meal> { fun getMensaMenu(menuLink: String): MealWeek {
val mealList = ArrayList<Meal>() val mealList = ArrayList<Meal>()
val mealWeekList = MealWeek()
val menuHTML = Jsoup.connect(menuLink).get() val menuHTML = Jsoup.connect(menuLink).get()
menuHTML.select("#speiseplan-tabs").select("div.tab-content").select("div.menu-tagesplan").forEachIndexed { _, element -> menuHTML.select("#speiseplan-tabs").select("div.tab-content").select("div.menu-tagesplan").forEachIndexed { dayIndex, day ->
val day = element.select("h3").text() val strDay = day.select("h3").text()
for (i in 0 .. (element.select("div.row h4").size - 1)) {
try {
val heading = element.select("div.row h4")[i].text()
val parts = ArrayList<String>(element.select("div.row").select("div.menu-info")[i].html().substringBefore("<span").replace("<br>", " ").split("\n"))
val additives = element.select("div.row").select("div.menu-info")[i].select("span.show-with-allergenes").text()
mealList.add(Meal(day, heading, parts, additives))
day.select("div.menu-info").forEachIndexed { mealIndex, meal ->
val heading = day.select("h4")[mealIndex].text()
val parts = ArrayList(meal.html().substringBefore("<br>\n").replace("<br>", " ").split("\n"))
val additives = meal.select("span.show-with-allergenes").text()
mealWeekList.day[dayIndex].add(Meal(strDay, heading, parts, additives))
}
for (i in 0 .. (day.select("div.row h4").size - 1)) {
try {
val heading = day.select("div.row h4")[i].text()
val parts = ArrayList<String>(day.select("div.row").select("div.menu-info")[i].html().substringBefore("<span").replace("<br>", " ").split("\n"))
val additives = day.select("div.row").select("div.menu-info")[i].select("span.show-with-allergenes").text()
mealList.add(Meal(strDay, heading, parts, additives))
} catch (e: Exception) { } catch (e: Exception) {
//println("Oooups! Something went wrong: ${e.printStackTrace()}") //println("Oooups! Something went wrong: ${e.printStackTrace()}")
} }
} }
} }
return mealList // Mon to Sat (0 - 5)
//println(mealWeekList.day[4])
return mealWeekList
} }
/** /**
@ -60,26 +75,4 @@ class MensaParser {
return "https://www.swfr.de" + menuHTML.select("#speiseplan-tabs").select("a.next-week").attr("href") return "https://www.swfr.de" + menuHTML.select("#speiseplan-tabs").select("a.next-week").attr("href")
} }
/**
* return the mensa menu of a given day (Mon - Sat)
*/
fun getMensaMenuDay(mealList: ArrayList<Meal>, day: Int): ArrayList<Meal> {
val dayMenus = ArrayList<Meal>()
val strDay: String = when (day) {
Calendar.MONDAY -> "Mon"
Calendar.TUESDAY -> "Die"
Calendar.WEDNESDAY -> "Mit"
Calendar.THURSDAY -> "Don"
Calendar.FRIDAY -> "Fre"
Calendar.SATURDAY -> "Sam"
else -> "TODAY"
}
for (meal in mealList) {
if (meal.day.contains(strDay))
dayMenus.add(meal)
}
return dayMenus
}
} }

View File

@ -11,7 +11,7 @@
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent" android:background="@android:color/background_light">
<LinearLayout <LinearLayout
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -14,7 +14,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" app:layout_constraintTop_toTopOf="parent" android:layout_height="match_parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
> android:background="@android:color/background_light">
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@ -52,5 +52,6 @@
<string name="save_key_courseTTLink" translatable="false">org.mosad.seil0.projectlaogai.courseTTLink</string> <string name="save_key_courseTTLink" translatable="false">org.mosad.seil0.projectlaogai.courseTTLink</string>
<string name="save_key_colorPrimary" translatable="false">org.mosad.seil0.projectlaogai.colorPrimary</string> <string name="save_key_colorPrimary" translatable="false">org.mosad.seil0.projectlaogai.colorPrimary</string>
<string name="save_key_colorAccent" translatable="false">org.mosad.seil0.projectlaogai.colorAccent</string> <string name="save_key_colorAccent" translatable="false">org.mosad.seil0.projectlaogai.colorAccent</string>
<string name="save_key_showBuffet" translatable="false">org.mosad.seil0.projectlaogai.showBuffet</string>
</resources> </resources>