added course choose option

* you can choose any available course now (not saved yet, the app will hang a few seconds)
This commit is contained in:
Jannik 2018-11-01 02:12:43 +01:00
parent b915f574fe
commit 9be7a56b05
5 changed files with 85 additions and 38 deletions

View File

@ -30,18 +30,19 @@ import androidx.appcompat.app.AppCompatActivity
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import com.afollestad.materialdialogs.MaterialDialog
import kotlinx.android.synthetic.main.activity_main.* 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.mosad.seil0.projectlaogai.fragments.HomeFragment import org.mosad.seil0.projectlaogai.fragments.HomeFragment
import org.mosad.seil0.projectlaogai.fragments.MensaFragment import org.mosad.seil0.projectlaogai.fragments.MensaFragment
import org.mosad.seil0.projectlaogai.fragments.SettingsFragment import org.mosad.seil0.projectlaogai.fragments.SettingsFragment
import org.mosad.seil0.projectlaogai.fragments.TimeTableFragment import org.mosad.seil0.projectlaogai.fragments.TimeTableFragment
import org.mosad.seil0.projectlaogai.hsoparser.Lesson import org.mosad.seil0.projectlaogai.hsoparser.*
import org.mosad.seil0.projectlaogai.hsoparser.Meal
import org.mosad.seil0.projectlaogai.hsoparser.MensaParser
import org.mosad.seil0.projectlaogai.hsoparser.TimeTableParser
import java.util.* import java.util.*
import kotlin.collections.ArrayList
import kotlin.system.measureTimeMillis
class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
@ -51,6 +52,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
private var weekMenus = ArrayList<Meal>() private var weekMenus = ArrayList<Meal>()
private lateinit var timeTableWeek: Array<Array<Lesson>> private lateinit var timeTableWeek: Array<Array<Lesson>>
private var courseTTLinkList = ArrayList<CourseTTLink>()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -62,8 +64,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
//init home fragment TODO make a abstract fragment class //init home fragment TODO make a abstract fragment class
val homeFragment = HomeFragment() val homeFragment = HomeFragment()
homeFragment.setCurrentMenu(weekMenus) homeFragment.setMainActivity(this)
homeFragment.setCurrentTimeTableWeek(timeTableWeek)
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction() val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, homeFragment) fragmentTransaction.replace(R.id.fragment_container, homeFragment)
fragmentTransaction.commit() fragmentTransaction.commit()
@ -106,15 +107,14 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
when (item.itemId) { when (item.itemId) {
R.id.nav_home -> { R.id.nav_home -> {
val homeFragment = HomeFragment() val homeFragment = HomeFragment()
homeFragment.setCurrentMenu(weekMenus) homeFragment.setMainActivity(this)
homeFragment.setCurrentTimeTableWeek(timeTableWeek)
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction() val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, homeFragment) fragmentTransaction.replace(R.id.fragment_container, homeFragment)
fragmentTransaction.commit() fragmentTransaction.commit()
} }
R.id.nav_mensa -> { R.id.nav_mensa -> {
val mensaFragment = MensaFragment() val mensaFragment = MensaFragment()
mensaFragment.setWeekMenu(weekMenus) mensaFragment.setMainActivity(this)
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction() val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, mensaFragment) fragmentTransaction.replace(R.id.fragment_container, mensaFragment)
fragmentTransaction.commit() fragmentTransaction.commit()
@ -134,6 +134,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
} }
R.id.nav_settings -> { R.id.nav_settings -> {
val settingsFragment = SettingsFragment() val settingsFragment = SettingsFragment()
settingsFragment.setMainActivity(this)
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction() val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, settingsFragment) fragmentTransaction.replace(R.id.fragment_container, settingsFragment)
fragmentTransaction.commit() fragmentTransaction.commit()
@ -144,6 +145,20 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
return true return true
} }
/**
* update the gui with the data of the new selected course TODO
* save selected course and courseTTLink TODO
*/
fun updateCourse(course: CourseTTLink) {
println(course.course)
println(course.courseTTLink)
// the app is hanging here
doAsync {
timeTableWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("http", "https"))
}.get()
}
/** /**
* load the mensa menus of the current week * load the mensa menus of the current week
* TODO show loading screen while loading * TODO show loading screen while loading
@ -151,10 +166,32 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
* TODO evaluate if we should use a timeout here * TODO evaluate if we should use a timeout here
*/ */
private fun load() { private fun load() {
doAsync { val time = measureTimeMillis {
weekMenus = mensaParser.getMensaMenu() /* getting the course list should be faster than the timetable,
timeTableWeek = timeTableParser.getTimeTable("https://www.hs-offenburg.de/index.php?id=6627&class=class&iddV=DA64F6FE-9DDB-429E-A677-05D0D40CB636&week=0") * we need have time until the user opens the dialog
}.get() */
doAsync {
courseTTLinkList = timeTableParser.getCourseTTLinks()
}
doAsync {
weekMenus = mensaParser.getMensaMenu()
timeTableWeek = timeTableParser.getTimeTable("https://www.hs-offenburg.de/index.php?id=6627&class=class&iddV=DA64F6FE-9DDB-429E-A677-05D0D40CB636&week=0")
}.get()
}
println("Completed in $time ms")
} }
fun getCourseTTLinkList(): ArrayList<CourseTTLink>{
return courseTTLinkList
}
fun getCurrentTimeTableWeek(): Array<Array<Lesson>> {
return timeTableWeek
}
fun getWeekMenu(): ArrayList<Meal>{
return weekMenus
}
} }

View File

@ -23,18 +23,17 @@
package org.mosad.seil0.projectlaogai.fragments package org.mosad.seil0.projectlaogai.fragments
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 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.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.Lesson
import org.mosad.seil0.projectlaogai.hsoparser.Meal import org.mosad.seil0.projectlaogai.hsoparser.Meal
import org.mosad.seil0.projectlaogai.hsoparser.MensaParser import org.mosad.seil0.projectlaogai.hsoparser.MensaParser
import org.mosad.seil0.projectlaogai.uicomponents.LessonCardView import org.mosad.seil0.projectlaogai.uicomponents.LessonCardView
@ -46,10 +45,8 @@ import java.util.*
*/ */
class HomeFragment : Fragment() { class HomeFragment : Fragment() {
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")
private lateinit var linLayoutTimeTable: LinearLayout private lateinit var linLayoutTimeTable: LinearLayout
private lateinit var currentMenus: ArrayList<Meal> private var mainActivity = MainActivity()
private lateinit var timeTableWeek: Array<Array<Lesson>>
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -68,7 +65,7 @@ class HomeFragment : Fragment() {
private fun addCurrentMensaMenu() { private fun addCurrentMensaMenu() {
doAsync { doAsync {
val dayMenus: ArrayList<Meal> = MensaParser().getMensaMenuDay(currentMenus, Calendar.getInstance().get(Calendar.DAY_OF_WEEK)) val dayMenus: ArrayList<Meal> = MensaParser().getMensaMenuDay(mainActivity.getWeekMenu(), Calendar.getInstance().get(Calendar.DAY_OF_WEEK))
uiThread { uiThread {
@ -90,7 +87,7 @@ class HomeFragment : Fragment() {
} }
private fun addCurrentTimeTable() { private fun addCurrentTimeTable() {
val timeTableDay = timeTableWeek[Calendar.getInstance().get(Calendar.DAY_OF_WEEK) -2] val timeTableDay = mainActivity.getCurrentTimeTableWeek()[Calendar.getInstance().get(Calendar.DAY_OF_WEEK) -2]
for (i in 0..5) { for (i in 0..5) {
val lessonCardView = LessonCardView(context!!, null) val lessonCardView = LessonCardView(context!!, null)
@ -113,12 +110,8 @@ class HomeFragment : Fragment() {
} }
} }
fun setCurrentMenu(weekMenus: ArrayList<Meal>){ fun setMainActivity(mainActivity: MainActivity) {
this.currentMenus = weekMenus this.mainActivity = mainActivity
}
fun setCurrentTimeTableWeek(timeTableWeek: Array<Array<Lesson>>) {
this.timeTableWeek = timeTableWeek
} }
} }

View File

@ -30,6 +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.R import org.mosad.seil0.projectlaogai.R
import org.mosad.seil0.projectlaogai.hsoparser.Meal import org.mosad.seil0.projectlaogai.hsoparser.Meal
import org.mosad.seil0.projectlaogai.hsoparser.MensaParser import org.mosad.seil0.projectlaogai.hsoparser.MensaParser
@ -44,7 +45,7 @@ import java.util.*
class MensaFragment : Fragment() { class MensaFragment : Fragment() {
private lateinit var linLayoutMensaFragment: LinearLayout private lateinit var linLayoutMensaFragment: LinearLayout
private lateinit var weekMenus: ArrayList<Meal> private var mainActivity = MainActivity()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -78,7 +79,7 @@ class MensaFragment : Fragment() {
val cardViewMensaDay = MensaDayCardView(context!!, null) val cardViewMensaDay = MensaDayCardView(context!!, null)
var add = false var add = false
for (meal in weekMenus) { for (meal in mainActivity.getWeekMenu()) {
//println("Day: " + meal.day) //println("Day: " + meal.day)
if (meal.day.contains(strDay)) { if (meal.day.contains(strDay)) {
@ -139,8 +140,8 @@ class MensaFragment : Fragment() {
} }
fun setWeekMenu(weekMenus: ArrayList<Meal>){ fun setMainActivity(mainActivity: MainActivity) {
this.weekMenus = weekMenus this.mainActivity = mainActivity
} }
} }

View File

@ -33,7 +33,10 @@ import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.color.colorChooser import com.afollestad.materialdialogs.color.colorChooser
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.mosad.seil0.projectlaogai.MainActivity
import org.mosad.seil0.projectlaogai.R import org.mosad.seil0.projectlaogai.R
import org.mosad.seil0.projectlaogai.hsoparser.CourseTTLink
import java.util.ArrayList
/** /**
* The settings controller class * The settings controller class
@ -46,6 +49,9 @@ 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? {
@ -73,13 +79,19 @@ class SettingsFragment : Fragment() {
linLayoutCourse.setOnClickListener { linLayoutCourse.setOnClickListener {
// open a new dialog // open a new dialog
val courses = listOf("AI1", "AI2", "AI3", "AI4", "AI5", "AI6", "AI7") val courseList = ArrayList<String>()
MaterialDialog(context!!)
.listItems(items = courses){ _, _, text ->
// TODO save selected course
courseTTLinkList = mainActivity.getCourseTTLinkList()
courseTTLinkList.forEach { (_, course) ->
courseList.add(course)
}
MaterialDialog(context!!)
.listItems(items = courseList){ _, index, text ->
// update txtView // update txtView
txtView_Course.text = text txtView_Course.text = text
mainActivity.updateCourse(courseTTLinkList[index])
} }
.show() .show()
} }
@ -106,5 +118,8 @@ class SettingsFragment : Fragment() {
} }
} }
fun setMainActivity(mainActivity: MainActivity) {
this.mainActivity = mainActivity
}
} }

View File

@ -48,8 +48,8 @@ class TimeTableParser {
fun getTimeTable(courseTTURL: String): Array<Array<Lesson>> { fun getTimeTable(courseTTURL: String): Array<Array<Lesson>> {
val scheduleHTML = Jsoup.connect(courseTTURL).get() val scheduleHTML = Jsoup.connect(courseTTURL).get()
//val week = scheduleHTML.select("h1.timetable-caption").text() // val week = scheduleHTML.select("h1.timetable-caption").text()
//println("$week successful!\n") // println("$week successful!\n")
scheduleHTML.select("table.timetable").select("td.lastcol").forEachIndexed { index, element -> scheduleHTML.select("table.timetable").select("td.lastcol").forEachIndexed { index, element ->
timeTableWeek[index % 6][index / 6] = Lesson(element.select("div.lesson-subject").text(), element.select("div.lesson-teacher").text(), element.select("div.lesson-room").text(), element.select("div.lesson-remark").text()) timeTableWeek[index % 6][index / 6] = Lesson(element.select("div.lesson-subject").text(), element.select("div.lesson-teacher").text(), element.select("div.lesson-room").text(), element.select("div.lesson-remark").text())
@ -60,12 +60,13 @@ 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() { fun getCourseTTLinks(): ArrayList<CourseTTLink> {
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(CourseTTLink(element.attr("href"),element.text()))
} }
return courseTTLinkList
} }
fun printTimeTableWeek (timeTableWeek: Array<Array<Lesson>>) { fun printTimeTableWeek (timeTableWeek: Array<Array<Lesson>>) {