Parcourir la source

fix #21 issue, autoscroll was added

Ethosa il y a 2 ans
Parent
commit
854f40c8fe

+ 27 - 13
app/src/main/java/com/ethosa/ktc/ui/adapters/TimetableAdapter.kt

@@ -21,9 +21,11 @@ class TimetableAdapter(
     private val timetableFragment: TimetableFragment,
     private val week: Week
 ) : RecyclerView.Adapter<TimetableAdapter.ViewHolder>() {
-    private lateinit var dateFormat: SimpleDateFormat
-    private lateinit var weekday: Day
+    @SuppressLint("SimpleDateFormat")
+    private var dateFormat = SimpleDateFormat("mm:ss")
+    private var weekday: Day? = null
     private var now = "00:00"
+    var currentPos: Int? = null
     /**
      * Provides RecyclerView.ViewHolder behavior.
      * Also includes TimetableBinding.
@@ -32,19 +34,31 @@ class TimetableAdapter(
         val binding = LayoutTimetableBinding.bind(view)
     }
 
-    @SuppressLint("SimpleDateFormat")
-    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
-        dateFormat = SimpleDateFormat("mm:ss")
-
+    init {
         val calendar = Calendar.getInstance()
-        val day = calendar.get(Calendar.DAY_OF_WEEK)
+        var day = calendar.get(Calendar.DAY_OF_WEEK)
+        val firstDay = calendar.firstDayOfWeek
+        if (firstDay == Calendar.SUNDAY) {
+            if (day == 1)
+                day = 7
+            else
+                day--
+        }
         now = "${calendar.get(Calendar.HOUR_OF_DAY)}:${Calendar.MINUTE}"
-        weekday = when {
-                day >= 2 -> week.days[day-2]
-                day > 1 -> week.days[1]
-                else -> week.days[0]
-            }
+        currentPos = when (day) {
+            7 -> null
+            1 -> 0
+            else -> day-1
+        }
+        weekday = when (day) {
+            7 -> null
+            1 -> week.days[0]
+            else -> week.days[day-1]
+        }
+    }
 
+    @SuppressLint("SimpleDateFormat")
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
         return ViewHolder(LayoutInflater.from(parent.context)
             .inflate(R.layout.layout_timetable, parent, false))
     }
@@ -74,7 +88,7 @@ class TimetableAdapter(
                 val from = dateFormat.parse(l.time[1])?.time!!
                 val current = dateFormat.parse(now)?.time!!
                 val to = dateFormat.parse(l.time[2])?.time!!
-                if (current in from..to && weekday.title == day.title)
+                if (current in from..to && weekday?.title == day.title)
                     lesson.root.setBackgroundResource(R.color.current_lesson)
 
                 holder.binding.root.addView(root)

+ 28 - 77
app/src/main/java/com/ethosa/ktc/ui/fragments/TimetableFragment.kt

@@ -156,18 +156,10 @@ class TimetableFragment : IOFragmentBackPressed() {
                 try {
                     branches = Gson().fromJson(json, Branches::class.java)
                 } catch (e: JsonSyntaxException) {
-                    requireActivity().runOnUiThread {
-                        Toast.makeText(
-                            requireContext(), R.string.toast_branch_error, Toast.LENGTH_SHORT
-                        ).show()
-                    }
+                    toast(R.string.toast_branch_error)
                     return
                 } catch (e: Exception) {
-                    requireActivity().runOnUiThread {
-                        Toast.makeText(
-                            requireContext(), R.string.toast_unknown_error, Toast.LENGTH_SHORT
-                        ).show()
-                    }
+                    toast(R.string.toast_unknown_error)
                     return
                 }
 
@@ -184,11 +176,7 @@ class TimetableFragment : IOFragmentBackPressed() {
 
             override fun onFailure(call: Call, e: IOException) {
                 super.onFailure(call, e)
-                requireActivity().runOnUiThread {
-                    Toast.makeText(
-                        requireContext(), R.string.toast_unknown_error, Toast.LENGTH_SHORT
-                    ).show()
-                }
+                toast(R.string.toast_unknown_error)
             }
         })
     }
@@ -208,18 +196,10 @@ class TimetableFragment : IOFragmentBackPressed() {
                 try {
                     courses = Gson().fromJson(json, Courses::class.java)
                 } catch (e: JsonSyntaxException) {
-                    requireActivity().runOnUiThread {
-                        Toast.makeText(
-                            requireContext(), R.string.toast_courses_error, Toast.LENGTH_SHORT
-                        ).show()
-                    }
+                    toast(R.string.toast_courses_error)
                     return
                 } catch (e: Exception) {
-                    requireActivity().runOnUiThread {
-                        Toast.makeText(
-                            requireContext(), R.string.toast_unknown_error, Toast.LENGTH_SHORT
-                        ).show()
-                    }
+                    toast(R.string.toast_unknown_error)
                     return
                 }
 
@@ -241,11 +221,7 @@ class TimetableFragment : IOFragmentBackPressed() {
 
             override fun onFailure(call: Call, e: IOException) {
                 super.onFailure(call, e)
-                requireActivity().runOnUiThread {
-                    Toast.makeText(
-                        requireContext(), R.string.toast_unknown_error, Toast.LENGTH_SHORT
-                    ).show()
-                }
+                toast(R.string.toast_unknown_error)
             }
         })
     }
@@ -258,7 +234,7 @@ class TimetableFragment : IOFragmentBackPressed() {
     fun fetchTimetable(groupId: Int, week: Int? = null) {
         Preferences.timetableState = 2
         CollegeApi.fetchTimetable(groupId, object : CollegeCallback {
-            @SuppressLint("SetTextI18n")
+            @SuppressLint("SetTextI18n", "NotifyDataSetChanged")
             override fun onResponse(call: Call, response: Response) {
                 // Parse JSON
                 val json = response.body?.string()
@@ -266,18 +242,10 @@ class TimetableFragment : IOFragmentBackPressed() {
                 try {
                     data = Gson().fromJson(json, Week::class.java)
                 } catch (e: JsonSyntaxException) {
-                    requireActivity().runOnUiThread {
-                        Toast.makeText(
-                            requireContext(), R.string.toast_timetable_error, Toast.LENGTH_SHORT
-                        ).show()
-                    }
+                    toast(R.string.toast_timetable_error)
                     return
                 } catch (e: Exception) {
-                    requireActivity().runOnUiThread {
-                        Toast.makeText(
-                            requireContext(), R.string.toast_unknown_error, Toast.LENGTH_SHORT
-                        ).show()
-                    }
+                    toast(R.string.toast_unknown_error)
                     return
                 }
                 Preferences.week = data.week_number
@@ -292,9 +260,12 @@ class TimetableFragment : IOFragmentBackPressed() {
                         timetableToolbar.visibility = View.VISIBLE
                         next.visibility = View.VISIBLE
                         previous.visibility = View.VISIBLE
-                        timetable.adapter = TimetableAdapter(
+                        val adapter = TimetableAdapter(
                             this@TimetableFragment, data
                         )
+                        timetable.adapter = adapter
+                        if (adapter.currentPos != null)
+                            timetable.layoutManager?.scrollToPosition(adapter.currentPos!!)
                     }
                     preferences.saveTimetable()
                 }
@@ -302,11 +273,7 @@ class TimetableFragment : IOFragmentBackPressed() {
 
             override fun onFailure(call: Call, e: IOException) {
                 super.onFailure(call, e)
-                requireActivity().runOnUiThread {
-                    Toast.makeText(
-                        requireContext(), R.string.toast_unknown_error, Toast.LENGTH_SHORT
-                    ).show()
-                }
+                toast(R.string.toast_unknown_error)
             }
         }, week)
     }
@@ -329,18 +296,10 @@ class TimetableFragment : IOFragmentBackPressed() {
                     try {
                         data = Gson().fromJson(json, TeacherTimetable::class.java)
                     } catch (e: JsonSyntaxException) {
-                        requireActivity().runOnUiThread {
-                            Toast.makeText(
-                                requireContext(), R.string.toast_timetable_error, Toast.LENGTH_SHORT
-                            ).show()
-                        }
+                        toast(R.string.toast_timetable_error)
                         return
                     } catch (e: Exception) {
-                        requireActivity().runOnUiThread {
-                            Toast.makeText(
-                                requireContext(), R.string.toast_unknown_error, Toast.LENGTH_SHORT
-                            ).show()
-                        }
+                        toast(R.string.toast_unknown_error)
                         return
                     }
                     Preferences.teacherId = teacherId
@@ -363,11 +322,7 @@ class TimetableFragment : IOFragmentBackPressed() {
 
                 override fun onFailure(call: Call, e: IOException) {
                     super.onFailure(call, e)
-                    requireActivity().runOnUiThread {
-                        Toast.makeText(
-                            requireContext(), R.string.toast_unknown_error, Toast.LENGTH_SHORT
-                        ).show()
-                    }
+                    toast(R.string.toast_unknown_error)
                 }
         })
     }
@@ -387,18 +342,10 @@ class TimetableFragment : IOFragmentBackPressed() {
                 try {
                     teachers = Gson().fromJson(json, TeachersList::class.java)
                 } catch (e: JsonSyntaxException) {
-                    requireActivity().runOnUiThread {
-                        Toast.makeText(
-                            requireContext(), R.string.toast_teacher_error, Toast.LENGTH_SHORT
-                        ).show()
-                    }
+                    toast(R.string.toast_teacher_error)
                     return
                 } catch (e: Exception) {
-                    requireActivity().runOnUiThread {
-                        Toast.makeText(
-                            requireContext(), R.string.toast_unknown_error, Toast.LENGTH_SHORT
-                        ).show()
-                    }
+                    toast(R.string.toast_unknown_error)
                     return
                 }
                 teachers.teachers.removeAt(0)
@@ -421,12 +368,16 @@ class TimetableFragment : IOFragmentBackPressed() {
 
             override fun onFailure(call: Call, e: IOException) {
                 super.onFailure(call, e)
-                requireActivity().runOnUiThread {
-                    Toast.makeText(
-                        requireContext(), R.string.toast_unknown_error, Toast.LENGTH_SHORT
-                    ).show()
-                }
+                toast(R.string.toast_unknown_error)
             }
         })
     }
+
+    private fun toast(resId: Int) {
+        requireActivity().runOnUiThread {
+            Toast.makeText(
+                requireContext(), resId, Toast.LENGTH_SHORT
+            ).show()
+        }
+    }
 }

+ 13 - 13
app/src/main/res/xml/timetable_widget_info.xml

@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
-<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
+<appwidget-provider
     xmlns:tools="http://schemas.android.com/tools"
-    android:description="@string/app_widget_description"
-    android:initialKeyguardLayout="@layout/widget_timetable"
-    android:initialLayout="@layout/widget_timetable"
-    android:minWidth="300dp"
-    android:minHeight="140dp"
-    android:previewImage="@drawable/ic_globe_alt"
-    android:previewLayout="@layout/widget_timetable"
-    android:resizeMode="horizontal|vertical"
-    android:targetCellWidth="4"
-    android:targetCellHeight="3"
-    android:updatePeriodMillis="1800000"
-    android:widgetCategory="home_screen"
+    tools:description="@string/app_widget_description"
+    tools:initialKeyguardLayout="@layout/widget_timetable"
+    tools:initialLayout="@layout/widget_timetable"
+    tools:minWidth="300dp"
+    tools:minHeight="140dp"
+    tools:previewImage="@drawable/ic_globe_alt"
+    tools:previewLayout="@layout/widget_timetable"
+    tools:resizeMode="horizontal|vertical"
+    tools:targetCellWidth="4"
+    tools:targetCellHeight="3"
+    tools:updatePeriodMillis="1800000"
+    tools:widgetCategory="home_screen"
     tools:targetApi="s" />