pull/256/head
FongMi 2 years ago
parent 01cf6423a1
commit f3844086c4
  1. 4
      app/src/main/java/com/fongmi/android/tv/bean/Vod.java
  2. 2
      app/src/main/java/com/fongmi/android/tv/utils/Util.java
  3. 5
      app/src/mobile/AndroidManifest.xml
  4. 236
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  5. 13
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/MangaActivity.java
  6. 6
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  7. 3
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java
  8. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java
  9. 117
      app/src/mobile/res/layout/activity_detail.xml

@ -231,10 +231,6 @@ public class Vod implements Parcelable {
return getVodTag().equals("folder") || getCate() != null;
}
public boolean isManga() {
return getVodTag().equals("manga");
}
public Style getStyle(Style style) {
return getStyle() != null ? getStyle() : style != null ? style : Style.rect();
}

@ -20,6 +20,7 @@ import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.R;
import com.github.catvod.Init;
import java.text.SimpleDateFormat;
@ -72,6 +73,7 @@ public class Util {
public static void copy(String text) {
ClipboardManager manager = (ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE);
manager.setPrimaryClip(ClipData.newPlainText("", text));
Notify.show(R.string.copied);
}
public static int getDigit(String text) {

@ -118,11 +118,6 @@
android:supportsPictureInPicture="true"
android:theme="@style/AppTheme.Detail" />
<activity
android:name=".ui.activity.MangaActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout"
android:screenOrientation="fullUser" />
<receiver
android:name=".receiver.ShortcutReceiver"
android:exported="false" />

@ -1,236 +0,0 @@
package com.fongmi.android.tv.ui.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.bean.Episode;
import com.fongmi.android.tv.bean.Flag;
import com.fongmi.android.tv.bean.History;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.bean.Vod;
import com.fongmi.android.tv.databinding.ActivityDetailBinding;
import com.fongmi.android.tv.db.AppDatabase;
import com.fongmi.android.tv.event.ErrorEvent;
import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.ui.adapter.EpisodeAdapter;
import com.fongmi.android.tv.ui.adapter.FlagAdapter;
import com.fongmi.android.tv.ui.base.BaseActivity;
import com.fongmi.android.tv.ui.base.ViewType;
import com.fongmi.android.tv.ui.custom.SpaceItemDecoration;
import com.fongmi.android.tv.utils.ImgUtil;
import com.fongmi.android.tv.utils.Notify;
import java.util.List;
public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickListener, EpisodeAdapter.OnClickListener {
private ActivityDetailBinding mBinding;
private EpisodeAdapter mEpisodeAdapter;
private SiteViewModel mViewModel;
private FlagAdapter mFlagAdapter;
private History mHistory;
public static void start(Activity activity, String key, String id, String name) {
start(activity, key, id, name, null, null);
}
public static void start(Activity activity, String key, String id, String name, String pic) {
start(activity, key, id, name, pic, null);
}
public static void start(Activity activity, String key, String id, String name, String pic, String mark) {
Intent intent = new Intent(activity, DetailActivity.class);
intent.putExtra("mark", mark);
intent.putExtra("name", name);
intent.putExtra("pic", pic);
intent.putExtra("key", key);
intent.putExtra("id", id);
activity.startActivity(intent);
}
private String getName() {
return getIntent().getStringExtra("name");
}
private String getPic() {
return getIntent().getStringExtra("pic");
}
private String getMark() {
return getIntent().getStringExtra("mark");
}
private String getKey() {
return getIntent().getStringExtra("key");
}
private String getId() {
return getIntent().getStringExtra("id");
}
private String getHistoryKey() {
return getKey().concat(AppDatabase.SYMBOL).concat(getId()).concat(AppDatabase.SYMBOL) + VodConfig.getCid();
}
private Site getSite() {
return VodConfig.get().getSite(getKey());
}
private Flag getFlag() {
return mFlagAdapter.getActivated();
}
private Episode getEpisode() {
return mEpisodeAdapter.getActivated();
}
private boolean isFromCollect() {
return getCallingActivity() != null && getCallingActivity().getShortClassName().contains(CollectActivity.class.getSimpleName());
}
@Override
protected ViewBinding getBinding() {
return mBinding = ActivityDetailBinding.inflate(getLayoutInflater());
}
@Override
protected void initView(Bundle savedInstanceState) {
mBinding.progressLayout.showProgress();
setRecyclerView();
setViewModel();
getDetail();
}
@Override
protected void initEvent() {
}
private void setRecyclerView() {
mBinding.flag.setHasFixedSize(true);
mBinding.flag.setItemAnimator(null);
mBinding.flag.addItemDecoration(new SpaceItemDecoration(8));
mBinding.flag.setAdapter(mFlagAdapter = new FlagAdapter(this));
mBinding.episode.setHasFixedSize(true);
mBinding.episode.setItemAnimator(null);
mBinding.episode.setAdapter(mEpisodeAdapter = new EpisodeAdapter(this, ViewType.VERT));
}
private void setViewModel() {
mViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mViewModel.result.observe(this, this::setDetail);
mViewModel.player.observe(this, new Observer<Result>() {
@Override
public void onChanged(Result result) {
}
});
}
private void getDetail() {
mViewModel.detailContent(getKey(), getId());
}
private void setDetail(Result result) {
if (result.getList().isEmpty()) setEmpty();
else setDetail(result.getList().get(0));
Notify.show(result.getMsg());
}
private void setEmpty() {
if (isFromCollect()) {
finish();
} else {
showEmpty();
}
}
private void showEmpty() {
mBinding.progressLayout.showEmpty();
}
private void setDetail(Vod item) {
mBinding.progressLayout.showContent();
mBinding.name.setText(item.getVodName(getName()));
setText(mBinding.site, R.string.detail_site, getSite().getName());
setText(mBinding.content, 0, Html.fromHtml(item.getVodContent()).toString());
setText(mBinding.director, R.string.detail_director, Html.fromHtml(item.getVodDirector()).toString());
ImgUtil.rect(item.getVodName(), item.getVodPic(getPic()), mBinding.pic);
mFlagAdapter.addAll(item.getVodFlags());
checkHistory(item);
checkFlag(item);
checkKeepImg();
}
private void setText(TextView view, int resId, String text) {
view.setVisibility(text.isEmpty() ? View.GONE : View.VISIBLE);
view.setText(resId > 0 ? getString(resId, text) : text);
view.setTag(text);
}
private void checkHistory(Vod item) {
mHistory = History.find(getHistoryKey());
mHistory = mHistory == null ? createHistory(item) : mHistory;
if (!TextUtils.isEmpty(getMark())) mHistory.setVodRemarks(getMark());
}
private History createHistory(Vod item) {
History history = new History();
history.setKey(getHistoryKey());
history.setCid(VodConfig.getCid());
history.setVodPic(item.getVodPic());
history.setVodName(item.getVodName());
history.findEpisode(item.getVodFlags());
return history;
}
private void checkFlag(Vod item) {
boolean empty = item.getVodFlags().isEmpty();
mBinding.flag.setVisibility(empty ? View.GONE : View.VISIBLE);
if (empty) {
ErrorEvent.flag();
} else {
onItemClick(mHistory.getFlag());
if (mHistory.isRevSort()) reverseEpisode(true);
}
}
private void reverseEpisode(boolean scroll) {
mFlagAdapter.reverse();
setEpisodeAdapter(getFlag().getEpisodes());
if (scroll) mBinding.episode.scrollToPosition(mEpisodeAdapter.getPosition());
}
private void setEpisodeAdapter(List<Episode> items) {
mBinding.episode.setVisibility(items.isEmpty() ? View.GONE : View.VISIBLE);
mEpisodeAdapter.addAll(items);
}
private void checkKeepImg() {
//mBinding.keep.setImageResource(Keep.find(getHistoryKey()) == null ? R.drawable.ic_control_keep_off : R.drawable.ic_control_keep_on);
}
@Override
public void onItemClick(Flag item) {
if (item.isActivated()) return;
mFlagAdapter.setActivated(item);
mBinding.flag.scrollToPosition(mFlagAdapter.getPosition());
setEpisodeAdapter(item.getEpisodes());
}
@Override
public void onItemClick(Episode item) {
}
}

@ -1,13 +0,0 @@
package com.fongmi.android.tv.ui.activity;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.ui.base.BaseActivity;
public class MangaActivity extends BaseActivity {
@Override
protected ViewBinding getBinding() {
return null;
}
}

@ -333,6 +333,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mBinding.content.setOnClickListener(view -> onContent());
mBinding.reverse.setOnClickListener(view -> onReverse());
mBinding.name.setOnLongClickListener(view -> onChange());
mBinding.content.setOnLongClickListener(view -> onCopy());
mBinding.control.cast.setOnClickListener(view -> onCast());
mBinding.control.info.setOnClickListener(view -> onInfo());
mBinding.control.full.setOnClickListener(view -> onFull());
@ -697,6 +698,11 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
return true;
}
private boolean onCopy() {
Util.copy(mBinding.content.getText().toString());
return true;
}
private void onCast() {
CastDialog.create().history(mHistory).video(CastVideo.get(mBinding.name.getText().toString(), mPlayers.getUrl())).fm(true).show(this);
}

@ -7,9 +7,7 @@ import android.view.View;
import androidx.appcompat.app.AlertDialog;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.databinding.DialogInfoBinding;
import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.Util;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@ -82,7 +80,6 @@ public class InfoDialog {
}
private boolean onCopy(String text) {
Notify.show(R.string.copied);
Util.copy(text);
return true;
}

@ -23,7 +23,6 @@ import com.fongmi.android.tv.bean.Vod;
import com.fongmi.android.tv.databinding.FragmentTypeBinding;
import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.ui.activity.CollectActivity;
import com.fongmi.android.tv.ui.activity.DetailActivity;
import com.fongmi.android.tv.ui.activity.VideoActivity;
import com.fongmi.android.tv.ui.adapter.VodAdapter;
import com.fongmi.android.tv.ui.base.BaseFragment;
@ -221,8 +220,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
mPages.add(Page.get(item, findPosition()));
getVideo(item.getVodId(), "1");
} else {
if (item.isManga()) DetailActivity.start(getActivity(), getKey(), item.getVodId(), item.getVodName(), item.getVodPic());
else VideoActivity.start(getActivity(), getKey(), item.getVodId(), item.getVodName(), item.getVodPic(), isFolder() ? item.getVodName() : null, false);
VideoActivity.start(getActivity(), getKey(), item.getVodId(), item.getVodName(), item.getVodPic(), isFolder() ? item.getVodName() : null, false);
}
}

@ -1,117 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<com.fongmi.android.tv.ui.custom.ProgressLayout
android:id="@+id/progressLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/pic"
android:layout_width="120dp"
android:layout_height="168dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:scaleType="centerCrop"
app:shapeAppearance="@style/Vod.Grid" />
<LinearLayout
android:id="@+id/info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_toEndOf="@+id/pic"
android:gravity="center_vertical"
android:minHeight="168dp"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold"
tools:text="海賊王" />
<TextView
android:id="@+id/director"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="尾田榮一郎" />
<TextView
android:id="@+id/site"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="漫畫人" />
</LinearLayout>
<TextView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/info"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:ellipsize="end"
android:lineSpacingExtra="4dp"
android:maxLines="2"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="相傳22年前,在一個童話般的世界裡,曾經擁有一切的海賊王在走上斷頭台的時候對人們狂笑道:“想要我的財寶是嗎,想要就給你們!去找吧,全世界的寶藏都在那裡!”……自此開始,全世界勇敢的男人都離開了平庸的生活,走向了大海,向著埋藏海賊王寶藏的偉大航道挺進!世界簡直成為了大海賊時代!在某個村子的小孩莫奇。 D.路飛對“海賊王”甚為仰慕,立志要成為新一代的海賊王。因此他希望駐紮在村子的海盜團能帶他出海,可是遭船長紅發撒古斯拒絕。有一天路飛不小心偷吃了撒古斯帶來的戰利品-惡魔果實,成為了永遠不能游泳的橡皮人,令他的海盜夢想泡湯。後來路飛被一群討厭撒古斯的人捉了,在被海獸吃掉之際,被撒古斯救走,而撒古斯的手也犧牲了。撒古斯臨行前將草帽送給路飛,使他重燃起當海賊王的決心。事隔十年,苦練一身橡皮絕技的少年路飛揚帆出發,開始找尋One Piece的冒險…… 傳說開始了! !大家帶著新的誓言,終到達了“偉大航道”的入口。路飛他們攀山、過海,眼看就要闖進去了,面前郤出現了一個黑團? !圍繞著“大秘寶one piece”而展開的海洋冒險故事現在開始!" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/flag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/content"
android:layout_marginTop="16dp"
android:clipChildren="false"
android:clipToPadding="false"
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingEnd="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/adapter_flag" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/episode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/flag"
android:clipChildren="false"
android:clipToPadding="false"
android:nestedScrollingEnabled="false"
android:orientation="vertical"
android:padding="8dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/adapter_episode_vert" />
</com.fongmi.android.tv.ui.custom.ProgressLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
Loading…
Cancel
Save