diff options
Diffstat (limited to 'app/src/main/java/com/wireguard/android/databinding/ObservableMapAdapter.java')
-rw-r--r-- | app/src/main/java/com/wireguard/android/databinding/ObservableMapAdapter.java | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/app/src/main/java/com/wireguard/android/databinding/ObservableMapAdapter.java b/app/src/main/java/com/wireguard/android/databinding/ObservableMapAdapter.java deleted file mode 100644 index 4f63d6dd..00000000 --- a/app/src/main/java/com/wireguard/android/databinding/ObservableMapAdapter.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.wireguard.android.databinding; - -import android.content.Context; -import android.databinding.DataBindingUtil; -import android.databinding.ObservableMap; -import android.databinding.ViewDataBinding; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; - -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<K extends Comparable<K>, V> extends BaseAdapter { - private final OnMapChangedCallback<K, V> callback = new OnMapChangedCallback<>(this); - private final int layoutId; - private final LayoutInflater layoutInflater; - private List<K> keys; - private ObservableNavigableMap<K, V> map; - - ObservableMapAdapter(final Context context, final int layoutId, - final ObservableNavigableMap<K, V> map) { - this.layoutId = layoutId; - layoutInflater = LayoutInflater.from(context); - setMap(map); - } - - @Override - public int getCount() { - return map != null ? map.size() : 0; - } - - @Override - public V getItem(final int position) { - if (map == null || position < 0 || position >= map.size()) - return null; - return map.get(getKey(position)); - } - - @Override - public long getItemId(final int position) { - if (map == null || position < 0 || position >= map.size()) - return -1; - //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 List<K> getKeys() { - if (keys == null) - keys = new ArrayList<>(map.keySet()); - return keys; - } - - public int getPosition(final K key) { - if (map == null || key == null) - return -1; - return Collections.binarySearch(getKeys(), key); - } - - @Override - public View getView(final int position, final View convertView, final ViewGroup parent) { - 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(); - return binding.getRoot(); - } - - @Override - public boolean hasStableIds() { - return true; - } - - void setMap(final ObservableNavigableMap<K, V> newMap) { - if (map != null) - map.removeOnMapChangedCallback(callback); - keys = null; - map = newMap; - if (map != null) { - map.addOnMapChangedCallback(callback); - } - notifyDataSetChanged(); - } - - private static final class OnMapChangedCallback<K extends Comparable<K>, V> - extends ObservableMap.OnMapChangedCallback<ObservableNavigableMap<K, V>, K, V> { - - private final WeakReference<ObservableMapAdapter<K, V>> weakAdapter; - - private OnMapChangedCallback(final ObservableMapAdapter<K, V> adapter) { - weakAdapter = new WeakReference<>(adapter); - } - - @Override - public void onMapChanged(final ObservableNavigableMap<K, V> sender, final K key) { - final ObservableMapAdapter<K, V> adapter = weakAdapter.get(); - if (adapter != null) { - adapter.keys = null; - adapter.notifyDataSetChanged(); - } else { - sender.removeOnMapChangedCallback(this); - } - } - } -} |