Compare commits
69 Commits
Author | SHA1 | Date | |
---|---|---|---|
ac37bce145 | |||
6fd82254e0
|
|||
0dd8ba9475
|
|||
770e9a255d | |||
4589badbfc
|
|||
74f75bfbde | |||
a00c651bfd | |||
77757ad9ca | |||
fe111ac56b | |||
4971d0b1b8 | |||
2bd86ff6bb | |||
dbaf496a79 | |||
77326a8ed6 | |||
9fc897e194 | |||
f9ac219ec6 | |||
a87e57c80e | |||
ff1d353cae | |||
6e5cf29eaa | |||
ee388bf5a5 | |||
8aaf8e3647 | |||
d645d75bbf | |||
f97491addd | |||
e08790aaa4 | |||
750a808fbe | |||
e51a80b78d | |||
a4eaea2918 | |||
cd3136715f | |||
15f1386b6e | |||
3bace6c155 | |||
61716f8eb4 | |||
a1410f7b80 | |||
953185425b | |||
a6d14044c2 | |||
f3b7ff066d | |||
040eb26dcf | |||
1a5d2b6561 | |||
92b60d660c | |||
a4eceeddc9 | |||
3e3a80442e | |||
5a1a07cd42 | |||
dbfdaffe99 | |||
58eb217ab7 | |||
24f920c05f | |||
6301308d76 | |||
8e205fa889 | |||
e9bdcee443 | |||
b214cfccb2 | |||
404ddd58b8 | |||
137ff7df0c | |||
b4071d7456 | |||
5e6e6cfde6 | |||
ffeb09a37f | |||
75a457312d | |||
87bf614d28 | |||
e69354af96 | |||
ec74a8e4f8 | |||
b49d16b1a1 | |||
70059b4b0c | |||
3d7f6f961a | |||
f97e8b2b14 | |||
deaf139b70 | |||
bf48bec16b | |||
e6c4096787 | |||
b083e44711 | |||
2df58311cb | |||
f6f652ffb6 | |||
8fa0d496c6 | |||
0607d58760 | |||
3cd831e72c |
23
README.md
@ -1,12 +1,21 @@
|
|||||||
# ProjectLaogai "hso App"
|

|
||||||
Some info about the app ...
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
||||||
|
|
||||||
|
# ProjectLaogai "hso App"
|
||||||
|
ProjectLaogai is a app to access the timetable and the mensa menu of Hochschule Offenburg.
|
||||||
|
|
||||||
|
[<img src="https://f-droid.org/badge/get-it-on.png" height="75">](https://f-droid.org/packages/org.mosad.seil0.projectlaogai/)
|
||||||
## Features
|
## Features
|
||||||
* look up what you can eat in the mensa
|
* check out the mensa menu of this and next week
|
||||||
* check your timetable
|
* access your timetable
|
||||||
* probably many many bugs
|
* open moodle
|
||||||
|
* probably some funny bugs
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
[<img src="https://raw.githubusercontent.com/Seil0/Seil0.github.io/master/images/Project_Laogai/ProjectLaogai_HomeScreen.png" width=180>](https://github.com/Seil0/Seil0.github.io/blob/master/images/Project_Laogai/ProjectLaogai_HomeScreen.png)
|
||||||
|
[<img src="https://raw.githubusercontent.com/Seil0/Seil0.github.io/master/images/Project_Laogai/ProjectLaogai_Mensa.png" width=180>](https://github.com/Seil0/Seil0.github.io/blob/master/images/Project_Laogai/ProjectLaogai_Mensa.png)
|
||||||
|
[<img src="https://raw.githubusercontent.com/Seil0/Seil0.github.io/master/images/Project_Laogai/ProjectLaogai_Timetable.png" width=180>](https://github.com/Seil0/Seil0.github.io/blob/master/images/Project_Laogai/ProjectLaogai_Timetable.png)
|
||||||
|
[<img src="https://raw.githubusercontent.com/Seil0/Seil0.github.io/master/images/Project_Laogai/ProjectLaogai_Settings.png" width=180>](https://github.com/Seil0/Seil0.github.io/blob/master/images/Project_Laogai/ProjectLaogai_Settings.png)
|
||||||
|
[<img src="https://raw.githubusercontent.com/Seil0/Seil0.github.io/master/images/Project_Laogai/ProjectLaogai_NavDrawer.png" width=180>](https://github.com/Seil0/Seil0.github.io/blob/master/images/Project_Laogai/ProjectLaogai_NavDrawer.png)
|
||||||
|
|
||||||
|
ProjectLaogai © 2019 mosad [www.mosad.xyz](http://www.mosad.xyz), Project by [@Seil0](https://git.mosad.xyz/Seil0)
|
||||||
ProjectLaogai © 2018 mosad www.mosad.xyz, Project by [@Seil0](https://git.mosad.xyz/Seil0)
|
|
@ -5,20 +5,27 @@ apply plugin: 'kotlin-android'
|
|||||||
apply plugin: 'kotlin-android-extensions'
|
apply plugin: 'kotlin-android-extensions'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
|
signingConfigs {
|
||||||
|
}
|
||||||
compileSdkVersion 28
|
compileSdkVersion 28
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "org.mosad.seil0.projectlaogai"
|
applicationId "org.mosad.seil0.projectlaogai"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 28
|
targetSdkVersion 28
|
||||||
versionCode 6
|
versionCode 13
|
||||||
versionName "0.2.1"
|
versionName "0.4.1"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
resValue "string", "build_time", buildTime()
|
||||||
|
setProperty("archivesBaseName", "projectlaogai-$versionName")
|
||||||
}
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
minifyEnabled false
|
minifyEnabled false
|
||||||
|
shrinkResources false
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
compileOptions {
|
compileOptions {
|
||||||
}
|
}
|
||||||
@ -27,16 +34,23 @@ android {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||||
implementation 'androidx.appcompat:appcompat:1.0.1'
|
implementation 'org.jetbrains.anko:anko-commons:0.10.8'
|
||||||
|
implementation 'androidx.appcompat:appcompat:1.0.2'
|
||||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||||
|
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha5'
|
||||||
|
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
|
||||||
implementation 'com.google.android.material:material:1.0.0'
|
implementation 'com.google.android.material:material:1.0.0'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
|
implementation 'com.google.code.gson:gson:2.8.5'
|
||||||
implementation 'org.jsoup:jsoup:1.11.3'
|
implementation 'com.afollestad:aesthetic:1.0.0-beta05'
|
||||||
implementation 'org.jetbrains.anko:anko-commons:0.10.7'
|
implementation 'com.afollestad.material-dialogs:core:2.8.1'
|
||||||
implementation 'com.afollestad.material-dialogs:core:2.0.0-beta4'
|
implementation 'com.afollestad.material-dialogs:color:2.8.1'
|
||||||
implementation 'com.afollestad.material-dialogs:color:2.0.0-beta4'
|
|
||||||
|
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
androidTestImplementation 'androidx.test:runner:1.1.0'
|
androidTestImplementation 'androidx.test:runner:1.1.1'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static def buildTime() {
|
||||||
|
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
|
||||||
|
}
|
@ -5,20 +5,21 @@
|
|||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:fullBackupContent="@xml/backup_descriptor"
|
||||||
|
android:icon="@mipmap/ic_laogai_icon"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_laogai_icon"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme">
|
android:theme="@style/AppTheme">
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".SplashActivity"
|
android:name=".SplashActivity"
|
||||||
|
android:label="@string/app_name"
|
||||||
android:theme="@style/SplashTheme"
|
android:theme="@style/SplashTheme"
|
||||||
android:screenOrientation="portrait">
|
android:screenOrientation="portrait">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
BIN
app/src/main/ic_laogai_icon-web.png
Normal file
After Width: | Height: | Size: 39 KiB |
@ -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
|
||||||
@ -22,51 +22,69 @@
|
|||||||
|
|
||||||
package org.mosad.seil0.projectlaogai
|
package org.mosad.seil0.projectlaogai
|
||||||
|
|
||||||
|
import android.graphics.Color
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
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.materialdialogs.MaterialDialog
|
import com.afollestad.aesthetic.Aesthetic
|
||||||
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 org.jetbrains.anko.doAsync
|
import org.mosad.seil0.projectlaogai.controller.CacheController
|
||||||
import org.jetbrains.anko.uiThread
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController
|
||||||
import org.mosad.seil0.projectlaogai.fragments.HomeFragment
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cColorAccent
|
||||||
import org.mosad.seil0.projectlaogai.fragments.MensaFragment
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cColorPrimary
|
||||||
import org.mosad.seil0.projectlaogai.fragments.SettingsFragment
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cCourse
|
||||||
import org.mosad.seil0.projectlaogai.fragments.TimeTableFragment
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.coursesCacheTime
|
||||||
import org.mosad.seil0.projectlaogai.hsoparser.*
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.mensaCacheTime
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.timetableCacheTime
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.TCoRAPIController
|
||||||
|
import org.mosad.seil0.projectlaogai.fragments.*
|
||||||
|
import java.sql.Date
|
||||||
|
import java.util.*
|
||||||
import kotlin.system.measureTimeMillis
|
import kotlin.system.measureTimeMillis
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
|
class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
|
||||||
|
|
||||||
//TODO make toolbar and navbar global
|
private var activeFragment: Fragment = HomeFragment() // the currently active fragment, home at the start
|
||||||
private val mensaParser = MensaParser()
|
|
||||||
private val timeTableParser = TimeTableParser()
|
|
||||||
|
|
||||||
private var weekMenus = ArrayList<Meal>()
|
|
||||||
private var courseTTLinkList = ArrayList<CourseTTLink>()
|
|
||||||
private var timeTableWeek = arrayOf<Array<Lesson>>()
|
|
||||||
|
|
||||||
private lateinit var course: CourseTTLink
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
Aesthetic.attach(this)
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
setSupportActionBar(toolbar)
|
setSupportActionBar(toolbar)
|
||||||
|
|
||||||
// load mensa and timetable
|
// load mensa, timetable and color
|
||||||
load()
|
load()
|
||||||
|
|
||||||
//init home fragment TODO make a abstract fragment class
|
// If we haven't set any defaults, do that now
|
||||||
val homeFragment = HomeFragment()
|
if (Aesthetic.isFirstTime) {
|
||||||
homeFragment.setMainActivity(this)
|
// this is executed on the first app start, use this to show tutorial etc.
|
||||||
|
Aesthetic.config {
|
||||||
|
colorPrimary(Color.BLACK)
|
||||||
|
colorPrimaryDark(Color.BLACK)
|
||||||
|
colorAccent(Color.parseColor("#3F51B5"))
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsFragment().selectCourse(this)
|
||||||
|
} else {
|
||||||
|
Aesthetic.config {
|
||||||
|
colorPrimary(cColorPrimary)
|
||||||
|
colorPrimaryDark(cColorPrimary)
|
||||||
|
colorAccent(cColorAccent)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//init home fragment
|
||||||
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(
|
||||||
@ -78,6 +96,16 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
|||||||
nav_view.setNavigationItemSelectedListener(this)
|
nav_view.setNavigationItemSelectedListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
Aesthetic.resume(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPause() {
|
||||||
|
super.onPause()
|
||||||
|
Aesthetic.pause(this)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressed() {
|
||||||
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
|
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
|
||||||
drawer_layout.closeDrawer(GravityCompat.START)
|
drawer_layout.closeDrawer(GravityCompat.START)
|
||||||
@ -106,133 +134,85 @@ 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()
|
||||||
homeFragment.setMainActivity(this)
|
|
||||||
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()
|
||||||
mensaFragment.setMainActivity(this)
|
|
||||||
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()
|
||||||
timeTableFragment.setMainActivity(this)
|
|
||||||
val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
|
|
||||||
fragmentTransaction.replace(R.id.fragment_container, timeTableFragment)
|
|
||||||
fragmentTransaction.commit()
|
|
||||||
|
|
||||||
}
|
}
|
||||||
R.id.nav_moodle -> {
|
R.id.nav_moodle -> {
|
||||||
|
activeFragment = MoodleFragment()
|
||||||
}
|
|
||||||
R.id.nav_email -> {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
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()
|
|
||||||
}
|
|
||||||
|
|
||||||
timeTableWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("http", "https"))
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* load the mensa menus of the current week
|
* load the mensa menus of the current week
|
||||||
* TODO evaluate if we should use a timeout here
|
|
||||||
*/
|
*/
|
||||||
private fun load() {
|
private fun load() {
|
||||||
|
val startupTime = measureTimeMillis {
|
||||||
|
// load the settings
|
||||||
|
PreferencesController.load(this) // this must be finished before doing anything else
|
||||||
|
|
||||||
// load saved course
|
val tcor = TCoRAPIController(this)
|
||||||
val sharedPref = getPreferences(MODE_PRIVATE) ?: return
|
val currentTime = System.currentTimeMillis() / 1000
|
||||||
course = CourseTTLink(
|
val currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK)
|
||||||
sharedPref.getString(getString(R.string.save_key_courseTTLink),
|
val cal = Calendar.getInstance()
|
||||||
"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")!!
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
// timetable sunday workaround
|
||||||
* load mensa, course timetable and courselist from the swfr/hso website
|
cal.time = Date(timetableCacheTime * 1000)
|
||||||
* TODO make an API see https://git.mosad.xyz/Seil0/TheCitadelofRicks
|
val timetableCacheDay = cal.get(Calendar.DAY_OF_WEEK)
|
||||||
*/
|
|
||||||
val time = measureTimeMillis {
|
// TODO this sill backfire if someone has to update before the server finished updating the timetable at 0001/0101
|
||||||
/* getting the course list should be faster than the timetable,
|
// update blocking if a) it`s monday and the last cache was not on a monday or b) the cache is older than 6 days
|
||||||
* we need have time until the user opens the dialog
|
if((currentDay == Calendar.MONDAY && timetableCacheDay != Calendar.MONDAY) || (System.currentTimeMillis() / 1000) - timetableCacheTime > 518400) {
|
||||||
*/
|
println("updating timetable after sunday!")
|
||||||
doAsync {
|
val jobA = TCoRAPIController.getTimetable(cCourse.courseName, 0, this)
|
||||||
courseTTLinkList = timeTableParser.getCourseTTLinks()
|
val jobB = TCoRAPIController.getTimetable(cCourse.courseName, 1, this)
|
||||||
|
|
||||||
|
jobA.get()
|
||||||
|
jobB.get()
|
||||||
}
|
}
|
||||||
|
|
||||||
val t1 = doAsync {
|
// mensa sunday workaround
|
||||||
weekMenus = mensaParser.getMensaMenu()
|
cal.time = Date(System.currentTimeMillis()) // reset to current time
|
||||||
|
|
||||||
|
// update blocking if it's sunday after 1500
|
||||||
|
// TODO and the last update was before 1500
|
||||||
|
if(currentDay == Calendar.SUNDAY && cal.get(Calendar.HOUR_OF_DAY) >= 15) {
|
||||||
|
val jobA = TCoRAPIController.getMensa(this)
|
||||||
|
jobA.get()
|
||||||
}
|
}
|
||||||
|
|
||||||
val t2 = doAsync {
|
// get the cached files
|
||||||
try {
|
val cache = CacheController(this)
|
||||||
timeTableWeek = timeTableParser.getTimeTable(course.courseTTLink)
|
cache.readStartCache(cCourse.courseName)
|
||||||
} catch (e: Exception) {
|
|
||||||
|
|
||||||
uiThread {
|
// check if an update is necessary
|
||||||
MaterialDialog(this@MainActivity)
|
if(currentTime - coursesCacheTime > 86400)
|
||||||
.title(R.string.error)
|
tcor.getCoursesList()
|
||||||
.message(R.string.no_tt_error)
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
|
|
||||||
e.stackTrace
|
if(currentTime - mensaCacheTime > 10800)
|
||||||
}
|
TCoRAPIController.getMensa(this)
|
||||||
|
|
||||||
|
if(currentTime - timetableCacheTime > 10800) {
|
||||||
|
TCoRAPIController.getTimetable(cCourse.courseName, 0, this)
|
||||||
|
TCoRAPIController.getTimetable(cCourse.courseName, 1, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
t1.get()
|
|
||||||
t2.get()
|
|
||||||
}
|
}
|
||||||
println("Completed in $time ms")
|
println("startup completed in $startupTime ms")
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getCourseTTLinkList(): ArrayList<CourseTTLink>{
|
|
||||||
return courseTTLinkList
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getCurrentTimeTableWeek(): Array<Array<Lesson>> {
|
|
||||||
return timeTableWeek
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getWeekMenu(): ArrayList<Meal>{
|
|
||||||
return weekMenus
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getCourse(): CourseTTLink {
|
|
||||||
return course
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,123 @@
|
|||||||
|
/**
|
||||||
|
* 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.controller
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import com.google.gson.JsonParser
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.Course
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.MensaWeek
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.TimetableWeek
|
||||||
|
import java.io.BufferedReader
|
||||||
|
import java.io.File
|
||||||
|
import java.io.FileReader
|
||||||
|
import com.google.gson.reflect.TypeToken
|
||||||
|
|
||||||
|
class CacheController(cont: Context) {
|
||||||
|
|
||||||
|
private val context = cont
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
var coursesList = ArrayList<Course>()
|
||||||
|
var mensaCurrentWeek = MensaWeek()
|
||||||
|
var mensaNextWeek = MensaWeek()
|
||||||
|
var timetables = ArrayList<TimetableWeek>()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* read current and next weeks mensa menus from the cached file
|
||||||
|
*/
|
||||||
|
fun readMensa(context: Context) {
|
||||||
|
val file = File(context.filesDir, "mensa.json")
|
||||||
|
|
||||||
|
// make sure the file exists
|
||||||
|
if (!file.exists()) {
|
||||||
|
TCoRAPIController.getMensa(context).get()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val fileReader = FileReader(file)
|
||||||
|
val bufferedReader = BufferedReader(fileReader)
|
||||||
|
val mensaObject = JsonParser().parse(bufferedReader.readLine()).asJsonObject
|
||||||
|
|
||||||
|
val currentWeek = mensaObject.getAsJsonObject("currentWeek")
|
||||||
|
val nextWeek = mensaObject.getAsJsonObject("nextWeek")
|
||||||
|
|
||||||
|
mensaCurrentWeek = Gson().fromJson(currentWeek, MensaWeek().javaClass)
|
||||||
|
mensaNextWeek = Gson().fromJson(nextWeek, MensaWeek().javaClass)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* read the weeks timetable from the cached file
|
||||||
|
* @param courseName the course name (e.g AI1)
|
||||||
|
* @param week the week to read (0 for the current and so on)
|
||||||
|
*/
|
||||||
|
fun readTimetable(courseName: String, week: Int, context: Context) {
|
||||||
|
val file = File(context.filesDir, "timetable-$courseName-$week.json")
|
||||||
|
|
||||||
|
// make sure the file exists
|
||||||
|
if (!file.exists())
|
||||||
|
TCoRAPIController.getTimetable(courseName, week, context).get()
|
||||||
|
|
||||||
|
val fileReader = FileReader(file)
|
||||||
|
val bufferedReader = BufferedReader(fileReader)
|
||||||
|
val timetableObject = JsonParser().parse(bufferedReader.readLine()).asJsonObject
|
||||||
|
|
||||||
|
// make sure you add the single weeks in the exact order!
|
||||||
|
if (timetables.size == week) {
|
||||||
|
timetables.add(Gson().fromJson(timetableObject.getAsJsonObject("timetable"), TimetableWeek().javaClass))
|
||||||
|
} else if (timetables.size >= week) {
|
||||||
|
timetables[week] = Gson().fromJson(timetableObject.getAsJsonObject("timetable"), TimetableWeek().javaClass)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* read coursesList, mensa (current and next week), timetable (current and next week)
|
||||||
|
* @param courseName the course name (e.g AI1)
|
||||||
|
*/
|
||||||
|
fun readStartCache(courseName: String) {
|
||||||
|
readCoursesList()
|
||||||
|
readMensa(context)
|
||||||
|
readTimetable(courseName, 0, context)
|
||||||
|
readTimetable(courseName, 1, context)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* read the courses list from the cached file
|
||||||
|
* add them to the coursesList object
|
||||||
|
*/
|
||||||
|
private fun readCoursesList() {
|
||||||
|
val file = File(context.filesDir, "courses.json")
|
||||||
|
|
||||||
|
// make sure the file exists
|
||||||
|
if (!file.exists())
|
||||||
|
TCoRAPIController(context).getCoursesList().get()
|
||||||
|
|
||||||
|
val fileReader = FileReader(file)
|
||||||
|
val bufferedReader = BufferedReader(fileReader)
|
||||||
|
val coursesObject = JsonParser().parse(bufferedReader.readLine()).asJsonObject
|
||||||
|
|
||||||
|
coursesList = Gson().fromJson(coursesObject.getAsJsonArray("courses"), object : TypeToken<List<Course>>() {}.type)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,133 @@
|
|||||||
|
/**
|
||||||
|
* 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.controller
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.graphics.Color
|
||||||
|
import org.jetbrains.anko.defaultSharedPreferences
|
||||||
|
import org.mosad.seil0.projectlaogai.R
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.Course
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The PreferencesController class
|
||||||
|
* contains all preferences and global variables that exist in this app
|
||||||
|
*/
|
||||||
|
class PreferencesController {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
var coursesCacheTime: Long = 0
|
||||||
|
var mensaCacheTime: Long = 0
|
||||||
|
var timetableCacheTime: Long = 0
|
||||||
|
var cColorPrimary: Int = Color.BLACK
|
||||||
|
var cColorAccent: Int = Color.parseColor("#3F51B5")
|
||||||
|
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
|
||||||
|
fun save(context: Context) {
|
||||||
|
val sharedPref = context.defaultSharedPreferences
|
||||||
|
|
||||||
|
// save the update times (cache)
|
||||||
|
with (sharedPref.edit()) {
|
||||||
|
putLong(context.getString(R.string.save_key_coursesCacheTime),
|
||||||
|
coursesCacheTime
|
||||||
|
)
|
||||||
|
putLong(context.getString(R.string.save_key_mensaCacheTime),
|
||||||
|
mensaCacheTime
|
||||||
|
)
|
||||||
|
putLong(context.getString(R.string.save_key_timetableCacheTime),
|
||||||
|
timetableCacheTime
|
||||||
|
)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
// save the course
|
||||||
|
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),
|
||||||
|
cColorPrimary
|
||||||
|
)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
// save the accent color
|
||||||
|
with (sharedPref.edit()) {
|
||||||
|
putInt(context.getString(R.string.save_key_colorAccent),
|
||||||
|
cColorAccent
|
||||||
|
)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
// save showBuffet
|
||||||
|
with (sharedPref.edit()) {
|
||||||
|
putBoolean(context.getString(R.string.save_key_showBuffet),
|
||||||
|
cShowBuffet
|
||||||
|
)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// the load function
|
||||||
|
fun load(context: Context) {
|
||||||
|
val sharedPref = context.defaultSharedPreferences
|
||||||
|
|
||||||
|
// load the update times (cache)
|
||||||
|
coursesCacheTime = sharedPref.getLong(context.getString(
|
||||||
|
R.string.save_key_coursesCacheTime
|
||||||
|
), 0)
|
||||||
|
mensaCacheTime = sharedPref.getLong(context.getString(
|
||||||
|
R.string.save_key_mensaCacheTime
|
||||||
|
), 0)
|
||||||
|
timetableCacheTime = sharedPref.getLong(context.getString(
|
||||||
|
R.string.save_key_timetableCacheTime
|
||||||
|
), 0)
|
||||||
|
|
||||||
|
// load saved course
|
||||||
|
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 colors
|
||||||
|
cColorPrimary = sharedPref.getInt(context.getString(
|
||||||
|
R.string.save_key_colorPrimary
|
||||||
|
), Color.BLACK)
|
||||||
|
cColorAccent = sharedPref.getInt(context.getString(
|
||||||
|
R.string.save_key_colorAccent
|
||||||
|
), Color.parseColor("#3F51B5"))
|
||||||
|
|
||||||
|
// load showBuffet
|
||||||
|
cShowBuffet = sharedPref.getBoolean(context.getString(
|
||||||
|
R.string.save_key_showBuffet
|
||||||
|
), true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,98 @@
|
|||||||
|
/**
|
||||||
|
* 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.controller
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import org.jetbrains.anko.doAsync
|
||||||
|
import org.json.JSONObject
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.coursesCacheTime
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.mensaCacheTime
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.timetableCacheTime
|
||||||
|
import java.io.*
|
||||||
|
import java.net.URL
|
||||||
|
|
||||||
|
class TCoRAPIController(cont: Context) {
|
||||||
|
private val context = cont
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
/**
|
||||||
|
* get the json object from tcor api and write it as file (cache)
|
||||||
|
*/
|
||||||
|
fun getMensa(context: Context) = doAsync {
|
||||||
|
val url = URL("https://tcor.mosad.xyz/mensamenu")
|
||||||
|
val file = File(context.filesDir, "mensa.json")
|
||||||
|
|
||||||
|
// read data from the API
|
||||||
|
val mensaObject = JSONObject(url.readText()) //JSONObject(inReader.readLine())
|
||||||
|
|
||||||
|
// write the json object to a file
|
||||||
|
val writer = BufferedWriter(FileWriter(file))
|
||||||
|
writer.write(mensaObject.toString())
|
||||||
|
writer.close()
|
||||||
|
|
||||||
|
// update cache time
|
||||||
|
mensaCacheTime = System.currentTimeMillis() / 1000
|
||||||
|
PreferencesController.save(context)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the json object from tcor api and write it as file (cache)
|
||||||
|
*/
|
||||||
|
fun getTimetable(courseName: String, week: Int, context: Context) = doAsync {
|
||||||
|
val url = URL("https://tcor.mosad.xyz/timetable?courseName=$courseName&week=$week")
|
||||||
|
val file = File(context.filesDir, "timetable-$courseName-$week.json")
|
||||||
|
|
||||||
|
// read data from the API
|
||||||
|
val mensaObject = JSONObject(url.readText()) //JSONObject(inReader.readLine())
|
||||||
|
|
||||||
|
// write the json object to a file
|
||||||
|
val writer = BufferedWriter(FileWriter(file))
|
||||||
|
writer.write(mensaObject.toString())
|
||||||
|
writer.close()
|
||||||
|
|
||||||
|
// update cache time
|
||||||
|
timetableCacheTime = System.currentTimeMillis() / 1000
|
||||||
|
PreferencesController.save(context)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the json object from tcor api and write it as file (cache)
|
||||||
|
*/
|
||||||
|
fun getCoursesList() = doAsync {
|
||||||
|
val url = URL("https://tcor.mosad.xyz/courses")
|
||||||
|
val file = File(context.filesDir, "courses.json")
|
||||||
|
|
||||||
|
// read data from the API
|
||||||
|
val coursesObject = JSONObject(url.readText()) //JSONObject(inReader.readLine())
|
||||||
|
|
||||||
|
// write the json object to a file
|
||||||
|
val writer = BufferedWriter(FileWriter(file))
|
||||||
|
writer.write(coursesObject.toString())
|
||||||
|
writer.close()
|
||||||
|
|
||||||
|
// update cache time
|
||||||
|
coursesCacheTime = System.currentTimeMillis() / 1000
|
||||||
|
PreferencesController.save(context)
|
||||||
|
}
|
||||||
|
}
|
@ -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
|
||||||
@ -22,20 +22,29 @@
|
|||||||
|
|
||||||
package org.mosad.seil0.projectlaogai.fragments
|
package org.mosad.seil0.projectlaogai.fragments
|
||||||
|
|
||||||
|
import android.graphics.Typeface
|
||||||
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.TextView
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.afollestad.materialdialogs.MaterialDialog
|
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.R
|
import org.mosad.seil0.projectlaogai.R
|
||||||
import org.mosad.seil0.projectlaogai.hsoparser.*
|
import org.mosad.seil0.projectlaogai.controller.CacheController.Companion.mensaCurrentWeek
|
||||||
import org.mosad.seil0.projectlaogai.uicomponents.LessonCardView
|
import org.mosad.seil0.projectlaogai.controller.CacheController.Companion.timetables
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.DataTypes
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.Meal
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.NotRetardedCalendar
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.TimetableDay
|
||||||
|
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 java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,19 +53,14 @@ import java.util.*
|
|||||||
*/
|
*/
|
||||||
class HomeFragment : Fragment() {
|
class HomeFragment : Fragment() {
|
||||||
|
|
||||||
private lateinit var linLayoutTimeTable: LinearLayout
|
private val formatter = SimpleDateFormat("E dd.MM", Locale.getDefault())
|
||||||
private var mainActivity = MainActivity()
|
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||||
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_home, container, false)
|
val view: View = inflater.inflate(R.layout.fragment_home, container, false)
|
||||||
|
|
||||||
// init UI elements
|
addMensaMenu().get()
|
||||||
linLayoutTimeTable = view.findViewById(R.id.linLayoutTimeTable)
|
addTimeTable()
|
||||||
|
|
||||||
//setText()
|
|
||||||
addCurrentMensaMenu()
|
|
||||||
addCurrentTimeTable()
|
|
||||||
|
|
||||||
// Inflate the layout for this fragment
|
// Inflate the layout for this fragment
|
||||||
return view
|
return view
|
||||||
@ -64,27 +68,47 @@ class HomeFragment : Fragment() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* add the current mensa meal to the home screens
|
* add the current mensa meal to the home screens
|
||||||
* TODO show meals of the next day if its later than 1500
|
|
||||||
*/
|
*/
|
||||||
private fun addCurrentMensaMenu() {
|
private fun addMensaMenu() = doAsync {
|
||||||
doAsync {
|
|
||||||
val dayMenus: ArrayList<Meal> = MensaParser().getMensaMenuDay(mainActivity.getWeekMenu(), Calendar.getInstance().get(Calendar.DAY_OF_WEEK))
|
|
||||||
|
|
||||||
uiThread {
|
var dayMeals: ArrayList<Meal>
|
||||||
|
val cal = Calendar.getInstance()
|
||||||
|
val mensaCardView = DayCardView(context!!)
|
||||||
|
|
||||||
if (dayMenus.size >= 2) {
|
uiThread {
|
||||||
for (part in dayMenus[0].parts) {
|
|
||||||
txtViewMenu1.append(part)
|
|
||||||
}
|
|
||||||
|
|
||||||
for (part in dayMenus[1].parts) {
|
if (cal.get(Calendar.HOUR_OF_DAY) < 15) {
|
||||||
txtViewMenu2.append(part)
|
dayMeals = mensaCurrentWeek.days[NotRetardedCalendar().getDayOfWeekIndex()].meals
|
||||||
}
|
mensaCardView.setDayHeading(resources.getString(R.string.today_date, formatter.format(cal.time)))
|
||||||
} else {
|
} else {
|
||||||
txtViewMenu1.text = resources.getString(R.string.no_meal_today)
|
dayMeals = mensaCurrentWeek.days[NotRetardedCalendar().getTomorrowWeekIndex()].meals
|
||||||
txtViewMenu2.text = resources.getString(R.string.no_meal_today)
|
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")) {
|
||||||
|
|
||||||
|
val meal1Layout = MealLinearLayout(context)
|
||||||
|
meal1Layout.setMeal(dayMeals[i])
|
||||||
|
mensaCardView.getLinLayoutDay().addView(meal1Layout)
|
||||||
|
|
||||||
|
val meal2Layout = MealLinearLayout(context)
|
||||||
|
meal2Layout.setMeal(dayMeals[i + 1])
|
||||||
|
meal2Layout.disableDivider()
|
||||||
|
mensaCardView.getLinLayoutDay().addView(meal2Layout)
|
||||||
|
|
||||||
|
break@loop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
mensaCardView.getLinLayoutDay().addView(getNoCard(resources.getString(R.string.mensa_closed)))
|
||||||
|
}
|
||||||
|
|
||||||
|
linLayout_Home.addView(mensaCardView)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -92,51 +116,119 @@ class HomeFragment : Fragment() {
|
|||||||
/**
|
/**
|
||||||
* add the current timetable to the home screen
|
* add the current timetable to the home screen
|
||||||
*/
|
*/
|
||||||
private fun addCurrentTimeTable() {
|
private fun addTimeTable() = doAsync {
|
||||||
val dayIndex = NotRetardedCalendar().getDayOfWeekIndex()
|
val dayIndex = NotRetardedCalendar().getDayOfWeekIndex()
|
||||||
|
val cal = Calendar.getInstance()
|
||||||
|
var dayCardView: DayCardView
|
||||||
|
|
||||||
if (mainActivity.getCurrentTimeTableWeek().isNotEmpty() && dayIndex < 6) {
|
uiThread {
|
||||||
|
|
||||||
val timeTableDay = mainActivity.getCurrentTimeTableWeek()[dayIndex]
|
if (timetables.isNotEmpty() && dayIndex < 6) {
|
||||||
|
|
||||||
for (i in 0..5) {
|
// first check the current day
|
||||||
val lessonCardView = LessonCardView(context!!, null)
|
dayCardView = addDayTimetable(timetables[0].days[dayIndex])
|
||||||
|
dayCardView.setDayHeading(resources.getString(R.string.today_date, formatter.format(cal.time)))
|
||||||
|
|
||||||
lessonCardView.getTxtViewLesson().text = resources.getString(R.string.string_new_line, timeTableDay[i].lessonSubject)
|
// if there are no lessons try to find the next day with a lesson
|
||||||
lessonCardView.getTxtViewLesson().append(timeTableDay[i].lessonTeacher + "\n")
|
if (dayCardView.getLinLayoutDay().childCount <= 1)
|
||||||
lessonCardView.getTxtViewLesson().append(timeTableDay[i].lessonRoom)
|
dayCardView = findNextDay(0, dayIndex + 1)
|
||||||
lessonCardView.getTxtViewTime().text = DataTypes().getTime()[i]
|
|
||||||
|
|
||||||
if(lessonCardView.getTxtViewLesson().text.length > 2)
|
linLayout_Home.addView(dayCardView)
|
||||||
linLayoutTimeTable.addView(lessonCardView)
|
} else if (dayIndex == 6) {
|
||||||
}
|
|
||||||
|
|
||||||
// add a card if there is no lesson today
|
|
||||||
if (linLayoutTimeTable.childCount == 0) {
|
|
||||||
// TODO we could display the next day with a lecture
|
|
||||||
val noLessonCardView = LessonCardView(context!!, null)
|
|
||||||
noLessonCardView.getTxtViewLesson().text = resources.getString(R.string.no_lesson_today)
|
|
||||||
linLayoutTimeTable.addView(noLessonCardView)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (dayIndex == 6) {
|
|
||||||
// if that's the case it's sunday
|
// if that's the case it's sunday
|
||||||
val noLessonCardView = LessonCardView(context!!, null)
|
dayCardView = findNextDay(1, 0)
|
||||||
noLessonCardView.getTxtViewLesson().text = resources.getString(R.string.no_lesson_today)
|
linLayout_Home.addView(dayCardView)
|
||||||
linLayoutTimeTable.addView(noLessonCardView)
|
|
||||||
} else {
|
} else {
|
||||||
MaterialDialog(context!!)
|
MaterialDialog(context!!)
|
||||||
.title(R.string.error)
|
.title(R.string.error)
|
||||||
.message(R.string.gen_tt_error)
|
.message(R.string.timetable_error)
|
||||||
.show()
|
.show()
|
||||||
// TODO log the error and send feedback
|
// TODO log the error and send feedback
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setMainActivity(mainActivity: MainActivity) {
|
/**
|
||||||
this.mainActivity = mainActivity
|
* add the timetable of one day to the home-screen
|
||||||
|
* @param dayTimetable the day you wish to add
|
||||||
|
*/
|
||||||
|
private fun addDayTimetable(dayTimetable: TimetableDay) : DayCardView{
|
||||||
|
var helpLesson = LessonLinearLayout(context)
|
||||||
|
val dayCardView = DayCardView(context!!)
|
||||||
|
|
||||||
|
for ((tsIndex, timeslot) in dayTimetable.timeslots.withIndex()) {
|
||||||
|
|
||||||
|
for(lesson in timeslot) {
|
||||||
|
if(lesson.lessonSubject.isNotEmpty()) {
|
||||||
|
|
||||||
|
val lessonLayout = LessonLinearLayout(context)
|
||||||
|
lessonLayout.setLesson(lesson, DataTypes().getTime()[tsIndex])
|
||||||
|
dayCardView.getLinLayoutDay().addView(lessonLayout)
|
||||||
|
|
||||||
|
if (lesson != timeslot.last()) {
|
||||||
|
lessonLayout.disableDivider()
|
||||||
|
}
|
||||||
|
|
||||||
|
helpLesson = lessonLayout
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
helpLesson.disableDivider()
|
||||||
|
|
||||||
|
return dayCardView
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* find the next day with a lesson
|
||||||
|
* @param startWeekIndex the week you want to start searching
|
||||||
|
* @param startDayIndex the day index you want to start searching
|
||||||
|
* @return a DayCardView with all lessons added
|
||||||
|
*/
|
||||||
|
private fun findNextDay(startWeekIndex: Int, startDayIndex: Int) : DayCardView{
|
||||||
|
val cal = Calendar.getInstance()
|
||||||
|
var dayCardView = DayCardView(context!!)
|
||||||
|
var dayTimetable: TimetableDay? = null
|
||||||
|
var dayIndexSearch = startDayIndex
|
||||||
|
var weekIndexSearch = startWeekIndex
|
||||||
|
loop@ while (dayTimetable == null && weekIndexSearch <= timetables.size) {
|
||||||
|
for (i in (dayIndexSearch) ..5) {
|
||||||
|
dayTimetable = timetables[weekIndexSearch].days[i]
|
||||||
|
cal.add(Calendar.DATE, 1)
|
||||||
|
|
||||||
|
// add the timetable to the card, if it contains at least one lesson break!
|
||||||
|
dayCardView = addDayTimetable(dayTimetable)
|
||||||
|
dayCardView.setDayHeading(formatter.format(cal.time))
|
||||||
|
|
||||||
|
if (dayCardView.getLinLayoutDay().childCount > 1)
|
||||||
|
return dayCardView
|
||||||
|
}
|
||||||
|
dayIndexSearch = 0
|
||||||
|
weekIndexSearch++
|
||||||
|
cal.add(Calendar.DATE, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
dayCardView.setDayHeading(formatter.format(Calendar.getInstance().time))
|
||||||
|
dayCardView.getLinLayoutDay().addView(getNoCard(resources.getString(R.string.no_lesson_today))) // if there is no lecture at all show the no lesson card
|
||||||
|
return dayCardView
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param text the text to show on the card
|
||||||
|
* @return a TextView with the text and all needed parameters
|
||||||
|
*/
|
||||||
|
private fun getNoCard(text: String): TextView {
|
||||||
|
val noLesson = TextView(context)
|
||||||
|
noLesson.text = text
|
||||||
|
noLesson.setTextColor(ContextCompat.getColor(context!!, R.color.textPrimary))
|
||||||
|
noLesson.textSize = 18.0F
|
||||||
|
noLesson.setTypeface(null, Typeface.BOLD)
|
||||||
|
noLesson.textAlignment = View.TEXT_ALIGNMENT_CENTER
|
||||||
|
noLesson.setPadding(7,7,7,7)
|
||||||
|
|
||||||
|
return noLesson
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
@ -23,18 +23,22 @@
|
|||||||
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 androidx.fragment.app.Fragment
|
||||||
|
import kotlinx.android.synthetic.main.fragment_mensa.*
|
||||||
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.controller.CacheController
|
||||||
import org.mosad.seil0.projectlaogai.R
|
import org.mosad.seil0.projectlaogai.controller.CacheController.Companion.mensaCurrentWeek
|
||||||
import org.mosad.seil0.projectlaogai.uicomponents.MensaDayCardView
|
import org.mosad.seil0.projectlaogai.controller.CacheController.Companion.mensaNextWeek
|
||||||
import org.mosad.seil0.projectlaogai.uicomponents.MenuCardView
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cShowBuffet
|
||||||
import java.util.*
|
import org.mosad.seil0.projectlaogai.controller.TCoRAPIController
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.MensaWeek
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.NotRetardedCalendar
|
||||||
|
import org.mosad.seil0.projectlaogai.uicomponents.DayCardView
|
||||||
|
import org.mosad.seil0.projectlaogai.uicomponents.MealLinearLayout
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The mensa controller class
|
* The mensa controller class
|
||||||
@ -42,76 +46,96 @@ import java.util.*
|
|||||||
*/
|
*/
|
||||||
class MensaFragment : Fragment() {
|
class MensaFragment : Fragment() {
|
||||||
|
|
||||||
private lateinit var linLayoutMensaFragment: LinearLayout
|
|
||||||
private var mainActivity = MainActivity()
|
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||||
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_mensa, container, false)
|
val view: View = inflater.inflate(org.mosad.seil0.projectlaogai.R.layout.fragment_mensa, container, false)
|
||||||
|
|
||||||
linLayoutMensaFragment = view.findViewById(R.id.linLayout_MensaFragment)
|
// init actions
|
||||||
|
refreshAction()
|
||||||
|
|
||||||
addCurrentWeek()
|
// add the current week (week starts on sunday)
|
||||||
|
val dayCurrent = if(NotRetardedCalendar().getDayOfWeekIndex() == 6) 0 else NotRetardedCalendar().getDayOfWeekIndex()
|
||||||
|
addWeek(mensaCurrentWeek, dayCurrent).get()
|
||||||
|
|
||||||
|
// add the next week
|
||||||
|
addWeek(mensaNextWeek, 0)
|
||||||
|
|
||||||
|
// TODO should we show a info if there is no more food this & next week?
|
||||||
|
|
||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addCurrentWeek() {
|
/**
|
||||||
|
* add all menus from dayStart to Friday for a given week
|
||||||
|
* @param menusWeek menu of type MensaWeek you want to add
|
||||||
|
* @param dayStart the first day of the week to add
|
||||||
|
*/
|
||||||
|
private fun addWeek(menusWeek: MensaWeek, dayStart: Int) = doAsync {
|
||||||
|
|
||||||
doAsync {
|
uiThread {
|
||||||
|
|
||||||
uiThread {
|
// only add the days dayStart to Fri since the mensa is closed on Sat/Sun
|
||||||
|
for (dayIndex in dayStart..4) {
|
||||||
|
var helpMeal = MealLinearLayout(context)
|
||||||
|
val dayCardView = DayCardView(context!!)
|
||||||
|
|
||||||
for(day in Calendar.getInstance().get(Calendar.DAY_OF_WEEK)..7) {
|
if(menusWeek.days[dayIndex].meals.isNotEmpty())
|
||||||
|
dayCardView.setDayHeading(menusWeek.days[dayIndex].meals[0].day)
|
||||||
|
|
||||||
val strDay: String = when(day) {
|
for (meal in menusWeek.days[dayIndex].meals) {
|
||||||
Calendar.MONDAY -> "Mon"
|
val mealLayout = MealLinearLayout(context)
|
||||||
Calendar.TUESDAY -> "Die"
|
mealLayout.setMeal(meal)
|
||||||
Calendar.WEDNESDAY -> "Mit"
|
|
||||||
Calendar.THURSDAY -> "Don"
|
if(meal.heading != "Buffet" || cShowBuffet) {
|
||||||
Calendar.FRIDAY -> "Fre"
|
dayCardView.getLinLayoutDay().addView(mealLayout)
|
||||||
Calendar.SATURDAY -> "Sam"
|
helpMeal = mealLayout
|
||||||
else -> "TODAY" //TODO
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val cardViewMensaDay = MensaDayCardView(context!!, null)
|
|
||||||
var add = false
|
|
||||||
|
|
||||||
for (meal in mainActivity.getWeekMenu()) {
|
|
||||||
//println("Day: " + meal.day)
|
|
||||||
if (meal.day.contains(strDay)) {
|
|
||||||
|
|
||||||
val menuViewMenu = MenuCardView(context!!, null)
|
|
||||||
menuViewMenu.setMenuHeading(meal.heading)
|
|
||||||
|
|
||||||
for(part in meal.parts) {
|
|
||||||
menuViewMenu.getTxtViewMenu().append(part)
|
|
||||||
}
|
|
||||||
|
|
||||||
cardViewMensaDay.setDayHeading(meal.day) //TODO move this out of the first for loop, performance!!
|
|
||||||
cardViewMensaDay.getLinLayoutMensaDay().addView(menuViewMenu)
|
|
||||||
add = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(add)
|
|
||||||
linLayoutMensaFragment.addView(cardViewMensaDay)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// add a card if there are no more meals in this week
|
helpMeal.disableDivider()
|
||||||
if(linLayoutMensaFragment.childCount == 0) {
|
|
||||||
val cardViewNoMoreFood = MensaDayCardView(context!!, null)
|
if(dayCardView.getLinLayoutDay().childCount > 1)
|
||||||
cardViewNoMoreFood.setDayHeading(resources.getString(R.string.no_more_food))
|
linLayout_Mensa.addView(dayCardView)
|
||||||
linLayoutMensaFragment.addView(cardViewNoMoreFood)
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* initialize the refresh action
|
||||||
|
*/
|
||||||
|
private fun refreshAction() = doAsync {
|
||||||
|
uiThread {
|
||||||
|
// set the refresh listener
|
||||||
|
refreshLayout_Mensa.setOnRefreshListener {
|
||||||
|
updateMensaScreen()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setMainActivity(mainActivity: MainActivity) {
|
/**
|
||||||
this.mainActivity = mainActivity
|
* refresh the mensa cache and update the mensa screen
|
||||||
|
*/
|
||||||
|
private fun updateMensaScreen() = doAsync {
|
||||||
|
// update the cache
|
||||||
|
TCoRAPIController.getMensa(context!!).get() // blocking since we want the new data
|
||||||
|
CacheController.readMensa(context!!)
|
||||||
|
|
||||||
|
uiThread {
|
||||||
|
// remove all menus from the layout
|
||||||
|
linLayout_Mensa.removeAllViews()
|
||||||
|
|
||||||
|
// add the refreshed menus
|
||||||
|
val dayCurrent = if (NotRetardedCalendar().getDayOfWeekIndex() == 6) 0 else NotRetardedCalendar().getDayOfWeekIndex()
|
||||||
|
addWeek(mensaCurrentWeek, dayCurrent).get()
|
||||||
|
|
||||||
|
// add the next week
|
||||||
|
addWeek(mensaNextWeek, 0)
|
||||||
|
|
||||||
|
refreshLayout_Mensa.isRefreshing = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,58 @@
|
|||||||
|
/**
|
||||||
|
* 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.fragments
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.webkit.WebSettings
|
||||||
|
import android.webkit.WebView
|
||||||
|
import org.mosad.seil0.projectlaogai.R
|
||||||
|
import android.webkit.WebViewClient
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The moodle screen controller class
|
||||||
|
* contains all needed parts to display and the moodle screen
|
||||||
|
*/
|
||||||
|
class MoodleFragment : Fragment() {
|
||||||
|
|
||||||
|
private lateinit var webView: WebView
|
||||||
|
private lateinit var webSettings: WebSettings
|
||||||
|
|
||||||
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||||
|
|
||||||
|
val view: View = inflater.inflate(R.layout.fragment_moodle, container, false)
|
||||||
|
|
||||||
|
webView = view.findViewById(R.id.webView)
|
||||||
|
webView.loadUrl("https://elearning.hs-offenburg.de/moodle/")
|
||||||
|
|
||||||
|
webSettings = webView.settings
|
||||||
|
//webSettings.setJavaScriptEnabled(true) // Enable Javascript
|
||||||
|
|
||||||
|
webView.webViewClient = WebViewClient() // Force links and redirects to open in the WebView instead of in a browser
|
||||||
|
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
}
|
@ -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
|
||||||
@ -22,13 +22,15 @@
|
|||||||
|
|
||||||
package org.mosad.seil0.projectlaogai.fragments
|
package org.mosad.seil0.projectlaogai.fragments
|
||||||
|
|
||||||
import android.graphics.Color
|
import android.content.Context
|
||||||
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 android.widget.Switch
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
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
|
||||||
@ -36,10 +38,18 @@ import com.afollestad.materialdialogs.list.listItems
|
|||||||
import kotlinx.android.synthetic.main.fragment_settings.*
|
import kotlinx.android.synthetic.main.fragment_settings.*
|
||||||
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.BuildConfig
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cColorAccent
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cColorPrimary
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cCourse
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cShowBuffet
|
||||||
import org.mosad.seil0.projectlaogai.R
|
import org.mosad.seil0.projectlaogai.R
|
||||||
import org.mosad.seil0.projectlaogai.hsoparser.CourseTTLink
|
import org.mosad.seil0.projectlaogai.controller.CacheController
|
||||||
import java.util.ArrayList
|
import org.mosad.seil0.projectlaogai.controller.CacheController.Companion.coursesList
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.TCoRAPIController
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.DataTypes
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The settings controller class
|
* The settings controller class
|
||||||
@ -49,12 +59,10 @@ class SettingsFragment : Fragment() {
|
|||||||
|
|
||||||
private lateinit var linLayoutUser: LinearLayout
|
private lateinit var linLayoutUser: LinearLayout
|
||||||
private lateinit var linLayoutCourse: LinearLayout
|
private lateinit var linLayoutCourse: LinearLayout
|
||||||
private lateinit var linLayoutInfo: LinearLayout
|
private lateinit var linLayoutAbout: LinearLayout
|
||||||
private lateinit var linLayoutMainColor: LinearLayout
|
private lateinit var linLayoutPrimaryColor: LinearLayout
|
||||||
private lateinit var viewPrimaryColor: View
|
private lateinit var linLayoutAccentColor: LinearLayout
|
||||||
private lateinit var courseTTLinkList: ArrayList<CourseTTLink>
|
private lateinit var switchBuffet: Switch
|
||||||
private var mainActivity = MainActivity()
|
|
||||||
|
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||||
|
|
||||||
@ -62,9 +70,10 @@ class SettingsFragment : Fragment() {
|
|||||||
|
|
||||||
linLayoutUser = view.findViewById(R.id.linLayout_User)
|
linLayoutUser = view.findViewById(R.id.linLayout_User)
|
||||||
linLayoutCourse = view.findViewById(R.id.linLayout_Course)
|
linLayoutCourse = view.findViewById(R.id.linLayout_Course)
|
||||||
linLayoutInfo = view.findViewById(R.id.linLayout_Info)
|
linLayoutAbout = view.findViewById(R.id.linLayout_About)
|
||||||
linLayoutMainColor = view.findViewById(R.id.linLayout_MainColor)
|
linLayoutPrimaryColor = view.findViewById(R.id.linLayout_PrimaryColor)
|
||||||
viewPrimaryColor = view.findViewById(R.id.view_PrimaryColor)
|
linLayoutAccentColor = view.findViewById(R.id.linLayout_AccentColor)
|
||||||
|
switchBuffet = view.findViewById(R.id.switch_buffet)
|
||||||
|
|
||||||
initActions()
|
initActions()
|
||||||
|
|
||||||
@ -75,7 +84,9 @@ 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
|
||||||
|
txtView_AboutDesc.text = resources.getString(R.string.about_version, BuildConfig.VERSION_NAME, getString(R.string.build_time))
|
||||||
|
switch_buffet.isChecked = cShowBuffet // init switch
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -87,24 +98,89 @@ class SettingsFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
linLayoutCourse.setOnClickListener {
|
linLayoutCourse.setOnClickListener {
|
||||||
// open a new dialog
|
selectCourse(context!!)
|
||||||
val courseList = ArrayList<String>()
|
txtView_Course.text = cCourse.courseName // update txtView
|
||||||
|
}
|
||||||
|
|
||||||
courseTTLinkList = mainActivity.getCourseTTLinkList()
|
linLayoutAbout.setOnClickListener {
|
||||||
courseTTLinkList.forEach { (_, course) ->
|
// open a new info dialog
|
||||||
courseList.add(course)
|
MaterialDialog(context!!)
|
||||||
}
|
.title(R.string.about_dialog_heading)
|
||||||
|
.message(R.string.about_dialog_text)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
MaterialDialog(context!!).listItems(items = courseList){ _, index, text ->
|
linLayoutPrimaryColor.setOnClickListener {
|
||||||
txtView_Course.text = text // update txtView
|
// open a new color chooser dialog
|
||||||
|
MaterialDialog(context!!)
|
||||||
|
.title(R.string.primary_color)
|
||||||
|
.colorChooser(DataTypes().primaryColors, allowCustomArgb = true, initialSelection = cColorPrimary) { _, color ->
|
||||||
|
view_PrimaryColor.setBackgroundColor(color)
|
||||||
|
Aesthetic.config {
|
||||||
|
colorPrimary(color)
|
||||||
|
colorPrimaryDark(color)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
|
||||||
val dialog = MaterialDialog(context!!).cancelable(false)
|
cColorPrimary = color
|
||||||
|
PreferencesController.save(context!!)
|
||||||
|
}
|
||||||
|
.positiveButton(R.string.select)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
linLayoutAccentColor.setOnClickListener {
|
||||||
|
// open a new color chooser dialog
|
||||||
|
MaterialDialog(context!!)
|
||||||
|
.title(R.string.accent_color)
|
||||||
|
.colorChooser(DataTypes().accentColors, allowCustomArgb = true, initialSelection = cColorAccent) { _, color ->
|
||||||
|
view_AccentColor.setBackgroundColor(color)
|
||||||
|
Aesthetic.config {
|
||||||
|
colorAccent(color)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
cColorAccent = color
|
||||||
|
PreferencesController.save(context!!)
|
||||||
|
}
|
||||||
|
.positiveButton(R.string.select)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
switchBuffet.setOnClickListener {
|
||||||
|
cShowBuffet = switchBuffet.isChecked
|
||||||
|
PreferencesController.save(context!!)
|
||||||
|
println(switchBuffet.isChecked)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun selectCourse(context: Context) {
|
||||||
|
val courseNameList = ArrayList<String>()
|
||||||
|
coursesList.forEach { (_, courseName) ->
|
||||||
|
courseNameList.add(courseName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// open a new dialog
|
||||||
|
MaterialDialog(context)
|
||||||
|
.title(R.string.select_course)
|
||||||
|
.listItems(items = courseNameList) { _, index, _ ->
|
||||||
|
|
||||||
|
val dialog = MaterialDialog(context).cancelable(false)
|
||||||
.cancelOnTouchOutside(false)
|
.cancelOnTouchOutside(false)
|
||||||
.customView(R.layout.dialog_loading)
|
.customView(R.layout.dialog_loading)
|
||||||
dialog.show()
|
dialog.show()
|
||||||
|
|
||||||
doAsync {
|
doAsync {
|
||||||
mainActivity.updateCourse(courseTTLinkList[index])
|
cCourse = coursesList[index] // set the course
|
||||||
|
PreferencesController.save(context)
|
||||||
|
|
||||||
|
// update current & next weeks timetable
|
||||||
|
TCoRAPIController.getTimetable(cCourse.courseName, 0, context).get() // blocking since we want the new data
|
||||||
|
TCoRAPIController.getTimetable(cCourse.courseName, 1, context).get() // blocking since we want the new data
|
||||||
|
|
||||||
|
CacheController.readTimetable(cCourse.courseName, 0, context)
|
||||||
|
CacheController.readTimetable(cCourse.courseName, 1, context)
|
||||||
|
|
||||||
uiThread {
|
uiThread {
|
||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
@ -113,32 +189,6 @@ class SettingsFragment : Fragment() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
.show()
|
.show()
|
||||||
}
|
|
||||||
|
|
||||||
linLayoutInfo.setOnClickListener {
|
|
||||||
// open a new info dialog
|
|
||||||
MaterialDialog(context!!)
|
|
||||||
.title(R.string.about)
|
|
||||||
.message(R.string.about_text)
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
|
|
||||||
linLayoutMainColor.setOnClickListener {
|
|
||||||
// open a new color chooser dialog
|
|
||||||
val colors = intArrayOf(Color.parseColor("#3F51B5"), Color.RED, Color.GREEN, Color.BLUE)
|
|
||||||
|
|
||||||
MaterialDialog(context!!)
|
|
||||||
.title(R.string.primary_color)
|
|
||||||
.colorChooser(colors, initialSelection = Color.parseColor("#3F51B5")) { _, color ->
|
|
||||||
viewPrimaryColor.setBackgroundColor(color)
|
|
||||||
}
|
|
||||||
.positiveButton(R.string.select)
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setMainActivity(mainActivity: MainActivity) {
|
|
||||||
this.mainActivity = mainActivity
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
@ -22,21 +22,24 @@
|
|||||||
|
|
||||||
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 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 androidx.fragment.app.Fragment
|
||||||
|
import com.afollestad.materialdialogs.MaterialDialog
|
||||||
|
import kotlinx.android.synthetic.main.fragment_timetable.*
|
||||||
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.controller.CacheController
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.CacheController.Companion.timetables
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cCourse
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.TCoRAPIController
|
||||||
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.uicomponents.LessonCardView
|
import org.mosad.seil0.projectlaogai.hsoparser.TimetableWeek
|
||||||
import org.mosad.seil0.projectlaogai.uicomponents.MensaDayCardView
|
import org.mosad.seil0.projectlaogai.uicomponents.*
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@ -46,68 +49,118 @@ import java.util.*
|
|||||||
*/
|
*/
|
||||||
class TimeTableFragment : Fragment() {
|
class TimeTableFragment : Fragment() {
|
||||||
|
|
||||||
private lateinit var linLayoutTTFragment: LinearLayout
|
private val formatter = SimpleDateFormat("E dd.MM", Locale.getDefault()) // TODO change to android call when min api is 24
|
||||||
private var mainActivity = MainActivity()
|
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||||
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_time_table, container, false)
|
val view: View = inflater.inflate(R.layout.fragment_timetable, container, false)
|
||||||
|
|
||||||
linLayoutTTFragment = view.findViewById(R.id.linLayout_TTFragment)
|
// init actions
|
||||||
|
refreshAction()
|
||||||
|
|
||||||
addCurrentWeek()
|
if (timetables[0].days.isNotEmpty() && timetables[1].days.isNotEmpty()) {
|
||||||
|
addInitWeeks()
|
||||||
|
} else {
|
||||||
|
MaterialDialog(context!!)
|
||||||
|
.title(R.string.error)
|
||||||
|
.message(R.string.timetable_error)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add the remaining days of the current week to the timetable screen
|
* add the current and next weeks lessons
|
||||||
* TODO show the current day and the following 5 days
|
|
||||||
*/
|
*/
|
||||||
private fun addCurrentWeek() {
|
private fun addInitWeeks() = doAsync {
|
||||||
val dayIndex = NotRetardedCalendar().getDayOfWeekIndex()
|
val dayIndex = NotRetardedCalendar().getDayOfWeekIndex()
|
||||||
|
val calendar = Calendar.getInstance()
|
||||||
|
|
||||||
doAsync {
|
// add current week
|
||||||
|
addWeek(dayIndex, 5, timetables[0], calendar).get()
|
||||||
|
|
||||||
uiThread {
|
// add next week
|
||||||
|
addWeek(0, dayIndex - 1, timetables[1], calendar)
|
||||||
|
}
|
||||||
|
|
||||||
println(dayIndex)
|
private fun addWeek(dayStart: Int, dayEnd: Int, timetable: TimetableWeek, calendar: Calendar) = doAsync {
|
||||||
for(day in dayIndex..5) {
|
uiThread {
|
||||||
|
|
||||||
val formatter = SimpleDateFormat("E dd.MM", Locale.GERMANY) // TODO change to android call when min api is 24
|
for (day in dayStart..dayEnd) {
|
||||||
val calendar = Calendar.getInstance()
|
var helpLesson = LessonLinearLayout(context)
|
||||||
calendar.firstDayOfWeek = Calendar.MONDAY
|
val dayCardView = DayCardView(context!!)
|
||||||
calendar.add(Calendar.DATE,day - Calendar.getInstance().get(Calendar.DAY_OF_WEEK))
|
dayCardView.setDayHeading(formatter.format(calendar.time))
|
||||||
|
|
||||||
val cardViewTimeTableDay = MensaDayCardView(context!!, null)
|
// for each timeslot of the day
|
||||||
cardViewTimeTableDay.setDayHeading(formatter.format(calendar.time))
|
for ((tsIndex, timeslot) in timetable.days[day].timeslots.withIndex()) {
|
||||||
|
|
||||||
// for each lessen of the day
|
for(lesson in timeslot) {
|
||||||
for((i, lesson) in mainActivity.getCurrentTimeTableWeek()[dayIndex].withIndex()) {
|
|
||||||
val lessonCardView = LessonCardView(context!!, null)
|
|
||||||
lessonCardView.setBackgroundColor(Color.TRANSPARENT)
|
|
||||||
|
|
||||||
lessonCardView.getTxtViewLesson().text = resources.getString(R.string.string_new_line, lesson.lessonSubject)
|
if(lesson.lessonSubject.isNotEmpty()) {
|
||||||
lessonCardView.getTxtViewLesson().append(lesson.lessonTeacher + "\n")
|
|
||||||
lessonCardView.getTxtViewLesson().append(lesson.lessonRoom)
|
|
||||||
lessonCardView.getTxtViewTime().text = DataTypes().getTime()[i]
|
|
||||||
|
|
||||||
if(lessonCardView.getTxtViewLesson().text.length > 2)
|
val lessonLayout = LessonLinearLayout(context)
|
||||||
cardViewTimeTableDay.getLinLayoutMensaDay().addView(lessonCardView)
|
lessonLayout.setLesson(lesson, DataTypes().getTime()[tsIndex])
|
||||||
|
dayCardView.getLinLayoutDay().addView(lessonLayout)
|
||||||
|
|
||||||
|
if (lesson != timeslot.last())
|
||||||
|
lessonLayout.disableDivider()
|
||||||
|
|
||||||
|
helpLesson = lessonLayout
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO if there is no lesson at one day , show a no lesson card
|
|
||||||
|
|
||||||
linLayoutTTFragment.addView(cardViewTimeTableDay)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
helpLesson.disableDivider()
|
||||||
|
calendar.add(Calendar.DATE, 1)
|
||||||
|
|
||||||
|
// if there are no lessons don't show the dayCardView
|
||||||
|
if (dayCardView.getLinLayoutDay().childCount > 1)
|
||||||
|
linLayout_Timetable.addView(dayCardView)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
calendar.add(Calendar.DATE, 1) // before this we are at a sunday (no lecture on sundays!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* initialize the refresh action
|
||||||
|
*/
|
||||||
|
private fun refreshAction() = doAsync {
|
||||||
|
uiThread {
|
||||||
|
// set the refresh listener
|
||||||
|
refreshLayout_Timetable.setOnRefreshListener {
|
||||||
|
updateTimetableScreen()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setMainActivity(mainActivity: MainActivity) {
|
private fun updateTimetableScreen() = doAsync {
|
||||||
this.mainActivity = mainActivity
|
// update the cache
|
||||||
|
TCoRAPIController.getTimetable(cCourse.courseName, 0, context!!).get() // blocking since we want the new data
|
||||||
|
TCoRAPIController.getTimetable(cCourse.courseName, 1, context!!).get() // blocking since we want the new data
|
||||||
|
|
||||||
|
CacheController.readTimetable(cCourse.courseName, 0, context!!)
|
||||||
|
CacheController.readTimetable(cCourse.courseName, 1, context!!)
|
||||||
|
|
||||||
|
uiThread {
|
||||||
|
// remove all menus from the layout
|
||||||
|
linLayout_Timetable.removeAllViews()
|
||||||
|
|
||||||
|
// add the refreshed timetables
|
||||||
|
val dayIndex = NotRetardedCalendar().getDayOfWeekIndex()
|
||||||
|
val calendar = Calendar.getInstance()
|
||||||
|
|
||||||
|
// add current week
|
||||||
|
addWeek(dayIndex, 5, timetables[0], calendar).get()
|
||||||
|
|
||||||
|
// add next week
|
||||||
|
addWeek(0, dayIndex - 1, timetables[1], calendar)
|
||||||
|
|
||||||
|
refreshLayout_Timetable.isRefreshing = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
@ -22,11 +22,55 @@
|
|||||||
|
|
||||||
package org.mosad.seil0.projectlaogai.hsoparser
|
package org.mosad.seil0.projectlaogai.hsoparser
|
||||||
|
|
||||||
|
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")
|
||||||
|
|
||||||
|
val primaryColors = intArrayOf(
|
||||||
|
Color.parseColor("#E53935"),
|
||||||
|
Color.parseColor("#E91E63"),
|
||||||
|
Color.parseColor("#9C27B0"),
|
||||||
|
Color.parseColor("#673AB7"),
|
||||||
|
Color.parseColor("#3F51B5"),
|
||||||
|
Color.parseColor("#2196F3"),
|
||||||
|
Color.parseColor("#03A9F4"),
|
||||||
|
Color.parseColor("#00BCD4"),
|
||||||
|
Color.parseColor("#009688"),
|
||||||
|
Color.parseColor("#4CAF50"),
|
||||||
|
Color.parseColor("#8BC34A"),
|
||||||
|
Color.parseColor("#CDDC39"),
|
||||||
|
Color.parseColor("#FDD835"),
|
||||||
|
Color.parseColor("#FFB300"),
|
||||||
|
Color.parseColor("#FB8C00"),
|
||||||
|
Color.parseColor("#FF5722"),
|
||||||
|
Color.parseColor("#795548"),
|
||||||
|
Color.parseColor("#9E9E9E"),
|
||||||
|
Color.parseColor("#607B8B"),
|
||||||
|
Color.parseColor("#000000")
|
||||||
|
)
|
||||||
|
|
||||||
|
val accentColors = intArrayOf(
|
||||||
|
Color.parseColor("#FF1744"),
|
||||||
|
Color.parseColor("#F50057"),
|
||||||
|
Color.parseColor("#D500F9"),
|
||||||
|
Color.parseColor("#3F51B5"),
|
||||||
|
Color.parseColor("#3D5AFE"),
|
||||||
|
Color.parseColor("#2979FF"),
|
||||||
|
Color.parseColor("#00B0FF"),
|
||||||
|
Color.parseColor("#00E5FF"),
|
||||||
|
Color.parseColor("#1DE9B6"),
|
||||||
|
Color.parseColor("#00E676"),
|
||||||
|
Color.parseColor("#C6FF00"),
|
||||||
|
Color.parseColor("#FFD600"),
|
||||||
|
Color.parseColor("#FFC400"),
|
||||||
|
Color.parseColor("#FF9100"),
|
||||||
|
Color.parseColor("#FF3D00"),
|
||||||
|
Color.parseColor("#000000")
|
||||||
|
)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// do something
|
// do something
|
||||||
}
|
}
|
||||||
@ -53,11 +97,30 @@ class NotRetardedCalendar {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getTomorrowWeekIndex(): Int {
|
||||||
|
return when(calendar.get(Calendar.DAY_OF_WEEK)) {
|
||||||
|
Calendar.MONDAY -> 1
|
||||||
|
Calendar.TUESDAY -> 2
|
||||||
|
Calendar.WEDNESDAY -> 3
|
||||||
|
Calendar.THURSDAY -> 4
|
||||||
|
Calendar.FRIDAY -> 5
|
||||||
|
Calendar.SATURDAY -> 6
|
||||||
|
Calendar.SUNDAY -> 0
|
||||||
|
else -> 7
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 Meals(val meals: ArrayList<Meal>)
|
||||||
|
|
||||||
|
data class MensaWeek(val days: Array<Meals> = Array(7) { Meals(ArrayList()) })
|
||||||
|
|
||||||
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 TimetableDay( val timeslots: Array<ArrayList<Lesson>> = Array(6) { ArrayList<Lesson>()})
|
||||||
|
|
||||||
data class Meal(val day: String, val heading: String, val parts: ArrayList<String>, val additives: String)
|
data class TimetableWeek(val days: Array<TimetableDay> = Array(6) { TimetableDay() })
|
@ -1,79 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProjectLaogai
|
|
||||||
*
|
|
||||||
* Copyright 2018 <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.hsoparser
|
|
||||||
|
|
||||||
import org.jsoup.Jsoup
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class MensaParser {
|
|
||||||
private var mealList = ArrayList<Meal>()
|
|
||||||
|
|
||||||
init {
|
|
||||||
// do something
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* returns the mensa menu for the whole week
|
|
||||||
*/
|
|
||||||
fun getMensaMenu(): ArrayList<Meal> {
|
|
||||||
val menuHTML = Jsoup.connect("https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/").get()
|
|
||||||
|
|
||||||
menuHTML.select("#speiseplan-tabs").select("div.tab-content").select("div.menu-tagesplan").forEachIndexed { _, element ->
|
|
||||||
val day = element.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("|"))
|
|
||||||
val additives = element.select("div.row").select("div.menu-info")[i].select("span.show-with-allergenes").text()
|
|
||||||
|
|
||||||
mealList.add(Meal(day, heading, parts, additives))
|
|
||||||
} catch (e: Exception) {
|
|
||||||
// catch
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return mealList
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,94 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProjectLaogai
|
|
||||||
*
|
|
||||||
* Copyright 2018 <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.hsoparser
|
|
||||||
|
|
||||||
import org.jsoup.Jsoup
|
|
||||||
|
|
||||||
class TimeTableParser {
|
|
||||||
private val days = arrayOf("Monday", "Tuesday" ,"Wednesday", "Thursday", "Friday", "Saturday")
|
|
||||||
private var courseTTLinkList = ArrayList<CourseTTLink>()
|
|
||||||
private var timeTableWeek = arrayOf<Array<Lesson>>()
|
|
||||||
|
|
||||||
init {
|
|
||||||
// create the timetable array
|
|
||||||
for (i in 0..5) {
|
|
||||||
var timeTableDay = arrayOf<Lesson>()
|
|
||||||
for (j in 0..5) {
|
|
||||||
timeTableDay += Lesson("", "","","")
|
|
||||||
}
|
|
||||||
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()
|
|
||||||
//println("$week successful!\n")
|
|
||||||
|
|
||||||
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())
|
|
||||||
}
|
|
||||||
|
|
||||||
return timeTableWeek
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* parse all courses from the courses site at https://www.hs-offenburg.de/studium/vorlesungsplaene/
|
|
||||||
*/
|
|
||||||
fun getCourseTTLinks(): ArrayList<CourseTTLink> {
|
|
||||||
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 ->
|
|
||||||
courseTTLinkList.add(CourseTTLink(element.attr("href"),element.text()))
|
|
||||||
}
|
|
||||||
return courseTTLinkList
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fun printTimeTableWeek (timeTableWeek: Array<Array<Lesson>>) {
|
|
||||||
|
|
||||||
for (j in 0..5) print(days[j].padEnd(25 ,' ') + " | ")
|
|
||||||
println()
|
|
||||||
for (j in 0..5) print("-".padEnd(26 + (j.toFloat().div(j).toInt()), '-') + "+")
|
|
||||||
println()
|
|
||||||
|
|
||||||
for (i in 0..5) {
|
|
||||||
for (j in 0..5) print(timeTableWeek[j][i].lessonSubject.padEnd(25 ,' ').substring(0,25) + " | ")
|
|
||||||
println()
|
|
||||||
for (j in 0..5) print(timeTableWeek[j][i].lessonTeacher.padEnd(25 ,' ').substring(0,25) + " | ")
|
|
||||||
println()
|
|
||||||
for (j in 0..5) print(timeTableWeek[j][i].lessonRoom.padEnd(25 ,' ').substring(0,25) + " | ")
|
|
||||||
println()
|
|
||||||
for (j in 0..5) print("-".padEnd(26 + (j.toFloat().div(j).toInt()), '-') + "+")
|
|
||||||
println()
|
|
||||||
}
|
|
||||||
println()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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
|
||||||
@ -23,32 +23,27 @@
|
|||||||
package org.mosad.seil0.projectlaogai.uicomponents
|
package org.mosad.seil0.projectlaogai.uicomponents
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.graphics.Color
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import androidx.cardview.widget.CardView
|
||||||
|
import kotlinx.android.synthetic.main.cardview_day.view.*
|
||||||
import org.mosad.seil0.projectlaogai.R
|
import org.mosad.seil0.projectlaogai.R
|
||||||
|
|
||||||
class MensaDayCardView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : androidx.cardview.widget.CardView(context, attrs){
|
class DayCardView(context: Context) : CardView(context) {
|
||||||
|
|
||||||
private var linLayoutMensaDay: LinearLayout
|
|
||||||
private var txtViewDayHeading: TextView
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
inflate(context, R.layout.mensaday_cardview,this)
|
inflate(context, R.layout.cardview_day,this)
|
||||||
|
|
||||||
linLayoutMensaDay = findViewById(R.id.linLayout_MensaDay)
|
|
||||||
txtViewDayHeading = findViewById(R.id.txtView_DayHeading)
|
|
||||||
|
|
||||||
// workaround to prevent a white border
|
// workaround to prevent a white border
|
||||||
//this.setBackgroundColor(Color.TRANSPARENT)
|
this.setBackgroundColor(Color.TRANSPARENT)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getLinLayoutMensaDay(): LinearLayout {
|
fun getLinLayoutDay() : LinearLayout {
|
||||||
return linLayoutMensaDay
|
return linLayout_Day
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setDayHeading(heading: String) {
|
fun setDayHeading(heading: String) {
|
||||||
txtViewDayHeading.text = heading
|
txtView_DayHeading.text = heading
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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
|
||||||
@ -23,31 +23,28 @@
|
|||||||
package org.mosad.seil0.projectlaogai.uicomponents
|
package org.mosad.seil0.projectlaogai.uicomponents
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Color
|
import android.view.View
|
||||||
import android.util.AttributeSet
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import androidx.cardview.widget.CardView
|
||||||
|
import kotlinx.android.synthetic.main.linearlayout_lesson.view.*
|
||||||
import org.mosad.seil0.projectlaogai.R
|
import org.mosad.seil0.projectlaogai.R
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.Lesson
|
||||||
|
|
||||||
class LessonCardView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : androidx.cardview.widget.CardView(context, attrs){
|
class LessonLinearLayout(context: Context?) : LinearLayout(context) {
|
||||||
|
|
||||||
private var txtViewLesson: TextView
|
|
||||||
private var txtViewTime: TextView
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
inflate(context, R.layout.lesson_cardview,this)
|
CardView.inflate(context, R.layout.linearlayout_lesson, this)
|
||||||
|
|
||||||
txtViewLesson = findViewById(R.id.txtView_Lesson)
|
|
||||||
txtViewTime = findViewById(R.id.txtView_Time)
|
|
||||||
|
|
||||||
// workaround to prevent a white border
|
|
||||||
this.setBackgroundColor(Color.parseColor("#3F51B5"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTxtViewLesson(): TextView {
|
fun setLesson(lesson: Lesson, time: String) {
|
||||||
return txtViewLesson
|
txtView_lessonTime.text = time
|
||||||
|
txtView_lessonSubject.text = lesson.lessonSubject
|
||||||
|
txtView_lessonTeacher.text = lesson.lessonTeacher
|
||||||
|
txtView_lessonRoom.text = lesson.lessonRoom
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTxtViewTime(): TextView {
|
fun disableDivider() {
|
||||||
return txtViewTime
|
divider_lesson.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
/**
|
||||||
|
* 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.uicomponents
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.LinearLayout
|
||||||
|
import androidx.cardview.widget.CardView
|
||||||
|
import kotlinx.android.synthetic.main.linearlayout_meal.view.*
|
||||||
|
import org.mosad.seil0.projectlaogai.R
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.Meal
|
||||||
|
|
||||||
|
class MealLinearLayout(context: Context?): LinearLayout(context) {
|
||||||
|
|
||||||
|
init {
|
||||||
|
CardView.inflate(context, R.layout.linearlayout_meal, this)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setMeal(meal: Meal) {
|
||||||
|
txtView_MealHeading.text = meal.heading
|
||||||
|
|
||||||
|
meal.parts.forEachIndexed { partIndex, part ->
|
||||||
|
txtView_Meal.append(part)
|
||||||
|
if(partIndex < (meal.parts.size - 1))
|
||||||
|
txtView_Meal.append("\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun disableDivider() {
|
||||||
|
divider_meal.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,31 +0,0 @@
|
|||||||
package org.mosad.seil0.projectlaogai.uicomponents
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.graphics.Color
|
|
||||||
import android.util.AttributeSet
|
|
||||||
import android.widget.TextView
|
|
||||||
import org.mosad.seil0.projectlaogai.R
|
|
||||||
|
|
||||||
class MenuCardView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : androidx.cardview.widget.CardView(context, attrs){
|
|
||||||
|
|
||||||
private var txtViewMenuHeading: TextView
|
|
||||||
private var txtViewMenu: TextView
|
|
||||||
|
|
||||||
init {
|
|
||||||
inflate(context, R.layout.menu_cardview,this)
|
|
||||||
|
|
||||||
txtViewMenuHeading = findViewById(R.id.txtView_MenuHeading)
|
|
||||||
txtViewMenu = findViewById(R.id.txtView_Menu)
|
|
||||||
|
|
||||||
// workaround to prevent a white border
|
|
||||||
this.setBackgroundColor(Color.TRANSPARENT)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setMenuHeading(heading: String) {
|
|
||||||
txtViewMenuHeading.text = heading
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getTxtViewMenu(): TextView {
|
|
||||||
return txtViewMenu
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 6.2 KiB |
@ -1,34 +0,0 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:aapt="http://schemas.android.com/aapt"
|
|
||||||
android:width="108dp"
|
|
||||||
android:height="108dp"
|
|
||||||
android:viewportHeight="108"
|
|
||||||
android:viewportWidth="108">
|
|
||||||
<path
|
|
||||||
android:fillType="evenOdd"
|
|
||||||
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
|
|
||||||
android:strokeColor="#00000000"
|
|
||||||
android:strokeWidth="1">
|
|
||||||
<aapt:attr name="android:fillColor">
|
|
||||||
<gradient
|
|
||||||
android:endX="78.5885"
|
|
||||||
android:endY="90.9159"
|
|
||||||
android:startX="48.7653"
|
|
||||||
android:startY="61.0927"
|
|
||||||
android:type="linear">
|
|
||||||
<item
|
|
||||||
android:color="#44000000"
|
|
||||||
android:offset="0.0"/>
|
|
||||||
<item
|
|
||||||
android:color="#00000000"
|
|
||||||
android:offset="1.0"/>
|
|
||||||
</gradient>
|
|
||||||
</aapt:attr>
|
|
||||||
</path>
|
|
||||||
<path
|
|
||||||
android:fillColor="#FFFFFF"
|
|
||||||
android:fillType="nonZero"
|
|
||||||
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
|
|
||||||
android:strokeColor="#00000000"
|
|
||||||
android:strokeWidth="1"/>
|
|
||||||
</vector>
|
|
@ -1,13 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<item
|
<item android:drawable="@color/colorPrimary"/>
|
||||||
android:drawable="@color/colorPrimary"/>
|
|
||||||
|
|
||||||
<item>
|
<!--TODO when minAPI is 23 use this-->
|
||||||
|
<!--<item android:gravity="center" android:width="144dp" android:height="144dp">-->
|
||||||
|
<item android:gravity="center">
|
||||||
<bitmap
|
<bitmap
|
||||||
android:gravity="center"
|
android:gravity="fill_horizontal|fill_vertical"
|
||||||
android:src="@drawable/ic_launcher"/>
|
android:src="@mipmap/ic_laogai_icon_splash"/>
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
</layer-list>
|
</layer-list>
|
@ -1,74 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<vector
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:height="108dp"
|
|
||||||
android:width="108dp"
|
|
||||||
android:viewportHeight="108"
|
|
||||||
android:viewportWidth="108">
|
|
||||||
<path android:fillColor="#008577"
|
|
||||||
android:pathData="M0,0h108v108h-108z"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M9,0L9,108"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M19,0L19,108"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M29,0L29,108"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M39,0L39,108"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M49,0L49,108"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M59,0L59,108"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M69,0L69,108"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M79,0L79,108"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M89,0L89,108"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M99,0L99,108"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M0,9L108,9"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M0,19L108,19"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M0,29L108,29"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M0,39L108,39"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M0,49L108,49"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M0,59L108,59"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M0,69L108,69"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M0,79L108,79"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M0,89L108,89"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M0,99L108,99"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M19,29L89,29"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M19,39L89,39"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M19,49L89,49"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M19,59L89,59"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M19,69L89,69"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M19,79L89,79"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M29,19L29,89"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M39,19L39,89"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M49,19L49,89"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M59,19L59,89"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M69,19L69,89"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
|
|
||||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
|
||||||
</vector>
|
|
9
app/src/main/res/drawable/ic_local_dining_black_24dp.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="M8.1,13.34l2.83,-2.83L3.91,3.5c-1.56,1.56 -1.56,4.09 0,5.66l4.19,4.18zM14.88,11.53c1.53,0.71 3.68,0.21 5.27,-1.38 1.91,-1.91 2.28,-4.65 0.81,-6.12 -1.46,-1.46 -4.2,-1.1 -6.12,0.81 -1.59,1.59 -2.09,3.74 -1.38,5.27L3.7,19.87l1.41,1.41L12,14.41l6.88,6.88 1.41,-1.41L13.41,13l1.47,-1.47z"/>
|
||||||
|
</vector>
|
@ -1,9 +0,0 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:width="24dp"
|
|
||||||
android:height="24dp"
|
|
||||||
android:viewportWidth="24.0"
|
|
||||||
android:viewportHeight="24.0">
|
|
||||||
<path
|
|
||||||
android:fillColor="#FF000000"
|
|
||||||
android:pathData="M4,6H2v14c0,1.1 0.9,2 2,2h14v-2H4V6zm16,-4H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2V4c0,-1.1 -0.9,-2 -2,-2zm-8,12.5v-9l6,4.5 -6,4.5z"/>
|
|
||||||
</vector>
|
|
@ -5,5 +5,5 @@
|
|||||||
android:viewportHeight="24.0">
|
android:viewportHeight="24.0">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FF000000"
|
android:fillColor="#FF000000"
|
||||||
android:pathData="M20,3L4,3v10c0,2.21 1.79,4 4,4h6c2.21,0 4,-1.79 4,-4v-3h2c1.11,0 2,-0.9 2,-2L22,5c0,-1.11 -0.89,-2 -2,-2zM20,8h-2L18,5h2v3zM4,19h16v2L4,21z"/>
|
android:pathData="M5,13.18v4L12,21l7,-3.82v-4L12,17l-7,-3.82zM12,3L1,9l11,6 9,-4.91V17h2V9L12,3z"/>
|
||||||
</vector>
|
</vector>
|
@ -1,9 +1,9 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:autoMirrored="true"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:viewportWidth="24.0"
|
android:width="24dp"
|
||||||
android:viewportHeight="24.0">
|
android:viewportHeight="24.0"
|
||||||
<path
|
android:viewportWidth="24.0">
|
||||||
android:fillColor="#FF000000"
|
<path android:fillColor="#FF000000"
|
||||||
android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"/>
|
android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"/>
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
<gradient
|
<gradient
|
||||||
android:angle="135"
|
android:angle="135"
|
||||||
android:centerColor="@color/colorPrimary"
|
android:centerColor="?colorPrimary"
|
||||||
android:endColor="@color/colorPrimaryDark"
|
android:endColor="?colorPrimaryDark"
|
||||||
android:startColor="@color/colorPrimary"
|
android:startColor="?colorPrimary"
|
||||||
android:type="linear"/>
|
android:type="linear"/>
|
||||||
</shape>
|
</shape>
|
@ -21,6 +21,7 @@
|
|||||||
android:layout_gravity="start"
|
android:layout_gravity="start"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
app:headerLayout="@layout/nav_header_main"
|
app:headerLayout="@layout/nav_header_main"
|
||||||
|
app:itemTextColor="?colorAccent"
|
||||||
app:menu="@menu/activity_main_drawer"/>
|
app:menu="@menu/activity_main_drawer"/>
|
||||||
|
|
||||||
</androidx.drawerlayout.widget.DrawerLayout>
|
</androidx.drawerlayout.widget.DrawerLayout>
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
android:background="@color/design_default_color_primary"
|
android:background="?colorPrimary"
|
||||||
app:popupTheme="@style/AppTheme.PopupOverlay"/>
|
app:popupTheme="@style/AppTheme.PopupOverlay"/>
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
19
app/src/main/res/layout/cardview_day.xml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" app:cardUseCompatPadding="true"
|
||||||
|
app:cardElevation="5dp" app:cardBackgroundColor="@color/themeSecondary"
|
||||||
|
>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" android:id="@+id/linLayout_Day">
|
||||||
|
<TextView
|
||||||
|
android:text="@string/sample_date"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/txtView_DayHeading" android:textSize="18sp"
|
||||||
|
android:textAlignment="center" android:textStyle="bold" android:textColor="?colorAccent"/>
|
||||||
|
</LinearLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
@ -1,7 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".fragments.HomeFragment">
|
tools:context=".fragments.HomeFragment">
|
||||||
@ -10,96 +9,14 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
|
||||||
android:id="@+id/cardView"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="125dp"
|
|
||||||
android:layout_marginStart="5dp"
|
|
||||||
android:layout_marginTop="5dp"
|
|
||||||
android:layout_marginEnd="5dp"
|
|
||||||
android:clickable="false"
|
|
||||||
android:maxHeight="125dp"
|
|
||||||
app:cardCornerRadius="15dp"
|
|
||||||
app:cardUseCompatPadding="true"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="1.0"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
<TextView
|
|
||||||
android:text="@string/meal_1"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/txtView_Menu1Heading"
|
|
||||||
android:textStyle="bold" android:textAlignment="center" android:textSize="16sp"
|
|
||||||
android:typeface="sans" android:fontFamily="sans-serif" android:paddingBottom="5dp"/>
|
|
||||||
<TextView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:fontFamily="sans-serif"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:typeface="sans" android:id="@+id/txtViewMenu1"/>
|
|
||||||
</LinearLayout>
|
|
||||||
</androidx.cardview.widget.CardView>
|
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
|
||||||
android:id="@+id/cardView2"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="125dp"
|
|
||||||
android:layout_marginStart="5dp"
|
|
||||||
android:layout_marginEnd="5dp"
|
|
||||||
app:cardCornerRadius="15dp"
|
|
||||||
app:cardUseCompatPadding="true"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="1.0"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/cardView">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
<TextView
|
|
||||||
android:text="@string/meal_2"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/txtView_Menu2Heading"
|
|
||||||
android:textAlignment="center" android:textStyle="bold" android:textSize="16sp"
|
|
||||||
android:typeface="sans" android:fontFamily="sans-serif" android:paddingBottom="5dp"/>
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/txtViewMenu2"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:fontFamily="sans-serif"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:typeface="sans"/>
|
|
||||||
</LinearLayout>
|
|
||||||
</androidx.cardview.widget.CardView>
|
|
||||||
<ScrollView
|
<ScrollView
|
||||||
android:layout_width="0dp"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="match_parent">
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/cardView2" android:id="@+id/scrollViewTimeTable"
|
|
||||||
android:background="@color/colorPrimary" android:paddingTop="6dp">
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/linLayoutTimeTable"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:id="@+id/linLayout_Home">
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/cardView2">
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".fragments.MensaFragment">
|
tools:context=".fragments.MensaFragment">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
android:id="@+id/refreshLayout_Mensa">
|
||||||
|
|
||||||
<ScrollView
|
<ScrollView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -15,12 +16,12 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" android:id="@+id/linLayout_MensaFragment"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
|
android:animateLayoutChanges="false"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
android:background="@color/themePrimary"
|
||||||
>
|
android:id="@+id/linLayout_Mensa"/>
|
||||||
</LinearLayout>
|
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
14
app/src/main/res/layout/fragment_moodle.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".fragments.MoodleFragment">
|
||||||
|
|
||||||
|
<!-- TODO: Update blank fragment layout -->
|
||||||
|
<WebView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:id="@+id/webView"/>
|
||||||
|
|
||||||
|
</FrameLayout>
|
@ -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"
|
||||||
@ -30,7 +30,7 @@
|
|||||||
android:layout_height="wrap_content" android:id="@+id/txtView_Info"
|
android:layout_height="wrap_content" android:id="@+id/txtView_Info"
|
||||||
android:typeface="sans"
|
android:typeface="sans"
|
||||||
android:textSize="18sp" android:textStyle="bold" android:fontFamily="sans-serif"
|
android:textSize="18sp" android:textStyle="bold" android:fontFamily="sans-serif"
|
||||||
android:layout_margin="7dp" android:textColor="@color/colorPrimary"/>
|
android:layout_margin="7dp" android:textColor="?colorAccent"/>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -78,7 +78,7 @@
|
|||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" android:layout_margin="7dp"
|
android:layout_height="match_parent" android:layout_margin="7dp"
|
||||||
android:id="@+id/linLayout_Info">
|
android:id="@+id/linLayout_About">
|
||||||
<TextView
|
<TextView
|
||||||
android:text="@string/about_txtView"
|
android:text="@string/about_txtView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -86,9 +86,9 @@
|
|||||||
android:textStyle="bold" android:textSize="16sp"
|
android:textStyle="bold" android:textSize="16sp"
|
||||||
android:textColor="@android:color/primary_text_light"/>
|
android:textColor="@android:color/primary_text_light"/>
|
||||||
<TextView
|
<TextView
|
||||||
android:text="@string/version"
|
android:text="@string/about_version"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" android:id="@+id/txtView_Version"/>
|
android:layout_height="wrap_content" android:id="@+id/txtView_AboutDesc"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
@ -100,20 +100,20 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" android:id="@+id/linLayout_Settings">
|
android:layout_height="wrap_content" android:id="@+id/linLayout_Settings" android:padding="7dp">
|
||||||
<TextView
|
<TextView
|
||||||
android:text="@string/settings"
|
android:text="@string/settings"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" android:id="@+id/txtView_Settings"
|
android:layout_height="wrap_content" android:id="@+id/txtView_Settings"
|
||||||
android:typeface="sans"
|
android:typeface="sans"
|
||||||
android:textSize="18sp" android:textColor="@color/design_default_color_primary"
|
android:textSize="18sp" android:textColor="?colorAccent"
|
||||||
android:textStyle="bold" android:layout_margin="7dp" android:paddingTop="3dp"/>
|
android:textStyle="bold" android:paddingTop="3dp"/>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" android:layout_margin="7dp"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center_vertical|end"
|
android:gravity="center_vertical|end"
|
||||||
android:clickable="true" android:id="@+id/linLayout_MainColor" android:focusable="true">
|
android:clickable="true" android:id="@+id/linLayout_PrimaryColor" android:focusable="true">
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@ -125,7 +125,7 @@
|
|||||||
android:textSize="16sp" android:textStyle="bold"
|
android:textSize="16sp" android:textStyle="bold"
|
||||||
android:textColor="@android:color/primary_text_light"/>
|
android:textColor="@android:color/primary_text_light"/>
|
||||||
<TextView
|
<TextView
|
||||||
android:text="@string/main_color_desc"
|
android:text="@string/primary_color_desc"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" android:id="@+id/txtView_PrimaryColorDesc"/>
|
android:layout_height="wrap_content" android:id="@+id/txtView_PrimaryColorDesc"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@ -137,9 +137,47 @@
|
|||||||
<View
|
<View
|
||||||
android:layout_width="40dp"
|
android:layout_width="40dp"
|
||||||
android:layout_height="40dp" android:id="@+id/view_PrimaryColor"
|
android:layout_height="40dp" android:id="@+id/view_PrimaryColor"
|
||||||
android:background="@color/colorPrimary"/>
|
android:background="?colorPrimary"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical|end"
|
||||||
|
android:clickable="true" android:id="@+id/linLayout_AccentColor" android:focusable="true">
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
<TextView
|
||||||
|
android:text="@string/accent_color"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/txtView_AccentColor"
|
||||||
|
android:textSize="16sp" android:textStyle="bold"
|
||||||
|
android:textColor="@android:color/primary_text_light"/>
|
||||||
|
<TextView
|
||||||
|
android:text="@string/accent_color_desc"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/txtView_AccentColorDesc"/>
|
||||||
|
</LinearLayout>
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:layout_margin="7dp"
|
||||||
|
android:gravity="end">
|
||||||
|
<View
|
||||||
|
android:layout_width="40dp"
|
||||||
|
android:layout_height="40dp" android:id="@+id/view_AccentColor"
|
||||||
|
android:background="?colorAccent"/>
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
<Switch
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/switch_buffet"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:textColor="@android:color/primary_text_light" android:textStyle="bold"
|
||||||
|
android:text="@string/show_buffet"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -5,9 +5,10 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".fragments.TimeTableFragment">
|
tools:context=".fragments.TimeTableFragment">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
android:id="@+id/refreshLayout_Timetable">
|
||||||
|
|
||||||
<ScrollView
|
<ScrollView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -15,9 +16,10 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" android:id="@+id/linLayout_TTFragment">
|
android:layout_height="wrap_content"
|
||||||
</LinearLayout>
|
android:animateLayoutChanges="false"
|
||||||
|
android:background="@color/themePrimary"
|
||||||
|
android:id="@+id/linLayout_Timetable"/>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
@ -1,34 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.cardview.widget.CardView
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:cardBackgroundColor="@android:color/background_light"
|
|
||||||
app:contentPadding="5dp" app:cardElevation="5dp"
|
|
||||||
app:cardUseCompatPadding="true" app:cardPreventCornerOverlap="false" app:cardCornerRadius="12dp">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/txtView_Lesson"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/a_lesson"
|
|
||||||
android:textColor="@android:color/primary_text_light"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:typeface="sans"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/txtView_Time"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="end"
|
|
||||||
android:text="@string/a_time"/>
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</androidx.cardview.widget.CardView>
|
|
35
app/src/main/res/layout/linearlayout_lesson.xml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/linLayout_lesson" android:padding="7dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/txtView_lessonSubject" android:layout_weight="1"
|
||||||
|
android:textSize="15sp" android:textColor="@color/textPrimary"/>
|
||||||
|
<TextView
|
||||||
|
android:text="@string/a_time"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/txtView_lessonTime" android:layout_weight="1"
|
||||||
|
android:textColor="@color/textSecondary" android:gravity="end"/>
|
||||||
|
</LinearLayout>
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/txtView_lessonTeacher" android:textSize="15sp"
|
||||||
|
android:textColor="@color/textPrimary"/>
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/txtView_lessonRoom"
|
||||||
|
android:textColor="@color/textPrimary"/>
|
||||||
|
<View
|
||||||
|
android:id="@+id/divider_lesson"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="?android:attr/listDivider"
|
||||||
|
/>
|
||||||
|
</LinearLayout>
|
23
app/src/main/res/layout/linearlayout_meal.xml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" android:id="@+id/linLayout_Meal" android:padding="7dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:text="@string/meal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/txtView_MealHeading" android:textSize="18sp"
|
||||||
|
android:textColor="@color/textPrimary" android:textAlignment="center" android:paddingBottom="5dp"
|
||||||
|
android:textStyle="bold"/>
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/txtView_Meal" android:textSize="15sp"
|
||||||
|
android:textColor="@color/textPrimary" android:textAlignment="center"/>
|
||||||
|
<View
|
||||||
|
android:id="@+id/divider_meal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="?android:attr/listDivider"
|
||||||
|
/>
|
||||||
|
</LinearLayout>
|
@ -1,22 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.cardview.widget.CardView
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="9dp"
|
|
||||||
app:cardElevation="5dp"
|
|
||||||
app:cardBackgroundColor="@color/colorMensaDay"
|
|
||||||
app:cardUseCompatPadding="true">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/linLayout_MensaDay">
|
|
||||||
<TextView
|
|
||||||
android:text="@string/sample_date"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/txtView_DayHeading" android:textAlignment="center"
|
|
||||||
android:textSize="20sp" android:textStyle="bold" android:typeface="sans" android:paddingBottom="5dp"/>
|
|
||||||
</LinearLayout>
|
|
||||||
</androidx.cardview.widget.CardView>
|
|
@ -1,42 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:id="@+id/cardView"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="5dp"
|
|
||||||
android:layout_marginTop="5dp"
|
|
||||||
android:layout_marginEnd="5dp"
|
|
||||||
android:clickable="false"
|
|
||||||
android:maxHeight="125dp"
|
|
||||||
app:cardCornerRadius="15dp"
|
|
||||||
app:cardUseCompatPadding="true"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="1.0"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
<TextView
|
|
||||||
android:text="@string/meal_1"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/txtView_MenuHeading"
|
|
||||||
android:textStyle="bold" android:textAlignment="center" android:textSize="16sp"
|
|
||||||
android:typeface="sans" android:fontFamily="sans-serif" android:paddingBottom="5dp"/>
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/txtView_Menu"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:fontFamily="sans-serif"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:typeface="sans"/>
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</androidx.cardview.widget.CardView>
|
|
@ -4,20 +4,21 @@
|
|||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="@dimen/nav_header_height"
|
android:layout_height="@dimen/nav_header_height"
|
||||||
android:background="@drawable/side_nav_bar"
|
android:background="@color/colorPrimary"
|
||||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
android:theme="@style/ThemeOverlay.AppCompat.Dark"
|
android:theme="@style/ThemeOverlay.AppCompat.Dark"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:gravity="bottom">
|
android:gravity="bottom"
|
||||||
|
android:id="@+id/nav_header_main">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="@dimen/nav_header_vertical_spacing"
|
android:paddingTop="@dimen/nav_header_vertical_spacing"
|
||||||
app:srcCompat="@mipmap/ic_launcher_round"
|
app:srcCompat="@mipmap/ic_laogai_icon"
|
||||||
android:contentDescription="@string/nav_header_desc"
|
android:contentDescription="@string/nav_header_desc"
|
||||||
android:id="@+id/imageView"/>
|
android:id="@+id/imageView"/>
|
||||||
|
|
||||||
@ -26,7 +27,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="@dimen/nav_header_vertical_spacing"
|
android:paddingTop="@dimen/nav_header_vertical_spacing"
|
||||||
android:text="@string/nav_header_title"
|
android:text="@string/nav_header_title"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1" android:id="@+id/txtView_nav_header_title"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -4,10 +4,13 @@
|
|||||||
tools:showIn="navigation_view">
|
tools:showIn="navigation_view">
|
||||||
|
|
||||||
<group android:checkableBehavior="single">
|
<group android:checkableBehavior="single">
|
||||||
<item android:id="@+id/nav_home" android:title="@string/home" android:icon="@drawable/ic_baseline_home_24dp"/>
|
<item
|
||||||
|
android:id="@+id/nav_home"
|
||||||
|
android:title="@string/home"
|
||||||
|
android:icon="@drawable/ic_baseline_home_24dp"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/nav_mensa"
|
android:id="@+id/nav_mensa"
|
||||||
android:icon="@drawable/ic_free_breakfast_black_24dp"
|
android:icon="@drawable/ic_local_dining_black_24dp"
|
||||||
android:title="@string/mensa"/>
|
android:title="@string/mensa"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/nav_timetable"
|
android:id="@+id/nav_timetable"
|
||||||
@ -15,12 +18,8 @@
|
|||||||
android:title="@string/timetable"/>
|
android:title="@string/timetable"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/nav_moodle"
|
android:id="@+id/nav_moodle"
|
||||||
android:icon="@drawable/ic_menu_slideshow"
|
android:icon="@drawable/ic_school_black_24dp"
|
||||||
android:title="@string/moodle"/>
|
android:title="@string/moodle"/>
|
||||||
<item
|
|
||||||
android:id="@+id/nav_email"
|
|
||||||
android:icon="@android:drawable/ic_dialog_email"
|
|
||||||
android:title="@string/e_mail"/>
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/nav_settings"
|
android:id="@+id/nav_settings"
|
||||||
android:icon="@drawable/ic_settings_black_24dp"
|
android:icon="@drawable/ic_settings_black_24dp"
|
||||||
|
@ -4,5 +4,5 @@
|
|||||||
<item android:id="@+id/action_settings"
|
<item android:id="@+id/action_settings"
|
||||||
android:title="@string/settings"
|
android:title="@string/settings"
|
||||||
android:orderInCategory="100"
|
android:orderInCategory="100"
|
||||||
app:showAsAction="never"/>
|
app:showAsAction="never" android:visible="false"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
5
app/src/main/res/mipmap-anydpi-v26/ic_laogai_icon.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@color/ic_launcher_background"/>
|
||||||
|
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||||
|
</adaptive-icon>
|
@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
|
||||||
</adaptive-icon>
|
|
@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
|
||||||
</adaptive-icon>
|
|
BIN
app/src/main/res/mipmap-hdpi/ic_laogai_icon.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 2.9 KiB |
BIN
app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 4.8 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_laogai_icon.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_laogai_icon_splash.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 2.0 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.7 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_laogai_icon.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 4.4 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 6.7 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_laogai_icon.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 6.2 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 10 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_laogai_icon.png
Normal file
After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 8.9 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 15 KiB |
@ -4,25 +4,27 @@
|
|||||||
<string name="mensa">Mensa</string>
|
<string name="mensa">Mensa</string>
|
||||||
<string name="timetable">Stundenplan</string>
|
<string name="timetable">Stundenplan</string>
|
||||||
<string name="moodle">Moodle</string>
|
<string name="moodle">Moodle</string>
|
||||||
<string name="e_mail">E-Mail</string>
|
|
||||||
<string name="settings">Einstellungen</string>
|
<string name="settings">Einstellungen</string>
|
||||||
<string name="meal_1">Essen 1</string>
|
<string name="meal">Essen</string>
|
||||||
<string name="meal_2">Essen 2</string>
|
<string name="today_date">Heute, %1$s</string>
|
||||||
<string name="no_meal_today">heute keine Essensausgabe</string>
|
<string name="tomorrow_date">Morgen, %1$s</string>
|
||||||
|
<string name="mensa_closed">keine Essensausgabe</string>
|
||||||
<string name="no_more_food">Diese Woche keine weitere Essensausgabe</string>
|
<string name="no_more_food">Diese Woche keine weitere Essensausgabe</string>
|
||||||
<string name="no_lesson_today">heute keine Vorlesung</string>
|
<string name="no_lesson_today">heute keine Vorlesung!</string>
|
||||||
<string name="error">Fehler</string>
|
<string name="error">Fehler</string>
|
||||||
<string name="no_tt_error">Stundenplan konnte nicht geladen werden!</string>
|
<string name="timetable_error">Stundenplan konnte nicht geladen werden!</string>
|
||||||
<string name="gen_tt_error">Allgemeiner Stundenplan Fehler!"</string>
|
|
||||||
<string name="info">Info</string>
|
<string name="info">Info</string>
|
||||||
<string name="user">Benutzer</string>
|
<string name="user">Benutzer</string>
|
||||||
<string name="course_desc">Tippen, um den Kurs zu ändern</string>
|
<string name="course_desc">Tippen, um den Kurs zu ändern</string>
|
||||||
<string name="primary_color">Primärfarbe</string>
|
<string name="primary_color">Hauptfarbe</string>
|
||||||
<string name="main_color_desc">Die Primärfarbe, standard ist Indigo</string>
|
<string name="primary_color_desc">Die Primärfarbe, Standard ist Schwarz.</string>
|
||||||
|
<string name="accent_color">Akzentfarbe</string>
|
||||||
|
<string name="accent_color_desc">Die Akzentfarbe, Standard ist indigo</string>
|
||||||
<string name="select">auswählen</string>
|
<string name="select">auswählen</string>
|
||||||
<string name="about">über</string>
|
<string name="about_dialog_heading">Über</string>
|
||||||
<string name="loading_timetable">lade Stundenplan …</string>
|
<string name="loading_timetable">lade Stundenplan …</string>
|
||||||
<string name="hello_blank_fragment">bald ™</string>
|
|
||||||
<string name="navigation_drawer_close">Navigationsleiste schließen</string>
|
<string name="navigation_drawer_close">Navigationsleiste schließen</string>
|
||||||
<string name="navigation_drawer_open">Navigationsleiste öffnen</string>
|
<string name="navigation_drawer_open">Navigationsleiste öffnen</string>
|
||||||
</resources>
|
<string name="show_buffet">Buffet immer anzeigen</string>
|
||||||
|
<string name="select_course">Wähle deinen Studiengang aus</string>
|
||||||
|
</resources>
|
||||||
|
@ -1,7 +1,29 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<color name="colorPrimary">@color/design_default_color_primary</color>
|
<color name="colorPrimary">#000000</color>
|
||||||
<color name="colorPrimaryDark">@color/design_default_color_primary_dark</color>
|
<color name="colorPrimaryDark">#000000</color>
|
||||||
<color name="colorAccent">#d81b60</color>
|
<color name="colorAccent">#3F51B5</color>
|
||||||
<color name="colorMensaDay">#ebe8e9</color>
|
<color name="ic_launcher_background">#FFFFFF</color>
|
||||||
|
|
||||||
|
<color name="themePrimary">#FFFFFF</color>
|
||||||
|
<color name="themeSecondary">#FFFFFF</color>
|
||||||
|
<color name="themeTertiary">#FAFAFA</color> <!-- TODO find a better color -->
|
||||||
|
|
||||||
|
<color name="textPrimary">#000000</color>
|
||||||
|
<color name="textSecondary">#818181</color>
|
||||||
|
|
||||||
|
<!--theme color section, not the working colors-->
|
||||||
|
<color name="textPrimaryDark">#FFFFFF</color>
|
||||||
|
<color name="textSecondaryDark">#E0E0E0</color>
|
||||||
|
<color name="textPrimaryLight">#000000</color>
|
||||||
|
<color name="textSecondaryLight">#818181</color>
|
||||||
|
|
||||||
|
<color name="themePrimaryDark">#000000</color>
|
||||||
|
<color name="themeSecondaryDark">#303030</color>
|
||||||
|
<color name="themeTertiaryDark">#424242</color>
|
||||||
|
|
||||||
|
<color name="themePrimaryLight">#FFFFFF</color>
|
||||||
|
<color name="themeSecondaryLight">#FFFFFF</color>
|
||||||
|
<color name="themeTertiaryLight">#424242</color> <!-- TODO find a better color -->
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -4,5 +4,4 @@
|
|||||||
<dimen name="activity_vertical_margin">16dp</dimen>
|
<dimen name="activity_vertical_margin">16dp</dimen>
|
||||||
<dimen name="nav_header_vertical_spacing">8dp</dimen>
|
<dimen name="nav_header_vertical_spacing">8dp</dimen>
|
||||||
<dimen name="nav_header_height">176dp</dimen>
|
<dimen name="nav_header_height">176dp</dimen>
|
||||||
<dimen name="fab_margin">16dp</dimen>
|
|
||||||
</resources>
|
</resources>
|
@ -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.2.1</string>
|
<string name="nav_header_title" translatable="false">Project Laogai</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>
|
||||||
|
|
||||||
@ -10,41 +10,46 @@
|
|||||||
<string name="mensa">Mensa</string>
|
<string name="mensa">Mensa</string>
|
||||||
<string name="timetable">Timetable</string>
|
<string name="timetable">Timetable</string>
|
||||||
<string name="moodle">Moodle</string>
|
<string name="moodle">Moodle</string>
|
||||||
<string name="e_mail">E-Mail</string>
|
|
||||||
<string name="settings">Settings</string>
|
<string name="settings">Settings</string>
|
||||||
|
|
||||||
<string name="meal_1">Meal 1</string>
|
<string name="meal">Meal</string>
|
||||||
<string name="meal_2">Meal 2</string>
|
<string name="today_date">Today, %1$s</string>
|
||||||
<string name="no_meal_today">Mensa closed today</string>
|
<string name="tomorrow_date">Tomorrow, %1$s</string>
|
||||||
|
<string name="mensa_closed">the Mensa is closed</string>
|
||||||
<string name="no_more_food">No more Food this week</string>
|
<string name="no_more_food">No more Food this week</string>
|
||||||
|
|
||||||
<string name="no_lesson_today">"no lecture today "</string>
|
<string name="no_lesson_today">"No lecture today!"</string>
|
||||||
<string name="error">Error</string>
|
<string name="error">Error</string>
|
||||||
<string name="no_tt_error">Could not load timetable!"</string>
|
<string name="timetable_error">Could not load timetable!"</string>
|
||||||
<string name="gen_tt_error">There was an error with the timetable!"</string>
|
|
||||||
|
|
||||||
<string name="sample_user" translatable="false">SampleUser@stud.hs-offenburg.de</string>
|
<string name="sample_user" translatable="false">SampleUser@stud.hs-offenburg.de</string>
|
||||||
<string name="sample_course" translatable="false">SampleCourse 3</string>
|
<string name="sample_course" translatable="false">SampleCourse 3</string>
|
||||||
<string name="sample_date" translatable="false">Montag, 30.02</string>
|
<string name="sample_date" translatable="false">Montag, 30.02</string>
|
||||||
<string name="a_lesson" translatable="false">a lesson\na teacher\na room</string>
|
|
||||||
<string name="a_time" translatable="false">0.00 – 23.59</string>
|
<string name="a_time" translatable="false">0.00 – 23.59</string>
|
||||||
|
|
||||||
<string name="info">Info</string>
|
<string name="info">Info</string>
|
||||||
<string name="user">User</string>
|
<string name="user">User</string>
|
||||||
<string name="course_desc">Tap to change course</string>
|
<string name="course_desc">Tap to change course</string>
|
||||||
|
<string name="select_course">Select your course</string>
|
||||||
<string name="primary_color">primary color</string>
|
<string name="primary_color">primary color</string>
|
||||||
<string name="main_color_desc">The primary color, default is indigo</string>
|
<string name="primary_color_desc">The primary color, default is black.</string>
|
||||||
|
<string name="accent_color">accent color</string>
|
||||||
|
<string name="accent_color_desc">The accent color, default is indigo.</string>
|
||||||
|
<string name="show_buffet">always show buffet</string>
|
||||||
<string name="select">select</string>
|
<string name="select">select</string>
|
||||||
<string name="version" translatable="false">version 0.2.1</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 conditions of GPL 3. For further information visit \ngit.mosad.xyz/Seil0/ProjectLaogai \n\n© 2018 seil0@mosad.xyz "</string>
|
<string name="about_version" translatable="false">version %1$s (%2$s)</string>
|
||||||
|
<string name="about_dialog_heading">About</string>
|
||||||
|
<string name="about_dialog_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-2019 seil0@mosad.xyz "</string>
|
||||||
<string name="loading_timetable">loading timetable …</string>
|
<string name="loading_timetable">loading timetable …</string>
|
||||||
|
|
||||||
|
|
||||||
<string name="hello_blank_fragment">soon ™</string>
|
|
||||||
<string name="string_new_line" translatable="false">%1$s\n</string>
|
|
||||||
|
|
||||||
<string name="save_key_course" translatable="false">org.mosad.seil0.projectlaogai.course</string>
|
<string name="save_key_course" translatable="false">org.mosad.seil0.projectlaogai.course</string>
|
||||||
<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_colorAccent" translatable="false">org.mosad.seil0.projectlaogai.colorAccent</string>
|
||||||
|
<string name="save_key_showBuffet" translatable="false">org.mosad.seil0.projectlaogai.showBuffet</string>
|
||||||
|
<string name="save_key_coursesCacheTime" translatable="false">org.mosad.seil0.projectlaogai.coursesCacheTime</string>
|
||||||
|
<string name="save_key_mensaCacheTime" translatable="false">org.mosad.seil0.projectlaogai.mensaCacheTime</string>
|
||||||
|
<string name="save_key_timetableCacheTime" translatable="false">org.mosad.seil0.projectlaogai.timetableCacheTime</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<full-backup-content>
|
<full-backup-content>
|
||||||
<!-- Exclude specific shared preferences that contain GCM registration Id -->
|
<exclude domain="file" path="mensa.json"/>
|
||||||
|
<exclude domain="file" path="courses.json"/>
|
||||||
</full-backup-content>
|
</full-backup-content>
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.3.0'
|
ext.kotlin_version = '1.3.31'
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.2.1'
|
classpath 'com.android.tools.build:gradle:3.4.0'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
@ -19,7 +19,6 @@ allprojects {
|
|||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
maven { url "https://dl.bintray.com/drummer-aidan/maven/" }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
7
fastlane/metadata/android/de/full_description.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
ProjectLaogai ist eine App um den Stundenplan und das Mensa-Essen der Hochschule Offenburg anzuzeigen.
|
||||||
|
|
||||||
|
Features:
|
||||||
|
* schaue was es diese und nächste WOche in der Mensa zu Essen gibt
|
||||||
|
* schaue dir deinen Stundenplan an
|
||||||
|
* öffne moodle direkt in der App
|
||||||
|
* viele lustige Bugs
|
1
fastlane/metadata/android/de/short_description.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
eine App für die Hochschule Offenburg
|
7
fastlane/metadata/android/en-US/full_description.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
ProjectLaogai is an app to access the timetable and the mensa menu of Hochschule Offenburg.
|
||||||
|
|
||||||
|
Features:
|
||||||
|
* check out the mensa menu of this and next week
|
||||||
|
* access your timetable
|
||||||
|
* open moodle
|
||||||
|
* probably some funny bugs
|
After Width: | Height: | Size: 155 KiB |
After Width: | Height: | Size: 155 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 124 KiB |
After Width: | Height: | Size: 148 KiB |
1
fastlane/metadata/android/en-US/short_description.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
an app for the Hochschule Offenburg
|
1
fastlane/metadata/android/en-US/title.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
ProjectLaogai
|
3
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,5 +1,6 @@
|
|||||||
|
#Thu Apr 25 17:58:09 WEST 2019
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
|
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
|
||||||
|