/*
* ____.____ __.____ ___ _____
* | | |/ _| | \ / _ \ ______ ______
* | | < | | / / /_\ \\____ \\____ \
* /\__| | | \| | / / | \ |_> > |_> >
* \________|____|__ \______/ \____|__ / __/| __/
* \/ \/|__| |__|
*
* 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.fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.voidsink.anewjkuapp.MensaInfoItem;
import org.voidsink.anewjkuapp.MensaItem;
import org.voidsink.anewjkuapp.MensaMenuAdapter;
import org.voidsink.anewjkuapp.MensaMenuItem;
import org.voidsink.anewjkuapp.R;
import org.voidsink.anewjkuapp.base.BaseAsyncTaskLoader;
import org.voidsink.anewjkuapp.base.BaseFragment;
import org.voidsink.anewjkuapp.mensa.IDay;
import org.voidsink.anewjkuapp.mensa.IMensa;
import org.voidsink.anewjkuapp.mensa.IMenu;
import org.voidsink.anewjkuapp.mensa.MenuLoader;
import org.voidsink.sectionedrecycleradapter.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import java.util.Calendar;
public abstract class MensaFragmentDetail extends BaseFragment implements LoaderManager.LoaderCallbacks<ArrayList<MensaItem>> {
public static final String TAG = MensaFragmentDetail.class.getSimpleName();
private MensaMenuAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_recycler_view, container, false);
RecyclerView mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));
mAdapter = new MensaMenuAdapter(getContext(), true);
mRecyclerView.setAdapter(new SectionedRecyclerViewAdapter(mRecyclerView, mAdapter));
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(0, null, this);
}
private void updateData() {
getLoaderManager().restartLoader(0, null, this);
}
protected abstract MenuLoader createLoader();
@Override
public Loader<ArrayList<MensaItem>> onCreateLoader(int i, Bundle bundle) {
showProgressIndeterminate();
return new MenuDetailLoader(getContext(), createLoader());
}
@Override
public void onLoadFinished(Loader<ArrayList<MensaItem>> loader, ArrayList<MensaItem> mensaItems) {
mAdapter.clear();
if (mensaItems != null) {
mAdapter.addAll(mensaItems);
}
mAdapter.notifyDataSetChanged();
finishProgress();
}
@Override
public void onLoaderReset(Loader<ArrayList<MensaItem>> loader) {
mAdapter.clear();
mAdapter.notifyDataSetChanged();
finishProgress();
}
private static class MenuDetailLoader extends BaseAsyncTaskLoader<ArrayList<MensaItem>> {
private final MenuLoader mMenuLoader;
public MenuDetailLoader(Context context, MenuLoader menuLoader) {
super(context);
this.mMenuLoader = menuLoader;
}
@Override
public ArrayList<MensaItem> loadInBackground() {
ArrayList<MensaItem> mMenus = new ArrayList<>();
final IMensa mensa = mMenuLoader.getMensa(MenuDetailLoader.this.getContext());
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
// set date to start of week
cal.add(Calendar.DAY_OF_YEAR, -cal.get(Calendar.DAY_OF_WEEK) + cal.getFirstDayOfWeek());
if (mensa != null) {
for (IDay day : mensa.getDays()) {
// allow only menus >= start of this week
if ((day.getDate() != null) && (day.getDate().getTime() >= cal.getTimeInMillis())) {
for (IMenu menu : day.getMenus()) {
mMenus.add(new MensaMenuItem(mensa, day, menu));
// remember position of menu for today for scrolling to item after update
}
}
}
}
if (mMenus.size() == 0) {
mMenus.add(new MensaInfoItem(mensa, null, MenuDetailLoader.this.getContext().getString(R.string.mensa_menu_not_available), null));
}
return mMenus;
}
}
}