From 9d3f808ceaf5e5ef956bffb5b0df5a1cc0dfb66c Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 1 Mar 2025 16:03:30 +0800 Subject: [PATCH] Add local danmeku load --- .../com/fongmi/android/tv/bean/Danmaku.java | 16 +++++++++++++ .../android/tv/ui/dialog/DanmakuDialog.java | 23 +++++++++++++++++++ app/src/mobile/res/layout/dialog_danmaku.xml | 7 ++++++ 3 files changed, 46 insertions(+) diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Danmaku.java b/app/src/main/java/com/fongmi/android/tv/bean/Danmaku.java index 64e815b14..68537de79 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Danmaku.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Danmaku.java @@ -4,6 +4,7 @@ import android.text.TextUtils; import com.google.gson.annotations.SerializedName; +import java.io.File; import java.util.List; public class Danmaku { @@ -16,12 +17,27 @@ public class Danmaku { private boolean selected; public static List from(String path) { + if (path.startsWith("http")) { + return http(path); + } else { + return file(path); + } + } + + public static List http(String path) { Danmaku danmaku = new Danmaku(); danmaku.setName(path); danmaku.setUrl(path); return List.of(danmaku); } + public static List 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() { return new Danmaku(); } diff --git a/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java b/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java index d95626bf2..ba3ec6e67 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java @@ -1,6 +1,8 @@ package com.fongmi.android.tv.ui.dialog; +import android.app.Activity; +import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,13 +11,16 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; +import androidx.media3.common.MimeTypes; import androidx.viewbinding.ViewBinding; +import com.fongmi.android.tv.App; import com.fongmi.android.tv.bean.Danmaku; import com.fongmi.android.tv.databinding.DialogDanmakuBinding; import com.fongmi.android.tv.player.Players; import com.fongmi.android.tv.ui.adapter.DanmakuAdapter; import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; +import com.fongmi.android.tv.utils.FileChooser; import com.google.android.material.bottomsheet.BottomSheetDialogFragment; 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); } + @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 public void onItemClick(Danmaku item) { player.setDanmaku(item.isSelected() ? item : Danmaku.empty()); 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(); + } } \ No newline at end of file diff --git a/app/src/mobile/res/layout/dialog_danmaku.xml b/app/src/mobile/res/layout/dialog_danmaku.xml index 9556f6028..bd44e281d 100644 --- a/app/src/mobile/res/layout/dialog_danmaku.xml +++ b/app/src/mobile/res/layout/dialog_danmaku.xml @@ -22,6 +22,13 @@ android:textColor="?android:attr/textColorPrimary" android:textSize="16sp" /> + +