From a93edc184d2c9a4d2ca1f36b641fd7d90cd53a3b Mon Sep 17 00:00:00 2001 From: tom5079 Date: Thu, 23 Jul 2020 22:42:38 +0900 Subject: [PATCH] resolves #99 --- app/build.gradle | 1 + .../quaver/pupil/adapters/ThumbnailAdapter.kt | 4 +- .../pupil/adapters/ThumbnailPageAdapter.kt | 50 +++++++++++++++++++ .../quaver/pupil/ui/dialog/GalleryDialog.kt | 29 +++++++---- ...details.xml => dialog_gallery_details.xml} | 0 .../layout/dialog_gallery_dotindicator.xml | 34 +++++++++++++ 6 files changed, 106 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailPageAdapter.kt rename app/src/main/res/layout/{gallery_details.xml => dialog_gallery_details.xml} (100%) create mode 100644 app/src/main/res/layout/dialog_gallery_dotindicator.xml diff --git a/app/build.gradle b/app/build.gradle index 278327aa..fab88b2d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,7 @@ dependencies { implementation ("com.github.bumptech.glide:recyclerview-integration:4.11.0") { transitive = false } + implementation 'com.tbuonomo.andrui:viewpagerdotsindicator:4.1.2' implementation 'net.rdrei.android.dirchooser:library:3.2@aar' implementation 'com.github.chrisbanes:PhotoView:2.3.0' implementation 'com.andrognito.patternlockview:patternlockview:1.0.0' diff --git a/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailAdapter.kt b/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailAdapter.kt index db85c79d..eb216ad6 100644 --- a/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailAdapter.kt +++ b/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailAdapter.kt @@ -22,9 +22,10 @@ import android.view.ViewGroup import android.widget.ImageView import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.RequestManager +import com.bumptech.glide.load.engine.DiskCacheStrategy import xyz.quaver.pupil.BuildConfig -class ThumbnailAdapter(private val glide: RequestManager, private val thumbnails: List) : RecyclerView.Adapter() { +class ThumbnailAdapter(private val glide: RequestManager, var thumbnails: List) : RecyclerView.Adapter() { class ViewHolder(val view: ImageView) : RecyclerView.ViewHolder(view) @@ -35,6 +36,7 @@ class ThumbnailAdapter(private val glide: RequestManager, private val thumbnails override fun onBindViewHolder(holder: ViewHolder, position: Int) { glide .load(thumbnails[position]) + .diskCacheStrategy(DiskCacheStrategy.NONE) .apply { if (BuildConfig.CENSOR) override(5, 8) diff --git a/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailPageAdapter.kt b/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailPageAdapter.kt new file mode 100644 index 00000000..b4f5b1a0 --- /dev/null +++ b/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailPageAdapter.kt @@ -0,0 +1,50 @@ +/* + * Pupil, Hitomi.la viewer for Android + * Copyright (C) 2020 tom5079 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package xyz.quaver.pupil.adapters + +import android.view.ViewGroup +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.RequestManager +import kotlin.math.min + +class ThumbnailPageAdapter(private val glide: RequestManager, private val thumbnails: List) : RecyclerView.Adapter() { + + class ViewHolder(val view: RecyclerView) : RecyclerView.ViewHolder(view) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return ViewHolder(RecyclerView(parent.context).apply { + layoutManager = GridLayoutManager(parent.context, 3) + adapter = ThumbnailAdapter(glide, listOf()) + layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + }) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + (holder.view.adapter as ThumbnailAdapter).apply { + thumbnails = this@ThumbnailPageAdapter.thumbnails.slice(9*position until min(9*position+9, this@ThumbnailPageAdapter.thumbnails.size)) + notifyDataSetChanged() + + holder.view.layoutManager?.scrollToPosition(itemCount-1) + } + } + + override fun getItemCount() = if (thumbnails.isEmpty()) 0 else thumbnails.size/9 + if (thumbnails.size%9 != 0) 1 else 0 + +} \ No newline at end of file diff --git a/app/src/main/java/xyz/quaver/pupil/ui/dialog/GalleryDialog.kt b/app/src/main/java/xyz/quaver/pupil/ui/dialog/GalleryDialog.kt index 548c3aec..a272c37a 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/dialog/GalleryDialog.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/dialog/GalleryDialog.kt @@ -26,14 +26,15 @@ import android.view.LayoutInflater import android.view.View import android.widget.LinearLayout.LayoutParams import androidx.core.content.ContextCompat -import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import androidx.viewpager2.widget.ViewPager2 import com.bumptech.glide.RequestManager import com.google.android.material.chip.Chip import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.dialog_gallery.* -import kotlinx.android.synthetic.main.gallery_details.view.* +import kotlinx.android.synthetic.main.dialog_gallery_details.view.* +import kotlinx.android.synthetic.main.dialog_gallery_dotindicator.view.* import kotlinx.android.synthetic.main.item_gallery_details.view.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -46,7 +47,7 @@ import xyz.quaver.pupil.BuildConfig import xyz.quaver.pupil.Pupil import xyz.quaver.pupil.R import xyz.quaver.pupil.adapters.GalleryBlockAdapter -import xyz.quaver.pupil.adapters.ThumbnailAdapter +import xyz.quaver.pupil.adapters.ThumbnailPageAdapter import xyz.quaver.pupil.types.Tag import xyz.quaver.pupil.ui.ReaderActivity import xyz.quaver.pupil.util.ItemClickSupport @@ -130,7 +131,7 @@ class GalleryDialog(context: Context, private val glide: RequestManager, private private fun addDetails(gallery: Gallery) { val inflater = LayoutInflater.from(context) - inflater.inflate(R.layout.gallery_details, gallery_contents, false).apply { + inflater.inflate(R.layout.dialog_gallery_details, gallery_contents, false).apply { gallery_details.setText(R.string.gallery_details) listOf( @@ -206,15 +207,21 @@ class GalleryDialog(context: Context, private val glide: RequestManager, private private fun addThumbnails(gallery: Gallery) { val inflater = LayoutInflater.from(context) - inflater.inflate(R.layout.gallery_details, gallery_contents, false).apply { + inflater.inflate(R.layout.dialog_gallery_details, gallery_contents, false).apply { gallery_details.setText(R.string.gallery_thumbnails) - RecyclerView(context).apply { - layoutManager = GridLayoutManager(context, 3) - adapter = ThumbnailAdapter(glide, gallery.thumbnails) - }.let { - gallery_details_contents.addView(it, LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)) + val pager = ViewPager2(context).apply { + adapter = ThumbnailPageAdapter(glide, gallery.thumbnails) } + + gallery_details_contents.addView( + pager, + LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) + ) + + LayoutInflater.from(context).inflate(R.layout.dialog_gallery_dotindicator, gallery_details_contents) + + gallery_dotindicator.setViewPager2(pager) }.let { gallery_contents.addView(it) } @@ -245,7 +252,7 @@ class GalleryDialog(context: Context, private val glide: RequestManager, private } } - inflater.inflate(R.layout.gallery_details, gallery_contents, false).apply { + inflater.inflate(R.layout.dialog_gallery_details, gallery_contents, false).apply { gallery_details.setText(R.string.gallery_related) RecyclerView(context).apply { diff --git a/app/src/main/res/layout/gallery_details.xml b/app/src/main/res/layout/dialog_gallery_details.xml similarity index 100% rename from app/src/main/res/layout/gallery_details.xml rename to app/src/main/res/layout/dialog_gallery_details.xml diff --git a/app/src/main/res/layout/dialog_gallery_dotindicator.xml b/app/src/main/res/layout/dialog_gallery_dotindicator.xml new file mode 100644 index 00000000..b1f5de7b --- /dev/null +++ b/app/src/main/res/layout/dialog_gallery_dotindicator.xml @@ -0,0 +1,34 @@ + + + + + + + + \ No newline at end of file