package Ġapp . lock book . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġapp . lock book . R Ċ import Ġapp . lock book . databinding . Dialog Create File Binding Ċ import Ġapp . lock book . model . Alert Model Ċ import Ġapp . lock book . model . Core Model Ċ import Ġapp . lock book . util .* Ċ import Ġcom . github . m ichael bull . result . Err Ċ import Ġcom . github . m ichael bull . result . Ok Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ data Ġclass ĠCreate FileInfo ( ĊĠĠĠ Ġval ĠparentId : ĠString , ĊĠĠĠ Ġval ĠfileType : ĠString , ĊĠĠĠ Ġval Ġis Drawing : ĠBoolean Ċ ) Ċ Ċ class ĠCreate FileDialog Fragment Ġ: ĠDialog Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠDialog Create File Binding ? Ġ= Ġnull ĊĠĠĠ Ġ// ĠThis Ġproperty Ġis Ġonly Ġvalid Ġbetween ĠonCreate View Ġand ĊĠĠĠ Ġ// Ġon Destroy View . ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĠĠĠ Ġprivate Ġval Ġcreate File Create Ġget () Ġ= Ġbinding . create File Create ĊĠĠĠ Ġprivate Ġval Ġcreate File Extension Ġget () Ġ= Ġbinding . create File Extension ĊĠĠĠ Ġprivate Ġval Ġcreate File Text Ġget () Ġ= Ġbinding . create File Text ĊĠĠĠ Ġprivate Ġval Ġcreate File Text Part Ġget () Ġ= Ġbinding . create File Text Part ĊĠĠĠ Ġprivate Ġval Ġcreate File Title Ġget () Ġ= Ġbinding . create File Title ĊĊĠĠĠ Ġprivate Ġvar Ġjob Ġ= ĠJob () ĊĠĠĠ Ġprivate Ġval Ġui Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main Ġ+ Ġjob ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠparentId : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠfileType : ĠFile Type ĊĠĠĠ Ġprivate Ġvar Ġis Drawing Ġby ĠDeleg ates . notNull < Boolean >() ĊĠĠĠ Ġvar Ġnew Document : ĠClient File Metadata ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġconfig : ĠConfig ĊĊĠĠĠ Ġprivate Ġval Ġalert Model Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠAlert Model ( Weak Reference ( require Activity ()), Ġview ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCREATE _ FILE _ DIALOG _ TAG Ġ= Ġ" Create FileDialog Fragment " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP ARENT _ ID _ KEY Ġ= Ġ" ID _ KEY " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFILE _ TYPE _ KEY Ġ= Ġ" FILE _ TYPE _ KEY " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠIS _ DRAW ING _ KEY Ġ= Ġ" IS _ DRAW ING _ KEY " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( parentId : ĠString , ĠfileType : ĠString , Ġis Drawing : ĠBoolean ): ĠCreate FileDialog Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . putString ( PARENT _ ID _ KEY , ĠparentId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . putString ( FILE _ TYPE _ KEY , ĠfileType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Boolean ( IS _ DRAW ING _ KEY , Ġis Drawing ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠCreate FileDialog Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠDialog Create File Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġarguments ĊĠĠĠĠĠĠĠ Ġval Ġnullable Parent Id Ġ= Ġbundle ?. getString ( PARENT _ ID _ KEY ) ĊĠĠĠĠĠĠĠ Ġval Ġnullable FileType Ġ= Ġbundle ?. getString ( FILE _ TYPE _ KEY ) ĊĠĠĠĠĠĠĠ Ġval Ġnullable Is Drawing Ġ= Ġbundle ?. getBoolean ( IS _ DRAW ING _ KEY ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( nullable Parent Id Ġ!= Ġnull Ġ&& Ġnullable FileType Ġ!= Ġnull Ġ&& Ġnullable Is Drawing Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠparentId Ġ= Ġnullable Parent Id ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfileType Ġ= ĠFile Type . values (). find Ġ{ Ġit . name Ġ== Ġnullable FileType Ġ} Ġ?: Ġreturn Ġalert Model . notify Basic Error (:: dismiss ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Drawing Ġ= Ġnullable Is Drawing ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert Model . notify Basic Error (:: dismiss ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconfig Ġ= ĠConfig ( require NotNull ( this . activity ). application . files Dir . absolute Path ) ĊĊĠĠĠĠĠĠĠ Ġbinding . create File Cancel . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdialog ?. set Canceled On Touch Outside ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġalert Model . notify Basic Error () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( fileType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Type . Folder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Extension . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Text Part . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Text . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Text . setOn Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ DONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Create File Request ( create File Text . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Create . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Create File Request ( create File Text . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Create . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Create File Request ( create File Text . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Title . setText ( R . string . create _ file _ title _ folder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Text . set Hint ( R . string . create _ file _ hint _ folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Type . Document Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Text Part . setOn Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ NEXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Extension . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate File Extension . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Extension . setText (".") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Extension . setSelection ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Extension . setSelection ( extension . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Extension . setOn Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ DONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Create File Request ( create File Text Part . text . toString () Ġ+ Ġcreate File Extension . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Create . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Create File Request ( create File Text Part . text . toString () Ġ+ Ġcreate File Extension . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Drawing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Title . setText ( R . string . create _ file _ title _ drawing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Text Part . set Hint ( R . string . create _ file _ hint _ drawing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Extension . set Hint ( R . string . create _ file _ hint _ drawing _ extension ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Extension . setText ( R . string . create _ file _ dialog _ drawing _ extension ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Title . setText ( R . string . create _ file _ title _ document ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Text Part . set Hint ( R . string . create _ file _ hint _ document ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Extension . set Hint ( R . string . create _ file _ hint _ document _ extension ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File Extension . setText ( R . string . create _ file _ dialog _ document _ extension ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. exhaustive ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Create File Request ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate File ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreate File Result Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Model . create File ( config , ĠparentId , Ġname , ĠfileType ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOk Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fileType Ġ== ĠFile Type . Document ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Document Ġ= Ġcreate File Result . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠErr Ġ-> Ġalert Model . notify Error ( create File Result . error . to Lb Error ( resources )) ĊĠĠĠĠĠĠĠ Ġ}. exhaustive ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġdialog ?. window ?. setLayout ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( resources . display Metrics . width Pixels Ġ* Ġ 0 . 9 ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ