/*
* ____.____ __.____ ___ _____
* | | |/ _| | \ / _ \ ______ ______
* | | < | | / / /_\ \\____ \\____ \
* /\__| | | \| | / / | \ |_> > |_> >
* \________|____|__ \______/ \____|__ / __/| __/
* \/ \/|__| |__|
*
* Copyright (c) 2014-2015 Paul "Marunjar" Pretsch
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
package org.voidsink.anewjkuapp;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.voidsink.anewjkuapp.base.RecyclerArrayAdapter;
import org.voidsink.anewjkuapp.mensa.IDay;
import org.voidsink.anewjkuapp.mensa.IMensa;
import org.voidsink.anewjkuapp.mensa.IMenu;
import org.voidsink.anewjkuapp.utils.AppUtils;
import org.voidsink.anewjkuapp.utils.UIUtils;
import org.voidsink.sectionedrecycleradapter.SectionedAdapter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class MensaMenuAdapter extends RecyclerArrayAdapter<MensaItem, RecyclerView.ViewHolder> implements SectionedAdapter<MensaMenuAdapter.MenuHeaderHolder> {
private static final DateFormat df = SimpleDateFormat.getDateInstance();
private final boolean mUseDateHeader;
public MensaMenuAdapter(Context context, boolean useDateHeader) {
super(context);
this.mUseDateHeader = useDateHeader;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case MensaItem.TYPE_INFO: {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.mensa_info_item, parent, false);
return new MensaInfoHolder(v);
}
case MensaItem.TYPE_MENU: {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.mensa_menu_item, parent, false);
return new MenuViewHolder(v);
}
default:
return null;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (getItemViewType(position)) {
case MensaItem.TYPE_INFO: {
MensaInfoItem mensaInfoItem = (MensaInfoItem) getItem(position);
((MensaInfoHolder) holder).mTitle.setText(mensaInfoItem.getTitle());
UIUtils.setTextAndVisibility(((MensaInfoHolder) holder).mDescr, mensaInfoItem.getDescr());
break;
}
case MensaItem.TYPE_MENU: {
MenuViewHolder mensaMenuItemHolder = (MenuViewHolder) holder;
IMenu menu = getItem(position).getMenu();
UIUtils.setTextAndVisibility(mensaMenuItemHolder.mName, menu.getName());
UIUtils.setTextAndVisibility(mensaMenuItemHolder.mSoup, menu.getSoup());
mensaMenuItemHolder.mMeal.setText(menu.getMeal());
if (menu.getPrice() > 0) {
mensaMenuItemHolder.mPrice.setText(AppUtils.format(getContext(), "%.2f €",
menu.getPrice()));
mensaMenuItemHolder.mPrice.setVisibility(View.VISIBLE);
if (menu.getOehBonus() > 0) {
mensaMenuItemHolder.mOehBonus.setText(AppUtils.format(getContext(),
"inkl %.2f € ÖH Bonus", menu.getOehBonus()));
mensaMenuItemHolder.mOehBonus.setVisibility(View.VISIBLE);
} else {
mensaMenuItemHolder.mOehBonus.setVisibility(View.GONE);
}
} else {
mensaMenuItemHolder.mPrice.setVisibility(View.GONE);
mensaMenuItemHolder.mOehBonus.setVisibility(View.GONE);
}
break;
}
}
}
@Override
public int getItemViewType(int position) {
return this.getItem(position).getType();
}
@Override
public long getHeaderId(int position) {
MensaItem item = getItem(position);
if (item != null) {
if (mUseDateHeader) {
final IDay day = item.getDay();
if (day != null) {
Calendar cal = Calendar.getInstance(); // locale-specific
cal.setTimeInMillis(day.getDate().getTime());
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}
} else {
final IMensa mensa = item.getMensa();
if (mensa != null) {
return (long) mensa.getName().hashCode() + (long) Integer.MAX_VALUE; // header id has to be > 0???
}
}
}
return 0;
}
@Override
public MenuHeaderHolder onCreateHeaderViewHolder(ViewGroup viewGroup) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_header, viewGroup, false);
return new MenuHeaderHolder(v);
}
@Override
public void onBindHeaderViewHolder(MenuHeaderHolder menuHeaderHolder, int position) {
MensaItem item = getItem(position);
if (item != null) {
if (mUseDateHeader) {
final IDay day = item.getDay();
if (day != null) {
menuHeaderHolder.mText.setText(df.format(day.getDate()));
}
} else {
IMensa mensa = item.getMensa();
if (mensa != null) {
menuHeaderHolder.mText.setText(mensa.getName());
}
}
}
}
public static class MenuViewHolder extends RecyclerView.ViewHolder {
public final TextView mName;
public final TextView mSoup;
public final TextView mMeal;
public final TextView mPrice;
public final TextView mOehBonus;
public MenuViewHolder(View itemView) {
super(itemView);
mName = (TextView) itemView.findViewById(R.id.mensa_menu_item_name);
mSoup = (TextView) itemView.findViewById(R.id.mensa_menu_item_soup);
mMeal = (TextView) itemView.findViewById(R.id.mensa_menu_item_meal);
mPrice = (TextView) itemView.findViewById(R.id.mensa_menu_item_price);
mOehBonus = (TextView) itemView.findViewById(R.id.mensa_menu_item_oeh_bonus);
}
}
public static class MensaInfoHolder extends RecyclerView.ViewHolder {
public final TextView mTitle;
public final TextView mDescr;
public MensaInfoHolder(View itemView) {
super(itemView);
mTitle = (TextView) itemView.findViewById(R.id.mensa_info_item_title);
mDescr = (TextView) itemView.findViewById(R.id.mensa_info_item_descr);
}
}
public class MenuHeaderHolder extends RecyclerView.ViewHolder {
public final TextView mText;
public MenuHeaderHolder(View itemView) {
super(itemView);
mText = (TextView) itemView.findViewById(R.id.list_header_text);
}
}
}