mirror of
https://github.com/sifacaii/VlcJellyfin
synced 2025-05-26 06:20:20 -04:00
播放列表修改
This commit is contained in:
parent
22c527d7b2
commit
702296f1d7
@ -0,0 +1,86 @@
|
|||||||
|
package org.sifacai.vlcjellyfin.Component;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.view.Gravity;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import org.sifacai.vlcjellyfin.Bean.Item;
|
||||||
|
import org.sifacai.vlcjellyfin.R;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import me.jessyan.autosize.utils.AutoSizeUtils;
|
||||||
|
|
||||||
|
public class JTAdapter extends RecyclerView.Adapter {
|
||||||
|
|
||||||
|
private String TAG = "JAdapter:";
|
||||||
|
private List<Item> items;
|
||||||
|
public JAdapter.OnItemClickListener listener;
|
||||||
|
|
||||||
|
public JTAdapter(List<Item> items) {
|
||||||
|
this.items = items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnItemClickListener(JAdapter.OnItemClickListener listener) {
|
||||||
|
this.listener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
Context c = parent.getContext();
|
||||||
|
TextView tv = new TextView(c);
|
||||||
|
// tv.setLayoutParams(new ViewGroup.LayoutParams(R.dimen.vertical_cover_width, R.dimen.title_height));
|
||||||
|
tv.setWidth(AutoSizeUtils.dp2px(c, 270));
|
||||||
|
tv.setHeight(AutoSizeUtils.dp2px(c, 32));
|
||||||
|
tv.setEllipsize(TextUtils.TruncateAt.MARQUEE);
|
||||||
|
//tv.setMarqueeRepeatLimit();
|
||||||
|
tv.setPadding(0, 0, 0, 0);
|
||||||
|
tv.setGravity(Gravity.CENTER);
|
||||||
|
tv.setSingleLine(true);
|
||||||
|
tv.setFocusable(true);
|
||||||
|
tv.setBackgroundResource(R.drawable.shape_user_focus_vholder);
|
||||||
|
return new RecyclerView.ViewHolder(tv) {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||||
|
Item it = items.get(position);
|
||||||
|
String path = it.getPath();
|
||||||
|
if (path != null) {
|
||||||
|
int pos = path.lastIndexOf("/");
|
||||||
|
if (pos >= 0) path = path.substring(pos + 1);
|
||||||
|
int ppos = path.lastIndexOf(".");
|
||||||
|
if (ppos >= 0) path = path.substring(0, ppos);
|
||||||
|
} else {
|
||||||
|
path = "第 " + position + " 集";
|
||||||
|
}
|
||||||
|
String filename = items.get(position).getName();
|
||||||
|
TextView tv = (TextView) holder.itemView;
|
||||||
|
tv.setText(path);
|
||||||
|
tv.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
if (listener != null) listener.onClick(it);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return items.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Item> getData() {
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
}
|
@ -23,6 +23,7 @@ import org.sifacai.vlcjellyfin.Bean.People;
|
|||||||
import org.sifacai.vlcjellyfin.Bean.UserData;
|
import org.sifacai.vlcjellyfin.Bean.UserData;
|
||||||
import org.sifacai.vlcjellyfin.Component.JAdapter;
|
import org.sifacai.vlcjellyfin.Component.JAdapter;
|
||||||
import org.sifacai.vlcjellyfin.Component.JRecyclerView;
|
import org.sifacai.vlcjellyfin.Component.JRecyclerView;
|
||||||
|
import org.sifacai.vlcjellyfin.Component.JTAdapter;
|
||||||
import org.sifacai.vlcjellyfin.Utils.JfClient;
|
import org.sifacai.vlcjellyfin.Utils.JfClient;
|
||||||
import org.sifacai.vlcjellyfin.R;
|
import org.sifacai.vlcjellyfin.R;
|
||||||
import org.sifacai.vlcjellyfin.Utils.Utils;
|
import org.sifacai.vlcjellyfin.Utils.Utils;
|
||||||
@ -42,6 +43,7 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick
|
|||||||
private JRecyclerView mPeopleGridView;
|
private JRecyclerView mPeopleGridView;
|
||||||
private LinearLayout tvPeopleLayout;
|
private LinearLayout tvPeopleLayout;
|
||||||
private TabLayout tabContainer;
|
private TabLayout tabContainer;
|
||||||
|
private Item currentItem;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -79,7 +81,13 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick
|
|||||||
JfClient.GetItemInfo(itemId, new JfClient.JJCallBack() {
|
JfClient.GetItemInfo(itemId, new JfClient.JJCallBack() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Item item) {
|
public void onSuccess(Item item) {
|
||||||
fillDetails(item);
|
String type = item.getType();
|
||||||
|
if (type.equals("Season") || type.equals("Episode")) {
|
||||||
|
currentItem = item;
|
||||||
|
initData(item.getSeriesId());
|
||||||
|
} else {
|
||||||
|
fillDetails(item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, new JfClient.JJCallBack() {
|
}, new JfClient.JJCallBack() {
|
||||||
@Override
|
@Override
|
||||||
@ -118,10 +126,12 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick
|
|||||||
if (mstype.equals("Video")) {
|
if (mstype.equals("Video")) {
|
||||||
video += ms.getDisplayTitle();
|
video += ms.getDisplayTitle();
|
||||||
} else if (mstype.equals("Audio")) {
|
} else if (mstype.equals("Audio")) {
|
||||||
if (ms.getLanguage()!=null && !ms.getLanguage().equals("")) audio += ms.getLanguage() + "、";
|
if (ms.getLanguage() != null && !ms.getLanguage().equals(""))
|
||||||
|
audio += ms.getLanguage() + "、";
|
||||||
else audio += ms.getCodec() + ";";
|
else audio += ms.getCodec() + ";";
|
||||||
} else if (mstype.equals("Subtitle")) {
|
} else if (mstype.equals("Subtitle")) {
|
||||||
if (ms.getLanguage() != null && !ms.getLanguage().equals("")) subtitle += ms.getLanguage() + "、";
|
if (ms.getLanguage() != null && !ms.getLanguage().equals(""))
|
||||||
|
subtitle += ms.getLanguage() + "、";
|
||||||
else subtitle += ms.getCodec() + ";";
|
else subtitle += ms.getCodec() + ";";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -135,24 +145,12 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick
|
|||||||
//填充列表
|
//填充列表
|
||||||
String type = details.getType();
|
String type = details.getType();
|
||||||
if (type.equals("Series")) {
|
if (type.equals("Series")) {
|
||||||
fillSeason(ItemId);
|
fillSeason(details.getId());
|
||||||
} else if (type.equals("Season")) {
|
|
||||||
String SeriesName = details.getSeriesName() == null ? "" : details.getSeriesName() + "-";
|
|
||||||
tvTitle.setText(SeriesName + details.getName());
|
|
||||||
String SeriesId = details.getSeriesId();
|
|
||||||
fillEpisodes(SeriesId, ItemId);
|
|
||||||
} else if (type.equals("Episode")) {
|
|
||||||
String SeriesName = details.getSeriesName() == null ? "" : details.getSeriesName() + "-";
|
|
||||||
String SeasonName = details.getSeasonName() == null ? "" : details.getSeasonName();
|
|
||||||
tvTitle.setText(SeriesName + SeasonName);
|
|
||||||
String SeriesId = details.getSeriesId();
|
|
||||||
String SeasonId = details.getSeasonId();
|
|
||||||
fillEpisodes(SeriesId, SeasonId);
|
|
||||||
} else if (type.equals("Movie")) {
|
} else if (type.equals("Movie")) {
|
||||||
fillMovie(details);
|
fillMovie(details, details.getId());
|
||||||
} else if (type.equals("Person")) {
|
} else if (type.equals("Person")) {
|
||||||
tvDetails.append("\n出生日期:" + Utils.UtcToLocal(details.getPremiereDate()) + "\n");
|
tvDetails.append("\n出生日期:" + Utils.UtcToLocal(details.getPremiereDate()) + "\n");
|
||||||
if(null != details.getProductionLocations()) {
|
if (null != details.getProductionLocations()) {
|
||||||
tvDetails.append("出生地:" + String.join(",", details.getProductionLocations()));
|
tvDetails.append("出生地:" + String.join(",", details.getProductionLocations()));
|
||||||
}
|
}
|
||||||
fillItemsByPerson(Id);
|
fillItemsByPerson(Id);
|
||||||
@ -166,8 +164,7 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fillMovie(Item item) {
|
private void fillMovie(Item item, String focusId) {
|
||||||
|
|
||||||
item.setName("播放: " + item.getName());
|
item.setName("播放: " + item.getName());
|
||||||
List<Item> plist = new ArrayList<>();
|
List<Item> plist = new ArrayList<>();
|
||||||
plist.add(item);
|
plist.add(item);
|
||||||
@ -193,7 +190,28 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick
|
|||||||
JfClient.GetSeasons(SeriesId, new JfClient.JJCallBack() {
|
JfClient.GetSeasons(SeriesId, new JfClient.JJCallBack() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Items seasons) {
|
public void onSuccess(Items seasons) {
|
||||||
fillItems(seasons.getItems());
|
for (Item item : seasons.getItems()) {
|
||||||
|
TabLayout.Tab tab = tabContainer.newTab();
|
||||||
|
tab.setText(item.getName());
|
||||||
|
tab.view.setTag(item);
|
||||||
|
tab.view.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
Item it = (Item) view.getTag();
|
||||||
|
fillEpisodes(it.getSeriesId(), it.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
tabContainer.addTab(tab);
|
||||||
|
if (currentItem != null && currentItem.getSeasonId() != null) {
|
||||||
|
if (item.getId().equals(currentItem.getSeasonId())) {
|
||||||
|
tab.view.setSelected(true);
|
||||||
|
tab.view.performClick();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tabContainer.getTabAt(0).view.performClick();
|
||||||
|
}
|
||||||
|
//tabContainer.getTabAt(0).view.setFocusable(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, errcb);
|
}, errcb);
|
||||||
}
|
}
|
||||||
@ -215,47 +233,14 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void fillItems(List<Item> items) {
|
private void fillItems(List<Item> items) {
|
||||||
for (Item item:items) {
|
JTAdapter jtAdapter = new JTAdapter(items);
|
||||||
TabLayout.Tab tab = tabContainer.newTab();
|
V7GridLayoutManager layoutManager = new V7GridLayoutManager(mGridView.getContext(), 6);
|
||||||
tab.setText(item.getName());
|
jtAdapter.setOnItemClickListener(this);
|
||||||
tab.view.setTag(item);
|
mGridView.setVisibility(View.VISIBLE);
|
||||||
tab.view.setOnClickListener(new View.OnClickListener() {
|
mGridView.setLayoutManager(layoutManager);
|
||||||
@Override
|
mGridView.setAdapter(jtAdapter);
|
||||||
public void onClick(View view) {
|
|
||||||
Item it = (Item)view.getTag();
|
|
||||||
Log.d(TAG, "onClick: " + it.getName());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
tabContainer.addTab(tab);
|
|
||||||
}
|
|
||||||
tabContainer.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
|
|
||||||
@Override
|
|
||||||
public void onTabSelected(TabLayout.Tab tab) {
|
|
||||||
Log.d(TAG, "onTabSelected: " );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTabUnselected(TabLayout.Tab tab) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTabReselected(TabLayout.Tab tab) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// JAdapter jAdapter = new JAdapter(items, false);
|
|
||||||
// V7LinearLayoutManager layoutManager = new V7LinearLayoutManager(mGridView.getContext());
|
|
||||||
// layoutManager.setOrientation(V7LinearLayoutManager.HORIZONTAL);
|
|
||||||
// jAdapter.setOnItemClickListener(this);
|
|
||||||
// mGridView.setVisibility(View.VISIBLE);
|
|
||||||
// mGridView.setLayoutManager(layoutManager);
|
|
||||||
// mGridView.setAdapter(jAdapter);
|
|
||||||
dismissLoadingDialog();
|
dismissLoadingDialog();
|
||||||
if(tabContainer.getTabCount() > 0) {
|
mGridView.requestFocus();
|
||||||
tabContainer.getTabAt(0).view.requestFocus();
|
|
||||||
}
|
|
||||||
// mGridView.requestFocus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -328,14 +313,15 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick
|
|||||||
String itemId = item.getId();
|
String itemId = item.getId();
|
||||||
String type = item.getType();
|
String type = item.getType();
|
||||||
Intent intent = null;
|
Intent intent = null;
|
||||||
if (type.equals("Season")) {
|
// if (type.equals("Season")) {
|
||||||
intent = new Intent(this, DetailActivity.class);
|
// intent = new Intent(this, DetailActivity.class);
|
||||||
intent.putExtra("itemId", itemId);
|
// intent.putExtra("itemId", itemId);
|
||||||
startActivity(intent);
|
// startActivity(intent);
|
||||||
} else if (type.equals("Episode")) {
|
// } else
|
||||||
|
if (type.equals("Episode")) {
|
||||||
JfClient.playList.clear();
|
JfClient.playList.clear();
|
||||||
JAdapter JA = (JAdapter) mGridView.getAdapter();
|
JTAdapter JT = (JTAdapter) mGridView.getAdapter();
|
||||||
List<Item> ja = JA.getData();
|
List<Item> ja = JT.getData();
|
||||||
if (ja != null) {
|
if (ja != null) {
|
||||||
for (int i = 0; i < ja.size(); i++) {
|
for (int i = 0; i < ja.size(); i++) {
|
||||||
Video media = getMedia(ja.get(i));
|
Video media = getMedia(ja.get(i));
|
||||||
@ -379,13 +365,13 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick
|
|||||||
|
|
||||||
public void toVlcPlayer() {
|
public void toVlcPlayer() {
|
||||||
Intent intent;
|
Intent intent;
|
||||||
if(JfClient.config.isExtensionPlayer()){
|
if (JfClient.config.isExtensionPlayer()) {
|
||||||
String videourl = JfClient.playList.get(JfClient.playIndex).Url;
|
String videourl = JfClient.playList.get(JfClient.playIndex).Url;
|
||||||
Uri uri = Uri.parse(videourl);
|
Uri uri = Uri.parse(videourl);
|
||||||
intent = new Intent();
|
intent = new Intent();
|
||||||
intent.setAction(Intent.ACTION_VIEW);
|
intent.setAction(Intent.ACTION_VIEW);
|
||||||
intent.setDataAndType(uri,"video/mp4");
|
intent.setDataAndType(uri, "video/mp4");
|
||||||
}else{
|
} else {
|
||||||
intent = new Intent(this, VlcPlayerActivity.class);
|
intent = new Intent(this, VlcPlayerActivity.class);
|
||||||
}
|
}
|
||||||
this.startActivity(intent);
|
this.startActivity(intent);
|
||||||
|
Loading…
Reference in New Issue
Block a user