package Ġdev . http . progress Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . System Clock Ċ Ċ // Ġ========== Ċ // Ġ= ĠæĽ´æĸ° è¿Ľ åº¦ Ġ= Ċ // Ġ========== Ċ Ċ /** Ċ Ġ* ĠæĽ´æĸ° è¿Ľ åº¦ ä¿¡æģ¯ å¹¶ è¿ĶåĽŀ æĺ¯åĲ¦ åħģè®¸ éĢļçŁ¥ Ċ Ġ* Ġ@ param Ġprogress Ġ è¿Ľ åº¦ ä¿¡æģ¯ åŃĺåĤ¨ ç±» Ċ Ġ* Ġ@ param Ġrefresh Time Ġ åĽŀè°ĥ åĪ·æĸ° æĹ¶éĹ´ Ġ( Ġæ¯ « ç§Ĵ Ġ) Ċ Ġ* Ġ@ param Ġwrite Size Ġ åĨĻåħ¥ æķ°æį® å¤§å°ı Ċ Ġ* Ġ@ return Ġ` true ` Ġyes , Ġ` false ` Ġno Ċ Ġ*/ Ċ internal Ġfun Ġchange Progress ( ĊĠĠĠ Ġprogress : ĠProgress , ĊĠĠĠ Ġrefresh Time : ĠLong , ĊĠĠĠ Ġwrite Size : ĠLong Ċ ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġchange Progress ( progress , Ġrefresh Time , Ġwrite Size , Ġprogress . getTotal Size ()) Ċ } Ċ Ċ /** Ċ Ġ* ĠæĽ´æĸ° è¿Ľ åº¦ ä¿¡æģ¯ å¹¶ è¿ĶåĽŀ æĺ¯åĲ¦ åħģè®¸ éĢļçŁ¥ Ċ Ġ* Ġ@ param Ġprogress Ġ è¿Ľ åº¦ ä¿¡æģ¯ åŃĺåĤ¨ ç±» Ċ Ġ* Ġ@ param Ġrefresh Time Ġ åĽŀè°ĥ åĪ·æĸ° æĹ¶éĹ´ Ġ( Ġæ¯ « ç§Ĵ Ġ) Ċ Ġ* Ġ@ param Ġwrite Size Ġ åĨĻåħ¥ æķ°æį® å¤§å°ı Ċ Ġ* Ġ@ param Ġtotal Size Ġæķ°æį® æĢ» éķ¿åº¦ Ċ Ġ* Ġ@ return Ġ` true ` Ġyes , Ġ` false ` Ġno Ċ Ġ*/ Ċ internal Ġfun Ġchange Progress ( ĊĠĠĠ Ġprogress : ĠProgress , ĊĠĠĠ Ġrefresh Time : ĠLong , ĊĠĠĠ Ġwrite Size : ĠLong , ĊĠĠĠ Ġtotal Size : ĠLong Ċ ): ĠBoolean Ġ{ ĊĠĠĠ Ġprogress . set Total Size ( total Size ) ĊĠĠĠĠĠĠĠ Ġ. setCurrent Size ( progress . getCurrent Size () Ġ+ Ġwrite Size ) ĊĠĠĠĠĠĠĠ Ġ. set Last Size ( progress . getLast Size () Ġ+ Ġwrite Size ) ĊĊĠĠĠ Ġval ĠcurrentTime Ġ= ĠSystem Clock . elapsed Realtime () ĊĠĠĠ Ġvar Ġdiff Time Ġ= ĠcurrentTime Ġ- Ġprogress . getLast Refresh Time () ĊĠĠĠ Ġ// ĠåĪ¤æĸŃ å½ĵåīį æĹ¶éĹ´ Ġ- Ġ æľĢè¿ĳ ä¸Ģæ¬¡ åĪ·æĸ° æĹ¶éĹ´ æĺ¯åĲ¦ è¶ħè¿ĩ åĽŀè°ĥ éĹ´ éļĶ æĹ¶éĹ´ ĊĠĠĠ Ġval Ġis Notify Ġ= Ġ( diff Time Ġ>= Ġrefresh Time ) ĊĠĠĠ Ġval Ġis Finish Ġ= Ġ( progress . getCurrent Size () Ġ== Ġtotal Size ) ĊĠĠĠ Ġif Ġ( is Notify Ġ|| Ġis Finish ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( diff Time Ġ== Ġ 0 L ) Ġdiff Time Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġval Ġlast Size Ġ= Ġprogress . getLast Size () ĊĠĠĠĠĠĠĠ Ġ// Ġ åŃĺåĤ¨ ç½ĳ éĢŁ ä¿¡æģ¯ å¹¶ åĪ·æĸ° ç½ĳ éĢŁ ä¿¡æģ¯ Ġbyte / s ĊĠĠĠĠĠĠĠ Ġprogress . get Speed (). buffer Speed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Size Ġ* Ġ 1 0 0 0 L Ġ/ Ġdiff Time ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġprogress . set Last Size ( 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Last Refresh Time ( currentTime ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse Ċ } Ċ Ċ // Ġ========== Ċ // Ġ= Ġ äºĭä»¶ éĢļçŁ¥ Ġ= Ċ // Ġ========== Ċ Ċ /** Ċ Ġ* Ġ åĽŀè°ĥ æĸ¹æ³ķ Ċ Ġ* Ġ@ param Ġnotify Status Ġ éĢļçŁ¥ çĬ¶æĢģ Ċ Ġ* Ġ@ param Ġcallback Ġ ä¸Ĭä¼ł ãĢģ ä¸ĭè½½ åĽŀè°ĥ æİ¥åı£ Ċ Ġ* Ġ@ param Ġhandler Ġ åĽŀè°ĥ ĠUI Ġ çº¿ç¨ĭ éĢļçŁ¥ Ċ Ġ*/ Ċ private Ġfun ĠProgress . callback ( ĊĠĠĠ Ġnotify Status : ĠInt , ĊĠĠĠ Ġcallback : ĠProgress . Callback ?, ĊĠĠĠ Ġhandler : ĠHandler ? Ċ ) Ġ{ ĊĠĠĠ Ġ// Ġ åĩĨå¤ĩ éĢļçŁ¥ çĬ¶æĢģ ä¸İ å½ĵåīį çĬ¶æĢģ çĽ¸åĲĮ æīį è§¦åıĳ åĽŀè°ĥ , Ġ éĺ² æŃ¢ å¤ļ æ¬¡ è§¦åıĳ å½ĵåīį çĬ¶æĢģ åĽŀè°ĥ ĊĠĠĠ Ġif Ġ( notify Status Ġ== ĠgetStatus ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallback ?. let Ġ{ Ġit Callback Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler ?. post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Callback ( notify Status , Ġit Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġinner Callback ( notify Status , Ġit Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ åĽŀè°ĥ æĸ¹æ³ķ Ċ Ġ* Ġ@ param Ġstatus ĠProgress Ġå½ĵåīį çĬ¶æĢģ Ċ Ġ* Ġ@ param Ġcallback Ġ ä¸Ĭä¼ł ãĢģ ä¸ĭè½½ åĽŀè°ĥ æİ¥åı£ Ċ Ġ* Ġstatus Ġä¸į éĢļè¿ĩ Ġ[ Progress . getStatus ] Ġèİ·åıĸ , Ġ èĢĮ æĺ¯ éĢļè¿ĩ ä¼ł åıĤ åĪ¤æĸŃ Ċ Ġ* Ġæĺ¯ éĺ² æŃ¢ çº¿ç¨ĭ è§¦åıĳ åĽŀè°ĥ ä¸Ń è¿Ľè¡Į æĽ´æĸ° çĬ¶æĢģ , Ġ å¯¼èĩ´ è·³ è¿ĩ ĠSTART Ġ åĽŀè°ĥ Ċ Ġ*/ Ċ private Ġfun ĠProgress . inner Callback ( ĊĠĠĠ Ġstatus : ĠInt , ĊĠĠĠ Ġcallback : ĠProgress . Callback Ċ ) Ġ{ ĊĠĠĠ Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress . START Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onStart ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠProgress . ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Progress ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠProgress . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on End ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠProgress . FIN ISH Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Finish ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on End ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġ= ============== Ċ // Ġ= ĠæĽ´æĸ° çĬ¶æĢģ å¹¶ éĢļçŁ¥ Ġ= Ċ // Ġ= ============== Ċ Ċ /** Ċ Ġ* Ġè®¾ç½® ä¸º Ġ[ Progress . START ] Ġ çĬ¶æĢģ å¹¶ä¸Ķ è¿Ľè¡Į éĢļçŁ¥ Ċ Ġ* Ġ@ param Ġcallback Ġ ä¸Ĭä¼ł ãĢģ ä¸ĭè½½ åĽŀè°ĥ æİ¥åı£ Ċ Ġ* Ġ@ param Ġhandler Ġ Ġ åĽŀè°ĥ ĠUI Ġ çº¿ç¨ĭ éĢļçŁ¥ Ġ( Ġå¦Ĥæŀľ ä¸º Ġnull Ġ åĪĻ ä¼ļ éĿŀ ĠUI Ġ çº¿ç¨ĭ éĢļçŁ¥ Ġ) Ċ Ġ*/ Ċ internal Ġfun ĠProgress . to Start And Callback ( ĊĠĠĠ Ġcallback : ĠProgress . Callback ?, ĊĠĠĠ Ġhandler : ĠHandler ? Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( to Start ()) Ġcallback ( Progress . START , Ġcallback , Ġhandler ) Ċ } Ċ Ċ /** Ċ Ġ* Ġè®¾ç½® ä¸º Ġ[ Progress . ING ] Ġ çĬ¶æĢģ å¹¶ä¸Ķ è¿Ľè¡Į éĢļçŁ¥ Ċ Ġ* Ġ@ param Ġcallback Ġ ä¸Ĭä¼ł ãĢģ ä¸ĭè½½ åĽŀè°ĥ æİ¥åı£ Ċ Ġ* Ġ@ param Ġhandler Ġ Ġ åĽŀè°ĥ ĠUI Ġ çº¿ç¨ĭ éĢļçŁ¥ Ġ( Ġå¦Ĥæŀľ ä¸º Ġnull Ġ åĪĻ ä¼ļ éĿŀ ĠUI Ġ çº¿ç¨ĭ éĢļçŁ¥ Ġ) Ċ Ġ*/ Ċ internal Ġfun ĠProgress . to Ing And Callback ( ĊĠĠĠ Ġcallback : ĠProgress . Callback ?, ĊĠĠĠ Ġhandler : ĠHandler ? Ċ ) Ġ{ ĊĠĠĠ Ġto Ing () ĊĠĠĠ Ġcallback ( Progress . ING , Ġcallback , Ġhandler ) Ċ } Ċ Ċ /** Ċ Ġ* Ġè®¾ç½® ä¸º Ġ[ Progress . ERROR ] Ġ çĬ¶æĢģ å¹¶ä¸Ķ è¿Ľè¡Į éĢļçŁ¥ Ċ Ġ* Ġ@ param Ġexception Ġ è¿Ľ åº¦ å¼Ĥå¸¸ ä¿¡æģ¯ Ċ Ġ* Ġ@ param Ġcallback Ġ Ġ ä¸Ĭä¼ł ãĢģ ä¸ĭè½½ åĽŀè°ĥ æİ¥åı£ Ċ Ġ* Ġ@ param Ġhandler ĠĠ Ġ åĽŀè°ĥ ĠUI Ġ çº¿ç¨ĭ éĢļçŁ¥ Ġ( Ġå¦Ĥæŀľ ä¸º Ġnull Ġ åĪĻ ä¼ļ éĿŀ ĠUI Ġ çº¿ç¨ĭ éĢļçŁ¥ Ġ) Ċ Ġ*/ Ċ internal Ġfun ĠProgress . to Error And Callback ( ĊĠĠĠ Ġexception : ĠThrowable , ĊĠĠĠ Ġcallback : ĠProgress . Callback ?, ĊĠĠĠ Ġhandler : ĠHandler ? Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( to Error ( exception )) Ġcallback ( Progress . ERROR , Ġcallback , Ġhandler ) Ċ } Ċ Ċ /** Ċ Ġ* Ġè®¾ç½® ä¸º Ġ[ Progress . FIN ISH ] Ġ çĬ¶æĢģ å¹¶ä¸Ķ è¿Ľè¡Į éĢļçŁ¥ Ċ Ġ* Ġ@ param Ġcallback Ġ ä¸Ĭä¼ł ãĢģ ä¸ĭè½½ åĽŀè°ĥ æİ¥åı£ Ċ Ġ* Ġ@ param Ġhandler Ġ Ġ åĽŀè°ĥ ĠUI Ġ çº¿ç¨ĭ éĢļçŁ¥ Ġ( Ġå¦Ĥæŀľ ä¸º Ġnull Ġ åĪĻ ä¼ļ éĿŀ ĠUI Ġ çº¿ç¨ĭ éĢļçŁ¥ Ġ) Ċ Ġ*/ Ċ internal Ġfun ĠProgress . to Finish And Callback ( ĊĠĠĠ Ġcallback : ĠProgress . Callback ?, ĊĠĠĠ Ġhandler : ĠHandler ? Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( to Finish ()) Ġcallback ( Progress . FIN ISH , Ġcallback , Ġhandler ) Ċ } Ċ Ċ // Ġ= ============ Ċ // Ġ= Ġæµ ģ å¼ı æĽ´æĸ° çĬ¶æĢģ Ġ= Ċ // Ġ= ============ Ċ Ċ /** Ċ Ġ* Ġè®¾ç½® ä¸º Ġ[ Progress . ING ] Ġ çĬ¶æĢģ Ċ Ġ* Ġ@ return ĠProgress Ċ Ġ*/ Ċ internal Ġfun ĠProgress . flow Ing (): ĠProgress Ġ{ ĊĠĠĠ Ġto Ing () ĊĠĠĠ Ġreturn Ġthis Ċ }