diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java index 80a899ad2..bcda2a45e 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java @@ -2,7 +2,6 @@ package com.fongmi.android.tv.ui.activity; import android.app.Activity; import android.content.Intent; -import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; @@ -128,12 +127,7 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi private void onChildSelected(@Nullable RecyclerView.ViewHolder child) { if (mOldView != null) mOldView.setActivated(false); - if (child == null) { - Log.e("DDD", "DDD"); - return; - - } - Log.e("DDD", "1"); + if (child == null) return; mOldView = child.itemView; mOldView.setActivated(true); App.post(mRunnable, 100); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Device.java b/app/src/main/java/com/fongmi/android/tv/bean/Device.java index c25d27dd1..09ac98d76 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Device.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Device.java @@ -20,6 +20,7 @@ import com.google.gson.annotations.SerializedName; import java.util.Comparator; import java.util.List; +import java.util.Objects; @Entity(indices = @Index(value = {"uuid", "name"}, unique = true)) public class Device implements Diffable { @@ -163,6 +164,11 @@ public class Device implements Diffable { AppDatabase.get().getDeviceDao().delete(); } + @Override + public int hashCode() { + return Objects.hash(getUuid(), getName()); + } + @Override public boolean equals(@Nullable Object obj) { if (this == obj) return true; diff --git a/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java b/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java index dfb2d125c..2b2dd4208 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java @@ -10,6 +10,7 @@ import com.fongmi.android.tv.ui.adapter.diff.BaseItemCallback; import com.fongmi.android.tv.ui.adapter.diff.Diffable; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; public abstract class BaseDiffAdapter, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter { @@ -44,8 +45,9 @@ public abstract class BaseDiffAdapter, VH extends Recycler setItems(current); } - public void sort(java.util.Comparator comparator) { + public void sort(Comparator comparator) { List current = new ArrayList<>(getItems()); + if (current.isEmpty()) return; current.sort(comparator); setItems(current); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/DeviceAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/DeviceAdapter.java index d99225743..dad8f4d9f 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/DeviceAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/DeviceAdapter.java @@ -28,6 +28,12 @@ public class DeviceAdapter extends BaseDiffAdapter items) { super.addItems(items); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java index 3d29b56bd..f3b5560e4 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java @@ -42,7 +42,7 @@ import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.io.IOException; -import java.util.List; +import java.util.ArrayList; import kotlin.Unit; import okhttp3.Call; @@ -122,11 +122,12 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe } private void setRecyclerView() { - binding.recycler.setHasFixedSize(true); + binding.recycler.setHasFixedSize(false); binding.recycler.setAdapter(adapter = new DeviceAdapter(this)); } private void getDevice() { + adapter.setItems(new ArrayList<>()); if (fm) adapter.addItems(Device.getAll()); adapter.addItems(DLNADevice.get().getAll()); } @@ -157,8 +158,8 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe } @Override - public void onFind(List devices) { - if (!devices.isEmpty()) adapter.addItems(devices); + public void onFind(Device device) { + adapter.addItem(device); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java index 7cfa5dd3f..d4d2a2ac9 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java @@ -36,7 +36,6 @@ import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.io.IOException; -import java.util.List; import java.util.Locale; import okhttp3.Call; @@ -111,12 +110,12 @@ public class SyncDialog extends BaseDialog implements DeviceAdapter.OnClickListe } private void setRecyclerView() { - binding.recycler.setHasFixedSize(true); + binding.recycler.setHasFixedSize(false); binding.recycler.setAdapter(adapter = new DeviceAdapter(this)); } private void getDevice() { - adapter.addItems(Device.getAll()); + adapter.setItems(Device.getAll()); if (adapter.getItemCount() == 0) App.post(this::onRefresh, 1000); } @@ -152,8 +151,8 @@ public class SyncDialog extends BaseDialog implements DeviceAdapter.OnClickListe } @Override - public void onFind(List devices) { - if (!devices.isEmpty()) adapter.addItems(devices); + public void onFind(Device device) { + adapter.addItem(device); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/utils/ScanTask.java b/app/src/mobile/java/com/fongmi/android/tv/utils/ScanTask.java index 7f35dc83c..155ad6195 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/utils/ScanTask.java +++ b/app/src/mobile/java/com/fongmi/android/tv/utils/ScanTask.java @@ -6,11 +6,9 @@ import com.fongmi.android.tv.server.Server; import com.github.catvod.net.OkHttp; import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -19,14 +17,12 @@ import okhttp3.Response; public class ScanTask { - private final List devices; private final OkHttpClient client; private ExecutorService executor; private Listener listener; public ScanTask(Listener listener) { - this.devices = Collections.synchronizedList(new ArrayList<>()); this.client = OkHttp.client(1000); this.listener = listener; } @@ -49,7 +45,7 @@ public class ScanTask { private void init() { if (executor != null) executor.shutdownNow(); executor = Executors.newFixedThreadPool(20); - devices.clear(); + OkHttp.cancel(client, "scan"); } private void run(List items) { @@ -58,17 +54,11 @@ public class ScanTask { getDevice(items); } catch (Exception e) { e.printStackTrace(); - } finally { - App.post(() -> { - if (listener != null) listener.onFind(devices); - }); } } - private void getDevice(List urls) throws Exception { - CountDownLatch cd = new CountDownLatch(urls.size() - 1); - for (String url : urls) executor.execute(() -> findDevice(cd, url)); - cd.await(); + private void getDevice(List urls) { + for (String url : urls) executor.execute(() -> findDevice(url)); } private List getUrl(List ips) { @@ -79,19 +69,19 @@ public class ScanTask { return new ArrayList<>(urls); } - private void findDevice(CountDownLatch cd, String url) { + private void findDevice(String url) { if (url.contains(Server.get().getAddress())) return; try (Response res = OkHttp.newCall(client, url.concat("/device"), "scan").execute()) { Device device = Device.objectFrom(res.body().string()); - if (device != null) devices.add(device.save()); + if (device != null) App.post(() -> { + if (listener != null) listener.onFind(device.save()); + }); } catch (Exception ignored) { - } finally { - cd.countDown(); } } public interface Listener { - void onFind(List devices); + void onFind(Device device); } }