package Ġvn . hun gh d . flutter downloader Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroidx . work .* Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ private Ġfun ĠMethod Channel . Result . success () Ġ= Ġsuccess ( null ) Ċ Ċ class ĠFlutter Downloader Call Handler ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcallback Handle : ĠLong Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfun Ġget CallBack Handler (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcallback Handle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdb Helper : ĠTask Db Helper Ġ= ĠTask Db Helper . getInstance ( context ) ĊĠĠĠ Ġprivate Ġval Ġtask Dao : ĠTask Dao ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdownload Worker Manager : ĠDownload Worker Manager ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . task Dao Ġ= ĠTask Dao ( db Helper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( call . method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" initialize " Ġ-> Ġinitialize ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" register Callback " Ġ-> Ġregister Callback ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" enqueue " Ġ-> Ġenqueue ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" load Tasks " Ġ-> Ġload Tasks ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" load Tasks With Raw Query " Ġ-> Ġload Tasks With Raw Query ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cancel " Ġ-> Ġcancel ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cancel All " Ġ-> Ġcancel All ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" pause " Ġ-> Ġpause ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" resume " Ġ-> Ġresume ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" retry " Ġ-> Ġretry ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" open " Ġ-> Ġopen ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" remove " Ġ-> Ġremove ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġresult . not Implemented () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġcall . arguments Ġas ĠList < *> ĊĠĠĠĠĠĠĠ Ġval Ġcallback Handle Ġ= Ġargs [ 0 ]. toString (). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġdebug Mode Ġ= Ġargs [ 1 ]. toString (). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġshow All Completed Notification Ġ= Ġjava . lang . Boolean . parse Boolean ( args [ 2 ]. toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġpref : ĠSharedPreferences Ġ= Ġcontext . get SharedPreferences ( Flutter Downloader Plugin . SHARED _ PREFER ENCES _ KEY , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġpref . edit (). put Long ( Flutter Downloader Plugin . CALLBACK _ DISPATCH ER _ HANDLE _ KEY , Ġcallback Handle ). apply () ĊĠĠĠĠĠĠĠ Ġdownload Worker Manager Ġ= ĠDownload Worker Manager ( context , Ġtask Dao , Ġdebug Mode Ġ== Ġ 1 , Ġshow All Completed Notification ) ĊĠĠĠĠĠĠĠ Ġresult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister Callback ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġcall . arguments Ġas ĠList < *> ĊĠĠĠĠĠĠĠ Ġcallback Handle Ġ= Ġargs [ 0 ]. toString (). to Long () ĊĠĠĠĠĠĠĠ Ġresult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenqueue ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġcall . argument < String >(" title ") ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġcall . argument < String >(" url "). toString () ĊĠĠĠĠĠĠĠ Ġval Ġsaved Dir Ġ= Ġcall . argument < String >(" saved _ dir "). toString () ĊĠĠĠĠĠĠĠ Ġval Ġfilename Ġ= Ġcall . argument < String >(" file _ name ") ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġcall . argument < String >(" headers ") ĊĠĠĠĠĠĠĠ Ġval Ġshow File Progress Notification Ġ= Ġcall . argument < Boolean >( Download Worker . SHOW _ FILE _ PROGRESS _ NOTIFICATION ) !! ĊĠĠĠĠĠĠĠ Ġval Ġopen File From Notification Ġ= Ġcall . argument < Boolean >(" open _ file _ from _ notification ") !! ĊĠĠĠĠĠĠĠ Ġval Ġrequires Storage Not Low Ġ= Ġcall . argument < Boolean >(" requires _ storage _ not _ low ") !! ĊĊĠĠĠĠĠĠĠ Ġval ĠtaskId Ġ= Ġdownload Worker Manager . enqueue ( url , Ġsaved Dir , Ġtitle , Ġfilename , Ġheaders , Ġshow File Progress Notification , Ġopen File From Notification , Ġis Resume Ġ= Ġfalse , Ġrequires Storage Not Low ) ĊĠĠĠĠĠĠĠ Ġresult . success ( taskId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Tasks ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtasks : ĠList < Download Task > Ġ= Ġtask Dao . load All Tasks () ĊĠĠĠĠĠĠĠ Ġval Ġarray : ĠMutable List < Map < String , ĠAny ? >> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( task Ġin Ġtasks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem : ĠMutable Map < String , ĠAny ?> Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" task _ id "] Ġ= Ġtask . taskId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" status "] Ġ= Ġtask . status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" progress "] Ġ= Ġtask . progress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" title "] Ġ= Ġtask . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" url "] Ġ= Ġtask . url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" file _ name "] Ġ= Ġtask . filename ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" saved _ dir "] Ġ= Ġtask . saved Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" time _ created "] Ġ= Ġtask . time Created ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray . add ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult . success ( array ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Tasks With Raw Query ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġcall . argument < String >(" query ") ĊĠĠĠĠĠĠĠ Ġval Ġtasks : ĠList < Download Task > Ġ= Ġtask Dao . load Tasks With Raw Query ( query ) ĊĠĠĠĠĠĠĠ Ġval Ġarray : ĠMutable List < Map < String , ĠAny >> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( task Ġin Ġtasks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem : ĠMutable Map < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" task _ id "] Ġ= Ġtask . taskId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" status "] Ġ= Ġtask . status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" progress "] Ġ= Ġtask . progress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" title "] Ġ= Ġtask . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" url "] Ġ= Ġtask . url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" file _ name "] Ġ= Ġtask . filename ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" saved _ dir "] Ġ= Ġtask . saved Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem [" time _ created "] Ġ= Ġtask . time Created ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray . add ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult . success ( array ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcancel ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠtaskId Ġ= Ġcall . argument < String >(" task _ id "). toString () ĊĠĠĠĠĠĠĠ Ġdownload Worker Manager . cancel ( taskId ) ĊĠĠĠĠĠĠĠ Ġresult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcancel All ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdownload Worker Manager . cancel All () ĊĠĠĠĠĠĠĠ Ġresult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpause ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġtake Ġfrom Ġthe Ġold Ġjava Ġcode Ġand Ġrefactor , ĠI Ġdo Ġnot Ġneed Ġthis Ġnow ĊĠĠĠĠĠĠĠ Ġresult . not Implemented () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresume ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġtake Ġfrom Ġthe Ġold Ġjava Ġcode Ġand Ġrefactor , ĠI Ġdo Ġnot Ġneed Ġthis Ġnow ĊĠĠĠĠĠĠĠ Ġresult . not Implemented () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġretry ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġtake Ġfrom Ġthe Ġold Ġjava Ġcode Ġand Ġrefactor , ĠI Ġdo Ġnot Ġneed Ġthis Ġnow ĊĠĠĠĠĠĠĠ Ġresult . not Implemented () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġtake Ġfrom Ġthe Ġold Ġjava Ġcode Ġand Ġrefactor , ĠI Ġdo Ġnot Ġneed Ġthis Ġnow ĊĠĠĠĠĠĠĠ Ġresult . not Implemented () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠtaskId Ġ= Ġcall . argument < String >(" task _ id "). toString () ĊĠĠĠĠĠĠĠ Ġval Ġshould Delete Content Ġ= Ġcall . argument < Boolean >(" should _ delete _ content ") !! ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġdownload Worker Manager . remove ( taskId , Ġshould Delete Content ) ĊĠĠĠĠĠĠĠ Ġif Ġ( res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error (" invalid _ task _ id ", Ġ" not Ġfound Ġtask Ġcorresponding Ġto Ġgiven Ġtask Ġid ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }