Skip to content

Commit e5bb481

Browse files
committed
Modified common interactor, add home page video item
1 parent 1b692a2 commit e5bb481

26 files changed

+809
-106
lines changed

app/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ ext{
7575
nineoldandroids_version = '2.4.0'
7676
indicator_version = '1.1.3'
7777
easyrecyclerview_version = '4.2.1'
78+
vp_manager_version = '0.2.0'
7879
}
7980

8081
dependencies {
@@ -89,7 +90,9 @@ dependencies {
8990
compile "com.squareup.retrofit2:converter-gson:${retrofitVersion}"
9091
compile "com.squareup.retrofit2:adapter-rxjava:${retrofitVersion}"
9192
compile "com.android.support:appcompat-v7:${supportVersion}"
93+
compile "com.android.support:recyclerview-v7:${supportVersion}"
9294
compile "com.android.support:support-v4:${supportVersion}"
95+
compile "com.android.support:cardview-v7:${supportVersion}"
9396
compile "com.github.dmytrodanylyk.circular-progress-button:library:${cpbVersion}"
9497
compile "io.reactivex:rxandroid:${rxandroid_version}"
9598
compile "io.reactivex:rxjava:${rxjava_version}"
@@ -99,6 +102,8 @@ dependencies {
99102
compile "com.youth.banner:banner:${banner_version}"
100103
compile "com.shizhefei:ViewPagerIndicator:${indicator_version}"
101104
compile "com.jude:easyrecyclerview:${easyrecyclerview_version}"
105+
compile "com.github.danylovolokh:video-player-manager:${vp_manager_version}"
106+
compile "com.github.danylovolokh:list-visibility-utils:${vp_manager_version}"
102107

103108
compile "com.jakewharton:butterknife:${butterknife_version}"
104109
annotationProcessor "com.jakewharton:butterknife-compiler:${butterknife_version}"
@@ -109,4 +114,5 @@ dependencies {
109114
compile 'com.daimajia.androidanimations:library:1.1.2@aar'
110115
compile 'com.daimajia.androidviewhover:library:1.0.4@aar'
111116
compile 'com.makeramen:roundedimageview:1.3.0'
117+
compile 'com.squareup.picasso:picasso:2.5.2'
112118
}

app/src/main/java/com/code4a/jlibrarydemo/commoninteractor/GirlsCommonInteractor.java renamed to app/src/main/java/com/code4a/jlibrarydemo/commoninteractor/GankCommonInteractor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Created by code4a on 2017/1/12.
77
*/
88

9-
public interface GirlsCommonInteractor {
9+
public interface GankCommonInteractor {
1010

1111
interface LoadSplashResListener {
1212

@@ -15,9 +15,9 @@ interface LoadSplashResListener {
1515
void onDataNotAvailable();
1616
}
1717

18-
void getRes(int page, int size, LoadSplashResListener listener);
18+
void getRes(String type, int page, int count, LoadSplashResListener listener);
1919

20-
void getRes(LoadSplashResListener listener);
20+
void getRes(String type, LoadSplashResListener listener);
2121

2222
void cancel();
2323
}

app/src/main/java/com/code4a/jlibrarydemo/commoninteractor/GirlsCommonInteractorImpl.java renamed to app/src/main/java/com/code4a/jlibrarydemo/commoninteractor/GankCommonInteractorImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,17 @@
1414
* Created by code4a on 2017/1/12.
1515
*/
1616

17-
public class GirlsCommonInteractorImpl implements GirlsCommonInteractor {
17+
public class GankCommonInteractorImpl implements GankCommonInteractor {
1818

1919
private static final String TAG = "InteractorImpl";
2020
private boolean isCanceled = false;
2121

2222
@Override
23-
public void getRes(int page, int size, final LoadSplashResListener listener) {
23+
public void getRes(String type, int page, int count, final LoadSplashResListener listener) {
2424
isCanceled = false;
2525
SplashRetrofit.getRetrofit()
2626
.create(GirlsService.class)
27-
.getGirls("福利", size, page)
27+
.getGirls(type, count, page)
2828
.subscribeOn(Schedulers.io())
2929
.unsubscribeOn(Schedulers.io())
3030
.observeOn(AndroidSchedulers.mainThread())
@@ -52,8 +52,8 @@ public void onNext(GirlsBean girlsBean) {
5252
}
5353

5454
@Override
55-
public void getRes(LoadSplashResListener listener) {
56-
getRes(1, 1, listener);
55+
public void getRes(String type, LoadSplashResListener listener) {
56+
getRes(type, 1, 1, listener);
5757
}
5858

5959
@Override

app/src/main/java/com/code4a/jlibrarydemo/home/frag/home/HomeFragment.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.code4a.jlibrarydemo.R;
1010
import com.code4a.jlibrarydemo.home.frag.home.four.FourFragment;
1111
import com.code4a.jlibrarydemo.home.frag.home.one.OneFragment;
12+
import com.code4a.jlibrarydemo.home.frag.home.three.ThreeFragment;
1213
import com.code4a.jlibrarydemo.home.frag.home.two.TwoFragment;
1314
import com.code4a.jlibrarydemo.widget.ViewPagerIndicator;
1415

@@ -35,7 +36,7 @@ protected void initView(View view, Bundle savedInstanceState) {
3536
mList = new ArrayList<>(itemCount);
3637
mList.add(OneFragment.getInstance());
3738
mList.add(TwoFragment.getInstance());
38-
mList.add(FourFragment.getInstance());
39+
mList.add(ThreeFragment.getInstance());
3940
mList.add(FourFragment.getInstance());
4041
mDatas = new ArrayList<>(itemCount);
4142
for (int i = 0; i < itemCount; i++) {
Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
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+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.code4a.jlibrarydemo.home.frag.home.three;
2+
3+
import com.code4a.jlibrary.base.presenter.BasePresenter;
4+
5+
/**
6+
* Created by code4a on 2017/1/12.
7+
*/
8+
9+
public abstract class ThreePresenter extends BasePresenter<ThreeView> {
10+
11+
protected ThreePresenter(ThreeView view) {
12+
super(view);
13+
}
14+
15+
public abstract void start();
16+
17+
public abstract void getVideos(int page, int size);
18+
19+
public abstract void cancel();
20+
}

0 commit comments

Comments
 (0)