Skip to content

Commit 0bddccc

Browse files
committed
Refactoring images, add imageprocessors
1 parent 377b2f3 commit 0bddccc

File tree

32 files changed

+1352
-590
lines changed

32 files changed

+1352
-590
lines changed

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

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,33 @@
11
package omega_r.com.omegatypesexample
22

3-
import android.graphics.Bitmap
4-
import android.graphics.BitmapFactory
3+
54
import android.os.Bundle
65
import android.widget.ImageView
76
import android.widget.TextView
87
import androidx.core.content.res.ResourcesCompat
9-
import com.omega_r.libs.omegatypes.*
10-
import kotlin.concurrent.thread
8+
import com.omega_r.libs.omegatypes.Color
9+
import com.omega_r.libs.omegatypes.Text
10+
import com.omega_r.libs.omegatypes.TextStyle
11+
import com.omega_r.libs.omegatypes.image.*
12+
import com.omega_r.libs.omegatypes.join
13+
1114

1215
class MainActivity : BaseActivity() {
1316

17+
companion object {
18+
19+
init {
20+
GlideImagesProcessor.setAsCurrentImagesProcessor()
21+
}
22+
23+
}
24+
1425
private val exampleTextView by bind<TextView>(R.id.textview)
1526
private val imageView by bind<ImageView>(R.id.imageview)
1627

1728
override fun onCreate(savedInstanceState: Bundle?) {
1829
super.onCreate(savedInstanceState)
30+
1931
setContentView(R.layout.activity_main)
2032
val text = Text.from("test ") +
2133
Text.from(
@@ -31,18 +43,21 @@ class MainActivity : BaseActivity() {
3143

3244
val list = listOf(Text.from("1", TextStyle.color(Color.fromAttribute(R.attr.colorAccent))), Text.from("2", TextStyle.color(Color.fromAttribute(R.attr.colorAccent))), Text.from("3"))
3345

34-
title = list.join(",", postfix = ".").getCharSequence(this)
46+
title = list.join(",", postfix = ".").getCharSequence(this)
3547

36-
val image = Image.from("https://avatars1.githubusercontent.com/u/28600571")
48+
val image = Image.from("https://dejagerart.com/wp-content/uploads/2018/09/Test-Logo-Circle-black-transparent.png")
3749

38-
thread {
39-
val stream = image.getStream(this, Bitmap.CompressFormat.PNG)
40-
val bitmap = BitmapFactory.decodeStream(stream)
41-
runOnUiThread {
42-
imageView.setImageBitmap(bitmap)
43-
}
4450

45-
}
51+
imageView.setImage(image)
52+
53+
// thread {
54+
// val stream = image.getStream(this, Bitmap.CompressFormat.PNG)
55+
// val bitmap = BitmapFactory.decodeStream(stream)
56+
// runOnUiThread {
57+
// imageView.setImageBitmap(bitmap)
58+
// }
59+
//
60+
// }
4661

4762
}
4863

glide/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ dependencies {
3232

3333
implementation fileTree(dir: 'libs', include: ['*.jar'])
3434

35-
implementation ("com.github.bumptech.glide:glide:4.9.0") {
35+
api ("com.github.bumptech.glide:glide:4.9.0") {
3636
exclude group: "com.android.support"
3737
}
3838

glide/src/main/java/com/omega_r/libs/omegatypes/UrlImageExtensions.kt

Lines changed: 0 additions & 9 deletions
This file was deleted.

glide/src/main/java/com/omega_r/libs/omegatypes/glide/GlideImage.kt

Lines changed: 0 additions & 110 deletions
This file was deleted.
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
package com.omega_r.libs.omegatypes.image
2+
3+
import android.content.Context
4+
import android.graphics.Bitmap
5+
import android.graphics.drawable.Drawable
6+
import android.view.View
7+
import android.widget.ImageView
8+
import com.bumptech.glide.Glide
9+
import com.bumptech.glide.RequestBuilder
10+
import com.bumptech.glide.RequestManager
11+
import com.bumptech.glide.request.target.CustomTarget
12+
import com.bumptech.glide.request.target.CustomViewTarget
13+
import com.bumptech.glide.request.transition.Transition
14+
import com.omega_r.libs.omegatypes.glide.WrapperInputStream
15+
import java.io.InputStream
16+
import kotlin.reflect.KClass
17+
18+
/**
19+
* Created by Anton Knyazev on 2019-10-03.
20+
*/
21+
class GlideImagesProcessor(
22+
private val oldImagesProcessor: ImagesProcessor,
23+
vararg excludeImageClasses: KClass<out Image>
24+
) : ImagesProcessor() {
25+
26+
companion object {
27+
28+
fun setAsCurrentImagesProcessor() {
29+
current = GlideImagesProcessor(current)
30+
}
31+
32+
}
33+
34+
private val excludeImageClasses = listOf(*excludeImageClasses)
35+
36+
private fun RequestManager.createRequestBuilder(image: Image): RequestBuilder<Drawable>? {
37+
if (excludeImageClasses.contains(image::class)) {
38+
return null
39+
}
40+
return when (image) {
41+
is UrlImage -> load(image.url)
42+
is UriImage -> load(image.uri)
43+
is FileImage -> load(image.file)
44+
is ResourceImage -> load(image.resId)
45+
is BitmapImage -> load(image.bitmap)
46+
is DrawableImage -> load(image.drawable)
47+
is ByteArrayImage -> load(image.byteArray)
48+
else -> null
49+
}
50+
}
51+
52+
override fun Image.applyImage(imageView: ImageView, placeholderResId: Int) {
53+
Glide.with(imageView)
54+
.createRequestBuilder(this)
55+
?.apply {
56+
if (placeholderResId != Image.NO_PLACEHOLDER_RES) placeholder(placeholderResId)
57+
into(imageView)
58+
} ?: with(oldImagesProcessor) {
59+
applyImage(imageView, placeholderResId)
60+
}
61+
}
62+
63+
override fun Image.applyBackground(view: View, placeholderResId: Int) {
64+
Image.Processor.applyEmptyBackground(view, placeholderResId)
65+
Glide.with(view)
66+
.createRequestBuilder(this)
67+
?.apply {
68+
69+
if (placeholderResId != Image.NO_PLACEHOLDER_RES) placeholder(placeholderResId)
70+
71+
into(object : CustomViewTarget<View, Drawable>(view) {
72+
override fun onLoadFailed(errorDrawable: Drawable?) {
73+
Image.Processor.applyBackground(view, errorDrawable)
74+
}
75+
76+
override fun onResourceCleared(placeholder: Drawable?) {
77+
Image.Processor.applyBackground(view, placeholder)
78+
}
79+
80+
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
81+
Image.Processor.applyBackground(view, resource)
82+
}
83+
84+
})
85+
86+
} ?: with(oldImagesProcessor) {
87+
applyBackground(view, placeholderResId)
88+
}
89+
}
90+
91+
override fun Image.getStream(context: Context, compressFormat: Bitmap.CompressFormat, quality: Int): InputStream {
92+
return Glide.with(context)
93+
.createRequestBuilder(this)
94+
?.run {
95+
val stream = WrapperInputStream()
96+
97+
into(object : CustomTarget<Drawable>() {
98+
override fun onLoadCleared(placeholder: Drawable?) {
99+
// nothing
100+
}
101+
102+
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
103+
stream.inputStream = Image.Processor.toBitmap(resource) {
104+
toInputStream(compressFormat, quality)
105+
}
106+
}
107+
108+
})
109+
stream
110+
111+
} ?: with(oldImagesProcessor) {
112+
getStream(context, compressFormat, quality)
113+
}
114+
115+
}
116+
117+
override fun Image.preload(context: Context) {
118+
Glide.with(context)
119+
.createRequestBuilder(this)
120+
?.apply {
121+
preload()
122+
} ?: with(oldImagesProcessor) {
123+
preload(context)
124+
}
125+
}
126+
127+
}

0 commit comments

Comments
 (0)