diff options
author | George Mount <mount@google.com> | 2015-09-17 07:42:41 -0700 |
---|---|---|
committer | George Mount <mount@google.com> | 2016-01-14 14:29:32 -0800 |
commit | 3b920788e90bb0abe615a5d5c899915f0014444b (patch) | |
tree | e31dc6bc137aaa23792ddddbad9988f229ed0d84 | |
parent | d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01 (diff) | |
download | data-binding-3b920788e90bb0abe615a5d5c899915f0014444b.tar.gz |
Two-way binding extensions
Bug 1474349
Bug 22460238
Two-way data binding won't work without a few changes to the
extension library. This adds those changes and tests to ensure
that two-way data binding works.
Change-Id: I5e204609925bb2dc5404176f9b4e59386f200c7f
48 files changed, 871 insertions, 66 deletions
diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml index bf5f929e..003973d6 100755 --- a/.idea/codeStyleSettings.xml +++ b/.idea/codeStyleSettings.xml @@ -157,4 +157,4 @@ </option> <option name="USE_PER_PROJECT_SETTINGS" value="true" /> </component> -</project>
\ No newline at end of file +</project> diff --git a/databinding.properties b/databinding.properties index ab6f8244..7d0ba977 100644 --- a/databinding.properties +++ b/databinding.properties @@ -2,7 +2,7 @@ kotlinVersion = 1.0.0-beta-1103 version = 1.1 releaseVersion = 1.1 -extensionsVersion = 1.0-rc5 +extensionsVersion = 1.1 # we use a public plugin so that it does not need data binding while compiling library androidPublicPluginVersion= 1.5.0 javaTargetCompatibility = 1.6 diff --git a/extensions/baseAdapters/build.gradle b/extensions/baseAdapters/build.gradle index 06b967a5..d375aeba 100644 --- a/extensions/baseAdapters/build.gradle +++ b/extensions/baseAdapters/build.gradle @@ -31,7 +31,7 @@ android { } defaultConfig { minSdkVersion 7 - targetSdkVersion 21 + targetSdkVersion 23 versionCode 1 versionName "1.0" } diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/AdapterViewBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/AdapterViewBindingAdapter.java index 85ae55ab..5e519130 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/AdapterViewBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/AdapterViewBindingAdapter.java @@ -18,7 +18,11 @@ package android.databinding.adapters; import android.databinding.BindingAdapter; import android.databinding.BindingMethod; import android.databinding.BindingMethods; +import android.databinding.InverseBindingListener; +import android.databinding.InverseBindingMethod; +import android.databinding.InverseBindingMethods; import android.view.View; +import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; @@ -26,34 +30,50 @@ import android.widget.AdapterView.OnItemSelectedListener; @BindingMethod(type = AdapterView.class, attribute = "android:onItemClick", method = "setOnItemClickListener"), @BindingMethod(type = AdapterView.class, attribute = "android:onItemLongClick", method = "setOnItemLongClickListener"), }) +@InverseBindingMethods({ + @InverseBindingMethod(type = AbsListView.class, attribute = "android:selectedItemPosition"), +}) public class AdapterViewBindingAdapter { - @BindingAdapter(value = {"android:onItemSelected", "android:onNothingSelected"}, - requireAll = false) + @BindingAdapter("android:selectedItemPosition") + public static void setSelectedItemPosition(AdapterView view, int position) { + if (view.getSelectedItemPosition() != position) { + view.setSelection(position); + } + } + + @BindingAdapter(value = {"android:onItemSelected", "android:onNothingSelected", + "android:selectedItemPositionAttrChanged"}, requireAll = false) public static void setOnItemSelectedListener(AdapterView view, final OnItemSelected selected, - final OnNothingSelected nothingSelected) { - if (selected == null && nothingSelected == null) { + final OnNothingSelected nothingSelected, final InverseBindingListener attrChanged) { + if (selected == null && nothingSelected == null && attrChanged == null) { view.setOnItemSelectedListener(null); } else { view.setOnItemSelectedListener( - new OnItemSelectedComponentListener(selected, nothingSelected)); + new OnItemSelectedComponentListener(selected, nothingSelected, attrChanged)); } } public static class OnItemSelectedComponentListener implements OnItemSelectedListener { private final OnItemSelected mSelected; private final OnNothingSelected mNothingSelected; + private final InverseBindingListener mAttrChanged; public OnItemSelectedComponentListener(OnItemSelected selected, - OnNothingSelected nothingSelected) { + OnNothingSelected nothingSelected, InverseBindingListener attrChanged) { this.mSelected = selected; this.mNothingSelected = nothingSelected; + this.mAttrChanged = attrChanged; } + @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if (mSelected != null) { mSelected.onItemSelected(parent, view, position, id); } + if (mAttrChanged != null) { + mAttrChanged.onChange(); + } } @Override @@ -61,6 +81,9 @@ public class AdapterViewBindingAdapter { if (mNothingSelected != null) { mNothingSelected.onNothingSelected(parent); } + if (mAttrChanged != null) { + mAttrChanged.onChange(); + } } } diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/AutoCompleteTextViewBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/AutoCompleteTextViewBindingAdapter.java index 40299c84..ebcd1182 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/AutoCompleteTextViewBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/AutoCompleteTextViewBindingAdapter.java @@ -68,7 +68,7 @@ public class AutoCompleteTextViewBindingAdapter { view.setOnItemSelectedListener(null); } else { view.setOnItemSelectedListener( - new OnItemSelectedComponentListener(selected, nothingSelected)); + new OnItemSelectedComponentListener(selected, nothingSelected, null)); } } diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/CalendarViewBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/CalendarViewBindingAdapter.java index fc7fb2f5..f17fd7d9 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/CalendarViewBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/CalendarViewBindingAdapter.java @@ -15,12 +15,41 @@ */ package android.databinding.adapters; -import android.databinding.BindingMethod; -import android.databinding.BindingMethods; +import android.databinding.BindingAdapter; +import android.databinding.InverseBindingListener; +import android.databinding.InverseBindingMethod; +import android.databinding.InverseBindingMethods; import android.widget.CalendarView; +import android.widget.CalendarView.OnDateChangeListener; -@BindingMethods({ - @BindingMethod(type = CalendarView.class, attribute = "android:onSelectedDayChange", method = "setOnDateChangeListener"), +@InverseBindingMethods({ + @InverseBindingMethod(type = CalendarView.class, attribute = "android:date"), }) public class CalendarViewBindingAdapter { + @BindingAdapter("android:date") + public static void setDate(CalendarView view, long date) { + if (view.getDate() != date) { + view.setDate(date); + } + } + + @BindingAdapter(value = {"android:onSelectedDayChange", "android:dateAttrChanged"}, + requireAll = false) + public static void setListeners(CalendarView view, final OnDateChangeListener onDayChange, + final InverseBindingListener attrChange) { + if (attrChange == null) { + view.setOnDateChangeListener(onDayChange); + } else { + view.setOnDateChangeListener(new OnDateChangeListener() { + @Override + public void onSelectedDayChange(CalendarView view, int year, int month, + int dayOfMonth) { + if (onDayChange != null) { + onDayChange.onSelectedDayChange(view, year, month, dayOfMonth); + } + attrChange.onChange(); + } + }); + } + } } diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/CompoundButtonBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/CompoundButtonBindingAdapter.java index 3859019d..15c5d00a 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/CompoundButtonBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/CompoundButtonBindingAdapter.java @@ -18,6 +18,9 @@ package android.databinding.adapters; import android.databinding.BindingAdapter; import android.databinding.BindingMethod; import android.databinding.BindingMethods; +import android.databinding.InverseBindingListener; +import android.databinding.InverseBindingMethod; +import android.databinding.InverseBindingMethods; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; @@ -25,5 +28,35 @@ import android.widget.CompoundButton.OnCheckedChangeListener; @BindingMethod(type = CompoundButton.class, attribute = "android:buttonTint", method = "setButtonTintList"), @BindingMethod(type = CompoundButton.class, attribute = "android:onCheckedChanged", method = "setOnCheckedChangeListener"), }) +@InverseBindingMethods({ + @InverseBindingMethod(type = CompoundButton.class, attribute = "android:checked"), +}) public class CompoundButtonBindingAdapter { + + @BindingAdapter("android:checked") + public static void setChecked(CompoundButton view, boolean checked) { + if (view.isChecked() != checked) { + view.setChecked(checked); + } + } + + @BindingAdapter(value = {"android:onCheckedChanged", "android:checkedAttrChanged"}, + requireAll = false) + public static void setListeners(CompoundButton view, final OnCheckedChangeListener listener, + final InverseBindingListener attrChange) { + if (attrChange == null) { + view.setOnCheckedChangeListener(listener); + } else { + view.setOnCheckedChangeListener(new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (listener != null) { + listener.onCheckedChanged(buttonView, isChecked); + } + attrChange.onChange(); + } + }); + } + } + } diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/DatePickerBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/DatePickerBindingAdapter.java new file mode 100644 index 00000000..abf345d5 --- /dev/null +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/DatePickerBindingAdapter.java @@ -0,0 +1,87 @@ +/* + * 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 android.databinding.adapters; + +import android.databinding.BindingAdapter; +import android.databinding.InverseBindingListener; +import android.databinding.InverseBindingMethod; +import android.databinding.InverseBindingMethods; +import android.widget.DatePicker; +import android.widget.DatePicker.OnDateChangedListener; +import com.android.databinding.library.baseAdapters.R; + +@InverseBindingMethods({ + @InverseBindingMethod(type = DatePicker.class, attribute = "android:year"), + @InverseBindingMethod(type = DatePicker.class, attribute = "android:month"), + @InverseBindingMethod(type = DatePicker.class, attribute = "android:day", method = "getDayOfMonth"), +}) +public class DatePickerBindingAdapter { + @BindingAdapter(value = {"android:year", "android:month", "android:day", + "android:onDateChanged", "android:yearAttrChanged", + "android:monthAttrChanged", "android:dayAttrChanged"}, requireAll = false) + public static void setListeners(DatePicker view, int year, int month, int day, + final OnDateChangedListener listener, final InverseBindingListener yearChanged, + final InverseBindingListener monthChanged, final InverseBindingListener dayChanged) { + if (year == 0) { + year = view.getYear(); + } + if (day == 0) { + day = view.getDayOfMonth(); + } + if (yearChanged == null && monthChanged == null && dayChanged == null) { + view.init(year, month, day, listener); + } else { + DateChangedListener oldListener = ListenerUtil.getListener(view, R.id.onDateChanged); + if (oldListener == null) { + oldListener = new DateChangedListener(); + ListenerUtil.trackListener(view, oldListener, R.id.onDateChanged); + } + oldListener.setListeners(listener, yearChanged, monthChanged, dayChanged); + view.init(year, month, day, oldListener); + } + } + + private static class DateChangedListener implements OnDateChangedListener { + OnDateChangedListener mListener; + InverseBindingListener mYearChanged; + InverseBindingListener mMonthChanged; + InverseBindingListener mDayChanged; + + public void setListeners(OnDateChangedListener listener, InverseBindingListener yearChanged, + InverseBindingListener monthChanged, InverseBindingListener dayChanged) { + mListener = listener; + mYearChanged = yearChanged; + mMonthChanged = monthChanged; + mDayChanged = dayChanged; + } + + @Override + public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { + if (mListener != null) { + mListener.onDateChanged(view, year, monthOfYear, dayOfMonth); + } + if (mYearChanged != null) { + mYearChanged.onChange(); + } + if (mMonthChanged != null) { + mMonthChanged.onChange(); + } + if (mDayChanged != null) { + mDayChanged.onChange(); + } + } + } +} diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/ListenerUtil.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/ListenerUtil.java index 67ae1727..6869cdba 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/ListenerUtil.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/ListenerUtil.java @@ -79,4 +79,31 @@ public class ListenerUtil { } } + /** + * Returns the previous value for a listener if one was stored previously with + * {@link #trackListener(View, Object, int)} + * @param view The View to check for a listener previously stored with + * {@link #trackListener(View, Object, int)} + * @param listenerResourceId A unique resource ID associated with the listener type. + * @return The previously tracked listener. This will be null if the View did not have + * a previously-tracked listener. + */ + public static <T> T getListener(View view, int listenerResourceId) { + if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH) { + return (T) view.getTag(listenerResourceId); + } else { + synchronized (sListeners) { + WeakHashMap<View, WeakReference<?>> listeners = sListeners.get(listenerResourceId); + if (listeners == null) { + return null; + } + final WeakReference<T> oldValue = (WeakReference<T>) listeners.get(view); + if (oldValue == null) { + return null; + } else { + return oldValue.get(); + } + } + } + } } diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/NumberPickerBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/NumberPickerBindingAdapter.java index 17e53cdc..612b3203 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/NumberPickerBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/NumberPickerBindingAdapter.java @@ -15,14 +15,49 @@ */ package android.databinding.adapters; +import android.databinding.BindingAdapter; import android.databinding.BindingMethod; import android.databinding.BindingMethods; +import android.databinding.InverseBindingListener; +import android.databinding.InverseBindingMethod; +import android.databinding.InverseBindingMethods; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.NumberPicker; +import android.widget.NumberPicker.OnValueChangeListener; @BindingMethods({ @BindingMethod(type = NumberPicker.class, attribute = "android:format", method = "setFormatter"), @BindingMethod(type = NumberPicker.class, attribute = "android:onScrollStateChange", method = "setOnScrollListener"), - @BindingMethod(type = NumberPicker.class, attribute = "android:onValueChange", method = "setOnValueChangedListener"), +}) +@InverseBindingMethods({ + @InverseBindingMethod(type = NumberPicker.class, attribute = "android:value"), }) public class NumberPickerBindingAdapter { + + @BindingAdapter("android:value") + public static void setValue(NumberPicker view, int value) { + if (view.getValue() != value) { + view.setValue(value); + } + } + + @BindingAdapter(value = {"android:onValueChange", "android:valueAttrChanged"}, + requireAll = false) + public static void setListeners(NumberPicker view, final OnValueChangeListener listener, + final InverseBindingListener attrChange) { + if (attrChange == null) { + view.setOnValueChangedListener(listener); + } else { + view.setOnValueChangedListener(new OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + if (listener != null) { + listener.onValueChange(picker, oldVal, newVal); + } + attrChange.onChange(); + } + }); + } + } } diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/RadioGroupBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/RadioGroupBindingAdapter.java index af9f0425..a84a691f 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/RadioGroupBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/RadioGroupBindingAdapter.java @@ -15,13 +15,41 @@ */ package android.databinding.adapters; -import android.databinding.BindingMethod; -import android.databinding.BindingMethods; +import android.databinding.BindingAdapter; +import android.databinding.InverseBindingListener; +import android.databinding.InverseBindingMethod; +import android.databinding.InverseBindingMethods; import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; -@BindingMethods({ - @BindingMethod(type = RadioGroup.class, attribute = "android:checkedButton", method = "check"), - @BindingMethod(type = RadioGroup.class, attribute = "android:onCheckedChanged", method = "setOnCheckedChangeListener"), +@InverseBindingMethods({ + @InverseBindingMethod(type = RadioGroup.class, attribute = "android:checkedButton", method = "getCheckedRadioButtonId"), }) public class RadioGroupBindingAdapter { + @BindingAdapter("android:checkedButton") + public static void setCheckedButton(RadioGroup view, int id) { + if (id != view.getCheckedRadioButtonId()) { + view.check(id); + } + } + + @BindingAdapter(value = {"android:onCheckedChanged", "android:checkedButtonAttrChanged"}, + requireAll = false) + public static void setListeners(RadioGroup view, final OnCheckedChangeListener listener, + final InverseBindingListener attrChange) { + if (attrChange == null) { + view.setOnCheckedChangeListener(listener); + } else { + view.setOnCheckedChangeListener(new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (listener != null) { + listener.onCheckedChanged(group, checkedId); + } + + attrChange.onChange(); + } + }); + } + } } diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/RatingBarBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/RatingBarBindingAdapter.java index 5e49c72d..4896df08 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/RatingBarBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/RatingBarBindingAdapter.java @@ -15,12 +15,40 @@ */ package android.databinding.adapters; -import android.databinding.BindingMethod; -import android.databinding.BindingMethods; +import android.databinding.BindingAdapter; +import android.databinding.InverseBindingListener; +import android.databinding.InverseBindingMethod; +import android.databinding.InverseBindingMethods; import android.widget.RatingBar; +import android.widget.RatingBar.OnRatingBarChangeListener; -@BindingMethods({ - @BindingMethod(type = RatingBar.class, attribute = "android:onRatingChanged", method = "setOnRatingBarChangeListener"), +@InverseBindingMethods({ + @InverseBindingMethod(type = RatingBar.class, attribute = "android:rating"), }) public class RatingBarBindingAdapter { + @BindingAdapter("android:rating") + public static void setRating(RatingBar view, float rating) { + if (view.getRating() != rating) { + view.setRating(rating); + } + } + + @BindingAdapter(value = {"android:onRatingChanged", "android:ratingAttrChanged"}, + requireAll = false) + public static void setListeners(RatingBar view, final OnRatingBarChangeListener listener, + final InverseBindingListener ratingChange) { + if (ratingChange == null) { + view.setOnRatingBarChangeListener(listener); + } else { + view.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { + @Override + public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { + if (listener != null) { + listener.onRatingChanged(ratingBar, rating, fromUser); + } + ratingChange.onChange(); + } + }); + } + } } diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/SeekBarBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/SeekBarBindingAdapter.java index 85a7a385..625c0372 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/SeekBarBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/SeekBarBindingAdapter.java @@ -16,15 +16,30 @@ package android.databinding.adapters; import android.databinding.BindingAdapter; +import android.databinding.InverseBindingListener; +import android.databinding.InverseBindingMethod; +import android.databinding.InverseBindingMethods; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; +@InverseBindingMethods({ + @InverseBindingMethod(type = SeekBar.class, attribute = "android:progress"), +}) public class SeekBarBindingAdapter { + + @BindingAdapter("android:progress") + public static void setProgress(SeekBar view, int progress) { + if (progress != view.getProgress()) { + view.setProgress(progress); + } + } + @BindingAdapter(value = {"android:onStartTrackingTouch", "android:onStopTrackingTouch", - "android:onProgressChanged"}, requireAll = false) + "android:onProgressChanged", "android:progressAttrChanged"}, requireAll = false) public static void setOnSeekBarChangeListener(SeekBar view, final OnStartTrackingTouch start, - final OnStopTrackingTouch stop, final OnProgressChanged progressChanged) { - if (start == null && stop == null && progressChanged == null) { + final OnStopTrackingTouch stop, final OnProgressChanged progressChanged, + final InverseBindingListener attrChanged) { + if (start == null && stop == null && progressChanged == null && attrChanged == null) { view.setOnSeekBarChangeListener(null); } else { view.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @@ -33,6 +48,9 @@ public class SeekBarBindingAdapter { if (progressChanged != null) { progressChanged.onProgressChanged(seekBar, progress, fromUser); } + if (attrChanged != null) { + attrChanged.onChange(); + } } @Override diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/TabHostBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/TabHostBindingAdapter.java index 78f06b0d..151a7110 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/TabHostBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/TabHostBindingAdapter.java @@ -15,12 +15,54 @@ */ package android.databinding.adapters; -import android.databinding.BindingMethod; -import android.databinding.BindingMethods; +import android.databinding.BindingAdapter; +import android.databinding.InverseBindingAdapter; +import android.databinding.InverseBindingListener; import android.widget.TabHost; +import android.widget.TabHost.OnTabChangeListener; -@BindingMethods({ - @BindingMethod(type = TabHost.class, attribute = "android:onTabChanged", method = "setOnTabChangedListener"), -}) public class TabHostBindingAdapter { + + @InverseBindingAdapter(attribute = "android:currentTab") + public static int getCurrentTab(TabHost view) { + return view.getCurrentTab(); + } + + @InverseBindingAdapter(attribute = "android:currentTab") + public static String getCurrentTabTag(TabHost view) { + return view.getCurrentTabTag(); + } + + @BindingAdapter("android:currentTab") + public static void setCurrentTab(TabHost view, int tab) { + if (view.getCurrentTab() != tab) { + view.setCurrentTab(tab); + } + } + + @BindingAdapter("android:currentTab") + public static void setCurrentTabTag(TabHost view, String tabTag) { + if (view.getCurrentTabTag() != tabTag) { + view.setCurrentTabByTag(tabTag); + } + } + + @BindingAdapter(value = {"android:onTabChanged", "android:currentTabAttrChanged"}, + requireAll = false) + public static void setListeners(TabHost view, final OnTabChangeListener listener, + final InverseBindingListener attrChange) { + if (attrChange == null) { + view.setOnTabChangedListener(listener); + } else { + view.setOnTabChangedListener(new OnTabChangeListener() { + @Override + public void onTabChanged(String tabId) { + if (listener != null) { + listener.onTabChanged(tabId); + } + attrChange.onChange(); + } + }); + } + } } diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/TextViewBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/TextViewBindingAdapter.java index 41ae1520..2d3bebb4 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/TextViewBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/TextViewBindingAdapter.java @@ -15,14 +15,21 @@ */ package android.databinding.adapters; +import com.android.databinding.library.baseAdapters.R; + import android.databinding.BindingAdapter; import android.databinding.BindingMethod; import android.databinding.BindingMethods; +import android.databinding.InverseBindingAdapter; +import android.databinding.InverseBindingListener; import android.graphics.drawable.Drawable; import android.os.Build; import android.text.Editable; import android.text.InputFilter; import android.text.InputType; +import android.text.Spanned; +import android.text.SpannableString; +import android.text.SpannableStringBuilder; import android.text.TextWatcher; import android.text.method.DialerKeyListener; import android.text.method.DigitsKeyListener; @@ -33,8 +40,6 @@ import android.util.Log; import android.util.TypedValue; import android.widget.TextView; -import com.android.databinding.library.baseAdapters.R; - @BindingMethods({ @BindingMethod(type = TextView.class, attribute = "android:autoLink", method = "setAutoLinkMask"), @BindingMethod(type = TextView.class, attribute = "android:drawablePadding", method = "setCompoundDrawablePadding"), @@ -50,13 +55,31 @@ import com.android.databinding.library.baseAdapters.R; public class TextViewBindingAdapter { private static final String TAG = "TextViewBindingAdapters"; - public static final int INTEGER = 0x01; - public static final int SIGNED = 0x03; - public static final int DECIMAL = 0x05; + @BindingAdapter("android:text") + public static void setText(TextView view, CharSequence text) { + final CharSequence oldText = view.getText(); + if (text == oldText || (text == null && oldText.length() == 0)) { + return; + } + if (text instanceof Spanned) { + if (text.equals(oldText)) { + return; // No change in the spans, so don't set anything. + } + } else if (!haveContentsChanged(text, oldText)) { + return; // No content changes, so don't set anything. + } + view.setText(text); + } + + @InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged") + public static String getTextString(TextView view) { + return view.getText().toString(); + } + @BindingAdapter({"android:autoText"}) public static void setAutoText(TextView view, boolean autoText) { KeyListener listener = view.getKeyListener(); @@ -300,12 +323,31 @@ public class TextViewBindingAdapter { view.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); } + private static boolean haveContentsChanged(CharSequence str1, CharSequence str2) { + if ((str1 == null) != (str2 == null)) { + return true; + } else if (str1 == null) { + return false; + } + final int length = str1.length(); + if (length != str2.length()) { + return true; + } + for (int i = 0; i < length; i++) { + if (str1.charAt(i) != str2.charAt(i)) { + return true; + } + } + return false; + } + @BindingAdapter(value = {"android:beforeTextChanged", "android:onTextChanged", - "android:afterTextChanged"}, requireAll = false) + "android:afterTextChanged", "android:textAttrChanged"}, requireAll = false) public static void setTextWatcher(TextView view, final BeforeTextChanged before, - final OnTextChanged on, final AfterTextChanged after) { + final OnTextChanged on, final AfterTextChanged after, + final InverseBindingListener textAttrChanged) { final TextWatcher newValue; - if (before == null && after == null && on == null) { + if (before == null && after == null && on == null && textAttrChanged == null) { newValue = null; } else { newValue = new TextWatcher() { @@ -321,6 +363,9 @@ public class TextViewBindingAdapter { if (on != null) { on.onTextChanged(s, start, before, count); } + if (textAttrChanged != null) { + textAttrChanged.onChange(); + } } @Override diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/TimePickerBindingAdapter.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/TimePickerBindingAdapter.java index 3a11dab9..803342dc 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/TimePickerBindingAdapter.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/TimePickerBindingAdapter.java @@ -15,12 +15,95 @@ */ package android.databinding.adapters; -import android.databinding.BindingMethod; -import android.databinding.BindingMethods; +import android.databinding.BindingAdapter; +import android.databinding.InverseBindingAdapter; +import android.databinding.InverseBindingListener; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; import android.widget.TimePicker; +import android.widget.TimePicker.OnTimeChangedListener; -@BindingMethods({ - @BindingMethod(type = TimePicker.class, attribute = "android:onTimeChanged", method = "setOnTimeChangedListener"), -}) public class TimePickerBindingAdapter { + + @SuppressWarnings("deprecation") + @BindingAdapter("android:hour") + public static void setHour(TimePicker view, int hour) { + if (VERSION.SDK_INT >= VERSION_CODES.M) { + if (view.getHour() != hour) { + view.setHour(hour); + } + } else { + if (view.getCurrentHour() != hour) { + view.setCurrentHour(hour); + } + } + } + + @SuppressWarnings("deprecation") + @BindingAdapter("android:minute") + public static void setMinute(TimePicker view, int minute) { + if (VERSION.SDK_INT >= VERSION_CODES.M) { + if (view.getMinute() != minute) { + view.setMinute(minute); + } + } else { + if (view.getCurrentMinute() != minute) { + view.setCurrentHour(minute); + } + } + } + + @InverseBindingAdapter(attribute = "android:hour") + public static int getHour(TimePicker view) { + if (VERSION.SDK_INT >= VERSION_CODES.M) { + return view.getHour(); + } else { + @SuppressWarnings("deprecation") + Integer hour = view.getCurrentHour(); + if (hour == null) { + return 0; + } else { + return hour; + } + } + } + + @InverseBindingAdapter(attribute = "android:minute") + public static int getMinute(TimePicker view) { + if (VERSION.SDK_INT >= VERSION_CODES.M) { + return view.getMinute(); + } else { + @SuppressWarnings("deprecation") + Integer minute = view.getCurrentMinute(); + if (minute == null) { + return 0; + } else { + return minute; + } + } + } + + @BindingAdapter(value = {"android:onTimeChanged", "android:hourAttrChanged", + "android:minuteAttrChanged"}, requireAll = false) + public static void setListeners(TimePicker view, final OnTimeChangedListener listener, + final InverseBindingListener hourChange, final InverseBindingListener minuteChange) { + if (hourChange == null && minuteChange == null) { + view.setOnTimeChangedListener(listener); + } else { + view.setOnTimeChangedListener(new OnTimeChangedListener() { + @Override + public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { + if (listener != null) { + listener.onTimeChanged(view, hourOfDay, minute); + } + if (hourChange != null) { + hourChange.onChange(); + } + if (minuteChange != null) { + minuteChange.onChange(); + } + } + }); + } + } } diff --git a/extensions/baseAdapters/src/main/res/values/ids.xml b/extensions/baseAdapters/src/main/res/values/ids.xml index 7e76dbe4..3383fb58 100644 --- a/extensions/baseAdapters/src/main/res/values/ids.xml +++ b/extensions/baseAdapters/src/main/res/values/ids.xml @@ -4,4 +4,6 @@ <item type="id" name="onAttachStateChangeListener"/> <!-- Used to track TextWatcher for TextView BindingAdapter --> <item type="id" name="textWatcher"/> + <!-- Used to track DatePicker OnDateChanged BindingAdapter --> + <item type="id" name="onDateChanged"/> </resources>
\ No newline at end of file diff --git a/extensions/library/src/main/java/android/databinding/ViewDataBinding.java b/extensions/library/src/main/java/android/databinding/ViewDataBinding.java index 2dacd1e9..5e760237 100644 --- a/extensions/library/src/main/java/android/databinding/ViewDataBinding.java +++ b/extensions/library/src/main/java/android/databinding/ViewDataBinding.java @@ -16,8 +16,6 @@ package android.databinding; -import com.android.databinding.library.R; - import android.annotation.TargetApi; import android.content.res.ColorStateList; import android.databinding.CallbackRegistry.NotifierCallback; @@ -27,15 +25,22 @@ import android.os.Build.VERSION_CODES; import android.os.Handler; import android.os.Looper; import android.text.TextUtils; +import android.util.LongSparseArray; +import android.util.SparseArray; +import android.util.SparseBooleanArray; import android.util.SparseIntArray; +import android.util.SparseLongArray; import android.view.Choreographer; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnAttachStateChangeListener; import android.view.ViewGroup; +import com.android.databinding.library.R; + import java.lang.ref.WeakReference; import java.util.List; +import java.util.Map; /** * Base class for generated data binding classes. If possible, the generated binding should @@ -43,7 +48,7 @@ import java.util.List; * binding is unknown, {@link DataBindingUtil#bind(View)} or * {@link DataBindingUtil#inflate(LayoutInflater, int, ViewGroup, boolean)} should be used. */ -public abstract class ViewDataBinding { +public abstract class ViewDataBinding extends BaseObservable { /** * Instead of directly accessing Build.VERSION.SDK_INT, generated code uses this value so that @@ -565,6 +570,15 @@ public abstract class ViewDataBinding { } /** @hide */ + protected int getColorFromResource(int resourceId) { + if (VERSION.SDK_INT >= VERSION_CODES.M) { + return getRoot().getContext().getColor(resourceId); + } else { + return getRoot().getResources().getColor(resourceId); + } + } + + /** @hide */ protected ColorStateList getColorStateListFromResource(int resourceId) { if (VERSION.SDK_INT >= VERSION_CODES.M) { return getRoot().getContext().getColorStateList(resourceId); @@ -584,84 +598,295 @@ public abstract class ViewDataBinding { /** @hide */ protected static <T> T getFromArray(T[] arr, int index) { - if (index < 0 || index >= arr.length) { + if (arr == null || index < 0 || index >= arr.length) { return null; } return arr[index]; } /** @hide */ + protected static <T> void setTo(T[] arr, int index, T value) { + if (arr == null || index < 0 || index >= arr.length) { + return; + } + arr[index] = value; + } + + /** @hide */ protected static boolean getFromArray(boolean[] arr, int index) { - if (index < 0 || index >= arr.length) { + if (arr == null || index < 0 || index >= arr.length) { return false; } return arr[index]; } /** @hide */ + protected static void setTo(boolean[] arr, int index, boolean value) { + if (arr == null || index < 0 || index >= arr.length) { + return; + } + arr[index] = value; + } + + /** @hide */ protected static byte getFromArray(byte[] arr, int index) { - if (index < 0 || index >= arr.length) { + if (arr == null || index < 0 || index >= arr.length) { return 0; } return arr[index]; } /** @hide */ + protected static void setTo(byte[] arr, int index, byte value) { + if (arr == null || index < 0 || index >= arr.length) { + return; + } + arr[index] = value; + } + + /** @hide */ protected static short getFromArray(short[] arr, int index) { - if (index < 0 || index >= arr.length) { + if (arr == null || index < 0 || index >= arr.length) { return 0; } return arr[index]; } /** @hide */ + protected static void setTo(short[] arr, int index, short value) { + if (arr == null || index < 0 || index >= arr.length) { + return; + } + arr[index] = value; + } + + /** @hide */ protected static char getFromArray(char[] arr, int index) { - if (index < 0 || index >= arr.length) { + if (arr == null || index < 0 || index >= arr.length) { return 0; } return arr[index]; } /** @hide */ + protected static void setTo(char[] arr, int index, char value) { + if (arr == null || index < 0 || index >= arr.length) { + return; + } + arr[index] = value; + } + + /** @hide */ protected static int getFromArray(int[] arr, int index) { - if (index < 0 || index >= arr.length) { + if (arr == null || index < 0 || index >= arr.length) { return 0; } return arr[index]; } /** @hide */ + protected static void setTo(int[] arr, int index, int value) { + if (arr == null || index < 0 || index >= arr.length) { + return; + } + arr[index] = value; + } + + /** @hide */ protected static long getFromArray(long[] arr, int index) { - if (index < 0 || index >= arr.length) { + if (arr == null || index < 0 || index >= arr.length) { return 0; } return arr[index]; } /** @hide */ + protected static void setTo(long[] arr, int index, long value) { + if (arr == null || index < 0 || index >= arr.length) { + return; + } + arr[index] = value; + } + + /** @hide */ protected static float getFromArray(float[] arr, int index) { - if (index < 0 || index >= arr.length) { + if (arr == null || index < 0 || index >= arr.length) { return 0; } return arr[index]; } /** @hide */ + protected static void setTo(float[] arr, int index, float value) { + if (arr == null || index < 0 || index >= arr.length) { + return; + } + arr[index] = value; + } + + /** @hide */ protected static double getFromArray(double[] arr, int index) { - if (index < 0 || index >= arr.length) { + if (arr == null || index < 0 || index >= arr.length) { return 0; } return arr[index]; } /** @hide */ + protected static void setTo(double[] arr, int index, double value) { + if (arr == null || index < 0 || index >= arr.length) { + return; + } + arr[index] = value; + } + + /** @hide */ protected static <T> T getFromList(List<T> list, int index) { - if (index < 0 || index >= list.size()) { + if (list == null || index < 0 || index >= list.size()) { + return null; + } + return list.get(index); + } + + /** @hide */ + protected static <T> void setTo(List<T> list, int index, T value) { + if (list == null || index < 0 || index >= list.size()) { + return; + } + list.set(index, value); + } + + /** @hide */ + protected static <T> T getFromList(SparseArray<T> list, int index) { + if (list == null || index < 0) { + return null; + } + return list.get(index); + } + + /** @hide */ + protected static <T> void setTo(SparseArray<T> list, int index, T value) { + if (list == null || index < 0 || index >= list.size()) { + return; + } + list.put(index, value); + } + + /** @hide */ + @TargetApi(VERSION_CODES.JELLY_BEAN) + protected static <T> T getFromList(LongSparseArray<T> list, int index) { + if (list == null || index < 0) { return null; } return list.get(index); } + /** @hide */ + @TargetApi(VERSION_CODES.JELLY_BEAN) + protected static <T> void setTo(LongSparseArray<T> list, int index, T value) { + if (list == null || index < 0 || index >= list.size()) { + return; + } + list.put(index, value); + } + + /** @hide */ + protected static <T> T getFromList(android.support.v4.util.LongSparseArray<T> list, int index) { + if (list == null || index < 0) { + return null; + } + return list.get(index); + } + + /** @hide */ + protected static <T> void setTo(android.support.v4.util.LongSparseArray<T> list, int index, + T value) { + if (list == null || index < 0 || index >= list.size()) { + return; + } + list.put(index, value); + } + + /** @hide */ + protected static boolean getFromList(SparseBooleanArray list, int index) { + if (list == null || index < 0) { + return false; + } + return list.get(index); + } + + /** @hide */ + protected static void setTo(SparseBooleanArray list, int index, boolean value) { + if (list == null || index < 0 || index >= list.size()) { + return; + } + list.put(index, value); + } + + /** @hide */ + protected static int getFromList(SparseIntArray list, int index) { + if (list == null || index < 0) { + return 0; + } + return list.get(index); + } + + /** @hide */ + protected static void setTo(SparseIntArray list, int index, int value) { + if (list == null || index < 0 || index >= list.size()) { + return; + } + list.put(index, value); + } + + /** @hide */ + @TargetApi(VERSION_CODES.JELLY_BEAN_MR2) + protected static long getFromList(SparseLongArray list, int index) { + if (list == null || index < 0) { + return 0; + } + return list.get(index); + } + + /** @hide */ + @TargetApi(VERSION_CODES.JELLY_BEAN_MR2) + protected static void setTo(SparseLongArray list, int index, long value) { + if (list == null || index < 0 || index >= list.size()) { + return; + } + list.put(index, value); + } + + /** @hide */ + protected static <K, T> T getFrom(Map<K, T> map, K key) { + if (map == null) { + return null; + } + return map.get(key); + } + + /** @hide */ + protected static <K, T> void setTo(Map<K, T> map, K key, T value) { + if (map == null) { + return; + } + map.put(key, value); + } + + /** @hide */ + protected static void setBindingInverseListener(ViewDataBinding binder, + InverseBindingListener oldListener, PropertyChangedInverseListener listener) { + if (oldListener != listener) { + if (oldListener != null) { + binder.removeOnPropertyChangedCallback( + (PropertyChangedInverseListener) oldListener); + } + if (listener != null) { + binder.addOnPropertyChangedCallback(listener); + } + } + } + /** * Walks the view hierarchy under roots and pulls out tagged Views, includes, and views with * IDs into an Object[] that is returned. This is used to walk the view hierarchy once to find @@ -1046,4 +1271,26 @@ public abstract class ViewDataBinding { this.layoutIds[index] = layoutIds; } } + + /** + * This class is used by generated subclasses of {@link ViewDataBinding} to listen for + * changes on variables of Bindings. This is important for two-way data binding on variables + * in included Bindings. + * @hide + */ + protected static abstract class PropertyChangedInverseListener + extends Observable.OnPropertyChangedCallback implements InverseBindingListener { + final int mPropertyId; + + public PropertyChangedInverseListener(int propertyId) { + mPropertyId = propertyId; + } + + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + if (propertyId == mPropertyId || propertyId == 0) { + onChange(); + } + } + } } diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-javadoc.jar b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-javadoc.jar Binary files differnew file mode 100644 index 00000000..741e5b68 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-javadoc.jar diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-javadoc.jar.md5 b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-javadoc.jar.md5 new file mode 100644 index 00000000..c4ad48cc --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-javadoc.jar.md5 @@ -0,0 +1 @@ +3102e4c3a8b533ecadf7a79f8cc0e6ed
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-javadoc.jar.sha1 b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-javadoc.jar.sha1 new file mode 100644 index 00000000..a8506d58 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-javadoc.jar.sha1 @@ -0,0 +1 @@ +96b2b1883d2ea46bfcc65c1e6addfda97814825f
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-sources.jar b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-sources.jar Binary files differnew file mode 100644 index 00000000..a65eed35 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-sources.jar diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-sources.jar.md5 b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-sources.jar.md5 new file mode 100644 index 00000000..a1b3e169 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-sources.jar.md5 @@ -0,0 +1 @@ +d9447e86bde083ce29e475269f408094
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-sources.jar.sha1 b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-sources.jar.sha1 new file mode 100644 index 00000000..4e30a011 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1-sources.jar.sha1 @@ -0,0 +1 @@ +271f7d5792857458ee31eaafa2f00ab75ee68a27
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.aar b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.aar Binary files differnew file mode 100644 index 00000000..91ffc8e6 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.aar diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.aar.md5 b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.aar.md5 new file mode 100644 index 00000000..ed95514b --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.aar.md5 @@ -0,0 +1 @@ +63c9e012af57aacb15d1b998711077c0
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.aar.sha1 b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.aar.sha1 new file mode 100644 index 00000000..07ea6786 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.aar.sha1 @@ -0,0 +1 @@ +110c163a806a7317374e98d9a8ab460e91c0d3d3
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.pom b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.pom new file mode 100644 index 00000000..c22b3865 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.pom @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <modelVersion>4.0.0</modelVersion> + <groupId>com.android.databinding</groupId> + <artifactId>adapters</artifactId> + <version>1.1</version> + <packaging>aar</packaging> + <licenses> + <license> + <name>The Apache Software License, Version 2.0</name> + <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> + <distribution>repo</distribution> + </license> + </licenses> + <dependencies> + <dependency> + <groupId>com.android.databinding</groupId> + <artifactId>library</artifactId> + <version>1.1</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.android.databinding</groupId> + <artifactId>baseLibrary</artifactId> + <version>1.1</version> + <scope>compile</scope> + </dependency> + </dependencies> +</project> diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.pom.md5 b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.pom.md5 new file mode 100644 index 00000000..d928121f --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.pom.md5 @@ -0,0 +1 @@ +7f884655cb412a87b69247d382edcf2e
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.pom.sha1 b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.pom.sha1 new file mode 100644 index 00000000..eb405181 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/adapters/1.1/adapters-1.1.pom.sha1 @@ -0,0 +1 @@ +bd7626a61823c5e1b5ea49a6315cac64c016c220
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml b/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml index 2c796181..da35a082 100644 --- a/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml +++ b/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml @@ -2,11 +2,12 @@ <metadata> <groupId>com.android.databinding</groupId> <artifactId>adapters</artifactId> - <version>1.0-rc5</version> <versioning> + <release>1.1</release> <versions> <version>1.0-rc5</version> + <version>1.1</version> </versions> - <lastUpdated>20151103182653</lastUpdated> + <lastUpdated>20160114222429</lastUpdated> </versioning> </metadata> diff --git a/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml.md5 b/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml.md5 index b897c554..cd356792 100644 --- a/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml.md5 +++ b/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml.md5 @@ -1 +1 @@ -ed1f2e20823c454ef9fe9de43fcf4a24
\ No newline at end of file +08b9a4a0ba5bfce3cf77ae92007003e5
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml.sha1 b/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml.sha1 index 5e47de52..b6041755 100644 --- a/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml.sha1 +++ b/internal-prebuilts/com/android/databinding/adapters/maven-metadata.xml.sha1 @@ -1 +1 @@ -c29088e11462587f5e1d25fb2453d89bf55ca8ba
\ No newline at end of file +98de00cc52ce9a2a7b71d15e67fe22926c88d528
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-javadoc.jar b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-javadoc.jar Binary files differnew file mode 100644 index 00000000..fa827081 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-javadoc.jar diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-javadoc.jar.md5 b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-javadoc.jar.md5 new file mode 100644 index 00000000..ad758d9f --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-javadoc.jar.md5 @@ -0,0 +1 @@ +d7e559f25a20f061c62cc4dbbfb6a36c
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-javadoc.jar.sha1 b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-javadoc.jar.sha1 new file mode 100644 index 00000000..54e287cd --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-javadoc.jar.sha1 @@ -0,0 +1 @@ +339a3b20fd98775796dfb6c248cc7ddbf526f635
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-sources.jar b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-sources.jar Binary files differnew file mode 100644 index 00000000..d8bd2082 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-sources.jar diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-sources.jar.md5 b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-sources.jar.md5 new file mode 100644 index 00000000..964df96b --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-sources.jar.md5 @@ -0,0 +1 @@ +ca88a210328f9c3655c3524421874a97
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-sources.jar.sha1 b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-sources.jar.sha1 new file mode 100644 index 00000000..e640354f --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1-sources.jar.sha1 @@ -0,0 +1 @@ +12e3f88b119fbaccf46fe28b6c4f35adbe60daf3
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.aar b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.aar Binary files differnew file mode 100644 index 00000000..d25e0d1f --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.aar diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.aar.md5 b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.aar.md5 new file mode 100644 index 00000000..97b2c022 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.aar.md5 @@ -0,0 +1 @@ +786980fe30ef7a7015ec9d9e4f340ecb
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.aar.sha1 b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.aar.sha1 new file mode 100644 index 00000000..a2e0c863 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.aar.sha1 @@ -0,0 +1 @@ +6d305d8c838bbb1e16584a3053097699b5353d11
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.pom b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.pom new file mode 100644 index 00000000..bcb1d9b4 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.pom @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <modelVersion>4.0.0</modelVersion> + <groupId>com.android.databinding</groupId> + <artifactId>library</artifactId> + <version>1.1</version> + <packaging>aar</packaging> + <licenses> + <license> + <name>The Apache Software License, Version 2.0</name> + <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> + <distribution>repo</distribution> + </license> + </licenses> + <dependencies> + <dependency> + <groupId>com.android.support</groupId> + <artifactId>support-v4</artifactId> + <version>21.0.3</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.android.databinding</groupId> + <artifactId>baseLibrary</artifactId> + <version>1.1</version> + <scope>compile</scope> + </dependency> + </dependencies> +</project> diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.pom.md5 b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.pom.md5 new file mode 100644 index 00000000..4559ce53 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.pom.md5 @@ -0,0 +1 @@ +8177aaf76c6da0bc8f881a78327f0355
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.pom.sha1 b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.pom.sha1 new file mode 100644 index 00000000..b2c05a26 --- /dev/null +++ b/internal-prebuilts/com/android/databinding/library/1.1/library-1.1.pom.sha1 @@ -0,0 +1 @@ +5a4b0208f2a1722c23341d0d163d4c459c60ae3a
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/library/maven-metadata.xml b/internal-prebuilts/com/android/databinding/library/maven-metadata.xml index fe76ad4f..ddcb12e5 100644 --- a/internal-prebuilts/com/android/databinding/library/maven-metadata.xml +++ b/internal-prebuilts/com/android/databinding/library/maven-metadata.xml @@ -2,11 +2,12 @@ <metadata> <groupId>com.android.databinding</groupId> <artifactId>library</artifactId> - <version>1.0-rc5</version> <versioning> + <release>1.1</release> <versions> <version>1.0-rc5</version> + <version>1.1</version> </versions> - <lastUpdated>20151103182638</lastUpdated> + <lastUpdated>20160114222429</lastUpdated> </versioning> </metadata> diff --git a/internal-prebuilts/com/android/databinding/library/maven-metadata.xml.md5 b/internal-prebuilts/com/android/databinding/library/maven-metadata.xml.md5 index 4078a0ff..04ab5a49 100644 --- a/internal-prebuilts/com/android/databinding/library/maven-metadata.xml.md5 +++ b/internal-prebuilts/com/android/databinding/library/maven-metadata.xml.md5 @@ -1 +1 @@ -b8fbccd46940a63f9000d9f1c1bf25b9
\ No newline at end of file +614659348ea658cd97eda5b27231b223
\ No newline at end of file diff --git a/internal-prebuilts/com/android/databinding/library/maven-metadata.xml.sha1 b/internal-prebuilts/com/android/databinding/library/maven-metadata.xml.sha1 index 3246e89e..e87a0a4b 100644 --- a/internal-prebuilts/com/android/databinding/library/maven-metadata.xml.sha1 +++ b/internal-prebuilts/com/android/databinding/library/maven-metadata.xml.sha1 @@ -1 +1 @@ -ba7f5d2258c7a5e6790cc72ec9f77efd86d8f5a1
\ No newline at end of file +0fecc097f9c2a8973c7169112cea421b48b87cb0
\ No newline at end of file |