package de.ironjan.mensaupb.menus_ui; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.BaseColumns; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.SimpleCursorAdapter; import android.view.View; import android.view.ViewGroup; import java.util.Locale; import de.ironjan.mensaupb.R; import de.ironjan.mensaupb.prefs.AllergenFilterPrefs_; import de.ironjan.mensaupb.stw.rest_api.StwMenu; import de.ironjan.mensaupb.sync.MenuContentProvider; import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter; /** * An adapter to load the list of menus for a MenuListingFragment. */ public class MenuListingAdapter extends SimpleCursorAdapter implements android.support.v4.app.LoaderManager.LoaderCallbacks<Cursor>, StickyListHeadersAdapter { public static final String[] PROJECTION = { StwMenu.NAME_GERMAN, // 0 StwMenu.STUDENTS_PRICE, // 1 StwMenu.PRICE_TYPE, // 2 StwMenu.BADGES, // 3 StwMenu.CATEGORY_DE, // 4 StwMenu.NAME_EN, // 5 StwMenu.CATEGORY_EN, // 6 BaseColumns._ID}; // 7 public static final int CATEGORY_EN_INDEX = 6, CATEGORY_DE_INDEX = 4, NAME_EN_INDEX = 5, NAME_DE_INDEX = 0; private static final String MENU_SELECTION = StwMenu.DATE + " = ? AND " + StwMenu.RESTAURANT + " LIKE ?"; private static final int[] BIND_TO = {R.id.textName, R.id.textPrice, R.id.textPricePer100g, R.id.textBadges}; private final String mDate; private final String mLocation; private final AllergenFilterPrefs_ mAllergenFilterPrefs; private String[] listProjection = PROJECTION; public MenuListingAdapter(Context context, String argDate, String argLocation) { super(context, R.layout.view_menu_list_item, null, PROJECTION, BIND_TO, 0); this.mContext = context; this.mDate = argDate; this.mLocation = argLocation; mAllergenFilterPrefs = new AllergenFilterPrefs_(context); } @Override public Loader<Cursor> onCreateLoader(int i, Bundle bundle) { String[] projection = listProjection; final String[] selectionArgs = {mDate, mLocation}; final Uri menuUri; menuUri = MenuContentProvider.MENU_URI; return new CursorLoader(mContext, menuUri, projection, MENU_SELECTION, selectionArgs, null); } @Override public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) { swapCursor(cursor); } @Override public void onLoaderReset(Loader<Cursor> cursorLoader) { } @Override public View getHeaderView(int pos, View convertView, ViewGroup parent) { String categoryOfPosition = getLocalizedCategoryOfPosition(pos); MenuListingHeaderView view; if (convertView == null) { view = MenuListingHeaderView_.build(mContext); } else { view = (MenuListingHeaderView) convertView; } view.setText(categoryOfPosition); return view; } @Override public long getHeaderId(int pos) { String category = getLocalizedCategoryOfPosition(pos); return category.hashCode(); } private String getLocalizedCategoryOfPosition(int pos) { // fixme can this be replaced with category id? Cursor cursor = getCursor(); cursor.moveToPosition(pos); boolean isEnglish = Locale.getDefault().getLanguage().startsWith(Locale.ENGLISH.toString()); if (isEnglish) { return cursor.getString(CATEGORY_EN_INDEX); } return cursor.getString(CATEGORY_DE_INDEX); } }