Skip to content

Commit 7b30609

Browse files
committed
Add custom request builder for GlideImagesProcessor
1 parent 68c76be commit 7b30609

1 file changed

Lines changed: 61 additions & 54 deletions

File tree

glide/src/main/java/com/omega_r/libs/omegatypes/image/GlideImagesProcessor.kt

Lines changed: 61 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ import kotlin.reflect.KClass
2424
* Created by Anton Knyazev on 2019-10-03.
2525
*/
2626
open class GlideImagesProcessor(
27-
protected val oldImagesProcessor: ImageProcessors,
28-
vararg excludeImageClasses: KClass<out Image>
27+
protected val oldImagesProcessor: ImageProcessors,
28+
vararg excludeImageClasses: KClass<out Image>,
29+
private val customBuilder: CustomRequestBuilder? = null,
2930
) : ImageProcessors() {
3031

3132
companion object {
@@ -37,7 +38,6 @@ open class GlideImagesProcessor(
3738
fun setGlideBitmapPool(context: Context) {
3839
BitmapDecoders.current = SimpleBitmapDecoders(GlideBitmapPool(Glide.get(context).bitmapPool))
3940
}
40-
4141
}
4242

4343
private val excludeImageClasses = listOf(*excludeImageClasses)
@@ -55,66 +55,65 @@ open class GlideImagesProcessor(
5555
is DrawableImage -> load(image.drawable)
5656
is ByteArrayImage -> load(image.byteArray)
5757
is AssetImage -> load("file:///android_asset/" + image.fileName)
58-
else -> null
58+
else -> if (customBuilder?.handles(image) == true) customBuilder.createRequestBuilder(this, image) else null
5959
}
6060
}
6161

6262
override fun Image.applyImage(imageView: ImageView, placeholderResId: Int, onImageApplied: (() -> Unit)?) {
6363
Glide.with(imageView)
64-
.asDrawable()
65-
.createRequestBuilder(this)
66-
?.applyPlaceholder(placeholderResId)
67-
?.listener(GlideImageRequestListener(onImageApplied))
68-
?.into(imageView)
69-
?: applyOld { applyImage(imageView, placeholderResId) }
64+
.asDrawable()
65+
.createRequestBuilder(this)
66+
?.applyPlaceholder(placeholderResId)
67+
?.listener(GlideImageRequestListener(onImageApplied))
68+
?.into(imageView)
69+
?: applyOld { applyImage(imageView, placeholderResId) }
7070
}
7171

7272
override fun Image.applyBackground(view: View, placeholderResId: Int) {
7373
Image.Processor.applyEmptyBackground(view, placeholderResId)
7474
Glide.with(view)
75-
.asDrawable()
76-
.createRequestBuilder(this)
77-
?.applyPlaceholder(placeholderResId)
78-
?.into(object : CustomViewTarget<View, Drawable>(view) {
79-
80-
override fun onLoadFailed(errorDrawable: Drawable?) {
81-
Image.Processor.applyBackground(view, errorDrawable)
82-
}
83-
84-
override fun onResourceCleared(placeholder: Drawable?) {
85-
Image.Processor.applyBackground(view, placeholder)
86-
}
87-
88-
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
89-
Image.Processor.applyBackground(view, resource)
90-
}
91-
92-
})
93-
?: applyOld { applyBackground(view, placeholderResId) }
75+
.asDrawable()
76+
.createRequestBuilder(this)
77+
?.applyPlaceholder(placeholderResId)
78+
?.into(object : CustomViewTarget<View, Drawable>(view) {
79+
80+
override fun onLoadFailed(errorDrawable: Drawable?) {
81+
Image.Processor.applyBackground(view, errorDrawable)
82+
}
83+
84+
override fun onResourceCleared(placeholder: Drawable?) {
85+
Image.Processor.applyBackground(view, placeholder)
86+
}
87+
88+
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
89+
Image.Processor.applyBackground(view, resource)
90+
}
91+
})
92+
?: applyOld { applyBackground(view, placeholderResId) }
9493
}
9594

9695
override suspend fun Image.getStream(context: Context, compressFormat: Bitmap.CompressFormat, quality: Int): InputStream {
9796
return Glide.with(context)
98-
.asBitmap()
99-
.createRequestBuilder(this)
100-
?.run {
101-
val futureTarget = submit()
102-
try {
103-
val bitmap = futureTarget.get()
104-
bitmap.toInputStream(compressFormat, quality)
105-
} finally {
106-
Glide.with(context)
107-
.clear(futureTarget)
108-
}
109-
} ?: applyOld { getStream(context, compressFormat, quality) }
97+
.asBitmap()
98+
.createRequestBuilder(this)
99+
?.run {
100+
val futureTarget = submit()
101+
try {
102+
val bitmap = futureTarget.get()
103+
bitmap.toInputStream(compressFormat, quality)
104+
} finally {
105+
Glide.with(context)
106+
.clear(futureTarget)
107+
}
108+
} ?: applyOld { getStream(context, compressFormat, quality) }
110109
}
111110

112111
override fun Image.preload(context: Context) {
113112
Glide.with(context)
114-
.asDrawable()
115-
.createRequestBuilder(this)
116-
?.preload()
117-
?: applyOld { preload(context) }
113+
.asDrawable()
114+
.createRequestBuilder(this)
115+
?.preload()
116+
?: applyOld { preload(context) }
118117
}
119118

120119
protected fun <T> RequestBuilder<T>.applyPlaceholder(placeholderResId: Int): RequestBuilder<T> {
@@ -124,19 +123,27 @@ open class GlideImagesProcessor(
124123
protected inline fun <R> applyOld(block: ImageProcessors.() -> R): R {
125124
return block(oldImagesProcessor)
126125
}
126+
127+
interface CustomRequestBuilder {
128+
129+
fun handles(image: Image): Boolean
130+
131+
fun <T> createRequestBuilder(builder: RequestBuilder<T>, image: Image): RequestBuilder<T>?
132+
}
127133
}
128134

129135
class GlideImageRequestListener(private val onImageLoaded: (() -> Unit)?) : RequestListener<Drawable> {
130136

131137
companion object {
138+
132139
private val TAG = GlideImageRequestListener::class.java.name
133140
}
134141

135142
override fun onLoadFailed(
136-
e: GlideException?,
137-
model: Any?,
138-
target: Target<Drawable>?,
139-
isFirstResource: Boolean
143+
e: GlideException?,
144+
model: Any?,
145+
target: Target<Drawable>?,
146+
isFirstResource: Boolean,
140147
): Boolean {
141148
Log.e(TAG, "Image load failed: ", e)
142149
if (isFirstResource) {
@@ -146,11 +153,11 @@ class GlideImageRequestListener(private val onImageLoaded: (() -> Unit)?) : Requ
146153
}
147154

148155
override fun onResourceReady(
149-
resource: Drawable,
150-
model: Any?,
151-
target: Target<Drawable>,
152-
dataSource: DataSource,
153-
isFirstResource: Boolean
156+
resource: Drawable,
157+
model: Any?,
158+
target: Target<Drawable>,
159+
dataSource: DataSource,
160+
isFirstResource: Boolean,
154161
): Boolean {
155162
target.onResourceReady(resource, null)
156163
if (isFirstResource) {

0 commit comments

Comments
 (0)