diff --git a/app/src/main/assets/planning_example.json b/app/src/main/assets/planning_example.json index b2fdba0..94c582a 100644 --- a/app/src/main/assets/planning_example.json +++ b/app/src/main/assets/planning_example.json @@ -61,5 +61,6 @@ "hour_end": "06:00" } ], - "regular_programme" : "Programmation habituelle" + "regular_programme" : "Programmation habituelle", + "timezone": "GMT+1" } \ No newline at end of file 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 a7c37c1..3d848ca 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 @@ -7,6 +7,19 @@ import java.util.* import kotlin.collections.ArrayList class Programme (val title: String, private val periodicity: Int, private val hourBegin: Int, private val hourEnd: Int) { + + fun isThisDay(day: Int): Boolean { + + // 0 (Monday) to 5 (Saturday) + 6 (Sunday) + + // this translates to "true" when: + // - the currentDay is flagged in the "periodicity" bit array + // OR + // - Yesterday is flagged in the "periodicity" bit array AND the program does span over 2 days (night programs). + // We'll check a after this whether the current hour is within the span. + return (((0b1000000 shr day) and (periodicity)) != 0) + } + fun isCurrent(): Boolean { val now = Calendar.getInstance(TimeZone.getTimeZone("GMT+1")) val currentDay = 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 368743a..be9045b 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 @@ -7,13 +7,18 @@ import android.widget.TextView 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.Programme +import fr.forum_thalie.tsumugi.weekdays +import fr.forum_thalie.tsumugi.weekdaysSundayFirst +import java.util.* +import kotlin.collections.ArrayList -class ProgrammeAdapter(private val dataSet: ArrayList +class ProgrammeAdapter(private val dataSet: ArrayList, private val day: String /*, context: Context, resource: Int, - objects: Array*/ + objects: ArrayList*/ ) : RecyclerView.Adapter() /*ArrayAdapter(context, resource, objects)*/ { class MyViewHolder(view: ConstraintLayout) : RecyclerView.ViewHolder(view) @@ -35,12 +40,17 @@ class ProgrammeAdapter(private val dataSet: ArrayList val programmeStart = holder.itemView.findViewById(R.id.programme_start) val programmeEnd = holder.itemView.findViewById(R.id.programme_end) val programmeName = holder.itemView.findViewById(R.id.programme_name) - val programmeDays = holder.itemView.findViewById(R.id.programme_days) programmeStart.text = dataSet[position].begin() programmeName.text = dataSet[position].title programmeEnd.text = dataSet[position].end() - programmeDays.text = dataSet[position].days() + + if (dataSet[position].isCurrent() && (Calendar.getInstance(TimeZone.getTimeZone("GMT+1")).get(Calendar.DAY_OF_WEEK) - 1 == weekdaysSundayFirst.indexOf(day))) + { + programmeStart.setTextColor(colorBlue) + programmeEnd.setTextColor(colorBlue) + programmeName.setTextColor(colorBlue) + } } // Return the size of your dataset (invoked by the layout manager) 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 2fc0cdd..9f06b85 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 @@ -10,12 +10,16 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import fr.forum_thalie.tsumugi.R import fr.forum_thalie.tsumugi.planning.Planning +import fr.forum_thalie.tsumugi.planning.Programme +import fr.forum_thalie.tsumugi.weekdays +import kotlinx.android.synthetic.main.fragment_programme.* -class ProgrammeDayFragment(day: String) : Fragment() { +class ProgrammeDayFragment(private val day: String) : Fragment() { private lateinit var recyclerView: RecyclerView private lateinit var viewAdapter: RecyclerView.Adapter<*> private lateinit var viewManager: RecyclerView.LayoutManager + private val programmeOfTheDay: ArrayList = ArrayList() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -23,9 +27,13 @@ class ProgrammeDayFragment(day: String) : Fragment() { ): View? { // Inflate the layout for this fragment val root = inflater.inflate(R.layout.fragment_programme_day, container, false) + Planning.instance.programmes.forEach { + if (it.isThisDay(day = weekdays.indexOf(day))) + programmeOfTheDay.add(it) + } viewManager = LinearLayoutManager(context) viewAdapter = - ProgrammeAdapter(Planning.instance.programmes) + ProgrammeAdapter(programmeOfTheDay, day) recyclerView = root.findViewById(R.id.programme_recycler).apply { // use this setting to improve performance if you know that changes // in content do not change the layout size of the RecyclerView @@ -33,17 +41,22 @@ class ProgrammeDayFragment(day: String) : Fragment() { layoutManager = viewManager adapter = viewAdapter } - Planning.instance.isProgrammeUpdated.observeForever(isProgrammeUpdatedObserver) + Planning.instance.currentProgramme.observeForever(isProgrammeUpdatedObserver) return root } - private val isProgrammeUpdatedObserver = Observer { + 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.isProgrammeUpdated.removeObserver(isProgrammeUpdatedObserver) + Planning.instance.currentProgramme.removeObserver(isProgrammeUpdatedObserver) } companion object { 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 4ced158..2be6c49 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 @@ -12,6 +12,8 @@ import com.google.android.material.tabs.TabLayout import fr.forum_thalie.tsumugi.R 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() { @@ -34,6 +36,8 @@ class ProgrammeFragment : Fragment() { } viewPager.adapter = adapter + val todaySundayFirst = Calendar.getInstance(TimeZone.getTimeZone("GMT+1")).get(Calendar.DAY_OF_WEEK) - 1 + viewPager.currentItem = (todaySundayFirst - 1)%7 val tabLayout : TabLayout = root.findViewById(R.id.dayTabLayout) tabLayout.setupWithViewPager(viewPager) diff --git a/app/src/main/res/layout/news_view.xml b/app/src/main/res/layout/news_view.xml index 112a5b4..82ab95a 100644 --- a/app/src/main/res/layout/news_view.xml +++ b/app/src/main/res/layout/news_view.xml @@ -4,7 +4,9 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="16dp"> + android:layout_marginTop="16dp" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp"> - - + android:layout_marginTop="8dp" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp"> @@ -26,12 +20,13 @@