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 java.io.File;
import java.util.List;
public class Danmaku {
@ -16,12 +17,27 @@ public class Danmaku {
private boolean selected;
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.setName(path);
danmaku.setUrl(path);
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() {
return new Danmaku();
}

@ -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();
}
}

@ -22,6 +22,13 @@
android:textColor="?android:attr/textColorPrimary"
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>
<com.fongmi.android.tv.ui.custom.CustomRecyclerView

Loading…
Cancel
Save