diff --git a/app/src/main/java/com/github/tvbox/osc/base/App.java b/app/src/main/java/com/github/tvbox/osc/base/App.java index 86c580d8..5fce938b 100644 --- a/app/src/main/java/com/github/tvbox/osc/base/App.java +++ b/app/src/main/java/com/github/tvbox/osc/base/App.java @@ -52,7 +52,6 @@ public class App extends MultiDexApplication { if (!Hawk.contains(HawkConfig.PLAY_TYPE)) { Hawk.put(HawkConfig.PLAY_TYPE, 1); } - Hawk.put(HawkConfig.HOME_REC, 2); } public static App getInstance() { diff --git a/app/src/main/java/com/github/tvbox/osc/bean/VodInfo.java b/app/src/main/java/com/github/tvbox/osc/bean/VodInfo.java index 66736b49..e60a5fb5 100644 --- a/app/src/main/java/com/github/tvbox/osc/bean/VodInfo.java +++ b/app/src/main/java/com/github/tvbox/osc/bean/VodInfo.java @@ -47,6 +47,7 @@ public class VodInfo implements Serializable { public String des;// getAllVodRecord() { - List recordList = AppDataManager.get().getVodRecordDao().getAll(); + public static List getAllVodRecord(int limit) { + List recordList = AppDataManager.get().getVodRecordDao().getAll(limit); List vodInfoList = new ArrayList<>(); if (recordList != null) { for (VodRecord record : recordList) { diff --git a/app/src/main/java/com/github/tvbox/osc/cache/VodRecordDao.java b/app/src/main/java/com/github/tvbox/osc/cache/VodRecordDao.java index 7f814ff0..9484b6ae 100644 --- a/app/src/main/java/com/github/tvbox/osc/cache/VodRecordDao.java +++ b/app/src/main/java/com/github/tvbox/osc/cache/VodRecordDao.java @@ -18,8 +18,8 @@ public interface VodRecordDao { @Insert(onConflict = OnConflictStrategy.REPLACE) long insert(VodRecord record); - @Query("select * from vodRecord order by updateTime desc") - List getAll(); + @Query("select * from vodRecord order by updateTime desc limit :size") + List getAll(int size); @Query("select * from vodRecord where `sourceKey`=:sourceKey and `vodId`=:vodId") VodRecord getVodRecord(String sourceKey, String vodId); diff --git a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java index 1acdef33..fec22efe 100644 --- a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java +++ b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java @@ -181,7 +181,7 @@ public class VodController extends BaseController { mNextBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { - listener.playNext(); + listener.playNext(false); hideBottom(); } }); @@ -362,7 +362,7 @@ public class VodController extends BaseController { } public interface VodControlListener { - void playNext(); + void playNext(boolean rmProgress); void playPre(); @@ -398,7 +398,7 @@ public class VodController extends BaseController { } if (et > 0 && position + (et * 1000) >= duration) { skipEnd = false; - listener.playNext(); + listener.playNext(true); } } mCurrentTime.setText(PlayerUtils.stringForTime(position)); @@ -485,7 +485,7 @@ public class VodController extends BaseController { case VideoView.STATE_BUFFERING: break; case VideoView.STATE_PLAYBACK_COMPLETED: - listener.playNext(); + listener.playNext(true); break; } } diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java index db7c6aae..c294ded1 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java @@ -568,6 +568,11 @@ public class DetailActivity extends BaseActivity { } private void insertVod(String sourceKey, VodInfo vodInfo) { + try { + vodInfo.playNote = vodInfo.seriesMap.get(vodInfo.playFlag).get(vodInfo.playIndex).name; + } catch (Throwable th) { + vodInfo.playNote = ""; + } RoomDataManger.insertVodRecord(sourceKey, vodInfo); EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_HISTORY_REFRESH)); } diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/HistoryActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/HistoryActivity.java index 9f88bf95..e95314d3 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/HistoryActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/HistoryActivity.java @@ -142,7 +142,7 @@ public class HistoryActivity extends BaseActivity { } private void initData() { - List allVodRecord = RoomDataManger.getAllVodRecord(); + List allVodRecord = RoomDataManger.getAllVodRecord(100); List vodInfoList = new ArrayList<>(); for (VodInfo vodInfo : allVodRecord) { vodInfoList.add(vodInfo); diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/HomeActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/HomeActivity.java index 5c217915..8610808c 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/HomeActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/HomeActivity.java @@ -347,19 +347,6 @@ public class HomeActivity extends BaseActivity { if (data.id.equals("my0")) { if (Hawk.get(HawkConfig.HOME_REC, 0) == 1 && absXml.videoList != null && absXml.videoList.size() > 0) { fragments.add(UserFragment.newInstance(absXml.videoList)); - } else if (Hawk.get(HawkConfig.HOME_REC, 0) == 2) { - List allVodRecord = RoomDataManger.getAllVodRecord(); - List vodList = new ArrayList<>(); - for (VodInfo vodInfo : allVodRecord) { - Movie.Video vod = new Movie.Video(); - vod.id = vodInfo.id; - vod.sourceKey = vodInfo.sourceKey; - vod.name = vodInfo.name; - vod.pic = vodInfo.pic; - /*vod.note = "最近看过" + vodInfo.playIndex;*/ - vodList.add(vod); - } - fragments.add(UserFragment.newInstance(vodList)); } else { fragments.add(UserFragment.newInstance(null)); } diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java index d78f00c5..d065f966 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java @@ -120,7 +120,7 @@ public class PlayActivity extends BaseActivity { mController.setCanChangePosition(true); mController.setEnableInNormal(true); mController.setGestureEnabled(true); - mVideoView.setProgressManager(new ProgressManager() { + ProgressManager progressManager = new ProgressManager() { @Override public void saveProgress(String url, long progress) { CacheManager.save(MD5.string2MD5(url), progress); @@ -143,11 +143,15 @@ public class PlayActivity extends BaseActivity { return skip; return rec; } - }); + }; + mVideoView.setProgressManager(progressManager); mController.setListener(new VodController.VodControlListener() { @Override - public void playNext() { + public void playNext(boolean rmProgress) { + String preProgressKey = progressKey; PlayActivity.this.playNext(); + if (rmProgress && preProgressKey != null) + CacheManager.delete(MD5.string2MD5(preProgressKey), 0); } @Override diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/SearchActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/SearchActivity.java index f0e57834..91019c4f 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/SearchActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/SearchActivity.java @@ -28,6 +28,7 @@ import com.github.tvbox.osc.ui.dialog.RemoteDialog; import com.github.tvbox.osc.ui.tv.QRCodeGen; import com.github.tvbox.osc.ui.tv.widget.SearchKeyboard; import com.github.tvbox.osc.util.FastClickCheckUtil; +import com.github.tvbox.osc.util.HawkConfig; import com.github.tvbox.osc.viewmodel.SourceViewModel; import com.google.gson.JsonArray; import com.google.gson.JsonElement; @@ -36,7 +37,9 @@ import com.google.gson.JsonParser; import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.AbsCallback; import com.lzy.okgo.model.Response; +import com.orhanobut.hawk.Hawk; import com.owen.tvrecyclerview.widget.TvRecyclerView; +import com.owen.tvrecyclerview.widget.V7GridLayoutManager; import com.owen.tvrecyclerview.widget.V7LinearLayoutManager; import org.greenrobot.eventbus.EventBus; @@ -120,9 +123,11 @@ public class SearchActivity extends BaseActivity { }); mGridView.setHasFixedSize(true); // lite - mGridView.setLayoutManager(new V7LinearLayoutManager(this.mContext, 1, false)); - // with preview - // mGridView.setLayoutManager(new V7GridLayoutManager(this.mContext, 3)); + if (Hawk.get(HawkConfig.SEARCH_VIEW, 0) == 0) + mGridView.setLayoutManager(new V7LinearLayoutManager(this.mContext, 1, false)); + // with preview + else + mGridView.setLayoutManager(new V7GridLayoutManager(this.mContext, 3)); searchAdapter = new SearchAdapter(); mGridView.setAdapter(searchAdapter); searchAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { diff --git a/app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java b/app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java index f506f519..41fc1768 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java @@ -31,6 +31,7 @@ public class HomeHotVodAdapter extends BaseQuickAdapter { public SearchAdapter() { - super(R.layout.item_search_lite, new ArrayList<>()); + super(Hawk.get(HawkConfig.SEARCH_VIEW, 0) == 0 ? R.layout.item_search_lite : R.layout.item_search, new ArrayList<>()); } @Override protected void convert(BaseViewHolder helper, Movie.Video item) { // lite - helper.setText(R.id.tvName, String.format("%s %s %s %s", ApiConfig.get().getSource(item.sourceKey).getName(), item.name, item.type == null ? "" : item.type, item.note == null ? "" : item.note)); - // with preview - /* - helper.setText(R.id.tvName, item.name); - helper.setText(R.id.tvSite, ApiConfig.get().getSource(item.sourceKey).getName()); - helper.setVisible(R.id.tvNote, item.note != null && !item.note.isEmpty()); - if (item.note != null && !item.note.isEmpty()) { - helper.setText(R.id.tvNote, item.note); - } - ImageView ivThumb = helper.getView(R.id.ivThumb); - if (!TextUtils.isEmpty(item.pic)) { - Picasso.get() - .load(item.pic) - .transform(new RoundTransformation(MD5.string2MD5(item.pic + "position=" + helper.getLayoutPosition())) - .centerCorp(true) - .override(AutoSizeUtils.mm2px(mContext, 300), AutoSizeUtils.mm2px(mContext, 400)) - .roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL)) - .placeholder(R.drawable.error_loading) - .error(R.drawable.error_loading) - .into(ivThumb); - } else { - ivThumb.setImageResource(R.drawable.error_loading); + if (Hawk.get(HawkConfig.SEARCH_VIEW, 0) == 0) { + helper.setText(R.id.tvName, String.format("%s %s %s %s", ApiConfig.get().getSource(item.sourceKey).getName(), item.name, item.type == null ? "" : item.type, item.note == null ? "" : item.note)); + } else {// with preview + helper.setText(R.id.tvName, item.name); + helper.setText(R.id.tvSite, ApiConfig.get().getSource(item.sourceKey).getName()); + helper.setVisible(R.id.tvNote, item.note != null && !item.note.isEmpty()); + if (item.note != null && !item.note.isEmpty()) { + helper.setText(R.id.tvNote, item.note); + } + ImageView ivThumb = helper.getView(R.id.ivThumb); + if (!TextUtils.isEmpty(item.pic)) { + Picasso.get() + .load(item.pic) + .transform(new RoundTransformation(MD5.string2MD5(item.pic + "position=" + helper.getLayoutPosition())) + .centerCorp(true) + .override(AutoSizeUtils.mm2px(mContext, 300), AutoSizeUtils.mm2px(mContext, 400)) + .roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL)) + .placeholder(R.drawable.img_loading_placeholder) + .error(R.drawable.img_loading_placeholder) + .into(ivThumb); + } else { + ivThumb.setImageResource(R.drawable.img_loading_placeholder); + } } - */ } } \ No newline at end of file diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java index e2c4f495..713bd240 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java @@ -51,6 +51,8 @@ public class ModelSettingFragment extends BaseLazyFragment { private TextView tvApi; private TextView tvHomeApi; private TextView tvDns; + private TextView tvHomeRec; + private TextView tvSearchView; public static ModelSettingFragment newInstance() { return new ModelSettingFragment().setArguments(); @@ -76,11 +78,15 @@ public class ModelSettingFragment extends BaseLazyFragment { tvApi = findViewById(R.id.tvApi); tvHomeApi = findViewById(R.id.tvHomeApi); tvDns = findViewById(R.id.tvDns); + tvHomeRec = findViewById(R.id.tvHomeRec); + tvSearchView = findViewById(R.id.tvSearchView); tvMediaCodec.setText(Hawk.get(HawkConfig.IJK_CODEC, "")); tvDebugOpen.setText(Hawk.get(HawkConfig.DEBUG_OPEN, false) ? "已打开" : "已关闭"); tvParseWebView.setText(Hawk.get(HawkConfig.PARSE_WEBVIEW, true) ? "系统自带" : "XWalkView"); tvApi.setText(Hawk.get(HawkConfig.API_URL, "")); tvDns.setText(OkGoHelper.dnsHttpsList.get(Hawk.get(HawkConfig.DOH_URL, 0))); + tvHomeRec.setText(getHomeRecName(Hawk.get(HawkConfig.HOME_REC, 0))); + tvSearchView.setText(getSearchView(Hawk.get(HawkConfig.SEARCH_VIEW, 0))); tvHomeApi.setText(ApiConfig.get().getHomeSourceBean().getName()); tvScale.setText(PlayerHelper.getScaleName(Hawk.get(HawkConfig.PLAY_SCALE, 0))); tvPlay.setText(PlayerHelper.getPlayerName(Hawk.get(HawkConfig.PLAY_TYPE, 0))); @@ -377,6 +383,77 @@ public class ModelSettingFragment extends BaseLazyFragment { dialog.show(); } }); + findViewById(R.id.llHomeRec).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + FastClickCheckUtil.check(v); + int defaultPos = Hawk.get(HawkConfig.HOME_REC, 0); + ArrayList types = new ArrayList<>(); + types.add(0); + types.add(1); + types.add(2); + SelectDialog dialog = new SelectDialog<>(mActivity); + dialog.setTip("请选择首页列表数据"); + dialog.setAdapter(new SelectDialogAdapter.SelectDialogInterface() { + @Override + public void click(Integer value, int pos) { + Hawk.put(HawkConfig.HOME_REC, value); + tvHomeRec.setText(getHomeRecName(value)); + } + + @Override + public String getDisplay(Integer val) { + return getHomeRecName(val); + } + }, new DiffUtil.ItemCallback() { + @Override + public boolean areItemsTheSame(@NonNull @NotNull Integer oldItem, @NonNull @NotNull Integer newItem) { + return oldItem.intValue() == newItem.intValue(); + } + + @Override + public boolean areContentsTheSame(@NonNull @NotNull Integer oldItem, @NonNull @NotNull Integer newItem) { + return oldItem.intValue() == newItem.intValue(); + } + }, types, defaultPos); + dialog.show(); + } + }); + findViewById(R.id.llSearchView).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + FastClickCheckUtil.check(v); + int defaultPos = Hawk.get(HawkConfig.SEARCH_VIEW, 0); + ArrayList types = new ArrayList<>(); + types.add(0); + types.add(1); + SelectDialog dialog = new SelectDialog<>(mActivity); + dialog.setTip("请选择搜索视图"); + dialog.setAdapter(new SelectDialogAdapter.SelectDialogInterface() { + @Override + public void click(Integer value, int pos) { + Hawk.put(HawkConfig.SEARCH_VIEW, value); + tvSearchView.setText(getSearchView(value)); + } + + @Override + public String getDisplay(Integer val) { + return getSearchView(val); + } + }, new DiffUtil.ItemCallback() { + @Override + public boolean areItemsTheSame(@NonNull @NotNull Integer oldItem, @NonNull @NotNull Integer newItem) { + return oldItem.intValue() == newItem.intValue(); + } + + @Override + public boolean areContentsTheSame(@NonNull @NotNull Integer oldItem, @NonNull @NotNull Integer newItem) { + return oldItem.intValue() == newItem.intValue(); + } + }, types, defaultPos); + dialog.show(); + } + }); SettingActivity.callback = new SettingActivity.DevModeCallback() { @Override public void onChange() { @@ -390,4 +467,22 @@ public class ModelSettingFragment extends BaseLazyFragment { super.onDestroyView(); SettingActivity.callback = null; } + + String getHomeRecName(int type) { + if (type == 1) { + return "站点推荐"; + } else if (type == 2) { + return "观看历史"; + } else { + return "豆瓣热播"; + } + } + + String getSearchView(int type) { + if (type == 0) { + return "文字列表"; + } else { + return "缩略图"; + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java index dc03fbbe..21546595 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java @@ -11,6 +11,8 @@ import com.github.tvbox.osc.R; import com.github.tvbox.osc.api.ApiConfig; import com.github.tvbox.osc.base.BaseLazyFragment; import com.github.tvbox.osc.bean.Movie; +import com.github.tvbox.osc.bean.VodInfo; +import com.github.tvbox.osc.cache.RoomDataManger; import com.github.tvbox.osc.event.ServerEvent; import com.github.tvbox.osc.ui.activity.CollectActivity; import com.github.tvbox.osc.ui.activity.DetailActivity; @@ -53,7 +55,7 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen private LinearLayout tvCollect; private LinearLayout tvPush; private HomeHotVodAdapter homeHotVodAdapter; - private List recVod; + private List homeSourceRec; public static UserFragment newInstance() { return new UserFragment(); @@ -64,10 +66,30 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen } public UserFragment setArguments(List recVod) { - this.recVod = recVod; + this.homeSourceRec = recVod; return this; } + @Override + protected void onFragmentResume() { + super.onFragmentResume(); + if (Hawk.get(HawkConfig.HOME_REC, 0) == 2) { + List allVodRecord = RoomDataManger.getAllVodRecord(10); + List vodList = new ArrayList<>(); + for (VodInfo vodInfo : allVodRecord) { + Movie.Video vod = new Movie.Video(); + vod.id = vodInfo.id; + vod.sourceKey = vodInfo.sourceKey; + vod.name = vodInfo.name; + vod.pic = vodInfo.pic; + if (vodInfo.playNote != null && !vodInfo.playNote.isEmpty()) + vod.note = "上次看到" + vodInfo.playNote; + vodList.add(vod); + } + homeHotVodAdapter.setNewData(vodList); + } + } + @Override protected int getLayoutResID() { return R.layout.fragment_user; @@ -137,11 +159,13 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen } private void initHomeHotVod(HomeHotVodAdapter adapter) { - if (Hawk.get(HawkConfig.HOME_REC, 0) != 0) { - if (recVod != null) { - adapter.setNewData(recVod); + if (Hawk.get(HawkConfig.HOME_REC, 0) == 1) { + if (homeSourceRec != null) { + adapter.setNewData(homeSourceRec); } return; + } else if (Hawk.get(HawkConfig.HOME_REC, 0) == 2) { + return; } try { Calendar cal = Calendar.getInstance(); diff --git a/app/src/main/java/com/github/tvbox/osc/util/HawkConfig.java b/app/src/main/java/com/github/tvbox/osc/util/HawkConfig.java index 9115c65d..1a1ffc11 100644 --- a/app/src/main/java/com/github/tvbox/osc/util/HawkConfig.java +++ b/app/src/main/java/com/github/tvbox/osc/util/HawkConfig.java @@ -20,4 +20,5 @@ public class HawkConfig { public static final String PLAY_TIME_STEP = "play_time_step"; //0 texture 2 public static final String DOH_URL = "doh_url"; public static final String HOME_REC = "home_rec"; // 0 豆瓣热播 1 数据源推荐 2 历史 + public static final String SEARCH_VIEW = "search_view"; // 0 列表 1 缩略图 } \ No newline at end of file diff --git a/app/src/main/res/layout/item_user_hot_vod.xml b/app/src/main/res/layout/item_user_hot_vod.xml index 90cbad05..17353dc3 100644 --- a/app/src/main/res/layout/item_user_hot_vod.xml +++ b/app/src/main/res/layout/item_user_hot_vod.xml @@ -32,8 +32,9 @@ android:layout_marginEnd="@dimen/vs_5" android:layout_marginRight="@dimen/vs_5" android:background="@drawable/shape_thumb_year" - android:ellipsize="end" + android:ellipsize="marquee" android:gravity="center" + android:marqueeRepeatLimit="marquee_forever" android:paddingLeft="@dimen/vs_5" android:paddingRight="@dimen/vs_5" android:singleLine="true"