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