package Ġio . github . chen fe i 0 9 2 8 . util Ċ Ċ import Ġandroid . os . System Clock Ċ import Ġandroidx . annotation . Int Range Ċ import Ġio . github . chen fe i 0 9 2 8 . collection . sum By Long Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ ç§Ĵ è¡¨ ï¼Į æıĲä¾Ľ æģ ¢å¤į è®¡ æĹ¶ ãĢģ æļĤ åģľ è®¡ æĹ¶ ãĢģ èİ·åıĸ å½ĵåīį è®¡ æĹ¶ æĹ¶éĹ´ Ċ Ġ* ĠCreated Ġby ĠMr F eng Ġon Ġ 2 0 1 8 / 5 / 8 . Ċ Ġ*/ Ċ class ĠStop watch Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdata : ĠMutable List < Node > Ġ= ĠLinkedList () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¼Ģå§ĭ ãĢģ æģ ¢å¤į è®¡ æĹ¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġstart (@ Int Range ( from Ġ= Ġ 0 ) Ġtime : ĠLong Ġ= ĠSystem Clock . uptime Millis ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . add ( Node ( time )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ ļ Ĥ åģľ è®¡ æĹ¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġstop (@ Int Range ( from Ġ= Ġ 0 ) Ġtime : ĠLong Ġ= ĠSystem Clock . uptime Millis ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġdata . last () ĊĠĠĠĠĠĠĠ Ġif Ġ( last . end Ġ== Ġ- 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast . end Ġ= Ġtime ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æķ´ çĲĨ è®°å½ķ åĪ°çļĦ æĴŃæĶ¾ åĮº éĹ´ æķ°æį® ï¼Į ä»¥ æ¸ħ çĲĨ ç©º åĮº éĹ´ ãĢģ æĹł æķĪ æķ°æį® ï¼Į åıª ä¿ĿçķĻ æľīæķĪ åĮº éĹ´ ä¸İ æľª è®°å½ķ å®ĮæĪĲ çļĦ ãĢĤ ĊĠĠĠĠ Ġ* Ġ å¹¶ å°Ĩ å®Įåħ¨ éĩįå¤į åĮº éĹ´ ãĢģ éĥ¨åĪĨ éĩįå¤į åĮº éĹ´ åĲĪå¹¶ åĲİ è¿ĶåĽŀ ï¼Ī ä¸į åĮħæĭ¬ æľª è®°å½ķ å®ĮæĪĲ çļĦ ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġtrim (): ĠList < Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġæ¸ ħ çĲĨ ç©º åĮº éĹ´ çļĦæķ°æį® ï¼Ī å¼Ģå§ĭ æĹ¶éĹ´ çŃīäºİ ç»ĵæĿŁ æĹ¶éĹ´ ï¼ī ãĢģ æĹł æķĪ æķ°æį® ï¼Ī å¼Ģå§ĭ æĹ¶éĹ´ å¤§äºİ ç»ĵæĿŁ æĹ¶éĹ´ ï¼īï¼Į å¹¶ ä¿ĿçķĻ æľª è®°å½ķ å®ĮæĪĲ çļĦæķ°æį® ï¼Ī æĹł ç»ĵæĿŁ æĹ¶éĹ´ ï¼ī ĊĠĠĠĠĠĠĠ Ġdata . removeAll Ġ{ Ġit . start Ġ>= Ġit . end Ġ&& Ġit . end Ġ> Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ åĪ° æīĢæľī æľīæķĪ æķ°æį® ĊĠĠĠĠĠĠĠ Ġval Ġavailable Ġ= Ġdata . take While Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . end Ġ>= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġavailable . sort () ĊĊĠĠĠĠĠĠĠ Ġ// Ġæ¸ ħ çĲĨ ãĢģ åĲĪå¹¶ éĩįå¤į èĬĤçĤ¹ èĮĥåĽ´ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġavailable . size Ġ- Ġ 2 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġavailable [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode 1 Ġ= Ġavailable [ i Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪ¤æĸŃ ä¸ĭ ä¸Ģ èĬĤçĤ¹ èµ· æŃ¢ èĮĥåĽ´ ä¸İ å½ĵåīį èĬĤçĤ¹ çļĦ èµ· æŃ¢ èĮĥåĽ´ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node 1 . start Ġin Ġnode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä¸ĭ ä¸Ģ èĬĤçĤ¹ ç»ĵæĿŁ ä½įç½® åľ¨ å½ĵåīį èĬĤçĤ¹ çļĦ èĮĥåĽ´ å¤ĸ ï¼Į åĲĪå¹¶ è¿Ļ ä¸¤ä¸ª èĬĤçĤ¹ åĨį ç§»éĻ¤ ä¸ĭ ä¸Ģ èĬĤçĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĲ¦åĪĻ å½ĵåīį èĬĤçĤ¹ å®Įåħ¨ åĮħåĲ« ä¸ĭ ä¸Ģ èĬĤçĤ¹ ï¼Į çĽ´æİ¥ ç§»éĻ¤ ä¸ĭ ä¸Ģ èĬĤçĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node 1 . end Ġ! in Ġnode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . end Ġ= Ġnode 1 . end ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable . remove ( node 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . remove ( node 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġavailable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ å½ĵåīį è®¡ æĹ¶ æĹ¶éĹ´ åĴĮ æĴŃæĶ¾ èĮĥåĽ´ ï¼Į ä¸į åĮħæĭ¬ æľª è®°å½ķ å®ĮæĪĲ çļĦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Duration And Range (): ĠPair < Long , ĠList < Node >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġavailable Ġ= Ġtrim () ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġavailable . sum By Long Ġ{ Ġit . end Ġ- Ġit . start Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( duration , Ġavailable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå½ĵ ä¸Ģ ç»Ħ è®¡ æĹ¶ è¢« ä¸Ĭä¼ł ï¼Į ç§»éĻ¤ å®ĥä»¬ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġon Upload Duration ( duration : ĠList < Node >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . removeAll ( duration ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ æ²¡æľī åľ¨ è®¡ æĹ¶ ä¸Ń ï¼Į å¹¶ä¸Ķ è®¡ æĹ¶ å·² æ¸ħ ç©º ï¼Į åĪĻ è®¤ä¸º æĺ¯ éĹ ² ç½® ä¸ŃçļĦ è®¡ æĹ¶ åĻ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Idle (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtrim () ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Stop watch ( data =$ data )" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠNode ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstart : ĠLong , ĊĠĠĠĠĠĠĠ Ġvar Ġend : ĠLong Ġ= Ġ- 1 ĊĠĠĠ Ġ) Ġ: ĠComparable < Node >, ĠClosed Range < Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠNode ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstart . compareTo ( other . start ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġend Inclusive : ĠLong Ġ= Ġend ĊĠĠĠ Ġ} Ċ } Ċ