home screen redesign

This commit is contained in:
2019-03-22 21:59:32 +01:00
parent a4eaea2918
commit e51a80b78d
5 changed files with 97 additions and 177 deletions

View File

@ -22,11 +22,13 @@
package org.mosad.seil0.projectlaogai.fragments
import android.graphics.Typeface
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import com.afollestad.materialdialogs.MaterialDialog
import kotlinx.android.synthetic.main.fragment_home.*
@ -40,8 +42,9 @@ import org.mosad.seil0.projectlaogai.hsoparser.Meal
import org.mosad.seil0.projectlaogai.hsoparser.NotRetardedCalendar
import org.mosad.seil0.projectlaogai.uicomponents.DayCardView
import org.mosad.seil0.projectlaogai.uicomponents.LessonLinearLayout
import org.mosad.seil0.projectlaogai.uicomponents.MealLinearLayout
import java.text.SimpleDateFormat
import java.util.*
import kotlin.collections.ArrayList
/**
* The "home" controller class
@ -49,18 +52,14 @@ import kotlin.collections.ArrayList
*/
class HomeFragment : Fragment() {
private lateinit var linLayoutTimeTable: LinearLayout
val formatter = SimpleDateFormat("E dd.MM", Locale.GERMANY)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view: View = inflater.inflate(R.layout.fragment_home, container, false)
// init UI elements
linLayoutTimeTable = view.findViewById(R.id.linLayoutTimeTable)
//setText()
addCurrentMensaMenu()
addCurrentTimeTable()
addMensaMenu()
addTimeTable()
// Inflate the layout for this fragment
return view
@ -69,54 +68,55 @@ class HomeFragment : Fragment() {
/**
* add the current mensa meal to the home screens
*/
private fun addCurrentMensaMenu() {
private fun addMensaMenu() {
doAsync {
val dayMeals: ArrayList<Meal>
var dayMeals: ArrayList<Meal>
val cal = Calendar.getInstance()
if (cal.get(Calendar.HOUR_OF_DAY) < 15) {
dayMeals = mensaCurrentWeek.days[NotRetardedCalendar().getDayOfWeekIndex()].meals
} else {
dayMeals = mensaCurrentWeek.days[NotRetardedCalendar().getTomorrowWeekIndex()].meals
uiThread {
txtView_Menu1Heading.text = resources.getString(R.string.meal_1_tomorrow)
txtView_Menu2Heading.text = resources.getString(R.string.meal_2_tomorrow)
}
}
val mensaCardView = DayCardView(context!!)
uiThread {
if (cal.get(Calendar.HOUR_OF_DAY) < 15) {
dayMeals = mensaCurrentWeek.days[NotRetardedCalendar().getDayOfWeekIndex()].meals
mensaCardView.setDayHeading(resources.getString(R.string.today_date, formatter.format(cal.time)))
} else {
dayMeals = mensaCurrentWeek.days[NotRetardedCalendar().getTomorrowWeekIndex()].meals
cal.add(Calendar.DATE, 1)
mensaCardView.setDayHeading(resources.getString(R.string.tomorrow_date, formatter.format(cal.time)))
}
if (dayMeals.size >= 2) {
// get the index of the first meal, not a "Schneller Teller"
loop@ for ((i, meal) in dayMeals.withIndex()) {
if (meal.heading.contains("Essen")) {
dayMeals[i].parts.forEachIndexed { index, part ->
txtViewMenu1.append(part)
if (index < (dayMeals[i].parts.size - 1))
txtViewMenu1.append("\n")
}
val meal1Layout = MealLinearLayout(context)
meal1Layout.setMeal(dayMeals[i])
mensaCardView.getLinLayoutDay().addView(meal1Layout)
dayMeals[i + 1].parts.forEachIndexed { index, part ->
txtViewMenu2.append(part)
if (index < (dayMeals[i + 1].parts.size - 1))
txtViewMenu2.append("\n")
}
val meal2Layout = MealLinearLayout(context)
meal2Layout.setMeal(dayMeals[i + 1])
meal2Layout.disableDivider()
mensaCardView.getLinLayoutDay().addView(meal2Layout)
break@loop
}
}
} else {
if (txtView_Menu1Heading.text == resources.getString(R.string.meal_1_tomorrow)) {
txtViewMenu1.text = resources.getString(R.string.no_meal_tomorrow)
txtViewMenu2.text = resources.getString(R.string.no_meal_tomorrow)
} else {
txtViewMenu1.text = resources.getString(R.string.no_meal_today)
txtViewMenu2.text = resources.getString(R.string.no_meal_today)
}
val noFood = TextView(context)
noFood.text = resources.getString(R.string.mensa_closed)
noFood.setTextColor(ContextCompat.getColor(context!!, R.color.textPrimary))
noFood.textSize = 18.0F
noFood.setTypeface(null, Typeface.BOLD)
noFood.textAlignment = View.TEXT_ALIGNMENT_CENTER
noFood.setPadding(7,7,7,7)
mensaCardView.getLinLayoutDay().addView(noFood)
}
linLayout_Home.addView(mensaCardView)
}
}
@ -125,60 +125,67 @@ class HomeFragment : Fragment() {
/**
* add the current timetable to the home screen
*/
private fun addCurrentTimeTable() {
private fun addTimeTable() {
val dayIndex = NotRetardedCalendar().getDayOfWeekIndex()
var helpLesson = LessonLinearLayout(context!!)
val dayCardView = DayCardView(context!!)
dayCardView.setDayHeading("Heute")
dayCardView.setDayHeading(resources.getString(R.string.today_date, formatter.format(Calendar.getInstance().time)))
if (timetables[0].days.isNotEmpty() && dayIndex < 6) {
doAsync {
uiThread {
// for all timeslots of the day
for ((tsIndex, timeslot) in timetables[0].days[dayIndex].timeslots.withIndex()) {
if (timetables[0].days.isNotEmpty() && dayIndex < 6) {
for(lesson in timeslot) {
if(lesson.lessonSubject.isNotEmpty()) {
// for all timeslots of the day
for ((tsIndex, timeslot) in timetables[0].days[dayIndex].timeslots.withIndex()) {
val lessonLayout = LessonLinearLayout(context!!)
lessonLayout.setLesson(lesson, DataTypes().getTime()[tsIndex])
dayCardView.getLinLayoutDay().addView(lessonLayout)
for(lesson in timeslot) {
if(lesson.lessonSubject.isNotEmpty()) {
if (lesson != timeslot.last()) {
lessonLayout.disableDivider()
val lessonLayout = LessonLinearLayout(context!!)
lessonLayout.setLesson(lesson, DataTypes().getTime()[tsIndex])
dayCardView.getLinLayoutDay().addView(lessonLayout)
if (lesson != timeslot.last()) {
lessonLayout.disableDivider()
}
helpLesson = lessonLayout
}
}
helpLesson = lessonLayout
}
helpLesson.disableDivider()
// if there are no lessons don't show the dayCardView
if (dayCardView.getLinLayoutDay().childCount > 1) {
linLayout_Home.addView(dayCardView)
} else {
// TODO we could display the next day with a lecture
val noLesson = DayCardView(context!!)
noLesson.setDayHeading(resources.getString(R.string.no_lesson_today))
linLayout_Home.addView(noLesson)
}
} else {
if (dayIndex == 6) {
// if that's the case it's sunday
val noLesson = DayCardView(context!!)
noLesson.setDayHeading(resources.getString(R.string.no_lesson_today))
linLayout_Home.addView(noLesson)
} else {
MaterialDialog(context!!)
.title(R.string.error)
.message(R.string.gen_tt_error)
.show()
// TODO log the error and send feedback
}
}
}
helpLesson.disableDivider()
// if there are no lessons don't show the dayCardView
if (dayCardView.getLinLayoutDay().childCount > 1) {
linLayoutTimeTable.addView(dayCardView)
} else {
// TODO we could display the next day with a lecture
val noLesson = DayCardView(context!!)
noLesson.setDayHeading(resources.getString(R.string.no_lesson_today))
linLayoutTimeTable.addView(noLesson)
}
} else {
if (dayIndex == 6) {
// if that's the case it's sunday
val noLesson = DayCardView(context!!)
noLesson.setDayHeading(resources.getString(R.string.no_lesson_today))
linLayoutTimeTable.addView(noLesson)
} else {
MaterialDialog(context!!)
.title(R.string.error)
.message(R.string.gen_tt_error)
.show()
// TODO log the error and send feedback
}
}
}
}

View File

@ -26,7 +26,6 @@ import android.content.Context
import android.view.View
import android.widget.LinearLayout
import androidx.cardview.widget.CardView
import kotlinx.android.synthetic.main.linearlayout_lesson.view.*
import kotlinx.android.synthetic.main.linearlayout_meal.view.*
import org.mosad.seil0.projectlaogai.R
import org.mosad.seil0.projectlaogai.hsoparser.Meal