package Ġcom . mot ondon . rx java demo app . view . operators Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . ActionBar Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ Ċ import Ġcom . mot ondon . rx java demo app . R Ċ import Ġcom . mot ondon . rx java demo app . view . base . Base Activity Ċ Ċ import Ġjava . util . Random Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ import Ġkotlinx . android . synt hetic . main . activity _ operators _ timeout _ example .* Ċ import Ġrx . Observable Ċ import Ġrx . Scheduler Ċ import Ġrx . Subscription Ċ import Ġrx . android . schedul ers . Android Schedulers Ċ Ċ class ĠTimeout Example Activity Ġ: ĠBase Activity () Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġa Ġbonus Ġexample . ĠIf Ġsource Ġtakes Ġlonger Ġthan Ġ 5 0 0 ms Ġto Ġemit Ġitems , Ġa Ġtimeout Ġwill Ġbe Ġthrown Ġand Ġretry When Ġwill Ġdelay Ġ 5 Ġseconds Ġprior Ġto Ġemit . ĠIt Ġsource Ġthrows Ġerror Ġfor ĊĠĠĠĠ Ġ* Ġthree Ġtimes , Ġretry When Ġwill Ġemit Ġan Ġerror Ġand Ġthe Ġwhole Ġchain Ġwill Ġfinish ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġattempt Count Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ operators _ timeout _ example ) ĊĊĠĠĠĠĠĠĠ Ġbtn StartTime tout Operator Test . setOnClickListener { ĠonStart Timeout Test Button Click () Ġ} ĊĠĠĠĠĠĠĠ Ġbtn StartTime tout Operator With Second Observable Test . setOnClickListener { ĠonStart Timeout With Second Observable Test Button Click () Ġ} ĊĠĠĠĠĠĠĠ Ġbtn StartTime tout Operator With Function Test . setOnClickListener { ĠonStart Timeout With Function Test Button Click () Ġ} ĊĠĠĠĠĠĠĠ Ġbtn StartTime tout Operator With Function And Second Observable Test . setOnClickListener { ĠonStart Timeout With Function And Second Observable Test Button Click () Ġ} ĊĠĠĠĠĠĠĠ Ġbtn StartTime tout Operator With Function And Second Function Test . setOnClickListener { ĠonStart Timeout With Function And Second Function Test Button Click () Ġ} ĊĠĠĠĠĠĠĠ Ġbtn StartTime tout Operator With Function And Second Function And Second Observable Test . setOnClickListener { ĠonStart Timeout With Function And Second Function And Second Observable Test Button Click () Ġ} ĊĠĠĠĠĠĠĠ Ġbtn Start Bonus Test . setOnClickListener { ĠonStart Bonus Test Button Click () Ġ} ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= Ġintent . getString Extra (" TITLE ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġtv Emit ted Numbers . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġtv Result . text Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonStart Timeout Test Button Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Un subscribed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" onStart Timeout Test Button Click () ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Subscription Ġ= Ġstart Timeout Test () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Test Ġis Ġalready Ġrunning ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonStart Timeout With Second Observable Test Button Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Un subscribed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" onStart Timeout With Second Observable Test Button Click () ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Subscription Ġ= Ġstart Timeout With Second Observable Test () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Test Ġis Ġalready Ġrunning ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonStart Timeout With Function Test Button Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Un subscribed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" onStart Timeout With Function Test Button Click () ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Subscription Ġ= Ġstart Timeout With Function () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Test Ġis Ġalready Ġrunning ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonStart Timeout With Function And Second Observable Test Button Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Un subscribed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" onStart Timeout With Function And Second Observable Test Button Click () ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Subscription Ġ= Ġstart Timeout With Function And Second Observable () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Test Ġis Ġalready Ġrunning ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonStart Timeout With Function And Second Function Test Button Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Un subscribed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" onStart Timeout With Function And Second Function Test Button Click () ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Subscription Ġ= Ġstart Timeout With A Function For The First Emit ted Item And Another Function For The Other Items () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Test Ġis Ġalready Ġrunning ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonStart Timeout With Function And Second Function And Second Observable Test Button Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Un subscribed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" onStart Timeout With Function And Second Function And Second Observable Test Button Click () ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Subscription Ġ= Ġstart Timeout With Function And A Second Function And A Second Observable () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Test Ġis Ġalready Ġrunning ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠonStart Bonus Test Button Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Un subscribed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" onStart Bonus Test Button Click () ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Subscription Ġ= Ġstart Bonus Test _ Timeout With Retry () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Test Ġis Ġalready Ġrunning ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġemit Items ( numberOf Items : ĠInt ): ĠObservable < Int > Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" emit Items () Ġ- ĠnumberOf Items : Ġ$ numberOf Items ") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEmit ĠN Ġitems Ġbased Ġon Ġthe Ġ" numberOf Items " Ġparameter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. range ( 0 , ĠnumberOf Items ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimeout Ġ= ĠRandom (). nextInt ( 7 0 0 Ġ- Ġ 1 0 0 ) Ġ+ Ġ 1 0 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" Item : Ġ$ number Ġwill Ġbe Ġemitted Ġwith Ġa Ġdelay Ġaround : Ġ${ timeout } ms ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( timeout . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" emit Items () Ġ- ĠEmit ting Ġnumber : Ġ$ number ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" Got Ġan ĠInterruptedException !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= ĠAndroid Schedulers . main Thread (). create Worker () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw . schedule Ġ{ Ġtv Emit ted Numbers . text Ġ= Ġ"${ tv Emit ted Numbers . text } Ġ$ number " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUseful Ġfor Ġthe Ġtests Ġthat Ġuses Ġa Ġsecond Ġobservable Ġin Ġcase Ġof Ġa Ġtimeout . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġemit Second Items (): ĠObservable < Int > Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" emit Second Items () ") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. range ( 1 0 0 , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" emit Second Items () Ġ- ĠEmit ting Ġnumber : Ġ$ number ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" Got Ġan ĠInterruptedException !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= ĠAndroid Schedulers . main Thread (). create Worker () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw . schedule Ġ{ Ġtv Emit ted Numbers . text Ġ= Ġ"${ tv Emit ted Numbers . text } Ġ$ number " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġsource Ġtakes Ġmore Ġthan Ġ 5 0 0 ms Ġto Ġemit , Ġan Ġerror Ġis Ġemitted . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Timeout Test (): ĠSubscription Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timer ( 0 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ_ Ġ-> Ġemit Items ( 2 0 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout ( 5 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġfor Ġlog Ġpurpose ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( show Debug Messages (" timeout ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow , Ġapply Ġon Ġwhich Ġthread Ġobservable Ġwill Ġrun Ġand Ġalso Ġon Ġwhich Ġone Ġit Ġwill Ġbe Ġobserved . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( apply Schedulers ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFinally Ġsubscribe Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( result Subscriber ( tv Result )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġexample Ġwill Ġtrigger Ġa Ġsecond Ġobservable Ġin Ġcase Ġof Ġthe Ġfirst Ġobservable Ġtakes Ġmore Ġthan Ġ 5 0 0 ms Ġto Ġemit ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Timeout With Second Observable Test (): ĠSubscription Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timer ( 0 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ_ Ġ-> Ġemit Items ( 2 0 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout ( 5 0 0 , ĠTimeUnit . MILLISECONDS , Ġemit Second Items ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġfor Ġlog Ġpurpose ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( show Debug Messages (" timeout ( 3 0 0 ms ) ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow , Ġapply Ġon Ġwhich Ġthread Ġobservable Ġwill Ġrun Ġand Ġalso Ġon Ġwhich Ġone Ġit Ġwill Ġbe Ġobserved . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( apply Schedulers ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFinally Ġsubscribe Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( result Subscriber ( tv Result )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġexample Ġapplies Ġdifferent Ġtimeouts Ġbased Ġon Ġwhether Ġemitted Ġitems Ġare Ġeven Ġor Ġodd ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Timeout With Function (): ĠSubscription Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timer ( 0 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ_ Ġ-> Ġemit Items ( 2 0 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout < Long > Ġ{ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġeven Ġemitted Ġnumbers , Ġa Ġ 3 0 0 ms Ġtimeout Ġis Ġapplied , Ġotherwise Ġ 6 0 0 ms . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ timeout ĠObservable . timer ( 3 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ timeout ĠObservable . timer ( 6 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġfor Ġlog Ġpurpose ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( show Debug Messages (" timeout ( w / function ) ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow , Ġapply Ġon Ġwhich Ġthread Ġobservable Ġwill Ġrun Ġand Ġalso Ġon Ġwhich Ġone Ġit Ġwill Ġbe Ġobserved . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( apply Schedulers ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFinally Ġsubscribe Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( result Subscriber ( tv Result )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġexample Ġis Ġbasically Ġa Ġcombination Ġof Ġthe Ġtwo Ġprevious Ġexamples : Ġstart Timeout With Second Observable Test Ġand Ġstart Timeout With Function ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Timeout With Function And Second Observable (): ĠSubscription Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timer ( 0 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ_ Ġ-> Ġemit Items ( 2 0 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout < Long >({ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġeven Ġemitted Ġnumbers , Ġa Ġtimeout Ġof Ġ 3 0 0 ms Ġis Ġused , Ġotherwise Ġ 6 0 0 ms . ĠFor Ġany Ġitem , Ġin Ġcase Ġof Ġtimeout , Ġa Ġsecond Ġobservable Ġis Ġtriggered . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ timeout ĠObservable . timer ( 3 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ timeout ĠObservable . timer ( 6 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġemit Second Items ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġfor Ġlog Ġpurpose ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( show Debug Messages (" timeout ( w / function Ġand Ġa Ġsecond Ġobservable ) ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow , Ġapply Ġon Ġwhich Ġthread Ġobservable Ġwill Ġrun Ġand Ġalso Ġon Ġwhich Ġone Ġit Ġwill Ġbe Ġobserved . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( apply Schedulers ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFinally Ġsubscribe Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( result Subscriber ( tv Result )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġexample Ġapplies Ġa Ġfunction Ġfor Ġthe Ġfirst Ġitem Ġby Ġdefining Ġa Ġtimeout Ġonly Ġfor Ġit . ĠThen , Ġit Ġdefines Ġa Ġsecond Ġfunction ĊĠĠĠĠ Ġ* Ġthat Ġwill Ġbe Ġapplied Ġto Ġall Ġremaining Ġitems . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Timeout With A Function For The First Emit ted Item And Another Function For The Other Items (): ĠSubscription Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timer ( 0 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ_ Ġ-> Ġemit Items ( 2 0 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout < Long , ĠLong >({ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġfunction Ġwill Ġbe Ġapplied Ġonly Ġfor Ġthe Ġfirst Ġemitted Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . timer ( 6 5 0 0 , ĠTimeUnit . MILLISECONDS )}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġall Ġthe Ġother Ġemitted Ġitems , Ġfor Ġeven Ġnumbers , Ġa Ġtimeout Ġof Ġ 3 0 0 ms Ġis Ġused , Ġotherwise Ġ 6 0 0 ms . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ timeout ĠObservable . timer ( 3 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ timeout ĠObservable . timer ( 6 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġfor Ġlog Ġpurpose ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( show Debug Messages (" timeout ( w / function Ġand Ġa Ġsecond Ġfunction ) ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow , Ġapply Ġon Ġwhich Ġthread Ġobservable Ġwill Ġrun Ġand Ġalso Ġon Ġwhich Ġone Ġit Ġwill Ġbe Ġobserved . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( apply Schedulers ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFinally Ġsubscribe Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( result Subscriber ( tv Result )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Timeout With Function And A Second Function And A Second Observable (): ĠSubscription Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timer ( 0 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ_ Ġ-> Ġemit Items ( 2 0 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout < Long , ĠLong >({ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġfunction Ġwill Ġbe Ġapplied Ġonly Ġfor Ġthe Ġfirst Ġemitted Ġitem . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . timer ( 5 0 0 , ĠTimeUnit . MILLISECONDS )}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġall Ġthe Ġother Ġemitted Ġitems , Ġfor Ġeven Ġnumbers , Ġa Ġtimeout Ġof Ġ 3 0 0 ms Ġis Ġused , Ġotherwise Ġ 6 0 0 ms . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ timeout ĠObservable . timer ( 3 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ timeout ĠObservable . timer ( 6 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġcase Ġ Ġof Ġtimeout Ġon Ġany Ġitem Ġ( i . e . Ġthe Ġfirst Ġone Ġthat Ġuses Ġan Ġexclusive Ġfunction Ġor Ġany Ġother ), Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġobservable Ġwill Ġbe Ġused Ġinstead Ġof Ġterminating Ġwith Ġan Ġerror . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Second Items ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġfor Ġlog Ġpurpose ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( show Debug Messages (" timeout ( w / function , Ġa Ġsecond Ġfunction Ġand Ġa Ġsecond Ġobservable ) ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow , Ġapply Ġon Ġwhich Ġthread Ġobservable Ġwill Ġrun Ġand Ġalso Ġon Ġwhich Ġone Ġit Ġwill Ġbe Ġobserved . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( apply Schedulers ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFinally Ġsubscribe Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( result Subscriber ( tv Result )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Bonus Test _ Timeout With Retry (): ĠSubscription Ġ{ ĊĊĠĠĠĠĠĠĠ Ġattempt Count Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timer ( 0 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ_ Ġ-> Ġemit Items ( 2 0 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout ( 5 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. retry When Ġ{ Ġerror Ġ-> Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap < Any > Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ attempt Count Ġ>= ĠMAX _ AT TEMP TS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ flatMap ĠObservable . error < Any >( Throwable (" Reached Ġmax Ġnumber Ġof Ġattempts Ġ($ MAX _ AT TEMP TS ). ĠEmit ting Ġan Ġerror ... ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" Wait Ġfor Ġ 5 Ġseconds Ġprior Ġto Ġretry ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ flatMap ĠObservable . timer ( 5 , ĠTimeUnit . SECONDS ) Ġas ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġfor Ġlog Ġpurpose ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( show Debug Messages (" timeout ( w / function , Ġa Ġsecond Ġfunction Ġand Ġa Ġsecond Ġobservable ) ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow , Ġapply Ġon Ġwhich Ġthread Ġobservable Ġwill Ġrun Ġand Ġalso Ġon Ġwhich Ġone Ġit Ġwill Ġbe Ġobserved . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( apply Schedulers ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFinally Ġsubscribe Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( result Subscriber ( tv Result )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠTimeout Example Activity :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ AT TEMP TS Ġ= Ġ 3 ĊĠĠĠ Ġ} Ċ } Ċ