From 1981dee5aec45793d3c4ebdbc4e637528c71b3c5 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 03 二月 2021 19:20:47 +0800 Subject: [PATCH] 'PPTV' --- BuWanVideo/src/com/weikou/beibeivideo/ui/media/EpisodeFragment.java | 368 ++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 283 insertions(+), 85 deletions(-) diff --git a/BuWanVideo/src/com/weikou/beibeivideo/ui/media/EpisodeFragment.java b/BuWanVideo/src/com/weikou/beibeivideo/ui/media/EpisodeFragment.java index 3b2e81a..0fc0f0e 100644 --- a/BuWanVideo/src/com/weikou/beibeivideo/ui/media/EpisodeFragment.java +++ b/BuWanVideo/src/com/weikou/beibeivideo/ui/media/EpisodeFragment.java @@ -6,13 +6,15 @@ import android.content.SharedPreferences; import android.database.Cursor; import android.graphics.Bitmap; +import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.StaggeredGridLayoutManager; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -20,7 +22,6 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.FrameLayout; -import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; @@ -29,6 +30,7 @@ import android.widget.Toast; import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -46,6 +48,7 @@ import com.umeng.socialize.media.UMWeb; import com.weikou.beibeivideo.BasicTextHttpResponseHandler; import com.weikou.beibeivideo.BeibeiVideoAPI; +import com.weikou.beibeivideo.BeibeiVideoApplication; import com.weikou.beibeivideo.db.WatchHistoryTable; import com.weikou.beibeivideo.entity.Follow; import com.weikou.beibeivideo.entity.Play; @@ -55,18 +58,22 @@ import com.weikou.beibeivideo.entity.VideoInfo; import com.weikou.beibeivideo.entity.VideoResource; import com.weikou.beibeivideo.entity.ad.ExpressAdContainer; +import com.weikou.beibeivideo.entity.video.FunshionPlayInfo; import com.weikou.beibeivideo.ui.login.LoginActivity; import com.weikou.beibeivideo.ui.video.EpisodeNewAdapter; import com.weikou.beibeivideo.util.BeibeiConstant; +import com.weikou.beibeivideo.util.GlideCircleTransform; +import com.weikou.beibeivideo.util.UserUtil; import com.weikou.beibeivideo.util.VideoUtil; +import com.weikou.beibeivideo.util.ad.AdUtil; import com.weikou.beibeivideo.util.ad.ExpressAdManager; -import com.weikou.beibeivideo.util.ui.DividerItemDecoration; -import com.yeshi.buwanshequ.R; +import com.weikou.beibeivideo.R; import org.apache.http.Header; import org.json.JSONArray; import org.json.JSONObject; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -94,6 +101,14 @@ private FrameLayout fl_native_ad1; private EpisodeNewAdapter episodeAdapter; + + final String TAG = "EpisodeFragment"; + + private boolean episodeLoading = false;//鍓ч泦鏄惁姝e湪鍔犺浇鏇村 + + private boolean episodeHasMore = true;//鏄惁杩樻湁鏇村鐨勫墽闆� + + private int episodePage = 2;//褰撳墠椤� public static DisplayImageOptions option = new DisplayImageOptions.Builder() .showImageForEmptyUri(R.drawable.from_other) @@ -151,34 +166,80 @@ RecyclerView parent, RecyclerView.State state) { int position = parent.getChildAdapterPosition(view); outRect.left = space; - if (mVideoInfo != null && position == mVideoInfo.getVideoDetailList().size() - 1) + if (mVideoInfo != null && position == VideoUtil.videoEpisodeList.size() - 1) outRect.right = space; } } - private void loadEpisode(){ + private void loadEpisode() { + + int type = 0; + if (mVideoInfo.getShowType() == 1) { // 缁艰壓鎴栬�呯數褰� - episodeAdapter = new EpisodeNewAdapter(getContext(), mVideoInfo, EpisodeNewAdapter.TYPE_ZONGYI, mPlayingPosition); + type = EpisodeNewAdapter.TYPE_ZONGYI; + } else if (mVideoInfo.getShowType() == 2) { // 鐢佃鍓у姩婕� - episodeAdapter = new EpisodeNewAdapter(getContext(), mVideoInfo, EpisodeNewAdapter.TYPE_DIANSHIJU, mPlayingPosition); + type = EpisodeNewAdapter.TYPE_DIANSHIJU; } + episodeAdapter = new EpisodeNewAdapter(getContext(), mVideoInfo, type, mPlayingPosition, new EpisodeNewAdapter.ISelectVideoEpisodeListener() { + @Override + public void onClick(int position, VideoDetailInfo detailInfo) { + setEpisodeSelected(position); + getUrl(detailInfo); + } + }); LinearLayoutManager ms = new LinearLayoutManager(getContext()); ms.setOrientation(LinearLayoutManager.HORIZONTAL); + rv_episode.setHasFixedSize(true); + rv_episode.setNestedScrollingEnabled(false); + if (rv_episode.getLayoutManager() == null) + rv_episode.setLayoutManager(ms); - rv_episode.setLayoutManager(ms); - rv_episode.addItemDecoration(new SpacesItemDecoration(DimenUtils.dip2px(getContext(), 10))); + if (rv_episode.getItemDecorationCount() == 0) + rv_episode.addItemDecoration(new SpacesItemDecoration(DimenUtils.dip2px(getContext(), 10))); + } + + + //璁剧疆閫変腑鐘舵�� + private void setEpisodeSelected(int position) { + mPlayingPosition = position; + episodeAdapter.setPlayingPosition(mPlayingPosition); + refresh(); + Playlocation playlocation = new Playlocation(); + playlocation.setPosition(position); + EventBus.getDefault().post(playlocation); + } + + private void setFollowData(boolean attention) { + if (attention) { + tv_cancle_follow.setText("宸插叧娉�"); + tv_cancle_follow.setCompoundDrawables(null, null, null, null); + } else { + tv_cancle_follow.setText("鍏虫敞"); + Drawable drawable = getResources().getDrawable(R.drawable.ic_follow_add); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + tv_cancle_follow.setCompoundDrawables(drawable, null, null, null); + } } @Override public void onCreateView(View contentView, Bundle savedInstanceState) { - EventBus.getDefault().register(this); - mVideoInfo = (VideoInfo) getArguments() + Log.i(TAG, "onCreateView"); + Bundle bundle = getArguments(); + mVideoInfo = (VideoInfo) bundle .getSerializable("video_info"); - mPlayingPosition = getArguments().getInt("playing_position"); - mStart = getArguments().getInt("start"); - mEnd = getArguments().getInt("end"); + mPlayingPosition = bundle.getInt("playing_position"); + mStart = bundle.getInt("start"); + mEnd = bundle.getInt("end"); + + if (bundle != null) + bundle.clear(); + + //闃叉娌℃湁鍐呭宕╂簝 + if (mVideoInfo == null) + return; tv_video_resource = contentView.findViewById(R.id.tv_video_resource); ll_add_attention = contentView.findViewById(R.id.ll_add_attention); @@ -196,19 +257,15 @@ tv_update_time = contentView.findViewById(R.id.tv_update_time); tv_cancle_follow = contentView.findViewById(R.id.tv_cancle_follow); try { - Glide.with(getActivity().getApplicationContext()).load(mVideoInfo.getAttention().getMoviePicture()).error(R.drawable.ic_default).placeholder(R.drawable.ic_default).centerCrop().into(iv_moive_img); + Glide.with(getActivity().getApplicationContext()).load(mVideoInfo.getAttention().getMoviePicture()) + .apply(new RequestOptions().centerCrop().placeholder(R.drawable.ic_default).error(R.drawable.ic_default)) + .into(iv_moive_img); } catch (IllegalArgumentException e) { e.printStackTrace(); } tv_star_name.setText(mVideoInfo.getAttention().getMovieName() + ""); tv_update_time.setText(mVideoInfo.getAttention().getUpdateInfo() + ""); - if (mVideoInfo.getAttention().isAttention()) { - tv_cancle_follow.setText("宸插叧娉�"); - tv_cancle_follow.setBackgroundResource(R.color.gray); - } else { - tv_cancle_follow.setText("鍏虫敞"); - tv_cancle_follow.setBackgroundResource(R.color.yellow); - } + setFollowData(mVideoInfo.getAttention().isAttention()); tv_cancle_follow.setOnClickListener(new View.OnClickListener() { @Override @@ -235,50 +292,72 @@ fl_native_ad1 = contentView .findViewById(R.id.fl_native_ad_1); rv_episode = contentView.findViewById(R.id.rv_episode); - loadEpisode(); - //TODO 鐐瑰嚮浜嬩欢鍝嶅簲 -// rv_episode.setOnItemClickListener(new OnItemClickListener() { -// @Override -// public void onItemClick(AdapterView<?> parent, View view, -// int position, long id) { -// VideoDetailInfo videoDetailInfo = (VideoDetailInfo) parent -// .getItemAtPosition(position); -// if (selectedUrl == null) { -// return; -// } -// mPlayingPosition = position; -// episodeAdapter = new EpisodeAdapter(mVideoInfo, -// mPlayingPosition); -// episodeAdapter2 = new EpisodeAdapter2(mVideoInfo, -// mPlayingPosition); -// refresh(); -// Playlocation playlocation = new Playlocation(); -// playlocation.setPosition(position); -// EventBus.getDefault().post(playlocation); -// getUrl(videoDetailInfo); -// } -// }); contentView.findViewById(R.id.iv_share).setOnClickListener(this); contentView.findViewById(R.id.iv_offline_cache).setOnClickListener(this); fl_report = contentView.findViewById(R.id.fl_report); iv_favourite = contentView.findViewById(R.id.iv_add_to_favourite); fl_report.setOnClickListener(this); iv_favourite.setOnClickListener(this); - + loadEpisode(); refresh(); isCollect(); loadAD1(); setFrom(mVideoInfo); + if (VideoUtil.videoEpisodeList != null && VideoUtil.videoEpisodeList.size() > 1) { + rv_episode.setVisibility(View.VISIBLE); + } else + rv_episode.setVisibility(View.GONE); + + // + rv_episode.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager(); + int first = manager.findFirstVisibleItemPosition(); + int last = manager.findLastVisibleItemPosition(); + int total = manager.getItemCount(); + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + if (mVideoInfo == null) + return; + if (!episodeLoading && episodeHasMore && last == total - 1) {//鍔犺浇鏇村 + VideoResource checkedResource = null; + for (VideoResource vr : mVideoInfo.getResourceList()) { + checkedResource = vr; + break; + } + if (checkedResource != null) { + loadMoreEpisode(mVideoInfo.getId(), checkedResource.getId(), episodePage); + } + } + } + } + + @Override + public void onScrolled(RecyclerView recyclerView, int dx, final int dy) { + super.onScrolled(recyclerView, dx, dy); + } + }); + + + EventBus.getDefault().register(this); } public void onEventMainThread(Playlocation playlocation) { mPlayingPosition = playlocation.getPosition(); - //TODO 閲嶆柊璧嬪�� - // episodeAdapter = new EpisodeAdapter(mVideoInfo, - // mPlayingPosition); +// loadEpisode(); refresh(); + } + + + public void onEventMainThread(FunshionPlayInfo info) { + Log.i(TAG, "椋庤閫夐泦锛�" + info.getPosition()); + mPlayingPosition = info.getPosition(); + episodeAdapter.setPlayingPosition(mPlayingPosition); + refresh(); + rv_episode.scrollToPosition(mPlayingPosition); } private void addAttention(String uid, String loginId) { @@ -288,8 +367,8 @@ if (jsonObject.optBoolean("IsPost")) { SingleToast.showToast(ll_add_attention.getContext(), "娣诲姞鍏虫敞鎴愬姛锛�"); mVideoInfo.getAttention().setAttention(true); - tv_cancle_follow.setText("宸插叧娉�"); - tv_cancle_follow.setBackgroundColor(getResources().getColor(R.color.gray)); + setFollowData(mVideoInfo.getAttention().isAttention()); + } } }); @@ -302,8 +381,7 @@ if (jsonObject.optBoolean("IsPost")) { SingleToast.showToast(ll_add_attention.getContext(), "鍙栨秷鍏虫敞鎴愬姛锛�"); mVideoInfo.getAttention().setAttention(false); - tv_cancle_follow.setText("鍏虫敞"); - tv_cancle_follow.setBackgroundColor(getResources().getColor(R.color.yellow)); + setFollowData(mVideoInfo.getAttention().isAttention()); } } }); @@ -311,17 +389,26 @@ @Override public void onResume() { + Log.i(TAG, "onResume锛�"); super.onResume(); } @Override public void onDestroyView() { + Log.i(TAG, "onDestroyView锛�"); super.onDestroyView(); + + } + + @Override + public void onDestroy() { + super.onDestroy(); EventBus.getDefault().unregister(this); } @Override public void onPause() { + Log.i(TAG, "onPause"); super.onPause(); } @@ -356,6 +443,12 @@ .optString("Url")); info.setParams(jsonObject.getJSONObject("Data") .optString("Params")); + info.setAid(jsonObject.getJSONObject("Data") + .optString("Aid")); + info.setVid(jsonObject.getJSONObject("Data") + .optString("Vid")); + info.setCode(jsonObject.getJSONObject("Data") + .optString("Code")); Play play = new Play(); play.setPlayUrl(info); EventBus.getDefault().post(play); @@ -385,21 +478,68 @@ * 鍒锋柊adapter */ public void refresh() { - rv_episode.setAdapter(episodeAdapter); + if (rv_episode.getAdapter() != null) + rv_episode.getAdapter().notifyDataSetChanged(); + else + rv_episode.postDelayed(new Runnable() { + @Override + public void run() { + Log.i(TAG, "refresh"); + rv_episode.setAdapter(episodeAdapter); + if (mPlayingPosition > 4) + rv_episode.scrollToPosition(mPlayingPosition); + } + }, 500); + + } // 鍔犺浇鎾斁椤电涓�鏉″箍鍛婏紝鍏堣缃姞杞戒笂涓嬫枃鐜鍜屾潯浠� private void loadAD1() { - new ExpressAdManager(ExpressAdManager.SOURCE_GDT, getContext()).loadVideoDetailAd(1, new ExpressAdManager.IAdLoadListener() { + new ExpressAdManager(AdUtil.AD_TYPE.gdt2, getContext()).loadVideoDetailPlayerBottomAd(new ExpressAdManager.IAdLoadListener() { @Override public void onSuccess(List<ExpressAdContainer> adList) { + if (adList != null && adList.size() > 0) { + fl_native_ad1.setVisibility(View.VISIBLE); + final ExpressAdContainer ad = adList.get(0); + if (getActivity() == null) + return; - ExpressAdManager.render(getActivity(), adList.get(0), fl_native_ad1, new ExpressAdManager.IAdEventListener() { - @Override - public void closeAd() { - fl_native_ad1.removeAllViews(); - } - }); + ExpressAdManager.renderAd(getActivity(), adList.get(0), new ExpressAdManager.IAdRenderListener() { + @Override + public void onRenderSuccess(List<ExpressAdContainer> adList) { + ExpressAdManager.fillAd(adList.get(0), fl_native_ad1); + } + + @Override + public void onRenderFail(List<ExpressAdContainer> adList) { + + } + }, new ExpressAdManager.IAdEventListener() { + @Override + public void closeAd(ExpressAdContainer ad) { + fl_native_ad1.removeAllViews(); + } + }); + + } else { + //鍔犺浇绌垮北鐢� + new ExpressAdManager(AdUtil.AD_TYPE.csj, getContext()).loadVideoDetailPlayerBottomAd(new ExpressAdManager.IAdLoadListener() { + @Override + public void onSuccess(List<ExpressAdContainer> adList) { + if (adList != null && adList.size() > 0) { + ExpressAdManager.renderAndFillAd(getActivity(), adList.get(0), fl_native_ad1, new ExpressAdManager.IAdEventListener() { + @Override + public void closeAd(ExpressAdContainer ad) { + fl_native_ad1.removeAllViews(); + } + }); + } else { + fl_native_ad1.setVisibility(View.GONE); + } + } + }); + } } }); } @@ -504,10 +644,15 @@ public void onEventMainThread(VideoInfo videoInfo) { mVideoInfo = videoInfo; + if (VideoUtil.videoEpisodeList != null && VideoUtil.videoEpisodeList.size() > 1) { + rv_episode.setVisibility(View.VISIBLE); + } else + rv_episode.setVisibility(View.GONE); setFrom(videoInfo); iv_favourite.setEnabled(true); fl_report.setEnabled(true); rv_episode.setAdapter(episodeAdapter); + } private void setFrom(VideoInfo info) { @@ -555,7 +700,7 @@ ListView lv = new ListView(getContext()); ListView.LayoutParams param = new ListView.LayoutParams( - FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); + FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); lv.setLayoutParams(param); lv.setOnItemClickListener(new OnItemClickListener() { @Override @@ -585,7 +730,8 @@ } }); lv.setAdapter(new ResourceAdapter(urlList)); - lv.setDividerHeight(0); + lv.setDivider(new ColorDrawable(Color.BLACK)); + lv.setDividerHeight(1); popupWindow.setContentView(lv); /* * Window dialogWindow = dialog.getWindow(); dialogWindow.get @@ -622,23 +768,15 @@ public View getView(int position, View convertView, ViewGroup parent) { View view = LayoutInflater.from(ll_add_attention.getContext()).inflate( R.layout.item_resource, null); - ImageView iv = (ImageView) view.findViewById(R.id.iv_resource); - TextView tv = (TextView) view.findViewById(R.id.tv_resource); - // if (reList.get(position) == null - // || reList.get(position).getPicture() == null) { - // ImageLoader.getInstance().displayImage( - // "drawable://" + R.drawable.from_other, iv); - // } else { - // ImageLoader.getInstance().displayImage( - // reList.get(position).getPicture(), iv, option); - // } + ImageView iv = view.findViewById(R.id.iv_resource); + TextView tv = view.findViewById(R.id.tv_resource); try { Glide.with(getActivity().getApplicationContext()) .load(reList.get(position).getPicture().contains("http://") ? reList .get(position).getPicture() : BeibeiConstant.HOST + "/BuWan/" + reList.get(position).getPicture()) - .placeholder(R.drawable.from_other) - .error(R.drawable.from_other).crossFade().into(iv); + .apply(new RequestOptions().placeholder(R.drawable.from_other).error(R.drawable.from_other)) + .into(iv); } catch (IllegalArgumentException e) { e.printStackTrace(); } @@ -702,6 +840,11 @@ .toString(), new TypeToken<VideoInfo>() { }.getType()); + if (videoInfo != null) { + + VideoUtil.saveVideoEpisodeList(BeibeiVideoApplication.application,videoInfo.getVideoDetailList(),false); + + } // 闄勫姞瀛楁 if (jsonObject.optJSONObject("Extra1") != null) { if (jsonObject.optJSONObject("Extra1").optJSONObject("Attention") != null) { @@ -719,18 +862,20 @@ if (extraData != null) videoInfo.setExtraData(extraData.toString()); - if (videoInfo.getVideoDetailList() == null - || videoInfo.getVideoDetailList().isEmpty()) { + if (VideoUtil.videoEpisodeList == null + || VideoUtil.videoEpisodeList.isEmpty()) { Toast.makeText(getContext(), "褰辩墖宸插垹闄�", Toast.LENGTH_LONG).show(); getActivity().finish(); return; } + + if (rv_episode.getAdapter() != null) + rv_episode.getAdapter().notifyDataSetChanged(); // videoInfo.setSave(jsonObject.getJSONObject("Data").optBoolean("Save")); if (isSetup) { - mVideoInfo.getVideoDetailList().clear(); - mVideoInfo.setVideoDetailList(videoInfo - .getVideoDetailList()); + VideoUtil.saveVideoEpisodeList(BeibeiVideoApplication.application,videoInfo.getVideoDetailList(),false); + EventBus.getDefault().post(videoInfo); int position = 0; // boolean isFromWatchHistory = false; @@ -748,10 +893,9 @@ "playing_position", 0); } // if (isFromWatchHistory) { - getUrl(videoInfo.getVideoDetailList().get(position)); + getUrl(VideoUtil.videoEpisodeList.get(position)); EventBus.getDefault() - .post(videoInfo - .getVideoDetailList() + .post(VideoUtil.videoEpisodeList .get(position)); // } else {// 涓嶆槸浠庤鐪嬭褰曠偣鍑昏繃鏉� --璺冲埌褰撳墠鎾斁鐨勯泦鏁� // getUrl(videoInfo.getVideoDetailList().get(position)); @@ -766,7 +910,7 @@ public void run() { EventBus.getDefault().post(videoInfo); EventBus.getDefault().post( - videoInfo.getVideoDetailList() + VideoUtil.videoEpisodeList .get(0)); } }, 200); @@ -830,4 +974,58 @@ } }); } + + /** + * 鍔犺浇鏇村鍓ч泦 + * + * @param videoId + * @param resourceId + */ + private synchronized void loadMoreEpisode(String videoId, String resourceId, int page) { + BeibeiVideoAPI.getVideoEpisodeList(ll_add_attention.getContext(), UserUtil.getUid(getContext()), resourceId, videoId, page, new + + BasicTextHttpResponseHandler() { + @Override + public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws + Exception { + if (jsonObject.optBoolean("IsPost")) { + JSONObject data = jsonObject.optJSONObject("Data"); + episodeHasMore = data.optBoolean("hasMore"); + JSONArray array = data.optJSONArray("list"); + if (array != null && array.length() > 0) {// + Gson gson = new GsonBuilder().setFieldNamingPolicy( + FieldNamingPolicy.UPPER_CAMEL_CASE) + .create(); + List<VideoDetailInfo> list = gson.fromJson(array.toString(), new TypeToken<List<VideoDetailInfo>>() { + }.getType()); + if (list != null && list.size() > 0) { + episodePage++; + VideoUtil.saveVideoEpisodeList(BeibeiVideoApplication.application,list,true); + rv_episode.getAdapter().notifyDataSetChanged(); + } + } + } + } + + @Override + public void onStart() { + super.onStart(); + episodeLoading = true; + } + + @Override + public void onFinish() { + super.onFinish(); + episodeLoading = false; + } + }); + } + + + @Override + public void onStop() { + super.onStop(); + Log.i(TAG, "onStop"); + } + } \ No newline at end of file -- Gitblit v1.8.0