diff options
| author | 2017-11-07 23:34:20 -0600 | |
|---|---|---|
| committer | 2017-11-07 23:34:22 -0600 | |
| commit | 6231bb18acf53342be20470d2b175fd4bb31b9ee (patch) | |
| tree | 327751d0e0e4b8beda24a5c55615a7d7c5f53608 /app/src/main/java/com/wireguard/android/ObservableMapAdapter.java | |
| parent | project: Update gradle files (diff) | |
| download | wireguard-android-6231bb18acf53342be20470d2b175fd4bb31b9ee.tar.xz wireguard-android-6231bb18acf53342be20470d2b175fd4bb31b9ee.zip | |
Bindings: Move to a separate package
These are really app-independent reusable classes. Moving them to a
separate package helps avoid polluting the main app package, and makes
them easier to upgrade.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'app/src/main/java/com/wireguard/android/ObservableMapAdapter.java')
| -rw-r--r-- | app/src/main/java/com/wireguard/android/ObservableMapAdapter.java | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/app/src/main/java/com/wireguard/android/ObservableMapAdapter.java b/app/src/main/java/com/wireguard/android/ObservableMapAdapter.java deleted file mode 100644 index 308c818d..00000000 --- a/app/src/main/java/com/wireguard/android/ObservableMapAdapter.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.wireguard.android; - -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 android.widget.ListAdapter; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Collections; - -/** - * A generic ListAdapter backed by a TreeMap that adds observability. - */ - -class ObservableMapAdapter<K extends Comparable<K>, V> extends BaseAdapter implements ListAdapter { - private final OnMapChangedCallback<K, V> callback = new OnMapChangedCallback<>(this); - private ArrayList<K> keys; - private final int layoutId; - private final LayoutInflater layoutInflater; - private ObservableSortedMap<K, V> map; - - ObservableMapAdapter(final Context context, final int layoutId, - final ObservableSortedMap<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(getKeys().get(position)); - } - - @Override - public long getItemId(final int position) { - if (map == null || position < 0 || position >= map.size()) - return -1; - return map.get(getKeys().get(position)).hashCode(); - } - - public int getItemPosition(final K key) { - if (map == null) - return -1; - return Collections.binarySearch(getKeys(), key); - } - - private ArrayList<K> getKeys() { - if (keys == null) - keys = new ArrayList<>(map.keySet()); - return keys; - } - - @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.item, getItem(position)); - binding.executePendingBindings(); - return binding.getRoot(); - } - - @Override - public boolean hasStableIds() { - return true; - } - - public void setMap(final ObservableSortedMap<K, V> newMap) { - if (map != null) - map.removeOnMapChangedCallback(callback); - keys = null; - map = newMap; - if (map != null) { - map.addOnMapChangedCallback(callback); - } - notifyDataSetChanged(); - } - - private static class OnMapChangedCallback<K extends Comparable<K>, V> - extends ObservableMap.OnMapChangedCallback<ObservableSortedMap<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 ObservableSortedMap<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); - } - } - } -} |
