From 644daf3f06ced0faa2263827dc01df96dfa70214 Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 4 Mar 2025 14:32:12 +0800 Subject: [PATCH] Fix crash --- .../android/tv/ui/adapter/RestoreAdapter.java | 24 +++++++++++++++---- .../android/tv/ui/dialog/RestoreDialog.java | 13 ++++++---- .../android/tv/ui/adapter/RestoreAdapter.java | 7 +++--- .../android/tv/ui/dialog/RestoreDialog.java | 3 +-- .../java/com/fongmi/quickjs/utils/Module.java | 5 +--- 5 files changed, 34 insertions(+), 18 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/RestoreAdapter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/RestoreAdapter.java index c04c2e216..2afe6500e 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/RestoreAdapter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/RestoreAdapter.java @@ -6,6 +6,8 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.fongmi.android.tv.App; +import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.databinding.AdapterRestoreBinding; import com.github.catvod.utils.Path; @@ -19,6 +21,14 @@ public class RestoreAdapter extends RecyclerView.Adapter mItems; + private final Callback callback = new Callback() { + @Override + public void success() { + notifyDataSetChanged(); + mListener.onItemLoaded(); + } + }; + public RestoreAdapter(OnClickListener listener) { this.mItems = new ArrayList<>(); this.mListener = listener; @@ -27,17 +37,21 @@ public class RestoreAdapter extends RecyclerView.Adapter Long.compare(f2.lastModified(), f1.lastModified())); - notifyDataSetChanged(); + App.execute(() -> { + File[] files = Path.tv().listFiles(); + if (files == null) files = new File[0]; + for (File file : files) if (file.getName().startsWith("tv") && file.getName().endsWith(".bk.gz")) mItems.add(file); + if (!mItems.isEmpty()) Collections.sort(mItems, (f1, f2) -> Long.compare(f2.lastModified(), f1.lastModified())); + App.post(callback::success); + }); } public int remove(File item) { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/RestoreDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/RestoreDialog.java index 3f73775ae..494add026 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/RestoreDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/RestoreDialog.java @@ -2,6 +2,7 @@ package com.fongmi.android.tv.ui.dialog; import android.app.Activity; import android.view.LayoutInflater; +import android.view.View; import android.view.WindowManager; import androidx.appcompat.app.AlertDialog; @@ -19,8 +20,8 @@ import java.io.File; public class RestoreDialog implements RestoreAdapter.OnClickListener { private final DialogRestoreBinding binding; - private final RestoreAdapter adapter; private final AlertDialog dialog; + private RestoreAdapter adapter; private Callback callback; public static RestoreDialog create(Activity activity) { @@ -30,7 +31,6 @@ public class RestoreDialog implements RestoreAdapter.OnClickListener { public RestoreDialog(Activity activity) { this.binding = DialogRestoreBinding.inflate(LayoutInflater.from(activity)); this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create(); - this.adapter = new RestoreAdapter(this); } public void show(Callback callback) { @@ -40,14 +40,13 @@ public class RestoreDialog implements RestoreAdapter.OnClickListener { } private void setRecyclerView() { - binding.recycler.setAdapter(adapter); binding.recycler.setItemAnimator(null); binding.recycler.setHasFixedSize(false); + binding.recycler.setAdapter(adapter = new RestoreAdapter(this)); binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16)); } private void setDialog() { - if (adapter.getItemCount() == 0) return; WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); params.width = (int) (ResUtil.getScreenWidth() * 0.4f); dialog.getWindow().setAttributes(params); @@ -55,6 +54,12 @@ public class RestoreDialog implements RestoreAdapter.OnClickListener { dialog.show(); } + @Override + public void onItemLoaded() { + binding.recycler.setVisibility(adapter.getItemCount() == 0 ? View.GONE : View.VISIBLE); + if (adapter.getItemCount() == 0) dialog.dismiss(); + } + @Override public void onItemClick(File item) { AppDatabase.restore(item, callback); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/RestoreAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/RestoreAdapter.java index b8b1bfb4c..623258080 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/RestoreAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/RestoreAdapter.java @@ -54,16 +54,17 @@ public class RestoreAdapter extends RecyclerView.Adapter Long.compare(f2.lastModified(), f1.lastModified())); - callback.success(); + App.post(callback::success); }); } - public void remove(File item) { + public int remove(File item) { int position = mItems.indexOf(item); - if (position == -1) return; + if (position == -1) return -1; Path.clear(item); mItems.remove(position); notifyItemRemoved(position); + return getItemCount(); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/RestoreDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/RestoreDialog.java index 18c3e85ba..0316436a8 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/RestoreDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/RestoreDialog.java @@ -61,7 +61,6 @@ public class RestoreDialog extends BaseDialog implements RestoreAdapter.OnClickL @Override public void onDeleteClick(File item) { - if (adapter.getItemCount() == 1) dismiss(); - adapter.remove(item); + if (adapter.remove(item) == 0) dismiss(); } } diff --git a/quickjs/src/main/java/com/fongmi/quickjs/utils/Module.java b/quickjs/src/main/java/com/fongmi/quickjs/utils/Module.java index 2371058f2..269a65beb 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/utils/Module.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/utils/Module.java @@ -5,14 +5,11 @@ import android.net.Uri; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Asset; import com.github.catvod.utils.Path; -import com.google.common.net.HttpHeaders; import java.io.File; import java.nio.charset.StandardCharsets; import java.util.concurrent.ConcurrentHashMap; -import okhttp3.Headers; - public class Module { private final ConcurrentHashMap cache; @@ -42,7 +39,7 @@ public class Module { Uri uri = Uri.parse(url); File file = Path.js(uri.getLastPathSegment()); boolean cache = !"127.0.0.1".equals(uri.getHost()); - byte[] data = OkHttp.newCall(url, Headers.of(HttpHeaders.USER_AGENT, "Mozilla/5.0")).execute().body().bytes(); + byte[] data = OkHttp.newCall(url).execute().body().bytes(); if (cache) new Thread(() -> Path.write(file, data)).start(); return new String(data, StandardCharsets.UTF_8); } catch (Exception e) {