new theme options

This commit is contained in:
Finnley Somdahl 2023-11-26 21:00:46 -06:00
parent b4093b0c47
commit e5f2bb6566
11 changed files with 309 additions and 50 deletions

View file

@ -1,5 +1,6 @@
package ani.dantotsu.media
import android.graphics.Bitmap
import ani.dantotsu.connections.anilist.api.FuzzyDate
import ani.dantotsu.connections.anilist.api.MediaEdge
import ani.dantotsu.connections.anilist.api.MediaList
@ -119,4 +120,5 @@ data class Media(
object MediaSingleton {
var media: Media? = null
var bitmap: Bitmap? = null
}

View file

@ -4,10 +4,14 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.drawable.BitmapDrawable
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.animation.AccelerateDecelerateInterpolator
import android.widget.ImageView
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.ContextCompat
import androidx.core.view.updateLayoutParams
@ -248,14 +252,14 @@ class MediaAdaptor(
inner class MediaViewHolder(val binding: ItemMediaCompactBinding) : RecyclerView.ViewHolder(binding.root) {
init {
if (matchParent) itemView.updateLayoutParams { width = -1 }
itemView.setSafeOnClickListener { clicked(bindingAdapterPosition) }
itemView.setSafeOnClickListener { clicked(bindingAdapterPosition, resizeBitmap(getBitmapFromImageView(binding.itemCompactImage), 100)) }
itemView.setOnLongClickListener { longClicked(bindingAdapterPosition) }
}
}
inner class MediaLargeViewHolder(val binding: ItemMediaLargeBinding) : RecyclerView.ViewHolder(binding.root) {
init {
itemView.setSafeOnClickListener { clicked(bindingAdapterPosition) }
itemView.setSafeOnClickListener { clicked(bindingAdapterPosition, resizeBitmap(getBitmapFromImageView(binding.itemCompactImage), 100)) }
itemView.setOnLongClickListener { longClicked(bindingAdapterPosition) }
}
}
@ -263,7 +267,7 @@ class MediaAdaptor(
@SuppressLint("ClickableViewAccessibility")
inner class MediaPageViewHolder(val binding: ItemMediaPageBinding) : RecyclerView.ViewHolder(binding.root) {
init {
binding.itemCompactImage.setSafeOnClickListener { clicked(bindingAdapterPosition) }
binding.itemCompactImage.setSafeOnClickListener { clicked(bindingAdapterPosition, resizeBitmap(getBitmapFromImageView(binding.itemCompactImage), 100)) }
itemView.setOnTouchListener { _, _ -> true }
binding.itemCompactImage.setOnLongClickListener { longClicked(bindingAdapterPosition) }
}
@ -272,16 +276,17 @@ class MediaAdaptor(
@SuppressLint("ClickableViewAccessibility")
inner class MediaPageSmallViewHolder(val binding: ItemMediaPageSmallBinding) : RecyclerView.ViewHolder(binding.root) {
init {
binding.itemCompactImage.setSafeOnClickListener { clicked(bindingAdapterPosition) }
binding.itemCompactTitleContainer.setSafeOnClickListener { clicked(bindingAdapterPosition) }
binding.itemCompactImage.setSafeOnClickListener { clicked(bindingAdapterPosition, resizeBitmap(getBitmapFromImageView(binding.itemCompactImage), 100)) }
binding.itemCompactTitleContainer.setSafeOnClickListener { clicked(bindingAdapterPosition, resizeBitmap(getBitmapFromImageView(binding.itemCompactImage), 100)) }
itemView.setOnTouchListener { _, _ -> true }
binding.itemCompactImage.setOnLongClickListener { longClicked(bindingAdapterPosition) }
}
}
fun clicked(position: Int) {
fun clicked(position: Int, bitmap: Bitmap? = null) {
if ((mediaList?.size ?: 0) > position && position != -1) {
val media = mediaList?.get(position)
if (bitmap != null) MediaSingleton.bitmap = bitmap
ContextCompat.startActivity(
activity,
Intent(activity, MediaDetailsActivity::class.java).putExtra(
@ -302,4 +307,44 @@ class MediaAdaptor(
}
return false
}
fun getBitmapFromImageView(imageView: ImageView): Bitmap? {
val drawable = imageView.drawable ?: return null
// If the drawable is a BitmapDrawable, then just get the bitmap
if (drawable is BitmapDrawable) {
return drawable.bitmap
}
// Create a bitmap with the same dimensions as the drawable
val bitmap = Bitmap.createBitmap(drawable.intrinsicWidth,
drawable.intrinsicHeight,
Bitmap.Config.ARGB_8888)
// Draw the drawable onto the bitmap
val canvas = Canvas(bitmap)
drawable.setBounds(0, 0, canvas.width, canvas.height)
drawable.draw(canvas)
return bitmap
}
fun resizeBitmap(source: Bitmap?, maxDimension: Int): Bitmap? {
if (source == null) return null
val width = source.width
val height = source.height
val newWidth: Int
val newHeight: Int
if (width > height) {
newWidth = maxDimension
newHeight = (height * (maxDimension.toFloat() / width)).toInt()
} else {
newHeight = maxDimension
newWidth = (width * (maxDimension.toFloat() / height)).toInt()
}
return Bitmap.createScaledBitmap(source, newWidth, newHeight, true)
}
}

View file

@ -5,6 +5,7 @@ import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import android.text.SpannableStringBuilder
import android.util.Log
import android.util.TypedValue
import android.view.GestureDetector
import android.view.MotionEvent
@ -73,7 +74,9 @@ class MediaDetailsActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedLi
@SuppressLint("SetTextI18n", "ClickableViewAccessibility")
override fun onCreate(savedInstanceState: Bundle?) {
LangSet.setLocale(this)
ThemeManager(this).applyTheme()
var media: Media = intent.getSerialized("media") ?: return
ThemeManager(this).applyTheme(MediaSingleton.bitmap)
MediaSingleton.bitmap = null
super.onCreate(savedInstanceState)
binding = ActivityMediaBinding.inflate(layoutInflater)
setContentView(binding.root)
@ -119,7 +122,7 @@ class MediaDetailsActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedLi
viewPager.isUserInputEnabled = false
viewPager.setPageTransformer(ZoomOutPageTransformer(uiSettings))
var media: Media = intent.getSerialized("media") ?: return
val isDownload = intent.getBooleanExtra("download", false)
media.selected = model.loadSelected(media, isDownload)