From e94916ef5d797345a114a2665a3c66d2fb7f4647 Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Sat, 2 Sep 2023 10:41:15 -0700 Subject: [PATCH 1/7] Fix drawables not animating via a custom DrawablePainter --- integration/compose/build.gradle | 1 - .../integration/compose/GlideModifier.kt | 32 +++++++++ .../glide/integration/compose/Painter.kt | 70 ++++++++++++++++++- settings.gradle | 1 - 4 files changed, 101 insertions(+), 3 deletions(-) diff --git a/integration/compose/build.gradle b/integration/compose/build.gradle index e879c9216e..db26ff18db 100644 --- a/integration/compose/build.gradle +++ b/integration/compose/build.gradle @@ -53,7 +53,6 @@ dependencies { } implementation libs.compose.foundation implementation libs.compose.ui - implementation libs.drawablepainter implementation libs.androidx.core.ktx debugImplementation libs.compose.ui.testmanifest androidTestImplementation libs.junit diff --git a/integration/compose/src/main/java/com/bumptech/glide/integration/compose/GlideModifier.kt b/integration/compose/src/main/java/com/bumptech/glide/integration/compose/GlideModifier.kt index d61fc1cb59..2e175b17ed 100644 --- a/integration/compose/src/main/java/com/bumptech/glide/integration/compose/GlideModifier.kt +++ b/integration/compose/src/main/java/com/bumptech/glide/integration/compose/GlideModifier.kt @@ -1,7 +1,10 @@ package com.bumptech.glide.integration.compose import android.graphics.PointF +import android.graphics.drawable.Animatable import android.graphics.drawable.Drawable +import android.os.Handler +import android.os.Looper import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier @@ -147,6 +150,10 @@ internal data class GlideNodeElement constructor( } } +private val MAIN_HANDLER by lazy(LazyThreadSafetyMode.NONE) { + Handler(Looper.getMainLooper()) +} + @ExperimentalGlideComposeApi @OptIn(InternalGlideApi::class) internal class GlideNode : DrawModifierNode, LayoutModifierNode, SemanticsModifierNode, @@ -179,6 +186,23 @@ internal class GlideNode : DrawModifierNode, LayoutModifierNode, SemanticsModifi private var transition: Transition = DoNotTransition + + private val callback: Drawable.Callback by lazy { + object : Drawable.Callback { + override fun invalidateDrawable(d: Drawable) { + invalidateDraw() + } + + override fun scheduleDrawable(d: Drawable, what: Runnable, time: Long) { + MAIN_HANDLER.postAtTime(what, time) + } + + override fun unscheduleDrawable(d: Drawable, what: Runnable) { + MAIN_HANDLER.removeCallbacks(what) + } + } + } + private fun RequestBuilder<*>.maybeImmediateSize() = this.overrideSize()?.let { ImmediateGlideSize(it) } @@ -399,7 +423,15 @@ internal class GlideNode : DrawModifierNode, LayoutModifierNode, SemanticsModifi private fun updateDrawable(drawable: Drawable?) { this.drawable = drawable + + this.drawable?.callback = null + this.drawable?.setVisible(false, false) + (this.drawable as? Animatable)?.stop() + painter = drawable?.toPainter() + drawable?.callback = callback + drawable?.setVisible(true, true) + (drawable as? Animatable)?.start() drawablePositionAndSize = null } diff --git a/integration/compose/src/main/java/com/bumptech/glide/integration/compose/Painter.kt b/integration/compose/src/main/java/com/bumptech/glide/integration/compose/Painter.kt index 5b1c2cea8a..04477f8a7b 100644 --- a/integration/compose/src/main/java/com/bumptech/glide/integration/compose/Painter.kt +++ b/integration/compose/src/main/java/com/bumptech/glide/integration/compose/Painter.kt @@ -3,12 +3,24 @@ package com.bumptech.glide.integration.compose import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable +import android.os.Build +import android.view.View +import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.asAndroidColorFilter import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.graphics.drawscope.DrawScope +import androidx.compose.ui.graphics.drawscope.drawIntoCanvas +import androidx.compose.ui.graphics.nativeCanvas import androidx.compose.ui.graphics.painter.BitmapPainter import androidx.compose.ui.graphics.painter.ColorPainter import androidx.compose.ui.graphics.painter.Painter -import com.google.accompanist.drawablepainter.DrawablePainter +import androidx.compose.ui.graphics.withSave +import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.LayoutDirection +import androidx.compose.ui.unit.toSize +import kotlin.math.roundToInt internal fun Drawable?.toPainter(): Painter = when (this) { @@ -17,3 +29,59 @@ internal fun Drawable?.toPainter(): Painter = null -> ColorPainter(Color.Transparent) else -> DrawablePainter(mutate()) } + +private class DrawablePainter( + val drawable: Drawable +) : Painter() { + init { + if (drawable.isIntrinsicSizeValid) { + drawable.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight) + } + } + + private var drawableIntrinsicSize = drawable.intrinsicSize + + private val Drawable.isIntrinsicSizeValid + get() = intrinsicWidth >= 0 && intrinsicHeight >= 0 + + private val Drawable.intrinsicSize: Size + get() = if (isIntrinsicSizeValid) { + IntSize(intrinsicWidth, intrinsicHeight).toSize() + } else { + Size.Unspecified + } + + override fun applyAlpha(alpha: Float): Boolean { + drawable.alpha = (alpha * 255).roundToInt().coerceIn(0, 255) + return true + } + + override fun applyColorFilter(colorFilter: ColorFilter?): Boolean { + drawable.colorFilter = colorFilter?.asAndroidColorFilter() + return true + } + + override fun applyLayoutDirection(layoutDirection: LayoutDirection): Boolean { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + return drawable.setLayoutDirection( + when (layoutDirection) { + LayoutDirection.Ltr -> View.LAYOUT_DIRECTION_LTR + LayoutDirection.Rtl -> View.LAYOUT_DIRECTION_RTL + } + ) + } + return false + } + + override val intrinsicSize: Size get() = drawableIntrinsicSize + + override fun DrawScope.onDraw() { + drawIntoCanvas { canvas -> + drawable.setBounds(0, 0, size.width.roundToInt(), size.height.roundToInt()) + + canvas.withSave { + drawable.draw(canvas.nativeCanvas) + } + } + } +} diff --git a/settings.gradle b/settings.gradle index 2d425d86ef..04f3bc9cae 100644 --- a/settings.gradle +++ b/settings.gradle @@ -115,7 +115,6 @@ dependencyResolutionManagement { library('dagger-android.support', 'com.google.dagger', 'dagger-android-support').versionRef('dagger') library('dagger-android.processor', 'com.google.dagger', 'dagger-android-processor').versionRef('dagger') library('dokka-gradle', 'org.jetbrains.dokka:dokka-gradle-plugin:1.7.10') - library('drawablepainter', 'com.google.accompanist:accompanist-drawablepainter:0.25.1') library('errorprone-annotations', 'com.google.errorprone', 'error_prone_annotations').versionRef('errorprone') library('errorprone-core', 'com.google.errorprone', 'error_prone_core').versionRef('errorprone') library('errorprone-gradle', 'net.ltgt.gradle:gradle-errorprone-plugin:2.0.2') From 6ff7f325353f4c3d913dc682d6e9201c8616c6ab Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Sat, 2 Sep 2023 13:13:45 -0700 Subject: [PATCH 2/7] Add a goldens based test utility for compose --- .../glideImage_startsAnimatedDrawable.png | Bin 0 -> 6344 bytes .../integration/compose/GlideImageTest.kt | 32 +++++- .../integration/compose/test/expectations.kt | 6 ++ .../java/com/bumptech/glide/test/goldens.kt | 95 ++++++++++++++++++ 4 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 integration/compose/src/androidTest/assets/glideImage_startsAnimatedDrawable.png create mode 100644 integration/compose/src/androidTest/java/com/bumptech/glide/test/goldens.kt diff --git a/integration/compose/src/androidTest/assets/glideImage_startsAnimatedDrawable.png b/integration/compose/src/androidTest/assets/glideImage_startsAnimatedDrawable.png new file mode 100644 index 0000000000000000000000000000000000000000..abb7321218bcf0d86f76e5a804cf4f234fc8e73e GIT binary patch literal 6344 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 + .assets + .open(testFileName(testName)).use { + val options = BitmapFactory.Options() + options.inScaled = false + BitmapFactory.decodeStream(it, null, options) + } + } catch (e: FileNotFoundException) { + null + } +} + +private fun testFileName(testName: String) = "$testName.$EXTENSION" + +private fun getTestFilesDir(): File { + val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + return File(dir, GENERATED_FILES_DIR) +} + +private fun writeBitmap(bitmap: Bitmap, testName: String): String { + val testFilesDir = getTestFilesDir() + require(!(!testFilesDir.exists() && !testFilesDir.mkdirs())) { "Failed to make directory: $testFilesDir" } + val file = File(testFilesDir, testFileName(testName)) + check(!(file.exists() && !file.delete())) { "Failed to remove existing file: $file" } + var os: OutputStream? = null + try { + os = BufferedOutputStream(FileOutputStream(file)) + bitmap.compress(Bitmap.CompressFormat.PNG, 100, os) + os.close() + } catch (e: IOException) { + throw RuntimeException(e) + } finally { + if (os != null) { + try { + os.close() + } catch (e: IOException) { + // Ignored. + } + } + } + return file.absolutePath +} \ No newline at end of file From 3472f80fc0b258e0962ff1966255d5284e2a40d1 Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Sat, 2 Sep 2023 21:29:47 -0700 Subject: [PATCH 3/7] Avoid duplicating Modifiers in GlideModifer --- ...DrawBehind_drawsImageOnTopOfBackground.png | Bin 0 -> 10416 bytes ...deImage_withPadding_appliesPaddingOnce.png | Bin 0 -> 32888 bytes ...osition_withPadding_appliesPaddingOnce.png | Bin 0 -> 2131 bytes .../integration/compose/GlideImageTest.kt | 57 ++++++++++++++- .../compose/GlideSubcompositionTest.kt | 69 +++++++++++++++++- .../java/com/bumptech/glide/test/goldens.kt | 5 ++ .../integration/compose/GlideModifier.kt | 14 ++-- 7 files changed, 131 insertions(+), 14 deletions(-) create mode 100644 integration/compose/src/androidTest/assets/glideImage_withDrawBehind_drawsImageOnTopOfBackground.png create mode 100644 integration/compose/src/androidTest/assets/glideImage_withPadding_appliesPaddingOnce.png create mode 100644 integration/compose/src/androidTest/assets/glideSubcomposition_withPadding_appliesPaddingOnce.png diff --git a/integration/compose/src/androidTest/assets/glideImage_withDrawBehind_drawsImageOnTopOfBackground.png b/integration/compose/src/androidTest/assets/glideImage_withDrawBehind_drawsImageOnTopOfBackground.png new file mode 100644 index 0000000000000000000000000000000000000000..e6da9a36a8bec0771c67f25156271ca3093cb8ee GIT binary patch literal 10416 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 literal 0 HcmV?d00001 diff --git a/integration/compose/src/androidTest/assets/glideImage_withPadding_appliesPaddingOnce.png b/integration/compose/src/androidTest/assets/glideImage_withPadding_appliesPaddingOnce.png new file mode 100644 index 0000000000000000000000000000000000000000..2fbf3bc474b0b271d0cde681070779d235450048 GIT binary patch literal 32888 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�Rp!Imt%@vW=tLJdzQ1JdoFa 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

#3R=A^gPW? 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 literal 0 HcmV?d00001 diff --git a/integration/compose/src/androidTest/assets/glideSubcomposition_withPadding_appliesPaddingOnce.png b/integration/compose/src/androidTest/assets/glideSubcomposition_withPadding_appliesPaddingOnce.png new file mode 100644 index 0000000000000000000000000000000000000000..be29ef15e30728ed68b0079f0ad3d45d6afe9b47 GIT binary patch literal 2131 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgF}%C(jTL zAgJL;>0n@B|Lf`E7*a9k?cKAD(yfvW56`=lUt;uT_hc=zTEJ{A`XHoXr9uGXGG?oU zmkoT6yx)~Pka6pt>-ziqx({zW&KF<&C-dxb>ixMtRnBgn`G4R1nKN(N|M_RZzOUYl z!N7R)?3-uLe%$fTn2|AIBmapr|Jxr0c-X0_Fg(vQ|2(~a-(GDQh7CV76do}i`1{r_ zrf*kO$xp6^-EY(Eq`Qk4e1 z`+GJ&J%S*DInl?qdW57 z>;Gv>AJ=cT-xnTUIE$sl_(NLSKjYKZ`|Vqw|9-spr_1r?QVtIFC%774)u=+G3l@_R@unO!wJSjqJwXZ>wYi{ZyfTmfxr4)v73;6bJvia__GbYfOG|H+p|SpTxknyx z=RVaWM6 Image( + imageVector = Icons.Default.Email, + contentDescription = "placeholder", + modifier = Modifier.width(400.pxToDp()) + ) + RequestState.Loading -> Spacer(modifier = Modifier.size(100.pxToDp())) + is RequestState.Success -> Image(painter = painter, contentDescription = null) + } + } + } + glideComposeRule.waitForIdle() + glideComposeRule.onNodeWithContentDescription("test") + .captureToImage() + .compareToGolden(testName.methodName) + } } + diff --git a/integration/compose/src/androidTest/java/com/bumptech/glide/test/goldens.kt b/integration/compose/src/androidTest/java/com/bumptech/glide/test/goldens.kt index 346345c359..8f59e09aec 100644 --- a/integration/compose/src/androidTest/java/com/bumptech/glide/test/goldens.kt +++ b/integration/compose/src/androidTest/java/com/bumptech/glide/test/goldens.kt @@ -4,8 +4,10 @@ import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory import android.os.Environment +import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.toPixelMap +import androidx.compose.ui.platform.LocalDensity import androidx.test.core.app.ApplicationProvider import java.io.BufferedOutputStream import java.io.File @@ -18,6 +20,9 @@ import java.lang.IllegalStateException const val GENERATED_FILES_DIR = "compose_goldens" const val EXTENSION = "png" +@Composable +fun Int.pxToDp() = with(LocalDensity.current) { toDp() } + fun ImageBitmap.compareToGolden(testName: String) { val bitmap = toBitmap() val existingGolden = readExistingGolden(testName) diff --git a/integration/compose/src/main/java/com/bumptech/glide/integration/compose/GlideModifier.kt b/integration/compose/src/main/java/com/bumptech/glide/integration/compose/GlideModifier.kt index 2e175b17ed..12c5232e17 100644 --- a/integration/compose/src/main/java/com/bumptech/glide/integration/compose/GlideModifier.kt +++ b/integration/compose/src/main/java/com/bumptech/glide/integration/compose/GlideModifier.kt @@ -89,16 +89,14 @@ internal fun Modifier.glideNode( requestListener, draw, transitionFactory, - ) then - clipToBounds() then + ) + .clipToBounds() + .semantics { if (contentDescription != null) { - semantics { - this@semantics.contentDescription = contentDescription - role = Role.Image - } - } else { - Modifier + this@semantics.contentDescription = contentDescription } + role = Role.Image + } } @ExperimentalGlideComposeApi From cbdc1e78b4ee0f335054bb2781f46cf8db82f914 Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Sat, 2 Sep 2023 22:23:08 -0700 Subject: [PATCH 4/7] Add device attribtues to golden file names --- integration/compose/build.gradle | 25 ++++++++++++++++++ ...Image_startsAnimatedDrawable_2.625_33.png} | Bin ...deImage_startsAnimatedDrawable_2.75_34.png | Bin 0 -> 7380 bytes ..._drawsImageOnTopOfBackground_2.625_33.png} | Bin ...nd_drawsImageOnTopOfBackground_2.75_34.png | Bin 0 -> 10427 bytes ...thPadding_appliesPaddingOnce_2.625_33.png} | Bin ...withPadding_appliesPaddingOnce_2.75_34.png | Bin 0 -> 32888 bytes ...thPadding_appliesPaddingOnce_2.625_33.png} | Bin ...withPadding_appliesPaddingOnce_2.75_34.png | Bin 0 -> 2114 bytes .../java/com/bumptech/glide/test/goldens.kt | 11 ++++++-- 10 files changed, 34 insertions(+), 2 deletions(-) rename integration/compose/src/androidTest/assets/{glideImage_startsAnimatedDrawable.png => glideImage_startsAnimatedDrawable_2.625_33.png} (100%) create mode 100644 integration/compose/src/androidTest/assets/glideImage_startsAnimatedDrawable_2.75_34.png rename integration/compose/src/androidTest/assets/{glideImage_withDrawBehind_drawsImageOnTopOfBackground.png => glideImage_withDrawBehind_drawsImageOnTopOfBackground_2.625_33.png} (100%) create mode 100644 integration/compose/src/androidTest/assets/glideImage_withDrawBehind_drawsImageOnTopOfBackground_2.75_34.png rename integration/compose/src/androidTest/assets/{glideImage_withPadding_appliesPaddingOnce.png => glideImage_withPadding_appliesPaddingOnce_2.625_33.png} (100%) create mode 100644 integration/compose/src/androidTest/assets/glideImage_withPadding_appliesPaddingOnce_2.75_34.png rename integration/compose/src/androidTest/assets/{glideSubcomposition_withPadding_appliesPaddingOnce.png => glideSubcomposition_withPadding_appliesPaddingOnce_2.625_33.png} (100%) create mode 100644 integration/compose/src/androidTest/assets/glideSubcomposition_withPadding_appliesPaddingOnce_2.75_34.png diff --git a/integration/compose/build.gradle b/integration/compose/build.gradle index db26ff18db..8202823048 100644 --- a/integration/compose/build.gradle +++ b/integration/compose/build.gradle @@ -66,3 +66,28 @@ dependencies { } apply from: "${rootProject.projectDir}/scripts/upload.gradle" + +task cleanGoldensOnDevice(type: Exec) { + commandLine = ['adb', 'shell', 'rm -rf /storage/emulated/0/DCIM/compose_goldens'] +} + +task pullGoldens(type: Exec) { + commandLine = [ + 'bash', + '-c', + 'adb shell \'find /storage/emulated/0/DCIM/compose_goldens -iname "*.png"\' ' + + '| tr -d "\015" ' + + '| while read line; do adb pull "$line" src/androidTest/assets/; done' + ] + +} + +afterEvaluate { + task rebuildGoldens(type: Exec) { + ignoreExitValue = true + dependsOn( + cleanGoldensOnDevice, + tasks.getByName("connectedDebugAndroidTest").finalizedBy(pullGoldens) + ) + } +} diff --git a/integration/compose/src/androidTest/assets/glideImage_startsAnimatedDrawable.png b/integration/compose/src/androidTest/assets/glideImage_startsAnimatedDrawable_2.625_33.png similarity index 100% rename from integration/compose/src/androidTest/assets/glideImage_startsAnimatedDrawable.png rename to integration/compose/src/androidTest/assets/glideImage_startsAnimatedDrawable_2.625_33.png diff --git a/integration/compose/src/androidTest/assets/glideImage_startsAnimatedDrawable_2.75_34.png b/integration/compose/src/androidTest/assets/glideImage_startsAnimatedDrawable_2.75_34.png new file mode 100644 index 0000000000000000000000000000000000000000..42daa9ab03c62fd58f76aa11020b3e7899128693 GIT binary patch literal 7380 zcmWkzcRX9)8xCs6UMZ=)s@jHzrlfW#8l}XhW-DsX+It1DDwNu*Uy7o()?Q7CQB_s7 z8>4C$wSM=P&&|1?`_Db+yzhIS=Xsx-ps%OJ#K6k{0)d#cA80%V?xz3$)6oE1MxpD#!xe8eZ6iA17fk064+23$wKY_YUcBB4A$##@XRTg$*WV!+yZ*{e z{&p0Wketo)E$`JIf=17&+AHaH<$5<^ib!^`$HjK`?pHKeK?Y_L?)lH}l${k^p8M0k zl+;}~&RAK=(s{{Pdk(#x$d3CLI(^AME@wrB=wr`6(+;3`vU=^$ZLs=pKgHt<{>t*A z8K)v^_pYXq0_ALXPOE7j3J3b#mCe07;kR@h%y8$SDZ@TVGcJ_qNzWi}#@?|-guD?Z zq`)k!Xf3CF+3|}YkdzG2Y}VpQJCJlmV$s`@XQgmaNIq=H`(aW-$JU)?|H$ zap(Lh>m7o9qq$9^xgZ_0z7(1%lFE2f3|Siy8V2ee3+r+E_{ax?5#7QdJU)5TU3QdZ zlkeFLH2OEsM%0;tf)UVn=APk-dCZ*s7ue;0#^afZXNMnO8xzFRMF&DV2LnH-LHJW0 zuX3VP%?LKq1AgtOISb*Ak1?*ZWAJNP+p8fc6HYGNUdObDcIZKfgBc#!-H8jZ$2j;% zVWpIhm6jP{XdjBrvH4(T`!Ty428LUpoi=Kd1rj&nD$0``Q+~dhDMtPY z1J}*e)LGYdnNnJj7t9GU_0k5M)DZjlV%Efd$~iZIs0-F|tlD`$C0lnlIp-AmW^j7` zLK7#fl`j6x?d~_1uLx-HOGgTfTp^a%C(lqNr(BeSv%kSGfc7FZq@k{m+5TMvv1q}lEl3$580QNrHRM$F2>mpo!9(=Jo0!S?oYQ!EJO=` z{G)a@H2h$aQ}snx;D;W+c2%eru%cMoE*Jtec1WUNjsy{>*mFl{s{Pu%X5ZIZ?vmqS z?YB$f1SD)BKrz@U6$pW;I8j0`Or{SrJhGjltV#9YkDY^Fjp3cMQDVR2@P`&FpA(OB z&LFA8`aU4=4#)u)d1`xbWu?-%Wk5O?Dxzi+hUN&!7qJCTu3rI4uW7UJ*VoV?(@sou zTF}h$R+%J2pQmVK?3Q1mG_i0~L7Es@vq`Fv{0F|;zUmdR?i1CNz3PB$ zWE_d50G6lcfq>>iet6`HM#b}z-d3m;Y>A~#l}_iwL&=IMG3xGirJ<#QTk%Z z9v3C`9553txo~@j7QE2tJ>FI1qFPoVo3J0;;A-f1g=JNw1)42(ynig zI8Zw;pvpGQ^Frth|FQ&sDnzx~((W?V*G;aa*inm8bbV|1KQ z^8uyJK&6)Su`vd-NX>d*|8XA38wdf6H=|}VQsM9E{d#G215SO;)s>(ngeGSUa7aO* zLC=M6qii*19@yicHds57;&aF8mKdA+F2HU-MxS824 z_FXU~0-g;P*!9dOKS#0%__l*8;BEf-j!tg%qj zr7xnZ$ShH?C$s=@eo(lkI|*OgkfAKmNQNfADi5G6EtY)e%9l^>hL1=@m21nQIr7Q7 zTrc;KFznr{_bD@-eoyR+>gvB+TJbf%UXJaqbIm4DS1no9n@1>GB81r6~<;@czDjlRQ%LH^nf40e> zYAX6ECu-NB`f4l%Y5xir7fR@TLGUx)=lSHJ`iE!8u$6#Y{MZ~F^MW1Gi*BCjvN}^j zvRiW^9BsQsW7+&SI^z-O7ZIVw3Vml?TQ|SmpM}j4f7=Qc-A(W4c%ZmiK>mJ{O6n0e zw%m1A;@0d5Lfc|^|DCk1lW4L@IlG0L=~H5BI=-)HXD0tT$p*zI6c%Ww(@C%SKBk$hFHGcqzvu9|?W`Yuny1IpdHz>1 zI4lL8CrnhceE>2#Th4P@%}U?Pvd;QXb(Fw%^u6i47)t3`O%9MGKK^#4IMO@y_HfzJ z=%rrGQ}5ccXj_ProCSnAcBez()1Hy%m97J7xZ;)`ZP?j`#Me!^NI{T282jnjn6H(s zKAovo+GwM}SL>7eC#|ndC7e^K60_p5Id7&nBg3%k`Oo*qvy`dzJ|5|Eq?7Lf__)~h zp%RWpQ7t+7#N_5G!g-lMS|jDB+#v7##Rlt@dk-gj&d+JzeM&2MI3S6m+&nbjG3cD< zdF`D~R}r1`JAF9C`xc?`q(kFCPN-za{kx*sPuY}wKDmDn366A;Do)6RV#%R;FhFYi zCs1Itg%nHcg5yNab_Y8bkLE9<9WADgR>t0+Imi__!A@#kLU*0{73TQ;POmY?Q3Z$H zUJCTe%o!<VO{rBQk5<1fOBZxSbS~aD1x#{CyZ|-7QZns zTc?kc9auP3;!dOncsx>2#f;!2Z?Sgx4R*2<|h@C^24r490^SW!IM|EAgr0CROmCm|%K`S6b_2Z>a9P_rpKgcF30< z6(qx&zz^2;N(H?~Auk>2r#;8Fd}N^bG3Q2Giwf5UlBSmyv(XjW^u@Y|8HT8exI(Fl zXEO|*Pz-%$+3|#C2?YkjHYlSMb^#uM{5x0584>rfQr^8+FsU%Z5SGk8YV~%XR6wQ2 z=?KxBVtYSeSJ&m-$o@q&xWiQX9dONV0g??#Qm>sK9ND^-Q%&#?kweFnZvuj`vJ#_R z$jJLSYfNUMUb-r0vBb88*Ghya$*$8cTil)Hm;lU9tY<~B8CPYF#cP%b9m}8%7ui2@ z4w28+bZtI$5+i6&{&+%7V!m=U&EACA1F8s{v*dxWX*kKouVdy_)`S@@m1=wB$MUU8T9`YzNhI?E}eQmz(c@eBjANZNmqmGou4<9eHPYE6wpL zbP&}(+3kerv4Lqc%q-DgO093V+;YhUm5c8%@;;0OfgVnRt}5oUm2^w3`36Z!jm4W> zwKuIcUJ8=rrD_qguAK&m^gL7`Pmh-1sEWaqVkoUKQyh8(Z~ohvy1;}&#w9hI@yigP zZiuUoj~fom0^Ma_+0>ba%h1gFjX5{Lc&+RaZE6*B5u0BZzFK~<%vbhvA(wto!E-+X zDMh|jne>6sw7Q;X^VUoASyFj3dzcY0x6P79o{HR(6RwI@7 zD!Lh^fF4W57LP{U_y0#y{cxrJA!Cy(E6w@sce!SeRN0D;Q&UgZKo(K+WPlcy)c zp8}i)pE;F=nLek!?rY%KH+OkGT=<%{=tde{D|Ci=B`78nDQE=C7*cdwhZva=I;B{q z>FK-rMvV*&hF4U>5%}HR<-v?34l(z7>0akXwRBM@`CI^JC0ecT5iYrz%R9?DwbQQv z!0>U~zH@%r0}-z+?C;q=x3suOQJ@r}#)%q(Gv$*Poqb~F!%nHrFH}m^@+yxv+T={- zr!DVs?Yu@>WGEg=gR{k_7u3EIkXmM(Ly2k{{`)83kEF@h`zMy+azL69_?8nGxZvPo zLe8-e=exnKJafO(^w9o zMpiXP{-czbggxpyzZJgzi%xLKXipNiw`P~=m~bYqp8ss90qXf#-FeA!5H1ILQ|_&K-y>mPS=p!ydE ztE|aL``OHPE!F<4#-l0_QE;=3rjYXL>+IEof^uw+FJlR7A_@lsQ|!<^`lU3(BqER- zu1tHV%j?DeVHia8@eIAs5D5_81RPZ|-ZeEP=jOic;T;lXT|3Be(ljzBWBWz#d@k$7 zz1wa`15V7Iv}ibE%?Rkxmj<2Ze(lu{wuVpU_Y*{_Gc&ZZ;K%oFFR^zW?597`*`5@2 z%E4=vBq(1TbKJe#>||tn|A-se;)ZsrsZlO#s2xrO5l*tB!1`XTZ$9lYfNK8~amkIl zz;8I;tA-cQvXH-CwkCboU48sVRX+RR`w70xd_=u{PPJ+#(xfVpoztKATgQ9EordRF zoGEmmq0rHMFIn1nD$tw|{AlikY1n4y?yb&S^Wm0~Wz(zB+Oy_*^o!BVk~V?s;l+|L zpKEy6MERSomm~Eq6n}IPN0uL}D01henOAhiDv-$Vh_AiVMZYbp2(ZsJm)@p|0j1r}w^T zs)@^VftbAVo$01(DV@oWd_T4+kJ*RLS}A+sg`fuwMn?2+?4()rLbs4m!fd&dyR6)a zn6~iGicq@QCN@+W><#%tS5~@KJvTXkg8Pos#L?plF%)*5@zxIRFJ>mBL^Q2t9cWmv zJ^MplhA{0QJn_IONpdHZ?_y0w^pnV18{W9;|43zA<$FM?+AgYrQvUm4Q8ex32-I%r zMr4Id2UkliWj2k@un=ld_ZCrB!!ufX`R;@8PhM_wa%lCEag`6&Jh^6oPH38~j_+IH zZ#WE0?p+K&31%kkkGVCEJ2wKB2LK?89$kwb$iAp9(UJ#W)CTUNUlik-MIGgN;TZQ>Xnuq;bkpf(M(_*;HA_8RMLi}8mDe1G4VF;##%qLJIdEEZsC zl~Pudn%85WC;`8wZhlK|;y-sWcV?Kqr=0%ivn;<^vcuRR$^HP9OPwT~#e zNOcn4E0DY?V7^^c6)63Gxqv+-h=~8#-kg4Se4$=p?*Fg$jIvSRzkKWX#{Wp6}@NZqo7VFzK}t>Af{h3`#N z)71&RsmH%~|M&us=%a8gNmB&4eA=zxyvZEPbgv`Dw#Cuxv0HA53pYZ2Ng6iS|> zSI_9FcX@B_YH0$ zJ?A$uF)4OHDW3c%6vMnvS2>clcRX(um6ETD7hE{~HS_=kH0FR(fq?-!2iRCE_}_u{ z`{>6ifS0s!NaN<_wo4WWv-9zF`TI_qvCT(1V(Z%)3k|^ZEuHOycCB5R)D5gNjsKmsj95FOb!t{zI}8M*@Z!b>FVL@9SJU*u zikvYR4Figp_Q0n8O-J8a=4Rt4a=@FrIS?kTr7M+N1oE91`z^P5Ph)$9YHDli=GvCMZSaw;G!yDo<+sQ(f+@t+vkLF#g$XmS|h&W z>wdelaq}L&zRA{|DSqvSuFqHV65EQ@4dupp8BnTeCg=n+nn~HJ$#;OfwgQR(*ar}O ziUQ@3KEGz_#H)XUeyndD(Xh3AxeUgqxduL;sg;Y07syZ3aXrg+$*yS2Sy>#eal zI6lBr*fQpuvu2692siQG{sV)81Lmtof+X9)SMe{D(OCn{8sOQ0dl9=C%ZN(&oL0k3FcVzur)E?l)Bqw3R)Y=n`AO{g zQ!qo6>q?VZ1e6wff&F=h-1zI2O%UT%pfe@PqPo*$-8eNT)991LZ0OY=Tan<^m5dYp zBZo}fL~4Ek{vFa_=kCe=v)_IeqS}!&F2>2{EfQjQv&@YHRBre4RrHw+gL?@=EeD!g z1)zg11WjNp4?tHEj~}>l5(LaF*;=#7#)6o98ig zn$stT5r+>>@J2Z15MEtdd$;U5(!_xN7&?cbw)rSRtv7l{M(BlpCI z4~8fzgmJWDp1hm8yJwhx%6X{CoDoZJH*4=AU7lW?gyTl=W@pWMx^m!^mtArXIm*|p z6kY2@a)$Od`q(F<9mO6<*(@V8UHWXKW78l*pTTDN30C{obG=S40Ot}n*>J4*4s_Lp1 zO*RZ1P@!}r_~K_|P0(AVeYE1#sF3G_So%rXZaZCQdl!V`XT0m|{|o3aDAS@@tp{>( zSQ|EYK6jrtS)3DvGB~5;{fx!M<)2@GE-z{?Bc7Hdu!r04%eHKN8J95baeYQqOy&F-lw36k)QAam(#oxZ%{@m=s2cWKr$uuZ@d<}Qm z%vMg1I{Eu|Mt4tBOeD1TFz{M)v;Ufp0%q|Jm5$1!Tpgd5y!9Y^D}|MEo89eoRO)b>r+FS1&|y{OQ2b#u{I2PGwJ3z!EFVbTvltuJ*@{gfp?dIZ%PTuTdI7JnuTz zt2r?#Pb|V2bHAw^Ys4S9i%LFEAG-c1AkxQ*hd&1R?82orSVw&a-z_aJHzYY_eHX2f z9IV)twjUPwBsw^%veKBA`qhx@A4A?)ddcu|XBc|9FV$ea+ne|F{$2Iu)OLS3TJdp) zt>Ay)V(hC25cTw(w*p=2LBwA=MIQ>i&&&2I2Qutyvl!ILf|RU9624=pG~UT_Vm27t zt~JFcBK7k7my5AamS1?#b$-O`HvD*9T`6_9o8y>u1*lr2P|K1mCQB^WE+o~IhRRHScZIX*N$ zbH=648e%e8(#eJtC`=)S!z0v>W#{kUsx^CCY{zCkUk~)Dn_z9u5Esht9KRe=-Jz{? z?6XrL2b(Z5vk#+rmo;!bCC0pM^tm6IX?eS*n=ELk_NxP)XZO~g zpYMDbc(T3(MFncF(08toFY5E|cM4}e$q=~z>&bR!?Z2>x7s_4ArWdzmXiYe4M58i* QFOwi`l%7V7noZ>Y0IR1CNdN!< literal 0 HcmV?d00001 diff --git a/integration/compose/src/androidTest/assets/glideImage_withDrawBehind_drawsImageOnTopOfBackground.png b/integration/compose/src/androidTest/assets/glideImage_withDrawBehind_drawsImageOnTopOfBackground_2.625_33.png similarity index 100% rename from integration/compose/src/androidTest/assets/glideImage_withDrawBehind_drawsImageOnTopOfBackground.png rename to integration/compose/src/androidTest/assets/glideImage_withDrawBehind_drawsImageOnTopOfBackground_2.625_33.png diff --git a/integration/compose/src/androidTest/assets/glideImage_withDrawBehind_drawsImageOnTopOfBackground_2.75_34.png b/integration/compose/src/androidTest/assets/glideImage_withDrawBehind_drawsImageOnTopOfBackground_2.75_34.png new file mode 100644 index 0000000000000000000000000000000000000000..ac722d0a776e2dbca1e185a005682b0ff46a1334 GIT binary patch literal 10427 zcmWk!1yCGI5XC)kxNCrLxLa^I+?~S%2f^Jn_tC>Wf#4S0-5~@yBtU=wA-G$B;Px+D zwL3L6TU#@;ue;yto>*;7rB^sqI7moHuT+#3bP=uXzZ(k!@pRwJ&_^`LUb;$hNVQWm z2Z#=umz;_|7UBxVvW-DPVn9++kk$A9e3EP8^;*gIEbLQD0a-P3e@$0uW|?HG65rO* z$98<_Uj%z~zLuwPZ{BgL&1L^K?Qus%epe@XDP?QW5M$>=?Wh2{RbbZn!jAOmZn`O- z6K3;W``MxU*-;s*8Guz9dXV=EXGxeIbBope>-0)Ky?TdB+N~5^GkWx;QQxC`azaHW?nGXtYO@p`{+Z^&Bu7fp8-?P2f&-P?t$Fth77rV zOWHmg(*%*e%+ry)k;=ub$3Mw)m;|D0EAs4-tuD(t5m}IS(1#32pSMw%;1U@LU% zZ47%j8(s%Z!pGwiK6<b32mu)S&WQ`X($V9Z-@u#Dw?hDv-0&{DPq$8zp!|)=A@3 zRH5IQ*J|OQ{yGF~5|z8>=PE(}+Vp}$XIHNNJVX;8|Kr~WXDCwFe9_7oaTFs+ryg8m zOp0E`yIr)l7wng{vBQ#EbUSZsCj3j%^(Sk>`P)qE(Xj#KCe7#xAMD`#++144VnUD( zFJ02u=Et8m9miLqQsRSJdQj2l`CArxQWL*O!Gcm|4|B3rZu^G^&bPGbXItpVLmSD( z#jn$K-`9LHw;)1C&g!AF(5V-pYZAyGs{6{*aT(6WILa9Z0k|)nc#2T~g6Q)02%{MP z8wj6yAF+@wc^Er|?(_tHgAtFm_Vesg` zH)wobG?^#D_CZ1F7^wUOMw*YOr`)mthEfG54T>ndX!%Sy%YogHZNqx7ee`vphJDk3 zAHa`_h3s9|hu>jA~sz^!qnm@eJ15jSi$_@g@YZUq@Hj!@*OrfOt$) zDBGqLe<3X>qHjN@H{W@HKqTlTZym@Oqt<6Ld&GC@(xZnTo1vrfh%7%1-y1{m#RB zKy#OQAPa>oz-q-vcd^w4%22R)G;?%w;N7*)YfBjw-(_xRt-RgI=Ha&keJp+JPVB(Y z#L0ahlIZ6rc62jlmc@(L;de&&-vH9|<;0{M!?>c@Oz1)WuP(nNUOdF`WoZ6fE-h;h zU1WFK5JqT;?n_Wjm6mFvDHA$GeaHDshJ_oUpo+Wbf`D3ASC@LUJgkTT z2j$y|@W|V@NPmm50!BU$zeQKx$n0hnkk-~XLJ{tT_lXlgH97Jn-On3opU2*wk&1q+U6qocjW zX>q1)HXphv@jrQsmt^|vF|GPV$vg5cyG*^MEwfhM?DUpQa&3dZ7ktM{VYNaghcn7= ztTpo{43saS7||6I)TbnhTtv!rOqL0mIlH06k47MktQ0%AOlZqD$Dk^*nB)Q5Mr z+0KMhGHJ_VT0L`*(JZTA)lT~`NwfSvh>448MfsluOX2FPGNV>>G>$HH+#+F&-2b zfqq#GaQBQs%{j|JobY_?WcFwsELm=r4oHd#Sw}jF?m``CYx&2G*y)x3;+cS#c{AYe zL&){b4dOc^ml7q-fK2o_VBjN8$TeP1cesRX8io5*zKze#fG6ODkwh$Suc5DR8sRwj zay&eIzcFL^^HCL+ZacRWHnvH zW+1i{>q7h%pL!9pC904pzbX2)Rbx|>ITN(q>1>t-sv7=vlK_FNG;_ucSZQMtnsO18 z$QY9a21H2(LB&I$78){6mvA`l-*b`uYruvNVNXc2ZnK1q3l|wKH#c{^DHoZwvZKia zG~AVDPLl{KI6Te&$XT4RSJsR0ZkIIDaI91`X^r#BboU|KTF#b}oB0lU$FUF|hEDL# zj^k8hK{Am+udq?DAzgVU$ZmzXRl|10nPvoOvr{1xBGXXK(eIoy*vLkMx$3wPNY@jZ zzq*k;U?o#N$5*5ZR7fe>E&p=P@nhT6yHQS!x>*r~D;k!#fBG8pCgrAA24%3(9a>=c zr>mHdxb&y;*tbT}D~akN2DX7ejd;@2=NG?_^iYV(fU*Irz>cyp*~y#C1!Gml7U8`( zlrFUMH^{nztRn12e)_ei%_IU20W?{})M8Vl{;xdJmxU`_(lX9C&NEEOKBe1c8st=b zIGa21{f7=wn%M(y4>R%_5?gEqr@zN<?qh-e{M!jMUD(8a_tjyCdU!tEhlmZx-QV zVvJ#B}cwpARvnj|BuHDeDBn!i(z$8<}OnWUVe+>3NMtyL~y6KC7LGh!eb4KJPf=*n*dZhJ50i<615czx<9BG5cj$ zZ20meT0AH*aTg1y(cJdK7OaX!)zVQS8iX?a%(GDZ^50*%WRww~gR8)nu#5ef*Rz5w z8hVYKuM@ZKMOBD4MOjr+J0T{%PhgrfTgr|FXU;ga=^+mqno@OCvwk2>r^m#p-B9sC z`opEzLsiB``WdPMt}Hu?Tc`OmKb6O_Yno~-JEq%P{KO-s5(O|B7x0|3D)dZLQ*tJ6 zZ{tBq7Vx76r4*(ACS;JedH^XoGm?di6V7kZfrMiNB6aIk&{&h{u9iO&GRmwl+eAOy zBo&qNJR>}ol4+-FJpzm-XYL`~B5-`RKw^5VF&;rZQkhE}R7pTzJ=94+S02RiY_Ols z!U{SOhByW!1^OX0-lnAX( zMh!R)kGC$RtF~`K8L&hpBy17(bmCj*@!yuH9VCk%oS9EJt6*K4?n5V!V`72uzPZ{| z0w(NAY%am^{;^VFu7*#6uu-OBy$GKW!6HE(1LOlLLz^GB=#G1Ix*UJRvAQ7qZ)Q>8 z>|$^^Ros!rhE+0Ehh{^zQte7!A{Wnj>UIp8PV39dL>`{)FS4ibDP_1u5LK0hQXJ(U;F z2>=_cE-N!&sT|`5DU^msBGtsp8?CFsO+#U!C=si!5dw=EPlwlRP^ubdRbH-m;}!orgV; zlQV0EEe zdV?gw8_NY3Dr-7nG^5{WA#BC<#ib#baisRx^P8DPRsi-+c&h?qi(=y9aPy?Yrkd=h zMWv+d8jNMK`OP@n!veM}E})S~qZwq**1YM3|N`59-kDU6qd zok~BFqfh5aR+-Ft(BR|ayVH!gN0NMNQe@PRve5dTbv6?x@YgOXk!;^T7OXMx;2){E z$RZj`$g@8ipo>)lsN~&i>E-5k{aZKgq*|Evs)Wzc!=l#Hq&C#rJ9+EF(d%DG8-9QR zq@~{=e_Dm_@~wV_ei1Y@jNn3K0s$%Bg6)8*V5z;OCi~#aNs(^`CgtlQv&YmUl?npy7)QbMqKq={EH&Q}TUV1Wu2~QOZ_cFu%_*%_b)BF_ z!0jK##I292gO1<`1yL@AJZ-byVv0U~aYnEVRbdlF?i-e9Tg6XtRgv86A$qa#^m@t| z1AXkpXOk6%is z8A}YlmAdX9ENG6Nq3oby5EX6LABkX@1NVqX%w36mBqJ7OeQ%PV6opEd<4&4;Mz_=Tm@){K=bW$Yt-)v=VE zG*b4|d3XXYcV8vZOYi2m^=>?M`6(O;)v&#@@7aC!9!Dr-X&6?<;9@q}dPYs;21XnQ zMmR>a{%1yb8h3I=o!GaIu@*bO9$^_36`kM29K%aXCN=9E0_|&OTMtrT<>p1uGFJ)U zC!_=4txr%KA_*e@6d)1h?5!nuTR_6Mk{FPt=c>yk1n9(;-zw5&;EXt848k>Cca zRjS5(fwsJ0bp|oyUIdXiWH*9q{BN$gwDP5Ps_J?-5f0ax4EGoT#ijZ-vql6OW0(eu z`Z@My&_8>IR(169WzO5?;uON<+0iYLIu?$Zv0HUnZ;+XF8k!&FrxB{=@fk4Ve^Lwk0>_wrBX^H$^`|d% zV!>Dzk3rFiD)>&~nHwZ$L4A(IFX^dFwbS?&cQ{LV*oIT+`%!Lhy z{=wY-!^regRt+~n!3kuc2t`Q5e{tpC^mgLN%`{m@1xsm1@QgSRtVGd69U))R2QdeU zu;`0L*i)_=_!kJOt6j7YWraS>P??bIGs`+?u(Nb5Ft2jwh}wZk-q(1TlLJcwNK;)G zw^bt`g{4WqI+E&FbqlFEzOZ?E3krnB)>c0!ah&B$iIDp5xc$KC)>WtxZWI`lx<}dD zpl^_VGOFH?$HHK<#@Vmb4kQ7^kJ$9y?NZZ8hfZAXO?QY&N3-!S>^Tk(yc-B5;Tz>& zR^7;C5ELuMR-Sw7HjByRWLoC(-~4Ah^LwD7PQk$Tw@6+yyl_GbnS{Q5Y(t40e6;h>bj$1niyal_o!mv>$On4Kahe>6gdpBP(X?2c56~4MT?}qjEW4|LDZnwE1<;7m2@?qE}a4yZdV8^QKe6 zs8@vUHUvMC*A@kl^qM0|ccizff>dI20UJ196Gc$JJGpHcE-n@m2dDCkv;Az)rZT71M_V{apU-1)Qg&yE~$h3F6nZ z@!NB3Xc+36x8;z~h5l`Xu1+onJt*0Y2oLyB&gT5nP}7E$m$JD>_wEksUEjtI>t z)0c-5V+fXJ7b>q>EbY7)VGN~f&-r?S@%&lpe@WUZt={TN<& zlHHK;S%(B2;RXIhcb>k-RQu^X58pu8l$W^21TU<;&B99?2CQo?W7jeG)F$Hb?S?XX z%{0qL^72n1(By+cg&KZQjGPl}mO1f*I#4q)Y3z~)-iRRdKESCAA(ok0{sAdQczs&z ztp!{x7%kkTb4JbRzOq1T`8^z@)@8xm@{^gnwPp^!DP$WUWkwJsizbRm zO8x^y_uaK=<789;8wCsY&4SaZi|}zNuxB>A@^de%ynp! zaj#3jN1|jlEMszX2Z!l$2Qazd50x5zYXeRm?U`{ls}Q02qHJU9&$DOH{umJt2v+?t z5L}r0$}uEX{dL45GCZcHGRC?E%$GlH!b#>IpsD0^T4(qxj_EozLi4p$OHIG|#AeUf z`GeH`Opa6=S6yJe88EPv1eBd>^Ul27XLI~(J10E-RuGgjt_Pd^92_Xu`>D9OGR&*% zvGM+wZ%K2W8)Ge;vzCXUkOb6SVr;>%Mao3;Bm5|eP6s0OYm7e-G*DhedNZ5etJ}<* z*2h)W3&(w7{F~;xVYpd!vD?PQ6N!unrkT1}rOB-cobb@fA8u*hnFYcE7x1<(S1g@u zQk(inojOu_@Gyg>hT5#X{Q6|YX%zf=4MlN96K_4#O{vK-hvA* zn15#;kis-( zK`>b6_9Y*vS)r;34LJ>@AIbM$#-L{qf@NMK!q)1;s5@rvFv+FfMO@qV+|8GHl8j+2 z_}6J~Qv4YPec6V*6s;tkoDQ9176Ybv4;s!DMKu*}G)lX{s$2ayg2|OWQoLJg;bTEr z2N=%>Y*BF}2n9%%cFwT{yhsx~+*#kdM^a*q+XC)xYc z_Op1pUR>UrE=?;brH4FbO6}`k$>B#D1F&x8XnY~kd&Y#`?EE5C{EBb-CqZ?Nlbj=r zYI>=jpGocY7v^1{$YERfl`iz9;#nD_Ct$3m{E`9241DBTy68gLJ=W5yMiPVVZ`NpO z%Po=$L6}`_N%PWQ=_J1{J>c2D5H3uGRA1wZYo$B|v7RiiDp_>1_W8?)1~?D$=AiEr zk(9D+lD_l!05eLqU!3-#_02s^tFzK@!JZS9?H~l$l=ricp?T4g> z)pXYVcNt_eZ@vYnfioLG$5TB?af!>ah-Pq7HjskO1b!8Vm0gYXS)KeIIXtoP8TX{^ zf~ZD5(lz>pOWxBwTu9#C3Y{NG7i;Ae4D*Rw$dctS*iaP<0i6m^eaVkiM3MMI@D~U@aiDito2D#bn1r&il7XOnjLd7+)dt#a{o7q99lD zMtY7dZ_k_4Z`_Fvy$0t$(%tOmd*Fx0%}dL)`lZMcRFfIEV#~l3*LA>U$D^M8uj+@8 z4c+K()(P*1sZ-PXQhQ&b^ugPkD2$TDT^A(g+lv!UE3HRpE0q&B3J@J70~ceKPp-Il z?K|e}lZikEWF~d)-&{jyd3)9?nkPO-OiFco`%EJ^5B`03M%DF6O)p|o1Fw%)F@HYE z|LMe9R8kp`02Q3Xj4?l~w8Uis({SVWLogcH21cFEHfuQ3G(xm5Ie+sOhcqqyFi3kE z=$Ei92u+OTrIxPY7g(aTenrR7^+0k-96`-s%GfyyKQ3YOi3xd?tPeEo?-bNm|9l+% zH8+fAm7O7jUKd$6wz^vXa55xfH}q9z0_k8HeVnBXdneEz^v< zqrH9o>S(b$@CpWpt0C$O`N0?11oTpZIiMlHN@G3eip01|`lM&SQ%-Q`PfQu(+6rja z{C|se96k;vw%{fJGy_m#78&cB<4Ox?uPjLVkg$M}9A#sSTBH$Z*evG`4|{9ffq`Xh zeeF!afMEVjOYw-b&iOgt+3%jMfAKHqCUM7e%!+sYUk9N}A8yXP+}-;T)fjvG==#-f z4e&qMv;JqHixKAf9oAaLtWIAvXpId}zi%glfUT*z&d)U7PT{{u;IL-9ViJ>sXhF%V zT?-=TzUSsjR2z)1>`FQr4=)E=VVnQ>J&$FttpwfT%BL!28H%Xj`-Ae}^I`JG^Q5qC zzrKgurMn|DQXaON1Y$OGTXSiy@$ayM=q=IP9Vt~4ltwgEtVO+_ehcH3%6cd$&h5H~ zp&fibfN#n>$z60iM=w8%CjQ$~MCNd7%jS1)2)u1A6b{eg`Ik=I+=Na#g4CSA zrD5_$>IO(iSSJ6@0@P=wUIm(mg^K51{5{Y+UF(~knbCQg;A#?D#xu`C51U+7r#fVk zUb{)jgdnA)3jJWJ>cBcnr*G6Cjn-F{G{P}K(FOXL*XWLa_xCWkdM~W0d9B z>I=)~#jEpu$y@*tomgyGktaZyF$l;@6}8jkGdyT2@U#!ewm#k!?cK5W_UZ!(HF|l(|@E z>4ivH9vlGQym=!Ld|SW3ho}->N!{&EE!&a4Xwb}Vm%Zg`6fDDG85WHIiS?J!zgzL` zDHfUbN@d)KA&&1I&$Y$S@kmN)|y zfX_&8WZ+k~um{tB?ZyV8d|rUxV|34kg@O>5>|(a1 zLe%m26|L`o39sTXXqbS9>vZw5NOlx6RHOBWJw0fej5$9}+NrY=|D%$KWZUiiQC-0G zF(m@q#iL$k49%RrA9~Y|9VSsrMRj31Ceo%-2N4v;II@Hj;}k%!CF*voY)6Z+;czQZ zF~u!h{YZQmY$B8K-k3Y<@h0p=#4_wj=$}qp?ehDapWlQyuTZy$Rlvf6x-J8hn$MOm zjgOh_ykAR~Oib{tRd zI>I_=U;b*nD3s4J;>jJ#U>+phYEc+@U+?jQp_;`+Urtr*#zs+Sl2=+LK*(t{hfCB3|afFYA zwm5D0Km9qJ=df#{M3jAf!Z@6GxiW%w7<@baGc?reD3$v`lbUH~n+ZYKAHubQ@|rAa zj3?|wWlXUY`$Lzm!_8|bWhO}{2b@R?<-X5lqps74 z>cIr8h(OiFF+zXvL?y)#Dl?hdw6hixR|B(Id^N6Kfb_Ee(97sXs&dg%ce(LO+C zFs_?-t(WNDPXYu|GF-oi4n%f})|mL}d5mdsw-?k>Q*K<7@~p+eq}V#k7fZFTl>wbRBp7N+3j*-l2^7*PsQ0^_&m)m|Br|S=>RxukT!n}k)LawfE0epDOs)tbzSK|< zG!Y?OBZ>gBWIVd9$g(hCWkhqU_aq@rL%X%FipZ3-fRs0&*uclIcL6VA9hr9_+iRU@ z$R)Zz#LD=vEr*Wbvh90K)EcRs_FD>k<9D!eunaw_a(>l#UuAE_7@^3A8MGqD$@?X{ zhL+uXR6w?j2yz8jFWn?zx<&1j)|zaF1>>t0yw&u&hVrUMfM(X#6w?NW&Kg6kACI4N z8q=&Tk)2nHHM_N@!f{s0Fmw*Br1OO}tz!&mP}N_>+KKyjoUa=0^+17t;1P0k>oPM< z6za#vF*-21&0hGrom-WiLCQ{6sG|sb(9a+!re*=H3|sRmCu7#lQ*B<*sIz4DKbPA6 z@FShIm4ZIXWIJe?$?*QW_Cgrnyq54z7gu?ie`oCL_2}5B6X+jSQBpR_MU6w%>8}Y# z27Me;70^#2^R}x|KRd5FtIOKIVBi}SZFdF3Se2Zk6+>aO)vV=|myPYZ_ZqGho4Oeg zLl2c5eH^Ld6&E9}L9T^sVNA2wBAkdK4>vtaXViw8H`!}1ZLp@b6`N}GcQ}>M1YKb#efJP)2b>BA_Zvdo$j$sc30F*E;{PXXcXu_t3Z}vH9@Xk)N-J+lGN$eL6XK}fFYyjL4GR&ZM}vy^8rxk}h} zdlCH>@e@U-j|}_r^K2J>|IN&rlY}%i!;8Fhg6o{jEqy2YJ-y5+#Zy?&!Abv@ePflH&j&t zP&Z9`g8BpYR)FYXp*|s4ws8OeBLJfGQZFF?N2p`ohQ#zwrmCsB&pz5Seos&J!4(zh zuRiy@-Sc_@U}Q4(<2tFi%GM_9bb(~D(SamZ@lr|755lb}(E#x)UJg@_1W$y7_r2P? za_0wfa^WI7_u%t`t5`wo<&hpgzF$&^Y;am1C)M!VE0TB0>h`Uhqcf7{fPe9^t;AXf zb0YMvXLG)|U2ZBXydHeE9wTpeLn8y-1ZU`uIu)@9m<*$K|GRjU4)NmBgHOoA;rCJ}bPd}vd4IYGq&!SNNr2rG{UZt>Xsom|+oC+3B=j1mYpps3LN;jQN}##tw)!yd2sR|u{bM{(lQAqr#l_206?F- z>9?iXo7Q;(k2@ncv&2ih$M^$6K=VE+q;EMi{pZuzAEJCpupdXxJ~+M;J7m*V;u=6p%l{ib(Y#RiQL*`mby0GBk91|IaDCQaRb#}_-JDbgr`tYX!+v)3Gs zW!C*(u4qy9n2CRKbr6{X9h2m1JOjMq6ojF{s78j#J&rpEB>uR(*a1EWC!y>;YlUa< z`ppP96QS|vi2}Q)*i{zo4F$+U9eae5GQBB^qNqV&_G)w2CrExFz%cmD$MA9#o(RR& z737Gufz!NibCs*6Sl0b)$Ij+Nh^K+mMuyIN`TCGYPJSlV;p}X@^dDta&{2*S*Q`jX z=efA4u+;n8#{V$0`dnX>q&tklXY1?m67i6SH9-5V3CMi`pk*^BqGevgOOlPC*$ai; z0OfZ>Wi*h)W+<2!2;y<@Xhag_(%NHV#YIS`hS&Tjjx-6T1rh9v>*CEZ-flV5{`=B; z#SO9VT?DQhgOcs=zHLmy?uLHxK}l#;JX!PiF5=MeL4hCHAI|~5CGRXAhHoxy{!>Or z+UkdNOHIoqqlZ3KydkR47bTAD7?#$Kr?YLmU3H2(H*a&or@k zqQv;&C+%aFHIN4#l$pUpL=mYuk;cj9vVS~NK|Q&9D{aZ1F$!a1-ZP-=+xNO|vVUp+ zDQ%HxjK<2<@;Y!tKxYtCHTwzF5aErVFN~54?RIYu7`o$dQJx{7rHk>qiN{4+!$Zx| z{vM1p8D3>n!THhP2NT499)8Og7T)ro+Jx1I$491BG( zweiMSA;S7c1@O3ORwZMJKs`5_KD=C_uUQ2m-moGi2t4=@_mw|(ks&$fHlip5GN}OT zD`)rRxb(%=s#*)h$a}oq$FP1-Lo3BZlVvV@i|fQ6;cRd^k%o1?;#+}a zwDmv0<(Lq2f9!_?lo9&x)y93vtZE(n0*}v@Lum@1`M#OKsropMI-9{Qx*HMJ&n~ru+DfHmi-C z)$bWHiGmGcOi}Er_H$8tY48cpd0X5asuKn)6f)58;C&GgHoEPAX-4+=6Yr*X-W0B9 z2D=}W|7E5@jYGF@WXl~DRzySahDhU%bLT$gil|I_kCOAzDKPdoz;5bZh41`NAZA~- z*Ae62@*8&;P{-U2%H#6~>}tn~NrT@|#3P!P4R)+7Yt1@yj{--UczXUAeI8Ns3)q!%KiywFFSBM_@wWvqZ~-uc0h5-sND%5eB%#<|`M z8}6?8i?d)~^?8NU?{aK`2VOz*&1$0uybsS)a+nX7k>xpN}PK%PGx=<;r5 zf%G17$k{gG9(OC(VE+CqG!!`d@6@Wx)OM+)PSsf(TIoju0ANcv!WE-F6QQ+W`THA}m-y0Aco9X}MJl2jqjO8-ugd9ul^ z2)|j+_G$vAnPMzUeM6cF&yZ!$4H|P*>Aoo~MT&BJX<&xUdIrgfwVHhV89kfp-C0ma z<1HwoUU`vfPsVCr!rN7sPJb4$|qUx26KiLjaGlMESr2qP_QG?N>l$7v!xY@@C z+vnY6e5%Wh0c?t7HYd@Z#&Pq8=9O=bI~yrVAr$|ZFw}o58>0phHHW?;xlOD)6P%IF zwYSIqL3CgS3Qs|yUYs6escuMAC1#Jk*%sZwjLpN8?wSd2{mT>mgB6a`0d7>YPaA~4 zs7c|N5YaNt6?=!X3-QaSi<2yNtfcqF0zh_xEl1nw{Q=<%jeL6IcpP{`g8XLw*6nEy z*GmE(*oN@R`iN?yWAeA+i*MId5Sm{Axes)3jUT2{Abt3^(AukbTaLYbkGE}SBnH?N3cyB;!16x%cBHufm(JN0LmKCgym1j6zaQg;lVyYvZs@zb z*da;2ee4kvqv!||k`CC45b3$3#`tqU`$eC!x*pil=saxCT^4mahT=2lisB^6XK5_^ zr;~i8Y1OW3VGTx0og{z+a38o~4@oQ*K&Rd*#{vDwCZfyQa6`Wx{0F~?3Q?#rJN>;Y zuFu`*ub&ag%oRfHN>=;Ue+=~jRI-?)z7)zit&WExLRf0+NOc*XS=El;$r?V)e_HJUJp ztGYJ6Z`HIA>()mdB2_2EIf_cp&)(HP4qnMznGoQ6RYAPs9-RrK?*Z7fnr zN#@HPfMty_9!X+TQrbXaqQ3I}#39od$>N(a16L!EGpU0Z`m68vHksp0tO45Vh~DPC z6;w4H-ue<&f=HrT?7D(kNfaYF-+ppbVXxzp#v@SdAHQ0PpeZ|50YRf6#A?KGA8UXJ zDI#ta^o{u4eF9vNy@E$utW6>}Ai;!_t#XZ)h^J-SXruRSd zmDLyFdMnfG$Q#o}mce`UE18duQH#d2BJ5}Zl*zP{R>U@F&cS@(aHPv^D=N=egpe)e zykCNp{KM|vVv5xio5FH-;Ip!!>=BE+K@~)VgoM>fkNJFW@e^C+El+6B;6=a}pb4cj zGQbLxD4pg4unye?w$$2M`dXmes!_!od9*3QZU0OZ9a-m7kp)yiKg&Y z|FI@wh#Oge-@lBCX$b_E_wP5<7BxB3y@v&8XMH&�Rp!Imt%@vW=tLJdzQ1JdoFa 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

#3R=A^gPW? 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 literal 0 HcmV?d00001 diff --git a/integration/compose/src/androidTest/assets/glideSubcomposition_withPadding_appliesPaddingOnce.png b/integration/compose/src/androidTest/assets/glideSubcomposition_withPadding_appliesPaddingOnce_2.625_33.png similarity index 100% rename from integration/compose/src/androidTest/assets/glideSubcomposition_withPadding_appliesPaddingOnce.png rename to integration/compose/src/androidTest/assets/glideSubcomposition_withPadding_appliesPaddingOnce_2.625_33.png diff --git a/integration/compose/src/androidTest/assets/glideSubcomposition_withPadding_appliesPaddingOnce_2.75_34.png b/integration/compose/src/androidTest/assets/glideSubcomposition_withPadding_appliesPaddingOnce_2.75_34.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b2adc9134ad5294a29a08ccf9d619feb7d50b5 GIT binary patch literal 2114 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgF}%C(jTL zAgJL;>0n@Bf8*)m7*a9k?cIxo($7U3E_$=S_hX-^Jt4I7iPw@4p`A@WS`#igT6I`$ znD=Q7-wgH!zPArA9Z(ON9XrQ(vEtE#6U6m@e0d++VQ&0?=iHeyEo*;#Rc6q!J|mN6 zDaU{G$+JpzrUYR>#+g5JbPkYV~^Qwe@{be?W>6K4}fTF?z z3_^^I3YLF9I?E|pF9sUu=}RJOS4;l_;f#-9%Z6-|y$dv+8kb`vC4zt;AE@vX}% zyRsD&a?U(&UBCa&vf!GzOC$H!T-JP$&BBX99XhvX#$&yQhtK>;eHxk8XIwMmv5(l3H{A^zg7csK z(Eqnx``m|bCWmK>rZ+rSR(Nw`e)_Y&XZ}?0dpqgx)0gS{?9Vd%R#A9!#D8;5`?dbh zxzpZ!pZ>&N&*s@@ne^7T!UAQF9?SgCUpZgC@=USb&GV6y{@Wav+5w*17pV!}H%$lf%i5&2NPS z%HI67sXMs>Y}WnQpz8XA-&=D91C`Y>d|h zvlQF6vN!y<|K4nve4deCSRg`0=7Yra4J0Mwmfpx;qMNHXJb!*n?(Ug8_tx36%z6L$ z%%2V41kOL1KC^NoFe#X+3z$7SdS*{-bw~P#vLnrF3z-rZ-#c^0{<_?w&OLJb)930I z0Y&W2ow=X>?CGuMn%3#XHGGc_nprk7Ot1iA4i1LShEZxX2u4%Epvnj*>lr&9P7HWs Tb9@D`9l+q}>gTe~DWM4f0sqG~ literal 0 HcmV?d00001 diff --git a/integration/compose/src/androidTest/java/com/bumptech/glide/test/goldens.kt b/integration/compose/src/androidTest/java/com/bumptech/glide/test/goldens.kt index 8f59e09aec..6e680616bc 100644 --- a/integration/compose/src/androidTest/java/com/bumptech/glide/test/goldens.kt +++ b/integration/compose/src/androidTest/java/com/bumptech/glide/test/goldens.kt @@ -3,6 +3,7 @@ package com.bumptech.glide.test import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory +import android.os.Build import android.os.Environment import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.ImageBitmap @@ -19,6 +20,7 @@ import java.lang.IllegalStateException const val GENERATED_FILES_DIR = "compose_goldens" const val EXTENSION = "png" +const val SEPARATOR = "_" @Composable fun Int.pxToDp() = with(LocalDensity.current) { toDp() } @@ -68,13 +70,18 @@ private fun readExistingGolden(testName: String): Bitmap? { } } -private fun testFileName(testName: String) = "$testName.$EXTENSION" - +private fun testFileName(testName: String) = "$testName$SEPARATOR${getDeviceString()}.$EXTENSION" private fun getTestFilesDir(): File { val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) return File(dir, GENERATED_FILES_DIR) } +private fun getDeviceString() = + "${ApplicationProvider.getApplicationContext() + .resources + .displayMetrics + .density}$SEPARATOR${Build.VERSION.SDK_INT}" + private fun writeBitmap(bitmap: Bitmap, testName: String): String { val testFilesDir = getTestFilesDir() require(!(!testFilesDir.exists() && !testFilesDir.mkdirs())) { "Failed to make directory: $testFilesDir" } From 06fc8f689c0936ee570ed3e31ae2d6a1ff019fe9 Mon Sep 17 00:00:00 2001 From: Emil Arfvidsson Date: Thu, 14 Sep 2023 11:20:21 -0700 Subject: [PATCH 5/7] Finish animation ignoring cancellation. --- .../com/bumptech/glide/integration/compose/Transition.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/integration/compose/src/main/java/com/bumptech/glide/integration/compose/Transition.kt b/integration/compose/src/main/java/com/bumptech/glide/integration/compose/Transition.kt index 8b30e0bfa9..3fc938d205 100644 --- a/integration/compose/src/main/java/com/bumptech/glide/integration/compose/Transition.kt +++ b/integration/compose/src/main/java/com/bumptech/glide/integration/compose/Transition.kt @@ -12,6 +12,8 @@ import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.clipRect import androidx.compose.ui.graphics.drawscope.translate import androidx.compose.ui.graphics.painter.Painter +import kotlinx.coroutines.NonCancellable +import kotlinx.coroutines.withContext /** * Transition between a given request's optional placeholder and the resource. @@ -141,7 +143,9 @@ internal class CrossFadeImpl( animatable.animateTo(OPAQUE_ALPHA, animationSpec) invalidate() } finally { - animatable.snapTo(OPAQUE_ALPHA) + withContext(NonCancellable) { + animatable.snapTo(OPAQUE_ALPHA) + } invalidate() } } @@ -161,4 +165,4 @@ internal class CrossFadeImpl( draw(size, animatable.value * alpha, colorFilter) } } -} \ No newline at end of file +} From 46eb7311b2c75ac015e56fa165e6c99e757d0a71 Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Mon, 4 Sep 2023 15:30:24 -0700 Subject: [PATCH 6/7] Update Glide to java 8, AGP to 8.1.0 --- .github/workflows/build.yml | 2 +- annotation/compiler/build.gradle | 8 + annotation/compiler/test/build.gradle | 4 +- benchmark/build.gradle | 9 +- build.gradle | 9 -- glide/build.gradle | 2 +- gradle.properties | 7 - gradle/wrapper/gradle-wrapper.jar | Bin 61574 -> 61624 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew.bat | 184 +++++++++++------------ integration/avif/build.gradle | 4 +- integration/concurrent/build.gradle | 4 +- integration/cronet/build.gradle | 4 +- integration/gifencoder/build.gradle | 4 +- integration/okhttp/build.gradle | 4 +- integration/okhttp3/build.gradle | 4 +- integration/recyclerview/build.gradle | 4 +- integration/volley/build.gradle | 4 +- library/build.gradle | 4 +- library/test/build.gradle | 2 +- mocks/build.gradle | 4 +- renovate.json | 10 +- samples/contacturi/build.gradle | 4 +- samples/flickr/build.gradle | 4 +- samples/giphy/build.gradle | 4 +- samples/imgur/build.gradle | 4 +- samples/svg/build.gradle | 4 +- scripts/update_javadocs.sh | 2 +- settings.gradle | 19 +-- third_party/disklrucache/build.gradle | 4 +- 30 files changed, 151 insertions(+), 173 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 28a05f8b23..cecc4d6377 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: - name: Build and run unit tests with Gradle run: ./scripts/ci_unit.sh - name: Build javadocs - run: ./gradlew dokkaHtmlMultiModule + run: ./gradlew :dokkaHtmlMultiModule - name: Publish a source snapshot to Sonatype env: NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }} diff --git a/annotation/compiler/build.gradle b/annotation/compiler/build.gradle index 7329c93608..4fee5b9666 100644 --- a/annotation/compiler/build.gradle +++ b/annotation/compiler/build.gradle @@ -2,6 +2,14 @@ import proguard.gradle.ProGuardTask apply plugin: 'java' +// This package is stuck at java 7 for as long as we use jarjar. +// We should re-evaluate whether we need to continue to worry +// about this. +java { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 +} + configurations { // adapted from https://android.googlesource.com/platform/frameworks/testing/+/976c423/espresso/espresso-lib/build.gradle // compileOnly dependencies will be repackaged, see rules in jarjar ant task below diff --git a/annotation/compiler/test/build.gradle b/annotation/compiler/test/build.gradle index d862ce572f..421f2c5796 100644 --- a/annotation/compiler/test/build.gradle +++ b/annotation/compiler/test/build.gradle @@ -37,8 +37,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } testOptions { diff --git a/benchmark/build.gradle b/benchmark/build.gradle index 65a8fb817f..b4962d4513 100644 --- a/benchmark/build.gradle +++ b/benchmark/build.gradle @@ -5,13 +5,12 @@ plugins { android { namespace 'com.bumptech.glide.benchmark' - compileSdkVersion libs.versions.compile.sdk.version.get() - - buildToolsVersion "30.0.3" + compileSdkVersion 34 + buildToolsVersion "34.0.0" compileOptions { - sourceCompatibility = 1.8 - targetCompatibility = 1.8 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } defaultConfig { diff --git a/build.gradle b/build.gradle index 77064c167d..d2d5889865 100644 --- a/build.gradle +++ b/build.gradle @@ -72,15 +72,6 @@ subprojects { project -> gradlePluginPortal() } - afterEvaluate { - if (!project.plugins.hasPlugin("org.jetbrains.kotlin.jvm")) { - tasks.withType(JavaCompile) { - sourceCompatibility = 1.7 - targetCompatibility = 1.7 - } - } - } - // Exclude packages not intended for public use. if ([ "testutil", diff --git a/glide/build.gradle b/glide/build.gradle index ed2d27f754..3ee3c8ad32 100644 --- a/glide/build.gradle +++ b/glide/build.gradle @@ -151,7 +151,7 @@ jar { artifacts { archives releaseJavadocJar { - classifier 'javadoc' + archiveClassifier = 'javadoc' } } diff --git a/gradle.properties b/gradle.properties index 37794c20c6..3444b14b82 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,13 +12,6 @@ # org.gradle.parallel=true #Sun Jun 05 16:53:18 EST 2022 - -# upload.gradle manually generates the artifacts for each library, we don't appear to use -# these automatically generated components anyway. We may however be able to use the Android -# DSL to simplify our logic in the future though: -# https://developer.android.com/studio/publish-library/configure-pub-variants -android.disableAutomaticComponentCreation=true - ## Grouping GROUP=com.github.bumptech.glide diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cbfa754578e88a3dae77fce6e3dea56edbf..afba109285af78dbd2a1d187e33ac4f87c76e392 100644 GIT binary patch delta 6679 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 Cn(^uY delta 6711 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 N0Rn>h&;K*$e*kC({~`bY diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4e86b92707..c30b486a89 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f13..6689b85bee 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,92 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/integration/avif/build.gradle b/integration/avif/build.gradle index ca795e3b9c..685f607a6d 100644 --- a/integration/avif/build.gradle +++ b/integration/avif/build.gradle @@ -20,8 +20,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/integration/concurrent/build.gradle b/integration/concurrent/build.gradle index 280ddacb5b..2e978dbc99 100644 --- a/integration/concurrent/build.gradle +++ b/integration/concurrent/build.gradle @@ -25,8 +25,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/integration/cronet/build.gradle b/integration/cronet/build.gradle index a33c65df5c..2cb7cef229 100644 --- a/integration/cronet/build.gradle +++ b/integration/cronet/build.gradle @@ -27,8 +27,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/integration/gifencoder/build.gradle b/integration/gifencoder/build.gradle index b31d416d99..d3d27a0a01 100644 --- a/integration/gifencoder/build.gradle +++ b/integration/gifencoder/build.gradle @@ -31,8 +31,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/integration/okhttp/build.gradle b/integration/okhttp/build.gradle index 15b1fa91d3..ec7b728f5f 100644 --- a/integration/okhttp/build.gradle +++ b/integration/okhttp/build.gradle @@ -20,8 +20,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/integration/okhttp3/build.gradle b/integration/okhttp3/build.gradle index 2c80d7a020..4c079f98a2 100644 --- a/integration/okhttp3/build.gradle +++ b/integration/okhttp3/build.gradle @@ -20,8 +20,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/integration/recyclerview/build.gradle b/integration/recyclerview/build.gradle index f5a2d4939f..a2984a63e3 100644 --- a/integration/recyclerview/build.gradle +++ b/integration/recyclerview/build.gradle @@ -18,8 +18,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/integration/volley/build.gradle b/integration/volley/build.gradle index 06bd1b7466..323deb2f53 100644 --- a/integration/volley/build.gradle +++ b/integration/volley/build.gradle @@ -29,8 +29,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/library/build.gradle b/library/build.gradle index d3c3df12e5..404072620c 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -70,8 +70,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/library/test/build.gradle b/library/test/build.gradle index baa1f700f5..8cc5a90add 100644 --- a/library/test/build.gradle +++ b/library/test/build.gradle @@ -29,7 +29,7 @@ afterEvaluate { android.testOptions.unitTests.all { Test testTask -> // configure max heap size of the test JVM testTask.maxHeapSize = TEST_JVM_MEMORY_SIZE as String - if (JavaVersion.current() <= JavaVersion.VERSION_1_7) { + if (JavaVersion.current() <= JavaVersion.VERSION_1_8) { // Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=2048m; support was removed in 8.0 testTask.jvmArgs "-XX:MaxPermSize=${TEST_JVM_MEMORY_SIZE}" } diff --git a/mocks/build.gradle b/mocks/build.gradle index 92be3ffd96..52f4a64b1b 100644 --- a/mocks/build.gradle +++ b/mocks/build.gradle @@ -19,8 +19,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/renovate.json b/renovate.json index 3e936818e8..03d3193a27 100644 --- a/renovate.json +++ b/renovate.json @@ -11,15 +11,7 @@ }, { "matchPackageNames": ["androidx.fragment:fragment"], - "allowedVersions": "1.3.6" - }, - { - "matchPackageNames": ["androidx.annotation:annotation"], - "allowedVersions": "<1.6.0" - }, - { - "matchPackageNames": ["androidx.appcompat:appcompat"], - "allowedVersions": "<1.4.0" + "allowedVersions": "1.4.1" } ] } diff --git a/samples/contacturi/build.gradle b/samples/contacturi/build.gradle index 88574ad4d5..189807df1e 100644 --- a/samples/contacturi/build.gradle +++ b/samples/contacturi/build.gradle @@ -19,8 +19,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/samples/flickr/build.gradle b/samples/flickr/build.gradle index 5ae6ab1cd6..370ca12f6d 100644 --- a/samples/flickr/build.gradle +++ b/samples/flickr/build.gradle @@ -25,8 +25,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/samples/giphy/build.gradle b/samples/giphy/build.gradle index 1bd128298c..c30983a595 100644 --- a/samples/giphy/build.gradle +++ b/samples/giphy/build.gradle @@ -23,8 +23,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/samples/imgur/build.gradle b/samples/imgur/build.gradle index 2ae096994b..63a4a94e5c 100644 --- a/samples/imgur/build.gradle +++ b/samples/imgur/build.gradle @@ -13,8 +13,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } buildTypes { release { diff --git a/samples/svg/build.gradle b/samples/svg/build.gradle index 2b59bb4e98..52d2cabdbc 100644 --- a/samples/svg/build.gradle +++ b/samples/svg/build.gradle @@ -20,8 +20,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } diff --git a/scripts/update_javadocs.sh b/scripts/update_javadocs.sh index 481231bb09..76380eab20 100755 --- a/scripts/update_javadocs.sh +++ b/scripts/update_javadocs.sh @@ -43,7 +43,7 @@ fi git checkout master GIT_COMMIT_SHA="$(git rev-parse HEAD)" -./gradlew dokkaHtmlMultiModule +./gradlew :dokkaHtmlMultiModule rm -rf $TEMP_DIR cp -r build/dokka/htmlMultiModule $TEMP_DIR diff --git a/settings.gradle b/settings.gradle index 04f3bc9cae..16988d368b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -61,25 +61,20 @@ dependencyResolutionManagement { version('kotlin', '1.7.0') version('mockito', '5.3.1') version('retrofit', '2.3.0') - version('androidx-benchmark', '1.1.1') + version('androidx-benchmark', '1.2.0-beta05') version('androidx-espresso', '3.5.1') - // At least versions 1.5 and later require java 8 desugaring, which Glide can't - // currently use, so we're stuck on an older version. - version('androidx-fragment', '1.3.6') + // Newer versions depend on different kotlin versions causing duplicate class paths: + version('androidx-fragment', '1.4.1') version('ksp', '1.7.0-1.0.6') library('androidx-multidex', "androidx.multidex:multidex:2.0.1") library('autoservice', 'com.google.auto.service:auto-service:1.0-rc3') library('autoservice.annotations', 'com.google.auto.service:auto-service-annotations:1.0.1') - library('android-gradle', 'com.android.tools.build:gradle:7.3.0') + library('android-gradle', 'com.android.tools.build:gradle:8.1.0') library('androidx-cardview', 'androidx.cardview:cardview:1.0.0') library('androidx-core', 'androidx.core:core:1.6.0') - // 1.6.0 seems to introduce: - // The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle - // in the samples. - library('androidx-annotation', 'androidx.annotation:annotation:1.5.0') - // 1.4+ requires java8. - library('androidx-appcompat', 'androidx.appcompat:appcompat:1.3.1') + library('androidx-annotation', 'androidx.annotation:annotation:1.6.0') + library('androidx-appcompat', 'androidx.appcompat:appcompat:1.4.0') library('androidx-benchmark.gradle', 'androidx.benchmark', 'benchmark-gradle-plugin').versionRef('androidx-benchmark') library('androidx-benchmark.junit', 'androidx.benchmark', 'benchmark-junit4').versionRef('androidx-benchmark') library('androidx-core.ktx', 'androidx.core:core-ktx:1.8.0') @@ -114,7 +109,7 @@ dependencyResolutionManagement { library('dagger-android', 'com.google.dagger', 'dagger-android').versionRef('dagger') library('dagger-android.support', 'com.google.dagger', 'dagger-android-support').versionRef('dagger') library('dagger-android.processor', 'com.google.dagger', 'dagger-android-processor').versionRef('dagger') - library('dokka-gradle', 'org.jetbrains.dokka:dokka-gradle-plugin:1.7.10') + library('dokka-gradle', 'org.jetbrains.dokka:dokka-gradle-plugin:1.8.20') library('errorprone-annotations', 'com.google.errorprone', 'error_prone_annotations').versionRef('errorprone') library('errorprone-core', 'com.google.errorprone', 'error_prone_core').versionRef('errorprone') library('errorprone-gradle', 'net.ltgt.gradle:gradle-errorprone-plugin:2.0.2') diff --git a/third_party/disklrucache/build.gradle b/third_party/disklrucache/build.gradle index 1fef6b67b0..e9190b2803 100644 --- a/third_party/disklrucache/build.gradle +++ b/third_party/disklrucache/build.gradle @@ -22,8 +22,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } From c6960d314151ad6c03e9e5eea5a9dcea57e6035e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 05:54:20 +0000 Subject: [PATCH 7/7] Update dependency androidx.recyclerview:recyclerview to v1.3.1 --- settings.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle b/settings.gradle index 16988d368b..a1688999cf 100644 --- a/settings.gradle +++ b/settings.gradle @@ -85,7 +85,7 @@ dependencyResolutionManagement { library('androidx-fragment.ktx', 'androidx.fragment', 'fragment-ktx').versionRef('androidx-fragment') library('androidx-futures', 'androidx.concurrent:concurrent-futures:1.1.0') library('androidx-junit', 'androidx.test.ext:junit:1.1.5') - library('androidx-recyclerview','androidx.recyclerview:recyclerview:1.2.1') + library('androidx-recyclerview','androidx.recyclerview:recyclerview:1.3.1') library('androidx-test.core', 'androidx.test:core:1.4.0') library('androidx-test.ktx', 'androidx.test:core-ktx:1.5.0') library('androidx-test.ktx.junit', 'androidx.test.ext:junit-ktx:1.1.5')