11package com .morihacky .android .rxjava ;
22
33import android .os .Bundle ;
4+ import android .os .Handler ;
45import android .support .annotation .Nullable ;
56import android .view .LayoutInflater ;
67import android .view .View ;
78import android .view .ViewGroup ;
9+ import android .widget .ListView ;
810import butterknife .ButterKnife ;
11+ import butterknife .InjectView ;
912import butterknife .OnClick ;
13+ import com .morihacky .android .rxjava .wiring .LogAdapter ;
14+ import java .text .SimpleDateFormat ;
15+ import java .util .ArrayList ;
16+ import java .util .Date ;
17+ import java .util .List ;
1018import java .util .concurrent .TimeUnit ;
1119import rx .Observable ;
12- import rx .android .schedulers .AndroidSchedulers ;
13- import rx .functions .Action0 ;
14- import rx .functions .Action1 ;
15- import rx .functions .Func1 ;
20+ import rx .Observer ;
1621import timber .log .Timber ;
1722
23+ import static android .os .Looper .getMainLooper ;
24+ import static android .os .Looper .myLooper ;
25+
1826public class TimingDemoFragment
1927 extends BaseFragment {
2028
29+ @ InjectView (R .id .list_threading_log ) ListView _logsList ;
30+
31+ private LogAdapter _adapter ;
32+ private List <String > _logs ;
33+
34+ @ Override
35+ public void onActivityCreated (@ Nullable Bundle savedInstanceState ) {
36+ super .onActivityCreated (savedInstanceState );
37+ _setupLogger ();
38+ }
39+
2140 @ Override
2241 public View onCreateView (LayoutInflater inflater ,
2342 @ Nullable ViewGroup container ,
@@ -27,43 +46,55 @@ public View onCreateView(LayoutInflater inflater,
2746 return layout ;
2847 }
2948
30- @ OnClick (R .id .btn_start_demo )
31- public void onStartButtonClicked () {
32- Timber .d ("-------------------- Shutter clicked" );
49+ // -----------------------------------------------------------------------------------
50+
51+ @ OnClick (R .id .btn_demo_timing_1 )
52+ public void onRunOnceWithDelay () {
53+ _log (String .format ("C1 [%s] --- BTN click" , _getCurrentTimestamp ()));
54+
55+ Observable .just (1 ).delay (1 , TimeUnit .SECONDS ).subscribe (new Observer <Integer >() {
56+ @ Override
57+ public void onCompleted () {
58+ _log (String .format ("C1 [%s] XX COMPLETE" , _getCurrentTimestamp ()));
59+ }
3360
34- Observable .just (1 ).flatMap (new Func1 <Integer , Observable <Object >>() {
3561 @ Override
36- public Observable < Object > call ( Integer integer ) {
37- return _getCountdownFlashObservable ( );
62+ public void onError ( Throwable e ) {
63+ Timber . e ( e , "something went wrong in TimingDemoFragment example" );
3864 }
39- }).repeat (3 ).subscribe ();
65+
66+ @ Override
67+ public void onNext (Integer integer ) {
68+ _log (String .format ("C1 [%s] NEXT" , _getCurrentTimestamp ()));
69+ }
70+ });
4071 }
4172
42- private Observable <Object > _getCountdownFlashObservable () {
43- return Observable .interval (1 , TimeUnit .SECONDS )
44- .map (new Func1 <Long , Object >() {
45- @ Override
46- public Object call (Long aLong ) {
47- Timber .d ("-------------------- Number to show %s" ,
48- String .valueOf (3l - aLong ));
49- return 3l - aLong ;
50- }
51- })
52- .take (3 )
53- .observeOn (AndroidSchedulers .mainThread ())
54- .doOnNext (new Action1 <Object >() {
55- @ Override
56- public void call (Object o ) {
57- Timber .d ("-------------------- %s" , String .valueOf (o ));
58- }
59- })
60- .delay (1 , TimeUnit .SECONDS )
61- .observeOn (AndroidSchedulers .mainThread ())
62- .doOnCompleted (new Action0 () {
63- @ Override
64- public void call () {
65- Timber .d ("-------------------- FLASH!" );
66- }
67- });
73+ // -----------------------------------------------------------------------------------
74+ // Method that help wiring up the example (irrelevant to RxJava)
75+
76+ private void _setupLogger () {
77+ _logs = new ArrayList <>();
78+ _adapter = new LogAdapter (getActivity (), new ArrayList <String >());
79+ _logsList .setAdapter (_adapter );
6880 }
81+
82+ private void _log (String logMsg ) {
83+ _logs .add (0 , String .format (logMsg + " [MainThread: %b]" , getMainLooper () == myLooper ()));
84+
85+ // You can only do below stuff on main thread.
86+ new Handler (getMainLooper ()).post (new Runnable () {
87+
88+ @ Override
89+ public void run () {
90+ _adapter .clear ();
91+ _adapter .addAll (_logs );
92+ }
93+ });
94+ }
95+
96+ private String _getCurrentTimestamp () {
97+ return new SimpleDateFormat ("k:m:s:S a" ).format (new Date ());
98+ }
99+
69100}
0 commit comments