package Ġco il . fetch Ċ Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . webkit . MimeType Map Ċ import Ġco il . bit m app ool . Bitmap Pool Ċ import Ġco il . decode . DataSource Ċ import Ġco il . decode . Drawable Decoder Service Ċ import Ġco il . decode . Options Ċ import Ġco il . size . Size Ċ import Ġco il . util . get Drawable Compat Ċ import Ġco il . util . get MimeType From Url Ċ import Ġco il . util . get Xml Drawable Compat Ċ import Ġco il . util . is Vector Ċ import Ġco il . util . night Mode Ċ import Ġco il . util . to Drawable Ċ import Ġok io . buffer Ċ import Ġok io . source Ċ Ċ internal Ġclass ĠResource Uri Fetcher ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġdrawable Decoder : ĠDrawable Decoder Service Ċ ) Ġ: ĠFetch er < Uri > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMIME _ TYPE _ XML Ġ= Ġ" text / xml " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandles ( data : ĠUri ) Ġ= Ġdata . scheme Ġ== ĠContent Resolver . SCHEME _ ANDROID _ RESOURCE ĊĊĠĠĠ Ġoverride Ġfun Ġkey ( data : ĠUri ) Ġ= Ġ"$ data -${ context . resources . configuration . night Mode }" ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch ( ĊĠĠĠĠĠĠĠ Ġpool : ĠBitmap Pool , ĊĠĠĠĠĠĠĠ Ġdata : ĠUri , ĊĠĠĠĠĠĠĠ Ġsize : ĠSize , ĊĠĠĠĠĠĠĠ Ġoptions : ĠOptions ĊĠĠĠ Ġ): ĠFetch Result Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠExpected Ġformat : Ġandroid . resource :// example . package . name / 1 2 3 4 5 6 7 8 ĊĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġdata . authority ?. take If Ġ{ Ġit . isNotBlank () Ġ} Ġ?: Ġthrow Invalid Uri Exception ( data ) ĊĠĠĠĠĠĠĠ Ġval Ġres Id Ġ= Ġdata . path Segments . last OrNull ()?. toInt OrNull () Ġ?: Ġthrow Invalid Uri Exception ( data ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresources Ġ= Ġcontext . package Manager . getResources For Application ( packageName ) ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠTyped Value (). apply Ġ{ Ġresources . getValue ( res Id , Ġthis , Ġtrue ) Ġ}. string ĊĠĠĠĠĠĠĠ Ġval Ġentry Name Ġ= Ġpath . substring ( path . lastIndexOf ('/ ')) ĊĠĠĠĠĠĠĠ Ġval ĠmimeType Ġ= ĠMime TypeMap . get Singleton (). get MimeType From Url ( entry Name ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( mime Type Ġ== ĠMIME _ TYPE _ XML ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Drawable Compat Ġcan Ġonly Ġload Ġresources Ġthat Ġare Ġin Ġthe Ġcurrent Ġpackage . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġif Ġ( packageName Ġ== Ġcontext . packageName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . get Drawable Compat ( res Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . get Xml Drawable Compat ( resources , Ġres Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Vector Ġ= Ġdrawable . is Vector ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDrawable Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Ġ= Ġif Ġ( is Vector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Decoder . convert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Ġ= Ġdrawable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġoptions . config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġsize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġoptions . scale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow In exact Size Ġ= Ġoptions . allow In exact Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). to Drawable ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Sample d Ġ= Ġis Vector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource Ġ= ĠDataSource . MEMORY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSource Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġresources . open Raw Resource ( res Id ). source (). buffer (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmimeType Ġ= ĠmimeType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource Ġ= ĠDataSource . MEMORY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġthrow Invalid Uri Exception ( data : ĠUri ): ĠNothing Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Invalid Ġ${ Content Resolver . SCHEME _ ANDROID _ RESOURCE } ĠURI : Ġ$ data ") ĊĠĠĠ Ġ} Ċ } Ċ