move course selection to a own class
continuous-integration/drone/push Build is passing Details

closes #48
This commit is contained in:
Jannik 2020-09-08 18:33:00 +02:00
parent c509381ec4
commit 6388dfe54a
Signed by: Seil0
GPG Key ID: E8459F3723C52C24
6 changed files with 143 additions and 45 deletions

View File

@ -32,11 +32,14 @@ import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.text.HtmlCompat
import androidx.viewpager.widget.ViewPager
import com.afollestad.materialdialogs.callbacks.onDismiss
import kotlinx.android.synthetic.main.activity_onboarding.*
import kotlinx.coroutines.*
import org.mosad.seil0.projectlaogai.controller.cache.CacheController
import org.mosad.seil0.projectlaogai.controller.preferences.EncryptedPreferences
import org.mosad.seil0.projectlaogai.fragments.SettingsFragment
import org.mosad.seil0.projectlaogai.controller.preferences.Preferences
import org.mosad.seil0.projectlaogai.onboarding.ViewPagerAdapter
import org.mosad.seil0.projectlaogai.uicomponents.dialogs.CourseSelectionDialog
import org.mosad.seil0.projectlaogai.uicomponents.dialogs.LoadingDialog
class OnboardingActivity : AppCompatActivity() {
@ -81,8 +84,28 @@ class OnboardingActivity : AppCompatActivity() {
launchHomeScreen()
}
fun btnSelectCourseClick(@Suppress("UNUSED_PARAMETER")v: View) {
SettingsFragment().selectCourse(this).show {
fun btnSelectCourseClick(v: View) {
CourseSelectionDialog(this).show {
list = CacheController.coursesList.map { it.courseName }
listItems {
val loadingDialog = LoadingDialog(context)
loadingDialog.show()
GlobalScope.launch(Dispatchers.Default) {
Preferences.saveCourse(context, CacheController.coursesList[selectedIndex]) // save the course
// update current & next weeks timetable
val threads = listOf(
CacheController.updateTimetable(Preferences.course.courseName, 0, context),
CacheController.updateTimetable(Preferences.course.courseName, 1, context)
)
threads.joinAll() // blocking since we want the new data
withContext(Dispatchers.Main) {
loadingDialog.dismiss()
}
}
}
onDismiss {
btnNextClick(v) // show the next fragment
}

View File

@ -22,7 +22,6 @@
package org.mosad.seil0.projectlaogai.fragments
import android.content.Context
import android.os.Bundle
import android.util.TypedValue
import android.view.LayoutInflater
@ -34,10 +33,7 @@ import com.afollestad.aesthetic.Aesthetic
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.WhichButton
import com.afollestad.materialdialogs.actions.getActionButton
import com.afollestad.materialdialogs.callbacks.onDismiss
import com.afollestad.materialdialogs.color.colorChooser
import com.afollestad.materialdialogs.customview.customView
import com.afollestad.materialdialogs.list.listItems
import com.afollestad.materialdialogs.list.listItemsMultiChoice
import com.afollestad.materialdialogs.list.listItemsSingleChoice
import de.psdev.licensesdialog.LicensesDialog
@ -48,9 +44,11 @@ import org.mosad.seil0.projectlaogai.R
import org.mosad.seil0.projectlaogai.controller.GradesController
import org.mosad.seil0.projectlaogai.controller.cache.CacheController
import org.mosad.seil0.projectlaogai.controller.cache.CacheController.Companion.coursesList
import org.mosad.seil0.projectlaogai.controller.preferences.Preferences
import org.mosad.seil0.projectlaogai.controller.cache.TimetableController
import org.mosad.seil0.projectlaogai.controller.preferences.EncryptedPreferences
import org.mosad.seil0.projectlaogai.controller.preferences.Preferences
import org.mosad.seil0.projectlaogai.uicomponents.dialogs.CourseSelectionDialog
import org.mosad.seil0.projectlaogai.uicomponents.dialogs.LoadingDialog
import org.mosad.seil0.projectlaogai.uicomponents.dialogs.LoginDialog
import org.mosad.seil0.projectlaogai.util.DataTypes
import java.util.*
@ -135,7 +133,27 @@ class SettingsFragment : Fragment() {
}
linLayout_Course.setOnClickListener {
selectCourse(context!!).show {
CourseSelectionDialog(context!!).show {
list = coursesList.map { it.courseName }
listItems {
val loadingDialog = LoadingDialog(context)
loadingDialog.show()
GlobalScope.launch(Dispatchers.Default) {
Preferences.saveCourse(context, coursesList[selectedIndex]) // save the course
// update current & next weeks timetable
val threads = listOf(
CacheController.updateTimetable(Preferences.course.courseName, 0, context),
CacheController.updateTimetable(Preferences.course.courseName, 1, context)
)
threads.joinAll() // blocking since we want the new data
withContext(Dispatchers.Main) {
loadingDialog.dismiss()
}
}
}
onDismiss {
txtViewCourse.text = Preferences.course.courseName // update txtView after the dialog is dismissed
}
@ -300,38 +318,4 @@ class SettingsFragment : Fragment() {
}
fun selectCourse(context: Context) : MaterialDialog {
val courseNameList = ArrayList<String>()
coursesList.forEach { (_, courseName) ->
courseNameList.add(courseName)
}
// return a new course selection dialog
return MaterialDialog(context)
.title(R.string.select_course)
.listItems(items = courseNameList) { _, index, _ ->
val loadingDialog = MaterialDialog(context).cancelable(false)
.cancelOnTouchOutside(false)
.customView(R.layout.dialog_loading)
loadingDialog.show()
GlobalScope.launch(Dispatchers.Default) {
Preferences.saveCourse(context, coursesList[index]) // save the course
// update current & next weeks timetable
val threads = listOf(
CacheController.updateTimetable(Preferences.course.courseName, 0, context),
CacheController.updateTimetable(Preferences.course.courseName, 1, context)
)
threads.joinAll() // blocking since we want the new data
withContext(Dispatchers.Main) {
loadingDialog.dismiss()
}
}
}
}
}

View File

@ -92,6 +92,11 @@ class AddSubjectDialog(val context: Context) {
this.show()
}
@Suppress("unused")
fun dismiss() {
dialog.dismiss()
}
private fun initSpinners() {
setArrayAdapter(spinnerCourses, courseNamesList)
val lessonsAdapter = setArrayAdapter(spinnerSubjects, subjectsList)

View File

@ -0,0 +1,47 @@
package org.mosad.seil0.projectlaogai.uicomponents.dialogs
import android.content.Context
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.callbacks.onDismiss
import com.afollestad.materialdialogs.list.listItems
import org.mosad.seil0.projectlaogai.R
class CourseSelectionDialog(val context: Context) {
private val dialog = MaterialDialog(context)
var list: List<String> = listOf()
var selectedIndex = 0
init {
dialog.title(R.string.select_course)
}
fun show() {
dialog.show()
}
fun show(func: CourseSelectionDialog.() -> Unit): CourseSelectionDialog = apply {
func()
this.show()
}
@Suppress("unused")
fun dismiss() {
dialog.dismiss()
}
fun onDismiss(func: CourseSelectionDialog.() -> Unit): CourseSelectionDialog = apply {
dialog.onDismiss {
func()
}
}
fun listItems(func: CourseSelectionDialog.() -> Unit): CourseSelectionDialog = apply {
dialog.listItems(items = list) { dialog, index, text ->
selectedIndex = index
func()
}
}
}

View File

@ -0,0 +1,30 @@
package org.mosad.seil0.projectlaogai.uicomponents.dialogs
import android.content.Context
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
import org.mosad.seil0.projectlaogai.R
class LoadingDialog(val context: Context) {
private val dialog = MaterialDialog(context)
init {
dialog.cancelable(false)
.cancelOnTouchOutside(false)
.customView(R.layout.dialog_loading)
}
fun show() {
dialog.show()
}
fun show(func: LoadingDialog.() -> Unit): LoadingDialog = apply {
func()
this.show()
}
fun dismiss() {
dialog.dismiss()
}
}

View File

@ -75,13 +75,22 @@ class LoginDialog(val context: Context) {
}
}
fun show() {
dialog.show()
}
fun show(func: LoginDialog.() -> Unit): LoginDialog = apply {
func()
editTextEmail.setText(email)
editTextPassword.setText(password)
dialog.show()
show()
}
@Suppress("unused")
fun dismiss() {
dialog.dismiss()
}
}