This commit is contained in:
machiav3lli 2022-06-06 02:38:57 +02:00
parent 79ea6960c9
commit 0d13accab3
2 changed files with 0 additions and 179 deletions

View File

@ -1,38 +0,0 @@
package com.looker.droidify.screen
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.google.android.material.appbar.CollapsingToolbarLayout
import com.google.android.material.appbar.MaterialToolbar
import com.looker.droidify.databinding.FragmentBinding
open class ScreenFragment : Fragment() {
private var _fragmentBinding: FragmentBinding? = null
val fragmentBinding get() = _fragmentBinding!!
lateinit var toolbar: MaterialToolbar
lateinit var collapsingToolbar: CollapsingToolbarLayout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_fragmentBinding = FragmentBinding.inflate(layoutInflater)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
this.toolbar = fragmentBinding.toolbar
this.collapsingToolbar = fragmentBinding.collapsingToolbar
return fragmentBinding.root
}
override fun onDestroyView() {
super.onDestroyView()
_fragmentBinding = null
}
}

View File

@ -1,141 +0,0 @@
package com.looker.droidify.screen
import android.content.Context
import android.graphics.drawable.Drawable
import android.view.ViewGroup
import androidx.core.graphics.drawable.toBitmap
import androidx.core.graphics.drawable.toDrawable
import androidx.recyclerview.widget.RecyclerView
import coil.load
import com.google.android.material.card.MaterialCardView
import com.google.android.material.imageview.ShapeableImageView
import com.looker.droidify.R
import com.looker.droidify.database.entity.Repository
import com.looker.droidify.entity.Screenshot
import com.looker.droidify.graphics.PaddingDrawable
import com.looker.droidify.network.CoilDownloader
import com.looker.droidify.utility.extension.resources.getColorFromAttr
import com.looker.droidify.utility.extension.resources.getDrawableCompat
import com.looker.droidify.utility.extension.resources.sizeScaled
import com.looker.droidify.widget.StableRecyclerAdapter
class ScreenshotsAdapter(private val onClick: (Screenshot) -> Unit) :
StableRecyclerAdapter<ScreenshotsAdapter.ViewType, RecyclerView.ViewHolder>() {
enum class ViewType { SCREENSHOT }
private val items = mutableListOf<Item.ScreenshotItem>()
private class ViewHolder(context: Context) :
RecyclerView.ViewHolder(MaterialCardView(context)) {
val image: ShapeableImageView
val placeholder: Drawable
init {
itemView as MaterialCardView
val surfaceColor =
itemView.context.getColorFromAttr(R.attr.colorSurface).defaultColor
image = object : ShapeableImageView(context) {
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
setMeasuredDimension(measuredWidth, measuredHeight)
}
}
val radius = image.context.resources.getDimension(R.dimen.shape_medium_corner)
val shapeAppearanceModel = image.shapeAppearanceModel.toBuilder()
.setAllCornerSizes(radius)
.build()
image.shapeAppearanceModel = shapeAppearanceModel
itemView.shapeAppearanceModel = shapeAppearanceModel
itemView.addView(image)
itemView.layoutParams = RecyclerView.LayoutParams(
RecyclerView.LayoutParams.WRAP_CONTENT,
RecyclerView.LayoutParams.MATCH_PARENT
).apply {
marginStart =
image.context.resources.getDimension(R.dimen.shape_small_corner).toInt()
marginEnd = image.context.resources.getDimension(R.dimen.shape_small_corner).toInt()
}
val placeholder =
image.context.getDrawableCompat(R.drawable.ic_screenshot_placeholder).mutate()
placeholder.setTint(surfaceColor)
this.placeholder = PaddingDrawable(placeholder, 2f)
}
}
fun setScreenshots(
repository: Repository,
packageName: String,
screenshots: List<Screenshot>
) {
items.clear()
items += screenshots.map { Item.ScreenshotItem(repository, packageName, it) }
notifyDataSetChanged()
}
override val viewTypeClass: Class<ViewType>
get() = ViewType::class.java
override fun getItemEnumViewType(position: Int): ViewType {
return ViewType.SCREENSHOT
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: ViewType
): RecyclerView.ViewHolder {
return ViewHolder(parent.context).apply {
itemView.setOnClickListener { onClick(items[adapterPosition].screenshot) }
}
}
override fun getItemDescriptor(position: Int): String = items[position].descriptor
override fun getItemCount(): Int = items.size
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val context = holder.itemView.context
holder as ViewHolder
val item = items[position]
val screenWidth = context.resources.displayMetrics.widthPixels
val outer = context.resources.sizeScaled(GRID_SPACING_OUTER_DP)
val inner = context.resources.sizeScaled(GRID_SPACING_INNER_DP)
val cellSize = (screenWidth - outer - inner) / 1.5
holder.image.load(
CoilDownloader.createScreenshotUri(
item.repository,
item.packageName,
item.screenshot
)
) {
placeholder(
PaddingDrawable(
holder.placeholder.mutate()
.toBitmap(height = cellSize.toInt(), width = cellSize.toInt() / 4)
.toDrawable(context.resources), 1f
)
)
error(holder.placeholder)
size(cellSize.toInt())
}
}
companion object {
private const val GRID_SPACING_OUTER_DP = 16
private const val GRID_SPACING_INNER_DP = 8
}
private sealed class Item {
abstract val descriptor: String
class ScreenshotItem(
val repository: Repository,
val packageName: String,
val screenshot: Screenshot,
) : Item() {
override val descriptor: String
get() = "screenshot.${repository.id}.${screenshot.identifier}"
}
}
}