aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/app/src/main/java/com/wireguard/android/databinding/BindingAdapters.java
diff options
context:
space:
mode:
authorSamuel Holland <samuel@sholland.org>2017-12-26 14:12:37 -0600
committerSamuel Holland <samuel@sholland.org>2018-01-06 04:08:01 -0600
commitb7196e328a25a28078906d8afa50ba9636ae7bcb (patch)
treeb7fa6a415b72fad6eacc27abaa500880850e03ff /app/src/main/java/com/wireguard/android/databinding/BindingAdapters.java
parentapp: Enable Java 8 features (diff)
downloadwireguard-android-b7196e328a25a28078906d8afa50ba9636ae7bcb.tar.xz
wireguard-android-b7196e328a25a28078906d8afa50ba9636ae7bcb.zip
Rename package bindings -> databinding
Signed-off-by: Samuel Holland <samuel@sholland.org>
Diffstat (limited to 'app/src/main/java/com/wireguard/android/databinding/BindingAdapters.java')
-rw-r--r--app/src/main/java/com/wireguard/android/databinding/BindingAdapters.java123
1 files changed, 123 insertions, 0 deletions
diff --git a/app/src/main/java/com/wireguard/android/databinding/BindingAdapters.java b/app/src/main/java/com/wireguard/android/databinding/BindingAdapters.java
new file mode 100644
index 00000000..3e7a9270
--- /dev/null
+++ b/app/src/main/java/com/wireguard/android/databinding/BindingAdapters.java
@@ -0,0 +1,123 @@
+package com.wireguard.android.databinding;
+
+import android.databinding.BindingAdapter;
+import android.databinding.ObservableList;
+import android.databinding.adapters.ListenerUtil;
+import android.graphics.Typeface;
+import android.text.InputFilter;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.wireguard.android.R;
+import com.wireguard.android.widgets.ToggleSwitch;
+
+/**
+ * Static methods for use by generated code in the Android data binding library.
+ */
+
+@SuppressWarnings("unused")
+public final class BindingAdapters {
+ @BindingAdapter({"app:checked"})
+ public static void setChecked(final ToggleSwitch view, final boolean checked) {
+ view.setCheckedInternal(checked);
+ }
+
+ @BindingAdapter({"filter"})
+ public static void setFilter(final TextView view, final InputFilter filter) {
+ view.setFilters(new InputFilter[]{filter});
+ }
+
+ @BindingAdapter({"items", "layout"})
+ public static <T> void setItems(final LinearLayout view,
+ final ObservableList<T> oldList, final int oldLayoutId,
+ final ObservableList<T> newList, final int newLayoutId) {
+ if (oldList == newList && oldLayoutId == newLayoutId)
+ return;
+ ItemChangeListener<T> listener = ListenerUtil.getListener(view, R.id.item_change_listener);
+ // If the layout changes, any existing listener must be replaced.
+ if (listener != null && oldList != null && oldLayoutId != newLayoutId) {
+ listener.setList(null);
+ listener = null;
+ // Stop tracking the old listener.
+ ListenerUtil.trackListener(view, null, R.id.item_change_listener);
+ }
+ // Avoid adding a listener when there is no new list or layout.
+ if (newList == null || newLayoutId == 0)
+ return;
+ if (listener == null) {
+ listener = new ItemChangeListener<>(view, newLayoutId);
+ ListenerUtil.trackListener(view, listener, R.id.item_change_listener);
+ }
+ // Either the list changed, or this is an entirely new listener because the layout changed.
+ listener.setList(newList);
+ }
+
+ @BindingAdapter({"items", "layout"})
+ public static <T> void setItems(final ListView view,
+ final ObservableList<T> oldList, final int oldLayoutId,
+ final ObservableList<T> newList, final int newLayoutId) {
+ if (oldList == newList && oldLayoutId == newLayoutId)
+ return;
+ // The ListAdapter interface is not generic, so this cannot be checked.
+ @SuppressWarnings("unchecked")
+ ObservableListAdapter<T> adapter = (ObservableListAdapter<T>) view.getAdapter();
+ // If the layout changes, any existing adapter must be replaced.
+ if (adapter != null && oldList != null && oldLayoutId != newLayoutId) {
+ adapter.setList(null);
+ adapter = null;
+ }
+ // Avoid setting an adapter when there is no new list or layout.
+ if (newList == null || newLayoutId == 0)
+ return;
+ if (adapter == null) {
+ adapter = new ObservableListAdapter<>(view.getContext(), newLayoutId, newList);
+ view.setAdapter(adapter);
+ }
+ // Either the list changed, or this is an entirely new listener because the layout changed.
+ adapter.setList(newList);
+ }
+
+ @BindingAdapter({"items", "layout"})
+ public static <K extends Comparable<K>, V> void setItems(final ListView view,
+ final ObservableSortedMap<K, V> oldMap,
+ final int oldLayoutId,
+ final ObservableSortedMap<K, V> newMap,
+ final int newLayoutId) {
+ if (oldMap == newMap && oldLayoutId == newLayoutId)
+ return;
+ // The ListAdapter interface is not generic, so this cannot be checked.
+ @SuppressWarnings("unchecked")
+ ObservableMapAdapter<K, V> adapter = (ObservableMapAdapter<K, V>) view.getAdapter();
+ // If the layout changes, any existing adapter must be replaced.
+ if (adapter != null && oldMap != null && oldLayoutId != newLayoutId) {
+ adapter.setMap(null);
+ adapter = null;
+ }
+ // Avoid setting an adapter when there is no new list or layout.
+ if (newMap == null || newLayoutId == 0)
+ return;
+ if (adapter == null) {
+ adapter = new ObservableMapAdapter<>(view.getContext(), newLayoutId, newMap);
+ view.setAdapter(adapter);
+ }
+ // Either the list changed, or this is an entirely new listener because the layout changed.
+ adapter.setMap(newMap);
+ }
+
+ @BindingAdapter({"app:onBeforeCheckedChanged"})
+ public static void setOnBeforeCheckedChanged(final ToggleSwitch view,
+ final ToggleSwitch.OnBeforeCheckedChangeListener
+ listener) {
+ view.setOnBeforeCheckedChangeListener(listener);
+ }
+
+ @BindingAdapter({"android:textStyle"})
+ public static void setTextStyle(final TextView view, final Typeface typeface) {
+ view.setTypeface(typeface);
+ }
+
+ private BindingAdapters() {
+ // Prevent instantiation.
+ }
+}