package Ġmobile . agent platform Ċ Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . AsyncTask Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AlertDialog Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġkotlinx . android . synt hetic . main . activity _ action _ send _ zip .* Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . File Ċ Ċ class ĠAction Send Zip Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfile Manager : ĠFile Manager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapp Config : ĠApp Config ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuri : ĠUri ĊĠĠĠ Ġprivate Ġvar Ġpackage Json : ĠJSONObject ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġzip Entries : ĠMutable List < String >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġzip Entries Node Modules : ĠMutable List < String >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġextract Package AsyncTask : ĠExtract Package AsyncTask ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠappName : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġzip Root Dir Name : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ action _ send _ zip ) ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. setTitle ( R . string . title _ action _ send _ zip _ activity ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġuri Ġ= Ġif Ġ( intent . action Ġ== ĠIntent . ACTION _ VIEW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . data ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . get Parcelable Extra ( Intent . EXTRA _ STREAM ) Ġas ĠUri ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfile Manager Ġ= ĠFile Manager ( application Context ) ĊĠĠĠĠĠĠĠ Ġapp Config Ġ= ĠApp Config ( application Context ) ĊĊĠĠĠĠĠĠĠ ĠCheck Package Json AsyncTask (). execute () ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress App Details . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġtxt App Detail . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġcard Executable . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġprogress Executable . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġtxt Executable . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbtn Extract . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbtn Open . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbtn Cancel . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġedit Txt AppName . isEnabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġzip Root Dir Name Ġ= Ġfile Manager . get Zip Root Dir Name ( uri ) ĊĠĠĠĠĠĠĠ Ġif Ġ( zip Root Dir Name !!. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Txt AppName . setText ( zip Root Dir Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) ĊĊĠĠĠĠĠĠĠ Ġuri Ġ= Ġif Ġ( intent ?. action Ġ== ĠIntent . ACTION _ VIEW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . data ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent ?. get Parcelable Extra ( Intent . EXTRA _ STREAM ) Ġas ĠUri ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠCheck Package Json AsyncTask (). execute () ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item !!. itemId Ġ== Ġandroid . R . id . home ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset App Details () Ġ{ ĊĠĠĠĠĠĠĠ Ġtxt App Detail . text Ġ= Ġresources . getString ( R . string . name _ app _ detail ) Ġ+ ĠgetString (" name ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . version _ app _ detail ) Ġ+ ĠgetString (" version ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . description _ app _ detail ) Ġ+ ĠgetString (" description ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . author _ app _ detail ) Ġ+ ĠgetString (" author ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . license _ app _ detail ) Ġ+ ĠgetString (" license ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetString ( name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstr Ġ= Ġpackage Json ?. getString ( name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( str Ġ== Ġnull Ġ|| Ġstr Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr Ġ= Ġ"~ " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġstr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextract ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Txt AppName . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbtn Extract . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġextract Package AsyncTask Ġ= ĠExtract Package AsyncTask () ĊĠĠĠĠĠĠĠ Ġextract Package AsyncTask ?. execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog Ġ= ĠAlertDialog . Builder ( this ). create () ĊĠĠĠĠĠĠĠ Ġalert Dialog . setTitle (" Do Ġyou Ġwant Ġcancel Ġthe Ġextraction ?") ĊĠĠĠĠĠĠĠ Ġ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 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Package AsyncTask ?. cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( application Context , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġalert Dialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġagent Manager Ġ= ĠAgent Manager ( application Context ) ĊĠĠĠĠĠĠĠ Ġval Ġapps Dir Ġ= Ġapp Config . get ( App Constant . KEY _ APPS _ DIR ) ĊĠĠĠĠĠĠĠ Ġval Ġapp Dir Ġ= ĠFile ( apps Dir , ĠappName ) ĊĊĠĠĠĠĠĠĠ Ġagent Manager . open App ( app Dir ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠCheck Package Json AsyncTask Ġ: ĠAsync Task < String , ĠInt , ĠJSONObject >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo In Background ( var arg Ġargv : ĠString ): ĠJSONObject ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfile Manager . scan Package Json ( uri ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Update ( var arg Ġvalues : ĠInt ?) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Execute ( app Package Json : ĠJSONObject ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress App Details . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxt App Detail . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app Package Json Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCheck Pr erequisites AsyncTask (). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Executable . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Json Ġ= Ġapp Package Json ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset App Details () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt App Detail . text Ġ= Ġresources . getString ( R . string . in compatible _ package _ app _ detail ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠCheck Pr erequisites AsyncTask Ġ: ĠAsync Task < String , ĠInt , ĠBoolean >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo In Background ( var arg Ġargv : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġfile Manager . get Zip Entries ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Entries Ġ= Ġentries ?. a ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Entries Node Modules Ġ= Ġentries ?. b ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAgent Rules . check Required Files ( zip Entries !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Update ( var arg Ġvalues : ĠInt ?) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Execute ( success : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Executable . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Extract . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Executable . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Executable . text Ġ= Ġresources . getString ( R . string . not _ executable _ app _ detail ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠExtract Package AsyncTask Ġ: ĠAsync Task < String , ĠInt , ĠBoolean >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pre Execute () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Pre Execute () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar Extract . max Ġ= Ġzip Entries !!. size Ġ+ Ġzip Entries Node Modules !!. size ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar Extract . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠappName Ġ= Ġedit Txt AppName . text . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo In Background ( var arg Ġargv : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapps Dir Ġ= Ġapp Config . get ( App Constant . KEY _ APPS _ DIR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Directory Ġ= ĠFile ( apps Dir ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfile Manager . unzip By Intent ( uri , Ġtarget Directory , ĠappName , Ġzip Root Dir Name , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMake Ġ` publish Progress ` Ġpublic ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġpublish Progress CallBack ( var arg Ġvalues : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . publish Progress (* values ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Update ( var arg Ġvalues : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar Extract . progress Ġ= Ġvalues [ 0 ] !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Execute ( success : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar Extract . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Cancel . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Open . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Executable . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Executable . text Ġ= Ġresources . getString ( R . string . extraction _ failed _ app _ detail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Extract . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Txt AppName . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ