/* * Copyright 2015 Fabian Schultis, Hauke Oldsen * Copyright 2016 Hauke Oldsen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.gebatzens.sia.fragment; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.widget.CardView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; import java.io.IOException; import java.io.OutputStream; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import de.gebatzens.sia.SIAApp; import de.gebatzens.sia.MainActivity; import de.gebatzens.sia.R; import de.gebatzens.sia.data.Mensa; public class MensaFragment extends RemoteDataFragment { Boolean screenOrientationHorizontal = false; @Override public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle bundle) { ((MainActivity) getActivity()).updateMenu(R.menu.toolbar_menu); ViewGroup vg = (ViewGroup) inflater.inflate(R.layout.fragment_mensa, group, false); if(getFragment().getData() != null) createRootView(inflater, vg); return vg; } @Override public void createView(LayoutInflater inflater, ViewGroup view) { LinearLayout lroot = (LinearLayout) view.findViewById(R.id.mensa_content); ScrollView sv = new ScrollView(getActivity()); sv.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); sv.setTag("gg_scroll"); LinearLayout l = new LinearLayout(getActivity()); createRootLayout(l); lroot.addView(sv); sv.addView(l); if(((Mensa) getFragment().getData()).isEmpty()) { createNoEntriesCard(l, inflater); } else { for (Mensa.MensaItem item : ((Mensa) getFragment().getData())) { if (!item.isPast()) { //try { l.addView(createCardItem(item, inflater)); //} catch (Exception e) { // e.printStackTrace(); //} } } } } @Override public ViewGroup getContentView() { return (ViewGroup) getView().findViewById(R.id.mensa_content); } private CardView createCardItem(Mensa.MensaItem mensa_item, LayoutInflater i) { CardView mcv = (CardView) i.inflate(R.layout.basic_cardview, null); mcv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); mcv.setContentPadding(0, 0, 0, 0); i.inflate(R.layout.mensa_cardview_entry, mcv, true); if(mensa_item.isPast()) mcv.setAlpha(0.65f); String[] colors = getActivity().getResources().getStringArray(SIAApp.SIA_APP.school.getColorArray()); ((TextView) mcv.findViewById(R.id.mcv_date)).setText(getFormatedDate(mensa_item.date)); ((TextView) mcv.findViewById(R.id.mcv_meal)).setText(mensa_item.meal); ((TextView) mcv.findViewById(R.id.mcv_garnish)).setText(getResources().getString(R.string.garnish) + ": " + mensa_item.garnish.replace("mit ","").replace("mit","")); ((TextView) mcv.findViewById(R.id.mcv_dessert)).setText(getResources().getString(R.string.dessert) + ": " + mensa_item.dessert); ((TextView) mcv.findViewById(R.id.mcv_day)).setText(getDayByDate(mensa_item.date)); ((ImageView) mcv.findViewById(R.id.mcv_imgvegi)).setImageBitmap((Integer.valueOf(mensa_item.vegetarian) == 1) ? BitmapFactory.decodeResource(getResources(), R.drawable.ic_vegetarian) : BitmapFactory.decodeResource(getResources(), R.drawable.ic_meat)); if(screenOrientationHorizontal) { LinearLayout mcvImageContainer = (LinearLayout) mcv.findViewById(R.id.mcv_image_container); ViewGroup.LayoutParams mcvImageContainerLayoutParams = mcvImageContainer.getLayoutParams(); mcvImageContainerLayoutParams.height = toPixels(240); } ViewHolder vh = new ViewHolder(); vh.imgview = (ImageView) mcv.findViewById(R.id.mcv_image); vh.filename = mensa_item.image; new AsyncTask<ViewHolder, Void, ViewHolder>() { @Override protected ViewHolder doInBackground(ViewHolder... params) { //params[0].bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.block_house_steak); try { Bitmap bitmap = cacheGetBitmap(params[0].filename); if(bitmap!=null) { params[0].bitmap = bitmap; } else { bitmap = SIAApp.SIA_APP.api.getMensaImage(params[0].filename); cacheSaveBitmap(params[0].filename, bitmap); params[0].bitmap = bitmap; } } catch (IOException e) { e.printStackTrace(); params[0].bitmap = null; } return params[0]; } @Override protected void onPostExecute(ViewHolder result) { try { ImageView imgView = result.imgview; if(result.bitmap != null) { imgView.setImageBitmap(result.bitmap); } else { imgView.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.no_content)); } imgView.setScaleType(ImageView.ScaleType.CENTER_CROP); } catch (Exception e) { e.printStackTrace(); } } }.execute(vh); return mcv; } private String getDayByDate(String date) { String formattedDate; DateFormat parser = new SimpleDateFormat("yyyy-MM-dd"); DateFormat dateFormatter = new SimpleDateFormat("EEE"); try { Date parsedDate = parser.parse(date); formattedDate = dateFormatter.format(parsedDate); return formattedDate; } catch (ParseException e) { e.printStackTrace(); return ""; } } private String getFormatedDate(String date) { String formattedDate; DateFormat parser = new SimpleDateFormat("yyyy-MM-dd"); DateFormat dateFormatter; switch (Locale.getDefault().getLanguage()) { case "de": dateFormatter = new SimpleDateFormat("d. MMM"); break; case "en": dateFormatter = new SimpleDateFormat("MM/dd/yyyy"); break; default: dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); break; } try { Date parsedDate = parser.parse(date); formattedDate = dateFormatter.format(parsedDate); return formattedDate; } catch (ParseException e) { e.printStackTrace(); return ""; } } public Bitmap cacheGetBitmap(String filename) { try { return BitmapFactory.decodeStream(getActivity().openFileInput("cache_" + filename)); } catch(Exception e) { return null; } } private void cacheSaveBitmap(String filename, Bitmap image) { try { OutputStream fos = getActivity().openFileOutput("cache_" + filename, Context.MODE_PRIVATE); image.compress(Bitmap.CompressFormat.PNG, 90, fos); fos.close(); } catch (Exception e) { e.printStackTrace(); } } private class ViewHolder { ImageView imgview; Bitmap bitmap; String filename; } }