@@ -24,8 +24,9 @@ import kotlin.reflect.KClass
2424 * Created by Anton Knyazev on 2019-10-03.
2525 */
2626open 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
129135class 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