package Ġapp . graph ene os . camera . ui . activities Ċ Ċ import Ġandroid . animation . Argb Evaluator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . media . Media Metadata Retriever Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . provider . Documents Contract Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . provider . Media Store . Media Columns Ċ import Ġandroid . provider . Open able Columns Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts . Start Activity For Result Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġandroid xc . ex if interface . media . Ex if Interface Ċ import Ġapp . graph ene os . camera . Capt ured Item Ċ import Ġapp . graph ene os . camera . Capt ured Items Ċ import Ġapp . graph ene os . camera . GS lide Transformer Ċ import Ġapp . graph ene os . camera . Gallery Slider Adapter Ċ import Ġapp . graph ene os . camera . ITEM _ TYPE _ VIDEO Ċ import Ġapp . graph ene os . camera . R Ċ import Ġapp . graph ene os . camera . databinding . Gallery Binding Ċ import Ġapp . graph ene os . camera . util . storage Location To Ui String Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . Date Ċ import Ġjava . util . Locale Ċ import Ġjava . util . TimeZone Ċ import Ġjava . util . concurrent . Executors Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ class ĠIn App Gallery Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠGallery Binding ĊĠĠĠ Ġlateinit Ġvar Ġgallery Slider : ĠView Pager 2 ĊĠĠĠ Ġvar Ġgallery Slider Adapter : ĠGallery Slider Adapter ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġasync Loader Of Capt ured Items Ġ= ĠExec utors . new Single Thread Executor () ĊĠĠĠ Ġval Ġasync Image Loader Ġ= ĠExec utors . new Single Thread Executor () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsn ackBar : ĠSn ackbar ĊĠĠĠ Ġprivate Ġvar Ġog Color Ġby ĠDeleg ates . notNull < Int >() ĊĊĠĠĠ Ġprivate Ġvar Ġis Secure Mode Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġedit Intent Launcher Ġ= ĊĠĠĠĠĠĠĠ Ġregister For Activity Result ( Start Activity For Result ()) ĊĠĠĠĠĠĠĠ Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Edited Image ( result . data ?. data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġunexpected Error () Ġ= Ġshow Message ( getString ( R . string . editing _ unexpected _ error )) ĊĊĠĠĠ Ġprivate Ġfun Ġsave Edited Image ( editing Uri Ġ: ĠUri ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Uri Ġ= Ġediting Uri Ġ?: Ġreturn Ġunexpected Error () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . open InputStream ( content Uri ). use Ġ{ Ġin Stream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Stream ?. read Bytes ()?. let Ġ{ Ġedited Stream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . open OutputStream ( getCurrent Item (). uri )?. use Ġ{ ĠoutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . write ( edited Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . edit _ successfully )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecreate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . editing _ permission _ error )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunexpected Error () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġroot View : ĠView ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINTENT _ KEY _ SECURE _ MODE Ġ= Ġ" is _ secure _ mode " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINTENT _ KEY _ VIDEO _ ONLY _ MODE Ġ= Ġ" video _ only _ mode " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINTENT _ KEY _ LIST _ OF _ SECURE _ MODE _ CAPTURE D _ ITEMS Ġ= Ġ" secure _ mode _ items " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINTENT _ KEY _ LAST _ CAPTURE D _ ITEM Ġ= Ġ" last _ captured _ item " ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" SimpleDateFormat ") ĊĠĠĠĠĠĠĠ Ġfun Ġconvert Time ( time : ĠLong , Ġshow TimeZone : ĠBoolean Ġ= Ġtrue ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate ( time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĠSimpleDateFormat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show TimeZone ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" yyyy - MM - dd ĠHH : mm : ss Ġz " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" yyyy - MM - dd ĠHH : mm : ss " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat . time Zone Ġ= ĠTime Zone . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġformat . format ( date ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġconvert Time For Video ( time : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateFormat Ġ= ĠSimpleDateFormat (" yyyy MM dd ' T ' HH mm ss . SS S ' Z '", ĠLocale . US ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdateFormat . time Zone Ġ= ĠTime Zone . getTime Zone (" UTC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparsed Date Ġ= ĠdateFormat . parse ( time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconvert Time ( parsed Date ?. time Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġconvert Time For Photo ( time : ĠString , Ġoffset : ĠString ? Ġ= Ġnull ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= Ġif Ġ( offset Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ time Ġ$ offset " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateFormat Ġ= ĠSimpleDateFormat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" yyyy : MM : dd ĠHH : mm : ss " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" yyyy : MM : dd ĠHH : mm : ss ĠZ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠLocale . US ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdateFormat . time Zone Ġ= ĠTime Zone . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparsed Date Ġ= ĠdateFormat . parse ( timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconvert Time ( parsed Date ?. time Ġ?: Ġ 0 , Ġoffset Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget RelativePath ( ctx : ĠContext , Ġuri : ĠUri , Ġpath : ĠString ?, ĠfileName : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstorage Location To Ui String ( ctx , Ġuri . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"${ ctx . getString ( R . string . main _ storage ) }/ $ path $ fileName " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent Item (): ĠCapt ured Item Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgallery Slider Adapter !!. getCurrent Item () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . gallery , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . edit _ icon Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Current Media () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . delete _ icon Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Current Media () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . info Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Current Media Details () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . share _ icon Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshare Current Media () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġedit Current Media () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Secure Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . edit _ not _ allowed )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcur Item Ġ= ĠgetCurrent Item () ĊĊĠĠĠĠĠĠĠ Ġval Ġedit Intent Ġ= ĠIntent ( Intent . ACTION _ EDIT ) ĊĊĠĠĠĠĠĠĠ Ġedit Intent . putExtra ( Intent . EXTRA _ STREAM , Ġcur Item . uri ) ĊĠĠĠĠĠĠĠ Ġedit Intent . data Ġ= Ġcur Item . uri ĊĊĠĠĠĠĠĠĠ Ġedit Intent . flags Ġ= ĠIntent . FLAG _ GRANT _ READ _ URI _ PERMISSION ĊĠĠĠĠĠĠĠ Ġedit Intent Launcher . launch ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . create Chooser ( edit Intent , ĠgetString ( R . string . edit _ image )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Current Media () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcur Item Ġ= ĠgetCurrent Item () ĊĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this , Ġandroid . R . style . Theme _ Device Default _ Dialog _ Alert ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . delete _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . delete _ description , Ġcur Item . ui Name ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . delete ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġres Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġcur Item . uri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri . authority Ġ== ĠMedia Store . AUTH ORITY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= Ġcontent Resolver . delete ( uri , Ġnull , Ġnull ) Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= ĠDocuments Contract . delete Document ( content Resolver , Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . deleted _ successfully )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgallery Slider Adapter !!. removeItem ( cur Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . de leting _ unexpected _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . cancel , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Current Media Details () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcur Item Ġ= ĠgetCurrent Item () ĊĊĠĠĠĠĠĠĠ Ġvar Ġrelative Path : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar ĠfileName : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġsize : ĠLong Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġdate Added : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġdate Modified : ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnote Ġthat Ġthe Ġfirst Ġcolumn Ġ( REL ATIVE _ PATH ) Ġis Ġundefined Ġfor ĠS AF ĠU ris ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf ( Media Columns . REL ATIVE _ PATH , ĠOpen able Columns . DISPLAY _ NAME , ĠOpen able Columns . SIZE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . query ( cur Item . uri , Ġprojection , Ġnull , null )?. use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Path Ġ= Ġit . getString ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfileName Ġ= Ġit . getString ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġit . getLong ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fileName Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . unable _ to _ obtain _ file _ details )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Item . type Ġ== ĠITEM _ TYPE _ VIDEO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Metadata Retriever (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set DataSource ( this , Ġcur Item . uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Added Ġ= Ġconvert Time For Video ( it . extract Metadata ( Media Metadata Retriever . METADATA _ KEY _ DATE ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Modified Ġ= Ġdate Added ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . open InputStream ( cur Item . uri )?. use Ġ{ Ġstream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Interface Ġ= ĠEx if Interface ( stream ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġe Interface . getAttribute ( Ex if Interface . TAG _ OFFSET _ TIME ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Interface . has Attribute ( Ex if Interface . TAG _ DATETIME _ ORIGIN AL )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Added Ġ= Ġconvert Time For Photo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Interface . getAttribute ( Ex if Interface . TAG _ DATETIME _ ORIGIN AL ) !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Interface . has Attribute ( Ex if Interface . TAG _ DATETIME )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Modified Ġ= Ġconvert Time For Photo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Interface . getAttribute ( Ex if Interface . TAG _ DATETIME ) !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" show Current Media Details ", Ġ" unable Ġto Ġobtain Ġfile Ġdetails ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . unable _ to _ obtain _ file _ details )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog : ĠAlertDialog . Builder Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this , Ġandroid . R . style . Theme _ Device Default _ Dialog _ Alert ) ĊĊĠĠĠĠĠĠĠ Ġalert Dialog . setTitle ( getString ( R . string . file _ details )) ĊĊĠĠĠĠĠĠĠ Ġval Ġdetails Builder Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠ Ġdetails Builder . append ("\ n ", ĠgetString ( R . string . file _ name _ generic ), Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġdetails Builder . append ( fileName ) ĊĠĠĠĠĠĠĠ Ġdetails Builder . append ("\ n \ n ") ĊĊĠĠĠĠĠĠĠ Ġdetails Builder . append ( getString ( R . string . file _ path ), Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġdetails Builder . append ( get RelativePath ( this , Ġcur Item . uri , Ġrelative Path , ĠfileName !! )) ĊĠĠĠĠĠĠĠ Ġdetails Builder . append ("\ n \ n ") ĊĊĠĠĠĠĠĠĠ Ġdetails Builder . append ( getString ( R . string . file _ size ), Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Builder . append ( getString ( R . string . loading _ generic )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Builder . append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% . 2 f ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( size Ġ/ Ġ( 1 0 0 0 f Ġ* Ġ 1 0 0 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Builder . append (" ĠMB ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdetails Builder . append ("\ n \ n ") ĊĊĠĠĠĠĠĠĠ Ġdetails Builder . append ( getString ( R . string . file _ created _ on ), Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġif Ġ( date Added Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Builder . append ( getString ( R . string . not _ found _ generic )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Builder . append ( date Added ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdetails Builder . append ("\ n \ n ") ĊĊĠĠĠĠĠĠĠ Ġdetails Builder . append ( getString ( R . string . last _ modified _ on ), Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġif Ġ( date Modified Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Builder . append ( getString ( R . string . not _ found _ generic )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Builder . append ( date Modified ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġalert Dialog . setMessage ( details Builder ) ĊĊĠĠĠĠĠĠĠ Ġalert Dialog . set Positive Button ( getString ( R . string . ok ), Ġnull ) ĊĊĊĠĠĠĠĠĠĠ Ġalert Dialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Background To Black () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġc Bg Color Ġ= Ġ( root View . background Ġas ĠColor Drawable ). color ĊĊĠĠĠĠĠĠĠ Ġif Ġ( c Bg Color Ġ== ĠColor . BLACK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbg Color Anim Ġ= ĠValue Animator . of Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArg b Evaluator (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġog Color , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . BLACK ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbg Color Anim . duration Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠ Ġbg Color Anim . add Update Listener Ġ{ Ġanim ator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġanim ator . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot View . set BackgroundColor ( color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbg Color Anim . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Background To Original () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġc Bg Color Ġ= Ġ( root View . background Ġas ĠColor Drawable ). color ĊĊĠĠĠĠĠĠĠ Ġif Ġ( c Bg Color Ġ== Ġog Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbg Color Anim Ġ= ĠValue Animator . of Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArg b Evaluator (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . BLACK , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġog Color , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbg Color Anim . duration Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠ Ġbg Color Anim . add Update Listener Ġ{ Ġanim ator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġanim ator . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . root View . set BackgroundColor ( color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbg Color Anim . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshare Current Media () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Secure Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . sharing _ not _ allowed )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcur Item Ġ= ĠgetCurrent Item () ĊĊĠĠĠĠĠĠĠ Ġval Ġshare Ġ= ĠIntent ( Intent . ACTION _ SEND ) ĊĠĠĠĠĠĠĠ Ġshare . putExtra ( Intent . EXTRA _ STREAM , Ġcur Item . uri ) ĊĠĠĠĠĠĠĠ Ġshare . setData And Type ( cur Item . uri , Ġcur Item . mime Type ()) ĊĠĠĠĠĠĠĠ Ġshare . flags Ġ= ĠIntent . FLAG _ GRANT _ READ _ URI _ PERMISSION ĊĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( share , ĠgetString ( R . string . share _ image ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Secure Mode Ġ= Ġintent . getBoolean Extra ( INT ENT _ KEY _ SECURE _ MODE , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Secure Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetShow When Locked ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Turn Screen On ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġog Color Ġ= ĠContext Compat . getColor ( this , ĠR . color . system _ neutral 1 _ 9 0 0 ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠGallery Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setBackground Drawable ( Color Drawable ( Context Compat . getColor ( this , ĠR . color . app bar ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Display Show Title Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġroot View Ġ= Ġbinding . root View ĊĠĠĠĠĠĠĠ Ġroot View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gallery Slider Adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle ActionBar State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgallery Slider Ġ= Ġbinding . gallery Slider ĊĠĠĠĠĠĠĠ Ġsn ackBar Ġ= ĠSn ackbar . make ( gallery Slider , Ġ"", ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠ Ġgallery Slider . set Page Transformer ( GS lide Transformer ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġshow Videos Only Ġ= Ġintent . getBoolean Extra ( INT ENT _ KEY _ VIDEO _ ONLY _ MODE , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval ĠlistOf Secure Mode Capt ured Items Ġ= Ġintent . get Parcelable ArrayList Extra < Capt ured Item >( INT ENT _ KEY _ LIST _ OF _ SECURE _ MODE _ CAPTURE D _ ITEMS ) ĊĊĠĠĠĠĠĠĠ Ġasync Loader Of Capt ured Items . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun processed Items : ĠList < Capt ured Item > Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCapt ured Items . get ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġactivity Ġwas Ġdestroyed Ġand Ġex ect utor . shutdown Now () Ġwas Ġcalled , Ġwhich Ġinterrupts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexecutor Ġthreads ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Of Secure Mode Capt ured Items Ġ= ĠlistOf Secure Mode Capt ured Items ?. to HashSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠArrayList < Capt ured Item >( un processed Items . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġun processed Items . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Videos Only ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . type Ġ!= ĠITEM _ TYPE _ VIDEO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of Secure Mode Capt ured Items ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . contains ( item )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . sortBy Descending Ġ{ Ġit . date String Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Executor . execute Ġ{ Ġasync Result Ready ( items ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlast Capt ured Item Ġ= Ġintent . get Parcelable Extra < Capt ured Item >( INT ENT _ KEY _ LAST _ CAPTURE D _ ITEM ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( last Capt ured Item Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Capt ured Item >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( last Capt ured Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGallery Slider Adapter ( this , Ġlist ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgallery Slider Adapter Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgallery Slider . adapter Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( main Looper ). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gallery Slider Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . placeholder Text . root . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 5 0 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide ActionBar () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġasync Result Ready ( items : ĠArrayList < Capt ured Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Destroyed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( items . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , ĠR . string . empty _ gallery , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . placeholder Text . root . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġval Ġexisting Adapter Ġ= Ġgallery Slider Adapter ĊĊĠĠĠĠĠĠĠ Ġif Ġ( existing Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGallery Slider Adapter ( this , Ġitems ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgallery Slider Adapter Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgallery Slider . adapter Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Items Ġ= Ġexisting Adapter . items ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Items . ensure Capacity ( items . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpre loaded Item Ġ= Ġadapter Items [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . forEach Indexed Ġ{ Ġindex , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġcheck Ġis Ġneeded Ġto Ġavoid Ġshowing Ġpre loaded Ġitem Ġtwice Ġ( it 's Ġnot Ġguaranteed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthat Ġit 'll Ġbe Ġfirst Ġin Ġthe Ġlist ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġ 5 0 Ġ|| Ġitem Ġ!= Ġpre loaded Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Items . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Adapter . notify Item Range Inserted ( 1 , Ġitems . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshow ActionBar () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle ActionBar State () Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide ActionBar () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ActionBar () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ActionBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Background To Original () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide ActionBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Background To Black () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġasync Loader Of Capt ured Items . shutdown Now () ĊĠĠĠĠĠĠĠ Ġasync Image Loader . shutdown Now () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Message ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsn ackBar . setText ( msg ) ĊĠĠĠĠĠĠĠ Ġsn ackBar . show () ĊĠĠĠ Ġ} Ċ } Ċ