Skip to content

Commit

Permalink
更新视频播放界面
Browse files Browse the repository at this point in the history
  • Loading branch information
iMeiji committed Jul 27, 2017
1 parent 3ed8529 commit a00aa72
Show file tree
Hide file tree
Showing 9 changed files with 238 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.util.ArrayList;
import java.util.List;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
Expand Down Expand Up @@ -47,7 +48,6 @@ public void doLoadData(String... groupId_ItemId) {
RetrofitFactory.getRetrofit().create(IMobileNewsApi.class)
.getNewsComment(groupId, offset)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.map(new Function<NewsCommentBean, List<NewsCommentBean.DataBean.CommentBean>>() {
@Override
public List<NewsCommentBean.DataBean.CommentBean> apply(@NonNull NewsCommentBean newsCommentBean) throws Exception {
Expand All @@ -59,6 +59,7 @@ public List<NewsCommentBean.DataBean.CommentBean> apply(@NonNull NewsCommentBean
}
})
.compose(view.<List<NewsCommentBean.DataBean.CommentBean>>bindToLife())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<List<NewsCommentBean.DataBean.CommentBean>>() {
@Override
public void accept(@NonNull List<NewsCommentBean.DataBean.CommentBean> list) throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,21 @@
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.ColorStateList;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.ProgressBar;

import com.meiji.toutiao.ErrorAction;
import com.meiji.toutiao.InitApp;
Expand All @@ -35,31 +38,36 @@

import java.util.List;

import fm.jiecao.jcvideoplayer_lib.JCUserAction;
import fm.jiecao.jcvideoplayer_lib.JCUserActionStandard;
import fm.jiecao.jcvideoplayer_lib.JCVideoPlayer;
import fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard;
import me.drakeet.multitype.Items;
import me.drakeet.multitype.MultiTypeAdapter;

/**
* Created by Meiji on 2017/3/30.
*/

public class VideoContentActivity extends BaseActivity implements View.OnClickListener, IVideoContent.View {
public class VideoContentActivity extends BaseActivity implements IVideoContent.View {

public static final String TAG = "VideoContentActivity";
protected boolean canLoadMore = false;
protected MultiTypeAdapter adapter;
private String groupId;
private String itemId;
private String videoId;
private String videoUrls;
private String videoTitle;
private String shareUrl;
private MultiNewsArticleDataBean dataBean;
private Items oldItems = new Items();

private ImageView iv_image_url;
private FloatingActionButton fabPlay;
private RecyclerView recyclerView;
private ProgressBar progressBar;
private FloatingActionButton fab;
private MyJCVideoPlayerStandard jcVideo;
private IVideoContent.Presenter presenter;
private int currentAction;

public static void launch(MultiNewsArticleDataBean bean) {
InitApp.AppContext.startActivity(new Intent(InitApp.AppContext, VideoContentActivity.class)
Expand All @@ -73,7 +81,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
setContentView(R.layout.fragment_video_content);
setContentView(R.layout.fragment_video_content_new);
presenter = new VideoContentPresenter(this);
initView();
initData();
Expand All @@ -88,29 +96,23 @@ private void initData() {
if (null != dataBean.getVideo_detail_info().getDetail_video_large_image()) {
String image = dataBean.getVideo_detail_info().getDetail_video_large_image().getUrl();
if (!TextUtils.isEmpty(image)) {
ImageLoader.loadCenterCrop(this, image, iv_image_url, R.color.viewBackground, R.mipmap.error_image);
ImageLoader.loadCenterCrop(this, image, jcVideo.thumbImageView, R.color.viewBackground, R.mipmap.error_image);
}
}
}
this.groupId = dataBean.getGroup_id() + "";
this.itemId = dataBean.getItem_id() + "";
this.videoId = dataBean.getVideo_id();
this.videoTitle = dataBean.getTitle();
this.shareUrl = dataBean.getDisplay_url();
oldItems.add(dataBean);
} catch (NullPointerException e) {
ErrorAction.print(e);
}

}

private void initView() {
initToolBar((Toolbar) findViewById(R.id.toolbar), true, "");

iv_image_url = (ImageView) findViewById(R.id.iv_image_url);
iv_image_url.setOnClickListener(this);
fabPlay = (FloatingActionButton) findViewById(R.id.fab_play);
fabPlay.setOnClickListener(this);
fabPlay.setBackgroundTintList(ColorStateList.valueOf(SettingUtil.getInstance().getColor()));

recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
Expand All @@ -127,43 +129,53 @@ public void onLoadMore() {
}
}
});
MyJCVideoPlayerStandard.setOnBackPressListener(new MyJCVideoPlayerStandard.onBackPressListener() {

jcVideo = (MyJCVideoPlayerStandard) findViewById(R.id.jc_video);

MyJCVideoPlayerStandard.setOnClickFullScreenListener(new MyJCVideoPlayerStandard.onClickFullScreenListener() {
@Override
public void onBackPress() {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(0);
if (slidrInterface != null) {
slidrInterface.unlock();
public void onClickFullScreen() {
if (currentAction == JCUserAction.ON_ENTER_FULLSCREEN && SettingUtil.getInstance().getIsVideoForceLandscape()) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
});
}

@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.fab_play || id == R.id.iv_image_url) {
MyJCVideoPlayerStandard.startFullscreen(this, MyJCVideoPlayerStandard.class, videoUrls, videoTitle);
View decorView = getWindow().getDecorView();
int uiOptions = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
} else {
uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
decorView.setSystemUiVisibility(uiOptions);
if (SettingUtil.getInstance().getVideoOrientation()) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
progressBar = (ProgressBar) findViewById(R.id.pb_progress);
int color = SettingUtil.getInstance().getColor();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Drawable wrapDrawable = DrawableCompat.wrap(progressBar.getIndeterminateDrawable());
DrawableCompat.setTint(wrapDrawable, color);
this.progressBar.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable));
} else {
this.progressBar.getIndeterminateDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}

fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setBackgroundTintList(ColorStateList.valueOf(SettingUtil.getInstance().getColor()));

fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent shareIntent = new Intent()
.setAction(Intent.ACTION_SEND)
.setType("text/plain")
.putExtra(Intent.EXTRA_TEXT, videoTitle + "\n" + shareUrl);
startActivity(Intent.createChooser(shareIntent, getString(R.string.share_to)));
}
if (slidrInterface != null) {
slidrInterface.lock();
});
jcVideo.thumbImageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
fab.setVisibility(View.GONE);
return false;
}
}
});
}

@Override
public void onLoadData() {
onShowLoading();
presenter.doLoadData(groupId, itemId);
presenter.doLoadVideoData(videoId);
}
Expand All @@ -182,12 +194,12 @@ public void onSetAdapter(final List<?> list) {

@Override
public void onShowLoading() {

progressBar.setVisibility(View.VISIBLE);
}

@Override
public void onHideLoading() {

progressBar.setVisibility(View.GONE);
}

@Override
Expand Down Expand Up @@ -228,7 +240,56 @@ public void run() {

@Override
public void onSetVideoPlay(String urls) {
videoUrls = urls;
jcVideo.setUp(urls, JCVideoPlayerStandard.SCREEN_LAYOUT_NORMAL, videoTitle);
if (SettingUtil.getInstance().getIsVideoAutoPlay()) {
jcVideo.startButton.performClick();
}

// 设置监听事件 判断是否进入全屏
JCVideoPlayer.setJcUserAction(new JCUserAction() {
@Override
public void onEvent(int type, String url, int screen, Object... objects) {
if (type == JCUserActionStandard.ON_CLICK_START_THUMB ||
type == JCUserAction.ON_CLICK_START_ICON ||
type == JCUserAction.ON_CLICK_RESUME ||
type == JCUserAction.ON_CLICK_START_AUTO_COMPLETE) {
fab.setVisibility(View.GONE);
}

if (type == JCUserAction.ON_CLICK_PAUSE || type == JCUserAction.ON_AUTO_COMPLETE) {
fab.setVisibility(View.VISIBLE);
}

if (type == JCUserAction.ON_ENTER_FULLSCREEN) {
currentAction = JCUserAction.ON_ENTER_FULLSCREEN;

View decorView = getWindow().getDecorView();
int uiOptions = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
} else {
uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
decorView.setSystemUiVisibility(uiOptions);

if (slidrInterface != null) {
slidrInterface.lock();
}
}

if (type == JCUserAction.ON_QUIT_FULLSCREEN) {
currentAction = JCUserAction.ON_QUIT_FULLSCREEN;

View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(0);

if (slidrInterface != null) {
slidrInterface.unlock();
}
}
}
});
}

@Override
Expand All @@ -240,12 +301,6 @@ protected void onPause() {
@Override
public void onBackPressed() {
if (JCVideoPlayer.backPress()) {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(0);
if (slidrInterface != null) {
slidrInterface.unlock();
}
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
return;
}
super.onBackPressed();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import java.util.Random;
import java.util.zip.CRC32;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
Expand Down Expand Up @@ -58,7 +59,6 @@ public void doLoadVideoData(String videoid) {
String url = getVideoContentApi(videoid);
RetrofitFactory.getRetrofit().create(IVideoApi.class).getVideoContent(url)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.map(new Function<VideoContentBean, String>() {
@Override
public String apply(@NonNull VideoContentBean videoContentBean) throws Exception {
Expand Down Expand Up @@ -87,15 +87,18 @@ public String apply(@NonNull VideoContentBean videoContentBean) throws Exception
}
})
.compose(view.<String>bindToLife())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(@NonNull String s) throws Exception {
view.onSetVideoPlay(s);
view.onHideLoading();
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
view.onShowNetError();
view.onHideLoading();
ErrorAction.print(throwable);
}
});
Expand Down
9 changes: 8 additions & 1 deletion app/src/main/java/com/meiji/toutiao/util/SettingUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public boolean getNavBar() {
/**
* 获取是否开启视频强制横屏
*/
public boolean getVideoOrientation() {
public boolean getIsVideoForceLandscape() {
return setting.getBoolean("video_force_landscape", false);
}

Expand All @@ -135,6 +135,13 @@ public int getSlidable() {
return Integer.parseInt(s);
}

/**
* 获取是否开启视频自动播放
*/
public boolean getIsVideoAutoPlay() {
return setting.getBoolean("video_auto_play", false) && NetWorkUtil.isWifiConnected(InitApp.AppContext);
}

private static final class SettingsUtilInstance {
private static final SettingUtil instance = new SettingUtil();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.meiji.toutiao.widget.behavior;

import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.view.View;

/**
* Created by Meiji on 2017/7/28.
* FAB 上滑隐藏 下滑显示
*/

public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior {

public ScrollAwareFABBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout,
FloatingActionButton child,
View directTargetChild,
View target,
int nestedScrollAxes) {
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL ||
super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
}

@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child,
View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed,
dyUnconsumed);

if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
child.setVisibility(View.INVISIBLE);
} else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
child.show();
}
}
}
Loading

0 comments on commit a00aa72

Please sign in to comment.