package Ġnet . g ote v . upload service . ftp Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Parcelable Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġnet . g ote v . upload service . Upload Request Ċ import Ġnet . g ote v . upload service . Upload Task Ċ import Ġnet . g ote v . upload service . data . Upload File Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġnew ĠFTP ĠUpload ĠRequest . Ċ Ġ* Ġ@ param Ġcontext Ġapplication Ġcontext Ċ Ġ* Ġ@ param Ġserver Url Ġserver ĠIP Ġaddress Ġor Ġhostname Ċ Ġ* Ġ@ param Ġport ĠFTP Ġport Ċ Ġ*/ Ċ class ĠFTP Upload Request ( context : ĠContext , Ġserver Url : ĠString , Ġport : ĠInt ) Ġ: ĊĠĠĠ ĠUpload Request < FTP Upload Request >( context , Ġserver Url ) Ġ{ ĊĠĠĠ Ġprotected Ġval Ġftp Params Ġ= ĠFTP Upload Task Parameters ( port ) ĊĊĠĠĠ Ġoverride Ġval Ġtask Class : ĠClass < out ĠUpload Task > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠFTP Upload Task :: class . java ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( port Ġ> Ġ 0 ) Ġ{ Ġ" Specify Ġvalid ĠFTP Ġport !" Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Additional Parameters (): ĠParcel able Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġftp Params ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġcredentials Ġused Ġto Ġlogin Ġon Ġthe ĠFTP ĠServer . ĊĠĠĠĠ Ġ* Ġ@ param Ġusername Ġaccount Ġusername ĊĠĠĠĠ Ġ* Ġ@ param Ġpassword Ġaccount Ġpassword ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ FTP Upload Request ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Username And Password ( username : ĠString , Ġpassword : ĠString ): ĠFTP Upload Request Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( username . isNotBlank ()) Ġ{ Ġ" Specify ĠFTP Ġaccount Ġusername !" Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( password . isNotBlank ()) Ġ{ Ġ" Specify ĠFTP Ġaccount Ġpassword !" Ġ} ĊĊĠĠĠĠĠĠĠ Ġftp Params . username Ġ= Ġusername ĊĠĠĠĠĠĠĠ Ġftp Params . password Ġ= Ġpassword ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa Ġfile Ġto Ġbe Ġuploaded . ĊĠĠĠĠ Ġ* Ġ@ param ĠfilePath Ġpath Ġto Ġthe Ġlocal Ġfile Ġon Ġthe Ġdevice ĊĠĠĠĠ Ġ* Ġ@ param Ġremote Path Ġif Ġnull , ĠThe Ġuploaded Ġfile Ġname Ġwill Ġbe Ġthe Ġsame Ġas Ġthe Ġlocal Ġfile Ġname , Ġso ĊĠĠĠĠ Ġ* Ġif Ġyou Ġare Ġuploading Ġ`/ path / to / my file . txt `, Ġyou Ġwill Ġhave Ġ` my file . txt ` ĊĠĠĠĠ Ġ* Ġinside Ġthe Ġdefault Ġremote Ġworking Ġdirectory . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġnot Ġnull , Ġit 's Ġthe Ġabsolute Ġpath Ġ( or Ġrelative Ġpath Ġto Ġthe Ġdefault Ġremote Ġworking Ġdirectory ) ĊĠĠĠĠ Ġ* Ġof Ġthe Ġfile Ġon Ġthe ĠFTP Ġserver . ĠValid Ġpaths Ġare Ġfor Ġexample : ĊĠĠĠĠ Ġ* Ġ`/ path / to / my file . txt `, Ġ` relative / path /` Ġor Ġ` my file . zip `. ĊĠĠĠĠ Ġ* ĠIf Ġany Ġof Ġthe Ġdirectories Ġof Ġthe Ġspecified Ġremote Ġpath Ġdoes Ġnot Ġexist , ĊĠĠĠĠ Ġ* Ġthey Ġwill Ġbe Ġautomatically Ġcreated . ĠYou Ġcan Ġalso Ġset Ġwith Ġwhich Ġpermissions ĊĠĠĠĠ Ġ* Ġto Ġcreate Ġthem Ġby Ġusing ĊĠĠĠĠ Ġ* Ġ[ FTP Upload Request . set Created Directories Permissions ] ĊĠĠĠĠ Ġ* Ġmethod . ĊĠĠĠĠ Ġ* Ġ< br ></ br >< br ></ br > ĊĠĠĠĠ Ġ* ĠRemember Ġthat Ġif Ġthe Ġremote Ġpath Ġends Ġwith Ġ`/ `, Ġthe Ġremote Ġfile Ġname ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġthe Ġsame Ġas Ġthe Ġlocal Ġfile , Ġso Ġfor Ġexample Ġif ĠI 'm Ġuploading ĊĠĠĠĠ Ġ* Ġ`/ home / alex / photos . zip ` Ġinto Ġ` images /` Ġremote Ġpath , ĠI Ġwill Ġhave ĊĠĠĠĠ Ġ* Ġ` photos . zip ` Ġinto Ġthe Ġremote Ġ` images /` Ġdirectory . ĊĠĠĠĠ Ġ* Ġ< br ></ br >< br ></ br > ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġremote Ġpath Ġdoes Ġnot Ġend Ġwith Ġ`/ `, Ġthe Ġlast Ġpath Ġsegment ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġused Ġas Ġthe Ġremote Ġfile Ġname , Ġso Ġfor Ġexample Ġif ĠI 'm Ġuploading ĊĠĠĠĠ Ġ* Ġ`/ home / alex / photos . zip ` Ġinto Ġ` images / vac ations . zip `, ĠI Ġwill ĊĠĠĠĠ Ġ* Ġhave Ġ` vac ations . zip ` Ġinto Ġthe Ġremote Ġ` images /` Ġdirectory . ĊĠĠĠĠ Ġ* Ġ@ param Ġpermissions ĠUNIX Ġpermissions Ġfor Ġthe Ġuploaded Ġfile ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ FTP Upload Request ] ĊĠĠĠĠ Ġ* Ġ@ throws ĠFileNotFoundException Ġif Ġthe Ġlocal Ġfile Ġdoes Ġnot Ġexist ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( FileNotFoundException :: class ) ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġadd File To Upload ( ĊĠĠĠĠĠĠĠ ĠfilePath : ĠString , ĊĠĠĠĠĠĠĠ Ġremote Path : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠUnix Permissions ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠFTP Upload Request Ġ{ ĊĠĠĠĠĠĠĠ Ġfiles . add ( Upload File ( filePath ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . remote Path Ġ= Ġif Ġ( remote Path . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( filePath ). name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . permissions Ġ= Ġpermissions ?. toString () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe ĠFTP Ġconnection Ġtimeout . ĊĠĠĠĠ Ġ* ĠThe Ġdefault Ġvalue Ġis Ġdefined Ġin Ġ[ FTP Upload Task Parameters . DEFAULT _ CONNECT _ TIMEOUT ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġmilliseconds Ġtimeout Ġin Ġmilliseconds ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ FTP Upload Request ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Connect Timeout ( milliseconds : ĠInt ): ĠFTP Upload Request Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( milliseconds Ġ>= Ġ 2 0 0 0 ) Ġ{ Ġ" Set Ġat Ġleast Ġ 2 0 0 0 ms Ġconnect Ġtimeout !" Ġ} ĊĊĠĠĠĠĠĠĠ Ġftp Params . connect Timeout Ġ= Ġmilliseconds ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets ĠFTP Ġsocket Ġtimeout . ĠThis Ġaffects Ġlogin , Ġlogout Ġand Ġchange Ġworking Ġdirectory Ġtimeout . ĊĠĠĠĠ Ġ* ĠThe Ġdefault Ġvalue Ġis Ġdefined Ġin Ġ[ FTP Upload Task Parameters . DEFAULT _ SOCKET _ TIMEOUT ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġmilliseconds Ġtimeout Ġin Ġmilliseconds ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ FTP Upload Request ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Socket Timeout ( milliseconds : ĠInt ): ĠFTP Upload Request Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( milliseconds Ġ>= Ġ 2 0 0 0 ) Ġ{ Ġ" Set Ġat Ġleast Ġ 2 0 0 0 ms Ġsocket Ġtimeout !" Ġ} ĊĊĠĠĠĠĠĠĠ Ġftp Params . socket Timeout Ġ= Ġmilliseconds ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġif Ġthe Ġcompressed Ġfile Ġtransfer Ġmode Ġshould Ġbe Ġused . ĠIf Ġyour Ġserver Ġsupports Ġit , Ġthis ĊĠĠĠĠ Ġ* Ġwill Ġallow Ġyou Ġto Ġuse Ġless Ġbandwidth Ġto Ġtransfer Ġfiles , Ġhowever Ġsome Ġadditional Ġprocessing ĊĠĠĠĠ Ġ* Ġhas Ġto Ġbe Ġmade Ġon Ġyour Ġdevice . ĠBy Ġdefault Ġcompressed Ġfile Ġtransfer Ġmode Ġis Ġdisabled Ġand Ġif ĊĠĠĠĠ Ġ* Ġenabled Ġit Ġworks Ġonly Ġif Ġit 's Ġboth Ġsupported Ġand Ġenabled Ġon Ġyour ĠFTP Ġserver . ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġtrue Ġto Ġenable Ġcompressed Ġfile Ġtransfer Ġmode , Ġfalse Ġto Ġdisable Ġit Ġand Ġuse Ġthe ĊĠĠĠĠ Ġ* Ġdefault Ġstreaming Ġmode ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ FTP Upload Request ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġuse Compressed File Transfer Mode ( value : ĠBoolean ): ĠFTP Upload Request Ġ{ ĊĠĠĠĠĠĠĠ Ġftp Params . compressed File Transfer Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe ĠUNIX Ġpermissions Ġto Ġset Ġto Ġnewly Ġcreated Ġdirectories Ġ( if Ġany ). ĠThis Ġmay Ġhappen Ġif ĊĠĠĠĠ Ġ* Ġyou Ġupload Ġfiles Ġto Ġdirectories Ġwhich Ġdoes Ġnot Ġexist Ġon Ġyour ĠFTP Ġserver . ĠThey Ġwill Ġbe ĊĠĠĠĠ Ġ* Ġautomatically Ġcreated . ĠIf Ġyou Ġnever Ġcall Ġthis Ġmethod , ĊĠĠĠĠ Ġ* Ġthe Ġdefault Ġpermissions Ġfor Ġnew Ġfolders Ġset Ġon Ġyour ĠFTP Ġserver Ġwill Ġbe Ġapplied . ĊĠĠĠĠ Ġ* Ġ@ param Ġpermissions ĠUNIX Ġpermissions Ġto Ġset Ġto Ġnewly Ġcreated Ġdirectories ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ FTP Upload Request ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Created Directories Permissions ( permissions : ĠUnix Permissions ): ĠFTP Upload Request Ġ{ ĊĠĠĠĠĠĠĠ Ġftp Params . created Directories Permissions Ġ= Ġpermissions . toString () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnables Ġor Ġdisables ĠFTP Ġover ĠSSL Ġprocessing Ġ( FTP S ). ĠBy Ġdefault ĠSSL Ġis Ġdisabled . ĊĠĠĠĠ Ġ* Ġ@ param Ġuse SSL Ġtrue Ġto Ġenable ĠSSL , Ġfalse Ġto Ġdisable Ġit ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ FTP Upload Request ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġuse SSL ( use SSL : ĠBoolean ): ĠFTP Upload Request Ġ{ ĊĠĠĠĠĠĠĠ Ġftp Params . use SSL Ġ= Ġuse SSL ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets ĠFTP S Ġsecurity Ġmode . ĠBy Ġdefault Ġthe Ġsecurity Ġmode Ġis Ġexplicit . ĠThis Ġflag Ġis Ġused ĊĠĠĠĠ Ġ* Ġonly Ġif Ġ[ FTP Upload Request . use SSL ] Ġis Ġset Ġto Ġtrue . ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ FTP S ĠSecurity Ġmodes ]( https :// en . wikipedia . org / wiki / FTP S . Methods _ of _ inv oking _ security ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġis Implicit Ġtrue Ġsets Ġsecurity Ġmode Ġto Ġimplicit , Ġfalse Ġsets Ġit Ġto Ġexplicit . ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ FTP Upload Request ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Security Mode Implicit ( is Implicit : ĠBoolean ): ĠFTP Upload Request Ġ{ ĊĠĠĠĠĠĠĠ Ġftp Params . implicit Security Ġ= Ġis Implicit ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġsecure Ġsocket Ġprotocol Ġto Ġuse Ġwhen Ġ[ FTP Upload Request . use SSL ] ĊĠĠĠĠ Ġ* Ġis Ġset Ġto Ġtrue . ĠThe Ġdefault Ġprotocol Ġis ĠTLS . ĠSupported Ġprotocols Ġare ĠSSL Ġand ĠTLS . ĊĠĠĠĠ Ġ* Ġ@ param Ġprotocol ĠTLS Ġor ĠSSL Ġ( TLS Ġis Ġthe Ġdefault ) ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ FTP Upload Request ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Secure Socket Protocol ( protocol : ĠString ): ĠFTP Upload Request Ġ{ ĊĠĠĠĠĠĠĠ Ġftp Params . secure Socket Protocol Ġ= Ġprotocol ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Upload (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( files . isNotEmpty ()) Ġ{ Ġ" Add Ġat Ġleast Ġone Ġfile Ġto Ġstart ĠFTP Ġupload !" Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . start Upload () ĊĠĠĠ Ġ} Ċ } Ċ