package Ġme . pan pf . sketch . sample . ui Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . text . format . Formatter Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Toast Ċ import Ġkotlinx . android . synt hetic . main . fragment _ image .* Ċ import Ġme . pan pf . android x kt . app . bind Boolean Arg Or Ċ import Ġme . pan pf . android x kt . app . bind Parcelable Arg Ċ import Ġme . pan pf . android x kt . app . bind String Arg OrNull Ċ import Ġme . pan pf . sketch . Sketch Ċ import Ġme . pan pf . sketch . datasource . DataSource Ċ import Ġme . pan pf . sketch . decode . Image Attrs Ċ import Ġme . pan pf . sketch . display . Fade In Image Dis player Ċ import Ġme . pan pf . sketch . drawable . Sketch Drawable Ċ import Ġme . pan pf . sketch . drawable . Sketch Gif Drawable Ċ import Ġme . pan pf . sketch . drawable . Sketch Ref Bitmap Ċ import Ġme . pan pf . sketch . request .* Ċ import Ġme . pan pf . sketch . sample . AppConfig Ċ import Ġme . pan pf . sketch . sample . R Ċ import Ġme . pan pf . sketch . sample . base . Base Fragment Ċ import Ġme . pan pf . sketch . sample . base . Bind ContentView Ċ import Ġme . pan pf . sketch . sample . bean . Image Ċ import Ġme . pan pf . sketch . sample . event . AppConfig Changed Event Ċ import Ġme . pan pf . sketch . sample . event . Register Event Ċ import Ġme . pan pf . sketch . sample . util . Apply Wall paper AsyncTask Ċ import Ġme . pan pf . sketch . sample . util . Fixed Three Level Sca les Ċ import Ġme . pan pf . sketch . sample . util . Save Image AsyncTask Ċ import Ġme . pan pf . sketch . sample . widget . Mapping View Ċ import Ġme . pan pf . sketch . sample . widget . Sample ImageView Ċ import Ġme . pan pf . sketch . state . Memory Cache State Image Ċ import Ġme . pan pf . sketch . uri . File Uri Model Ċ import Ġme . pan pf . sketch . uri . Get DataSource Exception Ċ import Ġme . pan pf . sketch . uri . Uri Model Ċ import Ġme . pan pf . sketch . util . Sketch Utils Ċ import Ġme . pan pf . sketch . zoom . Adaptive Two Level Sca les Ċ import Ġme . pan pf . sketch . zoom . Image Zoom er Ċ import Ġme . pan pf . sketch . zoom . Size Ċ import Ġorg . green robot . event bus . EventBus Ċ import Ġorg . green robot . event bus . Subscribe Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ Ċ @ Register Event Ċ @ Bind ContentView ( R . layout . fragment _ image ) Ċ class ĠImage Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġimage Ġby Ġbind Parcelable Arg < Image >( PARAM _ REQUIRED _ STRING _ IMAGE _ URI ) ĊĠĠĠ Ġprivate Ġval Ġloading Image Options Key : ĠString ? Ġby Ġbind String Arg OrNull ( PARAM _ REQUIRED _ STRING _ LOADING _ IMAGE _ OPTIONS _ KEY ) ĊĠĠĠ Ġprivate Ġval Ġshow Tools : ĠBoolean Ġby Ġbind Boolean Arg Or ( PARAM _ REQUIRED _ BOOLEAN _ SHOW _ TOOLS ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfinal Show ImageUrl : ĠString ĊĊĠĠĠ Ġprivate Ġval Ġshow Helper Ġ= ĠShow Helper () ĊĠĠĠ Ġprivate Ġval Ġzoom Helper Ġ= ĠZoom Helper () ĊĠĠĠ Ġprivate Ġvar Ġmapping Helper Ġ= ĠMapping Helper () ĊĠĠĠ Ġprivate Ġval Ġclick Helper Ġ= ĠClick Helper () ĊĠĠĠ Ġprivate Ġval Ġset Window Background Helper Ġ= ĠSet Window Background Helper () ĊĠĠĠ Ġprivate Ġval Ġgif Play Follow Page Visible Helper Ġ= ĠG if Play Follow Page Visible Helper () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġset Window Background Helper . onCreate ( activity ) ĊĊĠĠĠĠĠĠĠ Ġval Ġshow High Definition Image Ġ= ĠApp Config . getBoolean ( activity , ĠApp Config . Key . SHOW _ UN SPL ASH _ RAW _ IMAGE ) ĊĠĠĠĠĠĠĠ Ġfinal Show ImageUrl Ġ= Ġif Ġ( show High Definition Image ) Ġimage . raw Quality Url Ġelse Ġimage . normal Quality Url ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġzoom Helper . on View Created () ĊĠĠĠĠĠĠĠ Ġmapping Helper . on View Created () ĊĠĠĠĠĠĠĠ Ġclick Helper . on View Created () ĊĠĠĠĠĠĠĠ Ġshow Helper . on View Created () ĊĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). register ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon User Visible Changed ( isVisible To User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġzoom Helper . on User Visible Changed () ĊĠĠĠĠĠĠĠ Ġset Window Background Helper . on User Visible Changed () ĊĠĠĠĠĠĠĠ Ġgif Play Follow Page Visible Helper . on User Visible Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġ@ Subscribe ĊĠĠĠ Ġfun Ġon Event ( event : ĠApp Config Changed Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( AppConfig . Key . SUPPORT _ ZO OM Ġ== Ġevent . key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzoom Helper . on Config Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapping Helper . on View Created () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( AppConfig . Key . READ _ MODE Ġ== Ġevent . key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzoom Helper . on Read Mode Config Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). unregister ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠPlay Image Event ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠShow Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon View Created () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . display Listener Ġ= ĠImage Display Listener () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . download Progress Listener Ġ= ĠImage Download Progress Listener () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Options () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . display Image ( final Show ImageUrl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinit Options () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . page Ġ= ĠSample ImageView . Page . DETAIL ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġimage _ image Fragment _ image . options ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħģè®¸ æĴŃæĶ¾ ĠGIF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . is Decode Gif Image Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæľī åįł ä½į åĽ¾ éĢīé¡¹ ä¿¡æģ¯ çļĦè¯Ŀ å°± ä½¿çĶ¨ åĨħåŃĺ ç¼ĵåŃĺ åįł ä½į åĽ¾ ä½Ĩ ä¸į ä½¿çĶ¨ ä»»ä½ķ æĺ¾ç¤º åĻ¨ ï¼Į åĲ¦åĪĻ å°±æĺ¯ çĶ¨ æ¸ Ĳ åħ¥ æĺ¾ç¤º åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( loading Image Options Key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Model Ġ= ĠUri Model . match ( activity , Ġfinal Show ImageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcached Ref Bitmap : ĠSk etch Ref Bitmap ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmemory CacheKey : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri Model Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemory CacheKey Ġ= ĠSk etch Utils . make Request Key ( image . normal Quality Url , Ġuri Model , Ġloading Image Options Key !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Ref Bitmap Ġ= ĠSk etch . with ( activity ). configuration . memory Cache . get ( memory CacheKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cached Ref Bitmap Ġ!= Ġnull Ġ&& Ġmemory CacheKey Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . loading Image Ġ= ĠMemory Cache State Image ( memory CacheKey , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . display er Ġ= ĠF ade In Image Dis player () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . display er Ġ= ĠF ade In Image Dis player () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠImage Display Listener Ġ: ĠDisplay Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Started () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint _ image Fragment _ hint . loading ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed ( drawable : ĠDrawable , Ġimage From : ĠImage From , Ġimage Attrs : ĠImage Attrs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint _ image Fragment _ hint . hidden () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Window Background Helper . on Display Completed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgif Play Follow Page Visible Helper . on Display Completed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( cause : ĠError Cause ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint _ image Fragment _ hint . hint ( R . drawable . ic _ error , Ġ" Image Ġdisplay Ġfailed ", Ġ" Again ", ĠView . OnClickListener Ġ{ Ġimage _ image Fragment _ image . display Image ( final Show ImageUrl ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Canceled ( cause : ĠCancel Cause ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" NON _ EX HA UST IVE _ WHEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cause ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCancel Cause . PAUSE _ DOWNLOAD Ġ-> Ġhint _ image Fragment _ hint . hint ( R . drawable . ic _ error , Ġ" Pause Ġto Ġdownload Ġnew Ġimage Ġfor Ġsaving Ġtraffic ", Ġ" I Ġdo Ġnot Ġcare ", ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Level Ġ= Ġimage _ image Fragment _ image . options . request Level ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . options . request Level Ġ= ĠRequest Level . NET ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . display Image ( final Show ImageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . options . request Level Ġ= Ġrequest Level ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCancel Cause . PAUSE _ LOAD Ġ-> Ġhint _ image Fragment _ hint . hint ( R . drawable . ic _ error , Ġ" Paused Ġto Ġload Ġnew Ġimage ", Ġ" For ced Ġto Ġload ", ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Level Ġ= Ġimage _ image Fragment _ image . options . request Level ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . options . request Level Ġ= ĠRequest Level . NET ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . display Image ( final Show ImageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . options . request Level Ġ= Ġrequest Level ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠImage Download Progress Listener Ġ: ĠDownload Progress Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonUpdate Download Progress ( total Length : ĠInt , Ġcompleted Length : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint _ image Fragment _ hint . set Progress ( total Length , Ġcompleted Length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠZoom Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon View Created () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . is Zoom Enabled Ġ= ĠApp Config . getBoolean ( image _ image Fragment _ image . context , ĠApp Config . Key . SUPPORT _ ZO OM ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( AppConfig . getBoolean ( image _ image Fragment _ image . context , ĠApp Config . Key . FIXED _ TH REE _ LEVEL _ ZO OM _ MODE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . zoom er ?. set Zoom Sca les ( Fixed Three Level Sca les ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . zoom er ?. set Zoom Sca les ( Adaptive Two Level Sca les ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Read Mode Config Changed () ĠĠ Ġ// ĠåĪĿå§ĭåĮĸ éĺħè¯» æ¨¡å¼ı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon User Visible Changed () Ġ Ġ// ĠåĪĿå§ĭåĮĸ è¶ħ å¤§ åĽ¾ æŁ¥çľĭ åĻ¨ çļĦ æļĤ åģľ çĬ¶æĢģ ï¼Į è¿Ļä¸Ģ æŃ¥ å¾Ī éĩįè¦ģ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Config Changed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon View Created () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġon User Visible Changed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . zoom er ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( AppConfig . getBoolean ( activity , ĠApp Config . Key . PAUSE _ BLOCK _ DISPLAY _ WHEN _ PAGE _ NOT _ VISIBLE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . block Dis player . set Pause (! isVisible To User ) Ġ Ġ// Ġä¸į åı¯ è§ģ çļĦæĹ¶åĢĻ æļĤ åģľ è¶ħ å¤§ åĽ¾ æŁ¥çľĭ åĻ¨ ï¼Į èĬĤ çľģ åĨħåŃĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( isVisible To User Ġ&& Ġit . block Dis player . is Paused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . block Dis player . set Pause ( false ) Ġ// Ġ åĽłä¸º æľī ĠPA USE _ BLOCK _ DISPLAY _ WHEN _ PAGE _ NOT _ VISIBLE Ġ å¼Ģ åħ³ çļĦ åŃĺåľ¨ ï¼Į åı¯èĥ½ä¼ļ åĩºçİ° åħ³éĹŃ å¼Ģ åħ³ åĲİ ä¾Ŀ çĦ¶ å¤Ħ äºİ æļĤ åģľ çĬ¶æĢģ çļĦ æĥħåĨµ ï¼Į åĽłæŃ¤ è¿ĻéĩĮ æģ ¢å¤į ä¸Ģä¸ĭ ï¼Į åĬł ä¸ª ä¿Ŀ éĻ© ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Read Mode Config Changed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . zoom er ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Read Mode Ġ= ĠApp Config . getBoolean ( activity , ĠApp Config . Key . READ _ MODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠMapping Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġzoom Matrix Changed Listener Ġ= ĠZoom Matrix Changed Listener () ĊĊĠĠĠĠĠĠĠ Ġfun Ġon View Created () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! show Tools ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping _ image Fragment . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image _ image Fragment _ image . zoom er Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMapping View Ġ è·Ł éļı ĠMatrix Ġ åıĺåĮĸ åĪ·æĸ° æĺ¾ç¤º åĮºåŁŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . zoom er ?. add On Matrix ChangeListener ( zoom Matrix Changed Listener ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMapping View Ġ è·Ł éļı ç¢ İ çīĩ åıĺåĮĸ åĪ·æĸ° ç¢ İ çīĩ åĮºåŁŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . zoom er ?. block Dis player ?. setOn Block Changed Listener Ġ{ Ġmapping _ image Fragment . block Changed ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĤ¹åĩ» ĠMapping View Ġ å®ļä½į åĪ° æĮĩå®ļ ä½įç½® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping _ image Fragment . setOn Single ClickListener ( object Ġ: ĠMapping View . On Single ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Single Click ( x : ĠFloat , Ġy : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġimage _ image Fragment _ image . drawable Ġ?: Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawable . intrinsic Width Ġ== Ġ 0 Ġ|| Ġdrawable . intrinsic Height Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mapping _ image Fragment . width Ġ== Ġ 0 Ġ|| Ġmapping _ image Fragment . height Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Scale Ġ= Ġdrawable . intrinsic Width . toFloat () Ġ/ Ġmapping _ image Fragment . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Scale Ġ= Ġdrawable . intrinsic Height . toFloat () Ġ/ Ġmapping _ image Fragment . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal X Ġ= Ġx Ġ* Ġwidth Scale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Y Ġ= Ġy Ġ* Ġheight Scale ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshow Location Animation Ġ= ĠApp Config . getBoolean ( image _ image Fragment _ image . context , ĠApp Config . Key . LOCATION _ ANIM ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation ( real X , Ġreal Y , Ġshow Location Animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping _ image Fragment . setOn Single ClickListener ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping _ image Fragment . update ( Size ( 0 , Ġ 0 ), ĠRect ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapping _ image Fragment . options . display er Ġ= ĠF ade In Image Dis player () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapping _ image Fragment . options . setMax Size ( 6 0 0 , Ġ 6 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapping _ image Fragment . display Image ( final Show ImageUrl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġlocation ( x : ĠFloat , Ġy : ĠFloat , Ġanimate : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . zoom er ?. location ( x , Ġy , Ġanimate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġinner Ġclass ĠZoom Matrix Changed Listener Ġ: ĠImage Zoom er . On Matrix ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġvar Ġvisible Rect Ġ= ĠRect () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Matrix Changed ( image Zoom er : ĠImage Zoom er ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Zoom er . get Visible Rect ( visible Rect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping _ image Fragment . update ( image Zoom er . drawable Size , Ġvisible Rect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠSet Window Background Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġpage Back g Apply Callback : ĠPage Back g Apply Callback ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun ĠonCreate ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġis ĠPage Back g Apply Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Window Background Helper . page Back g Apply Callback Ġ= Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġon User Visible Changed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page Back g Apply Callback Ġ!= Ġnull Ġ&& Ġis VisibleTo User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Back g Apply Callback !!. on Apply Background ( final Show ImageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Display Completed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon User Visible Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠG if Play Follow Page Visible Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon User Visible Changed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġimage _ image Fragment _ image . drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Drawable Ġ= ĠSk etch Utils . getLast Drawable ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Drawable Ġ!= Ġnull Ġ&& Ġlast Drawable Ġis ĠSk etch Gif Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( last Drawable Ġas ĠSk etch Gif Drawable ). follow Page Visible ( isVisible To User , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Display Completed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġimage _ image Fragment _ image . drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Drawable Ġ= ĠSk etch Utils . getLast Drawable ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Drawable Ġ!= Ġnull Ġ&& Ġlast Drawable Ġis ĠSk etch Gif Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( last Drawable Ġas ĠSk etch Gif Drawable ). follow Page Visible ( isVisible To User , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠClick Helper Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġon View Created () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ åįķ åĩ» äºĭä»¶ ä¼łéĢĴ ç»Ļ ä¸Ĭ å±Ĥ ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzoom er Ġ= Ġimage _ image Fragment _ image . zoom er ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzoom er ?. setOn View Tap Listener Ġ{ Ġview , Ġx , Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Fragment Ġ= Ġparent Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Fragment Ġ!= Ġnull Ġ&& Ġparent Fragment Ġis ĠImage Zoom er . On View Tap Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent Fragment Ġas ĠImage Zoom er . On View Tap Listener ). on View Tap ( view , Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Point Ġ= Ġzoom er . touch Point To Drawable Point ( x . toInt (), Ġy . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġif ( drawable Point Ġ!= Ġnull ) Ġ Ġzoom er . getBlock By Drawable Point ( drawable Point . x , Ġdrawable Point . y ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block ?. bitmap Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠimageView Ġ= ĠImageView ( activity ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Bitmap ( block . bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( activity ). setView ( imageView ). set Positive Button (" åıĸæ¶Ī ", Ġnull ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu ItemList Ġ= ĠLinkedList < MenuItem >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Image ĠInfo ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> Ġactivity ?. let Ġ{ Ġit 1 Ġ-> Ġimage _ image Fragment _ image . show Info ( it 1 ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Zoom / Rotate / Block ĠDisplay ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> Ġshow Zoom Menu () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format (" Toggle ĠScale Type Ġ(% s )", Ġimage _ image Fragment _ image . zoom er ?. scale Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġimage _ image Fragment _ image . scale Type ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> Ġshow Scale Type Menu () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Auto ĠPlay ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> Ġplay () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Set Ġas Ġwall paper ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> Ġset Wall paper () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Share ĠImage ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> Ġshare () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Save ĠImage ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> Ġsave () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠarrayOf Null s < String >( menu ItemList . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġmenu ItemList . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( w Ġ< Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ w ] Ġ= Ġmenu ItemList [ w ]. title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem ClickListener Ġ= ĠDialog Interface . OnClickListener Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList [ which ]. click Listener ?. onClick ( dialog , Ġwhich ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Items ( items , Ġitem ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshow Zoom Menu () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu ItemList Ġ= ĠLinkedList < MenuItem >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç¼© æĶ¾ ä¿¡æģ¯ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzoom er Ġ= Ġimage _ image Fragment _ image . zoom er ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( zoom er Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzoom Info Builder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzoom Scale Ġ= ĠSk etch Utils . format Float ( zoom er . zoom Scale , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisible Rect Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzoom er . get Visible Rect ( visible Rect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisible Rect String Ġ= Ġvisible Rect . to Short String () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzoom Info Builder . append (" Zoom : Ġ"). append ( zoom Scale ). append (" Ġ/ Ġ"). append ( visible Rect String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( zoom Info Builder . toString (), Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem (" can Scroll H orizontally : Ġ${ zoom er . can Scroll H orizontally (). toString () }", Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem (" can Scroll Vert ically : Ġ${ zoom er . can Scroll Vert ically (). toString () }", Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem (" Zoom Ġ( Disabled )", Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪĨ åĿĹ æĺ¾ç¤º ä¿¡æģ¯ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( zoom er Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Dis player Ġ= Ġzoom er . block Dis player ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Info Builder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Dis player . is Ready Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Info Builder . append (" Blocks ï¼ļ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( block Dis player . block Base Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( block Dis player . block Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( Formatter . format FileSize ( context , Ġblock Dis player . allocation Byte Count )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Info Builder . append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Info Builder . append (" Blocks ĠArea ï¼ļ "). append ( block Dis player . decode Rect . to Short String ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Info Builder . append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Info Builder . append (" Blocks ĠArea Ġ( SRC ) ï¼ļ "). append ( block Dis player . decode Src Rect . to Short String ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Dis player . is Initializing Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Info Builder . append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Info Builder . append (" Blocks Ġinitializing ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġblock Info Builder . append (" Blocks Ġ( No Ġneed )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( block Info Builder . toString (), Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem (" Blocks Ġ( Disabled )", Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪĨ åĿĹ è¾¹ çķĮ å¼Ģ åħ³ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( zoom er Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Dis player Ġ= Ġzoom er . block Dis player ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block Dis player . is Ready Ġ|| Ġblock Dis player . is Initializing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( if Ġ( block Dis player . is Show Block Bounds ) Ġ" Hide Ġblock Ġbounds " Ġelse Ġ" Show Ġblock Ġbounds ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> Ġimage _ image Fragment _ image . zoom er ?. block Dis player ?. let Ġ{ Ġit . is Show Block Bounds Ġ= Ġ! it . is Show Block Bounds Ġ} Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem (" Block Ġbounds Ġ( No Ġneed )", Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem (" Block Ġbounds Ġ( Disabled )", Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĺħè¯» æ¨¡å¼ı å¼Ģ åħ³ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( zoom er Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( if Ġ( zoom er . is Read Mode ) Ġ" Close Ġread Ġmode " Ġelse Ġ" Open Ġread Ġmode ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> Ġimage _ image Fragment _ image . zoom er ?. let Ġ{ Ġit . is Read Mode Ġ= Ġ! it . is Read Mode Ġ} Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem (" Read Ġmode Ġ( Zoom Ġdisabled )", Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĹ ĭ è½¬ èıľåįķ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( zoom er Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem ( String . format (" Clock wise Ġrotation Ġ 9 0 Â° ï¼Ī % d ï¼ī ", Ġzoom er . rotate Degrees ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ image Fragment _ image . zoom er ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . rotate By ( 9 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" The Ġrotation Ġangle Ġmust Ġbe Ġa Ġmultiple Ġof Ġ 9 0 ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList . add ( MenuItem (" Clock wise Ġrotation Ġ 9 0 Â° Ġ( Zoom Ġdisabled )", Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠarrayOf Null s < String >( menu ItemList . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġmenu ItemList . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( w Ġ< Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ w ] Ġ= Ġmenu ItemList [ w ]. title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem ClickListener Ġ= ĠDialog Interface . OnClickListener Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ItemList [ which ]. click Listener ?. onClick ( dialog , Ġwhich ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Items ( items , Ġitem ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshow Scale Type Menu () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( activity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setTitle (" Toggle ĠScale Type ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠarrayOf Null s < String >( 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ 0 ] Ġ= Ġ" CENTER " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ 1 ] Ġ= Ġ" CENTER _ C ROP " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ 2 ] Ġ= Ġ" CENTER _ INS IDE " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ 3 ] Ġ= Ġ" FIT _ START " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ 4 ] Ġ= Ġ" FIT _ CENTER " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ 5 ] Ġ= Ġ" FIT _ END " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ 6 ] Ġ= Ġ" FIT _ XY " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Items ( items ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( which ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġimage _ image Fragment _ image . scale Type Ġ= ĠImageView . Scale Type . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġimage _ image Fragment _ image . scale Type Ġ= ĠImageView . Scale Type . CENTER _ C ROP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġimage _ image Fragment _ image . scale Type Ġ= ĠImageView . Scale Type . CENTER _ INS IDE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġimage _ image Fragment _ image . scale Type Ġ= ĠImageView . Scale Type . FIT _ START ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġimage _ image Fragment _ image . scale Type Ġ= ĠImageView . Scale Type . FIT _ CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġimage _ image Fragment _ image . scale Type Ġ= ĠImageView . Scale Type . FIT _ END ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 Ġ-> Ġimage _ image Fragment _ image . scale Type Ġ= ĠImageView . Scale Type . FIT _ XY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Negative Button (" Cancel ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetImage File ( image Uri : ĠString ?): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( image Uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Model Ġ= ĠUri Model . match ( context , Ġimage Uri !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri Model Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" Unknown Ġformat Ġuri : Ġ$ image Uri ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdataSource : ĠDataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource Ġ= Ġuri Model . getDataSource ( context , Ġimage Uri , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠGet DataSource Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" The ĠImage Ġis Ġnot Ġready Ġyet ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource . getFile ( context . external Cache Dir , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshare () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġimage _ image Fragment _ image . drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Uri Ġ= Ġif Ġ( drawable Ġ!= Ġnull Ġ&& Ġdrawable Ġis ĠSk etch Drawable ) Ġ( drawable Ġas ĠSk etch Drawable ). uri Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( image Uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" Please Ġwait Ġlater ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage File Ġ= ĠgetImage File ( image Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image File Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" The ĠImage Ġis Ġnot Ġready Ġyet ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ SEND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ STREAM , ĠUri . from File ( image File )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" image /" Ġ+ Ġparse FileType ( image File . name ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo List Ġ= Ġactivity . package Manager . query Intent Activities ( intent , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( info List Ġ== Ġnull Ġ|| Ġinfo List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" There Ġis Ġno ĠAPP Ġon Ġyour Ġdevice Ġto Ġshare Ġthe Ġpicture ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Wall paper () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġimage _ image Fragment _ image . drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Uri Ġ= Ġif Ġ( drawable Ġ!= Ġnull Ġ&& Ġdrawable Ġis ĠSk etch Drawable ) Ġ( drawable Ġas ĠSk etch Drawable ). uri Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( image Uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" Please Ġwait Ġlater ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage File Ġ= ĠgetImage File ( image Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image File Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" The ĠImage Ġis Ġnot Ġready Ġyet ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠApply Wall paper AsyncTask ( activity , Ġimage File ). execute ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġplay () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). post ( Play Image Event ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġsave () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġimage _ image Fragment _ image . drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Uri Ġ= Ġif Ġ( drawable Ġ!= Ġnull Ġ&& Ġdrawable Ġis ĠSk etch Drawable ) Ġ( drawable Ġas ĠSk etch Drawable ). uri Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( image Uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" Please Ġwait Ġlater ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Model Ġ= ĠUri Model . match ( context , Ġimage Uri !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri Model Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" Unknown Ġformat Ġuri : Ġ$ image Uri ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri Model Ġis ĠFile Uri Model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" This Ġimage Ġis Ġthe Ġlocal Ġno Ġneed Ġto Ġsave ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdataSource : ĠDataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource Ġ= Ġuri Model . getDataSource ( context , Ġimage Uri , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠGet DataSource Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" The ĠImage Ġis Ġnot Ġready Ġyet ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSave Image AsyncTask ( activity , ĠdataSource , Ġimage Uri ). execute ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse FileType ( fileName : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast IndexOf Ġ= ĠfileName . lastIndexOf ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lastIndexOf Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileType Ġ= ĠfileName . substring ( lastIndexOf Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( "" Ġ== ĠfileType . trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠfileType ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġinner Ġclass ĠMenuItem ( val Ġtitle : ĠString , Ġvar Ġclick Listener : ĠDialog Interface . OnClickListener ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPARAM _ REQUIRED _ STRING _ IMAGE _ URI Ġ= Ġ" PARAM _ REQUIRED _ STRING _ IMAGE _ URI " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPARAM _ REQUIRED _ STRING _ LOADING _ IMAGE _ OPTIONS _ KEY Ġ= Ġ" PARAM _ REQUIRED _ STRING _ LOADING _ IMAGE _ OPTIONS _ KEY " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPARAM _ REQUIRED _ BOOLEAN _ SHOW _ TOOLS Ġ= Ġ" PARAM _ REQUIRED _ BOOLEAN _ SHOW _ TOOLS " ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild ( image : ĠImage , Ġloading Image Options Id : ĠString ?, Ġshow Tools : ĠBoolean ): ĠImage Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Parcelable ( PARAM _ REQUIRED _ STRING _ IMAGE _ URI , Ġimage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString ( PARAM _ REQUIRED _ STRING _ LOADING _ IMAGE _ OPTIONS _ KEY , Ġloading Image Options Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Boolean ( PARAM _ REQUIRED _ BOOLEAN _ SHOW _ TOOLS , Ġshow Tools ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠImage Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġbundle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }