Răsfoiți Sursa

Resolve merge conflicts

Andreas E 4 ani în urmă
părinte
comite
7f88b56d8b

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

@@ -6,6 +6,7 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.core.content.ContextCompat
+import androidx.core.view.isVisible
 import androidx.recyclerview.widget.RecyclerView
 import com.bumptech.glide.load.engine.DiskCacheStrategy
 import eu.kanade.tachiyomi.R
@@ -39,8 +40,8 @@ class MangaInfoHeaderAdapter(
 ) :
     RecyclerView.Adapter<MangaInfoHeaderAdapter.HeaderViewHolder>() {
 
-    private var manga: Manga? = null
-    private var source: Source? = null
+    private var manga: Manga = controller.presenter.manga
+    private var source: Source = controller.presenter.source
     private var numChapters: Int? = null
 
     private val scope = CoroutineScope(Job() + Dispatchers.Main)
@@ -65,7 +66,7 @@ class MangaInfoHeaderAdapter(
      * @param manga manga object containing information about manga.
      * @param source the source of the manga.
      */
-    fun update(manga: Manga, source: Source?) {
+    fun update(manga: Manga, source: Source) {
         this.manga = manga
         this.source = source
 
@@ -80,10 +81,6 @@ class MangaInfoHeaderAdapter(
 
     inner class HeaderViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
         fun bind() {
-            if (manga == null) {
-                return
-            }
-
             // For rounded corners
             binding.mangaCover.clipToOutline = true
 
@@ -143,6 +140,21 @@ class MangaInfoHeaderAdapter(
                 }
                 .launchIn(scope)
 
+            binding.mangaArtist.longClicks()
+                .onEach {
+                    controller.activity?.copyToClipboard(
+                        binding.mangaArtist.text.toString(),
+                        binding.mangaArtist.text.toString()
+                    )
+                }
+                .launchIn(scope)
+
+            binding.mangaArtist.clicks()
+                .onEach {
+                    controller.performGlobalSearch(binding.mangaArtist.text.toString())
+                }
+                .launchIn(scope)
+
             binding.mangaSummary.longClicks()
                 .onEach {
                     controller.activity?.copyToClipboard(
@@ -161,7 +173,7 @@ class MangaInfoHeaderAdapter(
                 }
                 .launchIn(scope)
 
-            setMangaInfo(manga!!, source)
+            setMangaInfo(manga, source)
             setChapterInfo()
         }
 
@@ -172,19 +184,25 @@ class MangaInfoHeaderAdapter(
          * @param source the source of the manga.
          */
         private fun setMangaInfo(manga: Manga, source: Source?) {
-            // update full title TextView.
+            // Update full title TextView.
             binding.mangaFullTitle.text = if (manga.title.isBlank()) {
                 view.context.getString(R.string.unknown)
             } else {
                 manga.title
             }
 
-            // Update author/artist TextView.
-            val authors = listOf(manga.author, manga.artist).filter { !it.isNullOrBlank() }.distinct()
-            binding.mangaAuthor.text = if (authors.isEmpty()) {
+            // Update author TextView.
+            binding.mangaAuthor.text = if (manga.author.isNullOrBlank()) {
                 view.context.getString(R.string.unknown)
             } else {
-                authors.joinToString(", ")
+                manga.author
+            }
+
+            // Update artist TextView.
+            val hasArtist = !manga.artist.isNullOrBlank() && manga.artist != manga.author
+            binding.mangaArtist.isVisible = hasArtist
+            if (hasArtist) {
+                binding.mangaArtist.text = manga.artist
             }
 
             // If manga source is known update source TextView.
@@ -215,20 +233,16 @@ class MangaInfoHeaderAdapter(
             setFavoriteButtonState(manga.favorite)
 
             // Set cover if it wasn't already.
-            val mangaThumbnail = manga.toMangaThumbnail()
-
-            GlideApp.with(view.context)
-                .load(mangaThumbnail)
-                .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
-                .centerCrop()
-                .into(binding.mangaCover)
-
-            binding.backdrop?.let {
-                GlideApp.with(view.context)
-                    .load(mangaThumbnail)
-                    .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
-                    .centerCrop()
-                    .into(it)
+            if (binding.mangaCover.drawable == null) {
+                val mangaThumbnail = manga.toMangaThumbnail()
+                listOf(binding.mangaCover, binding.backdrop)
+                    .forEach {
+                        GlideApp.with(view.context)
+                            .load(mangaThumbnail)
+                            .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
+                            .centerCrop()
+                            .into(it)
+                    }
             }
 
             // Manga info section

+ 16 - 9
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt

@@ -80,16 +80,23 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
             }
         })
         pager.tapListener = { event ->
-            val positionX = event.x
             val tappingInverted = config.tappingInverted
-
-            val leftSideTap = positionX < pager.width * 0.33f && config.tappingEnabled
-            val rightSideTap = positionX > pager.width * 0.66f && config.tappingEnabled
-
-            when {
-                leftSideTap && !tappingInverted || rightSideTap && tappingInverted -> moveLeft()
-                rightSideTap && !tappingInverted || leftSideTap && tappingInverted -> moveRight()
-                else -> activity.toggleMenu()
+            if (this is VerticalPagerViewer) {
+                val positionY = event.y
+                when {
+                    positionY < pager.height * 0.33f && config.tappingEnabled -> moveLeft()
+                    positionY > pager.height * 0.66f && config.tappingEnabled -> moveRight()
+                    else -> activity.toggleMenu()
+                }
+            } else {
+                val positionX = event.x
+                val leftSideTap = positionX < pager.width * 0.33f && config.tappingEnabled
+                val rightSideTap = positionX > pager.width * 0.66f && config.tappingEnabled
+                when {
+                    leftSideTap && !tappingInverted || rightSideTap && tappingInverted -> moveLeft()
+                    rightSideTap && !tappingInverted || leftSideTap && tappingInverted -> moveRight()
+                    else -> activity.toggleMenu()
+                }
             }
         }
         pager.longTapListener = f@{

+ 1 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt

@@ -24,6 +24,7 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() {
         private set
 
     var currentChapter: ReaderChapter? = null
+
     /**
      * Updates this adapter with the given [chapters]. It handles setting a few pages of the
      * next/previous chapter to allow seamless transitions and inverting the pages if the viewer

+ 2 - 5
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt

@@ -93,13 +93,10 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
             }
         })
         recycler.tapListener = { event ->
-            val positionX = event.rawX
             val positionY = event.rawY
             when {
-                positionY < recycler.height * 0.25 && config.tappingEnabled -> scrollUp()
-                positionY > recycler.height * 0.75 && config.tappingEnabled -> scrollDown()
-                positionX < recycler.width * 0.33 && config.tappingEnabled -> scrollUp()
-                positionX > recycler.width * 0.66 && config.tappingEnabled -> scrollDown()
+                positionY < recycler.height * 0.33f && config.tappingEnabled -> scrollUp()
+                positionY > recycler.height * 0.66f && config.tappingEnabled -> scrollDown()
                 else -> activity.toggleMenu()
             }
         }

+ 0 - 238
app/src/main/res/layout-land/manga_info_header.xml

@@ -1,238 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<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="wrap_content"
-    android:orientation="vertical"
-    tools:context=".ui.browse.source.browse.BrowseSourceController">
-
-    <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="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"
-                style="@style/TextAppearance.Medium.Title"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:maxLines="3"
-                android:text="@string/manga_info_full_title_label"
-                android:textIsSelectable="false"
-                app:autoSizeMaxTextSize="20sp"
-                app:autoSizeMinTextSize="12sp"
-                app:autoSizeStepGranularity="2sp"
-                app:autoSizeTextType="uniform"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toTopOf="parent" />
-
-            <TextView
-                android:id="@+id/manga_author"
-                style="@style/TextAppearance.Regular.Body1.Secondary"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dp"
-                android:textIsSelectable="false"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@+id/manga_full_title"
-                tools:text="Author" />
-
-            <TextView
-                android:id="@+id/manga_status"
-                style="@style/TextAppearance.Regular.Body1.Secondary"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dp"
-                android:ellipsize="end"
-                android:maxLines="1"
-                android:textIsSelectable="false"
-                app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@+id/manga_author" />
-
-            <TextView
-                android:id="@+id/manga_source"
-                style="@style/TextAppearance.Regular.Body1.Secondary"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:ellipsize="end"
-                android:maxLines="1"
-                android:textIsSelectable="false"
-                app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@+id/manga_status" />
-
-        </androidx.constraintlayout.widget.ConstraintLayout>
-
-    </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">
-
-        <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">
-
-            <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: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>

+ 17 - 17
app/src/main/res/layout/manga_info_header.xml

@@ -55,10 +55,11 @@
                 app:layout_constraintTop_toTopOf="parent"
                 tools:src="@mipmap/ic_launcher" />
 
-            <androidx.constraintlayout.widget.ConstraintLayout
+            <LinearLayout
                 android:id="@+id/manga_info_section"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
+                android:orientation="vertical"
                 android:layout_marginStart="0dp"
                 android:layout_marginTop="16dp"
                 android:layout_marginEnd="16dp"
@@ -78,47 +79,46 @@
                     app:autoSizeMaxTextSize="20sp"
                     app:autoSizeMinTextSize="12sp"
                     app:autoSizeStepGranularity="2sp"
-                    app:autoSizeTextType="uniform"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toTopOf="parent" />
+                    app:autoSizeTextType="uniform" />
 
                 <TextView
                     android:id="@+id/manga_author"
                     style="@style/TextAppearance.Regular.Body1.Secondary"
-                    android:layout_width="0dp"
+                    android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:textIsSelectable="false"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toBottomOf="@+id/manga_full_title"
                     tools:text="Author" />
 
+                <TextView
+                    android:id="@+id/manga_artist"
+                    style="@style/TextAppearance.Regular.Body1.Secondary"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textIsSelectable="false"
+                    tools:text="Artist" />
+
                 <TextView
                     android:id="@+id/manga_status"
                     style="@style/TextAppearance.Regular.Body1.Secondary"
-                    android:layout_width="0dp"
+                    android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="8dp"
                     android:ellipsize="end"
                     android:maxLines="1"
                     android:textIsSelectable="false"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toBottomOf="@+id/manga_author" />
+                    tools:text="Status" />
 
                 <TextView
                     android:id="@+id/manga_source"
                     style="@style/TextAppearance.Regular.Body1.Secondary"
-                    android:layout_width="0dp"
+                    android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:ellipsize="end"
                     android:maxLines="1"
                     android:textIsSelectable="false"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toBottomOf="@+id/manga_status" />
+                    tools:text="Source" />
 
-            </androidx.constraintlayout.widget.ConstraintLayout>
+            </LinearLayout>
 
         </androidx.constraintlayout.widget.ConstraintLayout>
 

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

@@ -464,7 +464,6 @@
     <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>