12fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet/* 22fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * Copyright (C) 2011 The Android Open Source Project 32fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * 42fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License"); 52fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * you may not use this file except in compliance with the License. 62fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * You may obtain a copy of the License at 72fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * 82fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * http://www.apache.org/licenses/LICENSE-2.0 92fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * 102fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * Unless required by applicable law or agreed to in writing, software 112fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 122fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * See the License for the specific language governing permissions and 142fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * limitations under the License. 152fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet */ 162fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 172fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetpackage com.android.layoutlib.bridge.impl.binding; 182fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 192fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.ide.common.rendering.api.AdapterBinding; 202fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.ide.common.rendering.api.DataBindingItem; 212fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.ide.common.rendering.api.IProjectCallback; 222fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.ide.common.rendering.api.LayoutLog; 232fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.ide.common.rendering.api.ResourceReference; 242fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.ide.common.rendering.api.IProjectCallback.ViewAttribute; 252fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.layoutlib.bridge.Bridge; 262fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.layoutlib.bridge.android.BridgeContext; 272fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.layoutlib.bridge.impl.RenderAction; 282fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport com.android.util.Pair; 292fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 302fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport android.database.DataSetObserver; 312fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport android.view.View; 322fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport android.view.ViewGroup; 332fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport android.widget.AdapterView; 342fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport android.widget.Checkable; 352fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport android.widget.ImageView; 362fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport android.widget.TextView; 372fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 382fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport java.util.ArrayList; 392fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport java.util.Collections; 402fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetimport java.util.List; 412fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 422fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet/** 432fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * Base adapter to do fake data binding in {@link AdapterView} objects. 442fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet */ 452fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohetpublic class BaseAdapter { 462fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 472fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet /** 482fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet * This is the items provided by the adapter. They are dynamically generated. 492fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet */ 502fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet protected final static class AdapterItem { 512fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet private final DataBindingItem mItem; 522fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet private final int mType; 532fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet private final int mFullPosition; 542fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet private final int mPositionPerType; 552fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet private List<AdapterItem> mChildren; 562fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 572fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet protected AdapterItem(DataBindingItem item, int type, int fullPosition, 582fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet int positionPerType) { 592fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mItem = item; 602fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mType = type; 612fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mFullPosition = fullPosition; 622fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mPositionPerType = positionPerType; 632fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 642fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 652fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet void addChild(AdapterItem child) { 662fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (mChildren == null) { 672fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mChildren = new ArrayList<AdapterItem>(); 682fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 692fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 702fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mChildren.add(child); 712fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 722fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 732fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet List<AdapterItem> getChildren() { 742fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (mChildren != null) { 752fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet return mChildren; 762fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 772fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 782fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet return Collections.emptyList(); 792fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 802fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 812fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet int getType() { 822fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet return mType; 832fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 842fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 852fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet int getFullPosition() { 862fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet return mFullPosition; 872fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 882fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 892fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet int getPositionPerType() { 902fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet return mPositionPerType; 912fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 922fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 932fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet DataBindingItem getDataBindingItem() { 942fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet return mItem; 952fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 962fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 972fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 982fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet private final AdapterBinding mBinding; 992fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet private final IProjectCallback mCallback; 1002fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet private final ResourceReference mAdapterRef; 1012fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet private boolean mSkipCallbackParser = false; 1022fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1032fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet protected final List<AdapterItem> mItems = new ArrayList<AdapterItem>(); 1042fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1052fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet protected BaseAdapter(ResourceReference adapterRef, AdapterBinding binding, 1062fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet IProjectCallback callback) { 1072fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mAdapterRef = adapterRef; 1082fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mBinding = binding; 1092fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mCallback = callback; 1102fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 1112fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1122fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet // ------- Some Adapter method used by all children classes. 1132fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1142fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet public boolean areAllItemsEnabled() { 1152fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet return true; 1162fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 1172fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1182fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet public boolean hasStableIds() { 1192fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet return true; 1202fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 1212fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1222fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet public boolean isEmpty() { 1232fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet return mItems.size() == 0; 1242fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 1252fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1262fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet public void registerDataSetObserver(DataSetObserver observer) { 1272fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet // pass 1282fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 1292fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1302fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet public void unregisterDataSetObserver(DataSetObserver observer) { 1312fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet // pass 1322fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 1332fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1342fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet // ------- 1352fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1362fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1372fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet protected AdapterBinding getBinding() { 1382fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet return mBinding; 1392fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 1402fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1412fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet protected View getView(AdapterItem item, AdapterItem parentItem, View convertView, 1422fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet ViewGroup parent) { 1432fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet // we don't care about recycling here because we never scroll. 1442fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet DataBindingItem dataBindingItem = item.getDataBindingItem(); 1452fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1462fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet BridgeContext context = RenderAction.getCurrentContext(); 1472fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1482fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet Pair<View, Boolean> pair = context.inflateView(dataBindingItem.getViewReference(), 1492fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet parent, false /*attachToRoot*/, mSkipCallbackParser); 1502fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1512fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet View view = pair.getFirst(); 1522fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mSkipCallbackParser |= pair.getSecond(); 1532fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1542fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (view != null) { 1552fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet fillView(context, view, item, parentItem); 1562fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } else { 1572fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet // create a text view to display an error. 1582fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet TextView tv = new TextView(context); 1592fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet tv.setText("Unable to find layout: " + dataBindingItem.getViewReference().getName()); 1602fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet view = tv; 1612fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 1622fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1632fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet return view; 1642fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 1652fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1662fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet private void fillView(BridgeContext context, View view, AdapterItem item, 1672fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet AdapterItem parentItem) { 1682fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (view instanceof ViewGroup) { 1692fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet ViewGroup group = (ViewGroup) view; 1702fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet final int count = group.getChildCount(); 1712fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet for (int i = 0 ; i < count ; i++) { 1722fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet fillView(context, group.getChildAt(i), item, parentItem); 1732fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 1742fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } else { 1752fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet int id = view.getId(); 1762fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (id != 0) { 1772fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet ResourceReference resolvedRef = context.resolveId(id); 1782fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (resolvedRef != null) { 1792fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet int fullPosition = item.getFullPosition(); 1802fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet int positionPerType = item.getPositionPerType(); 1812fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet int fullParentPosition = parentItem != null ? parentItem.getFullPosition() : 0; 1822fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet int parentPositionPerType = parentItem != null ? 1832fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet parentItem.getPositionPerType() : 0; 1842fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 1852fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (view instanceof TextView) { 1862fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet TextView tv = (TextView) view; 1872fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet Object value = mCallback.getAdapterItemValue( 1882fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mAdapterRef, context.getViewKey(view), 1892fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet item.getDataBindingItem().getViewReference(), 1902fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet fullPosition, positionPerType, 1912fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet fullParentPosition, parentPositionPerType, 1922fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet resolvedRef, ViewAttribute.TEXT, tv.getText().toString()); 1932fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (value != null) { 1942fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (value.getClass() != ViewAttribute.TEXT.getAttributeClass()) { 1952fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet Bridge.getLog().error(LayoutLog.TAG_BROKEN, String.format( 1962fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet "Wrong Adapter Item value class for TEXT. Expected String, got %s", 1972fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet value.getClass().getName()), null); 1982fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } else { 1992fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet tv.setText((String) value); 2002fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2012fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2022fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2032fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 2042fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (view instanceof Checkable) { 2052fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet Checkable cb = (Checkable) view; 2062fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 2072fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet Object value = mCallback.getAdapterItemValue( 2082fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mAdapterRef, context.getViewKey(view), 2092fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet item.getDataBindingItem().getViewReference(), 2102fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet fullPosition, positionPerType, 2112fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet fullParentPosition, parentPositionPerType, 2122fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet resolvedRef, ViewAttribute.IS_CHECKED, cb.isChecked()); 2132fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (value != null) { 2142fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (value.getClass() != ViewAttribute.IS_CHECKED.getAttributeClass()) { 2152fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet Bridge.getLog().error(LayoutLog.TAG_BROKEN, String.format( 2162fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet "Wrong Adapter Item value class for TEXT. Expected Boolean, got %s", 2172fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet value.getClass().getName()), null); 2182fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } else { 2192fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet cb.setChecked((Boolean) value); 2202fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2212fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2222fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2232fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 2242fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (view instanceof ImageView) { 2252fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet ImageView iv = (ImageView) view; 2262fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet 2272fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet Object value = mCallback.getAdapterItemValue( 2282fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet mAdapterRef, context.getViewKey(view), 2292fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet item.getDataBindingItem().getViewReference(), 2302fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet fullPosition, positionPerType, 2312fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet fullParentPosition, parentPositionPerType, 2322fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet resolvedRef, ViewAttribute.SRC, iv.getDrawable()); 2332fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (value != null) { 2342fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet if (value.getClass() != ViewAttribute.SRC.getAttributeClass()) { 2352fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet Bridge.getLog().error(LayoutLog.TAG_BROKEN, String.format( 2362fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet "Wrong Adapter Item value class for TEXT. Expected Boolean, got %s", 2372fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet value.getClass().getName()), null); 2382fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } else { 2392fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet // FIXME 2402fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2412fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2422fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2432fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2442fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2452fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2462fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet } 2472fae858db55fc6984ef923a6226b9408c37c72cbXavier Ducrohet} 248