@@ -15,6 +15,7 @@ import androidx.compose.ui.graphics.DefaultAlpha
15
15
import androidx.compose.ui.layout.ContentScale
16
16
import androidx.compose.ui.layout.layout
17
17
import androidx.compose.ui.platform.LocalContext
18
+ import androidx.compose.ui.platform.LocalInspectionMode
18
19
import androidx.compose.ui.semantics.SemanticsPropertyKey
19
20
import androidx.compose.ui.semantics.SemanticsPropertyReceiver
20
21
import androidx.compose.ui.semantics.semantics
@@ -28,6 +29,7 @@ import com.bumptech.glide.integration.ktx.InternalGlideApi
28
29
import com.bumptech.glide.integration.ktx.ResolvableGlideSize
29
30
import com.bumptech.glide.integration.ktx.Size
30
31
import com.bumptech.glide.integration.ktx.Status
32
+ import com.google.accompanist.drawablepainter.rememberDrawablePainter
31
33
32
34
/* * Mutates and returns the given [RequestBuilder] to apply relevant options. */
33
35
public typealias RequestBuilderTransform <T > = (RequestBuilder <T >) -> RequestBuilder <T >
@@ -111,6 +113,14 @@ public fun GlideImage(
111
113
val overrideSize: Size ? = requestBuilder.overrideSize()
112
114
val (size, finalModifier) = rememberSizeAndModifier(overrideSize, modifier)
113
115
116
+ // TODO(judds): It seems like we should be able to use the production paths for
117
+ // resource / drawables as well as Composables. It's not totally clear what part of the prod code
118
+ // isn't supported.
119
+ if (LocalInspectionMode .current && loading?.isResourceOrDrawable() == true ) {
120
+ PreviewResourceOrDrawable (loading, contentDescription, modifier)
121
+ return
122
+ }
123
+
114
124
SizedGlideImage (
115
125
requestBuilder = requestBuilder,
116
126
size = size,
@@ -125,6 +135,27 @@ public fun GlideImage(
125
135
)
126
136
}
127
137
138
+ @OptIn(ExperimentalGlideComposeApi ::class )
139
+ @Composable
140
+ private fun PreviewResourceOrDrawable (
141
+ loading : Placeholder ,
142
+ contentDescription : String? ,
143
+ modifier : Modifier ,
144
+ ) {
145
+ val drawable =
146
+ when (loading) {
147
+ is Placeholder .OfDrawable -> loading.drawable
148
+ is Placeholder .OfResourceId -> LocalContext .current.getDrawable(loading.resourceId)
149
+ is Placeholder .OfComposable ->
150
+ throw IllegalArgumentException (" Composables should go through the production codepath" )
151
+ }
152
+ Image (
153
+ painter = rememberDrawablePainter(drawable),
154
+ modifier = modifier,
155
+ contentDescription = contentDescription,
156
+ )
157
+ }
158
+
128
159
/* *
129
160
* Used to specify a [Drawable] to use in conjunction with [GlideImage]'s `loading` or `failure`
130
161
* parameters.
@@ -177,6 +208,13 @@ public sealed class Placeholder {
177
208
internal class OfResourceId (@DrawableRes internal val resourceId : Int ) : Placeholder()
178
209
internal class OfComposable (internal val composable : @Composable () -> Unit ) : Placeholder()
179
210
211
+ internal fun isResourceOrDrawable () =
212
+ when (this ) {
213
+ is OfDrawable -> true
214
+ is OfResourceId -> true
215
+ is OfComposable -> false
216
+ }
217
+
180
218
internal fun maybeComposable (): (@Composable () -> Unit )? =
181
219
when (this ) {
182
220
is OfComposable -> this .composable
0 commit comments