Merge changes from topic 'baku-old'
* changes:
TBR: Renaming SyncbaseXAdapter -> RxXAdapter
More support for using ID list bindings
diff --git a/baku-toolkit/lib/src/androidTest/java/io/v/baku/toolkit/bind/CollectionBindingTest.java b/baku-toolkit/lib/src/androidTest/java/io/v/baku/toolkit/bind/CollectionBindingTest.java
index 2b17d53..60ababf 100644
--- a/baku-toolkit/lib/src/androidTest/java/io/v/baku/toolkit/bind/CollectionBindingTest.java
+++ b/baku-toolkit/lib/src/androidTest/java/io/v/baku/toolkit/bind/CollectionBindingTest.java
@@ -37,7 +37,7 @@
mTable.put("Good morning", "starshine")));
final ListView listView = new ListView(getContext());
- try (final SyncbaseListAdapter<RxTable.Row<String>> adapter = CollectionBinding.builder()
+ try (final RxListAdapter<RxTable.Row<String>> adapter = CollectionBinding.builder()
.onError(t -> fail(Throwables.getStackTraceAsString(t)))
.viewAdapterContext(getContext())
.rxTable(mTable)
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/BaseBuilder.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/BaseBuilder.java
index 64ba08a..a0da69b 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/BaseBuilder.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/BaseBuilder.java
@@ -25,6 +25,7 @@
protected Activity mActivity;
protected RxTable mRxTable;
protected CompositeSubscription mSubscriptionParent;
+ protected Subscription mLastSubscription;
protected Action1<Throwable> mOnError;
public T activity(final Activity activity) {
@@ -75,13 +76,21 @@
mSubscriptionParent = new CompositeSubscription();
}
mSubscriptionParent.add(subscription);
+ mLastSubscription = subscription;
return subscription;
}
- public Subscription getSubscription() {
+ /**
+ * @return the current subscription parent.
+ */
+ public CompositeSubscription getAllBindings() {
return mSubscriptionParent;
}
+ public Subscription getLastBinding() {
+ return mLastSubscription;
+ }
+
public T onError(final Action1<Throwable> onError) {
mOnError = onError;
return mSelf;
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/CollectionAdapterBuilder.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/CollectionAdapterBuilder.java
index bbaf946..9a8c972 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/CollectionAdapterBuilder.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/CollectionAdapterBuilder.java
@@ -56,24 +56,24 @@
public abstract Observable<? extends ListAccumulator<T>> buildListAccumulator();
- public SyncbaseListAdapter<T> buildListAdapter() {
- return subscribeAdapter(new SyncbaseListAdapter<>(
+ public RxListAdapter<T> buildListAdapter() {
+ return subscribeAdapter(new RxListAdapter<>(
buildListAccumulator(), getViewAdapter(), mBase.mOnError));
}
- public SyncbaseRecyclerAdapter<T, ?> buildRecyclerAdapter() {
- return subscribeAdapter(new SyncbaseRecyclerAdapter<>(
+ public RxRecyclerAdapter<T, ?> buildRecyclerAdapter() {
+ return subscribeAdapter(new RxRecyclerAdapter<>(
buildListAccumulator(), getViewAdapter(), mBase.mOnError));
}
- public SyncbaseListAdapter<T> bindTo(final ListView listView) {
- final SyncbaseListAdapter<T> adapter = buildListAdapter();
+ public RxListAdapter<T> bindTo(final ListView listView) {
+ final RxListAdapter<T> adapter = buildListAdapter();
listView.setAdapter(adapter);
return adapter;
}
- public SyncbaseRecyclerAdapter<T, ?> bindTo(final RecyclerView recyclerView) {
- final SyncbaseRecyclerAdapter<T, ?> adapter = buildRecyclerAdapter();
+ public RxRecyclerAdapter<T, ?> bindTo(final RecyclerView recyclerView) {
+ final RxRecyclerAdapter<T, ?> adapter = buildRecyclerAdapter();
recyclerView.setAdapter(adapter);
return adapter;
}
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/IdListAccumulator.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/IdListAccumulator.java
index b75997e..9ff9b85 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/IdListAccumulator.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/IdListAccumulator.java
@@ -48,4 +48,9 @@
// TODO(rosswang): possibly index
return mIds.indexOf(rowName);
}
+
+ @Override
+ public ImmutableList<String> getListSnapshot() {
+ return mIds;
+ }
}
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/LayoutAdapter.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/LayoutAdapter.java
new file mode 100644
index 0000000..eec0a29
--- /dev/null
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/LayoutAdapter.java
@@ -0,0 +1,30 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package io.v.baku.toolkit.bind;
+
+import android.content.Context;
+import android.support.annotation.LayoutRes;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+public abstract class LayoutAdapter<T, VH extends ViewHolder> extends AbstractViewAdapter<T, VH> {
+
+ private final LayoutInflater mInflater;
+ @LayoutRes
+ private final int mResource;
+
+ public LayoutAdapter(final Context context, final @LayoutRes int resource) {
+ this(LayoutInflater.from(context), resource);
+ }
+
+ @Override
+ public View createView(final ViewGroup parent) {
+ return mInflater.inflate(mResource, parent, false);
+ }
+}
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulator.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulator.java
index b7d2f9c..2325e1b 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulator.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulator.java
@@ -4,6 +4,8 @@
package io.v.baku.toolkit.bind;
+import com.google.common.collect.ImmutableList;
+
public interface ListAccumulator<T> {
boolean containsRow(String rowName);
int getCount();
@@ -14,4 +16,6 @@
* not it has meaning) may vary by implementation.
*/
int getRowIndex(String rowName);
+
+ ImmutableList<T> getListSnapshot();
}
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulators.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulators.java
index f6737a4..babf78f 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulators.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulators.java
@@ -4,6 +4,8 @@
package io.v.baku.toolkit.bind;
+import com.google.common.collect.ImmutableList;
+
import java.util.NoSuchElementException;
import io.v.rx.syncbase.RxTable;
@@ -33,6 +35,11 @@
public int getRowIndex(final String rowName) {
return -1;
}
+
+ @Override
+ public ImmutableList<Object> getListSnapshot() {
+ return ImmutableList.of();
+ }
};
@SuppressWarnings("unchecked")
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/PrefixListAccumulator.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/PrefixListAccumulator.java
index af5bd6c..c03eece 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/PrefixListAccumulator.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/PrefixListAccumulator.java
@@ -4,6 +4,7 @@
package io.v.baku.toolkit.bind;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Ordering;
import java.util.ArrayList;
@@ -130,4 +131,9 @@
public boolean containsRow(final String rowName) {
return mRows.containsKey(rowName);
}
+
+ @Override
+ public ImmutableList<RxTable.Row<T>> getListSnapshot() {
+ return ImmutableList.copyOf(mSorted);
+ }
}
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseListAdapter.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxListAdapter.java
similarity index 86%
rename from baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseListAdapter.java
rename to baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxListAdapter.java
index 7877239..29b2f51 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseListAdapter.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxListAdapter.java
@@ -17,7 +17,7 @@
import rx.functions.Action1;
@Accessors(prefix = "m")
-public class SyncbaseListAdapter<T> extends BaseAdapter
+public class RxListAdapter<T> extends BaseAdapter
implements RangeAdapter, ListAccumulator<T> {
private final ViewAdapter<? super T, ?> mViewAdapter;
@Delegate
@@ -25,9 +25,9 @@
@Getter
private final Subscription mSubscription;
- public SyncbaseListAdapter(final Observable<? extends ListAccumulator<T>> data,
- final ViewAdapter<? super T, ?> viewAdapter,
- final Action1<Throwable> onError) {
+ public RxListAdapter(final Observable<? extends ListAccumulator<T>> data,
+ final ViewAdapter<? super T, ?> viewAdapter,
+ final Action1<Throwable> onError) {
mViewAdapter = viewAdapter;
mSubscription = data
.observeOn(AndroidSchedulers.mainThread())
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseRecyclerAdapter.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxRecyclerAdapter.java
similarity index 85%
rename from baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseRecyclerAdapter.java
rename to baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxRecyclerAdapter.java
index 1bc4d83..34ee173 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseRecyclerAdapter.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxRecyclerAdapter.java
@@ -16,8 +16,8 @@
import rx.functions.Action1;
@Accessors(prefix = "m")
-public class SyncbaseRecyclerAdapter<T, VH extends ViewHolder>
- extends RecyclerView.Adapter<SyncbaseRecyclerAdapter.ViewHolderAdapter<VH>>
+public class RxRecyclerAdapter<T, VH extends ViewHolder>
+ extends RecyclerView.Adapter<RxRecyclerAdapter.ViewHolderAdapter<VH>>
implements RangeAdapter, ListAccumulator<T> {
public static class ViewHolderAdapter<B extends ViewHolder> extends RecyclerView.ViewHolder {
@@ -34,9 +34,9 @@
@Getter
private final Subscription mSubscription;
- public SyncbaseRecyclerAdapter(final Observable<? extends ListAccumulator<T>> data,
- final ViewAdapter<? super T, VH> viewAdapter,
- final Action1<Throwable> onError) {
+ public RxRecyclerAdapter(final Observable<? extends ListAccumulator<T>> data,
+ final ViewAdapter<? super T, VH> viewAdapter,
+ final Action1<Throwable> onError) {
mViewAdapter = viewAdapter;
mSubscription = data
.observeOn(AndroidSchedulers.mainThread())
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/TextViewAdapter.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/TextViewAdapter.java
index a233704..9b77972 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/TextViewAdapter.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/TextViewAdapter.java
@@ -9,7 +9,6 @@
import android.support.annotation.LayoutRes;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup;
import android.widget.TextView;
import java.util.Objects;
@@ -17,11 +16,8 @@
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;
-import lombok.extern.slf4j.Slf4j;
-@RequiredArgsConstructor
-@Slf4j
-public class TextViewAdapter extends AbstractViewAdapter<Object, TextViewAdapter.ViewHolder> {
+public class TextViewAdapter extends LayoutAdapter<Object, TextViewAdapter.ViewHolder> {
@Accessors(prefix = "m")
@Getter
@RequiredArgsConstructor
@@ -48,9 +44,6 @@
}
}
- private final LayoutInflater mInflater;
- @LayoutRes
- private final int mResource;
@IdRes
private final int mFieldId;
@@ -67,9 +60,10 @@
this(LayoutInflater.from(context), resource, textViewResourceId);
}
- @Override
- public View createView(final ViewGroup parent) {
- return mInflater.inflate(mResource, parent, false);
+ public TextViewAdapter(final LayoutInflater inflater, final @LayoutRes int resource,
+ final @IdRes int textViewResourceId) {
+ super(inflater, resource);
+ mFieldId = textViewResourceId;
}
@Override
diff --git a/baku-toolkit/lib/src/main/java/io/v/rx/syncbase/RxTable.java b/baku-toolkit/lib/src/main/java/io/v/rx/syncbase/RxTable.java
index ead7b5f..ba7e941 100644
--- a/baku-toolkit/lib/src/main/java/io/v/rx/syncbase/RxTable.java
+++ b/baku-toolkit/lib/src/main/java/io/v/rx/syncbase/RxTable.java
@@ -326,8 +326,13 @@
}
public <T> Observable<Void> put(final String key, final T value,
+ final TypeToken<T> tt) {
+ return exec(t -> t.put(mVContext, key, value, tt.getType()));
+ }
+
+ public <T> Observable<Void> put(final String key, final T value,
final Class<T> type) {
- return exec(t -> t.put(mVContext, key, value, type));
+ return put(key, value, TypeToken.of(type));
}
@SuppressWarnings("unchecked")
@@ -336,11 +341,15 @@
}
@SuppressWarnings("unchecked")
- public <T> Observable<T> get(final String key, final Class<? extends T> type) {
- return exec(t -> t.get(mVContext, key, type))
+ public <T> Observable<T> get(final String key, final TypeToken<? extends T> tt) {
+ return exec(t -> t.get(mVContext, key, tt.getType()))
.map(x -> (T) x);
}
+ public <T> Observable<T> get(final String key, final Class<? extends T> type) {
+ return get(key, TypeToken.of(type));
+ }
+
public <T> Observable<T> get(final String key, final Class<? extends T> type,
final T defaultValue) {
return get(key, type).onErrorResumeNext(t -> t instanceof NoExistException ?