/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠH am id re za ĠE te bar ian Ġ& ĠAli ĠMod ares . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġme ow . widget Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Base 6 4 Ċ import Ġandroid . view . animation . Linear Interpolator Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . databinding . Binding Adapter Ċ import Ġcom . bump tech . glide . Generic Transition Options Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . RequestBuilder Ċ import Ġcom . bump tech . glide . load . Multi Transformation Ċ import Ġcom . bump tech . glide . load . Transformation Ċ import Ġcom . bump tech . glide . load . resource . bitmap . Center Crop Ċ import Ġcom . bump tech . glide . request . RequestListener Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . bump tech . glide . request . target . Notification Target Ċ import Ġcom . bump tech . glide . request . transition . View Property Transition Ċ import Ġme ow . k tx .* Ċ import Ġme ow . widget . transformation . Me ow C orners Transformation Ċ import Ġjava . io . File Ċ import Ġkotlin . math . abs Ċ Ċ /** Ċ Ġ* Ġ[ ImageView ] ĠExtensions . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ ĠH am id re za ĠE te bar ian Ċ Ġ* Ġ@ version Ġ 1 . 0 . 0 Ċ Ġ* Ġ@ since ĠĠĠ 2 0 2 0 - 0 3 - 1 8 Ċ Ġ*/ Ċ Ċ val Ġg lide Alpha Animator Ġ= ĠView Property Transition . Animator Ġ{ ĊĠĠĠ Ġit . alpha Ġ= Ġ 0 f ĊĠĠĠ Ġit . animate (). alpha ( 1 f ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 2 5 0 ĊĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠImageView Binding Adapter Ġ{ ĊĠĠĠ Ġ@ Binding Adapter ( ĊĠĠĠĠĠĠĠ Ġ" me ow _ data ", ĊĠĠĠĠĠĠĠ Ġ" me ow _ place Holder ", ĊĠĠĠĠĠĠĠ Ġ" me ow _ load Animator ", ĊĠĠĠĠĠĠĠ Ġ" me ow _ glide Corner Size ", ĊĠĠĠĠĠĠĠ Ġ" me ow _ base 6 4 Data ", ĊĠĠĠĠĠĠĠ Ġrequire All Ġ= Ġfalse ĊĠĠĠ Ġ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġset Url ( ĊĠĠĠĠĠĠĠ Ġview : ĠImageView , ĊĠĠĠĠĠĠĠ Ġdata : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġplace Holder Drawable : ĠDrawable ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġload Animator : ĠView Property Transition . Animator ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġg lide Corner Size : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġbase 6 4 Data : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġtransformation Ġ= Ġif Ġ( glide Corner Size Ġ== Ġ 0 f ) Ġnull Ġelse ĠMulti Transformation ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCenter Crop (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMe ow C orners Transformation ( glide Corner Size . dp (). toInt (), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠG lide Config ( place Holder Drawable , Ġload Animator , Ġtransformation ) ĊĠĠĠĠĠĠĠ Ġif Ġ( base 6 4 Data . isNotNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . load Base 6 4 ( data , Ġconfig ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . load G lide ( data , Ġconfig ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠG lide Config ( ĊĠĠĠ Ġvar Ġplace Holder Drawable : ĠDrawable ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġanim ator : ĠView Property Transition . Animator ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġtransformation : ĠTransformation < Bitmap >? Ġ= Ġnull Ċ ) Ċ Ċ fun ĠImageView ?. load G lide ( ĊĠĠĠ Ġdata String : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġg lide Config : ĠG lide Config Ġ= ĠG lide Config (), ĊĠĠĠ Ġratio : ĠDouble ? Ġ= Ġ 0 . 0 , ĊĠĠĠ Ġwidth : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġdata Bytes : ĠByteArray ? Ġ= Ġnull , ĊĠĠĠ Ġis Transform Enabled : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġis Animation Enabled : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġlistener : ĠRequest Listener < Drawable ?> ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ== Ġnull Ġ|| Ġcontext Ġ== Ġnull Ġ|| Ġratio Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġlog D ( m Ġ= Ġ" G lide ĠLoad Ġ: Ġ$ data String ") ĊĊĠĠĠ Ġ@ Suppress (" Can Be Val ") ĊĠĠĠ Ġvar Ġuse Transform Ġ= Ġis Transform Enabled ĊĠĠĠ Ġval Ġcontext Ġ= Ġcontext ĊĠĠĠ Ġvar Ġrequest Builder : ĠRequest Builder < Drawable > ĊĠĠĠ Ġval Ġg lide Ġ= ĠG lide . with ( context ) ĊĠĠĠ Ġval Ġis String Ġ= Ġdata String Ġ!= Ġnull ĊĊĠĠĠ Ġrequest Builder Ġ= Ġif Ġ( isString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data String . isValid Url () Ġ|| Ġdata String . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg lide . load ( data String ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg lide . load ( File ( data String )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġg lide . load ( data Bytes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġoptions Ġ= Ġif Ġ( glide Config . transformation Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ ĠRequest Options () ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ ĠRequest Options . bitmap Transform ( glide Config . transformation !! ) ĊĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 1 ) ĊĠĠĠĠĠĠĠ Ġoptions Ġ= Ġoptions . placeholder ( glide Config . place Holder Drawable ) ĊĊĠĠĠ Ġif Ġ( is Animation Enabled Ġ&& Ġg lide Config . anim ator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest Builder Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Builder . transition ( Generic Transition Options . with ( glide Config . anim ator !! )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( ratio Ġ> Ġ 0 Ġ|| Ġwidth Ġ> Ġ 0 ) Ġ{ Ġ// width Ġ= Ġratio ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġcalculate For Best Fit ( ratio , Ġwidth ) ĊĠĠĠĠĠĠĠ Ġoptions Ġ= Ġoptions . center Crop (). override ( p . x , Ġp . y ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġlistener ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest Builder Ġ= Ġrequest Builder . listener ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(! use Transform ) ĊĠĠĠĠĠĠĠ Ġoptions Ġ= Ġoptions . dont Transform () ĊĊĠĠĠ Ġrequest Builder Ġ= Ġrequest Builder . apply ( options ) ĊĊĠĠĠ Ġrequest Builder . into ( this ) Ċ } Ċ Ċ fun Ġcalculate For Best Fit ( ratio : ĠDouble ?, Ġimage Width : ĠInt ): ĠPoint Ġ{ ĊĠĠĠ Ġval Ġp Ġ= ĠPoint () ĊĠĠĠ Ġif Ġ( ratio Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn Ġp ĊĊĠĠĠ Ġval Ġmax Ratio Ġ= Ġ 1 . 7 8 ĊĠĠĠ Ġval Ġmin Ratio Ġ= Ġ 0 . 8 ĊĊĠĠĠ Ġif Ġ( ratio Ġin Ġmin Ratio .. max Ratio ) Ġ{ ĊĠĠĠĠĠĠĠ Ġp . x Ġ= Ġimage Width ĊĠĠĠĠĠĠĠ Ġp . y Ġ= Ġ( p . x Ġ/ Ġratio ). toInt () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġabs ( ratio Ġ- Ġmax Ratio ) ĊĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġabs ( ratio Ġ- Ġmin Ratio ) ĊĠĠĠĠĠĠĠ Ġval Ġnearest Ġ= Ġif Ġ( min Ġ>= Ġmax ) Ġmax Ġelse Ġmin ĊĠĠĠĠĠĠĠ Ġp . x Ġ= Ġimage Width ĊĠĠĠĠĠĠĠ Ġp . y Ġ= Ġ( p . x Ġ/ Ġnearest ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġp Ċ } Ċ Ċ fun ĠNotification Target . load G lide ( context : ĠContext , Ġdata : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġg lide Ġ= ĠG lide . with ( context ). as Bitmap () ĊĠĠĠ Ġval Ġrequest Builder Ġ= Ġg lide . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . isValid Url ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload ( data ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavoid Exception Ġ{ Ġload ( File ( data )) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġrequest Builder . into ( this ) Ċ } Ċ Ċ fun ĠImageView ?. load Base 6 4 ( data : ĠString ?, Ġg lide Config : ĠG lide Config Ġ= ĠG lide Config ()) Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ== Ġnull Ġ|| Ġdata Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠ Ġload G lide ( data Bytes Ġ= ĠBase 6 4 . decode ( data , ĠBase 6 4 . DEFAULT ), Ġg lide Config Ġ= Ġg lide Config ) Ċ }