/*
 * Copyright (C) 2008 Esmertec AG.
 * Copyright (C) 2008 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.android.mms.ui;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

import com.android.mms.R;

/**
 * The back-end data adapter for DeliveryReportActivity.
 */
public class DeliveryReportAdapter extends ArrayAdapter<DeliveryReportItem> {
    static final String LOG_TAG = "DeliveryReportAdapter";

    public DeliveryReportAdapter(Context context, List<DeliveryReportItem> items) {
        super(context, R.layout.delivery_report_list_item, R.id.recipient, items);
    }

    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        DeliveryReportListItem listItem;
        DeliveryReportItem item = this.getItem(position);

        if (view == null) {
            LayoutInflater factory = LayoutInflater.from(getContext());
            listItem = (DeliveryReportListItem) factory.inflate(
                    R.layout.delivery_report_list_item, viewGroup, false);
        } else {
            if (view instanceof DeliveryReportListItem) {
                listItem = (DeliveryReportListItem) view;
            } else {
                return view;
            }
        }

        listItem.bind(item.recipient, item.status, item.deliveryDate);

        return listItem;
    }
}
