Optimize device

pull/594/head
jhengazuki 4 months ago
parent fa4ce33dd2
commit 2f42ce1bfd
  1. 18
      app/src/main/java/com/fongmi/android/tv/bean/Device.java
  2. 10
      app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java
  3. 32
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/DeviceAdapter.java
  4. 8
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java
  5. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java

@ -13,16 +13,16 @@ import com.fongmi.android.tv.App;
import com.fongmi.android.tv.Product;
import com.fongmi.android.tv.db.AppDatabase;
import com.fongmi.android.tv.server.Server;
import com.fongmi.android.tv.ui.adapter.diff.Diffable;
import com.fongmi.android.tv.utils.UrlUtil;
import com.fongmi.android.tv.utils.Util;
import com.google.gson.annotations.SerializedName;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@Entity(indices = @Index(value = {"uuid", "name"}, unique = true))
public class Device {
public class Device implements Diffable<Device> {
@PrimaryKey(autoGenerate = true)
@SerializedName("id")
@ -176,11 +176,17 @@ public class Device {
return App.gson().toJson(this);
}
public static class Sorter implements Comparator<Device> {
@Override
public boolean isSameItem(Device other) {
return getUuid().equals(other.getUuid());
}
public static void sort(List<Device> items) {
if (items.size() > 1) Collections.sort(items, new Sorter());
}
@Override
public boolean isSameContent(Device other) {
return equals(other);
}
public static class Sorter implements Comparator<Device> {
@Override
public int compare(Device o1, Device o2) {

@ -28,8 +28,8 @@ public abstract class BaseDiffAdapter<T extends Diffable<T>, VH extends Recycler
return differ.getCurrentList();
}
public void setItems(List<T> list) {
differ.submitList(list);
public void setItems(List<T> items) {
differ.submitList(items);
}
public void addItem(T item) {
@ -44,6 +44,12 @@ public abstract class BaseDiffAdapter<T extends Diffable<T>, VH extends Recycler
setItems(current);
}
public void sort(java.util.Comparator<T> comparator) {
List<T> current = new ArrayList<>(getItems());
current.sort(comparator);
setItems(current);
}
public void remove(T item) {
List<T> current = new ArrayList<>(getItems());
if (current.remove(item)) setItems(current);

@ -13,13 +13,11 @@ import com.fongmi.android.tv.databinding.AdapterDeviceBinding;
import java.util.ArrayList;
import java.util.List;
public class DeviceAdapter extends RecyclerView.Adapter<DeviceAdapter.ViewHolder> {
public class DeviceAdapter extends BaseDiffAdapter<Device, DeviceAdapter.ViewHolder> {
private final OnClickListener mListener;
private final List<Device> mItems;
public DeviceAdapter(OnClickListener listener) {
this.mItems = new ArrayList<>();
this.mListener = listener;
}
@ -30,37 +28,23 @@ public class DeviceAdapter extends RecyclerView.Adapter<DeviceAdapter.ViewHolder
boolean onLongClick(Device item);
}
public void addAll(List<Device> items) {
if (items == null) return;
mItems.removeAll(items);
mItems.addAll(items);
Device.Sorter.sort(mItems);
notifyDataSetChanged();
}
public void remove(Device item) {
if (item == null) return;
mItems.remove(item);
notifyDataSetChanged();
@Override
public void addItems(List<Device> items) {
super.addItems(items);
sort(new Device.Sorter());
}
@Override
public void clear() {
mItems.clear();
Device.delete();
notifyDataSetChanged();
}
public List<String> getIps() {
List<String> ips = new ArrayList<>();
for (Device item : mItems) if (item.isApp()) ips.add(item.getIp());
for (Device item : getItems()) if (item.isApp()) ips.add(item.getIp());
return ips;
}
@Override
public int getItemCount() {
return mItems.size();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@ -69,7 +53,7 @@ public class DeviceAdapter extends RecyclerView.Adapter<DeviceAdapter.ViewHolder
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Device item = mItems.get(position);
Device item = getItem(position);
holder.binding.name.setText(item.getName());
holder.binding.host.setText(item.getHost());
holder.binding.type.setImageResource(getIcon(item));

@ -127,8 +127,8 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe
}
private void getDevice() {
if (fm) adapter.addAll(Device.getAll());
adapter.addAll(DLNADevice.get().getAll());
if (fm) adapter.addItems(Device.getAll());
adapter.addItems(DLNADevice.get().getAll());
}
private void initDLNA() {
@ -158,12 +158,12 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe
@Override
public void onFind(List<Device> devices) {
if (!devices.isEmpty()) adapter.addAll(devices);
if (!devices.isEmpty()) adapter.addItems(devices);
}
@Override
public void onDeviceAdded(@NonNull org.fourthline.cling.model.meta.Device<?, ?, ?> device) {
adapter.addAll(DLNADevice.get().add(device));
adapter.addItems(DLNADevice.get().add(device));
}
@Override

@ -116,7 +116,7 @@ public class SyncDialog extends BaseDialog implements DeviceAdapter.OnClickListe
}
private void getDevice() {
adapter.addAll(Device.getAll());
adapter.addItems(Device.getAll());
if (adapter.getItemCount() == 0) App.post(this::onRefresh, 1000);
}
@ -153,7 +153,7 @@ public class SyncDialog extends BaseDialog implements DeviceAdapter.OnClickListe
@Override
public void onFind(List<Device> devices) {
if (!devices.isEmpty()) adapter.addAll(devices);
if (!devices.isEmpty()) adapter.addItems(devices);
}
@Override

Loading…
Cancel
Save