@@ -32,22 +32,27 @@ import android.graphics.Bitmap
3232import  android.graphics.drawable.BitmapDrawable 
3333import  android.graphics.drawable.Drawable 
3434import  android.os.Build 
35- import  coil.ImageLoader 
36- import  coil.decode.DecodeResult 
37- import  coil.decode.Decoder 
38- import  coil.fetch.SourceResult 
39- import  coil.request.Options 
40- import  coil.size.Scale 
41- import  coil.size.Size 
42- import  coil.size.pxOrElse 
35+ import  coil3.ImageLoader 
36+ import  coil3.asImage 
37+ import  coil3.decode.DecodeResult 
38+ import  coil3.decode.Decoder 
39+ import  coil3.fetch.SourceFetchResult 
40+ import  coil3.request.Options 
41+ import  coil3.request.allowHardware 
42+ import  coil3.request.allowRgb565 
43+ import  coil3.request.bitmapConfig 
44+ import  coil3.size.Scale 
45+ import  coil3.size.ScaleDrawable 
46+ import  coil3.size.Size 
47+ import  coil3.size.pxOrElse 
4348import  com.radzivon.bartoshyk.avif.coder.AvifAnimatedDecoder 
4449import  com.radzivon.bartoshyk.avif.coder.PreferredColorConfig 
4550import  com.radzivon.bartoshyk.avif.coder.ScaleMode 
4651import  kotlinx.coroutines.runInterruptible 
4752import  okio.ByteString.Companion.encodeUtf8 
4853
4954public  class  AnimatedAvifDecoder (
50-     private  val  source :  SourceResult ,
55+     private  val  source :  SourceFetchResult ,
5156    private  val  options :  Options ,
5257    private  val  preheatFrames :  Int ,
5358    private  val  exceptionLogger :  ((Exception ) ->  Unit )?  = null ,
@@ -58,27 +63,35 @@ public class AnimatedAvifDecoder(
5863            //  ColorSpace is preferred to be ignored due to lib is trying to handle all color profile by itself
5964            val  sourceData =  source.source.source().readByteArray()
6065
61-             var  mPreferredColorConfig:  PreferredColorConfig  =  when  (options.config ) {
66+             var  mPreferredColorConfig:  PreferredColorConfig  =  when  (options.bitmapConfig ) {
6267                Bitmap .Config .ALPHA_8  ->  PreferredColorConfig .RGBA_8888 
6368                Bitmap .Config .RGB_565  ->  if  (options.allowRgb565) PreferredColorConfig .RGB_565  else  PreferredColorConfig .DEFAULT 
6469                Bitmap .Config .ARGB_8888  ->  PreferredColorConfig .RGBA_8888 
65-                 else  ->  PreferredColorConfig .DEFAULT 
70+                 else  ->  {
71+                     if  (options.allowHardware) {
72+                         PreferredColorConfig .DEFAULT 
73+                     } else  {
74+                         PreferredColorConfig .RGBA_8888 
75+                     }
76+                 }
6677            }
67-             if  (Build .VERSION .SDK_INT  >=  Build .VERSION_CODES .O  &&  options.config  ==  Bitmap .Config .RGBA_F16 ) {
78+             if  (Build .VERSION .SDK_INT  >=  Build .VERSION_CODES .O  &&  options.bitmapConfig  ==  Bitmap .Config .RGBA_F16 ) {
6879                mPreferredColorConfig =  PreferredColorConfig .RGBA_F16 
69-             } else  if  (Build .VERSION .SDK_INT  >=  Build .VERSION_CODES .Q  &&  options.config  ==  Bitmap .Config .HARDWARE ) {
80+             } else  if  (Build .VERSION .SDK_INT  >=  Build .VERSION_CODES .Q  &&  options.bitmapConfig  ==  Bitmap .Config .HARDWARE ) {
7081                mPreferredColorConfig =  PreferredColorConfig .HARDWARE 
71-             } else  if  (Build .VERSION .SDK_INT  >=  Build .VERSION_CODES .TIRAMISU  &&  options.config  ==  Bitmap .Config .RGBA_1010102 ) {
82+             } else  if  (Build .VERSION .SDK_INT  >=  Build .VERSION_CODES .TIRAMISU  &&  options.bitmapConfig  ==  Bitmap .Config .RGBA_1010102 ) {
7283                mPreferredColorConfig =  PreferredColorConfig .RGBA_1010102 
7384            }
7485
7586            if  (options.size ==  Size .ORIGINAL ) {
7687                val  originalImage =  AvifAnimatedDecoder (sourceData)
7788                return @runInterruptible DecodeResult (
78-                     drawable =  originalImage.drawable(
79-                         colorConfig =  mPreferredColorConfig,
80-                         scaleMode =  ScaleMode .FIT ,
81-                     ),
89+                     ScaleDrawable (
90+                         originalImage.drawable(
91+                             colorConfig =  mPreferredColorConfig,
92+                             scaleMode =  ScaleMode .FIT ,
93+                         ), options.scale
94+                     ).asImage(),
8295                    isSampled =  false 
8396                )
8497            }
@@ -93,12 +106,14 @@ public class AnimatedAvifDecoder(
93106            val  originalImage =  AvifAnimatedDecoder (sourceData)
94107
95108            DecodeResult (
96-                 drawable =  originalImage.drawable(
97-                     dstWidth =  dstWidth,
98-                     dstHeight =  dstHeight,
99-                     colorConfig =  mPreferredColorConfig,
100-                     scaleMode =  scaleMode
101-                 ),
109+                 ScaleDrawable (
110+                     originalImage.drawable(
111+                         dstWidth =  dstWidth,
112+                         dstHeight =  dstHeight,
113+                         colorConfig =  mPreferredColorConfig,
114+                         scaleMode =  scaleMode
115+                     ), options.scale
116+                 ).asImage(),
102117                isSampled =  true 
103118            )
104119        } catch  (e:  Exception ) {
@@ -152,7 +167,7 @@ public class AnimatedAvifDecoder(
152167    ) : Decoder.Factory {
153168
154169        override  fun  create (
155-             result :  SourceResult ,
170+             result :  SourceFetchResult ,
156171            options :  Options ,
157172            imageLoader :  ImageLoader ,
158173        ): Decoder ?  {
0 commit comments