Skip to content

Commit 7e514bc

Browse files
committed
added image loading callback
1 parent ee712b9 commit 7e514bc

File tree

5 files changed

+58
-7
lines changed

5 files changed

+58
-7
lines changed

app/src/main/java/omega_r/com/omegatypesexample/MainActivity.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.graphics.Bitmap
55
import android.graphics.BitmapFactory
66
import android.graphics.drawable.BitmapDrawable
77
import android.os.Bundle
8+
import android.util.Log
89
import android.widget.ImageView
910
import android.widget.TextView
1011
import androidx.core.content.res.ResourcesCompat
@@ -75,7 +76,9 @@ class MainActivity : BaseActivity() {
7576
// image
7677
// }
7778

78-
imageView.setImage(image)
79+
imageView.setImage(image, processor = GlideImagesProcessor(ImageProcessors.current), onImageApplied = {
80+
Log.d("TAG","onImageApplied")
81+
})
7982

8083

8184

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

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@ package com.omega_r.libs.omegatypes.image
33
import android.content.Context
44
import android.graphics.Bitmap
55
import android.graphics.drawable.Drawable
6+
import android.util.Log
67
import android.view.View
78
import android.widget.ImageView
89
import com.bumptech.glide.Glide
910
import com.bumptech.glide.RequestBuilder
11+
import com.bumptech.glide.load.DataSource
12+
import com.bumptech.glide.load.engine.GlideException
13+
import com.bumptech.glide.request.RequestListener
1014
import com.bumptech.glide.request.target.CustomViewTarget
15+
import com.bumptech.glide.request.target.Target
1116
import com.bumptech.glide.request.transition.Transition
1217
import com.omega_r.libs.omegatypes.decoders.BitmapDecoders
1318
import com.omega_r.libs.omegatypes.decoders.SimpleBitmapDecoders
@@ -53,11 +58,12 @@ open class GlideImagesProcessor(
5358
}
5459
}
5560

56-
override fun Image.applyImage(imageView: ImageView, placeholderResId: Int) {
61+
override fun Image.applyImage(imageView: ImageView, placeholderResId: Int, onImageApplied: (() -> Unit)?) {
5762
Glide.with(imageView)
5863
.asDrawable()
5964
.createRequestBuilder(this)
6065
?.applyPlaceholder(placeholderResId)
66+
?.listener(GlideImageRequestListener(onImageApplied))
6167
?.into(imageView)
6268
?: applyOld { applyImage(imageView, placeholderResId) }
6369
}
@@ -117,4 +123,38 @@ open class GlideImagesProcessor(
117123
protected inline fun <R> applyOld(block: ImageProcessors.() -> R): R {
118124
return block(oldImagesProcessor)
119125
}
126+
}
127+
128+
class GlideImageRequestListener(private val onImageLoaded: (() -> Unit)?) : RequestListener<Drawable> {
129+
130+
companion object {
131+
private val TAG = GlideImageRequestListener::class.java.name
132+
}
133+
134+
override fun onLoadFailed(
135+
e: GlideException?,
136+
model: Any?,
137+
target: Target<Drawable>?,
138+
isFirstResource: Boolean
139+
): Boolean {
140+
Log.e(TAG, "Image load failed: ", e)
141+
if (isFirstResource) {
142+
onImageLoaded?.invoke()
143+
}
144+
return false
145+
}
146+
147+
override fun onResourceReady(
148+
resource: Drawable,
149+
model: Any?,
150+
target: Target<Drawable>,
151+
dataSource: DataSource,
152+
isFirstResource: Boolean
153+
): Boolean {
154+
target.onResourceReady(resource, null)
155+
if (isFirstResource) {
156+
onImageLoaded?.invoke()
157+
}
158+
return true
159+
}
120160
}

omegatypes/src/main/java/com/omega_r/libs/omegatypes/image/Image.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,22 @@ suspend fun Image.getStream(
138138
}
139139

140140
@JvmOverloads
141-
fun ImageView.setImage(image: Image?, placeholderResId: Int = Image.NO_PLACEHOLDER_RES, processor: ImageProcessors = ImageProcessors.current) {
141+
fun ImageView.setImage(
142+
image: Image?,
143+
placeholderResId: Int = Image.NO_PLACEHOLDER_RES,
144+
processor: ImageProcessors = ImageProcessors.current,
145+
onImageApplied: (() -> Unit)? = null
146+
) {
142147
with(processor) {
143148
if (image != null) {
144-
image.applyImage(this@setImage, placeholderResId)
149+
image.applyImage(this@setImage, placeholderResId, onImageApplied)
145150
} else {
146151
if (placeholderResId == 0) {
147152
setImageDrawable(null)
148153
} else {
149154
setImageResource(placeholderResId)
150155
}
156+
onImageApplied?.invoke()
151157
}
152158
}
153159
}

omegatypes/src/main/java/com/omega_r/libs/omegatypes/image/ImageProcessors.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ abstract class ImageProcessors : CoroutineScope {
2727
override val coroutineContext: CoroutineContext
2828
get() = Dispatchers.Default
2929

30-
abstract fun Image.applyImage(imageView: ImageView, placeholderResId: Int)
30+
abstract fun Image.applyImage(imageView: ImageView, placeholderResId: Int, onImageApplied: (() -> Unit)? = null)
3131

3232
abstract fun Image.applyBackground(view: View, placeholderResId: Int)
3333

@@ -43,8 +43,9 @@ abstract class ImageProcessors : CoroutineScope {
4343
map[imageClass] = imageProcessor
4444
}
4545

46-
override fun Image.applyImage(imageView: ImageView, placeholderResId: Int) = with(getImageProcessor()) {
46+
override fun Image.applyImage(imageView: ImageView, placeholderResId: Int, onImageApplied: (() -> Unit)?): Unit = with(getImageProcessor()) {
4747
applyImage(imageView, placeholderResId)
48+
onImageApplied?.invoke()
4849
}
4950

5051
override fun Image.applyBackground(view: View, placeholderResId: Int) = with(getImageProcessor()) {

picasso/src/main/java/com/omega_r/libs/omegatypes/image/PicassoImagesProcessor.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class PicassoImagesProcessor(
5555
}
5656
}
5757

58-
override fun Image.applyImage(imageView: ImageView, placeholderResId: Int) {
58+
override fun Image.applyImage(imageView: ImageView, placeholderResId: Int, onImageApplied: (() -> Unit)?) {
5959
createRequestCreator()?.apply {
6060
if (placeholderResId != NO_PLACEHOLDER_RES) placeholder(placeholderResId)
6161
fit()
@@ -69,6 +69,7 @@ class PicassoImagesProcessor(
6969
} ?: with(oldImagesProcessor) {
7070
applyImage(imageView, placeholderResId)
7171
}
72+
onImageApplied?.invoke()
7273
}
7374

7475
override fun Image.applyBackground(view: View, placeholderResId: Int) {

0 commit comments

Comments
 (0)