Added PreferenceController

* all preferences and global variables are now inside the PreferenceController, this makes it much easier to extend the apps functionality
* CourseTTLink is now Course with courseLink and courseName as values
This commit is contained in:
Jannik 2019-02-17 15:05:03 +01:00
parent 6301308d76
commit 24f920c05f
8 changed files with 156 additions and 138 deletions

View File

@ -29,6 +29,7 @@ import android.view.MenuItem
import androidx.appcompat.app.ActionBarDrawerToggle import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GravityCompat import androidx.core.view.GravityCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import com.afollestad.aesthetic.Aesthetic import com.afollestad.aesthetic.Aesthetic
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
@ -37,25 +38,22 @@ import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.app_bar_main.* import kotlinx.android.synthetic.main.app_bar_main.*
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.cColor
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cCourse
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cCourseTTLinkList
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cTimeTableCurrentWeek
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cTimeTableNextWeek
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cWeekMenus
import org.mosad.seil0.projectlaogai.fragments.* import org.mosad.seil0.projectlaogai.fragments.*
import org.mosad.seil0.projectlaogai.hsoparser.* import org.mosad.seil0.projectlaogai.hsoparser.MensaParser
import org.mosad.seil0.projectlaogai.hsoparser.TimeTableParser
import kotlin.system.measureTimeMillis import kotlin.system.measureTimeMillis
class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
private val mensaParser = MensaParser() private val mensaParser = MensaParser()
private val timeTableParser = TimeTableParser() private val timeTableParser = TimeTableParser()
private var activeFragment: Fragment = HomeFragment() // the currently active fragment, home at the start
private var courseTTLinkList = ArrayList<CourseTTLink>()
private lateinit var course: CourseTTLink
private var color: Int = Color.BLACK
companion object {
var cWeekMenus = ArrayList<Meal>()
var cTimeTableCurrentWeek = arrayOf<Array<Lesson>>()
var cTimeTableNextWeek = arrayOf<Array<Lesson>>()
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
Aesthetic.attach(this) Aesthetic.attach(this)
@ -76,16 +74,15 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
} }
} else { } else {
Aesthetic.config { Aesthetic.config {
colorPrimary(color) colorPrimary(cColor)
colorPrimaryDark(color) colorPrimaryDark(cColor)
apply() apply()
} }
} }
//init home fragment TODO make a abstract fragment class //init home fragment
val homeFragment = HomeFragment()
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction() val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, homeFragment) fragmentTransaction.replace(R.id.fragment_container, activeFragment)
fragmentTransaction.commit() fragmentTransaction.commit()
val toggle = ActionBarDrawerToggle( val toggle = ActionBarDrawerToggle(
@ -135,88 +132,36 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
// Handle navigation view item clicks here. // Handle navigation view item clicks here.
when (item.itemId) { when (item.itemId) {
R.id.nav_home -> { R.id.nav_home -> {
val homeFragment = HomeFragment() activeFragment = HomeFragment()
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, homeFragment)
fragmentTransaction.commit()
} }
R.id.nav_mensa -> { R.id.nav_mensa -> {
val mensaFragment = MensaFragment() activeFragment = MensaFragment()
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, mensaFragment)
fragmentTransaction.commit()
} }
R.id.nav_timetable -> { R.id.nav_timetable -> {
val timeTableFragment = TimeTableFragment() activeFragment = TimeTableFragment()
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, timeTableFragment)
fragmentTransaction.commit()
} }
R.id.nav_moodle -> { R.id.nav_moodle -> {
val moodleFragment = MoodleFragment() activeFragment = MoodleFragment()
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, moodleFragment)
fragmentTransaction.commit()
} }
R.id.nav_settings -> { R.id.nav_settings -> {
val settingsFragment = SettingsFragment() activeFragment = SettingsFragment()
settingsFragment.setMainActivity(this)
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, settingsFragment)
fragmentTransaction.commit()
} }
} }
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, activeFragment)
fragmentTransaction.commit()
drawer_layout.closeDrawer(GravityCompat.START) drawer_layout.closeDrawer(GravityCompat.START)
return true return true
} }
/**
* update the gui with the data of the new selected course
* save selected course and courseTTLink
*/
fun updateCourse(course: CourseTTLink) {
println(course.course)
println(course.courseTTLink)
this.course = course
// save new selected course
val sharedPref = getPreferences(MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
putString(getString(R.string.save_key_course), course.course)
putString(getString(R.string.save_key_courseTTLink), course.courseTTLink.replace("http", "https"))
apply()
}
cTimeTableCurrentWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("http", "https"))
}
/**
* save the primary color
*/
fun saveColorPrimary(color : Int) {
val sharedPref = getPreferences(MODE_PRIVATE)
with (sharedPref.edit()) {
putInt(getString(R.string.save_key_colorPrimary), color)
apply()
}
}
/** /**
* load the mensa menus of the current week * load the mensa menus of the current week
*/ */
private fun load() { private fun load() {
// load saved course // load the settings
val sharedPref = getPreferences(MODE_PRIVATE) PreferencesController.load(this) // this must be finished before doing anything else
course = CourseTTLink(
sharedPref.getString(getString(R.string.save_key_courseTTLink), "https://www.hs-offenburg.de/index.php?id=6627&class=class&iddV=DA64F6FE-9DDB-429E-A677-05D0D40CB636&week=0")!!,
sharedPref.getString(getString(R.string.save_key_course), "AI3")!!
)
// load saved color
color = sharedPref.getInt(getString(R.string.save_key_colorPrimary), Color.BLACK)
/** /**
* load mensa, course timetable and courselist from the swfr/hso website * load mensa, course timetable and courselist from the swfr/hso website
@ -228,7 +173,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
* we need have time until the user opens the dialog * we need have time until the user opens the dialog
*/ */
doAsync { doAsync {
courseTTLinkList = timeTableParser.getCourseTTLinks() cCourseTTLinkList = timeTableParser.getCourseTTLinks()
} }
val jobMenus = doAsync { val jobMenus = doAsync {
@ -237,7 +182,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
val jobTTCurrentWeek = doAsync { val jobTTCurrentWeek = doAsync {
try { try {
cTimeTableCurrentWeek = timeTableParser.getTimeTable(course.courseTTLink) cTimeTableCurrentWeek = timeTableParser.getTimeTable(cCourse.courseLink)
} catch (e: Exception) { } catch (e: Exception) {
uiThread { uiThread {
@ -253,7 +198,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
val jobTTNextWeek = doAsync { val jobTTNextWeek = doAsync {
try { try {
cTimeTableNextWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("week=0","week=1")) cTimeTableNextWeek = timeTableParser.getTimeTable(cCourse.courseLink.replace("week=0","week=1"))
} catch (e: Exception) { } catch (e: Exception) {
e.stackTrace e.stackTrace
} }
@ -266,16 +211,4 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
println("Completed in $time ms") println("Completed in $time ms")
} }
fun getCourseTTLinkList(): ArrayList<CourseTTLink>{
return courseTTLinkList
}
fun getCourse(): CourseTTLink {
return course
}
fun getColorPrimary(): Int {
return color
}
} }

View File

@ -0,0 +1,79 @@
/**
* ProjectLaogai
*
* Copyright 2019 <seil0@mosad.xyz>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*
*/
package org.mosad.seil0.projectlaogai
import android.content.Context
import android.graphics.Color
import org.jetbrains.anko.defaultSharedPreferences
import org.mosad.seil0.projectlaogai.hsoparser.Course
import org.mosad.seil0.projectlaogai.hsoparser.Lesson
import org.mosad.seil0.projectlaogai.hsoparser.Meal
/**
* The PreferencesController class
* contains all preferences and global variables that exist in this app
*/
class PreferencesController {
companion object {
var cCourseTTLinkList = ArrayList<Course>()
var cWeekMenus = ArrayList<Meal>()
var cTimeTableCurrentWeek = arrayOf<Array<Lesson>>()
var cTimeTableNextWeek = arrayOf<Array<Lesson>>()
var cColor: 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")
// the save function
fun save(context: Context) {
println(cCourse.courseLink)
// save the course
val sharedPref = context.defaultSharedPreferences
with (sharedPref.edit()) {
putString(context.getString(R.string.save_key_course), cCourse.courseName)
putString(context.getString(R.string.save_key_courseTTLink), cCourse.courseLink)
apply()
}
// save the primary color
with (sharedPref.edit()) {
putInt(context.getString(R.string.save_key_colorPrimary), cColor)
apply()
}
}
// the load function
fun load(context: Context) {
// load saved course
val sharedPref = context.defaultSharedPreferences
cCourse = Course(
sharedPref.getString(context.getString(R.string.save_key_courseTTLink), "https://www.hs-offenburg.de/index.php?id=6627&class=class&iddV=DA64F6FE-9DDB-429E-A677-05D0D40CB636&week=0")!!,
sharedPref.getString(context.getString(R.string.save_key_course), "AI3")!!
)
// load saved color
cColor = sharedPref.getInt(context.getString(R.string.save_key_colorPrimary), Color.BLACK)
}
}
}

View File

@ -32,7 +32,8 @@ import com.afollestad.materialdialogs.MaterialDialog
import kotlinx.android.synthetic.main.fragment_home.* import kotlinx.android.synthetic.main.fragment_home.*
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.MainActivity import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cTimeTableCurrentWeek
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cWeekMenus
import org.mosad.seil0.projectlaogai.R import org.mosad.seil0.projectlaogai.R
import org.mosad.seil0.projectlaogai.hsoparser.* import org.mosad.seil0.projectlaogai.hsoparser.*
import org.mosad.seil0.projectlaogai.uicomponents.LessonCardView import org.mosad.seil0.projectlaogai.uicomponents.LessonCardView
@ -70,9 +71,9 @@ class HomeFragment : Fragment() {
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(MainActivity.cWeekMenus, cal.get(Calendar.DAY_OF_WEEK)) dayMenus = MensaParser().getMensaMenuDay(cWeekMenus, cal.get(Calendar.DAY_OF_WEEK))
} else { } else {
dayMenus = MensaParser().getMensaMenuDay(MainActivity.cWeekMenus, cal.get(Calendar.DAY_OF_WEEK) + 1) dayMenus = MensaParser().getMensaMenuDay(cWeekMenus, cal.get(Calendar.DAY_OF_WEEK) + 1)
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)
@ -121,9 +122,9 @@ class HomeFragment : Fragment() {
private fun addCurrentTimeTable() { private fun addCurrentTimeTable() {
val dayIndex = NotRetardedCalendar().getDayOfWeekIndex() val dayIndex = NotRetardedCalendar().getDayOfWeekIndex()
if (MainActivity.cTimeTableCurrentWeek.isNotEmpty() && dayIndex < 6) { if (cTimeTableCurrentWeek.isNotEmpty() && dayIndex < 6) {
val timeTableDay = MainActivity.cTimeTableCurrentWeek[dayIndex] val timeTableDay = cTimeTableCurrentWeek[dayIndex]
for (i in 0..5) { for (i in 0..5) {
val lessonCardView = LessonCardView(context!!, null) val lessonCardView = LessonCardView(context!!, null)

View File

@ -30,7 +30,7 @@ import android.view.ViewGroup
import android.widget.LinearLayout 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.MainActivity import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cWeekMenus
import org.mosad.seil0.projectlaogai.R import org.mosad.seil0.projectlaogai.R
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
@ -76,7 +76,7 @@ class MensaFragment : Fragment() {
val cardViewMensaDay = MensaDayCardView(context!!, null) val cardViewMensaDay = MensaDayCardView(context!!, null)
var add = false var add = false
for (meal in MainActivity.cWeekMenus) { for (meal in cWeekMenus) {
//println("Day: " + meal.day) //println("Day: " + meal.day)
if (meal.day.contains(strDay)) { if (meal.day.contains(strDay)) {

View File

@ -24,23 +24,29 @@ package org.mosad.seil0.projectlaogai.fragments
import android.graphics.Color import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment
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 androidx.fragment.app.Fragment
import com.afollestad.aesthetic.Aesthetic import com.afollestad.aesthetic.Aesthetic
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.color.colorChooser import com.afollestad.materialdialogs.color.colorChooser
import com.afollestad.materialdialogs.customview.customView import com.afollestad.materialdialogs.customview.customView
import com.afollestad.materialdialogs.list.listItems import com.afollestad.materialdialogs.list.listItems
import kotlinx.android.synthetic.main.fragment_settings.* import kotlinx.android.synthetic.main.fragment_settings.*
import org.jetbrains.anko.Android
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.MainActivity import org.mosad.seil0.projectlaogai.PreferencesController
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cColor
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cCourse
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cCourseTTLinkList
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cTimeTableCurrentWeek
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cTimeTableNextWeek
import org.mosad.seil0.projectlaogai.R import org.mosad.seil0.projectlaogai.R
import org.mosad.seil0.projectlaogai.hsoparser.CourseTTLink import org.mosad.seil0.projectlaogai.hsoparser.TimeTableParser
import java.util.ArrayList import java.util.*
/** /**
* The settings controller class * The settings controller class
@ -53,9 +59,6 @@ class SettingsFragment : Fragment() {
private lateinit var linLayoutInfo: LinearLayout private lateinit var linLayoutInfo: LinearLayout
private lateinit var linLayoutMainColor: LinearLayout private lateinit var linLayoutMainColor: LinearLayout
private lateinit var viewPrimaryColor: View private lateinit var viewPrimaryColor: View
private lateinit var courseTTLinkList: ArrayList<CourseTTLink>
private var mainActivity = MainActivity()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -76,7 +79,7 @@ class SettingsFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
txtView_Course.text = mainActivity.getCourse().course txtView_Course.text = cCourse.courseName
} }
/** /**
@ -91,12 +94,11 @@ class SettingsFragment : Fragment() {
// open a new dialog // open a new dialog
val courseList = ArrayList<String>() val courseList = ArrayList<String>()
courseTTLinkList = mainActivity.getCourseTTLinkList() cCourseTTLinkList.forEach { (_, course) ->
courseTTLinkList.forEach { (_, course) ->
courseList.add(course) courseList.add(course)
} }
MaterialDialog(context!!).listItems(items = courseList){ _, index, text -> MaterialDialog(context!!).listItems(items = courseList) { _, index, text ->
txtView_Course.text = text // update txtView txtView_Course.text = text // update txtView
val dialog = MaterialDialog(context!!).cancelable(false) val dialog = MaterialDialog(context!!).cancelable(false)
@ -105,7 +107,12 @@ class SettingsFragment : Fragment() {
dialog.show() dialog.show()
doAsync { doAsync {
mainActivity.updateCourse(courseTTLinkList[index]) cCourse = cCourseTTLinkList[index] // set the course
PreferencesController.save(context!!)
// update current & next weeks timetable
cTimeTableCurrentWeek = TimeTableParser().getTimeTable(cCourse.courseLink)
cTimeTableNextWeek = TimeTableParser().getTimeTable(cCourse.courseLink.replace("week=0","week=1"))
uiThread { uiThread {
dialog.dismiss() dialog.dismiss()
@ -113,7 +120,7 @@ class SettingsFragment : Fragment() {
} }
} }
.show() .show()
} }
linLayoutInfo.setOnClickListener { linLayoutInfo.setOnClickListener {
@ -130,7 +137,7 @@ class SettingsFragment : Fragment() {
MaterialDialog(context!!) MaterialDialog(context!!)
.title(R.string.primary_color) .title(R.string.primary_color)
.colorChooser(colors, allowCustomArgb = true,initialSelection = mainActivity.getColorPrimary()) { _, color -> .colorChooser(colors, allowCustomArgb = true, initialSelection = cColor) { _, color ->
viewPrimaryColor.setBackgroundColor(color) viewPrimaryColor.setBackgroundColor(color)
Aesthetic.config { Aesthetic.config {
colorPrimary(color) colorPrimary(color)
@ -138,15 +145,12 @@ class SettingsFragment : Fragment() {
apply() apply()
} }
mainActivity.saveColorPrimary(color) cColor = color
PreferencesController.save(context!!)
} }
.positiveButton(R.string.select) .positiveButton(R.string.select)
.show() .show()
} }
} }
fun setMainActivity(mainActivity: MainActivity) {
this.mainActivity = mainActivity
}
} }

View File

@ -24,14 +24,15 @@ package org.mosad.seil0.projectlaogai.fragments
import android.graphics.Color import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment
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 androidx.fragment.app.Fragment
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.MainActivity import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cTimeTableCurrentWeek
import org.mosad.seil0.projectlaogai.PreferencesController.Companion.cTimeTableNextWeek
import org.mosad.seil0.projectlaogai.R import org.mosad.seil0.projectlaogai.R
import org.mosad.seil0.projectlaogai.hsoparser.DataTypes import org.mosad.seil0.projectlaogai.hsoparser.DataTypes
import org.mosad.seil0.projectlaogai.hsoparser.NotRetardedCalendar import org.mosad.seil0.projectlaogai.hsoparser.NotRetardedCalendar
@ -54,7 +55,7 @@ class TimeTableFragment : Fragment() {
linLayoutTTFragment = view.findViewById(R.id.linLayout_TTFragment) linLayoutTTFragment = view.findViewById(R.id.linLayout_TTFragment)
if (MainActivity.cTimeTableCurrentWeek.isNotEmpty()) { if (cTimeTableCurrentWeek.isNotEmpty()) {
addCurrentWeek() addCurrentWeek()
} else { } else {
// TODO show card with error msg // TODO show card with error msg
@ -76,12 +77,12 @@ class TimeTableFragment : Fragment() {
uiThread { uiThread {
// add current weeks days // add current weeks days
for(day in dayIndex..5) { for (day in dayIndex..5) {
val cardViewTimeTableDay = MensaDayCardView(context!!, null) val cardViewTimeTableDay = MensaDayCardView(context!!, null)
cardViewTimeTableDay.setDayHeading(formatter.format(calendar.time)) cardViewTimeTableDay.setDayHeading(formatter.format(calendar.time))
// for each lessen of the day // for each lessen of the day
for((i, lesson) in MainActivity.cTimeTableCurrentWeek[day].withIndex()) { for ((i, lesson) in cTimeTableCurrentWeek[day].withIndex()) {
val lessonCardView = LessonCardView(context!!, null) val lessonCardView = LessonCardView(context!!, null)
lessonCardView.setBackgroundColor(Color.TRANSPARENT) lessonCardView.setBackgroundColor(Color.TRANSPARENT)
@ -91,11 +92,11 @@ class TimeTableFragment : Fragment() {
lessonCardView.getTxtViewTime().text = DataTypes().getTime()[i] lessonCardView.getTxtViewTime().text = DataTypes().getTime()[i]
// only add the lesson if it contains data // only add the lesson if it contains data
if(lessonCardView.getTxtViewLesson().text.length > 2) if (lessonCardView.getTxtViewLesson().text.length > 2)
cardViewTimeTableDay.getLinLayoutMensaDay().addView(lessonCardView) cardViewTimeTableDay.getLinLayoutMensaDay().addView(lessonCardView)
} }
calendar.add(Calendar.DATE,1) calendar.add(Calendar.DATE, 1)
// if the day contains no lessons add a text "No lesson today" // if the day contains no lessons add a text "No lesson today"
if (cardViewTimeTableDay.getLinLayoutMensaDay().childCount <= 1) { if (cardViewTimeTableDay.getLinLayoutMensaDay().childCount <= 1) {
@ -110,16 +111,16 @@ class TimeTableFragment : Fragment() {
// TODO if there is no lesson at one day , show a no lesson card // TODO if there is no lesson at one day , show a no lesson card
// add next weeks days, max number = dayIndex, if timetable was loaded // add next weeks days, max number = dayIndex, if timetable was loaded
if (MainActivity.cTimeTableNextWeek.isNotEmpty()) { if (cTimeTableNextWeek.isNotEmpty()) {
calendar.add(Calendar.DATE,1) // before this we are at a sunday (no lecture on sundays!) calendar.add(Calendar.DATE, 1) // before this we are at a sunday (no lecture on sundays!)
for(day in 0..(dayIndex - 1)) { for (day in 0..(dayIndex - 1)) {
val cardViewTimeTableDay = MensaDayCardView(context!!, null) val cardViewTimeTableDay = MensaDayCardView(context!!, null)
cardViewTimeTableDay.setDayHeading(formatter.format(calendar.time)) cardViewTimeTableDay.setDayHeading(formatter.format(calendar.time))
// for each lessen of the day // for each lessen of the day
for((i, lesson) in MainActivity.cTimeTableNextWeek[day].withIndex()) { for ((i, lesson) in cTimeTableNextWeek[day].withIndex()) {
val lessonCardView = LessonCardView(context!!, null) val lessonCardView = LessonCardView(context!!, null)
lessonCardView.setBackgroundColor(Color.TRANSPARENT) lessonCardView.setBackgroundColor(Color.TRANSPARENT)
@ -128,11 +129,11 @@ class TimeTableFragment : Fragment() {
lessonCardView.getTxtViewLesson().append(lesson.lessonRoom) lessonCardView.getTxtViewLesson().append(lesson.lessonRoom)
lessonCardView.getTxtViewTime().text = DataTypes().getTime()[i] lessonCardView.getTxtViewTime().text = DataTypes().getTime()[i]
if(lessonCardView.getTxtViewLesson().text.length > 2) if (lessonCardView.getTxtViewLesson().text.length > 2)
cardViewTimeTableDay.getLinLayoutMensaDay().addView(lessonCardView) cardViewTimeTableDay.getLinLayoutMensaDay().addView(lessonCardView)
} }
calendar.add(Calendar.DATE,1) calendar.add(Calendar.DATE, 1)
linLayoutTTFragment.addView(cardViewTimeTableDay) linLayoutTTFragment.addView(cardViewTimeTableDay)
} }
} }

View File

@ -58,6 +58,6 @@ class NotRetardedCalendar {
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 CourseTTLink(val courseTTLink: String, val course: 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)

View File

@ -26,7 +26,7 @@ import org.jsoup.Jsoup
class TimeTableParser { class TimeTableParser {
private val days = arrayOf("Monday", "Tuesday" ,"Wednesday", "Thursday", "Friday", "Saturday") private val days = arrayOf("Monday", "Tuesday" ,"Wednesday", "Thursday", "Friday", "Saturday")
private var courseTTLinkList = ArrayList<CourseTTLink>() private var courseTTLinkList = ArrayList<Course>()
/** /**
* get the timetable from the given url * get the timetable from the given url
@ -59,11 +59,11 @@ class TimeTableParser {
/** /**
* parse all courses from the courses site at https://www.hs-offenburg.de/studium/vorlesungsplaene/ * parse all courses from the courses site at https://www.hs-offenburg.de/studium/vorlesungsplaene/
*/ */
fun getCourseTTLinks(): ArrayList<CourseTTLink> { fun getCourseTTLinks(): ArrayList<Course> {
val courseHTML = Jsoup.connect("https://www.hs-offenburg.de/studium/vorlesungsplaene/").get() val courseHTML = Jsoup.connect("https://www.hs-offenburg.de/studium/vorlesungsplaene/").get()
courseHTML.select("ul.index-group").select("li.Class").select("a[href]").forEachIndexed { _, element -> courseHTML.select("ul.index-group").select("li.Class").select("a[href]").forEachIndexed { _, element ->
courseTTLinkList.add(CourseTTLink(element.attr("href"),element.text())) courseTTLinkList.add(Course(element.attr("href").replace("http", "https"),element.text()))
} }
return courseTTLinkList return courseTTLinkList
} }