package Ġcom . zh ao . and roi dex plo re . rx java Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . trello . rx lifecycle 3 . Rx Lifecycle Ċ import Ġcom . trello . rx lifecycle 3 . android . lifecycle . kotlin . bind To Lifecycle Ċ import Ġcom . trello . rx lifecycle 3 . components . support . Rx Fragment Ċ import Ġcom . zh ao . and roi dex plo re . R Ċ import Ġcom . zh ao . and roi dex plo re . rx java . misc . click s Ċ import Ġcom . zh ao . and roi dex plo re . utils . FF Log Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Observer Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġkotlinx . android . synt hetic . main . fragment _ rx _ count _ down . click Btn Ċ import Ġkotlinx . android . synt hetic . main . fragment _ rx _ count _ down . timer Btn Ċ import Ġjava . util . concurrent . TimeUnit . MILLISECONDS Ċ import Ġjava . util . concurrent . TimeUnit . SECONDS Ċ Ċ class ĠCount Down Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġval ĠTAG Ġ= Ġ" Count Down Fragment " ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLayoutInflater . from ( context ). inflate ( R . layout . fragment _ rx _ count _ down , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Click () Ċ // ĠĠĠĠĠĠĠ Ġinit Count Down () ĊĠĠĠĠĠĠĠ Ġinit Count Down 2 () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĢĴ è®¡ æĹ¶ èİ·åıĸ éªĮè¯ģçłģ æĵįä½ľ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġfun Ġinit Count Down 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 1 0 L ĊĠĠĠĠĠĠĠ Ġtimer Btn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. click s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind To Lifecycle ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. throttle First ( 8 0 0 , ĠMIL LI SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . set BackgroundColor ( Color . parse Color ("# 8 0 3 9 c 6 c 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** æ¯ı éļĶ ä¸Ģ ç§Ĵ åıĳéĢģ ï¼Į 0 ãĢģ 1 ãĢģ 2 ãĢģ 3 ãĢĤãĢĤ ãĢĤ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . interval ( 0 , Ġ 1 , ĠSE CON DS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** åĨħéĥ¨ çļĦ äºĭä»¶ æµģ ä¹Ł éľĢè¦ģ ç»ĳå®ļ çĶŁåĳ½ åĳ¨æľŁ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind To Lifecycle ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** éľĢè¦ģ åľ¨ åĨħéĥ¨ Observable Ġ éĩĮ åıĳ å°Ħ Complete Ġ äºĭä»¶ ï¼Į éĺ² æŃ¢ Dispose ( éĶĢ æ¯ ģ ) æķ´ä¸ª æµģ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** åĨħéĥ¨ Observable æµģ ĠçļĦ Complete Ġ äºĭä»¶ ä¸įä¼ļ Dispose ( éĶĢ æ¯ ģ ) æķ´ä¸ª æµģ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( count Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFF Log . d ( TAG , Ġ" inner Ġmap Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Complete Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFF Log . d ( TAG , Ġ" do On Complete ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . text Ġ= Ġ" éĩįæĸ° èİ·åıĸ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . set BackgroundColor ( Color . parse Color ("# d 1 d 1 d 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** take Ġä¼ļ åıĳ å°Ħ complete äºĭä»¶ ï¼Į èĢĮ onComplete Ġ åĵįåºĶ çļĦ åĲĮæĹ¶ ä¹Ł ä¼ļ è°ĥçĶ¨ dispose ( éĶĢ æ¯ ģ ) æķ´ä¸ª æµģ */ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( count Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ- Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** è¿ĩæ»¤ æİī æľĢåĲİ ä¸Ģä¸ª 0 ï¼Į éĺ² æŃ¢ è°ĥçĶ¨ do On Complete Ġ ä¹ĭåĲİ åĨį æ¬¡ è°ĥçĶ¨ onNext Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ> Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠObserver < Long > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Subscribe ( d : ĠDis posable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFF Log . d ( TAG , Ġ" on Subscribe ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFF Log . d ( TAG , Ġ" onError Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFF Log . d ( TAG , Ġ" onComplete ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( t : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFF Log . d ( TAG , Ġ" onNext Ġ$ t ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . text Ġ= Ġ"$ t " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĢĴ è®¡ æĹ¶ æĵįä½ľ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġfun Ġinit Count Down () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 1 0 L ĊĠĠĠĠĠĠĠ Ġtimer Btn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. click s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind To Lifecycle ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. throttle First ( 8 0 0 , ĠMIL LI SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . set BackgroundColor ( Color . parse Color ("# 3 9 c 6 c 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** æ¯ı éļĶ ä¸Ģ ç§Ĵ åıĳéĢģ ï¼Į 0 ãĢģ 1 ãĢģ 2 ãĢģ 3 ãĢĤãĢĤ ãĢĤ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . interval ( 0 , Ġ 1 , ĠSE CON DS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind To Lifecycle ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** æľĢç»Ī ä¼ļ åıĳ å°Ħ complete äºĭä»¶ ï¼Į æĭ Ĩ æİī æķ´ä¸ª æµģ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( count Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ- Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠObserver < Long > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Subscribe ( d : ĠDis posable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFF Log . d ( TAG , Ġ" on Subscribe ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFF Log . d ( TAG , Ġ" onError ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFF Log . d ( TAG , Ġ" onComplete ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . text Ġ= Ġ" éĩįæĸ° èİ·åıĸ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . set BackgroundColor ( Color . parse Color ("# d 1 d 1 d 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( t : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFF Log . d ( TAG , Ġ" onNext Ġ$ t ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Btn . text Ġ= Ġ"$ t " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĤ¹åĩ» åİ» éĩį ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġfun Ġinit Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġclick Btn . click s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind To Lifecycle ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** è¿Ļä¸ª æĹ¶éĹ´ çªĹåı£ åĨħ çļĦ çĤ¹åĩ» åıªæľī ç¬¬ ä¸Ģæ¬¡ ä¼ļ æİ¨ éĢģ */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. throttle First ( 8 0 0 , ĠMIL LI SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFF Log . d ( TAG , Ġ" result == >> $ it ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }