pull/594/head
jhengazuki 7 months ago
parent 021457b7f6
commit 0f4fd87be3
  1. 8
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java
  2. 6
      app/src/main/java/com/fongmi/android/tv/bean/Device.java
  3. 4
      app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java
  4. 6
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/DeviceAdapter.java
  5. 9
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java
  6. 9
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java
  7. 26
      app/src/mobile/java/com/fongmi/android/tv/utils/ScanTask.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);

@ -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<Device> {
@ -163,6 +164,11 @@ public class Device implements Diffable<Device> {
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;

@ -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<T extends Diffable<T>, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
@ -44,8 +45,9 @@ public abstract class BaseDiffAdapter<T extends Diffable<T>, VH extends Recycler
setItems(current);
}
public void sort(java.util.Comparator<T> comparator) {
public void sort(Comparator<T> comparator) {
List<T> current = new ArrayList<>(getItems());
if (current.isEmpty()) return;
current.sort(comparator);
setItems(current);
}

@ -28,6 +28,12 @@ public class DeviceAdapter extends BaseDiffAdapter<Device, DeviceAdapter.ViewHol
boolean onLongClick(Device item);
}
@Override
public void addItem(Device item) {
super.addItem(item);
sort(new Device.Sorter());
}
@Override
public void addItems(List<Device> items) {
super.addItems(items);

@ -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<Device> devices) {
if (!devices.isEmpty()) adapter.addItems(devices);
public void onFind(Device device) {
adapter.addItem(device);
}
@Override

@ -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<Device> devices) {
if (!devices.isEmpty()) adapter.addItems(devices);
public void onFind(Device device) {
adapter.addItem(device);
}
@Override

@ -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<Device> 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<String> 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<String> 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<String> urls) {
for (String url : urls) executor.execute(() -> findDevice(url));
}
private List<String> getUrl(List<String> 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<Device> devices);
void onFind(Device device);
}
}

Loading…
Cancel
Save