package Ġch . r my . android . http _ shortcuts . import _ export Ċ Ċ import Ġandroid . app . Progress Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġch . r my . android . http _ shortcuts . R Ċ import Ġch . r my . android . http _ shortcuts . dialogs . Dialog Builder Ċ import Ġch . r my . android . http _ shortcuts . extensions . attach To Ċ import Ġch . r my . android . http _ shortcuts . extensions . log Exception Ċ import Ġch . r my . android . http _ shortcuts . extensions . showMessageDialog Ċ import Ġch . r my . android . http _ shortcuts . extensions . show Snackbar Ċ import Ġch . r my . android . http _ shortcuts . extensions . startActivity Ċ import Ġch . r my . android . http _ shortcuts . utils . Destroy able Ċ import Ġch . r my . android . http _ shortcuts . utils . Destroy er Ċ import Ġch . r my . android . http _ shortcuts . utils . File Util Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ Ċ class ĠExport UI ( private Ġval Ġactivity : ĠFragment Activity ) Ġ: ĠDestroy able Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext Ġ= Ġactivity ĊĊĠĠĠ Ġprivate Ġval Ġdestroy er Ġ= ĠDestroy er () ĊĊĠĠĠ Ġfun Ġshow Export Options ( single : ĠBoolean Ġ= Ġfalse , Ġintent Handler : Ġ( Intent ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( R . string . title _ export ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. item ( R . string . button _ export _ to _ general ) Ġ{ Ġopen File Picker For Export ( single , Ġintent Handler ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. item ( R . string . button _ export _ send _ to ) Ġ{ Ġsend Export ( single ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show If Possible () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Export ( single ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen File Picker For Export ( single : ĠBoolean , Ġintent Handler : Ġ( Intent ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠIntent ( Intent . ACTION _ CREATE _ DOCUMENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Category ( Intent . CATEGORY _ OP ENABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setType ( EXPORT _ FILE _ TYPE _ FOR _ CRE ATING _ FILE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( Intent . EXTRA _ TITLE , Ġget Export FileName ( single )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let ( intent Handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Export ( uri : ĠUri , Ġshortcut Id : ĠString ? Ġ= Ġnull , Ġvariable Ids : ĠCollection < String >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠReplace Ġprogress Ġdialog Ġwith Ġsomething Ġbetter ĊĠĠĠĠĠĠĠ Ġval Ġprogress Dialog Ġ= ĠProgress Dialog ( activity ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( context . getString ( R . string . export _ in _ progress )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Canceled On Touch Outside ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠExport er ( context . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. export To Uri ( uri , Ġshortcut Id , Ġvariable Ids , Ġexclude Defaults Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Event Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . show Snackbar ( context . resources . get Quantity String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . plurals . shortcut _ export _ success , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . exported Shortcut s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . exported Shortcut s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . showMessageDialog ( context . getString ( R . string . export _ failed _ with _ reason , Ġe . message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Exception ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. attach To ( destroy er ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Export ( single : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcache File Ġ= ĠFile Util . create Cache File ( context , Ġget Export FileName ( single )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠReplace Ġprogress Ġdialog Ġwith Ġsomething Ġbetter ĊĠĠĠĠĠĠĠ Ġval Ġprogress Dialog Ġ= ĠProgress Dialog ( activity ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( context . getString ( R . string . export _ in _ progress )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Canceled On Touch Outside ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠExport er ( context . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. export To Uri ( cache File , Ġexclude Defaults Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Event Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( Intent . ACTION _ SEND ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setType ( EXPORT _ FILE _ TYPE _ FOR _ SH AR ING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( Intent . EXTRA _ STREAM , Ġcache File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . create Chooser ( it , Ġcontext . getString ( R . string . title _ export )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. startActivity ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Exception ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . show Snackbar ( R . string . error _ generic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. attach To ( destroy er ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġdestroy er . destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX PORT _ FILE _ TYPE _ FOR _ SH AR ING Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX PORT _ FILE _ TYPE _ FOR _ CRE ATING _ FILE Ġ= Ġ" application / json " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX PORT _ SINGLE _ FILE _ NAME Ġ= Ġ" shortcut . json " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX PORT _ MULTIPLE _ FILE _ NAME Ġ= Ġ" shortcuts . json " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Export FileName ( single : ĠBoolean ) Ġ= Ġif Ġ( single ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEX PORT _ SINGLE _ FILE _ NAME ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEX PORT _ MULTIPLE _ FILE _ NAME ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }