Sfoglia il codice sorgente

created dedicated tabPager for programme

yattoz 4 anni fa
parent
commit
3e51df6a87

+ 5 - 2
app/src/main/java/fr/forum_thalie/tsumugi/MainActivity.kt Vedi File

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

+ 0 - 1
app/src/main/java/fr/forum_thalie/tsumugi/planning/Programme.kt Vedi File

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

app/src/main/java/fr/forum_thalie/tsumugi/ui/songs/SongsPagerAdapter.kt → app/src/main/java/fr/forum_thalie/tsumugi/ui/APagerAdapter.kt Vedi File

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

app/src/main/java/fr/forum_thalie/tsumugi/ui/songs/programme/ProgrammeAdapter.kt → app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeAdapter.kt Vedi File

@@ -1,19 +1,13 @@
1
-package fr.forum_thalie.tsumugi.ui.songs.programme
1
+package fr.forum_thalie.tsumugi.ui.programme
2 2
 
3 3
 import android.annotation.SuppressLint
4
-import android.util.Log
5 4
 import android.view.LayoutInflater
6 5
 import android.view.ViewGroup
7 6
 import android.widget.TextView
8 7
 import androidx.constraintlayout.widget.ConstraintLayout
9 8
 import androidx.recyclerview.widget.RecyclerView
10 9
 import fr.forum_thalie.tsumugi.R
11
-import fr.forum_thalie.tsumugi.colorBlue
12
-import fr.forum_thalie.tsumugi.colorWhited
13 10
 import fr.forum_thalie.tsumugi.planning.Programme
14
-import fr.forum_thalie.tsumugi.tag
15
-import kotlinx.android.synthetic.main.programme_view.view.*
16
-import kotlinx.android.synthetic.main.song_view.view.*
17 11
 
18 12
 class ProgrammeAdapter(private val dataSet: ArrayList<Programme>
19 13
     /*,
@@ -30,7 +24,9 @@ class ProgrammeAdapter(private val dataSet: ArrayList<Programme>
30 24
         // create a new view
31 25
         val view = LayoutInflater.from(parent.context)
32 26
             .inflate(R.layout.programme_view, parent, false) as ConstraintLayout
33
-        return MyViewHolder(view)
27
+        return MyViewHolder(
28
+            view
29
+        )
34 30
     }
35 31
 
36 32
     // Replace the contents of a view (invoked by the layout manager)

app/src/main/java/fr/forum_thalie/tsumugi/ui/songs/programme/ProgrammeFragment.kt → app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeDayFragment.kt Vedi File

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

+ 45 - 0
app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeFragment.kt Vedi File

@@ -0,0 +1,45 @@
1
+package fr.forum_thalie.tsumugi.ui.programme
2
+
3
+import android.os.Bundle
4
+import android.util.Log
5
+import android.view.LayoutInflater
6
+import android.view.View
7
+import android.view.ViewGroup
8
+import androidx.fragment.app.Fragment
9
+import androidx.fragment.app.FragmentPagerAdapter
10
+import androidx.viewpager.widget.ViewPager
11
+import com.google.android.material.tabs.TabLayout
12
+import fr.forum_thalie.tsumugi.R
13
+import fr.forum_thalie.tsumugi.ui.APagerAdapter
14
+import fr.forum_thalie.tsumugi.weekdays
15
+
16
+class ProgrammeFragment : Fragment() {
17
+
18
+    private lateinit var adapter : APagerAdapter
19
+    private lateinit var root: View
20
+    private lateinit var viewPager: ViewPager
21
+
22
+    override fun onCreateView(
23
+        inflater: LayoutInflater,
24
+        container: ViewGroup?,
25
+        savedInstanceState: Bundle?
26
+    ): View? {
27
+
28
+        root = inflater.inflate(R.layout.fragment_programme, container, false)
29
+        viewPager = root.findViewById(R.id.dayTabPager)
30
+        adapter = APagerAdapter(childFragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
31
+        // You can add more fragments to the adapter, to display more information (for example with R/a/dio, queue, request, faves...)
32
+        weekdays.forEach {
33
+            adapter.addFragment(ProgrammeDayFragment.newInstance(it), it)
34
+        }
35
+
36
+        viewPager.adapter = adapter
37
+
38
+        val tabLayout : TabLayout = root.findViewById(R.id.dayTabLayout)
39
+        tabLayout.setupWithViewPager(viewPager)
40
+        Log.d(tag, "SongFragment view created")
41
+
42
+        return root
43
+    }
44
+
45
+}

+ 7 - 5
app/src/main/java/fr/forum_thalie/tsumugi/ui/songs/SongsFragment.kt Vedi File

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

+ 11 - 0
app/src/main/res/drawable-anydpi/ic_programme.xml Vedi File

@@ -0,0 +1,11 @@
1
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
2
+    android:width="24dp"
3
+    android:height="24dp"
4
+    android:viewportWidth="24"
5
+    android:viewportHeight="24"
6
+    android:tint="#FFFFFF"
7
+    android:alpha="0.8">
8
+    <path
9
+        android:fillColor="#FF000000"
10
+        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"/>
11
+</vector>

BIN
app/src/main/res/drawable-hdpi/ic_programme.png Vedi File


BIN
app/src/main/res/drawable-mdpi/ic_programme.png Vedi File


BIN
app/src/main/res/drawable-xhdpi/ic_programme.png Vedi File


BIN
app/src/main/res/drawable-xxhdpi/ic_programme.png Vedi File


+ 37 - 11
app/src/main/res/layout/fragment_programme.xml Vedi File

@@ -1,19 +1,45 @@
1 1
 <?xml version="1.0" encoding="utf-8"?>
2
-<LinearLayout
2
+<androidx.appcompat.widget.LinearLayoutCompat
3 3
     xmlns:android="http://schemas.android.com/apk/res/android"
4
-    xmlns:tools="http://schemas.android.com/tools"
4
+    xmlns:app="http://schemas.android.com/apk/res-auto"
5 5
     android:layout_width="match_parent"
6
-    android:layout_height="match_parent"
7
-    android:layout_margin="8dp"
8
-    tools:context=".ui.songs.programme.ProgrammeFragment">
6
+    android:layout_height="match_parent" >
9 7
 
10
-    <androidx.recyclerview.widget.RecyclerView
8
+
9
+    <androidx.viewpager.widget.ViewPager
10
+        android:id="@+id/dayTabPager"
11 11
         android:layout_width="match_parent"
12 12
         android:layout_height="match_parent"
13
-        android:id="@+id/programme_recycler"
14
-        android:scrollbars="vertical"
15
-        >
13
+        app:layout_constraintEnd_toEndOf="parent"
14
+        app:layout_constraintStart_toStartOf="parent"
15
+        app:layout_constraintTop_toTopOf="parent" >
16
+
17
+        <com.google.android.material.tabs.TabLayout
18
+            android:id="@+id/dayTabLayout"
19
+            android:layout_width="wrap_content"
20
+            android:layout_height="wrap_content"
21
+            app:tabMode="scrollable"
22
+            app:tabGravity="center"
23
+            app:tabIndicatorFullWidth="true"
24
+            android:paddingBottom="8dp"
25
+            >
26
+            <!--
27
+            <com.google.android.material.tabs.TabItem
28
+                android:layout_width="wrap_content"
29
+                android:layout_height="wrap_content"
30
+                android:text="Last played" />
31
+
32
+            <com.google.android.material.tabs.TabItem
33
+                android:layout_width="wrap_content"
34
+                android:layout_height="wrap_content"
35
+                android:text="Queue" />
16 36
 
17
-    </androidx.recyclerview.widget.RecyclerView>
37
+            <com.google.android.material.tabs.TabItem
38
+                android:layout_width="wrap_content"
39
+                android:layout_height="wrap_content"
40
+                android:text="Request" />
41
+            -->
42
+        </com.google.android.material.tabs.TabLayout>
43
+    </androidx.viewpager.widget.ViewPager>
18 44
 
19
-</LinearLayout>
45
+</androidx.appcompat.widget.LinearLayoutCompat>

+ 19 - 0
app/src/main/res/layout/fragment_programme_day.xml Vedi File

@@ -0,0 +1,19 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<LinearLayout
3
+    xmlns:android="http://schemas.android.com/apk/res/android"
4
+    xmlns:tools="http://schemas.android.com/tools"
5
+    android:layout_width="match_parent"
6
+    android:layout_height="match_parent"
7
+    android:layout_margin="8dp"
8
+    tools:context=".ui.programme.ProgrammeDayFragment">
9
+
10
+    <androidx.recyclerview.widget.RecyclerView
11
+        android:layout_width="match_parent"
12
+        android:layout_height="match_parent"
13
+        android:id="@+id/programme_recycler"
14
+        android:scrollbars="vertical"
15
+        >
16
+
17
+    </androidx.recyclerview.widget.RecyclerView>
18
+
19
+</LinearLayout>

+ 13 - 8
app/src/main/res/layout/programme_view.xml Vedi File

@@ -16,27 +16,32 @@
16 16
 
17 17
     <TextView
18 18
         android:id="@+id/programme_start"
19
-        android:layout_width="match_parent"
19
+        android:layout_width="wrap_content"
20 20
         android:layout_height="wrap_content"
21 21
         app:layout_constraintTop_toBottomOf="@id/programme_days"
22 22
         app:layout_constraintStart_toStartOf="parent"
23
+        android:gravity="start"
23 24
         />
24 25
 
25 26
     <TextView
26 27
         android:id="@+id/programme_name"
27
-        android:layout_width="match_parent"
28
+        android:layout_width="0dp"
28 29
         android:layout_height="wrap_content"
29
-        app:layout_constraintTop_toBottomOf="@id/programme_start"
30
-        app:layout_constraintStart_toStartOf="parent"
30
+        app:layout_constraintTop_toTopOf="@id/programme_start"
31
+        app:layout_constraintStart_toEndOf="@id/programme_start"
32
+        app:layout_constraintEnd_toEndOf="parent"
33
+        android:gravity="end"
34
+        android:textAlignment="textEnd"
31 35
         />
32 36
 
33 37
     <TextView
34 38
         android:id="@+id/programme_end"
35
-        android:layout_width="match_parent"
39
+        android:layout_width="wrap_content"
36 40
         android:layout_height="wrap_content"
37
-        app:layout_constraintTop_toBottomOf="@id/programme_name"
38
-        app:layout_constraintStart_toStartOf="parent"
39
-        app:layout_constraintBottom_toBottomOf="parent"
41
+        app:layout_constraintTop_toBottomOf="@id/programme_start"
42
+        app:layout_constraintStart_toStartOf="@id/programme_start"
43
+        android:gravity="start"
44
+
40 45
         />
41 46
 
42 47
     <View

+ 5 - 0
app/src/main/res/menu/bottom_nav_menu.xml Vedi File

@@ -16,5 +16,10 @@
16 16
         android:icon="@drawable/ic_newspaper"
17 17
         android:title="@string/title_news"/>
18 18
 
19
+    <item
20
+        android:id="@+id/navigation_programme"
21
+        android:icon="@drawable/ic_programme"
22
+        android:title="@string/programme"/>
23
+
19 24
 
20 25
 </menu>

+ 14 - 0
app/src/main/res/navigation/navigation_programme.xml Vedi File

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

+ 1 - 0
app/src/main/res/values/strings.xml Vedi File

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