package Ġcom . pr 0 gram m . app . ui . views . viewer Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġcom . dav em or ris sey . labs . sub scale view . Image Source Ċ import Ġcom . dav em or ris sey . labs . sub scale view . Sub sampling Scale ImageView Ċ import Ġcom . pr 0 gram m . app . R Ċ import Ġcom . pr 0 gram m . app . util .* Ċ import Ġcom . pr 0 gram m . app . util . de coders . De coders Ċ import Ġcom . pr 0 gram m . app . util . de coders . Pic asso Decoder Ċ import Ġcom . pr 0 gram m . app . util . di . injector Ċ import Ġk ot ter knife . bind View Ċ import Ġkotlin . math . max Ċ Ċ @ Suppress Lint (" View Constructor ") Ċ class ĠImage Media View ( config : ĠMedia View . Config ) Ġ: ĠMedia View ( config , ĠR . layout . player _ kind _ image ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠCAP _ IMAGE _ RATIO Ġ= Ġ 1 f Ġ/ Ġ 3 0 f ĊĊĠĠĠ Ġprivate Ġval Ġtag Ġ= Ġ" Image Media View " Ġ+ ĠSystem . identity HashCode ( this ) ĊĊĠĠĠ Ġprivate Ġval ĠimageView : ĠSub sampling Scale ImageView Ġby Ġbind View ( R . id . image ) ĊĠĠĠ Ġprivate Ġval Ġerror Indicator : ĠTextView Ġby Ġbind View ( R . id . error ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠimageView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ ĠimageView . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ ĠimageView . is Zoom Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠimageView . is Quick Scale Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠimageView . is Pan Enabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġdebug Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . set Debug ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġtry Ġnot Ġto Ġuse Ġtoo Ġmuch Ġmemory , Ġeven Ġon Ġbig Ġdevices ĊĠĠĠĠĠĠĠ ĠimageView . setMax Tile Size ( 2 0 4 8 ) ĊĊĠĠĠĠĠĠĠ ĠimageView . set Bitmap Decoder Factory ( Pic asso Decoder . factory ( tag , Ġpic asso )) ĊĠĠĠĠĠĠĠ ĠimageView . set Region Decoder Factory ( De coders . region Decoder Factory ( context . injector . instance ())) ĊĊĠĠĠĠĠĠĠ ĠimageView . setOn Image EventListener ( object Ġ: ĠSub sampling Scale ImageView . Default On Image EventListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Image Loaded () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Busy Indicator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Media Shown () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Image Load Error ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Busy Indicator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Indicator ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Ready () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Scaling () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠimageView . add On Layout ChangeListener Ġ{ Ġv , Ġleft , Ġtop , Ġright , Ġbottom , Ġold Left , Ġold Top , Ġold Right , Ġold Bottom Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( imageView . s Width Ġ> Ġ 0 Ġ&& ĠimageView . s Height Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Scaling () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd On Detach Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpic asso . cancel Tag ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setOn Image EventListener ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . remove From Parent () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġstart Ġloading ĊĠĠĠĠĠĠĠ Ġval Ġt iling Ġ= Ġconfig . preview Info ?. let Ġ{ Ġit . width Ġ> Ġ 2 0 0 0 Ġ|| Ġit . height Ġ> Ġ 2 0 0 0 Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ ĠimageView . setImage ( Image Source . uri ( effective Uri ). til ing ( til ing )) ĊĊĠĠĠĠĠĠĠ Ġshow Busy Indicator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġapply Scaling () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= ĠimageView . s Width . toFloat () Ġ/ ĠimageView . s Height . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġratio C apped Ġ= Ġmax ( ratio , ĠCAP _ IMAGE _ RATIO ) ĊĊĠĠĠĠĠĠĠ Ġview Aspect Ġ= Ġratio C apped ĊĊĠĠĠĠĠĠĠ Ġval Ġview Width Ġ= ĠimageView . width . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġview Height Ġ= ĠimageView . height . toFloat () ĊĊĠĠĠĠĠĠĠ Ġval Ġmax Scale Ġ= Ġview Width Ġ/ ĠimageView . s Width ĊĠĠĠĠĠĠĠ Ġval Ġmin Scale Ġ= Ġview Height Ġ/ ĠimageView . s Height ĊĊĠĠĠĠĠĠĠ ĠimageView . min Scale Ġ= Ġmin Scale ĊĠĠĠĠĠĠĠ ĠimageView . max Scale Ġ= Ġmax Scale ĊĠĠĠĠĠĠĠ ĠimageView . setMinimum Scale Type ( Sub sampling Scale ImageView . SCALE _ TYPE _ START ) ĊĠĠĠĠĠĠĠ ĠimageView . reset Scale And Center () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Media Shown () Ġ{ ĊĠĠĠĠĠĠĠ ĠimageView . visible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġif Ġ( imageView . alpha Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . animate (). alpha ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( Media View . ANIM ATION _ DURATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ Ġsuper . on Media Shown () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Media Shown () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġinternal Ġfun Ġshow Error Indicator ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Indicator . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġerror Indicator . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġerror Indicator . animate (). alpha ( 1 f ). start () ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġa Ġmore Ġuseful Ġerror Ġmessage ĊĠĠĠĠĠĠĠ Ġerror Indicator . text Ġ= Ġcontext . getText ( R . string . could _ not _ load _ image ). toString () Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n \ n " Ġ+ ĠError Formatting . get Formatter ( error ). getMessage ( context , Ġerror ) ĊĠĠĠ Ġ} Ċ } Ċ