diff --git a/app/build.gradle b/app/build.gradle index aef7c858..26722e4f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,8 +19,8 @@ android { applicationId "xyz.quaver.pupil" minSdkVersion 16 targetSdkVersion 29 - versionCode 49 - versionName "4.13" + versionCode 50 + versionName "4.14" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true vectorDrawables.useSupportLibrary = true diff --git a/app/release/output.json b/app/release/output.json index 1a1b13cc..f27b570e 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":49,"versionName":"4.13","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release","dirName":""},"path":"app-release.apk","properties":{}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":50,"versionName":"4.14","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release","dirName":""},"path":"app-release.apk","properties":{}}] \ No newline at end of file diff --git a/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt b/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt index db19286a..618bbe72 100644 --- a/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt +++ b/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt @@ -32,7 +32,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.swiperefreshlayout.widget.CircularProgressDrawable import androidx.vectordrawable.graphics.drawable.Animatable2Compat import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat -import com.bumptech.glide.Glide +import com.bumptech.glide.RequestManager import com.bumptech.glide.load.engine.DiskCacheStrategy import com.daimajia.swipe.SwipeLayout import com.daimajia.swipe.adapters.RecyclerSwipeAdapter @@ -54,7 +54,7 @@ import java.util.* import kotlin.collections.ArrayList import kotlin.concurrent.schedule -class GalleryBlockAdapter(private val context: Context, private val galleries: List) : RecyclerSwipeAdapter(), SwipeAdapterInterface { +class GalleryBlockAdapter(private val glide: RequestManager, private val galleries: List) : RecyclerSwipeAdapter(), SwipeAdapterInterface { enum class ViewType { NEXT, @@ -62,7 +62,6 @@ class GalleryBlockAdapter(private val context: Context, private val galleries: L PREV } - private val glide = Glide.with(context) private lateinit var favorites: Histories val timer = Timer() @@ -353,7 +352,7 @@ class GalleryBlockAdapter(private val context: Context, private val galleries: L mItemManger.closeAllExcept(layout) holder.view.galleryblock_download.text = - if (Cache(context).isDownloading(gallery.id)) + if (Cache(holder.view.context).isDownloading(gallery.id)) holder.view.context.getString(android.R.string.cancel) else holder.view.context.getString(R.string.main_download) diff --git a/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt b/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt index 4adf8a06..04c3aa44 100644 --- a/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt +++ b/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt @@ -18,16 +18,13 @@ package xyz.quaver.pupil.adapters -import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.Glide -import com.bumptech.glide.ListPreloader -import com.bumptech.glide.RequestBuilder -import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader +import com.bumptech.glide.RequestManager +import com.bumptech.glide.load.engine.DiskCacheStrategy import com.crashlytics.android.Crashlytics import io.fabric.sdk.android.Fabric import kotlinx.android.synthetic.main.item_reader.view.* @@ -35,45 +32,16 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import xyz.quaver.hitomi.Reader -import xyz.quaver.pupil.BuildConfig import xyz.quaver.pupil.R import xyz.quaver.pupil.util.download.Cache import xyz.quaver.pupil.util.download.DownloadWorker -import java.io.File import java.util.* import kotlin.concurrent.schedule import kotlin.math.roundToInt -class ReaderAdapter(private val context: Context, +class ReaderAdapter(private val glide: RequestManager, private val galleryID: Int) : RecyclerView.Adapter() { - val glide = Glide.with(context) - - //region Glide.RecyclerView - val sizeProvider = ListPreloader.PreloadSizeProvider { _, _, position -> - Cache(context).getReaderOrNull(galleryID)?.galleryInfo?.files?.getOrNull(position)?.let { - arrayOf(it.width, it.height).toIntArray() - } - } - val modelProvider = object: ListPreloader.PreloadModelProvider { - override fun getPreloadItems(position: Int): MutableList { - return listOf(Cache(context).getImages(galleryID)?.getOrNull(position)).filterNotNullTo(mutableListOf()) - } - - override fun getPreloadRequestBuilder(item: File): RequestBuilder<*>? { - return glide - .load(item) - .fitCenter() - .error(R.drawable.image_broken_variant) - .apply { - if (BuildConfig.CENSOR) - override(5, 8) - } - } - } - val preloader = RecyclerViewPreloader(glide, modelProvider, sizeProvider, 10) - //endregion - var reader: Reader? = null val timer = Timer() @@ -115,8 +83,8 @@ class ReaderAdapter(private val context: Context, holder.view.reader_index.text = (position+1).toString() - val images = Cache(context).getImage(galleryID, position) - val progress = DownloadWorker.getInstance(context).progress[galleryID]?.get(position) + val images = Cache(holder.view.context).getImage(galleryID, position) + val progress = DownloadWorker.getInstance(holder.view.context).progress[galleryID]?.get(position) if (progress?.isInfinite() == true && images != null) { holder.view.reader_item_progressbar.visibility = View.INVISIBLE @@ -124,6 +92,8 @@ class ReaderAdapter(private val context: Context, holder.view.image.post { glide .load(images) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .skipMemoryCache(true) .fitCenter() .error(R.drawable.image_broken_variant) .into(holder.view.image) @@ -136,7 +106,7 @@ class ReaderAdapter(private val context: Context, if (progress?.isNaN() == true) { if (Fabric.isInitialized()) - Crashlytics.logException(DownloadWorker.getInstance(context).exception[galleryID]?.get(position)) + Crashlytics.logException(DownloadWorker.getInstance(holder.view.context).exception[galleryID]?.get(position)) glide .load(R.drawable.image_broken_variant) diff --git a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt index bc9de08a..10417457 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt @@ -45,6 +45,7 @@ import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat import com.arlib.floatingsearchview.FloatingSearchView import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion import com.arlib.floatingsearchview.util.view.SearchInputView +import com.bumptech.glide.Glide import com.crashlytics.android.Crashlytics import com.google.android.material.appbar.AppBarLayout import io.fabric.sdk.android.Fabric @@ -399,7 +400,7 @@ class MainActivity : AppCompatActivity() { private fun setupRecyclerView() { with(main_recyclerview) { - adapter = GalleryBlockAdapter(this@MainActivity, galleries).apply { + adapter = GalleryBlockAdapter(Glide.with(this@MainActivity), galleries).apply { onChipClickedHandler.add { runOnUiThread { query = it.toQuery() diff --git a/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt index f4a6c22e..e2e93274 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt @@ -32,6 +32,7 @@ import androidx.recyclerview.widget.PagerSnapHelper import androidx.recyclerview.widget.RecyclerView import androidx.vectordrawable.graphics.drawable.Animatable2Compat import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat +import com.bumptech.glide.Glide import com.crashlytics.android.Crashlytics import com.google.android.material.snackbar.Snackbar import io.fabric.sdk.android.Fabric @@ -286,7 +287,7 @@ class ReaderActivity : AppCompatActivity() { private fun initView() { with(reader_recyclerview) { - adapter = ReaderAdapter(this@ReaderActivity, galleryID).apply { + adapter = ReaderAdapter(Glide.with(this@ReaderActivity), galleryID).apply { onItemClickListener = { if (isScroll) { isScroll = false @@ -300,7 +301,6 @@ class ReaderActivity : AppCompatActivity() { } } - addOnScrollListener((adapter as ReaderAdapter).preloader) addOnScrollListener(object: RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) 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 ea21e8d7..e72fda2e 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 @@ -226,7 +226,7 @@ class GalleryDialog(context: Context, private val galleryID: Int) : Dialog(conte val inflater = LayoutInflater.from(context) val galleries = ArrayList() - val adapter = GalleryBlockAdapter(context, galleries).apply { + val adapter = GalleryBlockAdapter(Glide.with(ownerActivity ?: return), galleries).apply { onChipClickedHandler.add { tag -> this@GalleryDialog.onChipClickedHandler.forEach { handler -> handler.invoke(tag) diff --git a/libpupil/src/main/java/xyz/quaver/hitomi/search.kt b/libpupil/src/main/java/xyz/quaver/hitomi/search.kt index 1a9d6087..927bb41d 100644 --- a/libpupil/src/main/java/xyz/quaver/hitomi/search.kt +++ b/libpupil/src/main/java/xyz/quaver/hitomi/search.kt @@ -175,8 +175,12 @@ fun getGalleryIDsFromNozomi(area: String?, tag: String, language: String) : List else -> "$protocol//$domain/$compressed_nozomi_prefix/$area/$tag-$language$nozomiextension" } - val bytes = URL(nozomiAddress).openConnection(proxy).getInputStream().use { - it.readBytes() + val bytes = try { + URL(nozomiAddress).openConnection(proxy).getInputStream().use { + it.readBytes() + } + } catch (e: Exception) { + return emptyList() } val nozomi = ArrayList()