package it.fdev.unisaconnect; import it.fdev.scraper.MenuMensaScraper; import it.fdev.unisaconnect.data.MenuMensa; import it.fdev.unisaconnect.data.MenuMensa.PiattoMensa; import it.fdev.unisaconnect.data.SharedPrefDataManager; import it.fdev.utils.ExpandablePanel; import it.fdev.utils.MyDateUtils; import it.fdev.utils.MySimpleFragment; import it.fdev.utils.Utils; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashSet; import java.util.Locale; import java.util.Set; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; public class FragmentMensa extends MySimpleFragment { private SharedPrefDataManager mDataManager; private MenuMensaScraper mensaScraper; private boolean alreadyStarted = false; private MenuMensa menu; private TextView lastUpdateTimeView; private View lastUpdateIconView; private View menuContainerView; private TextView menuNDView; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View mainView = (View) inflater.inflate(R.layout.fragment_mensa, container, false); return mainView; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); lastUpdateTimeView = (TextView) view.findViewById(R.id.last_update_time); lastUpdateIconView = view.findViewById(R.id.last_update_icon); menuContainerView = view.findViewById(R.id.menu_list_container); menuNDView = (TextView) view.findViewById(R.id.menu_non_disponibile); mDataManager = new SharedPrefDataManager(mActivity); mActivity.setLoadingVisible(true, true); menu = mDataManager.getMenuMensa(); if (menu != null) { Log.d(Utils.TAG, "Menu salvato!"); } getMenu(false); } @Override public Set<Integer> getActionsToShow() { Set<Integer> actionsToShow = new HashSet<Integer>(); actionsToShow.add(R.id.action_refresh_button); if (!alreadyStarted) { actionsToShow.add(R.id.action_loading_animation); } return actionsToShow; } @Override public void actionRefresh() { getMenu(true); } public void getMenu(boolean force) { if (!isAdded()) { return; } mActivity.setLoadingVisible(true, true); if (force) { menu = null; mDataManager.setMenuMensa(null); } if (!force && menu != null) { Calendar lastUpdateTime = new GregorianCalendar(); lastUpdateTime.setTime(menu.getFetchTime()); Calendar now = new GregorianCalendar(); now.setTime(new Date()); // Se il menu è di oggi if (lastUpdateTime.get(GregorianCalendar.DAY_OF_MONTH) == now.get(GregorianCalendar.DAY_OF_MONTH) && lastUpdateTime.get(GregorianCalendar.MONTH) == now.get(GregorianCalendar.MONTH) && lastUpdateTime.get(GregorianCalendar.YEAR) == now.get(GregorianCalendar.YEAR)) { alreadyStarted = true; mostraMenu(null); return; } else { // Il menu è vecchio, lo cancello e continuo menu = null; mDataManager.setMenuMensa(null); } } if (!Utils.hasConnection(mActivity)) { Utils.goToInternetError(mActivity, this); return; } if (force || !alreadyStarted) { alreadyStarted = true; if (mensaScraper != null && mensaScraper.isRunning) { return; } menu = null; mDataManager.setMenuMensa(null); mensaScraper = new MenuMensaScraper(); mensaScraper.setCallerMenuMensaFragment(this); mensaScraper.execute(mActivity); return; } else { mostraMenu(null); } } public void mostraMenu(MenuMensa menu) { if (!isAdded()) { return; } if (menuContainerView == null || menuNDView == null) { // Dai report di crash sembra succedere a volte, non ho idea del perchè mActivity.setDrawerOpen(true); // Quindi mostro lo slidingmenu per apparare mActivity.setLoadingVisible(false, false); return; } if (menu == null && this.menu == null) { menuContainerView.setVisibility(View.GONE); menuNDView.setVisibility(View.VISIBLE); mActivity.setLoadingVisible(false, false); return; } else { menuContainerView.setVisibility(View.VISIBLE); menuNDView.setVisibility(View.GONE); } if (menu != null) { this.menu = menu; } String updateText; try { SimpleDateFormat inputFormatterTime = new SimpleDateFormat("dd/MM/yy", Locale.ITALY); Date date = inputFormatterTime.parse(this.menu.getDate()); // long millis = Long.parseLong(this.menu.getDateMillis()); updateText = MyDateUtils.getLastUpdateString(mActivity, date.getTime(), true); } catch (Exception e) { updateText = this.menu.getDate(); } if (updateText != null && !updateText.isEmpty()) { lastUpdateTimeView.setText(updateText); lastUpdateTimeView.setVisibility(View.VISIBLE); lastUpdateIconView.setVisibility(View.VISIBLE); } else { lastUpdateTimeView.setVisibility(View.GONE); lastUpdateIconView.setVisibility(View.GONE); } LayoutInflater layoutInflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout menuListView = (LinearLayout) mActivity.findViewById(R.id.menu_list); menuListView.removeAllViews(); ArrayList<PiattoMensa> firstCourses = this.menu.getFirstCourses(); ArrayList<PiattoMensa> secondCourses = this.menu.getSecondCourses(); ArrayList<PiattoMensa> sideCourses = this.menu.getSideCourses(); ArrayList<PiattoMensa> fruitCourses = this.menu.getFruitCourses(); ArrayList<PiattoMensa> takeAwayCourses = this.menu.getTakeAwayBasketCourses(); ArrayList<PiattoMensa> otherCourses = this.menu.getOtherCourses(); if (firstCourses != null && firstCourses.size() > 0) { LinearLayout courseView = inflateCourse(firstCourses, getString(R.string.mensa_primi), layoutInflater); menuListView.addView(courseView); } if (secondCourses != null && secondCourses.size() > 0) { LinearLayout courseView = inflateCourse(secondCourses, getString(R.string.mensa_secondi), layoutInflater); menuListView.addView(courseView); } if (sideCourses != null && sideCourses.size() > 0) { LinearLayout courseView = inflateCourse(sideCourses, getString(R.string.mensa_contorni), layoutInflater); menuListView.addView(courseView); } if (otherCourses != null) { LinearLayout courseView = inflateCourse(otherCourses, getString(R.string.mensa_altro), layoutInflater); menuListView.addView(courseView); } else { if (fruitCourses != null && fruitCourses.size() > 0) { LinearLayout courseView = inflateCourse(fruitCourses, getString(R.string.mensa_frutta), layoutInflater); menuListView.addView(courseView); } if (takeAwayCourses != null && takeAwayCourses.size() > 0) { LinearLayout courseView = inflateCourse(takeAwayCourses, getString(R.string.mensa_centino), layoutInflater); menuListView.addView(courseView); } } if (menu != null) { // Il metodo è stato chiamato con il menu aggiornato da salvare Log.d(Utils.TAG, "Salvo il menu!"); mDataManager.setMenuMensa(menu); } mActivity.setLoadingVisible(false, false); } public void mostraErrore(String errore) { menuContainerView.setVisibility(View.GONE); menuNDView.setText(errore); menuNDView.setVisibility(View.VISIBLE); mActivity.setLoadingVisible(false, false); return; } private LinearLayout inflateCourse(ArrayList<PiattoMensa> courses, String name, LayoutInflater layoutInflater) { LinearLayout courseView = (LinearLayout) layoutInflater.inflate(R.layout.mensa_course, null); TextView labelView = (TextView) courseView.findViewById(R.id.course_label); labelView.setText(name); for (PiattoMensa cCourse : courses) { String nome = cCourse.getNomePiatto(); String ingredientiIT = cCourse.getIngredientiIt(); String ingredientiEN = cCourse.getIngradientiEn(); if (nome != null) { LinearLayout detailsView = (LinearLayout) layoutInflater.inflate(R.layout.mensa_course_details, null); ExpandablePanel expPanel = (ExpandablePanel) detailsView.findViewById(R.id.exp_panel); TextView nameView = (TextView) detailsView.findViewById(R.id.course_name); TextView ingredientsITView = (TextView) detailsView.findViewById(R.id.course_ingredients_it); TextView ingredientsENView = (TextView) detailsView.findViewById(R.id.course_ingredients_en); nameView.setText(nome); if (ingredientiIT == null || ingredientiIT.isEmpty()) { ingredientsITView.setVisibility(TextView.GONE); } else { ingredientsITView.setText(ingredientiIT); } if (ingredientiEN == null || ingredientiEN.isEmpty()) { ingredientsENView.setVisibility(TextView.GONE); } else { ingredientsENView.setText(ingredientiEN); } if ((ingredientiIT == null || ingredientiIT.isEmpty()) && (ingredientiEN == null || ingredientiEN.isEmpty())) { expPanel.hideHandle(); } courseView.addView(detailsView); } } return courseView; } @Override public void onStop() { if (mensaScraper != null && mensaScraper.isRunning) { mensaScraper.cancel(true); } super.onStop(); } @Override public int getTitleResId() { return R.string.menu_mensa; } }