Add local danmeku load

pull/589/head
FongMi 10 months ago
parent 443b2c43cd
commit 9d3f808cea
  1. 16
      app/src/main/java/com/fongmi/android/tv/bean/Danmaku.java
  2. 23
      app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java
  3. 7
      app/src/mobile/res/layout/dialog_danmaku.xml

@ -4,6 +4,7 @@ import android.text.TextUtils;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import java.io.File;
import java.util.List; import java.util.List;
public class Danmaku { public class Danmaku {
@ -16,12 +17,27 @@ public class Danmaku {
private boolean selected; private boolean selected;
public static List<Danmaku> from(String path) { public static List<Danmaku> from(String path) {
if (path.startsWith("http")) {
return http(path);
} else {
return file(path);
}
}
public static List<Danmaku> http(String path) {
Danmaku danmaku = new Danmaku(); Danmaku danmaku = new Danmaku();
danmaku.setName(path); danmaku.setName(path);
danmaku.setUrl(path); danmaku.setUrl(path);
return List.of(danmaku); return List.of(danmaku);
} }
public static List<Danmaku> file(String path) {
Danmaku danmaku = new Danmaku();
danmaku.setName(new File(path).getName());
danmaku.setUrl("file:/" + path);
return List.of(danmaku);
}
public static Danmaku empty() { public static Danmaku empty() {
return new Danmaku(); return new Danmaku();
} }

@ -1,6 +1,8 @@
package com.fongmi.android.tv.ui.dialog; package com.fongmi.android.tv.ui.dialog;
import android.app.Activity;
import android.content.Intent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -9,13 +11,16 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.media3.common.MimeTypes;
import androidx.viewbinding.ViewBinding; import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.bean.Danmaku; import com.fongmi.android.tv.bean.Danmaku;
import com.fongmi.android.tv.databinding.DialogDanmakuBinding; import com.fongmi.android.tv.databinding.DialogDanmakuBinding;
import com.fongmi.android.tv.player.Players; import com.fongmi.android.tv.player.Players;
import com.fongmi.android.tv.ui.adapter.DanmakuAdapter; import com.fongmi.android.tv.ui.adapter.DanmakuAdapter;
import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; import com.fongmi.android.tv.ui.custom.SpaceItemDecoration;
import com.fongmi.android.tv.utils.FileChooser;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
public final class DanmakuDialog extends BaseDialog implements DanmakuAdapter.OnClickListener { public final class DanmakuDialog extends BaseDialog implements DanmakuAdapter.OnClickListener {
@ -57,9 +62,27 @@ public final class DanmakuDialog extends BaseDialog implements DanmakuAdapter.On
binding.recycler.setVisibility(adapter.getItemCount() == 0 ? View.GONE : View.VISIBLE); binding.recycler.setVisibility(adapter.getItemCount() == 0 ? View.GONE : View.VISIBLE);
} }
@Override
protected void initEvent() {
binding.choose.setOnClickListener(this::showChooser);
}
private void showChooser(View view) {
FileChooser.from(this).show(new String[]{MimeTypes.APPLICATION_SUBRIP, MimeTypes.TEXT_SSA, MimeTypes.TEXT_VTT, MimeTypes.APPLICATION_TTML, "audio/*", "text/*", "application/octet-stream"});
player.pause();
}
@Override @Override
public void onItemClick(Danmaku item) { public void onItemClick(Danmaku item) {
player.setDanmaku(item.isSelected() ? item : Danmaku.empty()); player.setDanmaku(item.isSelected() ? item : Danmaku.empty());
dismiss(); dismiss();
} }
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != Activity.RESULT_OK || requestCode != FileChooser.REQUEST_PICK_FILE) return;
App.post(() -> player.setDanmaku(Danmaku.from(FileChooser.getPathFromUri(data.getData()))), 250);
dismiss();
}
} }

@ -22,6 +22,13 @@
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp" /> android:textSize="16sp" />
<ImageView
android:id="@+id/choose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_action_choose" />
</LinearLayout> </LinearLayout>
<com.fongmi.android.tv.ui.custom.CustomRecyclerView <com.fongmi.android.tv.ui.custom.CustomRecyclerView

Loading…
Cancel
Save