/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.glass.sample.apidemo.card; import com.google.android.glass.sample.apidemo.R; import com.google.android.glass.widget.CardBuilder; import com.google.android.glass.widget.CardScrollAdapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.TextView; import java.util.List; /** * Populates views in a {@code CardScrollView} with cards built from custom embedded layouts to * represent items in a simple table. */ public class EmbeddedCardLayoutAdapter extends CardScrollAdapter { /** The maximum number of items that fit on a card. */ private static final int ITEMS_PER_CARD = 4; /** Index of the {@link ImageView} containing the icon in a table row. */ private static final int IMAGE_VIEW_INDEX = 0; /** Index of the {@link TextView} containing the primary text in a table row. */ private static final int PRIMARY_TEXT_VIEW_INDEX = 1; /** Index of the {@link TextView} containing the secondary text in a table row. */ private static final int SECONDARY_TEXT_VIEW_INDEX = 2; private final Context mContext; private final List<SimpleTableItem> mItems; /** Initializes a new adapter with the specified context and list of items. */ public EmbeddedCardLayoutAdapter(Context context, List<SimpleTableItem> items) { mContext = context; mItems = items; } @Override public int getViewTypeCount() { return 1; } @Override public int getItemViewType(int position){ return 0; } @Override public int getCount() { // Compute the number of cards needed to display the items with 4 per card (rounding up to // capture the remainder). return (int) Math.ceil((double) mItems.size() / ITEMS_PER_CARD); } @Override public Object getItem(int position) { return null; } @Override public int getPosition(Object item) { return AdapterView.INVALID_POSITION; } @Override public View getView(int position, View convertView, ViewGroup parent) { CardBuilder card = new CardBuilder(mContext, CardBuilder.Layout.EMBED_INSIDE) .setEmbeddedLayout(R.layout.simple_table) .setFootnote(R.string.text_card_embedded_footnote) .setTimestamp(R.string.text_card_embedded_timestamp); View view = card.getView(convertView, parent); // Get a reference to an embedded view from the custom layout and then manipulate it. ViewGroup tableView = (ViewGroup) view.findViewById(R.id.simple_table); populateTableRows(position, tableView); return view; } /** Populates all of the rows in the card at the specified position. */ private void populateTableRows(int position, ViewGroup tableView) { int startItemIndex = position * ITEMS_PER_CARD; int endItemIndex = Math.min(startItemIndex + ITEMS_PER_CARD, mItems.size()); for (int i = 0; i < ITEMS_PER_CARD; i++) { int itemIndex = startItemIndex + i; ViewGroup rowView = (ViewGroup) tableView.getChildAt(i); // The layout contains four fixed rows, so we need to hide the later ones if there are // not four items on this card. We need to make sure to update the visibility in both // cases though if the card has been recycled. if (itemIndex < endItemIndex) { SimpleTableItem item = mItems.get(itemIndex); populateTableRow(item, rowView); rowView.setVisibility(View.VISIBLE); } else { rowView.setVisibility(View.INVISIBLE); } } } /** Populates a row in the table with the specified item data. */ private void populateTableRow(SimpleTableItem item, ViewGroup rowView) { ImageView imageView = (ImageView) rowView.getChildAt(IMAGE_VIEW_INDEX); TextView primaryTextView = (TextView) rowView.getChildAt(PRIMARY_TEXT_VIEW_INDEX); TextView secondaryTextView = (TextView) rowView.getChildAt(SECONDARY_TEXT_VIEW_INDEX); imageView.setImageResource(item.iconResId); primaryTextView.setText(item.primaryText); secondaryTextView.setText(item.secondaryText); } }