package Ġcom . tern ary op . photos he lf . image viewer . activity Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Options Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . webkit . Javascript Interface Ċ import Ġandroid . webkit . Web Chrome Client Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . webkit . WebView Client Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . content . File Provider Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . tern ary op . photos he lf . activity . Abs Photo She lf Activity Ċ import Ġcom . tern ary op . photos he lf . activity . Image Viewer Data Ċ import Ġcom . tern ary op . photos he lf . image viewer . R Ċ import Ġcom . tern ary op . photos he lf . image viewer . service . Wall paper Service Ċ import Ġcom . tern ary op . photos he lf . image viewer . util . Image Viewer Util Ċ import Ġcom . tern ary op . photos he lf . util . menu . enable All Ċ import Ġcom . tern ary op . utils . dialog . show Error Dialog Ċ import Ġcom . tern ary op . utils . intent . Share Chooser Params Ċ import Ġcom . tern ary op . utils . text . from Html Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . io . File Ċ import Ġjava . net . URI Ċ import Ġjava . net . UR ISyntaxException Ċ import Ġjava . net . URL Ċ import Ġjava . util . Locale Ċ Ċ const Ġval ĠDIM ENSION S _ POST _ DELAY _ M ILL IS Ġ= Ġ 3 0 0 0 L Ċ const Ġval ĠFILE _ PROVIDER _ SHARE _ AUTH ORITY Ġ= Ġ" com . tern ary op . photos he lf . image picker . viewer . file Provider Share Authority " Ċ Ċ private Ġconst Ġval ĠSUB DIRECTORY _ PI CTURE S Ġ= Ġ" T ernary Op Photo She lf " Ċ Ċ @ Suppress Lint (" Set JavaScript Enabled ") Ċ class ĠImage Viewer Activity Ġ: ĠAbs Photo She lf Activity () Ġ{ ĊĠĠĠ Ġprivate Ġvar ĠwebView Loaded : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġimage Host Url : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdetails Text : ĠTextView ĊĊĠĠĠ Ġoverride Ġval Ġcontent View Layout Id : ĠInt Ġ= ĠR . layout . activity _ webview ĊĊĠĠĠ Ġ// Ġno Ġframe Ġinside Ġthe Ġlayout Ġso Ġno Ġneed Ġfor Ġcontent Frame Id ĊĠĠĠ Ġoverride Ġval Ġcontent Frame Id : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġimage Viewer Data : ĠImage Viewer Data ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġval ĠprogressBar Ġ= ĠfindViewById < View >( R . id . webview _ progressbar ) Ġas ĠProgress Bar ĊĠĠĠĠĠĠĠ Ġdetails Text Ġ= ĠfindViewById < View >( R . id . details _ text ) Ġas ĠTextView ĊĊĠĠĠĠĠĠĠ Ġimage Viewer Data Ġ= Ġintent . extras ?. get Serializable ( EXTRA _ IMAGE _ VIEW ER _ DATA ) Ġas ? ĠImage Viewer Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġ"< body >< img Ġsrc =\" ${ image Viewer Data . imageUrl }\" /></ body >" ĊĠĠĠĠĠĠĠ Ġprepare WebView ( progress Bar ). load Data With Base URL ( null , Ġdata , Ġ" text / html ", Ġ" UTF - 8 ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Host Url Ġ= ĠURI ( image Viewer Data . imageUrl ). host ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠUR ISyntaxException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdrawer Toolbar . overflow Icon Ġ= ĠContext Compat . get Drawable ( this , ĠR . drawable . ic _ image viewer _ overflow ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Fragment (): ĠFragment ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġprepare WebView ( progress Bar : ĠProgress Bar ): ĠWebView Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= ĠfindViewById < View >( R . id . webview _ view ) Ġas ĠWebView ĊĠĠĠĠĠĠĠ ĠwebView . settings . java Script Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . add Javascript Interface ( this , Ġ" dim Retriever ") ĊĠĠĠĠĠĠĠ ĠwebView Loaded Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ ĠwebView . setInitial Scale ( 1 ) ĊĠĠĠĠĠĠĠ ĠwebView . settings . load With Overview Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . settings . use Wide View Port Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . settings . built In Zoom Controls Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . settings . set Support Zoom ( true ) ĊĠĠĠĠĠĠĠ ĠwebView . settings . display Zoom Controls Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ ĠwebView . web Chrome Client Ġ= Ġobject Ġ: ĠWeb Chrome Client () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( view : ĠWebView , Ġnew Progress : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . progress Ġ= Ġnew Progress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠwebView . web View Client Ġ= Ġobject Ġ: ĠWebView Client () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Started ( view : ĠWebView , Ġurl : ĠString , Ġfav icon : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Finished ( view : ĠWebView , Ġurl : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView Loaded Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Max Line Length ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . load Url (" javascript : var Ġimg Ġ= Ġdocument . querySelector (' img '); dim Retriever . set Dimensions ( img . width , Ġimg . height )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Options Menu () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠwebView ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Javascript Interface ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġfun Ġset Dimensions ( w : ĠInt , Ġh : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Text . text Ġ= ĠString . format ( Locale . US , Ġ"% s Ġ(% 1 dx % 2 d )", Ġimage Host Url , Ġw , Ġh ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post Delayed ({ Ġdetails Text . visibility Ġ= ĠView . GONE Ġ}, ĠDIM ENSION S _ POST _ DELAY _ M ILL IS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . image _ viewer , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu . enable All ( web View Loaded ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ image _ viewer _ wall paper Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWall paper Service . start Change ( this , Ġimage Viewer Data . imageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ image _ viewer _ share Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Share Image () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ image _ viewer _ download Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Download () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ image _ viewer _ copy _ url Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Viewer Util . copy To Clipboard ( this , Ġimage Viewer Data . imageUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . image _ url _ description ), ĠR . string . url _ copied _ to _ clipboard _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ image _ viewer _ details Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Details () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Download () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= ĠImage Viewer Util . build FileName ( image Viewer Data . imageUrl , Ġimage Viewer Data . tag ) ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= ĠFile ( SUB DIRECTORY _ PI CTURE S , ĠfileName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Viewer Util . download ( this @ Image Viewer Activity , Ġimage Viewer Data . imageUrl , Ġrelative Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt . show Error Dialog ( this @ Image Viewer Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Share Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdest File Ġ= ĠImage Viewer Util . build Share Path ( this , Ġimage Viewer Data . imageUrl , Ġ" images ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshare Chooser Params Ġ= ĠShare Chooser Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Provider . get Uri For File ( this , ĠgetFile Provider (), Ġdest File ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . share _ image _ title ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Viewer Data . title ?. from Html ()?. toString () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Viewer Util . share Image ( this @ Image Viewer Activity , ĠURL ( image Viewer Data . imageUrl ), Ġshare Chooser Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt . show Error Dialog ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Details () Ġ{ ĊĠĠĠĠĠĠĠ Ġdetails Text . visibility Ġ= Ġif Ġ( details Text . visibility Ġ== ĠView . GONE ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . finish () ĊĠĠĠĠĠĠĠ Ġoverride Pending Transition ( R . anim . slide _ in _ right , ĠR . anim . slide _ out _ right ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetFile Provider (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Name Ġ= ĠComponent Name ( this , Ġjava Class ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġpackage Manager . getActivity Info ( component Name , ĠPackage Manager . GET _ META _ DATA ). metaData ĊĠĠĠĠĠĠĠ Ġreturn ĠcheckNotNull ( data . getString ( FILE _ PROVIDER _ SHARE _ AUTH ORITY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unable Ġto Ġfind Ġ$ FILE _ PROVIDER _ SHARE _ AUTH ORITY " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ IMAGE _ VIEW ER _ DATA Ġ= Ġ" com . tern ary op . photos he lf . extra . IMAGE _ VIEW ER _ DATA " ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart Image Viewer ( context : ĠContext , Ġimage Viewer Data : ĠImage Viewer Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠImage Viewer Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Serializable ( EXTRA _ IMAGE _ VIEW ER _ DATA , Ġimage Viewer Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . put Extras ( bundle ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim Bundle Ġ= ĠActivity Options . make Custom Animation ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . slide _ in _ left , ĠR . anim . slide _ out _ left ). to Bundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent , Ġanim Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ