created dedicated tabPager for programme

remotes/origin/devel
yattoz 2019-12-18 20:14:52 +01:00
parent c20727fca7
commit 3e51df6a87
18 changed files with 170 additions and 45 deletions

View File

@ -38,8 +38,11 @@ class MainActivity : BaseActivity() {
val bottomNavigationView : BottomNavigationView = findViewById(R.id.bottom_nav) val bottomNavigationView : BottomNavigationView = findViewById(R.id.bottom_nav)
//val navGraphIds = listOf(R.navigation.home, R.navigation.list, R.navigation.form) //val navGraphIds = listOf(R.navigation.home, R.navigation.list, R.navigation.form)
val navGraphIds = listOf(R.navigation.navigation_nowplaying, R.navigation.navigation_songs, val navGraphIds = listOf(
R.navigation.navigation_news) R.navigation.navigation_nowplaying,
R.navigation.navigation_songs,
R.navigation.navigation_news,
R.navigation.navigation_programme)
// Setup the bottom navigation view with a list of navigation graphs // Setup the bottom navigation view with a list of navigation graphs
val controller = bottomNavigationView.setupWithNavController( val controller = bottomNavigationView.setupWithNavController(

View File

@ -61,7 +61,6 @@ class Programme (val title: String, private val periodicity: Int, private val ho
{ {
res.add(weekdays[i]) res.add(weekdays[i])
} }
} }
return res.toString().drop(1).dropLast(1) // drop '[' and ']' return res.toString().drop(1).dropLast(1) // drop '[' and ']'
} }

View File

@ -1,11 +1,11 @@
package fr.forum_thalie.tsumugi.ui.songs package fr.forum_thalie.tsumugi.ui
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter import androidx.fragment.app.FragmentPagerAdapter
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
class SongsPagerAdapter(f: FragmentManager, t: Int) : FragmentPagerAdapter(f, t){ class APagerAdapter(f: FragmentManager, t: Int) : FragmentPagerAdapter(f, t){
private val fragmentList = ArrayList<Fragment>() private val fragmentList = ArrayList<Fragment>()
private val fragmentTitleList = ArrayList<String>() private val fragmentTitleList = ArrayList<String>()

View File

@ -1,19 +1,13 @@
package fr.forum_thalie.tsumugi.ui.songs.programme package fr.forum_thalie.tsumugi.ui.programme
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import fr.forum_thalie.tsumugi.R import fr.forum_thalie.tsumugi.R
import fr.forum_thalie.tsumugi.colorBlue
import fr.forum_thalie.tsumugi.colorWhited
import fr.forum_thalie.tsumugi.planning.Programme import fr.forum_thalie.tsumugi.planning.Programme
import fr.forum_thalie.tsumugi.tag
import kotlinx.android.synthetic.main.programme_view.view.*
import kotlinx.android.synthetic.main.song_view.view.*
class ProgrammeAdapter(private val dataSet: ArrayList<Programme> class ProgrammeAdapter(private val dataSet: ArrayList<Programme>
/*, /*,
@ -30,7 +24,9 @@ class ProgrammeAdapter(private val dataSet: ArrayList<Programme>
// create a new view // create a new view
val view = LayoutInflater.from(parent.context) val view = LayoutInflater.from(parent.context)
.inflate(R.layout.programme_view, parent, false) as ConstraintLayout .inflate(R.layout.programme_view, parent, false) as ConstraintLayout
return MyViewHolder(view) return MyViewHolder(
view
)
} }
// Replace the contents of a view (invoked by the layout manager) // Replace the contents of a view (invoked by the layout manager)

View File

@ -1,4 +1,4 @@
package fr.forum_thalie.tsumugi.ui.songs.programme package fr.forum_thalie.tsumugi.ui.programme
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@ -10,11 +10,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import fr.forum_thalie.tsumugi.R import fr.forum_thalie.tsumugi.R
import fr.forum_thalie.tsumugi.planning.Planning import fr.forum_thalie.tsumugi.planning.Planning
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
import fr.forum_thalie.tsumugi.ui.songs.queuelp.LastPlayedFragment
import fr.forum_thalie.tsumugi.ui.songs.queuelp.SongAdaptater
class ProgrammeFragment : Fragment() { class ProgrammeDayFragment(day: String) : Fragment() {
private lateinit var recyclerView: RecyclerView private lateinit var recyclerView: RecyclerView
private lateinit var viewAdapter: RecyclerView.Adapter<*> private lateinit var viewAdapter: RecyclerView.Adapter<*>
@ -25,9 +22,10 @@ class ProgrammeFragment : Fragment() {
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
// Inflate the layout for this fragment // Inflate the layout for this fragment
val root = inflater.inflate(R.layout.fragment_programme, container, false) val root = inflater.inflate(R.layout.fragment_programme_day, container, false)
viewManager = LinearLayoutManager(context) viewManager = LinearLayoutManager(context)
viewAdapter = ProgrammeAdapter(Planning.instance.programmes) viewAdapter =
ProgrammeAdapter(Planning.instance.programmes)
recyclerView = root.findViewById<RecyclerView>(R.id.programme_recycler).apply { recyclerView = root.findViewById<RecyclerView>(R.id.programme_recycler).apply {
// use this setting to improve performance if you know that changes // use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView // in content do not change the layout size of the RecyclerView
@ -50,6 +48,7 @@ class ProgrammeFragment : Fragment() {
companion object { companion object {
@JvmStatic @JvmStatic
fun newInstance() = ProgrammeFragment() fun newInstance(day: String) =
ProgrammeDayFragment(day)
} }
} }

View File

@ -0,0 +1,45 @@
package fr.forum_thalie.tsumugi.ui.programme
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
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.ui.APagerAdapter
import fr.forum_thalie.tsumugi.weekdays
class ProgrammeFragment : Fragment() {
private lateinit var adapter : APagerAdapter
private lateinit var root: View
private lateinit var viewPager: ViewPager
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
root = inflater.inflate(R.layout.fragment_programme, container, false)
viewPager = root.findViewById(R.id.dayTabPager)
adapter = APagerAdapter(childFragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
// You can add more fragments to the adapter, to display more information (for example with R/a/dio, queue, request, faves...)
weekdays.forEach {
adapter.addFragment(ProgrammeDayFragment.newInstance(it), it)
}
viewPager.adapter = adapter
val tabLayout : TabLayout = root.findViewById(R.id.dayTabLayout)
tabLayout.setupWithViewPager(viewPager)
Log.d(tag, "SongFragment view created")
return root
}
}

View File

@ -10,12 +10,13 @@ import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import fr.forum_thalie.tsumugi.R import fr.forum_thalie.tsumugi.R
import fr.forum_thalie.tsumugi.ui.songs.programme.ProgrammeFragment import fr.forum_thalie.tsumugi.ui.APagerAdapter
import fr.forum_thalie.tsumugi.ui.programme.ProgrammeDayFragment
import fr.forum_thalie.tsumugi.ui.songs.queuelp.LastPlayedFragment import fr.forum_thalie.tsumugi.ui.songs.queuelp.LastPlayedFragment
class SongsFragment : Fragment() { class SongsFragment : Fragment() {
private lateinit var adapter : SongsPagerAdapter private lateinit var adapter : APagerAdapter
private lateinit var root: View private lateinit var root: View
private lateinit var viewPager: ViewPager private lateinit var viewPager: ViewPager
@ -27,11 +28,12 @@ class SongsFragment : Fragment() {
root = inflater.inflate(R.layout.fragment_songs, container, false) root = inflater.inflate(R.layout.fragment_songs, container, false)
viewPager = root.findViewById(R.id.tabPager) viewPager = root.findViewById(R.id.tabPager)
adapter = SongsPagerAdapter(childFragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) adapter = APagerAdapter(
childFragmentManager,
FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
)
adapter.addFragment(LastPlayedFragment.newInstance(), getString(R.string.lp)) adapter.addFragment(LastPlayedFragment.newInstance(), getString(R.string.lp))
// You can add more fragments to the adapter, to display more information (for example with R/a/dio, queue, request, faves...) // You can add more fragments to the adapter, to display more information (for example with R/a/dio, queue, request, faves...)
adapter.addFragment(ProgrammeFragment.newInstance(), getString(R.string.programme))
viewPager.adapter = adapter viewPager.adapter = adapter

View File

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="#FFFFFF"
android:alpha="0.8">
<path
android:fillColor="#FF000000"
android:pathData="M19,3h-1L18,1h-2v2L8,3L8,1L6,1v2L5,3c-1.11,0 -1.99,0.9 -1.99,2L3,19c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM19,19L5,19L5,8h14v11zM7,10h5v5L7,15z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

View File

@ -1,19 +1,45 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <androidx.appcompat.widget.LinearLayoutCompat
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent" >
android:layout_margin="8dp"
tools:context=".ui.songs.programme.ProgrammeFragment">
<androidx.recyclerview.widget.RecyclerView
<androidx.viewpager.widget.ViewPager
android:id="@+id/dayTabPager"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:id="@+id/programme_recycler" app:layout_constraintEnd_toEndOf="parent"
android:scrollbars="vertical" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<com.google.android.material.tabs.TabLayout
android:id="@+id/dayTabLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:tabMode="scrollable"
app:tabGravity="center"
app:tabIndicatorFullWidth="true"
android:paddingBottom="8dp"
> >
<!--
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Last played" />
</androidx.recyclerview.widget.RecyclerView> <com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Queue" />
</LinearLayout> <com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Request" />
-->
</com.google.android.material.tabs.TabLayout>
</androidx.viewpager.widget.ViewPager>
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
tools:context=".ui.programme.ProgrammeDayFragment">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/programme_recycler"
android:scrollbars="vertical"
>
</androidx.recyclerview.widget.RecyclerView>
</LinearLayout>

View File

@ -16,27 +16,32 @@
<TextView <TextView
android:id="@+id/programme_start" android:id="@+id/programme_start"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/programme_days" app:layout_constraintTop_toBottomOf="@id/programme_days"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
android:gravity="start"
/> />
<TextView <TextView
android:id="@+id/programme_name" android:id="@+id/programme_name"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/programme_start" app:layout_constraintTop_toTopOf="@id/programme_start"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toEndOf="@id/programme_start"
app:layout_constraintEnd_toEndOf="parent"
android:gravity="end"
android:textAlignment="textEnd"
/> />
<TextView <TextView
android:id="@+id/programme_end" android:id="@+id/programme_end"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/programme_name" app:layout_constraintTop_toBottomOf="@id/programme_start"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="@id/programme_start"
app:layout_constraintBottom_toBottomOf="parent" android:gravity="start"
/> />
<View <View

View File

@ -16,5 +16,10 @@
android:icon="@drawable/ic_newspaper" android:icon="@drawable/ic_newspaper"
android:title="@string/title_news"/> android:title="@string/title_news"/>
<item
android:id="@+id/navigation_programme"
android:icon="@drawable/ic_programme"
android:title="@string/programme"/>
</menu> </menu>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation_programme"
app:startDestination="@id/fragment_programme"
tools:ignore="UnusedNavigation">
<fragment
android:id="@+id/fragment_programme"
android:name="fr.forum_thalie.tsumugi.ui.programme.ProgrammeFragment"
android:label="@string/title_programme" />
</navigation>

View File

@ -4,6 +4,7 @@
<string name="title_queue_lp">Songs</string> <string name="title_queue_lp">Songs</string>
<string name="title_chat">Chat</string> <string name="title_chat">Chat</string>
<string name="title_news">News</string> <string name="title_news">News</string>
<string name="title_programme">Programme</string>
<string name="now_playing_notification_title_template">Now playing: %1$s</string> <string name="now_playing_notification_title_template">Now playing: %1$s</string>