Migrate from Glide to Coil

- Also drop dependency on kapt

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-08-22 16:25:06 +05:30
parent fef6905d90
commit d35d694564
32 changed files with 78 additions and 448 deletions

View File

@@ -26,7 +26,6 @@ plugins {
id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.plugin.parcelize")
id("com.google.devtools.ksp")
id("org.jetbrains.kotlin.kapt")
id("androidx.navigation.safeargs.kotlin")
id("org.jlleitschuh.gradle.ktlint")
id("dev.rikka.tools.refine")
@@ -116,10 +115,6 @@ android {
}
}
kapt {
correctErrorTypes = true
}
dependencies {
//Protobuf
@@ -148,10 +143,8 @@ dependencies {
implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
implementation("androidx.navigation:navigation-ui-ktx:$nav_version")
//Glide
val glide_version = "4.15.1"
implementation("com.github.bumptech.glide:glide:$glide_version")
kapt("com.github.bumptech.glide:compiler:$glide_version")
//Coil
implementation("io.coil-kt:coil:2.4.0")
//Shimmer
implementation("com.facebook.shimmer:shimmer:0.5.0")

View File

@@ -1,179 +0,0 @@
/*
* Aurora Store
* Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
*
* Aurora Store 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 2 of the License, or
* (at your option) any later version.
*
* Aurora Store 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 Aurora Store. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.aurora.extensions
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.net.Uri
import android.widget.ImageView
import androidx.annotation.DrawableRes
import androidx.annotation.RawRes
import com.bumptech.glide.Glide
import com.bumptech.glide.TransitionOptions
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.CustomViewTarget
import com.bumptech.glide.request.transition.DrawableCrossFadeFactory
import com.bumptech.glide.request.transition.Transition
import java.io.File
fun ImageView.load(
bitmap: Bitmap?,
transitionOptions: TransitionOptions<*, Drawable>? = null,
requestOptions: RequestOptions? = null
): CustomViewTarget<ImageView, Drawable> = loadAny(bitmap, transitionOptions, requestOptions)
@JvmSynthetic
fun ImageView.load(
byteArray: ByteArray?,
transitionOptions: TransitionOptions<*, Drawable>? = null,
requestOptions: RequestOptions? = null
): CustomViewTarget<ImageView, Drawable> = loadAny(byteArray, transitionOptions, requestOptions)
@JvmSynthetic
fun ImageView.load(
drawable: Drawable?,
transitionOptions: TransitionOptions<*, Drawable>? = null,
requestOptions: RequestOptions? = null
): CustomViewTarget<ImageView, Drawable> = loadAny(drawable, transitionOptions, requestOptions)
@JvmSynthetic
fun ImageView.load(
@RawRes @DrawableRes resourceId: Int?,
transitionOptions: TransitionOptions<*, Drawable>? = null,
requestOptions: RequestOptions? = null
): CustomViewTarget<ImageView, Drawable> = loadAny(resourceId, transitionOptions, requestOptions)
@JvmSynthetic
fun ImageView.load(
uri: Uri?,
transitionOptions: TransitionOptions<*, Drawable>? = null,
requestOptions: RequestOptions? = null
): CustomViewTarget<ImageView, Drawable> = loadAny(uri, transitionOptions, requestOptions)
@JvmSynthetic
fun ImageView.load(
string: String?,
transitionOptions: TransitionOptions<*, Drawable>? = null,
requestOptions: RequestOptions? = null
): CustomViewTarget<ImageView, Drawable> = loadAny(string, transitionOptions, requestOptions)
@JvmSynthetic
fun ImageView.load(
file: File?,
transitionOptions: TransitionOptions<*, Drawable>? = null,
requestOptions: RequestOptions? = null
): CustomViewTarget<ImageView, Drawable> = loadAny(file, transitionOptions, requestOptions)
@JvmSynthetic
inline fun ImageView.load(
bitmap: Bitmap?,
requestOptions: RequestOptions.() -> Unit
): CustomViewTarget<ImageView, Drawable> = loadAny(bitmap, requestOptions)
@JvmSynthetic
inline fun ImageView.load(
byteArray: ByteArray?,
requestOptions: RequestOptions.() -> Unit
): CustomViewTarget<ImageView, Drawable> = loadAny(byteArray, requestOptions)
@JvmSynthetic
inline fun ImageView.load(
drawable: Drawable?,
requestOptions: RequestOptions.() -> Unit
): CustomViewTarget<ImageView, Drawable> = loadAny(drawable, requestOptions)
@JvmSynthetic
inline fun ImageView.load(
@RawRes @DrawableRes resourceId: Int?,
requestOptions: RequestOptions.() -> Unit
): CustomViewTarget<ImageView, Drawable> = loadAny(resourceId, requestOptions)
@JvmSynthetic
inline fun ImageView.load(
uri: Uri?,
requestOptions: RequestOptions.() -> Unit
): CustomViewTarget<ImageView, Drawable> = loadAny(uri, requestOptions)
@JvmSynthetic
inline fun ImageView.load(
string: String?,
requestOptions: RequestOptions.() -> Unit
): CustomViewTarget<ImageView, Drawable> = loadAny(string, requestOptions)
@JvmSynthetic
inline fun ImageView.load(
file: File?,
requestOptions: RequestOptions.() -> Unit
): CustomViewTarget<ImageView, Drawable> = loadAny(file, requestOptions)
@JvmSynthetic
fun ImageView.loadAny(
data: Any?,
transitionOptions: TransitionOptions<*, Drawable>? = null,
requestOptions: RequestOptions? = null
): CustomViewTarget<ImageView, Drawable> {
return Glide.with(this)
.asDrawable()
.load(data)
.apply {
transitionOptions?.let { transition(it) }
requestOptions?.let { apply(it) }
}
.into(object : CustomViewTarget<ImageView, Drawable>(this) {
override fun onLoadFailed(errorDrawable: Drawable?) {
}
override fun onResourceCleared(placeholder: Drawable?) {
}
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
this.view.setImageDrawable(resource)
}
})
}
@JvmSynthetic
inline fun ImageView.loadAny(
data: Any?,
requestOptions: RequestOptions.() -> Unit
): CustomViewTarget<ImageView, Drawable> {
val factory = DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build()
return Glide.with(this)
.asDrawable()
.load(data)
.transition(withCrossFade(factory))
.apply(RequestOptions().apply(requestOptions))
.into(object : CustomViewTarget<ImageView, Drawable>(this) {
override fun onLoadFailed(errorDrawable: Drawable?) {
}
override fun onResourceCleared(placeholder: Drawable?) {
}
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
this.view.setImageDrawable(resource)
}
})}
@JvmSynthetic
fun ImageView.clear() {
//Glide.with(this).clear(this)
}

View File

@@ -1,53 +0,0 @@
/*
* Aurora Store
* Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
*
* Aurora Store 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 2 of the License, or
* (at your option) any later version.
*
* Aurora Store 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 Aurora Store. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.aurora.store
import android.content.Context
import android.graphics.Bitmap
import com.bumptech.glide.GlideBuilder
import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.load.DecodeFormat
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory
import com.bumptech.glide.load.engine.cache.LruResourceCache
import com.bumptech.glide.module.AppGlideModule
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.signature.ObjectKey
@GlideModule
class AuroraGlide : AppGlideModule() {
override fun applyOptions(context: Context, builder: GlideBuilder) {
val memoryCacheSizeBytes = 1024 * 1024 * 50
builder.setMemoryCache(LruResourceCache(memoryCacheSizeBytes.toLong()))
builder.setDiskCache(InternalCacheDiskCacheFactory(context, memoryCacheSizeBytes.toLong()))
builder.setDefaultRequestOptions(requestOptions())
}
companion object {
private fun requestOptions(): RequestOptions {
return RequestOptions()
.signature(ObjectKey(System.currentTimeMillis() / (24 * 60 * 60 * 1000)))
.centerCrop()
.encodeFormat(Bitmap.CompressFormat.PNG)
.encodeQuality(60)
.format(DecodeFormat.PREFER_ARGB_8888)
.skipMemoryCache(false)
}
}
}

View File

@@ -44,12 +44,12 @@ import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import coil.load
import coil.transform.RoundedCornersTransformation
import com.aurora.Constants
import com.aurora.extensions.accentColor
import com.aurora.extensions.applyTheme
import com.aurora.extensions.getStyledAttributeColor
import com.aurora.extensions.isRAndAbove
import com.aurora.extensions.load
import com.aurora.extensions.toast
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.store.data.model.NetworkStatus
@@ -63,9 +63,7 @@ import com.aurora.store.util.Preferences.PREFERENCE_DEFAULT_SELECTED_TAB
import com.aurora.store.view.ui.sheets.NetworkDialogSheet
import com.aurora.store.view.ui.sheets.SelfUpdateSheet
import com.aurora.store.viewmodel.MainViewModel
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.elevation.SurfaceColors
import kotlinx.coroutines.launch
@@ -236,7 +234,7 @@ class MainActivity : AppCompatActivity() {
headerView.let {
it.findViewById<ImageView>(R.id.img)?.load(R.mipmap.ic_launcher) {
transform(RoundedCorners(8))
transformations(RoundedCornersTransformation(8F))
}
it.findViewById<TextView>(R.id.txt_name)?.text = getString(R.string.app_name)
it.findViewById<TextView>(R.id.txt_email)?.text =

View File

@@ -56,4 +56,4 @@ class CarouselShimmerGroup() :
return models
}
}
}
}

View File

@@ -23,16 +23,14 @@ import android.content.Context
import android.util.AttributeSet
import android.widget.CompoundButton
import android.widget.RelativeLayout
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.clear
import com.aurora.extensions.load
import com.aurora.store.R
import com.aurora.store.data.model.Black
import com.aurora.store.databinding.ViewBlackBinding
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
@ModelView(
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
@@ -67,7 +65,7 @@ class BlackListView : RelativeLayout {
fun black(black: Black) {
B.imgIcon.load(black.drawable) {
placeholder(R.drawable.bg_placeholder)
transform(RoundedCorners(25))
transformations(RoundedCornersTransformation(25F))
}
B.txtLine1.text = black.displayName
@@ -94,9 +92,4 @@ class BlackListView : RelativeLayout {
fun longClick(onClickListener: OnLongClickListener?) {
B.root.setOnLongClickListener(onClickListener)
}
@OnViewRecycled
fun clear() {
B.imgIcon.clear()
}
}

View File

@@ -22,12 +22,10 @@ package com.aurora.store.view.epoxy.views
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.clear
import com.aurora.extensions.load
import com.aurora.gplayapi.data.models.Category
import com.aurora.store.R
import com.aurora.store.databinding.ViewCategoryBinding
@@ -64,17 +62,11 @@ class CategoryView : RelativeLayout {
@ModelProp
fun category(category: Category) {
B.txtName.text = category.title
B.imgBackground.load(category.imageUrl) {
}
B.imgBackground.load(category.imageUrl)
}
@CallbackProp
fun click(onClickListener: OnClickListener?) {
B.root.setOnClickListener(onClickListener)
}
@OnViewRecycled
fun clear() {
B.imgBackground.clear()
}
}

View File

@@ -22,13 +22,12 @@ package com.aurora.store.view.epoxy.views
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.Constants
import com.aurora.extensions.clear
import com.aurora.extensions.load
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
import com.aurora.store.data.model.DownloadFile
@@ -36,7 +35,6 @@ import com.aurora.store.databinding.ViewDownloadBinding
import com.aurora.store.util.CommonUtil.getDownloadSpeedString
import com.aurora.store.util.CommonUtil.getETAString
import com.aurora.store.util.CommonUtil.humanReadableByteValue
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.tonyodev.fetch2.Status
@@ -85,7 +83,7 @@ class DownloadView : RelativeLayout {
app?.let {
B.imgDownload.load(app.iconArtwork.url) {
placeholder(R.drawable.bg_placeholder)
transform(RoundedCorners(32))
transformations(RoundedCornersTransformation(32F))
}
B.txtTitle.text = app.displayName
}
@@ -137,9 +135,4 @@ class DownloadView : RelativeLayout {
fun longClick(onClickListener: OnLongClickListener?) {
B.root.setOnLongClickListener(onClickListener)
}
@OnViewRecycled
fun clear() {
B.imgDownload.clear()
}
}

View File

@@ -22,17 +22,15 @@ package com.aurora.store.view.epoxy.views
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.clear
import com.aurora.extensions.load
import com.aurora.extensions.px
import com.aurora.gplayapi.data.models.Artwork
import com.aurora.store.R
import com.aurora.store.databinding.ViewEditorImageBinding
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
@ModelView(
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
@@ -72,7 +70,7 @@ class EditorImageView : RelativeLayout {
B.img.requestLayout()
B.img.load(artwork.url) {
transform(RoundedCorners(8.px.toInt()))
transformations(RoundedCornersTransformation(8.px.toFloat()))
}
}
else -> {
@@ -80,7 +78,7 @@ class EditorImageView : RelativeLayout {
B.img.layoutParams.height = 24.px.toInt()
B.img.requestLayout()
B.img.load(artwork.url) {
transform(RoundedCorners(4.px.toInt()))
transformations(RoundedCornersTransformation(4.px.toFloat()))
}
}
}
@@ -90,9 +88,4 @@ class EditorImageView : RelativeLayout {
fun click(onClickListener: OnClickListener?) {
B.root.setOnClickListener(onClickListener)
}
@OnViewRecycled
fun clear() {
B.img.clear()
}
}

View File

@@ -23,16 +23,14 @@ import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import androidx.core.content.ContextCompat
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.clear
import com.aurora.extensions.load
import com.aurora.gplayapi.SearchSuggestEntry
import com.aurora.store.R
import com.aurora.store.databinding.ViewSearchSuggestionBinding
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
@ModelView(
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
@@ -67,7 +65,7 @@ class SearchSuggestionView : RelativeLayout {
fun entry(searchSuggestEntry: SearchSuggestEntry) {
if (searchSuggestEntry.hasImageContainer()) {
B.img.load(searchSuggestEntry.imageContainer.imageUrl) {
transform(RoundedCorners(8))
transformations(RoundedCornersTransformation(8F))
}
} else {
B.img.setImageDrawable(
@@ -90,9 +88,4 @@ class SearchSuggestionView : RelativeLayout {
fun action(onClickListener: OnClickListener?) {
B.action.setOnClickListener(onClickListener)
}
@OnViewRecycled
fun clear() {
B.img.clear()
}
}

View File

@@ -22,19 +22,17 @@ package com.aurora.store.view.epoxy.views.app
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.clear
import com.aurora.extensions.getString
import com.aurora.extensions.load
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
import com.aurora.store.databinding.ViewAppListBinding
import com.aurora.store.util.CommonUtil
import com.aurora.store.view.epoxy.views.BaseView
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
@ModelView(
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
@@ -69,7 +67,7 @@ class AppListView : RelativeLayout {
fun app(app: App) {
B.imgIcon.load(app.iconArtwork.url) {
placeholder(R.drawable.bg_placeholder)
transform(RoundedCorners(25))
transformations(RoundedCornersTransformation(25F))
}
B.txtLine1.text = app.displayName
@@ -103,9 +101,4 @@ class AppListView : RelativeLayout {
fun longClick(onClickListener: OnLongClickListener?) {
B.root.setOnLongClickListener(onClickListener)
}
@OnViewRecycled
fun clear() {
B.imgIcon.clear()
}
}

View File

@@ -25,12 +25,13 @@ import android.view.View
import android.widget.RelativeLayout
import androidx.core.text.HtmlCompat
import androidx.core.view.isVisible
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.invisible
import com.aurora.extensions.load
import com.aurora.extensions.px
import com.aurora.extensions.show
import com.aurora.store.R
@@ -39,7 +40,6 @@ import com.aurora.store.data.model.UpdateFile
import com.aurora.store.databinding.ViewAppUpdateBinding
import com.aurora.store.util.CommonUtil
import com.aurora.store.view.epoxy.views.BaseView
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
@ModelView(
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
@@ -79,7 +79,7 @@ class AppUpdateView : RelativeLayout {
B.txtLine1.text = displayName
B.imgIcon.load(iconArtwork.url) {
placeholder(R.drawable.bg_placeholder)
transform(RoundedCorners(8.px.toInt()))
transformations(RoundedCornersTransformation(8.px.toFloat()))
}
B.txtLine2.text = developerName

View File

@@ -22,18 +22,16 @@ package com.aurora.store.view.epoxy.views.app
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.clear
import com.aurora.extensions.load
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
import com.aurora.store.databinding.ViewAppBinding
import com.aurora.store.util.CommonUtil
import com.aurora.store.view.epoxy.views.BaseView
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
@ModelView(
@@ -70,7 +68,7 @@ class AppView : RelativeLayout {
B.txtName.text = app.displayName
B.imgIcon.load(app.iconArtwork.url) {
placeholder(R.drawable.bg_placeholder)
transform(RoundedCorners(32))
transformations(RoundedCornersTransformation(32F))
}
if (app.size > 0)
@@ -86,9 +84,4 @@ class AppView : RelativeLayout {
fun longClick(onClickListener: OnLongClickListener?) {
B.root.setOnLongClickListener(onClickListener)
}
@OnViewRecycled
fun clear() {
B.imgIcon.clear()
}
}

View File

@@ -22,17 +22,15 @@ package com.aurora.store.view.epoxy.views.details
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.clear
import com.aurora.extensions.load
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
import com.aurora.store.databinding.ViewAppDependentBinding
import com.aurora.store.view.epoxy.views.BaseView
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
@ModelView(
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
@@ -68,7 +66,7 @@ class AppDependentView : RelativeLayout {
B.txtName.text = app.displayName
B.imgIcon.load(app.iconArtwork.url) {
placeholder(R.drawable.bg_placeholder)
transform(RoundedCorners(32))
transformations(RoundedCornersTransformation(32F))
}
}
@@ -81,9 +79,4 @@ class AppDependentView : RelativeLayout {
fun longClick(onClickListener: OnLongClickListener?) {
B.root.setOnLongClickListener(onClickListener)
}
@OnViewRecycled
fun clear() {
B.imgIcon.clear()
}
}

View File

@@ -22,11 +22,11 @@ package com.aurora.store.view.epoxy.views.details
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.load
import com.aurora.gplayapi.data.models.details.Badge
import com.aurora.store.R
import com.aurora.store.databinding.ViewBadgeBinding
@@ -74,9 +74,7 @@ class BadgeView : RelativeLayout {
}
badge.artwork?.let {
B.img.load(it.url) {
}
B.img.load(it.url)
}
}

View File

@@ -21,25 +21,15 @@ package com.aurora.store.view.epoxy.views.details
import android.content.Context
import android.content.res.Resources
import android.graphics.drawable.Drawable
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.clear
import com.aurora.extensions.px
import com.aurora.extensions.runOnUiThread
import com.aurora.gplayapi.data.models.Artwork
import com.aurora.store.GlideApp
import com.aurora.store.R
import com.aurora.store.databinding.ViewScreenshotLargeBinding
import com.aurora.store.view.epoxy.views.BaseView
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
@ModelView(
autoLayout = ModelView.Size.MATCH_WIDTH_MATCH_HEIGHT,
@@ -73,47 +63,8 @@ class LargeScreenshotView : RelativeLayout {
@ModelProp
fun artwork(artwork: Artwork) {
val displayMetrics = Resources.getSystem().displayMetrics
GlideApp.with(context)
.load("${artwork.url}=rw-w${displayMetrics.widthPixels}-v1-e15")
.placeholder(R.drawable.bg_placeholder)
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.addListener(object : RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any,
target: Target<Drawable>,
isFirstResource: Boolean
): Boolean {
return false
}
override fun onResourceReady(
drawable: Drawable,
model: Any,
target: Target<Drawable?>,
dataSource: DataSource,
isFirstResource: Boolean
): Boolean {
runOnUiThread {
if (artwork.height != 0 && artwork.width != 0) {
B.img.layoutParams.height = artwork.height.px.toInt()
B.img.layoutParams.width = artwork.width.px.toInt()
} else {
val height = displayMetrics.heightPixels
val width = displayMetrics.widthPixels
B.img.layoutParams.width = width
B.img.layoutParams.height = height
}
B.img.setImageDrawable(drawable)
B.img.requestLayout()
}
return false
}
}).submit()
}
@OnViewRecycled
fun clear() {
B.img.clear()
B.img.load("${artwork.url}=rw-w${displayMetrics.widthPixels}-v1-e15") {
placeholder(R.drawable.bg_placeholder)
}
}
}

View File

@@ -22,18 +22,16 @@ package com.aurora.store.view.epoxy.views.details
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.clear
import com.aurora.extensions.load
import com.aurora.extensions.px
import com.aurora.gplayapi.data.models.Artwork
import com.aurora.store.R
import com.aurora.store.databinding.ViewScreenshotMiniBinding
import com.aurora.store.view.epoxy.views.BaseView
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
@ModelView(
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
@@ -80,7 +78,7 @@ class MiniScreenshotView : RelativeLayout {
normalizeSize(artwork)
B.img.load("${artwork.url}=rw-w480-v1-e15") {
placeholder(R.drawable.bg_rounded)
transform(RoundedCorners(8.px.toInt()))
transformations(RoundedCornersTransformation(8.px.toFloat()))
}
}
@@ -117,9 +115,4 @@ class MiniScreenshotView : RelativeLayout {
screenshotCallback?.onClick(position)
}
}
@OnViewRecycled
fun clear() {
B.img.clear()
}
}

View File

@@ -23,11 +23,11 @@ import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import androidx.core.text.HtmlCompat
import coil.load
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.load
import com.aurora.gplayapi.data.models.details.Badge
import com.aurora.store.R
import com.aurora.store.databinding.ViewMoreBadgeBinding

View File

@@ -22,18 +22,16 @@ package com.aurora.store.view.epoxy.views.details
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.clear
import com.aurora.extensions.load
import com.aurora.extensions.toDate
import com.aurora.gplayapi.data.models.Review
import com.aurora.store.R
import com.aurora.store.databinding.ViewReviewBinding
import com.aurora.store.view.epoxy.views.BaseView
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
@ModelView(
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
@@ -72,7 +70,7 @@ class ReviewView : RelativeLayout {
B.img.load(review.userPhotoUrl) {
placeholder(R.drawable.bg_placeholder)
transform(RoundedCorners(32))
transformations(RoundedCornersTransformation(32F))
}
B.rating.rating = review.rating.toFloat()
@@ -90,9 +88,4 @@ class ReviewView : RelativeLayout {
fun longClick(onClickListener: OnLongClickListener?) {
B.root.setOnLongClickListener(onClickListener)
}
@OnViewRecycled
fun clear() {
B.img.clear()
}
}

View File

@@ -22,18 +22,16 @@ package com.aurora.store.view.epoxy.views.details
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.clear
import com.aurora.extensions.load
import com.aurora.extensions.px
import com.aurora.gplayapi.data.models.Artwork
import com.aurora.store.R
import com.aurora.store.databinding.ViewScreenshotBinding
import com.aurora.store.view.epoxy.views.BaseView
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
@ModelView(
autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT,
@@ -80,7 +78,7 @@ class ScreenshotView : RelativeLayout {
normalizeSize(artwork)
B.img.load("${artwork.url}=rw-w480-v1-e15") {
placeholder(R.drawable.bg_rounded)
transform(RoundedCorners(8.px.toInt()))
transformations(RoundedCornersTransformation(8.px.toFloat()))
}
}
@@ -117,9 +115,4 @@ class ScreenshotView : RelativeLayout {
screenshotCallback?.onClick(position)
}
}
@OnViewRecycled
fun clear() {
B.img.clear()
}
}

View File

@@ -22,11 +22,11 @@ package com.aurora.store.view.epoxy.views.preference
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import coil.load
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.aurora.extensions.hide
import com.aurora.extensions.load
import com.aurora.extensions.show
import com.aurora.store.R
import com.aurora.store.data.model.Link

View File

@@ -25,9 +25,9 @@ import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import coil.load
import com.aurora.extensions.browse
import com.aurora.extensions.copyToClipBoard
import com.aurora.extensions.load
import com.aurora.store.BuildConfig
import com.aurora.store.R
import com.aurora.store.data.model.Link

View File

@@ -24,8 +24,9 @@ import android.view.View
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import coil.load
import coil.transform.RoundedCornersTransformation
import com.aurora.extensions.browse
import com.aurora.extensions.load
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.store.R
import com.aurora.store.data.AuthState
@@ -33,7 +34,6 @@ import com.aurora.store.data.providers.AccountProvider
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.databinding.FragmentAccountBinding
import com.aurora.store.viewmodel.auth.AuthViewModel
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
class AccountFragment : Fragment(R.layout.fragment_account) {
@@ -199,7 +199,7 @@ class AccountFragment : Fragment(R.layout.fragment_account) {
authData.userProfile?.let {
binding.imgAvatar.load(it.artwork.url) {
placeholder(R.drawable.bg_placeholder)
transform(RoundedCorners(32))
transformations(RoundedCornersTransformation(32F))
}
binding.txtName.text = if (authData.isAnonymous)
@@ -214,7 +214,7 @@ class AccountFragment : Fragment(R.layout.fragment_account) {
}
} else {
binding.imgAvatar.load(R.mipmap.ic_launcher) {
transform(RoundedCorners(32))
transformations(RoundedCornersTransformation(32F))
}
binding.txtName.text = getString(R.string.app_name)
binding.txtEmail.text = getString(R.string.account_logged_out)

View File

@@ -43,13 +43,14 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import coil.load
import coil.transform.RoundedCornersTransformation
import com.airbnb.epoxy.EpoxyRecyclerView
import com.aurora.Constants
import com.aurora.extensions.browse
import com.aurora.extensions.getString
import com.aurora.extensions.hide
import com.aurora.extensions.isRAndAbove
import com.aurora.extensions.load
import com.aurora.extensions.runOnUiThread
import com.aurora.extensions.share
import com.aurora.extensions.show
@@ -92,7 +93,6 @@ import com.aurora.store.view.epoxy.views.details.ScreenshotViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.viewmodel.details.AppDetailsViewModel
import com.aurora.store.viewmodel.details.DetailsClusterViewModel
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
import com.tonyodev.fetch2.AbstractFetchGroupListener
@@ -103,12 +103,12 @@ import com.tonyodev.fetch2.FetchGroup
import com.tonyodev.fetch2.FetchGroupListener
import com.tonyodev.fetch2.Status
import com.tonyodev.fetch2core.DownloadBlock
import java.io.File
import java.util.Locale
import kotlinx.coroutines.launch
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.io.File
import java.util.Locale
class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
@@ -499,7 +499,7 @@ class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
binding.layoutDetailsApp.apply {
imgIcon.load(app.iconArtwork.url) {
placeholder(R.drawable.bg_placeholder)
transform(RoundedCorners(32))
transformations(RoundedCornersTransformation(32F))
}
txtLine1.text = app.displayName

View File

@@ -24,7 +24,7 @@ import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.aurora.extensions.load
import coil.load
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.StreamCluster

View File

@@ -44,8 +44,8 @@ import com.aurora.store.util.save
import com.aurora.store.view.epoxy.views.preference.InstallerViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import com.google.gson.reflect.TypeToken
import rikka.shizuku.Shizuku
import java.nio.charset.StandardCharsets
import rikka.shizuku.Shizuku
class InstallerFragment : BaseFragment() {

View File

@@ -24,11 +24,11 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.navArgs
import com.aurora.extensions.load
import coil.load
import coil.transform.RoundedCornersTransformation
import com.aurora.store.R
import com.aurora.store.databinding.SheetAppPeekBinding
import com.aurora.store.util.CommonUtil
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
class AppPeekDialogSheet : BaseBottomSheet() {
@@ -48,7 +48,7 @@ class AppPeekDialogSheet : BaseBottomSheet() {
override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) {
B.txtLine1.text = args.app.displayName
B.imgIcon.load(args.app.iconArtwork.url) {
transform(RoundedCorners(25))
transformations(RoundedCornersTransformation(25F))
}
B.txtLine2.text = args.app.developerName
B.txtLine3.text = String.format(

View File

@@ -25,11 +25,11 @@ import android.provider.Settings
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.aurora.extensions.load
import coil.load
import coil.transform.CircleCropTransformation
import com.aurora.extensions.toast
import com.aurora.store.R
import com.aurora.store.databinding.SheetDeviceMiuiBinding
import com.bumptech.glide.load.resource.bitmap.CircleCrop
class DeviceMiuiSheet : BaseBottomSheet() {
@@ -54,7 +54,7 @@ class DeviceMiuiSheet : BaseBottomSheet() {
private fun inflateData() {
B.imgIcon.load(R.drawable.ic_xiaomi_logo) {
transform(CircleCrop())
transformations(CircleCropTransformation())
}
}

View File

@@ -24,12 +24,12 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.navArgs
import coil.load
import coil.transform.CircleCropTransformation
import com.aurora.extensions.copyToClipBoard
import com.aurora.extensions.load
import com.aurora.extensions.toast
import com.aurora.store.R
import com.aurora.store.databinding.SheetInstallErrorBinding
import com.bumptech.glide.load.resource.bitmap.CircleCrop
class InstallErrorDialogSheet : BaseBottomSheet() {
@@ -55,7 +55,7 @@ class InstallErrorDialogSheet : BaseBottomSheet() {
private fun inflateData() {
B.imgIcon.load(args.app.iconArtwork.url) {
transform(CircleCrop())
transformations(CircleCropTransformation())
}
B.txtLine1.text = args.app.displayName

View File

@@ -27,12 +27,12 @@ import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.navArgs
import com.aurora.extensions.load
import coil.load
import coil.transform.RoundedCornersTransformation
import com.aurora.extensions.toast
import com.aurora.store.R
import com.aurora.store.databinding.SheetManualDownloadBinding
import com.aurora.store.viewmodel.sheets.SheetsViewModel
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@@ -78,7 +78,7 @@ class ManualDownloadSheet : BaseBottomSheet() {
private fun inflateData() {
B.imgIcon.load(args.app.iconArtwork.url) {
placeholder(R.drawable.bg_placeholder)
transform(RoundedCorners(32))
transformations(RoundedCornersTransformation(32F))
}
B.txtLine1.text = args.app.displayName

View File

@@ -24,8 +24,9 @@ import android.view.View
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import coil.load
import coil.transform.RoundedCornersTransformation
import com.aurora.extensions.hide
import com.aurora.extensions.load
import com.aurora.extensions.show
import com.aurora.store.R
import com.aurora.store.data.AuthState
@@ -34,7 +35,6 @@ import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_DEFAULT_SELECTED_TAB
import com.aurora.store.util.Preferences.PREFERENCE_INTRO
import com.aurora.store.viewmodel.auth.AuthViewModel
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
class SplashFragment : Fragment(R.layout.fragment_splash) {
@@ -49,7 +49,7 @@ class SplashFragment : Fragment(R.layout.fragment_splash) {
_binding = FragmentSplashBinding.bind(view)
binding.imgIcon.load(R.mipmap.ic_launcher) {
transform(RoundedCorners(32))
transformations(RoundedCornersTransformation(32F))
}
// Toolbar

View File

@@ -35,8 +35,8 @@ import com.aurora.store.databinding.FragmentGenericRecyclerBinding
import com.aurora.store.view.epoxy.views.preference.DeviceViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.viewmodel.spoof.SpoofViewModel
import kotlinx.coroutines.launch
import java.util.Properties
import kotlinx.coroutines.launch
class DeviceSpoofFragment : BaseFragment() {