1
+ package com .code4a .jlibrarydemo .home .frag .home .three ;
2
+
3
+ import android .os .Bundle ;
4
+ import android .support .v7 .widget .LinearLayoutManager ;
5
+ import android .support .v7 .widget .RecyclerView ;
6
+ import android .view .View ;
7
+ import android .view .ViewStub ;
8
+ import android .widget .AbsListView ;
9
+
10
+ import com .code4a .jlibrary .base .BaseFragment ;
11
+ import com .code4a .jlibrary .loading .LoadingView ;
12
+ import com .code4a .jlibrarydemo .R ;
13
+ import com .code4a .jlibrarydemo .data .GirlsBean ;
14
+ import com .code4a .jlibrarydemo .home .frag .home .three .adapter .VideoRecyclerViewAdapter ;
15
+ import com .code4a .jlibrarydemo .home .frag .home .three .items .BaseVideoItem ;
16
+ import com .code4a .jlibrarydemo .home .frag .home .three .items .ItemFactory ;
17
+ import com .volokh .danylo .video_player_manager .manager .PlayerItemChangeListener ;
18
+ import com .volokh .danylo .video_player_manager .manager .SingleVideoPlayerManager ;
19
+ import com .volokh .danylo .video_player_manager .manager .VideoPlayerManager ;
20
+ import com .volokh .danylo .video_player_manager .meta .MetaData ;
21
+ import com .volokh .danylo .visibility_utils .calculator .DefaultSingleItemCalculatorCallback ;
22
+ import com .volokh .danylo .visibility_utils .calculator .ListItemsVisibilityCalculator ;
23
+ import com .volokh .danylo .visibility_utils .calculator .SingleListViewItemActiveCalculator ;
24
+ import com .volokh .danylo .visibility_utils .scroll_utils .ItemsPositionGetter ;
25
+ import com .volokh .danylo .visibility_utils .scroll_utils .RecyclerViewItemPositionGetter ;
26
+
27
+ import java .io .IOException ;
28
+ import java .util .ArrayList ;
29
+ import java .util .List ;
30
+
31
+ import butterknife .BindView ;
32
+
33
+ /**
34
+ * Created by code4a on 2017/1/20.
35
+ */
36
+
37
+ public class ThreeFragment extends BaseFragment implements ThreeView {
38
+
39
+ private static final String TAG = ThreeFragment .class .getSimpleName ();
40
+
41
+ private final ArrayList <BaseVideoItem > mList = new ArrayList <>();
42
+
43
+ /**
44
+ * Only the one (most visible) view should be active (and playing).
45
+ * To calculate visibility of views we use {@link SingleListViewItemActiveCalculator}
46
+ */
47
+ private final ListItemsVisibilityCalculator mVideoVisibilityCalculator =
48
+ new SingleListViewItemActiveCalculator (new DefaultSingleItemCalculatorCallback (), mList );
49
+
50
+ @ BindView (R .id .recycler_view )
51
+ RecyclerView mRecyclerView ;
52
+ @ BindView (R .id .network_error_layout )
53
+ ViewStub mNetworkErrorLayout ;
54
+ @ BindView (R .id .waterbottle_loadingview )
55
+ LoadingView mLoadingView ;
56
+ private View networkErrorView ;
57
+ private LinearLayoutManager mLayoutManager ;
58
+ private VideoRecyclerViewAdapter videoRecyclerViewAdapter ;
59
+ private ThreePresenter mThreePresenter ;
60
+
61
+ /**
62
+ * ItemsPositionGetter is used by {@link ListItemsVisibilityCalculator} for getting information about
63
+ * items position in the RecyclerView and LayoutManager
64
+ */
65
+ private ItemsPositionGetter mItemsPositionGetter ;
66
+
67
+ /**
68
+ * Here we use {@link SingleVideoPlayerManager}, which means that only one video playback is possible.
69
+ */
70
+ private final VideoPlayerManager <MetaData > mVideoPlayerManager = new SingleVideoPlayerManager (new PlayerItemChangeListener () {
71
+ @ Override
72
+ public void onPlayerItemChanged (MetaData metaData ) {
73
+
74
+ }
75
+ });
76
+
77
+ private int mScrollState = AbsListView .OnScrollListener .SCROLL_STATE_IDLE ;
78
+
79
+ public static ThreeFragment getInstance () {
80
+ ThreeFragment threeFragment = new ThreeFragment ();
81
+ return threeFragment ;
82
+ }
83
+
84
+ @ Override
85
+ protected void initView (View view , Bundle savedInstanceState ) {
86
+ // initItemData();
87
+ mThreePresenter = new ThreePresenterImpl (this );
88
+ networkErrorView = mNetworkErrorLayout .inflate ();
89
+ showNormal ();
90
+ // use this setting to improve performance if you know that changes
91
+ // in content do not change the layout size of the RecyclerView
92
+ mRecyclerView .setHasFixedSize (true );
93
+ // use a linear layout manager
94
+ mLayoutManager = new LinearLayoutManager (getHoldingActivity ());
95
+ mRecyclerView .setLayoutManager (mLayoutManager );
96
+
97
+ videoRecyclerViewAdapter = new VideoRecyclerViewAdapter (mVideoPlayerManager , getHoldingActivity (), mList );
98
+
99
+ mRecyclerView .setAdapter (videoRecyclerViewAdapter );
100
+ mRecyclerView .addOnScrollListener (new RecyclerView .OnScrollListener () {
101
+
102
+ @ Override
103
+ public void onScrollStateChanged (RecyclerView recyclerView , int scrollState ) {
104
+ mScrollState = scrollState ;
105
+ if (scrollState == RecyclerView .SCROLL_STATE_IDLE && !mList .isEmpty ()) {
106
+
107
+ mVideoVisibilityCalculator .onScrollStateIdle (
108
+ mItemsPositionGetter ,
109
+ mLayoutManager .findFirstVisibleItemPosition (),
110
+ mLayoutManager .findLastVisibleItemPosition ());
111
+ }
112
+ }
113
+
114
+ @ Override
115
+ public void onScrolled (RecyclerView recyclerView , int dx , int dy ) {
116
+ if (!mList .isEmpty ()) {
117
+ mVideoVisibilityCalculator .onScroll (
118
+ mItemsPositionGetter ,
119
+ mLayoutManager .findFirstVisibleItemPosition (),
120
+ mLayoutManager .findLastVisibleItemPosition () - mLayoutManager .findFirstVisibleItemPosition () + 1 ,
121
+ mScrollState );
122
+ }
123
+ }
124
+ });
125
+ mItemsPositionGetter = new RecyclerViewItemPositionGetter (mLayoutManager , mRecyclerView );
126
+
127
+ }
128
+
129
+ @ Override
130
+ public void onResume () {
131
+ super .onResume ();
132
+ mThreePresenter .start ();
133
+ if (!mList .isEmpty ()) {
134
+ // need to call this method from list view handler in order to have filled list
135
+ mRecyclerView .post (new Runnable () {
136
+ @ Override
137
+ public void run () {
138
+
139
+ mVideoVisibilityCalculator .onScrollStateIdle (
140
+ mItemsPositionGetter ,
141
+ mLayoutManager .findFirstVisibleItemPosition (),
142
+ mLayoutManager .findLastVisibleItemPosition ());
143
+
144
+ }
145
+ });
146
+ }
147
+ }
148
+
149
+ @ Override
150
+ public void onStop () {
151
+ super .onStop ();
152
+ // we have to stop any playback in onStop
153
+ mVideoPlayerManager .resetMediaPlayer ();
154
+ mThreePresenter .cancel ();
155
+ }
156
+
157
+ private void initItemData () {
158
+ // try {
159
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video1), "video1.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
160
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video2), "video2.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
161
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video3), "video3.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
162
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video4), "video4.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
163
+ //
164
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video5), "video5.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
165
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video6), "video6.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
166
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video7), "video7.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
167
+
168
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video1), "video8.m4v", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
169
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video2), "video8.m4v", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
170
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video3), "video8.m4v", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
171
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video4), "video8.m4v", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
172
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video5), "video8.m4v", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
173
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video6), "video8.m4v", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
174
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video7), "video8.m4v", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
175
+ // mList.add(ItemFactory.createItemFromAsset(getString(R.string.video8), "video8.m4v", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
176
+
177
+ // String moviesDir = SDCardUtil.getSDCardPath() + "Movies/";
178
+ // mList.add(ItemFactory.createItemFromUri(getString(R.string.video1), moviesDir + "video1.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
179
+ // mList.add(ItemFactory.createItemFromUri(getString(R.string.video2), moviesDir + "video2.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
180
+ // mList.add(ItemFactory.createItemFromUri(getString(R.string.video3), moviesDir + "video3.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
181
+ // mList.add(ItemFactory.createItemFromUri(getString(R.string.video4), moviesDir + "video4.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
182
+ //
183
+ // mList.add(ItemFactory.createItemFromUri(getString(R.string.video5), moviesDir + "video5.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
184
+ // mList.add(ItemFactory.createItemFromUri(getString(R.string.video6), moviesDir + "video6.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
185
+ // mList.add(ItemFactory.createItemFromUri(getString(R.string.video7), moviesDir + "video7.flv", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
186
+ // mList.add(ItemFactory.createItemFromUri(getString(R.string.video8), moviesDir + "video8.m4v", R.mipmap.daimajia, getHoldingActivity(), mVideoPlayerManager));
187
+
188
+ // } catch (IOException e) {
189
+ // throw new RuntimeException(e);
190
+ // }
191
+ }
192
+
193
+ @ Override
194
+ protected int getLayoutId () {
195
+ return R .layout .fragment_home_three_recycler ;
196
+ }
197
+
198
+ @ Override
199
+ public void load (List <GirlsBean .ResultsEntity > datas ) {
200
+ try {
201
+ for (GirlsBean .ResultsEntity data : datas ) {
202
+ mList .add (ItemFactory .createItemFromUri (data .getDesc (), data .getUrl (), R .drawable .default_error , getHoldingActivity (), mVideoPlayerManager ));
203
+ videoRecyclerViewAdapter .updateData (mList );
204
+ }
205
+ } catch (IOException e ) {
206
+ e .printStackTrace ();
207
+ }
208
+ }
209
+
210
+ @ Override
211
+ public void showLoadingView () {
212
+ mLoadingView .setVisibility (View .VISIBLE );
213
+ }
214
+
215
+ @ Override
216
+ public void hideLoadingView () {
217
+ mLoadingView .setVisibility (View .GONE );
218
+ }
219
+
220
+ @ Override
221
+ public void showError () {
222
+ if (networkErrorView != null ) {
223
+ networkErrorView .setVisibility (View .VISIBLE );
224
+ }
225
+ }
226
+
227
+ @ Override
228
+ public void showNormal () {
229
+ if (networkErrorView != null ) {
230
+ networkErrorView .setVisibility (View .GONE );
231
+ }
232
+ }
233
+ }
0 commit comments