@@ -24,20 +24,20 @@ 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 {
3233
33- fun setAsCurrentImagesProcessor () {
34- current = GlideImagesProcessor (current)
34+ fun setAsCurrentImagesProcessor (customRequestBuilder : CustomRequestBuilder ? = null ) {
35+ current = GlideImagesProcessor (current, customBuilder = customRequestBuilder )
3536 }
3637
3738 fun setGlideBitmapPool (context : Context ) {
3839 BitmapDecoders .current = SimpleBitmapDecoders (GlideBitmapPool (Glide .get(context).bitmapPool))
3940 }
40-
4141 }
4242
4343 private val excludeImageClasses = listOf (* excludeImageClasses)
@@ -54,66 +54,66 @@ open class GlideImagesProcessor(
5454 is BitmapImage -> load(image.bitmap)
5555 is DrawableImage -> load(image.drawable)
5656 is ByteArrayImage -> load(image.byteArray)
57- else -> null
57+ is AssetImage -> load(" file:///android_asset/" + image.fileName)
58+ else -> if (customBuilder?.handles(image) == true ) customBuilder.createRequestBuilder(this , image) else null
5859 }
5960 }
6061
6162 override fun Image.applyImage (imageView : ImageView , placeholderResId : Int , onImageApplied : (() -> Unit )? ) {
6263 Glide .with (imageView)
63- .asDrawable()
64- .createRequestBuilder(this )
65- ?.applyPlaceholder(placeholderResId)
66- ?.listener(GlideImageRequestListener (onImageApplied))
67- ?.into(imageView)
68- ? : applyOld { applyImage(imageView, placeholderResId) }
64+ .asDrawable()
65+ .createRequestBuilder(this )
66+ ?.applyPlaceholder(placeholderResId)
67+ ?.listener(GlideImageRequestListener (onImageApplied))
68+ ?.into(imageView)
69+ ? : applyOld { applyImage(imageView, placeholderResId) }
6970 }
7071
7172 override fun Image.applyBackground (view : View , placeholderResId : Int ) {
7273 Image .Processor .applyEmptyBackground(view, placeholderResId)
7374 Glide .with (view)
74- .asDrawable()
75- .createRequestBuilder(this )
76- ?.applyPlaceholder(placeholderResId)
77- ?.into(object : CustomViewTarget <View , Drawable >(view) {
78-
79- override fun onLoadFailed (errorDrawable : Drawable ? ) {
80- Image .Processor .applyBackground(view, errorDrawable)
81- }
82-
83- override fun onResourceCleared (placeholder : Drawable ? ) {
84- Image .Processor .applyBackground(view, placeholder)
85- }
86-
87- override fun onResourceReady (resource : Drawable , transition : Transition <in Drawable >? ) {
88- Image .Processor .applyBackground(view, resource)
89- }
90-
91- })
92- ? : 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) }
9393 }
9494
9595 override suspend fun Image.getStream (context : Context , compressFormat : Bitmap .CompressFormat , quality : Int ): InputStream {
9696 return Glide .with (context)
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) }
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) }
109109 }
110110
111111 override fun Image.preload (context : Context ) {
112112 Glide .with (context)
113- .asDrawable()
114- .createRequestBuilder(this )
115- ?.preload()
116- ? : applyOld { preload(context) }
113+ .asDrawable()
114+ .createRequestBuilder(this )
115+ ?.preload()
116+ ? : applyOld { preload(context) }
117117 }
118118
119119 protected fun <T > RequestBuilder<T>.applyPlaceholder (placeholderResId : Int ): RequestBuilder <T > {
@@ -123,19 +123,27 @@ open class GlideImagesProcessor(
123123 protected inline fun <R > applyOld (block : ImageProcessors .() -> R ): R {
124124 return block(oldImagesProcessor)
125125 }
126+
127+ interface CustomRequestBuilder {
128+
129+ fun handles (image : Image ): Boolean
130+
131+ fun <T > createRequestBuilder (builder : RequestBuilder <T >, image : Image ): RequestBuilder <T >?
132+ }
126133}
127134
128135class GlideImageRequestListener (private val onImageLoaded : (() -> Unit )? ) : RequestListener<Drawable> {
129136
130137 companion object {
138+
131139 private val TAG = GlideImageRequestListener ::class .java.name
132140 }
133141
134142 override fun onLoadFailed (
135- e : GlideException ? ,
136- model : Any? ,
137- target : Target <Drawable >? ,
138- isFirstResource : Boolean
143+ e : GlideException ? ,
144+ model : Any? ,
145+ target : Target <Drawable >? ,
146+ isFirstResource : Boolean ,
139147 ): Boolean {
140148 Log .e(TAG , " Image load failed: " , e)
141149 if (isFirstResource) {
@@ -145,11 +153,11 @@ class GlideImageRequestListener(private val onImageLoaded: (() -> Unit)?) : Requ
145153 }
146154
147155 override fun onResourceReady (
148- resource : Drawable ,
149- model : Any? ,
150- target : Target <Drawable >,
151- dataSource : DataSource ,
152- isFirstResource : Boolean
156+ resource : Drawable ,
157+ model : Any? ,
158+ target : Target <Drawable >,
159+ dataSource : DataSource ,
160+ isFirstResource : Boolean ,
153161 ): Boolean {
154162 target.onResourceReady(resource, null )
155163 if (isFirstResource) {
0 commit comments