diff options
author | Yigit Boyar <yboyar@google.com> | 2015-06-18 17:24:17 -0700 |
---|---|---|
committer | Yigit Boyar <yboyar@google.com> | 2015-06-22 11:35:57 -0700 |
commit | d37b47419005587c52ca4c099432327b7f06478d (patch) | |
tree | 02474cf3864603ba20a5da4cceb13b63905c7688 /integration-tests/TestApp/app | |
parent | 2ac58b34e5200a34b0ba63884c375a68c9a84303 (diff) | |
download | data-binding-d37b47419005587c52ca4c099432327b7f06478d.tar.gz |
Make observables parcelable
We got some feedback where people want to keep their View presenter
classes parcelable. This CL makes observables parcelable and
their lists transient to allow this.
Bug: 21785040
Change-Id: I76adc7d7ca3876c83fd8749f6dbcf02a926c97c2
Diffstat (limited to 'integration-tests/TestApp/app')
3 files changed, 104 insertions, 0 deletions
diff --git a/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ObservableFieldTest.java b/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ObservableFieldTest.java index f8130ba7..160d5c42 100644 --- a/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ObservableFieldTest.java +++ b/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ObservableFieldTest.java @@ -137,4 +137,19 @@ public class ObservableFieldTest extends BaseDataBinderTest<ObservableFieldTestB assertEquals("World", view.getText()); } + + @UiThreadTest + public void testParcelable() { + TextView x = mBinder.pFieldx; + TextView y = mBinder.pFieldy; + assertEquals(x.getText().toString(), String.valueOf(mObj.pField.get().getX())); + assertEquals(y.getText().toString(), mObj.pField.get().getY()); + ObservableFieldBindingObject.MyParcelable p2 = + new ObservableFieldBindingObject.MyParcelable(7, "updated"); + mObj.pField.set(p2); + mBinder.executePendingBindings(); + + assertEquals(x.getText().toString(), String.valueOf(mObj.pField.get().getX())); + assertEquals(y.getText().toString(), mObj.pField.get().getY()); + } } diff --git a/integration-tests/TestApp/app/src/main/java/android/databinding/testapp/vo/ObservableFieldBindingObject.java b/integration-tests/TestApp/app/src/main/java/android/databinding/testapp/vo/ObservableFieldBindingObject.java index 87127fef..5f1fcb38 100644 --- a/integration-tests/TestApp/app/src/main/java/android/databinding/testapp/vo/ObservableFieldBindingObject.java +++ b/integration-tests/TestApp/app/src/main/java/android/databinding/testapp/vo/ObservableFieldBindingObject.java @@ -23,7 +23,10 @@ import android.databinding.ObservableField; import android.databinding.ObservableFloat; import android.databinding.ObservableInt; import android.databinding.ObservableLong; +import android.databinding.ObservableParcelable; import android.databinding.ObservableShort; +import android.os.Parcel; +import android.os.Parcelable; public class ObservableFieldBindingObject { public final ObservableBoolean bField = new ObservableBoolean(); @@ -34,9 +37,83 @@ public class ObservableFieldBindingObject { public final ObservableLong lField = new ObservableLong(); public final ObservableFloat fField = new ObservableFloat(); public final ObservableDouble dField = new ObservableDouble(); + public final ObservableParcelable<MyParcelable> pField; public final ObservableField<String> oField = new ObservableField<>(); public ObservableFieldBindingObject() { oField.set("Hello"); + MyParcelable myParcelable = new MyParcelable(3, "abc"); + pField = new ObservableParcelable(myParcelable); + } + + public static class MyParcelable implements Parcelable { + int x; + String y; + + public MyParcelable(int x, String y) { + this.x = x; + this.y = y; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(x); + dest.writeString(y); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + MyParcelable that = (MyParcelable) o; + + if (x != that.x) { + return false; + } + if (y != null ? !y.equals(that.y) : that.y != null) { + return false; + } + + return true; + } + + public int getX() { + return x; + } + + public String getY() { + return y; + } + + @Override + public int hashCode() { + int result = x; + result = 31 * result + (y != null ? y.hashCode() : 0); + return result; + } + + public static final Parcelable.Creator<MyParcelable> CREATOR + = new Parcelable.Creator<MyParcelable>() { + + @Override + public MyParcelable createFromParcel(Parcel source) { + return new MyParcelable(source.readInt(), source.readString()); + } + + @Override + public MyParcelable[] newArray(int size) { + return new MyParcelable[size]; + } + }; } } diff --git a/integration-tests/TestApp/app/src/main/res/layout/observable_field_test.xml b/integration-tests/TestApp/app/src/main/res/layout/observable_field_test.xml index 6a1d1f7c..032f9877 100644 --- a/integration-tests/TestApp/app/src/main/res/layout/observable_field_test.xml +++ b/integration-tests/TestApp/app/src/main/res/layout/observable_field_test.xml @@ -64,5 +64,17 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{obj.oField}"/> + + <TextView + android:id="@+id/pFieldx" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text='@{""+obj.pField.x}'/> + + <TextView + android:id="@+id/pFieldy" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@{obj.pField.y}"/> </LinearLayout> </layout>
\ No newline at end of file |