major bug fixes & version 0.3.2

* fixed a issue that prevented the app from showing the second weeks schedule, until now the app showed always the current week as next week
* minor color chooser improvements
* minor code clean up
This commit is contained in:
Jannik 2019-01-03 13:46:09 +01:00
parent 87bf614d28
commit 75a457312d
13 changed files with 41 additions and 113 deletions

View File

@ -39,9 +39,6 @@ dependencies {
implementation 'com.afollestad.material-dialogs:core:2.0.0-rc5' implementation 'com.afollestad.material-dialogs:core:2.0.0-rc5'
implementation 'com.afollestad.material-dialogs:color:2.0.0-rc5' implementation 'com.afollestad.material-dialogs:color:2.0.0-rc5'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.0'
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'

View File

@ -1,7 +1,7 @@
/** /**
* ProjectLaogai * ProjectLaogai
* *
* Copyright 2018 <seil0@mosad.xyz> * Copyright 2019 <seil0@mosad.xyz>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -35,9 +35,6 @@ import com.afollestad.materialdialogs.MaterialDialog
import com.google.android.material.navigation.NavigationView import com.google.android.material.navigation.NavigationView
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 kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
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.fragments.* import org.mosad.seil0.projectlaogai.fragments.*
@ -51,16 +48,12 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
private var weekMenus = ArrayList<Meal>() private var weekMenus = ArrayList<Meal>()
private var courseTTLinkList = ArrayList<CourseTTLink>() private var courseTTLinkList = ArrayList<CourseTTLink>()
//private var timeTableCurrentWeek = arrayOf<Array<Lesson>>() private var timeTableCurrentWeek = arrayOf<Array<Lesson>>()
//private var timeTableNextWeek = arrayOf<Array<Lesson>>() private var timeTableNextWeek = arrayOf<Array<Lesson>>()
private lateinit var timeTableCurrentWeek : Array<Array<Lesson>>
private lateinit var timeTableNextWeek: Array<Array<Lesson>>
private lateinit var course: CourseTTLink private lateinit var course: CourseTTLink
private var color: Int = Color.BLACK private var color: Int = Color.BLACK
private var ls = Lesson("","","", "")
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
Aesthetic.attach(this) Aesthetic.attach(this)
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -75,6 +68,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
// this is executed on the first app start, use this to show tutorial etc. // this is executed on the first app start, use this to show tutorial etc.
Aesthetic.config { Aesthetic.config {
colorPrimary(Color.BLACK) colorPrimary(Color.BLACK)
colorPrimaryDark(Color.BLACK)
apply() apply()
} }
} else { } else {
@ -85,9 +79,6 @@ 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.setMainActivity(this) homeFragment.setMainActivity(this)
@ -236,44 +227,6 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
*/ */
val time = measureTimeMillis { val time = measureTimeMillis {
runBlocking {
/* getting the course list should be faster than the timetable,
* we need have time until the user opens the dialog
*/
val jobTTLinkList = GlobalScope.launch {
courseTTLinkList = timeTableParser.getCourseTTLinks()
}
val jobTTNextWeek = GlobalScope.launch {
timeTableNextWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("week=0","week=1"))
println("next: " + timeTableNextWeek.size)
println(timeTableNextWeek)
println(ls.lessonSubject)
timeTableParser.printTimeTableWeek(timeTableNextWeek) // Wieso sind die daten hier noch im array
}
val jobTTCurrentWeek = GlobalScope.launch {
timeTableCurrentWeek = timeTableParser.getTimeTable(course.courseTTLink)
}
val jobMenus = GlobalScope.launch {
weekMenus = mensaParser.getMensaMenu()
}
jobTTLinkList.join() // wait until child coroutine completes
jobTTNextWeek.join()
jobTTCurrentWeek.join()
jobMenus.join()
println("next end:" + timeTableNextWeek.size)
println(timeTableNextWeek)
timeTableParser.printTimeTableWeek(timeTableNextWeek) // und hier nicht mehr
}
return
/* getting the course list should be faster than the timetable, /* getting the course list should be faster than the timetable,
* we need have time until the user opens the dialog * we need have time until the user opens the dialog
*/ */
@ -281,28 +234,13 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
courseTTLinkList = timeTableParser.getCourseTTLinks() courseTTLinkList = timeTableParser.getCourseTTLinks()
} }
val t0 = doAsync { val jobMenus = doAsync {
try {
timeTableNextWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("week=0","week=1"))
ls = timeTableNextWeek[0][0]
println("next: " + timeTableNextWeek.size)
println(timeTableNextWeek)
println(ls.lessonSubject)
timeTableParser.printTimeTableWeek(timeTableNextWeek)
} catch (e: Exception) {
e.stackTrace
}
}
val t1 = doAsync {
weekMenus = mensaParser.getMensaMenu() weekMenus = mensaParser.getMensaMenu()
} }
val t2 = doAsync { val jobTTCurrentWeek = doAsync {
try { try {
timeTableCurrentWeek = timeTableParser.getTimeTable(course.courseTTLink) timeTableCurrentWeek = timeTableParser.getTimeTable(course.courseTTLink)
println("current: " + timeTableCurrentWeek.size)
timeTableParser.printTimeTableWeek(timeTableCurrentWeek)
} catch (e: Exception) { } catch (e: Exception) {
uiThread { uiThread {
@ -316,17 +254,19 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
} }
} }
t0.get() val jobTTNextWeek = doAsync {
t1.get() try {
t2.get() timeTableNextWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("week=0","week=1"))
} catch (e: Exception) {
e.stackTrace
}
}
println("next end:" + timeTableNextWeek.size) jobMenus.get()
println(timeTableNextWeek) jobTTCurrentWeek.get()
timeTableParser.printTimeTableWeek(timeTableNextWeek) jobTTNextWeek.get()
println(ls.lessonSubject)
} }
println("Completed in $time ms") println("Completed in $time ms")
println(ls.lessonSubject)
} }
fun getCourseTTLinkList(): ArrayList<CourseTTLink>{ fun getCourseTTLinkList(): ArrayList<CourseTTLink>{

View File

@ -1,7 +1,7 @@
/** /**
* ProjectLaogai * ProjectLaogai
* *
* Copyright 2018 <seil0@mosad.xyz> * Copyright 2019 <seil0@mosad.xyz>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/** /**
* ProjectLaogai * ProjectLaogai
* *
* Copyright 2018 <seil0@mosad.xyz> * Copyright 2019 <seil0@mosad.xyz>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/** /**
* ProjectLaogai * ProjectLaogai
* *
* Copyright 2018 <seil0@mosad.xyz> * Copyright 2019 <seil0@mosad.xyz>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/** /**
* ProjectLaogai * ProjectLaogai
* *
* Copyright 2018 <seil0@mosad.xyz> * Copyright 2019 <seil0@mosad.xyz>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -126,11 +126,11 @@ class SettingsFragment : Fragment() {
linLayoutMainColor.setOnClickListener { linLayoutMainColor.setOnClickListener {
// open a new color chooser dialog // open a new color chooser dialog
val colors = intArrayOf(Color.BLACK, Color.CYAN, Color.MAGENTA, Color.YELLOW) val colors = intArrayOf(Color.BLACK, Color.DKGRAY, Color.RED, Color.GREEN, Color.YELLOW)
MaterialDialog(context!!) MaterialDialog(context!!)
.title(R.string.primary_color) .title(R.string.primary_color)
.colorChooser(colors, initialSelection = mainActivity.getColorPrimary()) { _, color -> .colorChooser(colors, allowCustomArgb = true,initialSelection = mainActivity.getColorPrimary()) { _, color ->
viewPrimaryColor.setBackgroundColor(color) viewPrimaryColor.setBackgroundColor(color)
Aesthetic.config { Aesthetic.config {
colorPrimary(color) colorPrimary(color)

View File

@ -1,7 +1,7 @@
/** /**
* ProjectLaogai * ProjectLaogai
* *
* Copyright 2018 <seil0@mosad.xyz> * Copyright 2019 <seil0@mosad.xyz>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -35,7 +35,6 @@ 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.NotRetardedCalendar import org.mosad.seil0.projectlaogai.hsoparser.NotRetardedCalendar
import org.mosad.seil0.projectlaogai.hsoparser.TimeTableParser
import org.mosad.seil0.projectlaogai.uicomponents.LessonCardView import org.mosad.seil0.projectlaogai.uicomponents.LessonCardView
import org.mosad.seil0.projectlaogai.uicomponents.MensaDayCardView import org.mosad.seil0.projectlaogai.uicomponents.MensaDayCardView
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
@ -73,9 +72,6 @@ class TimeTableFragment : Fragment() {
val formatter = SimpleDateFormat("E dd.MM", Locale.GERMANY) // TODO change to android call when min api is 24 val formatter = SimpleDateFormat("E dd.MM", Locale.GERMANY) // TODO change to android call when min api is 24
val calendar = Calendar.getInstance() val calendar = Calendar.getInstance()
println(mainActivity.getTimeTableCurrentWeek().size)
println(mainActivity.getTimeTableNextWeek().size)
doAsync { doAsync {
uiThread { uiThread {
@ -113,6 +109,7 @@ class TimeTableFragment : Fragment() {
linLayoutTTFragment.addView(cardViewTimeTableDay) linLayoutTTFragment.addView(cardViewTimeTableDay)
} }
// 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.getTimeTableNextWeek().isNotEmpty()) { if (mainActivity.getTimeTableNextWeek().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!)
@ -122,9 +119,6 @@ class TimeTableFragment : Fragment() {
val cardViewTimeTableDay = MensaDayCardView(context!!, null) val cardViewTimeTableDay = MensaDayCardView(context!!, null)
cardViewTimeTableDay.setDayHeading(formatter.format(calendar.time)) cardViewTimeTableDay.setDayHeading(formatter.format(calendar.time))
//val ttp = TimeTableParser()
//ttp.printTimeTableWeek(mainActivity.getTimeTableNextWeek())
// for each lessen of the day // for each lessen of the day
for((i, lesson) in mainActivity.getTimeTableNextWeek()[day].withIndex()) { for((i, lesson) in mainActivity.getTimeTableNextWeek()[day].withIndex()) {
val lessonCardView = LessonCardView(context!!, null) val lessonCardView = LessonCardView(context!!, null)
@ -144,7 +138,6 @@ class TimeTableFragment : Fragment() {
} }
} }
// TODO if there is no lesson at one day , show a no lesson card
} }
} }

View File

@ -1,7 +1,7 @@
/** /**
* ProjectLaogai * ProjectLaogai
* *
* Copyright 2018 <seil0@mosad.xyz> * Copyright 2019 <seil0@mosad.xyz>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/** /**
* ProjectLaogai * ProjectLaogai
* *
* Copyright 2018 <seil0@mosad.xyz> * Copyright 2019 <seil0@mosad.xyz>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/** /**
* ProjectLaogai * ProjectLaogai
* *
* Copyright 2018 <seil0@mosad.xyz> * Copyright 2019 <seil0@mosad.xyz>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -27,9 +27,16 @@ 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<CourseTTLink>()
private var timeTableWeek = arrayOf<Array<Lesson>>()
init { /**
* get the timetable from the given url
* the timetable is organised per row not per column;
* Mon 1, Tue 1, Wed 1, Thur 1, Fri 1, Sat 1, Mon 2 and so on
*/
fun getTimeTable(courseTTURL: String): Array<Array<Lesson>> {
var timeTableWeek = arrayOf<Array<Lesson>>()
val scheduleHTML = Jsoup.connect(courseTTURL).get()
// create the timetable array // create the timetable array
for (i in 0..5) { for (i in 0..5) {
var timeTableDay = arrayOf<Lesson>() var timeTableDay = arrayOf<Lesson>()
@ -38,15 +45,6 @@ class TimeTableParser {
} }
timeTableWeek += timeTableDay timeTableWeek += timeTableDay
} }
}
/**
* get the timetable from the given url
* the timetable is organised per row not per column;
* Mon 1, Tue 1, Wed 1, Thur 1, Fri 1, Sat 1, Mon 2 and so on
*/
fun getTimeTable(courseTTURL: String): Array<Array<Lesson>> {
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")

View File

@ -1,7 +1,7 @@
/** /**
* ProjectLaogai * ProjectLaogai
* *
* Copyright 2018 <seil0@mosad.xyz> * Copyright 2019 <seil0@mosad.xyz>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/** /**
* ProjectLaogai * ProjectLaogai
* *
* Copyright 2018 <seil0@mosad.xyz> * Copyright 2019 <seil0@mosad.xyz>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View File

@ -2,7 +2,7 @@
<string name="app_name" translatable="false">Project Laogai</string> <string name="app_name" translatable="false">Project Laogai</string>
<string name="navigation_drawer_open">Open navigation drawer</string> <string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string> <string name="navigation_drawer_close">Close navigation drawer</string>
<string name="nav_header_title" translatable="false">hso App 0.3.1</string> <string name="nav_header_title" translatable="false">hso App 0.3.2</string>
<string name="nav_header_subtitle" translatable="false">seil0@mosad.xyz</string> <string name="nav_header_subtitle" translatable="false">seil0@mosad.xyz</string>
<string name="nav_header_desc" translatable="false">Project Laogai</string> <string name="nav_header_desc" translatable="false">Project Laogai</string>
@ -37,11 +37,11 @@
<string name="primary_color">primary color</string> <string name="primary_color">primary color</string>
<string name="main_color_desc">The primary color, default is black</string> <string name="main_color_desc">The primary color, default is black</string>
<string name="select">select</string> <string name="select">select</string>
<string name="version" translatable="false">version 0.3.1</string> <string name="version" translatable="false">version 0.3.2</string>
<string name="about">about</string> <string name="about">about</string>
<string name="about_txtView" translatable="false">hso App by @Seil0</string> <string name="about_txtView" translatable="false">hso App by @Seil0</string>
<string name="about_text" translatable="false">"This software is made by @Seil0 and is published under the terms and <string name="about_text" translatable="false">"This software is made by @Seil0 and is published under the terms and
conditions of GPL 3. For further information visit \ngit.mosad.xyz/Seil0/ProjectLaogai \n\n© 2018 conditions of GPL 3. For further information visit \ngit.mosad.xyz/Seil0/ProjectLaogai \n\n© 2018-2019
seil0@mosad.xyz " seil0@mosad.xyz "
</string> </string>
<string name="loading_timetable">loading timetable …</string> <string name="loading_timetable">loading timetable …</string>