move course selection to a own class
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
closes #48
This commit is contained in:
parent
c509381ec4
commit
6388dfe54a
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue