From 6231bb18acf53342be20470d2b175fd4bb31b9ee Mon Sep 17 00:00:00 2001 From: Samuel Holland Date: Tue, 7 Nov 2017 23:34:20 -0600 Subject: 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 --- .../wireguard/android/ObservableMapAdapter.java | 112 --------------------- 1 file changed, 112 deletions(-) delete mode 100644 app/src/main/java/com/wireguard/android/ObservableMapAdapter.java (limited to 'app/src/main/java/com/wireguard/android/ObservableMapAdapter.java') 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, V> extends BaseAdapter implements ListAdapter { - private final OnMapChangedCallback callback = new OnMapChangedCallback<>(this); - private ArrayList keys; - private final int layoutId; - private final LayoutInflater layoutInflater; - private ObservableSortedMap map; - - ObservableMapAdapter(final Context context, final int layoutId, - final ObservableSortedMap 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 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 newMap) { - if (map != null) - map.removeOnMapChangedCallback(callback); - keys = null; - map = newMap; - if (map != null) { - map.addOnMapChangedCallback(callback); - } - notifyDataSetChanged(); - } - - private static class OnMapChangedCallback, V> - extends ObservableMap.OnMapChangedCallback, K, V> { - - private final WeakReference> weakAdapter; - - private OnMapChangedCallback(final ObservableMapAdapter adapter) { - weakAdapter = new WeakReference<>(adapter); - } - - @Override - public void onMapChanged(final ObservableSortedMap sender, final K key) { - final ObservableMapAdapter adapter = weakAdapter.get(); - if (adapter != null) { - adapter.keys = null; - adapter.notifyDataSetChanged(); - } else { - sender.removeOnMapChangedCallback(this); - } - } - } -} -- cgit v1.3-18-gd494