Use abstract base class instead of interfaces for Binding objects.
Bug 19627511 Bug 19709604 Changed generated classes to end with "Binding" instead of "Binder" to avoid confusion with Android Binders. Removed DataBinder class and moved the important aspects of its contents to ViewDataBinding. Improved mapping of Views in included layouts. Avoid traversing included layouts while looking for bound expressions. Change-Id: I1f28093b0792d5428d07192f1fc458a5b4b788b2
This commit is contained in:
committed by
Yigit Boyar
parent
f5140a1529
commit
230ecdbf05
@@ -1,5 +1,5 @@
|
||||
Properties databindingProperties = new Properties()
|
||||
databindingProperties.load(new FileInputStream("databinding.properties"))
|
||||
databindingProperties.load(new FileInputStream("${projectDir}/databinding.properties"))
|
||||
databindingProperties.mavenRepoDir = "${projectDir}/${databindingProperties.mavenRepoName}"
|
||||
ext.config = databindingProperties
|
||||
|
||||
|
||||
@@ -19,14 +19,12 @@ package com.android.databinding;
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import com.android.databinding.expr.Dependency;
|
||||
import com.android.databinding.store.ResourceBundle;
|
||||
import com.android.databinding.util.ParserHelper;
|
||||
import com.android.databinding.writer.LayoutBinderWriter;
|
||||
import com.android.databinding.expr.Expr;
|
||||
import com.android.databinding.expr.ExprModel;
|
||||
import com.android.databinding.expr.IdentifierExpr;
|
||||
import com.android.databinding.expr.StaticIdentifierExpr;
|
||||
import com.android.databinding.util.L;
|
||||
import com.android.databinding.store.ResourceBundle;
|
||||
import com.android.databinding.util.ParserHelper;
|
||||
import com.android.databinding.writer.LayoutBinderWriter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@@ -60,7 +58,7 @@ public class LayoutBinder {
|
||||
mBundle = layoutBundle;
|
||||
mProjectPackage = resourceBundle.getAppPackage();
|
||||
mPackage = mProjectPackage + ".generated";
|
||||
mBaseClassName = ParserHelper.INSTANCE$.toClassName(layoutBundle.getFileName()) + "Binder";
|
||||
mBaseClassName = ParserHelper.INSTANCE$.toClassName(layoutBundle.getFileName()) + "Binding";
|
||||
// copy over data.
|
||||
for (Map.Entry<String, String> variable : mBundle.getVariables().entrySet()) {
|
||||
addVariable(variable.getKey(), variable.getValue());
|
||||
@@ -144,7 +142,7 @@ public class LayoutBinder {
|
||||
|
||||
public String writeViewBinderInterface() {
|
||||
ensureWriter();
|
||||
return mWriter.writeInterface();
|
||||
return mWriter.writeBaseClass();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -62,8 +62,8 @@ public abstract class ModelAnalyzer {
|
||||
"com.android.databinding.library.ObservableField",
|
||||
};
|
||||
|
||||
public static final String I_VIEW_DATA_BINDER
|
||||
= "com.android.databinding.library.IViewDataBinder";
|
||||
public static final String VIEW_DATA_BINDING =
|
||||
"com.android.databinding.library.ViewDataBinding";
|
||||
|
||||
private static ModelAnalyzer sAnalyzer;
|
||||
|
||||
|
||||
@@ -48,7 +48,6 @@ import javax.lang.model.type.TypeMirror;
|
||||
import javax.lang.model.util.ElementFilter;
|
||||
import javax.lang.model.util.Elements;
|
||||
import javax.lang.model.util.Types;
|
||||
import javax.tools.Diagnostic;
|
||||
|
||||
public class AnnotationAnalyzer extends ModelAnalyzer {
|
||||
|
||||
@@ -143,7 +142,7 @@ public class AnnotationAnalyzer extends ModelAnalyzer {
|
||||
|
||||
private AnnotationClass getIViewDataBinderType() {
|
||||
if (mIViewDataBinderType == null) {
|
||||
mIViewDataBinderType = new AnnotationClass(findType(I_VIEW_DATA_BINDER).asType());
|
||||
mIViewDataBinderType = new AnnotationClass(findType(VIEW_DATA_BINDING).asType());
|
||||
}
|
||||
return mIViewDataBinderType;
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ public class LayoutFileParser {
|
||||
// generated.
|
||||
String layoutName = includeValue.substring(LAYOUT_PREFIX.length());
|
||||
className = pkg + ".generated." +
|
||||
ParserHelper.INSTANCE$.toClassName(layoutName) + "Binder";
|
||||
ParserHelper.INSTANCE$.toClassName(layoutName) + "Binding";
|
||||
includedLayoutName = layoutName;
|
||||
} else {
|
||||
className = getFullViewClassName(nodeName);
|
||||
|
||||
@@ -150,7 +150,7 @@ public class ResourceBundle implements Serializable {
|
||||
if (target.isBinder()) {
|
||||
L.d("overriding %s as base binder", target.getId());
|
||||
viewTypes.put(target.mId,
|
||||
"com.android.databinding.library.IViewDataBinder");
|
||||
"com.android.databinding.library.ViewDataBinding");
|
||||
} else {
|
||||
L.d("overriding %s as base view", target.getId());
|
||||
viewTypes.put(target.mId, "android.view.View");
|
||||
|
||||
@@ -18,11 +18,11 @@ import com.android.databinding.LayoutBinder
|
||||
class DataBinderWriter(val pkg: String, val projectPackage: String, val className: String, val layoutBinders : List<LayoutBinder> ) {
|
||||
fun write() =
|
||||
kcode("") {
|
||||
tab("package $pkg;")
|
||||
tab("import $projectPackage.R;")
|
||||
tab("public class $className implements com.android.databinding.library.DataBinderMapper {") {
|
||||
nl("package $pkg;")
|
||||
nl("import $projectPackage.R;")
|
||||
nl("public class $className implements com.android.databinding.library.DataBinderMapper {") {
|
||||
tab("@Override")
|
||||
tab("public com.android.databinding.library.ViewDataBinder getDataBinder(android.view.View view, int layoutId) {") {
|
||||
tab("public com.android.databinding.library.ViewDataBinding getDataBinder(android.view.View view, int layoutId) {") {
|
||||
tab("switch(layoutId) {") {
|
||||
layoutBinders.groupBy{it.getLayoutname()}.forEach {
|
||||
tab("case R.layout.${it.value.first!!.getLayoutname()}:") {
|
||||
@@ -54,6 +54,6 @@ class DataBinderWriter(val pkg: String, val projectPackage: String, val classNam
|
||||
tab("return android.binding.BR.getId(key);")
|
||||
} tab("}")
|
||||
}
|
||||
tab("}")
|
||||
nl("}")
|
||||
}.generate()
|
||||
}
|
||||
@@ -314,7 +314,7 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) {
|
||||
dynamics.filter { it is IdentifierExpr }
|
||||
}
|
||||
|
||||
val interfaceName = "${layoutBinder.getInterfaceName()}"
|
||||
val baseClassName = "${layoutBinder.getInterfaceName()}"
|
||||
|
||||
val includedBinders by Delegates.lazy {
|
||||
layoutBinder.getBindingTargets().filter { it.isBinder() }
|
||||
@@ -333,7 +333,8 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) {
|
||||
return kcode("package ${layoutBinder.getPackage()};") {
|
||||
nl("import ${layoutBinder.getProjectPackage()}.R;")
|
||||
nl("import android.view.View;")
|
||||
nl("public class ${className} extends com.android.databinding.library.ViewDataBinder implements ${interfaceName} {") {
|
||||
nl("public class ${className} extends ${baseClassName} {") {
|
||||
tab(declareIncludeViews())
|
||||
tab(declareViews())
|
||||
tab(declareVariables())
|
||||
tab(declareConstructor())
|
||||
@@ -344,7 +345,7 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) {
|
||||
tab(viewGetters())
|
||||
tab(onFieldChange())
|
||||
|
||||
tab(rebindDirty())
|
||||
tab(executePendingBindings())
|
||||
|
||||
tab(declareDirtyFlags())
|
||||
}
|
||||
@@ -353,37 +354,48 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) {
|
||||
tab("//end")
|
||||
}.generate()
|
||||
}
|
||||
fun declareIncludeViews() = kcode("") {
|
||||
nl("private static final android.util.SparseIntArray sIncludes;")
|
||||
nl("private static final android.util.SparseIntArray sViewsWithIds;")
|
||||
nl("static {") {
|
||||
val hasBinders = layoutBinder.getBindingTargets().firstOrNull{ it.isUsed() && it.isBinder()} != null
|
||||
if (!hasBinders) {
|
||||
tab("sIncludes = null;")
|
||||
} else {
|
||||
tab("sIncludes = new android.util.SparseIntArray();")
|
||||
val numTaggedViews = layoutBinder.getBindingTargets().
|
||||
filter{it.isUsed() && !it.isBinder()}.count()
|
||||
layoutBinder.getBindingTargets().filter{ it.isUsed() && it.isBinder()}.withIndex()
|
||||
.forEach {
|
||||
tab("sIncludes.put(${it.value.androidId}, ${it.index + numTaggedViews});")
|
||||
}
|
||||
}
|
||||
val hasViewsWithIds = layoutBinder.getBindingTargets().firstOrNull{ it.isUsed() && !it.supportsTag()} != null
|
||||
if (!hasViewsWithIds) {
|
||||
tab("sViewsWithIds = null;")
|
||||
} else {
|
||||
tab("sViewsWithIds = new android.util.SparseIntArray();")
|
||||
layoutBinder.getBindingTargets().filter{ it.isUsed() && !it.supportsTag() }.
|
||||
forEach {
|
||||
tab("sViewsWithIds.put(${it.androidId}, ${it.getTag()});")
|
||||
}
|
||||
}
|
||||
}
|
||||
nl("}")
|
||||
}
|
||||
fun declareConstructor() = kcode("") {
|
||||
nl("public ${className}(View root) {") {
|
||||
tab("super(root, ${model.getObservables().size()});")
|
||||
val taggedViewCount = layoutBinder.getBindingTargets().filter{
|
||||
it.isUsed() && !it.isBinder() && it.getTag() != null
|
||||
}.count()
|
||||
val hasViews = layoutBinder.getBindingTargets().firstOrNull{!it.isBinder() && it.supportsTag()} != null
|
||||
val viewsParam : String;
|
||||
if (hasViews) {
|
||||
tab("View[] views = new View[${taggedViewCount}];")
|
||||
viewsParam = "views"
|
||||
} else {
|
||||
viewsParam = "null"
|
||||
}
|
||||
val hasBinders = layoutBinder.getBindingTargets().firstOrNull{ it.isBinder() || !it.supportsTag()} != null
|
||||
val binderParam : String
|
||||
if (hasBinders) {
|
||||
tab("android.util.SparseArray<View> idViews = new android.util.SparseArray<View>();")
|
||||
binderParam = "idViews";
|
||||
} else {
|
||||
binderParam = "null";
|
||||
}
|
||||
tab("mapTaggedChildViews(root, ${viewsParam}, ${binderParam});");
|
||||
layoutBinder.getBindingTargets().filter{it.isUsed()}.forEach {
|
||||
if (it.isBinder()) {
|
||||
tab("this.${it.fieldName} = com.android.databinding.library.DataBinder.createBinder(idViews.get(${it.androidId}), R.layout.${it.getIncludedLayout()});")
|
||||
} else if (it.getTag() == null) {
|
||||
val viewCount = layoutBinder.getBindingTargets().filter{it.isUsed()}.count()
|
||||
tab("View[] views = new View[${viewCount}];")
|
||||
tab("mapTaggedChildViews(root, views, sIncludes, sViewsWithIds);");
|
||||
val taggedViews = layoutBinder.getBindingTargets().filter{it.isUsed() && !it.isBinder()}
|
||||
taggedViews.forEach {
|
||||
if (it.getTag() == null) {
|
||||
tab("this.${it.fieldName} = (${it.getViewClass()}) root;")
|
||||
} else {
|
||||
tab("this.${it.fieldName} = (${it.getViewClass()}) views[${it.getTag()}];")
|
||||
if (it.supportsTag()) {
|
||||
tab("this.${it.fieldName} = (${it.getViewClass()}) views[${it.getTag()}];")
|
||||
val originalTag = it.getOriginalTag();
|
||||
var tagValue = "null"
|
||||
if (originalTag != null) {
|
||||
@@ -399,11 +411,14 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) {
|
||||
}
|
||||
}
|
||||
tab("this.${it.fieldName}.setTag(${tagValue});")
|
||||
} else {
|
||||
tab("this.${it.fieldName} = (${it.getViewClass()}) idViews.get(${it.androidId});")
|
||||
}
|
||||
}
|
||||
}
|
||||
val taggedCount = taggedViews.count()
|
||||
layoutBinder.getBindingTargets().filter{it.isUsed() && it.isBinder()}.withIndex()
|
||||
.forEach {
|
||||
tab("this.${it.value.fieldName} = ${it.value.getViewClass()}.bind(views[${it.index + taggedCount}]);")
|
||||
}
|
||||
tab("invalidateAll();");
|
||||
}
|
||||
nl("}")
|
||||
@@ -486,8 +501,8 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) {
|
||||
|
||||
fun onFieldChange() = kcode("") {
|
||||
tab("@Override")
|
||||
tab("protected boolean onFieldChange(int mLocalFieldId, Object object, int fieldId) {") {
|
||||
tab("switch (mLocalFieldId) {") {
|
||||
tab("protected boolean onFieldChange(int localFieldId, Object object, int fieldId) {") {
|
||||
tab("switch (localFieldId) {") {
|
||||
model.getObservables().forEach {
|
||||
tab("case ${it.getId()} :") {
|
||||
tab("return ${it.onChangeName}((${it.getResolvedType().toJavaCode()}) object, fieldId);")
|
||||
@@ -578,9 +593,9 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) {
|
||||
nl("flag mapping end*/")
|
||||
}
|
||||
|
||||
fun rebindDirty() = kcode("") {
|
||||
fun executePendingBindings() = kcode("") {
|
||||
nl("@Override")
|
||||
nl("public void rebindDirty() {") {
|
||||
nl("public void executePendingBindings() {") {
|
||||
val tmpDirtyFlags = FlagSet(mDirtyFlags.buckets)
|
||||
tmpDirtyFlags.setLocalName("dirtyFlags");
|
||||
for (i in (0..mDirtyFlags.buckets.size() - 1)) {
|
||||
@@ -624,7 +639,7 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) {
|
||||
tab("// api target ${binding.getMinApi()}")
|
||||
val bindingCode = binding.toJavaCode(binding.getTarget().fieldName, binding.getExpr().toCode().generate())
|
||||
if (binding.getMinApi() > 1) {
|
||||
tab("if(com.android.databinding.library.DataBinder.getBuildSdkInt() >= ${binding.getMinApi()}) {") {
|
||||
tab("if(getBuildSdkInt() >= ${binding.getMinApi()}) {") {
|
||||
tab("$bindingCode;")
|
||||
}
|
||||
tab("}")
|
||||
@@ -637,7 +652,7 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) {
|
||||
}
|
||||
//
|
||||
includedBinders.filter{it.isUsed()}.forEach { binder ->
|
||||
tab("${binder.fieldName}.rebindDirty();")
|
||||
tab("${binder.fieldName}.executePendingBindings();")
|
||||
}
|
||||
}
|
||||
nl("}")
|
||||
@@ -710,22 +725,41 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) {
|
||||
tab("}")
|
||||
}
|
||||
|
||||
public fun writeInterface() : String =
|
||||
public fun writeBaseClass() : String =
|
||||
kcode("package ${layoutBinder.getPackage()};") {
|
||||
nl("import android.binding.Bindable;")
|
||||
nl("import com.android.databinding.library.IViewDataBinder;")
|
||||
nl("public interface ${interfaceName} extends IViewDataBinder {")
|
||||
nl("import com.android.databinding.library.DataBindingUtil;")
|
||||
nl("import com.android.databinding.library.ViewDataBinding;")
|
||||
nl("public abstract class ${baseClassName} extends ViewDataBinding {")
|
||||
tab("protected ${baseClassName}(android.view.View root, int localFieldCount) {") {
|
||||
tab("super(root, localFieldCount);")
|
||||
}
|
||||
tab("}")
|
||||
nl("")
|
||||
variables.forEach {
|
||||
if (it.getUserDefinedType() != null) {
|
||||
tab("@Bindable")
|
||||
//it.getExpandedUserDefinedType(ModelAnalyzer.getInstance());
|
||||
val type = ModelAnalyzer.getInstance().applyImports(it.getUserDefinedType(), model.getImports())
|
||||
tab("public void ${it.setterName}(${type} ${it.readableUniqueName});")
|
||||
tab("public abstract void ${it.setterName}(${type} ${it.readableUniqueName});")
|
||||
}
|
||||
}
|
||||
layoutBinder.getBindingTargets().filter{ it.getId() != null }.forEach {
|
||||
tab("public ${it.getInterfaceType()} ${it.getterName}();")
|
||||
tab("public abstract ${it.getInterfaceType()} ${it.getterName}();")
|
||||
}
|
||||
nl("")
|
||||
tab("public static ${baseClassName} inflate(android.view.ViewGroup root) {") {
|
||||
tab("return DataBindingUtil.<${baseClassName}>inflate(root.getContext(), ${layoutBinder.getProjectPackage()}.R.layout.${layoutBinder.getLayoutname()}, root, true);")
|
||||
}
|
||||
tab("}")
|
||||
tab("public static ${baseClassName} inflate(android.content.Context context) {") {
|
||||
tab("return DataBindingUtil.<${baseClassName}>inflate(context, ${layoutBinder.getProjectPackage()}.R.layout.${layoutBinder.getLayoutname()}, null, false);")
|
||||
}
|
||||
tab("}")
|
||||
tab("public static ${baseClassName} bind(android.view.View view) {") {
|
||||
tab("return (${baseClassName})DataBindingUtil.bindTo(view, ${layoutBinder.getProjectPackage()}.R.layout.${layoutBinder.getLayoutname()});")
|
||||
}
|
||||
tab("}")
|
||||
nl("}")
|
||||
}.generate()
|
||||
}
|
||||
@@ -81,7 +81,7 @@ public class JavaAnalyzer extends ModelAnalyzer {
|
||||
mClassLoader = classLoader;
|
||||
mTestMode = testMode;
|
||||
try {
|
||||
mIViewDataBinder = classLoader.loadClass(I_VIEW_DATA_BINDER);
|
||||
mIViewDataBinder = classLoader.loadClass(VIEW_DATA_BINDING);
|
||||
mObservable = Observable.class;
|
||||
mObservableList = ObservableList.class;
|
||||
mObservableMap = ObservableMap.class;
|
||||
|
||||
@@ -21,6 +21,6 @@ package com.android.databinding.library;
|
||||
*/
|
||||
public class DataBinderTrojan {
|
||||
public static void setBuildSdkInt(int level) {
|
||||
DataBinder.SDK_INT = level;
|
||||
ViewDataBinding.SDK_INT = level;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.AbsListViewAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.AbsListViewAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.AbsListViewBindingObject;
|
||||
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
@@ -24,12 +24,12 @@ import android.os.Debug;
|
||||
import android.widget.ListView;
|
||||
|
||||
public class AbsListViewBindingAdapterTest
|
||||
extends BindingAdapterTestBase<AbsListViewAdapterTestBinder, AbsListViewBindingObject> {
|
||||
extends BindingAdapterTestBase<AbsListViewAdapterTestBinding, AbsListViewBindingObject> {
|
||||
|
||||
ListView mView;
|
||||
|
||||
public AbsListViewBindingAdapterTest() {
|
||||
super(AbsListViewAdapterTestBinder.class, AbsListViewBindingObject.class,
|
||||
super(AbsListViewAdapterTestBinding.class, AbsListViewBindingObject.class,
|
||||
R.layout.abs_list_view_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,19 +15,19 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.AbsSeekBarAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.AbsSeekBarAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.AbsSeekBarBindingObject;
|
||||
|
||||
import android.os.Build;
|
||||
import android.widget.SeekBar;
|
||||
|
||||
public class AbsSeekBarBindingAdapterTest
|
||||
extends BindingAdapterTestBase<AbsSeekBarAdapterTestBinder, AbsSeekBarBindingObject> {
|
||||
extends BindingAdapterTestBase<AbsSeekBarAdapterTestBinding, AbsSeekBarBindingObject> {
|
||||
|
||||
SeekBar mView;
|
||||
|
||||
public AbsSeekBarBindingAdapterTest() {
|
||||
super(AbsSeekBarAdapterTestBinder.class, AbsSeekBarBindingObject.class,
|
||||
super(AbsSeekBarAdapterTestBinding.class, AbsSeekBarBindingObject.class,
|
||||
R.layout.abs_seek_bar_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.AbsSpinnerAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.AbsSpinnerAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.AbsSpinnerBindingObject;
|
||||
|
||||
import android.os.Build;
|
||||
@@ -23,12 +23,12 @@ import android.widget.Spinner;
|
||||
import android.widget.SpinnerAdapter;
|
||||
|
||||
public class AbsSpinnerBindingAdapterTest
|
||||
extends BindingAdapterTestBase<AbsSpinnerAdapterTestBinder, AbsSpinnerBindingObject> {
|
||||
extends BindingAdapterTestBase<AbsSpinnerAdapterTestBinding, AbsSpinnerBindingObject> {
|
||||
|
||||
Spinner mView;
|
||||
|
||||
public AbsSpinnerBindingAdapterTest() {
|
||||
super(AbsSpinnerAdapterTestBinder.class, AbsSpinnerBindingObject.class,
|
||||
super(AbsSpinnerAdapterTestBinding.class, AbsSpinnerBindingObject.class,
|
||||
R.layout.abs_spinner_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.AutoCompleteTextViewAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.AutoCompleteTextViewAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.AutoCompleteTextViewBindingObject;
|
||||
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
@@ -23,13 +23,13 @@ import android.os.Build;
|
||||
import android.widget.AutoCompleteTextView;
|
||||
|
||||
public class AutoCompleteTextViewBindingAdapterTest extends
|
||||
BindingAdapterTestBase<AutoCompleteTextViewAdapterTestBinder,
|
||||
BindingAdapterTestBase<AutoCompleteTextViewAdapterTestBinding,
|
||||
AutoCompleteTextViewBindingObject> {
|
||||
|
||||
AutoCompleteTextView mView;
|
||||
|
||||
public AutoCompleteTextViewBindingAdapterTest() {
|
||||
super(AutoCompleteTextViewAdapterTestBinder.class, AutoCompleteTextViewBindingObject.class,
|
||||
super(AutoCompleteTextViewAdapterTestBinding.class, AutoCompleteTextViewBindingObject.class,
|
||||
R.layout.auto_complete_text_view_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,28 +13,28 @@
|
||||
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.library.DataBinder;
|
||||
import com.android.databinding.library.IViewDataBinder;
|
||||
import com.android.databinding.library.ViewDataBinding;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.os.Looper;
|
||||
import android.test.ActivityInstrumentationTestCase2;
|
||||
|
||||
public class BaseDataBinderTest<T extends IViewDataBinder>
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class BaseDataBinderTest<T extends ViewDataBinding>
|
||||
extends ActivityInstrumentationTestCase2<TestActivity> {
|
||||
protected Class<T> mBinderClass;
|
||||
private int mLayoutId;
|
||||
private int mOrientation;
|
||||
protected T mBinder;
|
||||
|
||||
public BaseDataBinderTest(final Class<T> binderClass, final int layoutId) {
|
||||
this(binderClass, layoutId, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
public BaseDataBinderTest(final Class<T> binderClass) {
|
||||
this(binderClass, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
}
|
||||
|
||||
public BaseDataBinderTest(final Class<T> binderClass, final int layoutId, final int orientation) {
|
||||
public BaseDataBinderTest(final Class<T> binderClass, final int orientation) {
|
||||
super(TestActivity.class);
|
||||
mBinderClass = binderClass;
|
||||
mLayoutId = layoutId;
|
||||
mOrientation = orientation;
|
||||
}
|
||||
|
||||
@@ -54,8 +54,14 @@ public class BaseDataBinderTest<T extends IViewDataBinder>
|
||||
getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mBinder = DataBinder.createBinder(mBinderClass, getActivity(), mLayoutId, null);
|
||||
getActivity().setContentView(mBinder.getRoot());
|
||||
Method method = null;
|
||||
try {
|
||||
method = mBinderClass.getMethod("inflate", Context.class);
|
||||
mBinder = (T) method.invoke(null, getActivity());
|
||||
getActivity().setContentView(mBinder.getRoot());
|
||||
} catch (Exception e) {
|
||||
fail("Error creating binder");
|
||||
}
|
||||
}
|
||||
});
|
||||
if (!isMainThread()) {
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.library.IViewDataBinder;
|
||||
import com.android.databinding.library.ViewDataBinding;
|
||||
|
||||
import android.content.pm.ActivityInfo;
|
||||
|
||||
public class BaseLandDataBinderTest<T extends IViewDataBinder> extends BaseDataBinderTest<T> {
|
||||
public class BaseLandDataBinderTest<T extends ViewDataBinding> extends BaseDataBinderTest<T> {
|
||||
|
||||
public BaseLandDataBinderTest(Class<T> binderClass, int layoutId) {
|
||||
super(binderClass, layoutId, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
super(binderClass, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,14 +16,14 @@
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.library.BaseObservable;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinder;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinding;
|
||||
|
||||
import android.binding.Observable;
|
||||
import android.binding.OnPropertyChangedListener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class BaseObservableTest extends BaseDataBinderTest<BasicBindingBinder> {
|
||||
public class BaseObservableTest extends BaseDataBinderTest<BasicBindingBinding> {
|
||||
private BaseObservable mObservable;
|
||||
private ArrayList<Integer> mNotifications = new ArrayList<>();
|
||||
private OnPropertyChangedListener mListener = new OnPropertyChangedListener() {
|
||||
@@ -35,7 +35,7 @@ public class BaseObservableTest extends BaseDataBinderTest<BasicBindingBinder> {
|
||||
};
|
||||
|
||||
public BaseObservableTest() {
|
||||
super(BasicBindingBinder.class, R.layout.basic_binding);
|
||||
super(BasicBindingBinding.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinder;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinding;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
|
||||
public class BasicBindingTest extends BaseDataBinderTest<BasicBindingBinder> {
|
||||
public class BasicBindingTest extends BaseDataBinderTest<BasicBindingBinding> {
|
||||
public BasicBindingTest() {
|
||||
super(BasicBindingBinder.class, R.layout.basic_binding);
|
||||
super(BasicBindingBinding.class);
|
||||
}
|
||||
|
||||
@UiThreadTest
|
||||
@@ -69,7 +69,7 @@ public class BasicBindingTest extends BaseDataBinderTest<BasicBindingBinder> {
|
||||
}
|
||||
|
||||
private void rebindAndAssert(String text) {
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals(text, mBinder.getTextView().getText().toString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.BasicDependantBindingBinder;
|
||||
import com.android.databinding.testapp.generated.BasicDependantBindingBinding;
|
||||
import com.android.databinding.testapp.vo.NotBindableVo;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
@@ -21,10 +21,10 @@ import android.test.UiThreadTest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BasicDependantBindingTest extends BaseDataBinderTest<BasicDependantBindingBinder> {
|
||||
public class BasicDependantBindingTest extends BaseDataBinderTest<BasicDependantBindingBinding> {
|
||||
|
||||
public BasicDependantBindingTest() {
|
||||
super(BasicDependantBindingBinder.class, R.layout.basic_dependant_binding);
|
||||
super(BasicDependantBindingBinding.class);
|
||||
}
|
||||
|
||||
public List<NotBindableVo> permutations(String value) {
|
||||
@@ -44,7 +44,7 @@ public class BasicDependantBindingTest extends BaseDataBinderTest<BasicDependant
|
||||
createBinder(); //get a new one
|
||||
testWith(obj1, obj2);
|
||||
createBinder();
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
testWith(obj1, obj2);
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ public class BasicDependantBindingTest extends BaseDataBinderTest<BasicDependant
|
||||
private void testWith(NotBindableVo obj1, NotBindableVo obj2) {
|
||||
mBinder.setObj1(obj1);
|
||||
mBinder.setObj2(obj2);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertValues(safeGet(obj1), safeGet(obj2),
|
||||
obj1 == null ? "" : obj1.mergeStringFields(obj2),
|
||||
obj2 == null ? "" : obj2.mergeStringFields(obj1),
|
||||
|
||||
@@ -13,23 +13,23 @@
|
||||
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.BindToFinalBinder;
|
||||
import com.android.databinding.testapp.generated.BindToFinalBinding;
|
||||
import com.android.databinding.testapp.vo.PublicFinalTestVo;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class BindToFinalFieldTest extends BaseDataBinderTest<BindToFinalBinder>{
|
||||
public class BindToFinalFieldTest extends BaseDataBinderTest<BindToFinalBinding>{
|
||||
|
||||
public BindToFinalFieldTest() {
|
||||
super(BindToFinalBinder.class, R.layout.bind_to_final);
|
||||
super(BindToFinalBinding.class);
|
||||
}
|
||||
|
||||
@UiThreadTest
|
||||
public void testSimple() {
|
||||
final PublicFinalTestVo vo = new PublicFinalTestVo(R.string.app_name);
|
||||
mBinder.setObj(vo);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
final TextView textView = (TextView) mBinder.getRoot().findViewById(R.id.text_view);
|
||||
assertEquals(getActivity().getResources().getString(R.string.app_name), textView.getText().toString());
|
||||
}
|
||||
|
||||
@@ -13,29 +13,27 @@
|
||||
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.BindToFinalBinder;
|
||||
import com.android.databinding.testapp.generated.BindToFinalObservableBinder;
|
||||
import com.android.databinding.testapp.vo.PublicFinalTestVo;
|
||||
import com.android.databinding.testapp.generated.BindToFinalObservableBinding;
|
||||
import com.android.databinding.testapp.vo.PublicFinalWithObservableTestVo;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class BindToFinalObservableFieldTest extends BaseDataBinderTest<BindToFinalObservableBinder>{
|
||||
public class BindToFinalObservableFieldTest extends BaseDataBinderTest<BindToFinalObservableBinding>{
|
||||
|
||||
public BindToFinalObservableFieldTest() {
|
||||
super(BindToFinalObservableBinder.class, R.layout.bind_to_final_observable);
|
||||
super(BindToFinalObservableBinding.class);
|
||||
}
|
||||
|
||||
@UiThreadTest
|
||||
public void testSimple() {
|
||||
final PublicFinalWithObservableTestVo vo = new PublicFinalWithObservableTestVo(R.string.app_name);
|
||||
mBinder.setObj(vo);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
final TextView textView = (TextView) mBinder.getRoot().findViewById(R.id.text_view);
|
||||
assertEquals(getActivity().getResources().getString(R.string.app_name), textView.getText().toString());
|
||||
vo.myFinalVo.setVal(R.string.rain);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals("The field should be observed and its notify event should've invalidated"
|
||||
+ " binder flags.", getActivity().getResources().getString(R.string.rain),
|
||||
textView.getText().toString());
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.library.IViewDataBinder;
|
||||
import com.android.databinding.library.ViewDataBinding;
|
||||
import com.android.databinding.testapp.vo.BindingAdapterBindingObject;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class BindingAdapterTestBase<T extends IViewDataBinder, V extends BindingAdapterBindingObject>
|
||||
public class BindingAdapterTestBase<T extends ViewDataBinding, V extends BindingAdapterBindingObject>
|
||||
extends BaseDataBinderTest<T> {
|
||||
private Class<V> mBindingObjectClass;
|
||||
|
||||
@@ -30,7 +30,7 @@ public class BindingAdapterTestBase<T extends IViewDataBinder, V extends Binding
|
||||
private Method mSetMethod;
|
||||
|
||||
public BindingAdapterTestBase(Class<T> binderClass, Class<V> observableClass, int layoutId) {
|
||||
super(binderClass, layoutId);
|
||||
super(binderClass);
|
||||
mBindingObjectClass = observableClass;
|
||||
try {
|
||||
mSetMethod = binderClass.getDeclaredMethod("setObj", observableClass);
|
||||
@@ -49,7 +49,7 @@ public class BindingAdapterTestBase<T extends IViewDataBinder, V extends Binding
|
||||
try {
|
||||
mBindingObject = mBindingObjectClass.newInstance();
|
||||
mSetMethod.invoke(mBinder, mBindingObject);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (InvocationTargetException e) {
|
||||
@@ -69,7 +69,7 @@ public class BindingAdapterTestBase<T extends IViewDataBinder, V extends Binding
|
||||
@Override
|
||||
public void run() {
|
||||
mBindingObject.changeValues();
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.BracketTestBinder;
|
||||
import com.android.databinding.testapp.generated.BracketTestBinding;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
import android.util.LongSparseArray;
|
||||
@@ -21,10 +21,8 @@ import android.util.SparseArray;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.util.SparseIntArray;
|
||||
import android.util.SparseLongArray;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class BracketTest extends BaseDataBinderTest<BracketTestBinder> {
|
||||
public class BracketTest extends BaseDataBinderTest<BracketTestBinding> {
|
||||
private String[] mArray = {
|
||||
"Hello World"
|
||||
};
|
||||
@@ -36,7 +34,7 @@ public class BracketTest extends BaseDataBinderTest<BracketTestBinder> {
|
||||
private LongSparseArray<String> mLongSparseArray = new LongSparseArray<>();
|
||||
|
||||
public BracketTest() {
|
||||
super(BracketTestBinder.class, R.layout.bracket_test);
|
||||
super(BracketTestBinding.class);
|
||||
mSparseArray.put(0, "Hello");
|
||||
mLongSparseArray.put(0, "World");
|
||||
mSparseIntArray.put(0, 100);
|
||||
@@ -58,7 +56,7 @@ public class BracketTest extends BaseDataBinderTest<BracketTestBinder> {
|
||||
mBinder.setSparseLongArray(mSparseLongArray);
|
||||
mBinder.setLongSparseArray(mLongSparseArray);
|
||||
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
}
|
||||
});
|
||||
} catch (Throwable throwable) {
|
||||
|
||||
@@ -15,19 +15,19 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.CastTestBinder;
|
||||
import com.android.databinding.testapp.generated.CastTestBinding;
|
||||
|
||||
import android.support.v4.util.ArrayMap;
|
||||
import android.test.UiThreadTest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class CastTest extends BaseDataBinderTest<CastTestBinder> {
|
||||
public class CastTest extends BaseDataBinderTest<CastTestBinding> {
|
||||
ArrayList<String> mValues = new ArrayList<>();
|
||||
ArrayMap<String, String> mMap = new ArrayMap<>();
|
||||
|
||||
public CastTest() {
|
||||
super(CastTestBinder.class, R.layout.cast_test);
|
||||
super(CastTestBinding.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -46,7 +46,7 @@ public class CastTest extends BaseDataBinderTest<CastTestBinder> {
|
||||
mMap.put("world", "hello");
|
||||
mBinder.setList(mValues);
|
||||
mBinder.setMap(mMap);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
}
|
||||
});
|
||||
} catch (Throwable throwable) {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.CheckedTextViewAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.CheckedTextViewAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.CheckedTextViewBindingObject;
|
||||
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
@@ -23,12 +23,12 @@ import android.os.Build;
|
||||
import android.widget.CheckedTextView;
|
||||
|
||||
public class CheckedTextViewBindingAdapterTest extends
|
||||
BindingAdapterTestBase<CheckedTextViewAdapterTestBinder, CheckedTextViewBindingObject> {
|
||||
BindingAdapterTestBase<CheckedTextViewAdapterTestBinding, CheckedTextViewBindingObject> {
|
||||
|
||||
CheckedTextView mView;
|
||||
|
||||
public CheckedTextViewBindingAdapterTest() {
|
||||
super(CheckedTextViewAdapterTestBinder.class, CheckedTextViewBindingObject.class,
|
||||
super(CheckedTextViewAdapterTestBinding.class, CheckedTextViewBindingObject.class,
|
||||
R.layout.checked_text_view_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,18 +15,18 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.CompoundButtonAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.CompoundButtonAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.CompoundButtonBindingObject;
|
||||
|
||||
import android.widget.CompoundButton;
|
||||
|
||||
public class CompoundButtonBindingAdapterTest extends
|
||||
BindingAdapterTestBase<CompoundButtonAdapterTestBinder, CompoundButtonBindingObject> {
|
||||
BindingAdapterTestBase<CompoundButtonAdapterTestBinding, CompoundButtonBindingObject> {
|
||||
|
||||
CompoundButton mView;
|
||||
|
||||
public CompoundButtonBindingAdapterTest() {
|
||||
super(CompoundButtonAdapterTestBinder.class, CompoundButtonBindingObject.class,
|
||||
super(CompoundButtonAdapterTestBinding.class, CompoundButtonBindingObject.class,
|
||||
R.layout.compound_button_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.ConditionalBindingBinder;
|
||||
import com.android.databinding.testapp.generated.ConditionalBindingBinding;
|
||||
import com.android.databinding.testapp.vo.NotBindableVo;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
|
||||
public class ConditionalBindingTest extends BaseDataBinderTest<ConditionalBindingBinder>{
|
||||
public class ConditionalBindingTest extends BaseDataBinderTest<ConditionalBindingBinding>{
|
||||
|
||||
public ConditionalBindingTest() {
|
||||
super(ConditionalBindingBinder.class, R.layout.conditional_binding);
|
||||
super(ConditionalBindingBinding.class);
|
||||
}
|
||||
|
||||
@UiThreadTest
|
||||
@@ -25,7 +25,7 @@ public class ConditionalBindingTest extends BaseDataBinderTest<ConditionalBindin
|
||||
mBinder.setObj3(o3);
|
||||
mBinder.setCond1(cond1);
|
||||
mBinder.setCond2(cond2);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
final String text = mBinder.getTextView().getText().toString();
|
||||
assertEquals(cond1 && cond2, "a".equals(text));
|
||||
assertEquals(cond1 && !cond2, "b".equals(text));
|
||||
|
||||
@@ -15,17 +15,17 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.FindMethodTestBinder;
|
||||
import com.android.databinding.testapp.generated.FindMethodTestBinding;
|
||||
import com.android.databinding.testapp.vo.FindMethodBindingObject;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class FindMethodTest
|
||||
extends BindingAdapterTestBase<FindMethodTestBinder, FindMethodBindingObject> {
|
||||
extends BindingAdapterTestBase<FindMethodTestBinding, FindMethodBindingObject> {
|
||||
|
||||
public FindMethodTest() {
|
||||
super(FindMethodTestBinder.class, FindMethodBindingObject.class, R.layout.find_method_test);
|
||||
super(FindMethodTestBinding.class, FindMethodBindingObject.class, R.layout.find_method_test);
|
||||
}
|
||||
|
||||
public void testNoArg() throws Throwable {
|
||||
@@ -96,7 +96,7 @@ public class FindMethodTest
|
||||
@UiThreadTest
|
||||
public void testImports() throws Throwable {
|
||||
mBinder.setObj2(new FindMethodBindingObject.Bar<String>());
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
TextView textView = mBinder.getTextView15();
|
||||
assertEquals("hello", textView.getText().toString());
|
||||
}
|
||||
|
||||
@@ -15,19 +15,19 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.FrameLayoutAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.FrameLayoutAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.FrameLayoutBindingObject;
|
||||
|
||||
import android.os.Build;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
public class FrameLayoutBindingAdapterTest
|
||||
extends BindingAdapterTestBase<FrameLayoutAdapterTestBinder, FrameLayoutBindingObject> {
|
||||
extends BindingAdapterTestBase<FrameLayoutAdapterTestBinding, FrameLayoutBindingObject> {
|
||||
|
||||
FrameLayout mView;
|
||||
|
||||
public FrameLayoutBindingAdapterTest() {
|
||||
super(FrameLayoutAdapterTestBinder.class, FrameLayoutBindingObject.class,
|
||||
super(FrameLayoutAdapterTestBinding.class, FrameLayoutBindingObject.class,
|
||||
R.layout.frame_layout_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,18 +15,18 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.ImageViewAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.ImageViewAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.ImageViewBindingObject;
|
||||
|
||||
import android.widget.ImageView;
|
||||
|
||||
public class ImageViewBindingAdapterTest
|
||||
extends BindingAdapterTestBase<ImageViewAdapterTestBinder, ImageViewBindingObject> {
|
||||
extends BindingAdapterTestBase<ImageViewAdapterTestBinding, ImageViewBindingObject> {
|
||||
|
||||
ImageView mView;
|
||||
|
||||
public ImageViewBindingAdapterTest() {
|
||||
super(ImageViewAdapterTestBinder.class, ImageViewBindingObject.class,
|
||||
super(ImageViewAdapterTestBinding.class, ImageViewBindingObject.class,
|
||||
R.layout.image_view_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,23 +13,23 @@
|
||||
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.LayoutWithIncludeBinder;
|
||||
import com.android.databinding.testapp.generated.LayoutWithIncludeBinding;
|
||||
import com.android.databinding.testapp.vo.NotBindableVo;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class IncludeTagTest extends BaseDataBinderTest<LayoutWithIncludeBinder> {
|
||||
public class IncludeTagTest extends BaseDataBinderTest<LayoutWithIncludeBinding> {
|
||||
|
||||
public IncludeTagTest() {
|
||||
super(LayoutWithIncludeBinder.class, R.layout.layout_with_include);
|
||||
super(LayoutWithIncludeBinding.class);
|
||||
}
|
||||
|
||||
@UiThreadTest
|
||||
public void testIncludeTag() {
|
||||
NotBindableVo vo = new NotBindableVo(3, "a");
|
||||
mBinder.setOuterObject(vo);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
final TextView outerText = (TextView) mBinder.getRoot().findViewById(R.id.outerTextView);
|
||||
assertEquals("a", outerText.getText());
|
||||
final TextView innerText = (TextView) mBinder.getRoot().findViewById(R.id.innerTextView);
|
||||
@@ -38,7 +38,7 @@ public class IncludeTagTest extends BaseDataBinderTest<LayoutWithIncludeBinder>
|
||||
vo.setIntValue(5);
|
||||
vo.setStringValue("b");
|
||||
mBinder.invalidateAll();
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals("b", outerText.getText());
|
||||
assertEquals("modified 5b", innerText.getText().toString());
|
||||
}
|
||||
|
||||
@@ -15,19 +15,19 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.LinearLayoutAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.LinearLayoutAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.LinearLayoutBindingObject;
|
||||
|
||||
import android.os.Build;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
public class LinearLayoutBindingAdapterTest
|
||||
extends BindingAdapterTestBase<LinearLayoutAdapterTestBinder, LinearLayoutBindingObject> {
|
||||
extends BindingAdapterTestBase<LinearLayoutAdapterTestBinding, LinearLayoutBindingObject> {
|
||||
|
||||
LinearLayout mView;
|
||||
|
||||
public LinearLayoutBindingAdapterTest() {
|
||||
super(LinearLayoutAdapterTestBinder.class, LinearLayoutBindingObject.class,
|
||||
super(LinearLayoutAdapterTestBinding.class, LinearLayoutBindingObject.class,
|
||||
R.layout.linear_layout_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,18 +16,18 @@
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.library.ListChangeRegistry;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinder;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinding;
|
||||
|
||||
import android.binding.OnListChangedListener;
|
||||
|
||||
public class ListChangeRegistryTest extends BaseDataBinderTest<BasicBindingBinder> {
|
||||
public class ListChangeRegistryTest extends BaseDataBinderTest<BasicBindingBinding> {
|
||||
|
||||
private ListChangeRegistry mListChangeRegistry;
|
||||
|
||||
private int mCallCount;
|
||||
|
||||
public ListChangeRegistryTest() {
|
||||
super(BasicBindingBinder.class, R.layout.basic_binding);
|
||||
super(BasicBindingBinding.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,17 +17,17 @@ package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.library.MapChangeRegistry;
|
||||
import com.android.databinding.library.ObservableArrayMap;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinder;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinding;
|
||||
|
||||
import android.binding.ObservableMap;
|
||||
import android.binding.OnMapChangedListener;
|
||||
|
||||
public class MapChangeRegistryTest extends BaseDataBinderTest<BasicBindingBinder> {
|
||||
public class MapChangeRegistryTest extends BaseDataBinderTest<BasicBindingBinding> {
|
||||
|
||||
private int notificationCount = 0;
|
||||
|
||||
public MapChangeRegistryTest() {
|
||||
super(BasicBindingBinder.class, R.layout.basic_binding);
|
||||
super(BasicBindingBinding.class);
|
||||
}
|
||||
|
||||
public void testNotifyAllChanged() {
|
||||
|
||||
@@ -14,21 +14,18 @@
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.library.DataBinderTrojan;
|
||||
import com.android.databinding.testapp.generated.NewApiLayoutBinder;
|
||||
import com.android.databinding.testapp.generated.NewApiLayoutBinding;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.test.UiThreadTest;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class NewApiTest extends BaseDataBinderTest<NewApiLayoutBinder> {
|
||||
public class NewApiTest extends BaseDataBinderTest<NewApiLayoutBinding> {
|
||||
public NewApiTest() {
|
||||
super(NewApiLayoutBinder.class, R.layout.new_api_layout);
|
||||
super(NewApiLayoutBinding.class);
|
||||
}
|
||||
|
||||
@UiThreadTest
|
||||
@@ -36,7 +33,7 @@ public class NewApiTest extends BaseDataBinderTest<NewApiLayoutBinder> {
|
||||
mBinder.setElevation(3);
|
||||
mBinder.setName("foo");
|
||||
mBinder.setChildren(new ArrayList<View>());
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals("foo", mBinder.getTextView().getText().toString());
|
||||
assertEquals(3f, mBinder.getTextView().getElevation());
|
||||
}
|
||||
@@ -49,7 +46,7 @@ public class NewApiTest extends BaseDataBinderTest<NewApiLayoutBinder> {
|
||||
float originalElevation = textView.getElevation();
|
||||
mBinder.setElevation(3);
|
||||
mBinder.setName("foo2");
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals("foo2", textView.getText().toString());
|
||||
assertEquals(originalElevation, textView.getElevation());
|
||||
} finally {
|
||||
@@ -61,7 +58,7 @@ public class NewApiTest extends BaseDataBinderTest<NewApiLayoutBinder> {
|
||||
public void testGeneric() {
|
||||
ArrayList<View> views = new ArrayList<>();
|
||||
mBinder.setChildren(views);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals(1, views.size());
|
||||
assertSame(mBinder.getTextView(), views.get(0));
|
||||
}
|
||||
@@ -72,7 +69,7 @@ public class NewApiTest extends BaseDataBinderTest<NewApiLayoutBinder> {
|
||||
try {
|
||||
ArrayList<View> views = new ArrayList<>();
|
||||
mBinder.setChildren(views);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
// we should not call the api on older platforms.
|
||||
assertEquals(0, views.size());
|
||||
} finally {
|
||||
|
||||
@@ -13,15 +13,15 @@
|
||||
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.NoIdTestBinder;
|
||||
import com.android.databinding.testapp.generated.NoIdTestBinding;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class NoIdTest extends BaseDataBinderTest<NoIdTestBinder> {
|
||||
public class NoIdTest extends BaseDataBinderTest<NoIdTestBinding> {
|
||||
public NoIdTest() {
|
||||
super(NoIdTestBinder.class, R.layout.no_id_test);
|
||||
super(NoIdTestBinding.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -33,7 +33,7 @@ public class NoIdTest extends BaseDataBinderTest<NoIdTestBinder> {
|
||||
public void run() {
|
||||
mBinder.setName("hello");
|
||||
mBinder.setOrientation(LinearLayout.VERTICAL);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
}
|
||||
});
|
||||
} catch (Throwable throwable) {
|
||||
@@ -46,7 +46,7 @@ public class NoIdTest extends BaseDataBinderTest<NoIdTestBinder> {
|
||||
LinearLayout linearLayout = (LinearLayout) mBinder.getRoot();
|
||||
assertEquals(LinearLayout.VERTICAL, linearLayout.getOrientation());
|
||||
mBinder.setOrientation(LinearLayout.HORIZONTAL);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals(LinearLayout.HORIZONTAL, linearLayout.getOrientation());
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ public class NoIdTest extends BaseDataBinderTest<NoIdTestBinder> {
|
||||
assertEquals("hello world", view.getTag());
|
||||
assertEquals("hello", view.getText().toString());
|
||||
mBinder.setName("world");
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals("world", view.getText().toString());
|
||||
}
|
||||
|
||||
|
||||
@@ -16,14 +16,14 @@
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.library.ObservableArrayList;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinder;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinding;
|
||||
|
||||
import android.binding.ObservableList;
|
||||
import android.binding.OnListChangedListener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ObservableArrayListTest extends BaseDataBinderTest<BasicBindingBinder> {
|
||||
public class ObservableArrayListTest extends BaseDataBinderTest<BasicBindingBinding> {
|
||||
|
||||
private static final int ALL = 0;
|
||||
|
||||
@@ -96,7 +96,7 @@ public class ObservableArrayListTest extends BaseDataBinderTest<BasicBindingBind
|
||||
}
|
||||
|
||||
public ObservableArrayListTest() {
|
||||
super(BasicBindingBinder.class, R.layout.basic_binding);
|
||||
super(BasicBindingBinding.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.library.ObservableArrayMap;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinder;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinding;
|
||||
|
||||
import android.binding.ObservableMap;
|
||||
import android.binding.OnMapChangedListener;
|
||||
@@ -26,7 +26,7 @@ import android.support.v4.util.SimpleArrayMap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
|
||||
public class ObservableArrayMapTest extends BaseDataBinderTest<BasicBindingBinder> {
|
||||
public class ObservableArrayMapTest extends BaseDataBinderTest<BasicBindingBinding> {
|
||||
|
||||
private ObservableArrayMap<String, String> mObservable;
|
||||
|
||||
@@ -41,7 +41,7 @@ public class ObservableArrayMapTest extends BaseDataBinderTest<BasicBindingBinde
|
||||
};
|
||||
|
||||
public ObservableArrayMapTest() {
|
||||
super(BasicBindingBinder.class, R.layout.basic_binding);
|
||||
super(BasicBindingBinding.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -13,17 +13,17 @@
|
||||
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.ObservableFieldTestBinder;
|
||||
import com.android.databinding.testapp.generated.ObservableFieldTestBinding;
|
||||
import com.android.databinding.testapp.vo.ObservableFieldBindingObject;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestBinder> {
|
||||
public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestBinding> {
|
||||
private ObservableFieldBindingObject mObj;
|
||||
|
||||
public ObservableFieldTest() {
|
||||
super(ObservableFieldTestBinder.class, R.layout.observable_field_test);
|
||||
super(ObservableFieldTestBinding.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -35,7 +35,7 @@ public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestB
|
||||
public void run() {
|
||||
mObj = new ObservableFieldBindingObject();
|
||||
mBinder.setObj(mObj);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
}
|
||||
});
|
||||
} catch (Throwable throwable) {
|
||||
@@ -49,7 +49,7 @@ public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestB
|
||||
assertEquals("false", view.getText());
|
||||
|
||||
mObj.bField.set(true);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
|
||||
assertEquals("true", view.getText());
|
||||
}
|
||||
@@ -60,7 +60,7 @@ public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestB
|
||||
assertEquals("0", view.getText());
|
||||
|
||||
mObj.tField.set((byte) 1);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
|
||||
assertEquals("1", view.getText());
|
||||
}
|
||||
@@ -71,7 +71,7 @@ public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestB
|
||||
assertEquals("0", view.getText());
|
||||
|
||||
mObj.sField.set((short) 1);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
|
||||
assertEquals("1", view.getText());
|
||||
}
|
||||
@@ -82,7 +82,7 @@ public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestB
|
||||
assertEquals("\u0000", view.getText());
|
||||
|
||||
mObj.cField.set('A');
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
|
||||
assertEquals("A", view.getText());
|
||||
}
|
||||
@@ -93,7 +93,7 @@ public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestB
|
||||
assertEquals("0", view.getText());
|
||||
|
||||
mObj.iField.set(1);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
|
||||
assertEquals("1", view.getText());
|
||||
}
|
||||
@@ -104,7 +104,7 @@ public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestB
|
||||
assertEquals("0", view.getText());
|
||||
|
||||
mObj.lField.set(1);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
|
||||
assertEquals("1", view.getText());
|
||||
}
|
||||
@@ -115,7 +115,7 @@ public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestB
|
||||
assertEquals("0.0", view.getText());
|
||||
|
||||
mObj.fField.set(1);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
|
||||
assertEquals("1.0", view.getText());
|
||||
}
|
||||
@@ -126,7 +126,7 @@ public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestB
|
||||
assertEquals("0.0", view.getText());
|
||||
|
||||
mObj.dField.set(1);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
|
||||
assertEquals("1.0", view.getText());
|
||||
}
|
||||
@@ -137,7 +137,7 @@ public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestB
|
||||
assertEquals("Hello", view.getText());
|
||||
|
||||
mObj.oField.set("World");
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
|
||||
assertEquals("World", view.getText());
|
||||
}
|
||||
|
||||
@@ -15,26 +15,26 @@ package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.BaseDataBinderTest;
|
||||
import com.android.databinding.testapp.R;
|
||||
import com.android.databinding.testapp.generated.ObservableWithNotBindableFieldBinder;
|
||||
import com.android.databinding.testapp.generated.ObservableWithNotBindableFieldBinding;
|
||||
import com.android.databinding.testapp.vo.ObservableWithNotBindableFieldObject;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
|
||||
public class ObservableWithNotBindableFieldObjectTest extends BaseDataBinderTest<ObservableWithNotBindableFieldBinder> {
|
||||
public class ObservableWithNotBindableFieldObjectTest extends BaseDataBinderTest<ObservableWithNotBindableFieldBinding> {
|
||||
|
||||
|
||||
public ObservableWithNotBindableFieldObjectTest() {
|
||||
super(ObservableWithNotBindableFieldBinder.class, R.layout.observable_with_not_bindable_field);
|
||||
super(ObservableWithNotBindableFieldBinding.class);
|
||||
}
|
||||
|
||||
@UiThreadTest
|
||||
public void testSimple() {
|
||||
ObservableWithNotBindableFieldObject obj = new ObservableWithNotBindableFieldObject();
|
||||
mBinder.setObj(obj);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals("", mBinder.getTextView().getText().toString());
|
||||
obj.update("100");
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals("100", mBinder.getTextView().getText().toString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,19 +15,15 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.library.PropertyChangeRegistry;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinder;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinding;
|
||||
|
||||
import android.binding.Observable;
|
||||
import android.binding.OnPropertyChangedListener;
|
||||
import android.util.ArrayMap;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class ProcessBindableTest extends BaseDataBinderTest<BasicBindingBinder> {
|
||||
public class ProcessBindableTest extends BaseDataBinderTest<BasicBindingBinding> {
|
||||
private static String[] EXPECTED_BINDING_NAMES = {
|
||||
"bindableField1",
|
||||
"bindableField2",
|
||||
@@ -40,7 +36,7 @@ public class ProcessBindableTest extends BaseDataBinderTest<BasicBindingBinder>
|
||||
};
|
||||
|
||||
public ProcessBindableTest() {
|
||||
super(BasicBindingBinder.class, R.layout.basic_binding);
|
||||
super(BasicBindingBinding.class);
|
||||
}
|
||||
|
||||
public void testFieldsGenerated() throws IllegalAccessException {
|
||||
|
||||
@@ -15,19 +15,19 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.ProgressBarAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.ProgressBarAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.ProgressBarBindingObject;
|
||||
|
||||
import android.os.Build;
|
||||
import android.widget.ProgressBar;
|
||||
|
||||
public class ProgressBarBindingAdapterTest
|
||||
extends BindingAdapterTestBase<ProgressBarAdapterTestBinder, ProgressBarBindingObject> {
|
||||
extends BindingAdapterTestBase<ProgressBarAdapterTestBinding, ProgressBarBindingObject> {
|
||||
|
||||
ProgressBar mView;
|
||||
|
||||
public ProgressBarBindingAdapterTest() {
|
||||
super(ProgressBarAdapterTestBinder.class, ProgressBarBindingObject.class,
|
||||
super(ProgressBarAdapterTestBinding.class, ProgressBarBindingObject.class,
|
||||
R.layout.progress_bar_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,17 +16,17 @@
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.library.PropertyChangeRegistry;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinder;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinding;
|
||||
|
||||
import android.binding.Observable;
|
||||
import android.binding.OnPropertyChangedListener;
|
||||
|
||||
public class PropertyChangeRegistryTest extends BaseDataBinderTest<BasicBindingBinder> {
|
||||
public class PropertyChangeRegistryTest extends BaseDataBinderTest<BasicBindingBinding> {
|
||||
|
||||
private int notificationCount = 0;
|
||||
|
||||
public PropertyChangeRegistryTest() {
|
||||
super(BasicBindingBinder.class, R.layout.basic_binding);
|
||||
super(BasicBindingBinding.class);
|
||||
}
|
||||
|
||||
public void testNotifyChanged() {
|
||||
|
||||
@@ -15,18 +15,18 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.RadioGroupAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.RadioGroupAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.RadioGroupBindingObject;
|
||||
|
||||
import android.widget.RadioGroup;
|
||||
|
||||
public class RadioGroupBindingAdapterTest
|
||||
extends BindingAdapterTestBase<RadioGroupAdapterTestBinder, RadioGroupBindingObject> {
|
||||
extends BindingAdapterTestBase<RadioGroupAdapterTestBinding, RadioGroupBindingObject> {
|
||||
|
||||
RadioGroup mView;
|
||||
|
||||
public RadioGroupBindingAdapterTest() {
|
||||
super(RadioGroupAdapterTestBinder.class, RadioGroupBindingObject.class,
|
||||
super(RadioGroupAdapterTestBinding.class, RadioGroupBindingObject.class,
|
||||
R.layout.radio_group_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,15 +15,15 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.ResourceTestBinder;
|
||||
import com.android.databinding.testapp.generated.ResourceTestBinding;
|
||||
|
||||
import android.test.UiThreadTest;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class ResourceTest extends BaseDataBinderTest<ResourceTestBinder> {
|
||||
public class ResourceTest extends BaseDataBinderTest<ResourceTestBinding> {
|
||||
|
||||
public ResourceTest() {
|
||||
super(ResourceTestBinder.class, R.layout.resource_test);
|
||||
super(ResourceTestBinding.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -38,7 +38,7 @@ public class ResourceTest extends BaseDataBinderTest<ResourceTestBinder> {
|
||||
runTestOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
}
|
||||
});
|
||||
} catch (Throwable throwable) {
|
||||
@@ -52,7 +52,7 @@ public class ResourceTest extends BaseDataBinderTest<ResourceTestBinder> {
|
||||
assertEquals("Mrs. Doubtfire", view.getText().toString());
|
||||
|
||||
mBinder.setTitle("Mr.");
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals("Mr. Doubtfire", view.getText().toString());
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ public class ResourceTest extends BaseDataBinderTest<ResourceTestBinder> {
|
||||
assertEquals("oranges", view.getText().toString());
|
||||
|
||||
mBinder.setCount(1);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
assertEquals("orange", view.getText().toString());
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.SpinnerAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.SpinnerAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.SpinnerBindingObject;
|
||||
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
@@ -23,12 +23,12 @@ import android.os.Build;
|
||||
import android.widget.Spinner;
|
||||
|
||||
public class SpinnerBindingAdapterTest
|
||||
extends BindingAdapterTestBase<SpinnerAdapterTestBinder, SpinnerBindingObject> {
|
||||
extends BindingAdapterTestBase<SpinnerAdapterTestBinding, SpinnerBindingObject> {
|
||||
|
||||
Spinner mView;
|
||||
|
||||
public SpinnerBindingAdapterTest() {
|
||||
super(SpinnerAdapterTestBinder.class, SpinnerBindingObject.class,
|
||||
super(SpinnerAdapterTestBinding.class, SpinnerBindingObject.class,
|
||||
R.layout.spinner_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.SwitchAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.SwitchAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.SwitchBindingObject;
|
||||
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
@@ -23,12 +23,12 @@ import android.os.Build;
|
||||
import android.widget.Switch;
|
||||
|
||||
public class SwitchBindingAdapterTest
|
||||
extends BindingAdapterTestBase<SwitchAdapterTestBinder, SwitchBindingObject> {
|
||||
extends BindingAdapterTestBase<SwitchAdapterTestBinding, SwitchBindingObject> {
|
||||
|
||||
Switch mView;
|
||||
|
||||
public SwitchBindingAdapterTest() {
|
||||
super(SwitchAdapterTestBinder.class, SwitchBindingObject.class,
|
||||
super(SwitchAdapterTestBinding.class, SwitchBindingObject.class,
|
||||
R.layout.switch_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.TabWidgetAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.TabWidgetAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.TabWidgetBindingObject;
|
||||
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
@@ -23,12 +23,12 @@ import android.os.Build;
|
||||
import android.widget.TabWidget;
|
||||
|
||||
public class TabWidgetBindingAdapterTest
|
||||
extends BindingAdapterTestBase<TabWidgetAdapterTestBinder, TabWidgetBindingObject> {
|
||||
extends BindingAdapterTestBase<TabWidgetAdapterTestBinding, TabWidgetBindingObject> {
|
||||
|
||||
TabWidget mView;
|
||||
|
||||
public TabWidgetBindingAdapterTest() {
|
||||
super(TabWidgetAdapterTestBinder.class, TabWidgetBindingObject.class,
|
||||
super(TabWidgetAdapterTestBinding.class, TabWidgetBindingObject.class,
|
||||
R.layout.tab_widget_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.TableLayoutAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.TableLayoutAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.TableLayoutBindingObject;
|
||||
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
@@ -23,12 +23,12 @@ import android.os.Build;
|
||||
import android.widget.TableLayout;
|
||||
|
||||
public class TableLayoutBindingAdapterTest
|
||||
extends BindingAdapterTestBase<TableLayoutAdapterTestBinder, TableLayoutBindingObject> {
|
||||
extends BindingAdapterTestBase<TableLayoutAdapterTestBinding, TableLayoutBindingObject> {
|
||||
|
||||
TableLayout mView;
|
||||
|
||||
public TableLayoutBindingAdapterTest() {
|
||||
super(TableLayoutAdapterTestBinder.class, TableLayoutBindingObject.class,
|
||||
super(TableLayoutAdapterTestBinding.class, TableLayoutBindingObject.class,
|
||||
R.layout.table_layout_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.TextViewAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.TextViewAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.TextViewBindingObject;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
@@ -33,10 +33,10 @@ import android.text.method.TextKeyListener;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class TextViewBindingAdapterTest
|
||||
extends BindingAdapterTestBase<TextViewAdapterTestBinder, TextViewBindingObject> {
|
||||
extends BindingAdapterTestBase<TextViewAdapterTestBinding, TextViewBindingObject> {
|
||||
|
||||
public TextViewBindingAdapterTest() {
|
||||
super(TextViewAdapterTestBinder.class, TextViewBindingObject.class,
|
||||
super(TextViewAdapterTestBinding.class, TextViewBindingObject.class,
|
||||
R.layout.text_view_adapter_test);
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ public class TextViewBindingAdapterTest
|
||||
@Override
|
||||
public void run() {
|
||||
mBindingObject.setCapitalize(TextKeyListener.Capitalize.CHARACTERS);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -171,7 +171,7 @@ public class TextViewBindingAdapterTest
|
||||
@Override
|
||||
public void run() {
|
||||
mBindingObject.setCapitalize(TextKeyListener.Capitalize.WORDS);
|
||||
mBinder.rebindDirty();
|
||||
mBinder.executePendingBindings();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.ViewAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.ViewAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.ViewBindingObject;
|
||||
|
||||
import android.content.res.ColorStateList;
|
||||
@@ -23,10 +23,10 @@ import android.os.Build;
|
||||
import android.test.UiThreadTest;
|
||||
import android.view.View;
|
||||
|
||||
public class ViewBindingAdapterTest extends BindingAdapterTestBase<ViewAdapterTestBinder, ViewBindingObject> {
|
||||
public class ViewBindingAdapterTest extends BindingAdapterTestBase<ViewAdapterTestBinding, ViewBindingObject> {
|
||||
|
||||
public ViewBindingAdapterTest() {
|
||||
super(ViewAdapterTestBinder.class, ViewBindingObject.class, R.layout.view_adapter_test);
|
||||
super(ViewAdapterTestBinding.class, ViewBindingObject.class, R.layout.view_adapter_test);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,19 +15,19 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.ViewGroupAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.ViewGroupAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.ViewGroupBindingObject;
|
||||
|
||||
import android.os.Build;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
public class ViewGroupBindingAdapterTest
|
||||
extends BindingAdapterTestBase<ViewGroupAdapterTestBinder, ViewGroupBindingObject> {
|
||||
extends BindingAdapterTestBase<ViewGroupAdapterTestBinding, ViewGroupBindingObject> {
|
||||
|
||||
ViewGroup mView;
|
||||
|
||||
public ViewGroupBindingAdapterTest() {
|
||||
super(ViewGroupAdapterTestBinder.class, ViewGroupBindingObject.class,
|
||||
super(ViewGroupAdapterTestBinding.class, ViewGroupBindingObject.class,
|
||||
R.layout.view_group_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,18 +15,18 @@
|
||||
*/
|
||||
package com.android.databinding.testapp;
|
||||
|
||||
import com.android.databinding.testapp.generated.ViewStubAdapterTestBinder;
|
||||
import com.android.databinding.testapp.generated.ViewStubAdapterTestBinding;
|
||||
import com.android.databinding.testapp.vo.ViewStubBindingObject;
|
||||
|
||||
import android.view.ViewStub;
|
||||
|
||||
public class ViewStubBindingAdapterTest
|
||||
extends BindingAdapterTestBase<ViewStubAdapterTestBinder, ViewStubBindingObject> {
|
||||
extends BindingAdapterTestBase<ViewStubAdapterTestBinding, ViewStubBindingObject> {
|
||||
|
||||
ViewStub mView;
|
||||
|
||||
public ViewStubBindingAdapterTest() {
|
||||
super(ViewStubAdapterTestBinder.class, ViewStubBindingObject.class,
|
||||
super(ViewStubAdapterTestBinding.class, ViewStubBindingObject.class,
|
||||
R.layout.view_stub_adapter_test);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,27 +13,28 @@
|
||||
|
||||
package com.android.databinding.testapp.multiconfig;
|
||||
|
||||
import com.android.databinding.library.IViewDataBinder;
|
||||
import com.android.databinding.library.ViewDataBinding;
|
||||
import com.android.databinding.testapp.BaseLandDataBinderTest;
|
||||
import com.android.databinding.testapp.R;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinder;
|
||||
import com.android.databinding.testapp.generated.ConditionalBindingBinder;
|
||||
import com.android.databinding.testapp.generated.IncludedLayoutBinder;
|
||||
import com.android.databinding.testapp.generated.MultiResLayoutBinder;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinding;
|
||||
import com.android.databinding.testapp.generated.ConditionalBindingBinding;
|
||||
import com.android.databinding.testapp.generated.IncludedLayoutBinding;
|
||||
import com.android.databinding.testapp.generated.MultiResLayoutBinding;
|
||||
import com.android.databinding.testapp.vo.NotBindableVo;
|
||||
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class LandscapeConfigTest extends BaseLandDataBinderTest<MultiResLayoutBinder> {
|
||||
public class LandscapeConfigTest extends BaseLandDataBinderTest<MultiResLayoutBinding> {
|
||||
|
||||
public LandscapeConfigTest() {
|
||||
super(MultiResLayoutBinder.class, R.layout.multi_res_layout);
|
||||
super(MultiResLayoutBinding.class, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
}
|
||||
|
||||
public void testSharedViewIdAndVariableInheritance()
|
||||
throws InterruptedException, NoSuchMethodException, NoSuchFieldException {
|
||||
assertEquals("MultiResLayoutBinderLandImpl", mBinder.getClass().getSimpleName());
|
||||
assertEquals("MultiResLayoutBindingLandImpl", mBinder.getClass().getSimpleName());
|
||||
assertMethod(TextView.class, "getObjectInLandTextView");
|
||||
assertMethod(TextView.class, "getObjectInDefaultTextView");
|
||||
assertMethod(View.class, "getObjectInDefaultTextView2");
|
||||
@@ -46,14 +47,14 @@ public class LandscapeConfigTest extends BaseLandDataBinderTest<MultiResLayoutBi
|
||||
assertField(NotBindableVo.class, "mObjectInDefault");
|
||||
|
||||
// includes
|
||||
assertMethod(IViewDataBinder.class, "getIncludedLayoutConflict");
|
||||
assertMethod(BasicBindingBinder.class, "getIncludedLayoutShared");
|
||||
assertMethod(ConditionalBindingBinder.class, "getIncludedLayoutPort");
|
||||
assertMethod(ConditionalBindingBinder.class, "getIncludedLayoutLand");
|
||||
assertMethod(ViewDataBinding.class, "getIncludedLayoutConflict");
|
||||
assertMethod(BasicBindingBinding.class, "getIncludedLayoutShared");
|
||||
assertMethod(ConditionalBindingBinding.class, "getIncludedLayoutPort");
|
||||
assertMethod(ConditionalBindingBinding.class, "getIncludedLayoutLand");
|
||||
|
||||
assertField(IncludedLayoutBinder.class, "mIncludedLayoutConflict");
|
||||
assertField(BasicBindingBinder.class, "mIncludedLayoutShared");
|
||||
assertField(ConditionalBindingBinder.class, "mIncludedLayoutLand");
|
||||
assertField(IncludedLayoutBinding.class, "mIncludedLayoutConflict");
|
||||
assertField(BasicBindingBinding.class, "mIncludedLayoutShared");
|
||||
assertField(ConditionalBindingBinding.class, "mIncludedLayoutLand");
|
||||
|
||||
assertNoField("mIncludedLayoutPort");
|
||||
}
|
||||
|
||||
@@ -13,13 +13,12 @@
|
||||
|
||||
package com.android.databinding.testapp.multiconfig;
|
||||
|
||||
import com.android.databinding.library.IViewDataBinder;
|
||||
import com.android.databinding.library.ViewDataBinding;
|
||||
import com.android.databinding.testapp.BaseDataBinderTest;
|
||||
import com.android.databinding.testapp.R;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinder;
|
||||
import com.android.databinding.testapp.generated.ConditionalBindingBinder;
|
||||
import com.android.databinding.testapp.generated.IncludedLayoutBinder;
|
||||
import com.android.databinding.testapp.generated.MultiResLayoutBinder;
|
||||
import com.android.databinding.testapp.generated.BasicBindingBinding;
|
||||
import com.android.databinding.testapp.generated.ConditionalBindingBinding;
|
||||
import com.android.databinding.testapp.generated.IncludedLayoutBinding;
|
||||
import com.android.databinding.testapp.generated.MultiResLayoutBinding;
|
||||
import com.android.databinding.testapp.vo.NotBindableVo;
|
||||
|
||||
import android.content.pm.ActivityInfo;
|
||||
@@ -27,15 +26,15 @@ import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class PortraitConfigTest extends BaseDataBinderTest<MultiResLayoutBinder> {
|
||||
public class PortraitConfigTest extends BaseDataBinderTest<MultiResLayoutBinding> {
|
||||
public PortraitConfigTest() {
|
||||
super(MultiResLayoutBinder.class, R.layout.multi_res_layout, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
super(MultiResLayoutBinding.class, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
}
|
||||
|
||||
public void testSharedViewIdAndVariableInheritance()
|
||||
throws InterruptedException, NoSuchMethodException, NoSuchFieldException {
|
||||
assertEquals("MultiResLayoutBinderImpl", mBinder.getClass().getSimpleName());
|
||||
assertEquals("MultiResLayoutBinderImpl", mBinder.getClass().getSimpleName());
|
||||
assertEquals("MultiResLayoutBindingImpl", mBinder.getClass().getSimpleName());
|
||||
assertEquals("MultiResLayoutBindingImpl", mBinder.getClass().getSimpleName());
|
||||
assertMethod(TextView.class, "getObjectInLandTextView");
|
||||
assertMethod(TextView.class, "getObjectInDefaultTextView");
|
||||
assertMethod(View.class, "getObjectInDefaultTextView2");
|
||||
@@ -49,14 +48,14 @@ public class PortraitConfigTest extends BaseDataBinderTest<MultiResLayoutBinder>
|
||||
|
||||
|
||||
// includes
|
||||
assertMethod(IViewDataBinder.class, "getIncludedLayoutConflict");
|
||||
assertMethod(BasicBindingBinder.class, "getIncludedLayoutShared");
|
||||
assertMethod(ConditionalBindingBinder.class, "getIncludedLayoutPort");
|
||||
assertMethod(ConditionalBindingBinder.class, "getIncludedLayoutLand");
|
||||
assertMethod(ViewDataBinding.class, "getIncludedLayoutConflict");
|
||||
assertMethod(BasicBindingBinding.class, "getIncludedLayoutShared");
|
||||
assertMethod(ConditionalBindingBinding.class, "getIncludedLayoutPort");
|
||||
assertMethod(ConditionalBindingBinding.class, "getIncludedLayoutLand");
|
||||
|
||||
assertField(BasicBindingBinder.class, "mIncludedLayoutConflict");
|
||||
assertField(BasicBindingBinder.class, "mIncludedLayoutShared");
|
||||
assertField(ConditionalBindingBinder.class, "mIncludedLayoutPort");
|
||||
assertField(BasicBindingBinding.class, "mIncludedLayoutConflict");
|
||||
assertField(BasicBindingBinding.class, "mIncludedLayoutShared");
|
||||
assertField(ConditionalBindingBinding.class, "mIncludedLayoutPort");
|
||||
|
||||
assertNoField("mIncludedLayoutLand");
|
||||
}
|
||||
|
||||
@@ -1,134 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2014 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.databinding.library;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.WeakHashMap;
|
||||
|
||||
public class DataBinder {
|
||||
|
||||
static DataBinderMapper sMapper;
|
||||
|
||||
/**
|
||||
* Instead of directly accessing Build.VERSION.SDK_INT, generated code uses this value so that
|
||||
* we can test API dependent behavior.
|
||||
*/
|
||||
static int SDK_INT = Build.VERSION.SDK_INT;
|
||||
|
||||
private WeakHashMap<View, ViewDataBinder> mDataBinderMap = new WeakHashMap<>();
|
||||
|
||||
private SparseArray<WeakReference<ViewDataBinder>> mDataBinderById = new SparseArray<>();
|
||||
|
||||
private static DataBinderMapper getMapper() {
|
||||
if (sMapper != null) {
|
||||
return sMapper;
|
||||
}
|
||||
try {
|
||||
sMapper = (DataBinderMapper) DataBinder.class.getClassLoader()
|
||||
.loadClass(
|
||||
"com.android.databinding.library.GeneratedDataBinderRenderer")
|
||||
.newInstance();
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException(t);
|
||||
}
|
||||
return sMapper;
|
||||
}
|
||||
|
||||
public static int getBuildSdkInt() {
|
||||
return SDK_INT;
|
||||
}
|
||||
|
||||
public static int convertToId(String key) {
|
||||
return getMapper().getId(key);
|
||||
}
|
||||
|
||||
public View inflate(Context context, int layoutId) {
|
||||
View view = LayoutInflater.from(context).inflate(layoutId, null);
|
||||
ViewDataBinder dataBinder = getMapper().getDataBinder(view, layoutId);
|
||||
if (dataBinder != null) {
|
||||
mDataBinderMap.put(view, dataBinder);
|
||||
mDataBinderById.put(layoutId, new WeakReference<>(dataBinder));
|
||||
}
|
||||
return view;
|
||||
}
|
||||
|
||||
public boolean setVariable(View view, String name, Object variable) {
|
||||
ViewDataBinder binder = getDataBinder(view);
|
||||
if (binder == null) {
|
||||
return false;
|
||||
}
|
||||
final int nameId = convertToId(name);
|
||||
if (nameId == -1) {
|
||||
return false;
|
||||
}
|
||||
return binder.setVariable(nameId, variable);
|
||||
}
|
||||
|
||||
public boolean setVariable(int layoutId, String name, Object variable) {
|
||||
ViewDataBinder binder = getDataBinder(layoutId);
|
||||
if (binder == null) {
|
||||
return false;
|
||||
}
|
||||
final int nameId = convertToId(name);
|
||||
if (nameId == -1) {
|
||||
return false;
|
||||
}
|
||||
return binder.setVariable(nameId, variable);
|
||||
}
|
||||
|
||||
public ViewDataBinder getDataBinder(View view) {
|
||||
return mDataBinderMap.get(view);
|
||||
}
|
||||
|
||||
public <T> T getDataBinderI(Class<T> klass, View view) {
|
||||
return (T) getDataBinder(view);
|
||||
}
|
||||
|
||||
public <T> T getDataBinderI(Class<T> klass, int layoutId) {
|
||||
return (T) getDataBinder(layoutId);
|
||||
}
|
||||
|
||||
public static ViewDataBinder createBinder(Context context, int layoutId, ViewGroup parent) {
|
||||
return getMapper()
|
||||
.getDataBinder(LayoutInflater.from(context).inflate(layoutId, parent, false),
|
||||
layoutId);
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T createBinder(Class<T> klass, Context context, int layoutId, ViewGroup parent) {
|
||||
return (T) createBinder(context, layoutId, parent);
|
||||
}
|
||||
|
||||
public static <T> T createBinder(View view, int layoutId) {
|
||||
return (T) getMapper().getDataBinder(view, layoutId);
|
||||
}
|
||||
|
||||
public ViewDataBinder getDataBinder(int layoutId) {
|
||||
WeakReference<ViewDataBinder> weakReference = mDataBinderById.get(layoutId);
|
||||
if (weakReference == null) {
|
||||
return null;
|
||||
}
|
||||
return weakReference.get();
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,6 @@ package com.android.databinding.library;
|
||||
import android.view.View;
|
||||
|
||||
public interface DataBinderMapper {
|
||||
ViewDataBinder getDataBinder(View view, int layoutId);
|
||||
public ViewDataBinding getDataBinder(View view, int layoutId);
|
||||
public int getId(String key);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.databinding.library;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
/**
|
||||
* Utility class to create {@link ViewDataBinding} from layouts.
|
||||
*/
|
||||
public class DataBindingUtil {
|
||||
private static DataBinderMapper sMapper;
|
||||
|
||||
private static DataBinderMapper getMapper() {
|
||||
if (sMapper != null) {
|
||||
return sMapper;
|
||||
}
|
||||
try {
|
||||
sMapper = (DataBinderMapper) ViewDataBinding.class.getClassLoader()
|
||||
.loadClass("com.android.databinding.library.GeneratedDataBinderRenderer")
|
||||
.newInstance();
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException(t);
|
||||
}
|
||||
return sMapper;
|
||||
}
|
||||
|
||||
|
||||
public static <T extends ViewDataBinding> T inflate(Context context, int layoutId,
|
||||
ViewGroup parent, boolean attachToParent) {
|
||||
final LayoutInflater inflater = LayoutInflater.from(context);
|
||||
final View view = inflater.inflate(layoutId, parent, attachToParent);
|
||||
return bindTo(view, layoutId);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T extends ViewDataBinding> T bindTo(View root, int layoutId) {
|
||||
return (T) getMapper().getDataBinder(root, layoutId);
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2014 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.databinding.library;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
public interface IViewDataBinder {
|
||||
public View getRoot();
|
||||
public abstract void rebindDirty();
|
||||
public abstract void invalidateAll();
|
||||
}
|
||||
@@ -22,7 +22,12 @@ import android.binding.ObservableMap;
|
||||
import android.binding.OnListChangedListener;
|
||||
import android.binding.OnMapChangedListener;
|
||||
import android.binding.OnPropertyChangedListener;
|
||||
import android.util.SparseArray;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Build.VERSION;
|
||||
import android.os.Build.VERSION_CODES;
|
||||
import android.util.SparseIntArray;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
@@ -30,54 +35,119 @@ import java.lang.Override;
|
||||
import java.lang.Runnable;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
abstract public class ViewDataBinder {
|
||||
public abstract class ViewDataBinding {
|
||||
|
||||
/**
|
||||
* Instead of directly accessing Build.VERSION.SDK_INT, generated code uses this value so that
|
||||
* we can test API dependent behavior.
|
||||
*/
|
||||
static int SDK_INT = VERSION.SDK_INT;
|
||||
|
||||
/**
|
||||
* Prefix for android:tag on Views with binding. The root View and include tags will not have
|
||||
* android:tag attributes and will use ids instead.
|
||||
*/
|
||||
public static final String BINDING_TAG_PREFIX = "bindingTag";
|
||||
|
||||
// The length of BINDING_TAG_PREFIX prevents calling length repeatedly.
|
||||
private static final int BINDING_NUMBER_START = BINDING_TAG_PREFIX.length();
|
||||
|
||||
/**
|
||||
* Method object extracted out to attach a listener to a bound Observable object.
|
||||
*/
|
||||
private static final CreateWeakListener CREATE_PROPERTY_LISTENER = new CreateWeakListener() {
|
||||
@Override
|
||||
public WeakListener create(ViewDataBinder viewDataBinder, int localFieldId) {
|
||||
return new WeakPropertyListener(viewDataBinder, localFieldId);
|
||||
public WeakListener create(ViewDataBinding viewDataBinding, int localFieldId) {
|
||||
return new WeakPropertyListener(viewDataBinding, localFieldId);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Method object extracted out to attach a listener to a bound ObservableList object.
|
||||
*/
|
||||
private static final CreateWeakListener CREATE_LIST_LISTENER = new CreateWeakListener() {
|
||||
@Override
|
||||
public WeakListener create(ViewDataBinder viewDataBinder, int localFieldId) {
|
||||
return new WeakListListener(viewDataBinder, localFieldId);
|
||||
public WeakListener create(ViewDataBinding viewDataBinding, int localFieldId) {
|
||||
return new WeakListListener(viewDataBinding, localFieldId);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Method object extracted out to attach a listener to a bound ObservableMap object.
|
||||
*/
|
||||
private static final CreateWeakListener CREATE_MAP_LISTENER = new CreateWeakListener() {
|
||||
@Override
|
||||
public WeakListener create(ViewDataBinder viewDataBinder, int localFieldId) {
|
||||
return new WeakMapListener(viewDataBinder, localFieldId);
|
||||
public WeakListener create(ViewDataBinding viewDataBinding, int localFieldId) {
|
||||
return new WeakMapListener(viewDataBinding, localFieldId);
|
||||
}
|
||||
};
|
||||
|
||||
WeakListener[] mLocalFieldObservers;
|
||||
protected abstract boolean onFieldChange(int mLocalFieldId, Object object, int fieldId);
|
||||
public abstract boolean setVariable(int variableId, Object variable);
|
||||
public abstract void rebindDirty();
|
||||
private final View mRoot;
|
||||
|
||||
private boolean mPendingRebind = false;
|
||||
/**
|
||||
* Runnable executed on animation heartbeat to rebind the dirty Views.
|
||||
*/
|
||||
private Runnable mRebindRunnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
rebindDirty();
|
||||
mPendingRebind = false;
|
||||
if (mPendingRebind) {
|
||||
mPendingRebind = false;
|
||||
executePendingBindings();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public ViewDataBinder(View root, int localFieldCount) {
|
||||
/**
|
||||
* Flag indicates that there are pending bindings that need to be reevaluated.
|
||||
*/
|
||||
private boolean mPendingRebind = false;
|
||||
|
||||
/**
|
||||
* The observed expressions.
|
||||
*/
|
||||
private WeakListener[] mLocalFieldObservers;
|
||||
|
||||
/**
|
||||
* The root View that this Binding is associated with.
|
||||
*/
|
||||
private final View mRoot;
|
||||
|
||||
protected ViewDataBinding(View root, int localFieldCount) {
|
||||
mLocalFieldObservers = new WeakListener[localFieldCount];
|
||||
mRoot = root;
|
||||
mRoot.setTag(this);
|
||||
this.mRoot = root;
|
||||
// TODO: When targeting ICS and above, use setTag(id, this) instead
|
||||
this.mRoot.setTag(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() throws Throwable {
|
||||
public static int getBuildSdkInt() {
|
||||
return SDK_INT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an observed object changes. Sets the appropriate dirty flag if applicable.
|
||||
* @param localFieldId The index into mLocalFieldObservers that this Object resides in.
|
||||
* @param object The object that has changed.
|
||||
* @param fieldId The android.binding.BR ID of the field being changed or _all if
|
||||
* no specific field is being notified.
|
||||
* @return true if this change should cause a change to the UI.
|
||||
*/
|
||||
protected abstract boolean onFieldChange(int localFieldId, Object object, int fieldId);
|
||||
|
||||
public abstract boolean setVariable(int variableId, Object variable);
|
||||
|
||||
/**
|
||||
* Evaluates the pending bindings, updating any Views that have expressions bound to
|
||||
* modified variables. This <b>must</b> be run on the UI thread.
|
||||
*/
|
||||
public abstract void executePendingBindings();
|
||||
|
||||
/**
|
||||
* Used internally to invalidate flags of included layouts.
|
||||
*/
|
||||
public abstract void invalidateAll();
|
||||
|
||||
/**
|
||||
* Removes binding listeners to expression variables.
|
||||
*/
|
||||
public void unbind() {
|
||||
for (WeakListener weakListener : mLocalFieldObservers) {
|
||||
if (weakListener != null) {
|
||||
weakListener.unregister();
|
||||
@@ -85,6 +155,15 @@ abstract public class ViewDataBinder {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() throws Throwable {
|
||||
unbind();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the outermost View in the layout file associated with the Binding.
|
||||
* @return the outermost View in the layout file associated with the Binding.
|
||||
*/
|
||||
public View getRoot() {
|
||||
return mRoot;
|
||||
}
|
||||
@@ -109,7 +188,11 @@ abstract public class ViewDataBinder {
|
||||
return;
|
||||
}
|
||||
mPendingRebind = true;
|
||||
mRoot.postOnAnimation(mRebindRunnable);
|
||||
if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) {
|
||||
mRoot.postOnAnimation(mRebindRunnable);
|
||||
} else {
|
||||
mRoot.post(mRebindRunnable);
|
||||
}
|
||||
}
|
||||
|
||||
protected Object getObservedField(int localFieldId) {
|
||||
@@ -163,27 +246,46 @@ abstract public class ViewDataBinder {
|
||||
listener.setTarget(observable);
|
||||
}
|
||||
|
||||
protected static void mapTaggedChildViews(View root, View[] views,
|
||||
SparseArray<View> binders) {
|
||||
/**
|
||||
* Walk all children of root and assign tagged Views to associated indices in views.
|
||||
*
|
||||
* @param root The base of the View hierarchy to walk.
|
||||
* @param views An array of all Views with binding expressions and all Views with IDs. This
|
||||
* will start empty and will contain the found Views when this method completes.
|
||||
* @param includes A mapping of include tag IDs to the index into the views array.
|
||||
* @param viewsWithIds A mapping of views with IDs but without expressions to the index
|
||||
* into the views array.
|
||||
*/
|
||||
protected static void mapTaggedChildViews(View root, View[] views, SparseIntArray includes,
|
||||
SparseIntArray viewsWithIds) {
|
||||
if (root instanceof ViewGroup) {
|
||||
ViewGroup viewGroup = (ViewGroup) root;
|
||||
for (int i = viewGroup.getChildCount() - 1; i >= 0; i--) {
|
||||
mapTaggedViews(viewGroup.getChildAt(i), views, binders);
|
||||
mapTaggedViews(viewGroup.getChildAt(i), views, includes, viewsWithIds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void mapTaggedViews(View view, View[] views, SparseArray<View> binders) {
|
||||
private static void mapTaggedViews(View view, View[] views, SparseIntArray includes,
|
||||
SparseIntArray viewsWithIds) {
|
||||
boolean visitChildren = true;
|
||||
String tag = (String) view.getTag();
|
||||
System.out.println("tagged with " + tag + " is " + view);
|
||||
int id;
|
||||
if (tag != null && tag.startsWith(BINDING_TAG_PREFIX)) {
|
||||
int tagIndex = parseTagInt(tag);
|
||||
System.out.println("tag id is " + tagIndex);
|
||||
views[tagIndex] = view;
|
||||
} else if (view.getId() > 0 && binders != null) {
|
||||
binders.put(view.getId(), view);
|
||||
} else if ((id = view.getId()) > 0) {
|
||||
int index;
|
||||
if (viewsWithIds != null && (index = viewsWithIds.get(id, -1)) >= 0) {
|
||||
views[index] = view;
|
||||
} else if (includes != null && (index = includes.get(id, -1)) >= 0) {
|
||||
views[index] = view;
|
||||
visitChildren = false;
|
||||
}
|
||||
}
|
||||
if (visitChildren) {
|
||||
mapTaggedChildViews(view, views, includes, viewsWithIds);
|
||||
}
|
||||
mapTaggedChildViews(view, views, binders);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -203,13 +305,13 @@ abstract public class ViewDataBinder {
|
||||
return val;
|
||||
}
|
||||
|
||||
protected static abstract class WeakListener<T> {
|
||||
private final WeakReference<ViewDataBinder> mBinder;
|
||||
private static abstract class WeakListener<T> {
|
||||
private final WeakReference<ViewDataBinding> mBinder;
|
||||
protected final int mLocalFieldId;
|
||||
private T mTarget;
|
||||
|
||||
public WeakListener(ViewDataBinder binder, int localFieldId) {
|
||||
mBinder = new WeakReference<ViewDataBinder>(binder);
|
||||
public WeakListener(ViewDataBinding binder, int localFieldId) {
|
||||
mBinder = new WeakReference<ViewDataBinding>(binder);
|
||||
mLocalFieldId = localFieldId;
|
||||
}
|
||||
|
||||
@@ -235,8 +337,8 @@ abstract public class ViewDataBinder {
|
||||
return mTarget;
|
||||
}
|
||||
|
||||
protected ViewDataBinder getBinder() {
|
||||
ViewDataBinder binder = mBinder.get();
|
||||
protected ViewDataBinding getBinder() {
|
||||
ViewDataBinding binder = mBinder.get();
|
||||
if (binder == null) {
|
||||
unregister(); // The binder is dead
|
||||
}
|
||||
@@ -247,9 +349,9 @@ abstract public class ViewDataBinder {
|
||||
protected abstract void removeListener(T target);
|
||||
}
|
||||
|
||||
protected static class WeakPropertyListener extends WeakListener<Observable>
|
||||
private static class WeakPropertyListener extends WeakListener<Observable>
|
||||
implements OnPropertyChangedListener {
|
||||
public WeakPropertyListener(ViewDataBinder binder, int localFieldId) {
|
||||
public WeakPropertyListener(ViewDataBinding binder, int localFieldId) {
|
||||
super(binder, localFieldId);
|
||||
}
|
||||
|
||||
@@ -265,7 +367,7 @@ abstract public class ViewDataBinder {
|
||||
|
||||
@Override
|
||||
public void onPropertyChanged(Observable sender, int fieldId) {
|
||||
ViewDataBinder binder = getBinder();
|
||||
ViewDataBinding binder = getBinder();
|
||||
if (binder == null) {
|
||||
return;
|
||||
}
|
||||
@@ -277,16 +379,16 @@ abstract public class ViewDataBinder {
|
||||
}
|
||||
}
|
||||
|
||||
protected static class WeakListListener extends WeakListener<ObservableList>
|
||||
private static class WeakListListener extends WeakListener<ObservableList>
|
||||
implements OnListChangedListener {
|
||||
|
||||
public WeakListListener(ViewDataBinder binder, int localFieldId) {
|
||||
public WeakListListener(ViewDataBinding binder, int localFieldId) {
|
||||
super(binder, localFieldId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged() {
|
||||
ViewDataBinder binder = getBinder();
|
||||
ViewDataBinding binder = getBinder();
|
||||
if (binder == null) {
|
||||
return;
|
||||
}
|
||||
@@ -328,9 +430,9 @@ abstract public class ViewDataBinder {
|
||||
}
|
||||
}
|
||||
|
||||
protected static class WeakMapListener extends WeakListener<ObservableMap>
|
||||
private static class WeakMapListener extends WeakListener<ObservableMap>
|
||||
implements OnMapChangedListener {
|
||||
public WeakMapListener(ViewDataBinder binder, int localFieldId) {
|
||||
public WeakMapListener(ViewDataBinding binder, int localFieldId) {
|
||||
super(binder, localFieldId);
|
||||
}
|
||||
|
||||
@@ -346,7 +448,7 @@ abstract public class ViewDataBinder {
|
||||
|
||||
@Override
|
||||
public void onMapChanged(ObservableMap sender, Object key) {
|
||||
ViewDataBinder binder = getBinder();
|
||||
ViewDataBinding binder = getBinder();
|
||||
if (binder == null || sender != getTarget()) {
|
||||
return;
|
||||
}
|
||||
@@ -355,6 +457,6 @@ abstract public class ViewDataBinder {
|
||||
}
|
||||
|
||||
private interface CreateWeakListener {
|
||||
WeakListener create(ViewDataBinder viewDataBinder, int localFieldId);
|
||||
WeakListener create(ViewDataBinding viewDataBinding, int localFieldId);
|
||||
}
|
||||
}
|
||||
@@ -3,10 +3,10 @@ package com.android.example.bindingdemo;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.android.databinding.library.DataBinder;
|
||||
import com.android.databinding.library.IViewDataBinder;
|
||||
import com.android.databinding.library.DataBindingUtil;
|
||||
import com.android.databinding.library.ViewDataBinding;
|
||||
|
||||
abstract public class DataBoundAdapter<T extends IViewDataBinder>
|
||||
abstract public class DataBoundAdapter<T extends ViewDataBinding>
|
||||
extends RecyclerView.Adapter<DataBoundAdapter.DataBoundViewHolder<T>> {
|
||||
final int mLayoutId;
|
||||
final Class<T> mBinderInterface;
|
||||
@@ -17,11 +17,11 @@ abstract public class DataBoundAdapter<T extends IViewDataBinder>
|
||||
|
||||
@Override
|
||||
public DataBoundAdapter.DataBoundViewHolder<T> onCreateViewHolder(ViewGroup viewGroup, int type) {
|
||||
T binder = DataBinder.createBinder(mBinderInterface, viewGroup.getContext(), mLayoutId, viewGroup);
|
||||
return new DataBoundViewHolder<T>(binder);
|
||||
T binder = DataBindingUtil.inflate(viewGroup.getContext(), mLayoutId, viewGroup, false);
|
||||
return new DataBoundViewHolder(binder);
|
||||
}
|
||||
|
||||
static class DataBoundViewHolder<T extends IViewDataBinder> extends RecyclerView.ViewHolder {
|
||||
static class DataBoundViewHolder<T extends ViewDataBinding> extends RecyclerView.ViewHolder {
|
||||
public final T dataBinder;
|
||||
public DataBoundViewHolder(T mViewBinder) {
|
||||
super(mViewBinder.getRoot());
|
||||
|
||||
@@ -15,12 +15,12 @@ import android.view.ViewGroup;
|
||||
|
||||
import android.binding.BR;
|
||||
|
||||
import com.android.databinding.library.DataBindingUtil;
|
||||
import com.android.databinding.library.PropertyChangeRegistry;
|
||||
import com.android.example.bindingdemo.generated.ListItemBinder;
|
||||
import com.android.example.bindingdemo.generated.MainActivityBinder;
|
||||
import com.android.example.bindingdemo.generated.ListItemBinding;
|
||||
import com.android.example.bindingdemo.generated.MainActivityBinding;
|
||||
import com.android.example.bindingdemo.vo.User;
|
||||
import com.android.example.bindingdemo.vo.Users;
|
||||
import com.android.databinding.library.DataBinder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -33,7 +33,7 @@ public class MainActivity extends ActionBarActivity implements Observable {
|
||||
@Bindable
|
||||
UserAdapter robotAdapter;
|
||||
@Bindable
|
||||
MainActivityBinder dataBinder;
|
||||
MainActivityBinding dataBinder;
|
||||
@Bindable
|
||||
User selected;
|
||||
|
||||
@@ -49,7 +49,7 @@ public class MainActivity extends ActionBarActivity implements Observable {
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
dataBinder = DataBinder.createBinder(MainActivityBinder.class, this, R.layout.main_activity, null);
|
||||
dataBinder = MainActivityBinding.inflate(this);
|
||||
setContentView(dataBinder.getRoot());
|
||||
dataBinder.getRobotList().setHasFixedSize(true);
|
||||
dataBinder.getToolkittyList().setHasFixedSize(true);
|
||||
@@ -58,7 +58,7 @@ public class MainActivity extends ActionBarActivity implements Observable {
|
||||
dataBinder.getToolkittyList().setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
|
||||
dataBinder.getRobotList().setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
|
||||
dataBinder.setActivity(this);
|
||||
dataBinder.rebindDirty();
|
||||
dataBinder.executePendingBindings();
|
||||
}
|
||||
|
||||
public UserAdapter getTkAdapter() {
|
||||
@@ -156,26 +156,26 @@ public class MainActivity extends ActionBarActivity implements Observable {
|
||||
mListeners.remove(listener);
|
||||
}
|
||||
|
||||
public class UserAdapter extends DataBoundAdapter<ListItemBinder> implements View.OnClickListener, Observable {
|
||||
public class UserAdapter extends DataBoundAdapter<ListItemBinding> implements View.OnClickListener, Observable {
|
||||
final private List<User> userList = new ArrayList<>();
|
||||
final private PropertyChangeRegistry mListeners = new PropertyChangeRegistry();
|
||||
|
||||
public UserAdapter(User[] toolkities) {
|
||||
super(R.layout.list_item, ListItemBinder.class);
|
||||
super(R.layout.list_item, ListItemBinding.class);
|
||||
userList.addAll(Arrays.asList(toolkities));
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataBoundViewHolder<ListItemBinder> onCreateViewHolder(ViewGroup viewGroup, int type) {
|
||||
DataBoundViewHolder<ListItemBinder> vh = super.onCreateViewHolder(viewGroup, type);
|
||||
public DataBoundViewHolder<ListItemBinding> onCreateViewHolder(ViewGroup viewGroup, int type) {
|
||||
DataBoundViewHolder<ListItemBinding> vh = super.onCreateViewHolder(viewGroup, type);
|
||||
vh.dataBinder.setClickListener(this);
|
||||
return vh;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(DataBoundViewHolder<ListItemBinder> vh, int index) {
|
||||
public void onBindViewHolder(DataBoundViewHolder<ListItemBinding> vh, int index) {
|
||||
vh.dataBinder.setUser(userList.get(index));
|
||||
vh.dataBinder.rebindDirty();
|
||||
vh.dataBinder.executePendingBindings();
|
||||
}
|
||||
|
||||
@Bindable
|
||||
|
||||
Reference in New Issue
Block a user