package Ġcom . simple mobile tools . camera . activities Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Task Stack Builder Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġcom . simple mobile tools . camera . Constants Ċ import Ġcom . simple mobile tools . camera . R Ċ import Ġcom . simple mobile tools . camera . dialogs . Write Permission Dialog Ċ import Ġcom . simple mobile tools . camera . extensions . needs St upid Write Permissions Ċ import Ġcom . simple mobile tools . file picker . dialogs . File Picker Dialog Ċ import Ġcom . simple mobile tools . file picker . extensions . getBase Path Ċ import Ġcom . simple mobile tools . file picker . extensions . get Human Readable Path Ċ import Ġkotlinx . android . synt hetic . main . activity _ settings .* Ċ import Ġjava . io . File Ċ Ċ class ĠSettings Activity Ġ: ĠSimple Activity () Ġ{ ĊĠĠĠ Ġval ĠOPEN _ DOCUMENT _ TREE Ġ= Ġ 1 ĊĠĠĠ Ġvar Ġm Curr Path : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ settings ) ĊĊĠĠĠĠĠĠĠ Ġsetup Dark Theme () ĊĠĠĠĠĠĠĠ Ġsetup Save Photos Folder () ĊĠĠĠĠĠĠĠ Ġsetup Sound () ĊĠĠĠĠĠĠĠ Ġsetup Force Ratio () ĊĠĠĠĠĠĠĠ Ġsetup Max Photo Resolution () ĊĠĠĠĠĠĠĠ Ġsetup Max Video Resolution () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . about Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( application Context , ĠAbout Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Dark Theme () Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings _ dark _ theme . isChecked Ġ= Ġm Config . is Dark Theme ĊĠĠĠĠĠĠĠ Ġsettings _ dark _ theme _ holder . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings _ dark _ theme . toggle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Config . is Dark Theme Ġ= Ġsettings _ dark _ theme . isChecked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestart Activity () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Save Photos Folder () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Curr Path Ġ= Ġm Config . save Photos Folder ĊĠĠĠĠĠĠĠ Ġsettings _ save _ photos . text Ġ= Ġget Human Path () ĊĠĠĠĠĠĠĠ Ġsettings _ save _ photos _ holder . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Picker Dialog ( this , Ġm Curr Path , Ġfalse , Ġfalse , Ġ Ġobject Ġ: ĠFile Picker Dialog . On File Picker Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fail ( error : ĠFile Picker Dialog . File Picker Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( pick ed Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Curr Path Ġ= Ġif Ġ( pick ed Path . length Ġ== Ġ 1 ) Ġpicked Path Ġelse Ġpicked Path . trim End ('/') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! File ( pick ed Path ). can Write () Ġ&& Ġneeds St upid Write Permissions ( pick ed Path ) Ġ&& Ġm Config . tree Uri . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWrite Permission Dialog ( this @ Settings Activity , Ġobject Ġ: ĠWrite Permission Dialog . On Write Permission Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Curr Path Ġ= Ġm Config . save Photos Folder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Confirmed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ OPEN _ DOCUMENT _ TREE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠOPEN _ DOCUMENT _ TREE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Config . save Photos Folder Ġ= Ġm Curr Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings _ save _ photos . text Ġ= Ġget Human Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Human Path (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠbasePath Ġ= Ġm Curr Path . getBase Path ( application Context ) ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġm Curr Path . replace First ( basePath , Ġget Storage Name ( basePath )). trim End ('/') ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( path . contains ('/ ')) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . substring ( path . lastIndexOf ("/") Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Storage Name ( basePath : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Human Readable Path ( basePath ) Ġ+ Ġ"/" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . KIT K AT ) ĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġresult Data : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġresult Data ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠOPEN _ DOCUMENT _ TREE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġresult Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Config . save Photos Folder Ġ= Ġm Curr Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings _ save _ photos . text Ġ= Ġget Human Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Tree Uri ( result Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Curr Path Ġ= Ġm Config . save Photos Folder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . KIT K AT ) ĊĠĠĠ Ġprivate Ġfun Ġsave Tree Uri ( result Data : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtree Uri Ġ= Ġresult Data . data ĊĠĠĠĠĠĠĠ Ġm Config . tree Uri Ġ= Ġresult Data . data . toString () ĊĊĠĠĠĠĠĠĠ Ġval Ġtake Flags Ġ= ĠIntent . FLAG _ GRANT _ READ _ URI _ PERMISSION Ġor ĠIntent . FLAG _ GRANT _ WRITE _ URI _ PERMISSION ĊĠĠĠĠĠĠĠ Ġcontent Resolver . take Persist able Uri Permission ( tree Uri , Ġtake Flags ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Sound () Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings _ sound . isChecked Ġ= Ġm Config . is Sound Enabled ĊĠĠĠĠĠĠĠ Ġsettings _ sound _ holder . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings _ sound . toggle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Config . is Sound Enabled Ġ= Ġsettings _ sound . isChecked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Force Ratio () Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings _ force _ ratio . isChecked Ġ= Ġm Config . force Ratio Enabled ĊĠĠĠĠĠĠĠ Ġsettings _ force _ ratio _ holder . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings _ force _ ratio . toggle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Config . force Ratio Enabled Ġ= Ġsettings _ force _ ratio . isChecked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Max Photo Resolution () Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings _ max _ photo _ resolution . setSelection ( getMax Photo Selection ()) ĊĠĠĠĠĠĠĠ Ġsettings _ max _ photo _ resolution . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Config . max Photo Resolution Ġ= ĠgetMax Photo Px ( settings _ max _ photo _ resolution . selected Item Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetMax Photo Selection (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Res Ġ= Ġm Config . max Photo Resolution ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( max Res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . TWO _ MP X Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . FI VE _ MP X Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . E IGHT _ MP X Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 3 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetMax Photo Px ( index : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠConstants . TWO _ MP X ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠConstants . FI VE _ MP X ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠConstants . E IGHT _ MP X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Max Video Resolution () Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings _ max _ video _ resolution . setSelection ( getMax Video Selection ()) ĊĠĠĠĠĠĠĠ Ġsettings _ max _ video _ resolution . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Config . max Video Resolution Ġ= ĠgetMax Video Px ( settings _ max _ video _ resolution . selected Item Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetMax Video Selection (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Res Ġ= Ġm Config . max Video Resolution ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( max Res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . P 4 8 0 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . P 7 2 0 Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . P 1 0 8 0 Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 3 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetMax Video Px ( index : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠConstants . P 4 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠConstants . P 7 2 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠConstants . P 1 0 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrestart Activity () Ġ{ ĊĠĠĠĠĠĠĠ ĠTask Stack Builder . create ( application Context ). add Next Intent With Parent Stack ( intent ). start Activities () ĊĠĠĠ Ġ} Ċ } Ċ