From 6388dfe54a09f602d19cccbaeb8983cfbd52fb67 Mon Sep 17 00:00:00 2001 From: Jannik Seiler Date: Tue, 8 Sep 2020 18:33:00 +0200 Subject: [PATCH] move course selection to a own class closes #48 --- .../seil0/projectlaogai/OnboardingActivity.kt | 31 +++++++-- .../fragments/SettingsFragment.kt | 64 +++++++------------ .../uicomponents/dialogs/AddSubjectDialog.kt | 5 ++ .../dialogs/CourseSelectionDialog.kt | 47 ++++++++++++++ .../uicomponents/dialogs/LoadingDialog.kt | 30 +++++++++ .../uicomponents/dialogs/LoginDialog.kt | 11 +++- 6 files changed, 143 insertions(+), 45 deletions(-) create mode 100644 app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/CourseSelectionDialog.kt create mode 100644 app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/LoadingDialog.kt diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/OnboardingActivity.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/OnboardingActivity.kt index 24d0466..1fe6749 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/OnboardingActivity.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/OnboardingActivity.kt @@ -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 } diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/SettingsFragment.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/SettingsFragment.kt index d646317..124f400 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/SettingsFragment.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/SettingsFragment.kt @@ -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() - 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() - } - } - - } - } - } diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/AddSubjectDialog.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/AddSubjectDialog.kt index 3a09551..6578cac 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/AddSubjectDialog.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/AddSubjectDialog.kt @@ -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) diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/CourseSelectionDialog.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/CourseSelectionDialog.kt new file mode 100644 index 0000000..ec10332 --- /dev/null +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/CourseSelectionDialog.kt @@ -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 = 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() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/LoadingDialog.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/LoadingDialog.kt new file mode 100644 index 0000000..88f833f --- /dev/null +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/LoadingDialog.kt @@ -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() + } +} \ No newline at end of file diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/LoginDialog.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/LoginDialog.kt index ee18b0b..a6c7bea 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/LoginDialog.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/dialogs/LoginDialog.kt @@ -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() } } \ No newline at end of file