package de.ironjan.mensaupb.menus_ui;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.view.View;
import android.widget.TextView;
import java.util.Locale;
import de.ironjan.mensaupb.R;
import de.ironjan.mensaupb.stw.BadgesStringConverter;
import de.ironjan.mensaupb.stw.rest_api.Badge;
import de.ironjan.mensaupb.stw.rest_api.PriceType;
/**
* Binds raw menus to de.ironjan.mensaupb.R.layout.view_menu_list_item
*/
public class MenuDetailViewBinder implements android.support.v4.widget.SimpleCursorAdapter.ViewBinder {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if (view == null || cursor == null || columnIndex < 0) {
return false;
}
if (!(view instanceof TextView)) {
return false;
}
int id = view.getId();
switch (id) {
case R.id.textName:
bindName((TextView) view, cursor);
return true;
case R.id.textCategory:
bindCategory((TextView) view, cursor);
return true;
case R.id.textPrice:
bindPrice((TextView) view, cursor, columnIndex);
return true;
case R.id.textPricePer100g:
bindPricePer100g((TextView) view, cursor, columnIndex);
return true;
case R.id.textBadges:
bindBadges((TextView) view, cursor, columnIndex);
return true;
default:
((TextView) view).setText(cursor.getString(columnIndex));
return true;
}
}
private void bindName(TextView view, Cursor cursor) {
boolean isEnglish = Locale.getDefault().getLanguage().startsWith(Locale.ENGLISH.toString());
final String name;
if (isEnglish) {
name = cursor.getString(MenuListingAdapter.NAME_EN_INDEX);
} else {
name = cursor.getString(MenuListingAdapter.NAME_DE_INDEX);
}
view.setText(name);
}
private void bindCategory(TextView view, Cursor cursor) {
boolean isEnglish = Locale.getDefault().getLanguage().startsWith(Locale.ENGLISH.toString());
final String category;
if (isEnglish) {
category = cursor.getString(MenuListingAdapter.CATEGORY_EN_INDEX);
} else {
category = cursor.getString(MenuListingAdapter.CATEGORY_DE_INDEX);
}
view.setText(category);
}
private void bindPrice(TextView view, Cursor cursor, int columnIndex) {
Double price = cursor.getDouble(columnIndex);
if (price != 0) {
// it can be 0 when syncing and not yet set
String priceAsString = String.format(Locale.GERMAN, "%.2f €", price);
view.setText(priceAsString);
}
}
@SuppressLint("SetTextI18n")
private void bindPricePer100g(TextView view, Cursor cursor, int columnIndex) {
double price = cursor.getDouble(columnIndex - 1);
if (price == 0) {
return;
}
String string = cursor.getString(columnIndex);
if (PriceType.WEIGHT.toString().equals(string)) {
view.setText("/100g");
} else {
view.setText("");
}
}
private void bindBadges(TextView textView, Cursor cursor, int columnIndex) {
String badgesAsString = cursor.getString(columnIndex);
Badge[] badges = BadgesStringConverter.convert(badgesAsString);
Context context = textView.getContext();
Resources resources = context.getResources();
if (badges == null || badges.length < 1) {
textView.setText("");
return;
}
StringBuilder stringBuilder = new StringBuilder(context.getString(badges[0].getStringId()));
for (int i = 1; i < badges.length; i++) {
String badgeString = resources.getString(badges[i].getStringId());
stringBuilder.append(", ")
.append(badgeString);
}
textView.setText(stringBuilder.toString());
}
}