mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Show scrollable single line of genres when compacted
This commit is contained in:
		@@ -11,7 +11,6 @@ import android.view.ViewGroup
 | 
			
		||||
import android.widget.Toast
 | 
			
		||||
import androidx.core.content.ContextCompat
 | 
			
		||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
 | 
			
		||||
import com.google.android.material.chip.Chip
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.Category
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.Manga
 | 
			
		||||
@@ -37,8 +36,8 @@ import eu.kanade.tachiyomi.ui.webview.WebViewActivity
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.truncateCenter
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.toast
 | 
			
		||||
import eu.kanade.tachiyomi.util.view.gone
 | 
			
		||||
import eu.kanade.tachiyomi.util.view.setChips
 | 
			
		||||
import eu.kanade.tachiyomi.util.view.snack
 | 
			
		||||
import eu.kanade.tachiyomi.util.view.toggle
 | 
			
		||||
import eu.kanade.tachiyomi.util.view.visible
 | 
			
		||||
import eu.kanade.tachiyomi.util.view.visibleIf
 | 
			
		||||
import kotlinx.coroutines.flow.launchIn
 | 
			
		||||
@@ -259,16 +258,10 @@ class MangaInfoController(private val fromSource: Boolean = false) :
 | 
			
		||||
 | 
			
		||||
            // Update genres list
 | 
			
		||||
            if (!manga.genre.isNullOrBlank()) {
 | 
			
		||||
                binding.mangaGenresTags.removeAllViews()
 | 
			
		||||
 | 
			
		||||
                manga.getGenres()?.forEach { genre ->
 | 
			
		||||
                    val chip = Chip(view.context).apply {
 | 
			
		||||
                        text = genre
 | 
			
		||||
                        setOnClickListener { performSearch(genre) }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    binding.mangaGenresTags.addView(chip)
 | 
			
		||||
                }
 | 
			
		||||
                binding.mangaGenresTagsCompactChips.setChips(manga.getGenres(), this::performSearch)
 | 
			
		||||
                binding.mangaGenresTagsFullChips.setChips(manga.getGenres(), this::performSearch)
 | 
			
		||||
            } else {
 | 
			
		||||
                binding.mangaGenresTagsWrapper.gone()
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Handle showing more or less info
 | 
			
		||||
@@ -290,7 +283,7 @@ class MangaInfoController(private val fromSource: Boolean = false) :
 | 
			
		||||
    private fun hideMangaInfo() {
 | 
			
		||||
        binding.mangaSummaryLabel.gone()
 | 
			
		||||
        binding.mangaSummary.gone()
 | 
			
		||||
        binding.mangaGenresTags.gone()
 | 
			
		||||
        binding.mangaGenresTagsWrapper.gone()
 | 
			
		||||
        binding.mangaInfoToggle.gone()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -317,7 +310,8 @@ class MangaInfoController(private val fromSource: Boolean = false) :
 | 
			
		||||
                    null
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        binding.mangaGenresTags.toggle()
 | 
			
		||||
        binding.mangaGenresTagsCompact.visibleIf { isExpanded }
 | 
			
		||||
        binding.mangaGenresTagsFullChips.visibleIf { !isExpanded }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,8 @@ import android.widget.TextView
 | 
			
		||||
import androidx.annotation.MenuRes
 | 
			
		||||
import androidx.appcompat.widget.PopupMenu
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView
 | 
			
		||||
import com.google.android.material.chip.Chip
 | 
			
		||||
import com.google.android.material.chip.ChipGroup
 | 
			
		||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
 | 
			
		||||
import com.google.android.material.snackbar.Snackbar
 | 
			
		||||
import com.kennyc.textdrawable.ColorGenerator
 | 
			
		||||
@@ -119,3 +121,22 @@ fun ExtendedFloatingActionButton.shrinkOnScroll(recycler: RecyclerView) {
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Replaces chips in a ChipGroup.
 | 
			
		||||
 *
 | 
			
		||||
 * @param items List of strings that are shown as individual chips.
 | 
			
		||||
 * @param onClick Optional on click listener for each chip.
 | 
			
		||||
 */
 | 
			
		||||
fun ChipGroup.setChips(items: List<String>?, onClick: (item: String) -> Unit = {}) {
 | 
			
		||||
    removeAllViews()
 | 
			
		||||
 | 
			
		||||
    items?.forEach { item ->
 | 
			
		||||
        val chip = Chip(context).apply {
 | 
			
		||||
            text = item
 | 
			
		||||
            setOnClickListener { onClick(item) }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        addView(chip)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -266,25 +266,48 @@
 | 
			
		||||
                android:focusable="true"
 | 
			
		||||
                android:maxLines="3"
 | 
			
		||||
                android:textIsSelectable="false"
 | 
			
		||||
                app:layout_constraintBottom_toTopOf="@id/manga_genres_tags"
 | 
			
		||||
                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" />
 | 
			
		||||
 | 
			
		||||
            <com.google.android.material.chip.ChipGroup
 | 
			
		||||
                android:id="@+id/manga_genres_tags"
 | 
			
		||||
            <FrameLayout
 | 
			
		||||
                android:id="@+id/manga_genres_tags_wrapper"
 | 
			
		||||
                android:layout_width="match_parent"
 | 
			
		||||
                android:layout_height="wrap_content"
 | 
			
		||||
                android:layout_marginStart="16dp"
 | 
			
		||||
                android:layout_marginTop="8dp"
 | 
			
		||||
                android:layout_marginEnd="16dp"
 | 
			
		||||
                android:layout_marginBottom="8dp"
 | 
			
		||||
                android:visibility="gone"
 | 
			
		||||
                app:chipSpacingHorizontal="4dp"
 | 
			
		||||
                app:layout_constrainedHeight="true"
 | 
			
		||||
                app:layout_constraintEnd_toEndOf="parent"
 | 
			
		||||
                app:layout_constraintStart_toStartOf="parent"
 | 
			
		||||
                app:layout_constraintTop_toBottomOf="@id/manga_summary" />
 | 
			
		||||
                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">
 | 
			
		||||
 | 
			
		||||
                    <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"
 | 
			
		||||
@@ -299,7 +322,7 @@
 | 
			
		||||
                android:textSize="12sp"
 | 
			
		||||
                app:layout_constraintEnd_toEndOf="parent"
 | 
			
		||||
                app:layout_constraintStart_toStartOf="parent"
 | 
			
		||||
                app:layout_constraintTop_toBottomOf="@id/manga_genres_tags" />
 | 
			
		||||
                app:layout_constraintTop_toBottomOf="@id/manga_genres_tags_wrapper" />
 | 
			
		||||
 | 
			
		||||
        </androidx.constraintlayout.widget.ConstraintLayout>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user