From 609194fae2332e6f2ccd7a4464bfa492ad661a6f Mon Sep 17 00:00:00 2001 From: Samuel Holland Date: Mon, 1 Jan 2018 02:06:37 -0600 Subject: Serviceless rewrite, part 1 Signed-off-by: Samuel Holland --- .../android/databinding/ObservableMapAdapter.java | 27 ++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'app/src/main/java/com/wireguard/android/databinding/ObservableMapAdapter.java') diff --git a/app/src/main/java/com/wireguard/android/databinding/ObservableMapAdapter.java b/app/src/main/java/com/wireguard/android/databinding/ObservableMapAdapter.java index 70180728..4f63d6dd 100644 --- a/app/src/main/java/com/wireguard/android/databinding/ObservableMapAdapter.java +++ b/app/src/main/java/com/wireguard/android/databinding/ObservableMapAdapter.java @@ -8,28 +8,27 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; -import android.widget.ListAdapter; import com.wireguard.android.BR; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collections; +import java.util.List; /** * A generic ListAdapter backed by a TreeMap that adds observability. */ -public class ObservableMapAdapter, V> extends BaseAdapter - implements ListAdapter { +public class ObservableMapAdapter, V> extends BaseAdapter { private final OnMapChangedCallback callback = new OnMapChangedCallback<>(this); - private ArrayList keys; private final int layoutId; private final LayoutInflater layoutInflater; - private ObservableSortedMap map; + private List keys; + private ObservableNavigableMap map; ObservableMapAdapter(final Context context, final int layoutId, - final ObservableSortedMap map) { + final ObservableNavigableMap map) { this.layoutId = layoutId; layoutInflater = LayoutInflater.from(context); setMap(map); @@ -51,14 +50,17 @@ public class ObservableMapAdapter, V> extends BaseAdapte public long getItemId(final int position) { if (map == null || position < 0 || position >= map.size()) return -1; - return getItem(position).hashCode(); + //final V item = getItem(position); + //return item != null ? item.hashCode() : -1; + final K key = getKey(position); + return key.hashCode(); } private K getKey(final int position) { return getKeys().get(position); } - private ArrayList getKeys() { + private List getKeys() { if (keys == null) keys = new ArrayList<>(map.keySet()); return keys; @@ -75,6 +77,7 @@ public class ObservableMapAdapter, V> extends BaseAdapte ViewDataBinding binding = DataBindingUtil.getBinding(convertView); if (binding == null) binding = DataBindingUtil.inflate(layoutInflater, layoutId, parent, false); + binding.setVariable(BR.collection, map); binding.setVariable(BR.key, getKey(position)); binding.setVariable(BR.item, getItem(position)); binding.executePendingBindings(); @@ -86,7 +89,7 @@ public class ObservableMapAdapter, V> extends BaseAdapte return true; } - void setMap(final ObservableSortedMap newMap) { + void setMap(final ObservableNavigableMap newMap) { if (map != null) map.removeOnMapChangedCallback(callback); keys = null; @@ -97,8 +100,8 @@ public class ObservableMapAdapter, V> extends BaseAdapte notifyDataSetChanged(); } - private static class OnMapChangedCallback, V> - extends ObservableMap.OnMapChangedCallback, K, V> { + private static final class OnMapChangedCallback, V> + extends ObservableMap.OnMapChangedCallback, K, V> { private final WeakReference> weakAdapter; @@ -107,7 +110,7 @@ public class ObservableMapAdapter, V> extends BaseAdapte } @Override - public void onMapChanged(final ObservableSortedMap sender, final K key) { + public void onMapChanged(final ObservableNavigableMap sender, final K key) { final ObservableMapAdapter adapter = weakAdapter.get(); if (adapter != null) { adapter.keys = null; -- cgit v1.3-18-gd494