浏览代码

More manga info header tweaks

arkon 4 年之前
父节点
当前提交
52e846f3b6

+ 3 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/MangaInfoChaptersController.kt

@@ -515,6 +515,9 @@ class MangaInfoChaptersController(private val fromSource: Boolean = false) :
             fetchChaptersFromSource()
         }
 
+        val header = headerAdapter ?: return
+        header.setNumChapters(chapters.size)
+
         val adapter = chaptersAdapter ?: return
         adapter.updateDataSet(chapters)
 

+ 17 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/MangaInfoHeaderAdapter.kt

@@ -41,6 +41,7 @@ class MangaInfoHeaderAdapter(
 
     private var manga: Manga? = null
     private var source: Source? = null
+    private var numChapters: Int? = null
 
     private val scope = CoroutineScope(Job() + Dispatchers.Main)
     private lateinit var binding: MangaInfoHeaderBinding
@@ -71,6 +72,12 @@ class MangaInfoHeaderAdapter(
         notifyDataSetChanged()
     }
 
+    fun setNumChapters(numChapters: Int) {
+        this.numChapters = numChapters
+
+        notifyDataSetChanged()
+    }
+
     inner class HeaderViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
         fun bind() {
             if (manga == null) {
@@ -155,6 +162,7 @@ class MangaInfoHeaderAdapter(
                 .launchIn(scope)
 
             setMangaInfo(manga!!, source)
+            setChapterInfo()
         }
 
         /**
@@ -316,5 +324,14 @@ class MangaInfoHeaderAdapter(
                 isChecked = isFavorite
             }
         }
+
+        private fun setChapterInfo() {
+            // Chapters heading
+            binding.chaptersLabel.text = if (numChapters == null) {
+                view.context.getString(R.string.chapters)
+            } else {
+                view.context.resources.getQuantityString(R.plurals.manga_num_chapters, numChapters!!, numChapters)
+            }
+        }
     }
 }

+ 174 - 156
app/src/main/res/layout-land/manga_info_header.xml

@@ -1,38 +1,36 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout 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:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
     tools:context=".ui.browse.source.browse.BrowseSourceController">
 
-    <ImageView
-        android:id="@+id/manga_cover"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:layout_margin="16dp"
-        android:background="@drawable/rounded_rectangle"
-        android:contentDescription="@string/description_cover"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintDimensionRatio="h,3:2"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintVertical_bias="0.0"
-        tools:src="@mipmap/ic_launcher" />
-
-    <androidx.core.widget.NestedScrollView
-        android:id="@+id/info_scrollview"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toEndOf="@+id/manga_cover"
-        app:layout_constraintTop_toTopOf="parent">
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <ImageView
+            android:id="@+id/manga_cover"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_margin="16dp"
+            android:background="@drawable/rounded_rectangle"
+            android:contentDescription="@string/description_cover"
+            app:layout_constraintDimensionRatio="h,3:2"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintWidth_max="250dp"
+            tools:src="@mipmap/ic_launcher" />
 
         <androidx.constraintlayout.widget.ConstraintLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:padding="16dp">
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:padding="16dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@+id/manga_cover"
+            app:layout_constraintTop_toTopOf="parent">
 
             <TextView
                 android:id="@+id/manga_full_title"
@@ -85,136 +83,156 @@
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toBottomOf="@+id/manga_status" />
 
-            <LinearLayout
-                android:id="@+id/actions_bar"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="horizontal"
-                android:paddingTop="8dp"
-                android:paddingBottom="8dp"
-                app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/manga_source">
-
-                <com.google.android.material.button.MaterialButton
-                    android:id="@+id/btn_favorite"
-                    style="@style/Theme.Widget.Button.Icon"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="@string/add_to_library"
-                    app:icon="@drawable/ic_favorite_border_24dp" />
-
-                <com.google.android.material.button.MaterialButton
-                    android:id="@+id/btn_categories"
-                    style="@style/Theme.Widget.Button.Icon.Textless"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="8dp"
-                    android:contentDescription="@string/action_edit_categories"
-                    android:visibility="gone"
-                    app:icon="@drawable/ic_label_24dp"
-                    tools:visibility="visible" />
-
-                <com.google.android.material.button.MaterialButton
-                    android:id="@+id/btn_share"
-                    style="@style/Theme.Widget.Button.Icon.Textless"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="8dp"
-                    android:contentDescription="@string/action_share"
-                    android:visibility="gone"
-                    app:icon="@drawable/ic_share_24dp"
-                    tools:visibility="visible" />
-
-                <com.google.android.material.button.MaterialButton
-                    android:id="@+id/btn_webview"
-                    style="@style/Theme.Widget.Button.Icon.Textless"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="8dp"
-                    android:contentDescription="@string/action_open_in_web_view"
-                    android:visibility="gone"
-                    app:icon="@drawable/ic_public_24dp"
-                    tools:visibility="visible" />
-
-            </LinearLayout>
+        </androidx.constraintlayout.widget.ConstraintLayout>
 
-            <TextView
-                android:id="@+id/manga_summary_label"
-                style="@style/TextAppearance.Regular.SubHeading"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginBottom="8dp"
-                android:text="@string/manga_info_about_label"
-                android:textIsSelectable="false"
-                app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@+id/actions_bar" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <LinearLayout
+        android:id="@+id/actions_bar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:paddingStart="16dp"
+        android:paddingTop="8dp"
+        android:paddingEnd="16dp"
+        android:paddingBottom="8dp">
+
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/btn_favorite"
+            style="@style/Theme.Widget.Button.Icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/add_to_library"
+            app:icon="@drawable/ic_favorite_border_24dp" />
+
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/btn_categories"
+            style="@style/Theme.Widget.Button.Icon.Textless"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="8dp"
+            android:contentDescription="@string/action_edit_categories"
+            android:visibility="gone"
+            app:icon="@drawable/ic_label_24dp"
+            tools:visibility="visible" />
+
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/btn_share"
+            style="@style/Theme.Widget.Button.Icon.Textless"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="8dp"
+            android:contentDescription="@string/action_share"
+            android:visibility="gone"
+            app:icon="@drawable/ic_share_24dp"
+            tools:visibility="visible" />
+
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/btn_webview"
+            style="@style/Theme.Widget.Button.Icon.Textless"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="8dp"
+            android:contentDescription="@string/action_open_in_web_view"
+            android:visibility="gone"
+            app:icon="@drawable/ic_public_24dp"
+            tools:visibility="visible" />
+
+    </LinearLayout>
+
+    <TextView
+        android:id="@+id/manga_summary_label"
+        style="@style/TextAppearance.Regular.SubHeading"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="16dp"
+        android:text="@string/manga_info_about_label"
+        android:textIsSelectable="false" />
+
+    <TextView
+        android:id="@+id/manga_summary"
+        style="@style/TextAppearance.Regular.Body1.Secondary"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
+        android:clickable="true"
+        android:ellipsize="end"
+        android:focusable="true"
+        android:maxLines="3"
+        android:textIsSelectable="false"
+        tools:text="Summary" />
+
+    <FrameLayout
+        android:id="@+id/manga_genres_tags_wrapper"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        android:layout_marginBottom="8dp"
+        app:layout_constrainedHeight="true"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/manga_summary">
 
-            <TextView
-                android:id="@+id/manga_summary"
-                style="@style/TextAppearance.Regular.Body1.Secondary"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:clickable="true"
-                android:ellipsize="end"
-                android:focusable="true"
-                android:maxLines="3"
-                android:textIsSelectable="false"
-                app:layout_constraintBottom_toTopOf="@id/manga_genres_tags_wrapper"
-                app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/manga_summary_label"
-                tools:text="Summary" />
+        <com.google.android.material.chip.ChipGroup
+            android:id="@+id/manga_genres_tags_full_chips"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="16dp"
+            android:layout_marginEnd="16dp"
+            android:visibility="gone"
+            app:chipSpacingHorizontal="4dp" />
+
+        <HorizontalScrollView
+            android:id="@+id/manga_genres_tags_compact"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:requiresFadingEdge="horizontal">
 
-            <FrameLayout
-                android:id="@+id/manga_genres_tags_wrapper"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dp"
-                android:layout_marginBottom="8dp"
-                app:layout_constrainedHeight="true"
-                app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/manga_summary">
-
-                <com.google.android.material.chip.ChipGroup
-                    android:id="@+id/manga_genres_tags_full_chips"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:visibility="gone"
-                    app:chipSpacingHorizontal="4dp" />
-
-                <HorizontalScrollView
-                    android:id="@+id/manga_genres_tags_compact"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:requiresFadingEdge="horizontal">
-
-                    <com.google.android.material.chip.ChipGroup
-                        android:id="@+id/manga_genres_tags_compact_chips"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        app:chipSpacingHorizontal="4dp"
-                        app:singleLine="true" />
-
-                </HorizontalScrollView>
-
-            </FrameLayout>
-
-            <Button
-                android:id="@+id/manga_info_toggle"
-                style="@style/Theme.Widget.Button"
-                android:layout_width="match_parent"
+            <com.google.android.material.chip.ChipGroup
+                android:id="@+id/manga_genres_tags_compact_chips"
+                android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:text="@string/manga_info_expand"
-                android:textSize="12sp"
-                app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/manga_genres_tags_wrapper" />
-
-        </androidx.constraintlayout.widget.ConstraintLayout>
-
-    </androidx.core.widget.NestedScrollView>
-
-</androidx.constraintlayout.widget.ConstraintLayout>
+                android:paddingStart="16dp"
+                android:paddingEnd="16dp"
+                app:chipSpacingHorizontal="4dp"
+                app:singleLine="true" />
+
+        </HorizontalScrollView>
+
+    </FrameLayout>
+
+    <Button
+        android:id="@+id/manga_info_toggle"
+        style="@style/Theme.Widget.Button"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
+        android:text="@string/manga_info_expand"
+        android:textSize="12sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/manga_genres_tags_wrapper" />
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
+        android:paddingTop="16dp"
+        android:paddingBottom="8dp">
+
+        <TextView
+            android:id="@+id/chapters_label"
+            style="@style/TextAppearance.Regular.SubHeading"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/chapters"
+            android:textIsSelectable="false" />
+
+    </RelativeLayout>
+
+</LinearLayout>

+ 19 - 5
app/src/main/res/layout/manga_info_header.xml

@@ -5,7 +5,6 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
-    android:paddingBottom="8dp"
     tools:context=".ui.browse.source.browse.BrowseSourceController">
 
     <androidx.constraintlayout.widget.ConstraintLayout
@@ -40,7 +39,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:orientation="vertical"
-                app:layout_constraintGuide_percent="0.38" />
+                app:layout_constraintGuide_percent="0.33" />
 
             <ImageView
                 android:id="@+id/manga_cover"
@@ -88,7 +87,6 @@
                     style="@style/TextAppearance.Regular.Body1.Secondary"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
-                    android:layout_marginTop="8dp"
                     android:textIsSelectable="false"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
@@ -130,9 +128,7 @@
             android:layout_height="wrap_content"
             android:orientation="horizontal"
             android:paddingStart="16dp"
-            android:paddingTop="8dp"
             android:paddingEnd="16dp"
-            android:paddingBottom="8dp"
             app:layout_constraintTop_toBottomOf="@+id/manga_info">
 
             <com.google.android.material.button.MaterialButton
@@ -251,4 +247,22 @@
         android:text="@string/manga_info_expand"
         android:textSize="12sp" />
 
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
+        android:paddingTop="16dp"
+        android:paddingBottom="8dp">
+
+        <TextView
+            android:id="@+id/chapters_label"
+            style="@style/TextAppearance.Regular.SubHeading"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/chapters"
+            android:textIsSelectable="false" />
+
+    </RelativeLayout>
+
 </LinearLayout>

+ 5 - 0
app/src/main/res/values/strings.xml

@@ -463,6 +463,11 @@
     <string name="manga_info_about_label">About</string>
     <string name="manga_info_expand">Show more info</string>
     <string name="manga_info_collapse">Show less info</string>
+    <plurals name="manga_num_chapters">
+        <item quantity="zero">No chapters</item>
+        <item quantity="one">1 chapter</item>
+        <item quantity="other">%1$s chapters</item>
+    </plurals>
     <string name="delete_downloads_for_manga">Delete downloaded chapters?</string>
     <string name="copied_to_clipboard">Copied to clipboard:\n%1$s</string>
     <string name="source_not_installed">Source not installed: %1$s</string>