aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/app/src/main/java/com/wireguard/android/ObservableMapAdapter.java
diff options
context:
space:
mode:
authorSamuel Holland <samuel@sholland.org>2017-11-07 23:34:20 -0600
committerSamuel Holland <samuel@sholland.org>2017-11-07 23:34:22 -0600
commit6231bb18acf53342be20470d2b175fd4bb31b9ee (patch)
tree327751d0e0e4b8beda24a5c55615a7d7c5f53608 /app/src/main/java/com/wireguard/android/ObservableMapAdapter.java
parentproject: Update gradle files (diff)
downloadwireguard-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.java112
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);
- }
- }
- }
-}