From c1451f264a62069852f0ddfb46709050d62f099d Mon Sep 17 00:00:00 2001 From: yattoz <12408848+yattoz@users.noreply.github.com> Date: Wed, 18 Dec 2019 21:51:16 +0100 Subject: [PATCH] set timezone in JSON. Computes/displays with JSON Timezone (not local) --- .../forum_thalie/tsumugi/planning/Planning.kt | 23 ++++++++++++---- .../tsumugi/planning/Programme.kt | 14 +++++++--- .../tsumugi/ui/programme/ProgrammeAdapter.kt | 3 ++- .../ui/programme/ProgrammeDayFragment.kt | 27 +++++++++---------- .../tsumugi/ui/programme/ProgrammeFragment.kt | 4 +-- app/src/main/res/values/strings.xml | 3 ++- 6 files changed, 47 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/planning/Planning.kt b/app/src/main/java/fr/forum_thalie/tsumugi/planning/Planning.kt index 06fc71e..1d5d148 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/planning/Planning.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/planning/Planning.kt @@ -3,17 +3,22 @@ package fr.forum_thalie.tsumugi.planning import android.content.Context import androidx.lifecycle.MutableLiveData import fr.forum_thalie.tsumugi.Async +import fr.forum_thalie.tsumugi.R import fr.forum_thalie.tsumugi.weekdays import org.json.JSONObject import java.io.IOException import java.net.URL +import java.util.* +import kotlin.collections.ArrayList class Planning { val programmes: ArrayList = ArrayList() private var regularProgramme: String? = null val currentProgramme: MutableLiveData = MutableLiveData() - val isProgrammeUpdated: MutableLiveData = MutableLiveData() + val isDataFetched: MutableLiveData = MutableLiveData() + + var timeZone: TimeZone = Calendar.getInstance().timeZone private fun findCurrentProgramme(): String { @@ -21,7 +26,7 @@ class Planning { if (it.isCurrent()) return it.title } - return regularProgramme ?: "none" + return regularProgramme ?: "-" } fun checkProgramme() @@ -81,9 +86,17 @@ class Planning { programmes.add(Programme(title, periodicity, hourBegin, hourEnd)) } } - if (result.has("regular_programme")) - regularProgramme = result.getString("regular_programme") - isProgrammeUpdated.value = true + regularProgramme = if (result.has("regular_programme")) + result.getString("regular_programme") + else + context?.getString(R.string.regular_programme) + + timeZone = if (result.has("timezone")) + TimeZone.getTimeZone(result.getString("timezone")) + else + Calendar.getInstance().timeZone + + isDataFetched.value = true } Async(scrape, post) } diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/planning/Programme.kt b/app/src/main/java/fr/forum_thalie/tsumugi/planning/Programme.kt index 3d848ca..93b5ab1 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/planning/Programme.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/planning/Programme.kt @@ -21,7 +21,7 @@ class Programme (val title: String, private val periodicity: Int, private val ho } fun isCurrent(): Boolean { - val now = Calendar.getInstance(TimeZone.getTimeZone("GMT+1")) + val now = Calendar.getInstance(Planning.instance.timeZone) val currentDay = if (now.get(Calendar.DAY_OF_WEEK) - 1 == 0) 6 else now.get(Calendar.DAY_OF_WEEK) - 2 // 0 (Monday) to 5 (Saturday) + 6 (Sunday) @@ -59,14 +59,20 @@ class Programme (val title: String, private val periodicity: Int, private val ho return "Title: $title, time info (periodicity, begin, end): $periodicity, $hourBegin, $hourEnd" } + private val offset1 = (Planning.instance.timeZone.getOffset(System.currentTimeMillis())) / (60*1000) + private val offset2 = (Calendar.getInstance().timeZone.getOffset(System.currentTimeMillis())) / (60*1000) + fun begin(): String { - return "%02d:%02d".format(hourBegin/60, hourBegin%60) + val hourBeginTZCorrect = hourBegin // + offset1 - offset2 + return "%02d:%02d".format(hourBeginTZCorrect/60, hourBeginTZCorrect%60) } fun end(): String { - return "%02d:%02d".format(hourEnd/60, hourEnd%60) + val hourEndTZCorrect = hourEnd // + offset1 - offset2 + return "%02d:%02d".format(hourEndTZCorrect/60, hourEndTZCorrect%60) } + /* fun days(): String { val res = ArrayList() for (i in 0 until weekdays.size) { @@ -78,6 +84,8 @@ class Programme (val title: String, private val periodicity: Int, private val ho return res.toString().drop(1).dropLast(1) // drop '[' and ']' } + */ + init { Log.d(tag, this.toString()) } diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeAdapter.kt b/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeAdapter.kt index be9045b..8fddfdd 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeAdapter.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeAdapter.kt @@ -8,6 +8,7 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView import fr.forum_thalie.tsumugi.R import fr.forum_thalie.tsumugi.colorBlue +import fr.forum_thalie.tsumugi.planning.Planning import fr.forum_thalie.tsumugi.planning.Programme import fr.forum_thalie.tsumugi.weekdays import fr.forum_thalie.tsumugi.weekdaysSundayFirst @@ -45,7 +46,7 @@ class ProgrammeAdapter(private val dataSet: ArrayList, private val da programmeName.text = dataSet[position].title programmeEnd.text = dataSet[position].end() - if (dataSet[position].isCurrent() && (Calendar.getInstance(TimeZone.getTimeZone("GMT+1")).get(Calendar.DAY_OF_WEEK) - 1 == weekdaysSundayFirst.indexOf(day))) + if (dataSet[position].isCurrent() && (Calendar.getInstance(Planning.instance.timeZone).get(Calendar.DAY_OF_WEEK) - 1 == weekdaysSundayFirst.indexOf(day))) { programmeStart.setTextColor(colorBlue) programmeEnd.setTextColor(colorBlue) diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeDayFragment.kt b/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeDayFragment.kt index 9f06b85..2ae694d 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeDayFragment.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeDayFragment.kt @@ -41,24 +41,21 @@ class ProgrammeDayFragment(private val day: String) : Fragment() { layoutManager = viewManager adapter = viewAdapter } - Planning.instance.currentProgramme.observeForever(isProgrammeUpdatedObserver) + Planning.instance.currentProgramme.observe(viewLifecycleOwner, Observer { + programmeOfTheDay.clear() + Planning.instance.programmes.forEach { + if (it.isThisDay(day = weekdays.indexOf(day))) + programmeOfTheDay.add(it) + } + viewAdapter.notifyDataSetChanged() + }) + + Planning.instance.isDataFetched.observe(viewLifecycleOwner, Observer { + viewAdapter.notifyDataSetChanged() + }) return root } - private val isProgrammeUpdatedObserver = Observer { - programmeOfTheDay.clear() - Planning.instance.programmes.forEach { - if (it.isThisDay(day = weekdays.indexOf(day))) - programmeOfTheDay.add(it) - } - viewAdapter.notifyDataSetChanged() - } - - override fun onDestroyView() { - super.onDestroyView() - Planning.instance.currentProgramme.removeObserver(isProgrammeUpdatedObserver) - } - companion object { @JvmStatic fun newInstance(day: String) = diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeFragment.kt b/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeFragment.kt index 2be6c49..d6c158b 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeFragment.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeFragment.kt @@ -10,9 +10,9 @@ import androidx.fragment.app.FragmentPagerAdapter import androidx.viewpager.widget.ViewPager import com.google.android.material.tabs.TabLayout import fr.forum_thalie.tsumugi.R +import fr.forum_thalie.tsumugi.planning.Planning import fr.forum_thalie.tsumugi.ui.APagerAdapter import fr.forum_thalie.tsumugi.weekdays -import fr.forum_thalie.tsumugi.weekdaysSundayFirst import java.util.* class ProgrammeFragment : Fragment() { @@ -36,7 +36,7 @@ class ProgrammeFragment : Fragment() { } viewPager.adapter = adapter - val todaySundayFirst = Calendar.getInstance(TimeZone.getTimeZone("GMT+1")).get(Calendar.DAY_OF_WEEK) - 1 + val todaySundayFirst = Calendar.getInstance(Planning.instance.timeZone).get(Calendar.DAY_OF_WEEK) - 1 viewPager.currentItem = (todaySundayFirst - 1)%7 val tabLayout : TabLayout = root.findViewById(R.id.dayTabLayout) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e41b508..63d4fe8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,11 +43,12 @@ Disable https://tsumugi.forum-thalie.fr/ https://tsumugi.forum-thalie.fr/?feed=rss2 - ADD SOME URL HERE... + ADD SOME URL HERE Select at least one day No alarm set Next alarm: Last played Programme + Programme régulier