package Ġcom . te amel lipsis . application _ migration _ platform Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . Intent Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġkotlinx . android . synt hetic . main . activity _ app _ management .* Ċ import Ġjava . lang . Exception Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġandroid . os . AsyncTask Ċ import Ġandroid . os . Environment Ċ import Ġandroid . support . design . widget . TextInput Layout Ċ import Ġandroid . support . v 4 . content . File Provider Ċ import Ġandroid . support . v 7 . app . AlertDialog Ċ import Ġandroid . widget .* Ċ import Ġcom . te amel lipsis . dynamic . Dynamic App Ċ import Ġdal vik . system . Dex ClassLoader Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġjava . io .* Ċ import Ġjava . io . File . separator ĊĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠAdapter View . On ItemClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlist Items : ĠMutable List < String > Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġprivate Ġvar Ġlist Files : ĠMutable List < File > Ġ= Ġmutable ListOf < File >() ĊĠĠĠ Ġlateinit Ġvar Ġfile System : ĠFileSystem ĊĠĠĠ Ġlateinit Ġvar Ġcontext : ĠContext ĊĠĠĠ Ġlateinit Ġvar Ġobj Ġ: ĠDynamic App ĊĠĠĠ Ġlateinit Ġvar Ġst Ġ: ĠServer Th red ĊĠĠĠ Ġlateinit Ġvar Ġapp Config : ĠApp Config ĊĠĠĠ Ġlateinit Ġvar Ġcurrent dir : ĠFile ĊĠĠĠ Ġlateinit Ġvar ĠlistView : ĠListView ĊĠĠĠ Ġlateinit Ġvar Ġtx view : ĠTextView ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġapp Config Ġ= ĠApp Config ( application Context ) ĊĠĠĠĠĠĠĠ ĠlistView Ġ= ĠfindViewById < ListView >( R . id . list View ) ĊĠĠĠĠĠĠĠ ĠlistView . on ItemClickListener Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġfile System Ġ= ĠFileSystem ( application Context ) ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġval Ġapps Dir Ġ= ĠFile ( Environment . get External Storage Directory (). absolute Path ) ĊĠĠĠĠĠĠĠ Ġcurrent dir Ġ= ĠFile ( Environment . get External Storage Directory (). absolute Path ) ĊĠĠĠĠĠĠĠ Ġtx view Ġ= ĠfindViewById < TextView >( R . id . txt View ) ĊĠĠĠĠĠĠĠ Ġtx view . setText ( current dir . absolute Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ( apps Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" App - Migr atory - Platform ", Ġapps Dir . list Files (). size . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġapps Dir . list Files ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . add ( file . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Files . add ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Items . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistView . adapter Ġ= ĠArray Adapter < String >( this , Ġandroid . R . layout . simple _ list _ item _ 1 , Ġlist Items ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistView . adapter Ġ= ĠArray Adapter < String >( this , ĠR . layout . app _ list _ item , ĠR . id . list Item Text , Ġlist Items ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġopen App ( list Files [ position ]) ĊĠĠĠĠĠĠĠ Ġcurrent dir = list Files [ position ] ĊĠĠĠĠĠĠĠ Ġif ( current dir . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Dialog 1 ( current dir ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġopen Dialog 1 ( app Path : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapps Dir Ġ= Ġapp Path ĊĠĠĠĠĠĠĠ Ġlist Items . clear () ĊĠĠĠĠĠĠĠ Ġlist Files . clear () ĊĠĠĠĠĠĠĠ Ġif Ġ( apps Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" App - Migr atory - Platform ", Ġapps Dir . list Files (). size . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġapps Dir . list Files ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . add ( file . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Files . add ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Items . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġarray Adapter Ġ= ĠArray Adapter < String >( this , Ġandroid . R . layout . simple _ list _ item _ 1 , Ġlist Items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistView . adapter Ġ= Ġarray Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray Adapter . set Notify OnChange ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx view . setText ( current dir . absolute Path ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistView . adapter Ġ= ĠArray Adapter < String >( this , ĠR . layout . app _ list _ item , ĠR . id . list Item Text , Ġlist Items ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġarray Adapter Ġ= ĠArray Adapter < String >( this , Ġandroid . R . layout . simple _ list _ item _ 1 , Ġlist Items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistView . adapter Ġ= Ġarray Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray Adapter . set Notify OnChange ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx view . setText ( current dir . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġif ( current dir != Environment . get External Storage Directory ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew current = File ( current dir . parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Dialog 1 ( ĠFile ( current dir . parent )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent dir = new current ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx view . setText ( current dir . absolute Path ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalert Dialog Ġ= ĠAlertDialog . Builder ( this ). create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app Config . get ( App Constant . KEY _ WORK ING _ DIR ). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog . setTitle (" Alert ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog . setMessage (" Please Ġselect Ġa Ġworking Ġdirectory Ġfirst ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog . set Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . BUTTON _ POSITIVE , Ġ" Ok ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġdialog , Ġwhich Ġ-> Ġdialog . dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog . setTitle (" Alert ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog . setMessage (" Do Ġyou Ġwant Ġto Ġexit ?") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog . set Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . BUTTON _ POSITIVE , Ġ" No ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġdialog , Ġwhich Ġ-> Ġdialog . dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog . set Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . BUTTON _ NEGATIVE , Ġ" Yes ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect Folder ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp Config . set ( App Constant . KEY _ WORK ING _ DIR , Ġcurrent dir . absolute Path ) ĊĠĠĠĠĠĠĠ Ġapp Config . set ( App Constant . KEY _ APPS _ DIR , Ġcurrent dir . absolute Path +"/ Migration / Apps ") ĊĠĠĠĠĠĠĠ Ġapp Config . set ( App Constant . KEY _ SENT ITM _ DIR , Ġcurrent dir . absolute Path +"/ Migration / Sent Items ") ĊĠĠĠĠĠĠĠ Ġapp Config . set ( App Constant . KEY _ RECE IVED _ DIR , Ġcurrent dir . absolute Path +"/ Migration / Recv d Items ") ĊĠĠĠĠĠĠĠ Ġcreate Folder ( current dir . absolute Path ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( application Context , ĠApp Management Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġcheck StatusCode And Res end ( statusCode : ĠLong ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġfun Ġcreate Folder ( path : String ){ ĊĠĠĠĠĠĠĠ Ġval Ġfolder 1 Ġ= ĠFile ( path Ġ+ Ġ"/ Migration / Apps ") ĊĠĠĠĠĠĠĠ Ġval Ġfolder 2 Ġ= ĠFile ( path Ġ+ Ġ"/ Migration / Sent Items ") ĊĠĠĠĠĠĠĠ Ġval Ġfolder 3 Ġ= ĠFile ( path Ġ+ Ġ"/ Migration / Recv d Items ") ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! folder 2 . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġfolder 2 . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! folder 1 . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġfolder 1 . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! folder 3 . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġfolder 3 . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġcreate Dir ( name : String ){ ĊĠĠĠĠĠĠĠ Ġif ( name != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfolder Ġ= ĠFile ( current dir . absolute Path + File . separator Ġ+ name Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! folder . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġfolder . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( success ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Dialog 1 ( current dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ fun Ġshow Alert With TextInput Layout ( view : ĠView ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Input Layout Ġ= ĠText Input Layout ( context ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠEditText ( context ) ĊĠĠĠĠĠĠĠ Ġtext Input Layout . hint Ġ= Ġ" Name " ĊĠĠĠĠĠĠĠ Ġtext Input Layout . addView ( input ) ĊĊĠĠĠĠĠĠĠ Ġval Ġalert Ġ= ĠAlertDialog . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Create ĠFolder ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( textInput Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Please ĠEnter ĠFolder ĠName ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Submit ") Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Dir ( input . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" Cancel ") Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. create () ĊĊĠĠĠĠĠĠĠ Ġalert . show () ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ