Skip to content

Commit 1ccb0cf

Browse files
author
Kaushik Gopal
committed
refactor: rename bottom fragments for RxBus example and introduce a 3rd approach for debounced buffer
1 parent 40e8b8d commit 1ccb0cf

4 files changed

Lines changed: 119 additions & 7 deletions

File tree

app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
2828
getActivity().getSupportFragmentManager()
2929
.beginTransaction()
3030
.replace(R.id.demo_rxbus_frag_1, new RxBusDemo_TopFragment())
31-
.replace(R.id.demo_rxbus_frag_2, new RxBusDemo_BottomFragment())
32-
//.replace(R.id.demo_rxbus_frag_2, new RxBusDemo_BottomFANCYFragment())
31+
.replace(R.id.demo_rxbus_frag_2, new RxBusDemo_Bottom3Fragment())
32+
//.replace(R.id.demo_rxbus_frag_2, new RxBusDemo_Bottom2Fragment())
33+
//.replace(R.id.demo_rxbus_frag_2, new RxBusDemo_Bottom1Fragment())
3334
.commit();
3435
}
3536

3637
public static class TapEvent {}
37-
}
38+
}

app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_BottomFragment.java renamed to app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import static rx.android.observables.AndroidObservable.bindFragment;
1919

20-
public class RxBusDemo_BottomFragment
20+
public class RxBusDemo_Bottom1Fragment
2121
extends Fragment {
2222

2323
private RxBus _rxBus;

app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_BottomFANCYFragment.java renamed to app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import static rx.android.observables.AndroidObservable.bindFragment;
2323

24-
public class RxBusDemo_BottomFANCYFragment
24+
public class RxBusDemo_Bottom2Fragment
2525
extends Fragment {
2626

2727
private RxBus _rxBus;
@@ -51,8 +51,6 @@ public void onStart() {
5151
_subscriptions = new CompositeSubscription();
5252

5353
Observable<Object> tapEventEmitter = _rxBus.toObserverable().share();
54-
Observable<Object> debouncedEmitter = tapEventEmitter.debounce(1, TimeUnit.SECONDS);
55-
Observable<List<Object>> debouncedBufferEmitter = tapEventEmitter.buffer(debouncedEmitter);
5654

5755
_subscriptions//
5856
.add(bindFragment(this, tapEventEmitter)//
@@ -65,6 +63,9 @@ public void call(Object event) {
6563
}
6664
}));
6765

66+
Observable<Object> debouncedEmitter = tapEventEmitter.debounce(1, TimeUnit.SECONDS);
67+
Observable<List<Object>> debouncedBufferEmitter = tapEventEmitter.buffer(debouncedEmitter);
68+
6869
_subscriptions//
6970
.add(debouncedBufferEmitter//
7071
.observeOn(AndroidSchedulers.mainThread())//
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package com.morihacky.android.rxjava.rxbus;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.Nullable;
5+
import android.support.v4.app.Fragment;
6+
import android.support.v4.view.ViewCompat;
7+
import android.view.LayoutInflater;
8+
import android.view.View;
9+
import android.view.ViewGroup;
10+
import android.widget.TextView;
11+
import butterknife.ButterKnife;
12+
import butterknife.InjectView;
13+
import com.morihacky.android.rxjava.MainActivity;
14+
import com.morihacky.android.rxjava.app.R;
15+
import java.util.List;
16+
import java.util.concurrent.TimeUnit;
17+
import rx.Observable;
18+
import rx.android.schedulers.AndroidSchedulers;
19+
import rx.functions.Action1;
20+
import rx.functions.Func1;
21+
import rx.observables.ConnectableObservable;
22+
import rx.subscriptions.CompositeSubscription;
23+
24+
import static rx.android.observables.AndroidObservable.bindFragment;
25+
26+
public class RxBusDemo_Bottom3Fragment
27+
extends Fragment {
28+
29+
private RxBus _rxBus;
30+
private CompositeSubscription _subscriptions;
31+
32+
@InjectView(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow;
33+
@InjectView(R.id.demo_rxbus_tap_count) TextView _tapEventCountShow;
34+
35+
@Override
36+
public View onCreateView(LayoutInflater inflater,
37+
@Nullable ViewGroup container,
38+
@Nullable Bundle savedInstanceState) {
39+
View layout = inflater.inflate(R.layout.fragment_rxbus_bottom, container, false);
40+
ButterKnife.inject(this, layout);
41+
return layout;
42+
}
43+
44+
@Override
45+
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
46+
super.onActivityCreated(savedInstanceState);
47+
_rxBus = ((MainActivity) getActivity()).getRxBusSingleton();
48+
}
49+
50+
@Override
51+
public void onStart() {
52+
super.onStart();
53+
_subscriptions = new CompositeSubscription();
54+
55+
ConnectableObservable<Object> tapEventEmitter = _rxBus.toObserverable().publish();
56+
57+
_subscriptions//
58+
.add(bindFragment(this, tapEventEmitter)//
59+
.subscribe(new Action1<Object>() {
60+
@Override
61+
public void call(Object event) {
62+
if (event instanceof RxBusDemoFragment.TapEvent) {
63+
_showTapText();
64+
}
65+
}
66+
}));
67+
68+
_subscriptions//
69+
.add(tapEventEmitter.publish(new Func1<Observable<Object>, Observable<List<Object>>>() {
70+
@Override
71+
public Observable<List<Object>> call(Observable<Object> stream) {
72+
return stream.buffer(stream.debounce(1, TimeUnit.SECONDS));
73+
}
74+
}).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<List<Object>>() {
75+
@Override
76+
public void call(List<Object> taps) {
77+
_showTapCount(taps.size());
78+
}
79+
}));
80+
81+
_subscriptions.add(tapEventEmitter.connect());
82+
}
83+
84+
@Override
85+
public void onStop() {
86+
super.onStop();
87+
_subscriptions.clear();
88+
}
89+
90+
// -----------------------------------------------------------------------------------
91+
// Helper to show the text via an animation
92+
93+
private void _showTapText() {
94+
_tapEventTxtShow.setVisibility(View.VISIBLE);
95+
_tapEventTxtShow.setAlpha(1f);
96+
ViewCompat.animate(_tapEventTxtShow).alphaBy(-1f).setDuration(400);
97+
}
98+
99+
private void _showTapCount(int size) {
100+
_tapEventCountShow.setText(String.valueOf(size));
101+
_tapEventCountShow.setVisibility(View.VISIBLE);
102+
_tapEventCountShow.setScaleX(1f);
103+
_tapEventCountShow.setScaleY(1f);
104+
ViewCompat.animate(_tapEventCountShow)
105+
.scaleXBy(-1f)
106+
.scaleYBy(-1f)
107+
.setDuration(800)
108+
.setStartDelay(100);
109+
}
110+
}

0 commit comments

Comments
 (0)