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.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.text.HtmlCompat
|
import androidx.core.text.HtmlCompat
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager.widget.ViewPager
|
||||||
import com.afollestad.materialdialogs.callbacks.onDismiss
|
|
||||||
import kotlinx.android.synthetic.main.activity_onboarding.*
|
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.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.onboarding.ViewPagerAdapter
|
||||||
|
import org.mosad.seil0.projectlaogai.uicomponents.dialogs.CourseSelectionDialog
|
||||||
|
import org.mosad.seil0.projectlaogai.uicomponents.dialogs.LoadingDialog
|
||||||
|
|
||||||
class OnboardingActivity : AppCompatActivity() {
|
class OnboardingActivity : AppCompatActivity() {
|
||||||
|
|
||||||
|
@ -81,8 +84,28 @@ class OnboardingActivity : AppCompatActivity() {
|
||||||
launchHomeScreen()
|
launchHomeScreen()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun btnSelectCourseClick(@Suppress("UNUSED_PARAMETER")v: View) {
|
fun btnSelectCourseClick(v: View) {
|
||||||
SettingsFragment().selectCourse(this).show {
|
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 {
|
onDismiss {
|
||||||
btnNextClick(v) // show the next fragment
|
btnNextClick(v) // show the next fragment
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
|
|
||||||
package org.mosad.seil0.projectlaogai.fragments
|
package org.mosad.seil0.projectlaogai.fragments
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.TypedValue
|
import android.util.TypedValue
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -34,10 +33,7 @@ import com.afollestad.aesthetic.Aesthetic
|
||||||
import com.afollestad.materialdialogs.MaterialDialog
|
import com.afollestad.materialdialogs.MaterialDialog
|
||||||
import com.afollestad.materialdialogs.WhichButton
|
import com.afollestad.materialdialogs.WhichButton
|
||||||
import com.afollestad.materialdialogs.actions.getActionButton
|
import com.afollestad.materialdialogs.actions.getActionButton
|
||||||
import com.afollestad.materialdialogs.callbacks.onDismiss
|
|
||||||
import com.afollestad.materialdialogs.color.colorChooser
|
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.listItemsMultiChoice
|
||||||
import com.afollestad.materialdialogs.list.listItemsSingleChoice
|
import com.afollestad.materialdialogs.list.listItemsSingleChoice
|
||||||
import de.psdev.licensesdialog.LicensesDialog
|
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.GradesController
|
||||||
import org.mosad.seil0.projectlaogai.controller.cache.CacheController
|
import org.mosad.seil0.projectlaogai.controller.cache.CacheController
|
||||||
import org.mosad.seil0.projectlaogai.controller.cache.CacheController.Companion.coursesList
|
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.cache.TimetableController
|
||||||
import org.mosad.seil0.projectlaogai.controller.preferences.EncryptedPreferences
|
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.uicomponents.dialogs.LoginDialog
|
||||||
import org.mosad.seil0.projectlaogai.util.DataTypes
|
import org.mosad.seil0.projectlaogai.util.DataTypes
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
@ -135,7 +133,27 @@ class SettingsFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
linLayout_Course.setOnClickListener {
|
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 {
|
onDismiss {
|
||||||
txtViewCourse.text = Preferences.course.courseName // update txtView after the dialog is dismissed
|
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()
|
this.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
fun dismiss() {
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
|
|
||||||
private fun initSpinners() {
|
private fun initSpinners() {
|
||||||
setArrayAdapter(spinnerCourses, courseNamesList)
|
setArrayAdapter(spinnerCourses, courseNamesList)
|
||||||
val lessonsAdapter = setArrayAdapter(spinnerSubjects, subjectsList)
|
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 {
|
fun show(func: LoginDialog.() -> Unit): LoginDialog = apply {
|
||||||
func()
|
func()
|
||||||
|
|
||||||
editTextEmail.setText(email)
|
editTextEmail.setText(email)
|
||||||
editTextPassword.setText(password)
|
editTextPassword.setText(password)
|
||||||
|
|
||||||
dialog.show()
|
show()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
fun dismiss() {
|
||||||
|
dialog.dismiss()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue