Fixed bug for older devices

Hoping that the viewer crashing bug is fixed
Version 2.11
This commit is contained in:
tom5079
2019-06-23 23:09:01 +09:00
parent a990f5d663
commit ad6c061b6b
27 changed files with 203 additions and 98 deletions

View File

@@ -2,7 +2,8 @@ package xyz.quaver.pupil.adapters
import android.app.AlertDialog
import android.graphics.BitmapFactory
import android.graphics.drawable.Animatable
import android.graphics.drawable.Drawable
import android.util.Log
import android.util.SparseBooleanArray
import android.view.LayoutInflater
import android.view.View
@@ -12,6 +13,7 @@ import android.widget.LinearLayout
import androidx.cardview.widget.CardView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import androidx.vectordrawable.graphics.drawable.Animatable2Compat
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat
import com.google.android.material.chip.Chip
import kotlinx.android.synthetic.main.item_galleryblock.view.*
@@ -24,7 +26,7 @@ import kotlinx.serialization.json.JsonConfiguration
import kotlinx.serialization.list
import xyz.quaver.hitomi.GalleryBlock
import xyz.quaver.hitomi.ReaderItem
import xyz.quaver.pupil.ui.Pupil
import xyz.quaver.pupil.Pupil
import xyz.quaver.pupil.R
import xyz.quaver.pupil.types.Tag
import xyz.quaver.pupil.util.Histories
@@ -68,7 +70,7 @@ class GalleryBlockAdapter(private val galleries: List<Pair<GalleryBlock, Deferre
val bitmap = BitmapFactory.decodeFile(thumbnail.await())
post {
launch(Dispatchers.Main) {
galleryblock_thumbnail.setImageBitmap(bitmap)
}
}
@@ -118,12 +120,12 @@ class GalleryBlockAdapter(private val galleries: List<Pair<GalleryBlock, Deferre
visibility = View.VISIBLE
}
} else {
val drawable = AnimatedVectorDrawableCompat.create(context, R.drawable.ic_progressbar_complete)
with(view.galleryblock_progress_complete) {
setImageDrawable(drawable)
setImageDrawable(AnimatedVectorDrawableCompat.create(context, R.drawable.ic_progressbar_complete).apply {
this?.start()
})
visibility = View.VISIBLE
}
drawable?.start()
completeFlag.put(galleryBlock.id, true)
}
} else
@@ -250,19 +252,28 @@ class GalleryBlockAdapter(private val galleries: List<Pair<GalleryBlock, Deferre
favorites = (context.applicationContext as Pupil).favorites
with(galleryblock_favorite) {
post {
isChecked = favorites.contains(galleryBlock.id)
}
setImageResource(if (favorites.contains(galleryBlock.id)) R.drawable.ic_star_filled else R.drawable.ic_star_empty)
setOnClickListener {
when {
isChecked -> favorites.add(galleryBlock.id)
else -> favorites.remove(galleryBlock.id)
}
}
setOnCheckedChangeListener { _, isChecked ->
when {
isChecked -> (background as Animatable).start()
else -> background = AnimatedVectorDrawableCompat.create(context, R.drawable.avd_star)
favorites.contains(galleryBlock.id) -> {
favorites.remove(galleryBlock.id)
setImageResource(R.drawable.ic_star_empty)
}
else -> {
favorites.add(galleryBlock.id)
setImageDrawable(AnimatedVectorDrawableCompat.create(context, R.drawable.avd_star).apply {
this ?: return@apply
registerAnimationCallback(object: Animatable2Compat.AnimationCallback() {
override fun onAnimationEnd(drawable: Drawable?) {
setImageResource(R.drawable.ic_star_filled)
}
})
start()
})
}
}
}
}

View File

@@ -1,6 +1,8 @@
package xyz.quaver.pupil.adapters
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -10,6 +12,8 @@ import xyz.quaver.pupil.R
class ReaderAdapter(private val images: List<String>) : RecyclerView.Adapter<ReaderAdapter.ViewHolder>() {
var isFullScreen = false
class ViewHolder(val view: View) : RecyclerView.ViewHolder(view)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
@@ -21,19 +25,49 @@ class ReaderAdapter(private val images: List<String>) : RecyclerView.Adapter<Rea
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
fun calculateInSampleSize(options: BitmapFactory.Options, reqWidth: Int, reqHeight: Int): Int {
// Raw height and width of image
val (height: Int, width: Int) = options.run { outHeight to outWidth }
var inSampleSize = 1
if (height > reqHeight || width > reqWidth) {
val halfHeight: Int = height / 2
val halfWidth: Int = width / 2
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while (halfHeight / inSampleSize >= reqHeight && halfWidth / inSampleSize >= reqWidth) {
inSampleSize *= 2
}
}
return inSampleSize
}
with(holder.view as ImageView) {
val options = BitmapFactory.Options()
options.inJustDecodeBounds = true
BitmapFactory.decodeFile(images[position], options)
options.inSampleSize = options.outWidth /
context.resources.displayMetrics.widthPixels
val (reqWidth, reqHeight) = context.resources.displayMetrics.let {
Pair(it.widthPixels, it.heightPixels)
}
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight)
options.inPreferredConfig = Bitmap.Config.RGB_565
options.inJustDecodeBounds = false
val image = BitmapFactory.decodeFile(images[position], options)
Log.d("Pupil", image.byteCount.toString())
Log.d("Pupil", "${image.width}x${image.height}")
Log.d("Pupil", "deviceWidth ${context.resources.displayMetrics.widthPixels}")
setImageBitmap(image)
}
}