complete & move AddLessonDialog to separate class
This commit is contained in:
parent
34a68ff75d
commit
bea1b47396
|
@ -47,7 +47,7 @@ android {
|
|||
dependencies {
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.6'
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.7'
|
||||
implementation 'androidx.core:core:1.3.0'
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
|
|
|
@ -152,13 +152,11 @@ class TCoRAPIController {
|
|||
/**
|
||||
* TODO
|
||||
*/
|
||||
fun getLessonSubjectList(courseName: String, week: Int): Deferred<Array<String>> {
|
||||
fun getLessonSubjectListAsync(courseName: String, week: Int): Deferred<ArrayList<String>> {
|
||||
val url = URL("$tcorBaseURL/lessonSubjectList?courseName=$courseName&week=$week")
|
||||
|
||||
return GlobalScope.async {
|
||||
println(courseName)
|
||||
println(url.readText())
|
||||
Gson().fromJson(url.readText(), Array<String>::class.java)
|
||||
Gson().fromJson(url.readText(), ArrayList<String>()::class.java)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,36 +22,24 @@
|
|||
|
||||
package org.mosad.seil0.projectlaogai.fragments
|
||||
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.AdapterView
|
||||
import android.widget.AdapterView.OnItemSelectedListener
|
||||
import android.widget.ArrayAdapter
|
||||
import android.widget.ScrollView
|
||||
import android.widget.Spinner
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.bottomsheets.BottomSheet
|
||||
import com.afollestad.materialdialogs.bottomsheets.setPeekHeight
|
||||
import com.afollestad.materialdialogs.customview.customView
|
||||
import com.afollestad.materialdialogs.customview.getCustomView
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
import kotlinx.android.synthetic.main.fragment_timetable.*
|
||||
import kotlinx.coroutines.*
|
||||
import org.mosad.seil0.projectlaogai.R
|
||||
import org.mosad.seil0.projectlaogai.controller.CacheController
|
||||
import org.mosad.seil0.projectlaogai.controller.CacheController.Companion.coursesList
|
||||
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.controller.TCoRAPIController.Companion.getLessonSubjectList
|
||||
import org.mosad.seil0.projectlaogai.hsoparser.Course
|
||||
import org.mosad.seil0.projectlaogai.hsoparser.NotRetardedCalendar
|
||||
import org.mosad.seil0.projectlaogai.uicomponents.AddLessonDialog
|
||||
import org.mosad.seil0.projectlaogai.uicomponents.DayCardView
|
||||
import java.util.stream.Collectors
|
||||
|
||||
/**
|
||||
* The timetable controller class
|
||||
|
@ -94,7 +82,8 @@ class TimeTableFragment : Fragment() {
|
|||
}
|
||||
|
||||
faBtnAddLesson.setOnClickListener {
|
||||
initAddLessonDialog().show()
|
||||
//initAddLessonDialog().show()
|
||||
AddLessonDialog(context!!).initAddLessonDialog().show()
|
||||
}
|
||||
|
||||
// hide the btnCardValue if the user is scrolling down
|
||||
|
@ -169,68 +158,4 @@ class TimeTableFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO move to separate class
|
||||
private fun initAddLessonDialog(): MaterialDialog {
|
||||
val dialog = MaterialDialog(context!!, BottomSheet())
|
||||
.title(R.string.add_lesson)
|
||||
.message(R.string.add_lesson_desc)
|
||||
.customView(R.layout.dialog_add_lesson)
|
||||
.setPeekHeight(900)
|
||||
.positiveButton(R.string.add) {
|
||||
println("add course")
|
||||
}
|
||||
.negativeButton(R.string.cancel) { }
|
||||
|
||||
val spinnerCourses: Spinner = dialog.getCustomView().findViewById(R.id.spinner_Courses)
|
||||
val spinnerLessons: Spinner = dialog.getCustomView().findViewById(R.id.spinner_Lessons)
|
||||
|
||||
|
||||
val field1List: List<String>
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
field1List = coursesList.stream().map(Course::courseName).collect(Collectors.toList())
|
||||
} else {
|
||||
field1List = ArrayList()
|
||||
coursesList.forEach { course ->
|
||||
field1List.add(course.courseName)
|
||||
}
|
||||
}
|
||||
|
||||
ArrayAdapter(
|
||||
context!!,
|
||||
android.R.layout.simple_spinner_item,
|
||||
field1List
|
||||
).also { adapter ->
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||
spinnerCourses.adapter = adapter
|
||||
}
|
||||
|
||||
// FIXME onItemSelectedListener is called on dialog.show
|
||||
spinnerCourses.onItemSelectedListener = object : OnItemSelectedListener {
|
||||
override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) {
|
||||
println("onItemSelected: ${parent.getItemAtPosition(pos)}")
|
||||
|
||||
// TODO get Lessons
|
||||
val lessonSubjects = getLessonSubjectList(parent.getItemAtPosition(pos).toString(), 0)
|
||||
println(lessonSubjects)
|
||||
}
|
||||
|
||||
override fun onNothingSelected(parent: AdapterView<*>) {
|
||||
// Another interface callback
|
||||
}
|
||||
}
|
||||
|
||||
spinnerLessons.onItemSelectedListener = object : OnItemSelectedListener {
|
||||
override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) {
|
||||
println(parent.getItemAtPosition(pos))
|
||||
}
|
||||
|
||||
override fun onNothingSelected(parent: AdapterView<*>) {
|
||||
// Another interface callback
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return dialog
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
/**
|
||||
* ProjectLaogai
|
||||
*
|
||||
* Copyright 2019-2020 <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.os.Build
|
||||
import android.view.View
|
||||
import android.widget.AdapterView
|
||||
import android.widget.ArrayAdapter
|
||||
import android.widget.Spinner
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.bottomsheets.BottomSheet
|
||||
import com.afollestad.materialdialogs.bottomsheets.setPeekHeight
|
||||
import com.afollestad.materialdialogs.customview.customView
|
||||
import com.afollestad.materialdialogs.customview.getCustomView
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.mosad.seil0.projectlaogai.R
|
||||
import org.mosad.seil0.projectlaogai.controller.CacheController
|
||||
import org.mosad.seil0.projectlaogai.controller.TCoRAPIController
|
||||
import org.mosad.seil0.projectlaogai.hsoparser.Course
|
||||
import java.util.stream.Collectors
|
||||
|
||||
/**
|
||||
* This class can create a new AddLessonDialog.
|
||||
*/
|
||||
class AddLessonDialog(_context: Context) {
|
||||
private val context = _context
|
||||
|
||||
private lateinit var spinnerCourses: Spinner
|
||||
private lateinit var spinnerLessons: Spinner
|
||||
|
||||
private val lessonSubjectsList = ArrayList<String>()
|
||||
private val courseNamesList = getCourseNames()
|
||||
|
||||
var selectedCourse = ""
|
||||
|
||||
/**
|
||||
* create a new AddLessonDialog (BottomSheet)
|
||||
*/
|
||||
fun initAddLessonDialog(): MaterialDialog {
|
||||
val dialog = MaterialDialog(context, BottomSheet())
|
||||
.title(R.string.add_lesson)
|
||||
.message(R.string.add_lesson_desc)
|
||||
.customView(R.layout.dialog_add_lesson)
|
||||
.setPeekHeight(900)
|
||||
.positiveButton(R.string.add) {
|
||||
println("add course \"$selectedCourse\"")
|
||||
// TODO call add function
|
||||
}
|
||||
.negativeButton(R.string.cancel) { }
|
||||
|
||||
// initialize the spinners
|
||||
spinnerCourses = dialog.getCustomView().findViewById(R.id.spinner_Courses)
|
||||
spinnerLessons = dialog.getCustomView().findViewById(R.id.spinner_Lessons)
|
||||
|
||||
setArrayAdapter(spinnerCourses, courseNamesList)
|
||||
val lessonsAdapter = setArrayAdapter(spinnerLessons, lessonSubjectsList)
|
||||
|
||||
spinnerCourses.setSelection(0,false) // don't call onItemSelected() on spinnerCourses.onItemSelectedListener
|
||||
spinnerCourses.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
||||
override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) {
|
||||
|
||||
val lessonSubjects = runBlocking {
|
||||
TCoRAPIController.getLessonSubjectListAsync(parent.getItemAtPosition(pos).toString(), 0).await()
|
||||
}
|
||||
|
||||
lessonsAdapter.clear()
|
||||
lessonsAdapter.addAll(lessonSubjects)
|
||||
lessonsAdapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onNothingSelected(parent: AdapterView<*>) {
|
||||
// Another interface callback
|
||||
}
|
||||
}
|
||||
|
||||
spinnerLessons.setSelection(0,false) // don't call onItemSelected() on spinnerCourses.onItemSelectedListener
|
||||
spinnerLessons.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
||||
override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) {
|
||||
selectedCourse = parent.getItemAtPosition(pos).toString()
|
||||
}
|
||||
|
||||
override fun onNothingSelected(parent: AdapterView<*>) {
|
||||
// Another interface callback
|
||||
}
|
||||
}
|
||||
|
||||
return dialog
|
||||
}
|
||||
|
||||
/**
|
||||
* set a new ArrayAdapter for a spinner with a list
|
||||
* @param spinner the spinner you wish to set the adapter for
|
||||
* @param list the list to set the adapter to
|
||||
*/
|
||||
private fun setArrayAdapter(spinner: Spinner, list: List<String>): ArrayAdapter<String> {
|
||||
return ArrayAdapter(context, android.R.layout.simple_spinner_item, list)
|
||||
.also { adapter ->
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||
spinner.adapter = adapter
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get all course names from coursesList
|
||||
* @return a list, containing all course names
|
||||
*/
|
||||
private fun getCourseNames(): List<String> {
|
||||
val coursesNameList: List<String>
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
coursesNameList = CacheController.coursesList.stream().map(Course::courseName).collect(
|
||||
Collectors.toList())
|
||||
} else {
|
||||
coursesNameList = ArrayList()
|
||||
CacheController.coursesList.forEach { course ->
|
||||
coursesNameList.add(course.courseName)
|
||||
}
|
||||
}
|
||||
|
||||
return coursesNameList
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue