anko code removed, coroutines are now used for asynchronous functions
* constraintlayout 2.0.0-beta3 -> 2.0.0-beta4 * material-components-android 1.0.0 -> 1.1.0 * this is the first release candidate for version 0.5.1
This commit is contained in:
		| @ -52,7 +52,6 @@ import kotlin.system.measureTimeMillis | ||||
|  | ||||
| /** | ||||
|  * TODO save the current fragment to show it when the app is restarted | ||||
|  * TODO since anko is dead, we should use coroutines | ||||
|  */ | ||||
| class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { | ||||
|  | ||||
|  | ||||
| @ -27,6 +27,10 @@ import com.google.gson.Gson | ||||
| import com.google.gson.GsonBuilder | ||||
| import com.google.gson.JsonParser | ||||
| import com.google.gson.reflect.TypeToken | ||||
| import kotlinx.coroutines.Dispatchers | ||||
| import kotlinx.coroutines.GlobalScope | ||||
| import kotlinx.coroutines.joinAll | ||||
| import kotlinx.coroutines.launch | ||||
| import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cCourse | ||||
| import org.mosad.seil0.projectlaogai.hsoparser.Course | ||||
| import org.mosad.seil0.projectlaogai.hsoparser.MensaMenu | ||||
| @ -53,7 +57,7 @@ class CacheController(cont: Context) { | ||||
|         // if a) it's monday and the last cache update was on sunday or b) the cache is older than 24hr, update blocking | ||||
|         if ((currentDay == Calendar.MONDAY && cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) || (currentTime - mensaMenu.meta.updateTime) > 86400) { | ||||
|             println("update mensa blocking") | ||||
|             TCoRAPIController.getMensa(context).get() | ||||
|             GlobalScope.launch(Dispatchers.Default) { TCoRAPIController.getMensa(context).join() } | ||||
|         } | ||||
|  | ||||
|         // check if we need to update the timetables before displaying them | ||||
| @ -61,23 +65,29 @@ class CacheController(cont: Context) { | ||||
|         cal.time = Date(timetables[0].meta.updateTime * 1000) | ||||
|  | ||||
|         // if a) it`s monday and the last cache update was not on a sunday or b) the cache is older than 24hr, update blocking | ||||
|         if((currentDay == Calendar.MONDAY && cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) || (currentTime - timetables[0].meta.updateTime) > 86400) { | ||||
|         if ((currentDay == Calendar.MONDAY && cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) || (currentTime - timetables[0].meta.updateTime) > 86400) { | ||||
|             println("updating timetable after sunday!") | ||||
|             val jobA = TCoRAPIController.getTimetable(cCourse.courseName, 0, context) | ||||
|             val jobB = TCoRAPIController.getTimetable(cCourse.courseName, 1, context) | ||||
|  | ||||
|             jobA.get() | ||||
|             jobB.get() | ||||
|             GlobalScope.launch(Dispatchers.Default) { | ||||
|                 val threads = listOf( | ||||
|                     TCoRAPIController.getTimetable(cCourse.courseName, 0, context), | ||||
|                     TCoRAPIController.getTimetable(cCourse.courseName, 1, context) | ||||
|                 ) | ||||
|                 threads.joinAll() | ||||
|             } | ||||
|  | ||||
|             TCoRAPIController.getTimetable(cCourse.courseName, 0, context) | ||||
|             TCoRAPIController.getTimetable(cCourse.courseName, 1, context) | ||||
|         } | ||||
|  | ||||
|         // check if an update is necessary, not blocking | ||||
|         if(currentTime - PreferencesController.coursesCacheTime > 86400) | ||||
|         if (currentTime - PreferencesController.coursesCacheTime > 86400) | ||||
|             TCoRAPIController.getCoursesList(context) | ||||
|  | ||||
|         if(currentTime - PreferencesController.mensaCacheTime > 10800) | ||||
|         if (currentTime - PreferencesController.mensaCacheTime > 10800) | ||||
|             TCoRAPIController.getMensa(context) | ||||
|  | ||||
|         if(currentTime - PreferencesController.timetableCacheTime > 10800) { | ||||
|         if (currentTime - PreferencesController.timetableCacheTime > 10800) { | ||||
|             TCoRAPIController.getTimetable(cCourse.courseName, 0, context) | ||||
|             TCoRAPIController.getTimetable(cCourse.courseName, 1, context) | ||||
|         } | ||||
| @ -99,13 +109,16 @@ class CacheController(cont: Context) { | ||||
|  | ||||
|             // make sure the file exists | ||||
|             if (!file.exists()) | ||||
|                 TCoRAPIController.getCoursesList(context).get() | ||||
|                 GlobalScope.launch(Dispatchers.Default) { TCoRAPIController.getCoursesList(context).join() } | ||||
|  | ||||
|             val fileReader = FileReader(file) | ||||
|             val bufferedReader = BufferedReader(fileReader) | ||||
|             val coursesObject = JsonParser.parseString(bufferedReader.readLine()).asJsonObject | ||||
|  | ||||
|             coursesList = Gson().fromJson(coursesObject.getAsJsonArray("courses"), object : TypeToken<List<Course>>() {}.type) | ||||
|             coursesList = Gson().fromJson( | ||||
|                 coursesObject.getAsJsonArray("courses"), | ||||
|                 object : TypeToken<List<Course>>() {}.type | ||||
|             ) | ||||
|         } | ||||
|  | ||||
|         /** | ||||
| @ -116,9 +129,8 @@ class CacheController(cont: Context) { | ||||
|             val file = File(context.filesDir, "mensa.json") | ||||
|  | ||||
|             // make sure the file exists | ||||
|             if (!file.exists()) { | ||||
|                 TCoRAPIController.getMensa(context).get() | ||||
|             } | ||||
|             if (!file.exists()) | ||||
|                 GlobalScope.launch(Dispatchers.Default) { TCoRAPIController.getMensa(context).join() } | ||||
|  | ||||
|             val fileReader = FileReader(file) | ||||
|             val bufferedReader = BufferedReader(fileReader) | ||||
| @ -136,8 +148,11 @@ class CacheController(cont: Context) { | ||||
|             val file = File(context.filesDir, "timetable-$courseName-$week.json") | ||||
|  | ||||
|             // make sure the file exists | ||||
|             if (!file.exists()) | ||||
|                 TCoRAPIController.getTimetable(courseName, week, context).get() | ||||
|             if (!file.exists()) { | ||||
|                 GlobalScope.launch(Dispatchers.Default) { | ||||
|                     TCoRAPIController.getTimetable(courseName, week, context).join() | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             val fileReader = FileReader(file) | ||||
|             val bufferedReader = BufferedReader(fileReader) | ||||
|  | ||||
| @ -24,7 +24,7 @@ package org.mosad.seil0.projectlaogai.controller | ||||
|  | ||||
| import android.content.Context | ||||
| import android.util.Log | ||||
| import org.jetbrains.anko.doAsync | ||||
| import kotlinx.coroutines.* | ||||
| import org.json.JSONObject | ||||
| import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.coursesCacheTime | ||||
| import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.mensaCacheTime | ||||
| @ -44,7 +44,7 @@ class TCoRAPIController { | ||||
|         /** | ||||
|          * get the json object from tcor api and write it as file (cache) | ||||
|          */ | ||||
|         fun getCoursesList(context: Context) = doAsync { | ||||
|         fun getCoursesList(context: Context) = GlobalScope.launch { | ||||
|             try { | ||||
|                 val url = URL("$tcorBaseURL/courseList") | ||||
|                 val file = File(context.filesDir, "courses.json") | ||||
| @ -53,9 +53,11 @@ class TCoRAPIController { | ||||
|                 val coursesObject = JSONObject(url.readText()) //JSONObject(inReader.readLine()) | ||||
|  | ||||
|                 // write the json object to a file | ||||
|                 val writer = BufferedWriter(FileWriter(file)) | ||||
|                 writer.write(coursesObject.toString()) | ||||
|                 writer.close() | ||||
|                 withContext(Dispatchers.IO) { | ||||
|                     val writer = BufferedWriter(FileWriter(file)) | ||||
|                     writer.write(coursesObject.toString()) | ||||
|                     writer.close() | ||||
|                 } | ||||
|  | ||||
|                 // update cache time | ||||
|                 coursesCacheTime = System.currentTimeMillis() / 1000 | ||||
| @ -69,7 +71,7 @@ class TCoRAPIController { | ||||
|         /** | ||||
|          * get the json object from tcor api and write it as file (cache) | ||||
|          */ | ||||
|         fun getMensa(context: Context) = doAsync { | ||||
|         fun getMensa(context: Context) = GlobalScope.launch { | ||||
|             try { | ||||
|                 val url = URL("$tcorBaseURL/mensamenu") | ||||
|                 val file = File(context.filesDir, "mensa.json") | ||||
| @ -78,9 +80,11 @@ class TCoRAPIController { | ||||
|                 val mensaObject = JSONObject(url.readText()) //JSONObject(inReader.readLine()) | ||||
|  | ||||
|                 // write the json object to a file | ||||
|                 val writer = BufferedWriter(FileWriter(file)) | ||||
|                 writer.write(mensaObject.toString()) | ||||
|                 writer.close() | ||||
|                 withContext(Dispatchers.IO) { | ||||
|                     val writer = BufferedWriter(FileWriter(file)) | ||||
|                     writer.write(mensaObject.toString()) | ||||
|                     writer.close() | ||||
|                 } | ||||
|  | ||||
|                 // update cache time | ||||
|                 mensaCacheTime = System.currentTimeMillis() / 1000 | ||||
| @ -94,18 +98,20 @@ class TCoRAPIController { | ||||
|         /** | ||||
|          * get the json object from tcor api and write it as file (cache) | ||||
|          */ | ||||
|         fun getTimetable(courseName: String, week: Int, context: Context) = doAsync { | ||||
|         fun getTimetable(courseName: String, week: Int, context: Context) = GlobalScope.launch { | ||||
|             try { | ||||
|                 val url = URL("$tcorBaseURL/timetable?courseName=$courseName&week=$week") | ||||
|                 val file = File(context.filesDir, "timetable-$courseName-$week.json") | ||||
|  | ||||
|                 // read data from the API | ||||
|                 val mensaObject = JSONObject(url.readText()) //JSONObject(inReader.readLine()) | ||||
|                 val timetableObject = JSONObject(url.readText()) //JSONObject(inReader.readLine()) | ||||
|  | ||||
|                 // write the json object to a file | ||||
|                 val writer = BufferedWriter(FileWriter(file)) | ||||
|                 writer.write(mensaObject.toString()) | ||||
|                 writer.close() | ||||
|                 withContext(Dispatchers.IO) { | ||||
|                     val writer = BufferedWriter(FileWriter(file)) | ||||
|                     writer.write(timetableObject.toString()) | ||||
|                     writer.close() | ||||
|                 } | ||||
|  | ||||
|                 // update cache time | ||||
|                 timetableCacheTime = System.currentTimeMillis() / 1000 | ||||
|  | ||||
| @ -31,8 +31,10 @@ import android.view.ViewGroup | ||||
| import android.widget.TextView | ||||
| import androidx.fragment.app.Fragment | ||||
| import kotlinx.android.synthetic.main.fragment_home.* | ||||
| import org.jetbrains.anko.doAsync | ||||
| import org.jetbrains.anko.uiThread | ||||
| import kotlinx.coroutines.Dispatchers | ||||
| import kotlinx.coroutines.GlobalScope | ||||
| import kotlinx.coroutines.launch | ||||
| import kotlinx.coroutines.withContext | ||||
| import org.mosad.seil0.projectlaogai.R | ||||
| import org.mosad.seil0.projectlaogai.controller.CacheController.Companion.mensaMenu | ||||
| import org.mosad.seil0.projectlaogai.controller.CacheController.Companion.timetables | ||||
| @ -54,11 +56,10 @@ class HomeFragment : Fragment() { | ||||
|     private val formatter = SimpleDateFormat("E dd.MM", Locale.getDefault()) | ||||
|  | ||||
|     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { | ||||
|  | ||||
|         val view: View = inflater.inflate(R.layout.fragment_home, container, false) | ||||
|  | ||||
|         addMensaMenu().get() | ||||
|         addTimeTable().get() | ||||
|         addMensaMenu() | ||||
|         addTimeTable() | ||||
|  | ||||
|         // Inflate the layout for this fragment | ||||
|         return view | ||||
| @ -67,13 +68,13 @@ class HomeFragment : Fragment() { | ||||
|     /** | ||||
|      * add the current mensa meal to the home screens | ||||
|      */ | ||||
|     private fun addMensaMenu() = doAsync { | ||||
|     private fun addMensaMenu() = GlobalScope.launch(Dispatchers.Default) { | ||||
|  | ||||
|         var dayMeals: ArrayList<Meal> | ||||
|         val cal = Calendar.getInstance() | ||||
|         val mensaCardView = DayCardView(context!!) | ||||
|  | ||||
|         uiThread { | ||||
|         withContext(Dispatchers.Main) { | ||||
|  | ||||
|             if (isAdded) { | ||||
|                 if (cal.get(Calendar.HOUR_OF_DAY) < 15) { | ||||
| @ -117,9 +118,9 @@ class HomeFragment : Fragment() { | ||||
|     /** | ||||
|      * add the current timetable to the home screen | ||||
|      */ | ||||
|     private fun addTimeTable() = doAsync { | ||||
|     private fun addTimeTable() = GlobalScope.launch(Dispatchers.Default) { | ||||
|  | ||||
|         uiThread { | ||||
|         withContext(Dispatchers.Main) { | ||||
|  | ||||
|             if (isAdded && timetables.isNotEmpty()) { | ||||
|                 try { | ||||
| @ -140,7 +141,7 @@ class HomeFragment : Fragment() { | ||||
|      * @param startDayIndex the day index you want to start searching | ||||
|      * @return a DayCardView with all lessons added | ||||
|      */ | ||||
|     private fun findNextDay(startDayIndex: Int) : DayCardView { | ||||
|     private fun findNextDay(startDayIndex: Int): DayCardView { | ||||
|         val dayCardView = DayCardView(context!!) | ||||
|         var dayTimetable: TimetableDay? = null | ||||
|         var dayIndexSearch = startDayIndex | ||||
| @ -151,7 +152,7 @@ class HomeFragment : Fragment() { | ||||
|                 dayTimetable = timetables[weekIndexSearch].timetable.days[dayIndex] | ||||
|  | ||||
|                 // some wired calendar magic, calculate the correct date to be shown ((timetable week - current week * 7) + (dayIndex - dayIndex of current week) | ||||
|                 val daysToAdd =(timetables[weekIndexSearch].meta.weekNumberYear - NotRetardedCalendar.getWeekOfYear()) * 7  + (dayIndex - NotRetardedCalendar.getDayOfWeekIndex()) | ||||
|                 val daysToAdd = (timetables[weekIndexSearch].meta.weekNumberYear - NotRetardedCalendar.getWeekOfYear()) * 7 + (dayIndex - NotRetardedCalendar.getDayOfWeekIndex()) | ||||
|                 dayCardView.addTimetableDay(dayTimetable, daysToAdd) | ||||
|  | ||||
|                 // if there are no lessons don't show the dayCardView | ||||
| @ -179,7 +180,7 @@ class HomeFragment : Fragment() { | ||||
|         noLesson.textSize = 18.0F | ||||
|         noLesson.setTypeface(null, Typeface.BOLD) | ||||
|         noLesson.textAlignment = View.TEXT_ALIGNMENT_CENTER | ||||
|         noLesson.setPadding(7,7,7,7) | ||||
|         noLesson.setPadding(7, 7, 7, 7) | ||||
|  | ||||
|         return noLesson | ||||
|     } | ||||
|  | ||||
| @ -28,8 +28,10 @@ import android.view.View | ||||
| import android.view.ViewGroup | ||||
| import androidx.fragment.app.Fragment | ||||
| import kotlinx.android.synthetic.main.fragment_mensa.* | ||||
| import org.jetbrains.anko.doAsync | ||||
| import org.jetbrains.anko.uiThread | ||||
| import kotlinx.coroutines.Dispatchers | ||||
| import kotlinx.coroutines.GlobalScope | ||||
| import kotlinx.coroutines.launch | ||||
| import kotlinx.coroutines.withContext | ||||
| import org.mosad.seil0.projectlaogai.R | ||||
| import org.mosad.seil0.projectlaogai.controller.CacheController | ||||
| import org.mosad.seil0.projectlaogai.controller.CacheController.Companion.mensaMenu | ||||
| @ -53,12 +55,14 @@ class MensaFragment : Fragment() { | ||||
|         // init actions | ||||
|         refreshAction() | ||||
|  | ||||
|         // add the current week (week starts on sunday) | ||||
|         val dayCurrent =  if(NotRetardedCalendar.getDayOfWeekIndex() == 6) 0 else NotRetardedCalendar.getDayOfWeekIndex() | ||||
|         addWeek(mensaMenu.currentWeek, dayCurrent).get() | ||||
|         GlobalScope.launch(Dispatchers.Default) { | ||||
|             val dayCurrent =  if(NotRetardedCalendar.getDayOfWeekIndex() == 6) 0 else NotRetardedCalendar.getDayOfWeekIndex() | ||||
|             addWeek(mensaMenu.currentWeek, dayCurrent).join() | ||||
|  | ||||
|             // add the next week | ||||
|             addWeek(mensaMenu.nextWeek, 0) | ||||
|         } | ||||
|  | ||||
|         // add the next week | ||||
|         addWeek(mensaMenu.nextWeek, 0) | ||||
|  | ||||
|         // TODO should we show a info if there is no more food this & next week? | ||||
|  | ||||
| @ -70,9 +74,9 @@ class MensaFragment : Fragment() { | ||||
|      * @param menusWeek menu of type MensaWeek you want to add | ||||
|      * @param dayStart the first day of the week to add | ||||
|      */ | ||||
|     private fun addWeek(menusWeek: MensaWeek, dayStart: Int) = doAsync { | ||||
|     private fun addWeek(menusWeek: MensaWeek, dayStart: Int) = GlobalScope.launch(Dispatchers.Default) { | ||||
|  | ||||
|         uiThread { | ||||
|         withContext(Dispatchers.Main) { | ||||
|  | ||||
|             // only add the days dayStart to Fri since the mensa is closed on Sat/Sun | ||||
|             for (dayIndex in dayStart..4) { | ||||
| @ -105,8 +109,8 @@ class MensaFragment : Fragment() { | ||||
|     /** | ||||
|      * initialize the refresh action | ||||
|      */ | ||||
|     private fun refreshAction() = doAsync { | ||||
|         uiThread { | ||||
|     private fun refreshAction() = GlobalScope.launch(Dispatchers.Default) { | ||||
|         withContext(Dispatchers.Main) { | ||||
|             // set the refresh listener | ||||
|             refreshLayout_Mensa.setOnRefreshListener { | ||||
|                 updateMensaScreen() | ||||
| @ -118,18 +122,18 @@ class MensaFragment : Fragment() { | ||||
|     /** | ||||
|      * refresh the mensa cache and update the mensa screen | ||||
|      */ | ||||
|     private fun updateMensaScreen() = doAsync { | ||||
|     private fun updateMensaScreen() = GlobalScope.launch(Dispatchers.Default) { | ||||
|         // update the cache | ||||
|         TCoRAPIController.getMensa(context!!).get() // blocking since we want the new data | ||||
|         TCoRAPIController.getMensa(context!!).join() // blocking since we want the new data | ||||
|         CacheController.readMensa(context!!) | ||||
|  | ||||
|         uiThread { | ||||
|         withContext(Dispatchers.Main) { | ||||
|             // remove all menus from the layout | ||||
|             linLayout_Mensa.removeAllViews() | ||||
|  | ||||
|             // add the refreshed menus | ||||
|             val dayCurrent = if (NotRetardedCalendar.getDayOfWeekIndex() == 6) 0 else NotRetardedCalendar.getDayOfWeekIndex() | ||||
|             addWeek(mensaMenu.currentWeek, dayCurrent).get() | ||||
|             addWeek(mensaMenu.currentWeek, dayCurrent).join() | ||||
|  | ||||
|             // add the next week | ||||
|             addWeek(mensaMenu.nextWeek, 0) | ||||
|  | ||||
| @ -39,8 +39,7 @@ import com.afollestad.materialdialogs.list.listItems | ||||
| import com.afollestad.materialdialogs.list.listItemsSingleChoice | ||||
| import de.psdev.licensesdialog.LicensesDialog | ||||
| import kotlinx.android.synthetic.main.fragment_settings.* | ||||
| import org.jetbrains.anko.doAsync | ||||
| import org.jetbrains.anko.uiThread | ||||
| import kotlinx.coroutines.* | ||||
| import org.mosad.seil0.projectlaogai.BuildConfig | ||||
| import org.mosad.seil0.projectlaogai.R | ||||
| import org.mosad.seil0.projectlaogai.controller.CacheController | ||||
| @ -54,7 +53,6 @@ import org.mosad.seil0.projectlaogai.controller.TCoRAPIController | ||||
| import org.mosad.seil0.projectlaogai.hsoparser.DataTypes | ||||
| import java.util.* | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * The settings controller class | ||||
|  * contains all needed parts to display and the settings screen | ||||
| @ -245,17 +243,20 @@ class SettingsFragment : Fragment() { | ||||
|                     .customView(R.layout.dialog_loading) | ||||
|                 dialog.show() | ||||
|  | ||||
|                 doAsync { | ||||
|                 GlobalScope.launch(Dispatchers.Default) { | ||||
|                     PreferencesController.saveCourse(context, coursesList[index]) // save the course | ||||
|  | ||||
|                     // update current & next weeks timetable | ||||
|                     TCoRAPIController.getTimetable(cCourse.courseName, 0, context).get() // blocking since we want the new data | ||||
|                     TCoRAPIController.getTimetable(cCourse.courseName, 1, context).get() // blocking since we want the new data | ||||
|                     val threads = listOf( | ||||
|                         TCoRAPIController.getTimetable(cCourse.courseName, 0, context), | ||||
|                         TCoRAPIController.getTimetable(cCourse.courseName, 1, context) | ||||
|                     ) | ||||
|                     threads.joinAll() // blocking since we want the new data | ||||
|  | ||||
|                     CacheController.readTimetable(cCourse.courseName, 0, context) | ||||
|                     CacheController.readTimetable(cCourse.courseName, 1, context) | ||||
|  | ||||
|                     uiThread { | ||||
|                     withContext(Dispatchers.Main) { | ||||
|                         dialog.dismiss() | ||||
|                         txtView_Course.text = cCourse.courseName // update txtView | ||||
|                     } | ||||
|  | ||||
| @ -31,8 +31,7 @@ import androidx.fragment.app.Fragment | ||||
| import com.afollestad.materialdialogs.MaterialDialog | ||||
| import com.google.android.material.floatingactionbutton.FloatingActionButton | ||||
| import kotlinx.android.synthetic.main.fragment_timetable.* | ||||
| import org.jetbrains.anko.doAsync | ||||
| import org.jetbrains.anko.uiThread | ||||
| import kotlinx.coroutines.* | ||||
| import org.mosad.seil0.projectlaogai.R | ||||
| import org.mosad.seil0.projectlaogai.controller.CacheController | ||||
| import org.mosad.seil0.projectlaogai.controller.CacheController.Companion.timetables | ||||
| @ -74,9 +73,9 @@ class TimeTableFragment : Fragment() { | ||||
|     /** | ||||
|      * initialize the actions | ||||
|      */ | ||||
|     private fun initActions() = doAsync { | ||||
|     private fun initActions() = GlobalScope.launch(Dispatchers.Default) { | ||||
|  | ||||
|         uiThread { | ||||
|         withContext(Dispatchers.Main) { | ||||
|             refreshLayout_Timetable.setOnRefreshListener { | ||||
|                 updateTimetableScreen() | ||||
|             } | ||||
| @ -104,18 +103,18 @@ class TimeTableFragment : Fragment() { | ||||
|     /** | ||||
|      * add the current and next weeks lessons | ||||
|      */ | ||||
|     private fun addInitWeeks() = doAsync { | ||||
|     private fun addInitWeeks() = GlobalScope.launch(Dispatchers.Default) { | ||||
|         val currentDayIndex = NotRetardedCalendar.getDayOfWeekIndex() | ||||
|  | ||||
|         addWeek(currentDayIndex, 5, 0).get() // add current week | ||||
|         addWeek(currentDayIndex, 5, 0).join() // add current week | ||||
|         addWeek(0, currentDayIndex - 1, 1) // add next week | ||||
|     } | ||||
|  | ||||
|     private fun addWeek(startDayIndex: Int, dayEndIndex: Int, weekIndex: Int) = doAsync { | ||||
|     private fun addWeek(startDayIndex: Int, dayEndIndex: Int, weekIndex: Int) = GlobalScope.launch(Dispatchers.Default) { | ||||
|         val timetable = timetables[weekIndex].timetable | ||||
|         val timetableMeta = timetables[weekIndex].meta | ||||
|  | ||||
|         uiThread { | ||||
|         withContext(Dispatchers.Main) { | ||||
|  | ||||
|             for (dayIndex in startDayIndex..dayEndIndex) { | ||||
|                 val dayCardView = DayCardView(context!!) | ||||
| @ -132,15 +131,18 @@ class TimeTableFragment : Fragment() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private fun updateTimetableScreen() = doAsync { | ||||
|     private fun updateTimetableScreen() = GlobalScope.launch(Dispatchers.Default) { | ||||
|         // update the cache | ||||
|         TCoRAPIController.getTimetable(cCourse.courseName, 0, context!!).get() // blocking since we want the new data | ||||
|         TCoRAPIController.getTimetable(cCourse.courseName, 1, context!!).get() // blocking since we want the new data | ||||
|         val threads = listOf( | ||||
|             TCoRAPIController.getTimetable(cCourse.courseName, 0, context!!), | ||||
|             TCoRAPIController.getTimetable(cCourse.courseName, 1, context!!) | ||||
|         ) | ||||
|         threads.joinAll() // blocking since we want the new data | ||||
|  | ||||
|         CacheController.readTimetable(cCourse.courseName, 0, context!!) | ||||
|         CacheController.readTimetable(cCourse.courseName, 1, context!!) | ||||
|  | ||||
|         uiThread { | ||||
|         withContext(Dispatchers.Main) { | ||||
|             // remove all menus from the layout | ||||
|             linLayout_Timetable.removeAllViews() | ||||
|  | ||||
| @ -148,7 +150,7 @@ class TimeTableFragment : Fragment() { | ||||
|             val dayIndex = NotRetardedCalendar.getDayOfWeekIndex() | ||||
|  | ||||
|             // add current week | ||||
|             addWeek(dayIndex, 5, 0).get() | ||||
|             addWeek(dayIndex, 5, 0).join() | ||||
|  | ||||
|             // add next week | ||||
|             addWeek(0, dayIndex - 1, 1) | ||||
|  | ||||
| @ -19,8 +19,8 @@ | ||||
|         <license>Apache Software License 2.0</license> | ||||
|     </notice> | ||||
|     <notice> | ||||
|         <name>anko</name> | ||||
|         <url>https://github.com/Kotlin/anko</url> | ||||
|         <name>kotlinx.coroutines</name> | ||||
|         <url>https://github.com/Kotlin/kotlinx.coroutines</url> | ||||
|         <copyright>Copyright JetBrains</copyright> | ||||
|         <license>Apache Software License 2.0</license> | ||||
|     </notice> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user