/* * 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.graphics.Color; import android.support.v7.widget.AppCompatSpinner; import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.TextView; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; import de.gebatzens.sia.SIAApp; import de.gebatzens.sia.R; import de.gebatzens.sia.data.Exams; import de.gebatzens.sia.data.Filter; public class ExamAdapter extends RecyclerView.Adapter { List<Exams.ExamItem> list; ExamFragment frag; int cardColorIndex = 0; boolean overview; String label; public ExamAdapter(ExamFragment f) { frag = f; } public void update(String label, List<Exams.ExamItem> list, boolean overview) { this.list = list; this.label = label; this.overview = overview; notifyDataSetChanged(); } @Override public int getItemViewType(int position) { switch(position) { case 0: case 1: return position; default: return list.size() == 0 ? 3 : 2; } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); switch(viewType) { case 0: CardView cv2 = new CardView(frag.getContext()); CardView.LayoutParams params = new CardView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.setMargins(0, 0, 0, RemoteDataFragment.toPixels(5)); cv2.setLayoutParams(params); cv2.setRadius(0); LinearLayout l2 = new LinearLayout(frag.getContext()); cv2.addView(l2); final TextView tv5 = frag.createPrimaryTextView("", 15, inflater, l2); tv5.setPadding(RemoteDataFragment.toPixels(16), RemoteDataFragment.toPixels(16), RemoteDataFragment.toPixels(16), RemoteDataFragment.toPixels(16)); LinearLayout l4 = new LinearLayout(frag.getContext()); l4.setGravity(Gravity.END | Gravity.CENTER); l4.setPadding(0, 0, RemoteDataFragment.toPixels(16), 0); l4.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); final List<String> classes = new ArrayList<>(); classes.add(frag.getString(R.string.overview)); classes.addAll(((Exams) frag.getFragment().getData()).getAllClasses()); AppCompatSpinner classSpinner = new AppCompatSpinner(frag.getContext()); ArrayAdapter<String> adapter = new ArrayAdapter<>(frag.getContext(), android.R.layout.simple_spinner_item, classes); adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item); classSpinner.setAdapter(adapter); int selection = SIAApp.SIA_APP.preferences.getInt("exam_selected", 0); if(selection < classes.size()) classSpinner.setSelection(selection); l4.addView(classSpinner); l2.addView(l4); classSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onNothingSelected(AdapterView<?> parent) { } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { SIAApp.SIA_APP.preferences.edit().putInt("exam_selected", position).apply(); if (position == 0) { List<Exams.ExamItem> list = ((Exams) frag.getFragment().getData()).getSelectedItems(false); tv5.setText(frag.getString(R.string.entries) + " " + list.size()); ExamAdapter.this.update(frag.getString(R.string.your_overview), list, true); } else { String cl = classes.get(position); Filter.FilterList list = new Filter.FilterList(); list.including.add(new Filter.IncludingFilter(Filter.FilterType.CLASS, cl)); List<Exams.ExamItem> items = ((Exams) frag.getFragment().getData()).filter(list, false); tv5.setText(frag.getString(R.string.entries) + " " + items.size()); ExamAdapter.this.update(cl, items, false); } } }); return new ViewHolder(cv2); case 3: LinearLayout wrapper = new LinearLayout(frag.getContext()); wrapper.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); frag.createNoEntriesCard(wrapper, inflater); return new ViewHolder(wrapper); case 2: return createCardItem(inflater, parent); case 1: wrapper = new LinearLayout(frag.getContext()); frag.setOrientationPadding(wrapper); TextView tv = frag.createSecondaryTextView("", 27, inflater, wrapper); tv.setPadding(RemoteDataFragment.toPixels(2.8f), RemoteDataFragment.toPixels(20), 0, 0); return new LabelViewHolder(wrapper); default: return null; } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if(position == 1) { ((LabelViewHolder) holder).update(label); } else if(holder instanceof CardViewHolder) { ((CardViewHolder) holder).update(list.get(position - 2), !overview); } } @Override public int getItemCount() { return 2 + Math.max(list.size(), 1); } public static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View itemView) { super(itemView); } } public static class LabelViewHolder extends RecyclerView.ViewHolder { TextView label; public LabelViewHolder(ViewGroup itemView) { super(itemView); label = (TextView) itemView.getChildAt(0); } public void update(String l) { label.setText(l); } } public class CardViewHolder extends RecyclerView.ViewHolder { TextView date, lesson, subjectTeacher, sclass; CheckBox cb; public CardViewHolder(View itemView) { super(itemView); date = (TextView) itemView.findViewById(R.id.ecv_date); lesson = (TextView) itemView.findViewById(R.id.ecv_lesson); subjectTeacher = (TextView) itemView.findViewById(R.id.ecv_subject_teacher); sclass = (TextView) itemView.findViewById(R.id.ecv_schoolclass); cb = (CheckBox) itemView.findViewById(R.id.ecv_checkbox); } public void update(final Exams.ExamItem examItem, boolean checkbox) { date.setText(getFormattedDate(examItem.date)); lesson.setText(getDay(examItem.date)); String content = examItem.subject; if(!examItem.teacher.equals("")) content += " [" + examItem.teacher + "]"; subjectTeacher.setText(content); String lessonContent = examItem.clazz; if(Integer.parseInt(examItem.lesson) > 0) { String lesson = examItem.lesson; if(Integer.parseInt(examItem.length) > 1) lesson += ". - " + (Integer.parseInt(examItem.lesson) + Integer.parseInt(examItem.length) - 1) + "."; lessonContent += "\n" + frag.getString(R.string.lessons) + " " + lesson; } sclass.setText(lessonContent); final String calendarTitle = frag.getString(R.string.exam) + ": " + content; if(checkbox) { cb.setVisibility(View.VISIBLE); cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { examItem.selected = isChecked; new Thread() { @Override public void run() { frag.getFragment().getData().save(); } }.start(); } }); cb.setChecked(examItem.selected); } else { cb.setVisibility(View.GONE); cb.setOnCheckedChangeListener(null); } } } private CardViewHolder createCardItem(LayoutInflater i, ViewGroup parent) { LinearLayout wrapper = new LinearLayout(parent.getContext()); wrapper.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); frag.setOrientationPadding(wrapper); CardView ecv = (CardView) i.inflate(R.layout.basic_cardview, wrapper, false); String[] colors = frag.getContext().getResources().getStringArray(SIAApp.SIA_APP.school.getColorArray()); ecv.setCardBackgroundColor(Color.parseColor(colors[cardColorIndex])); cardColorIndex++; if(cardColorIndex == colors.length) cardColorIndex = 0; LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); ecv.setLayoutParams(params); i.inflate(R.layout.exam_cardview_entry, ecv, true); wrapper.addView(ecv); return new CardViewHolder(wrapper); } private String getFormattedDate(Date date) { 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; } return dateFormatter.format(date); } private String getDay(Date date) { try { return new SimpleDateFormat("EE").format(date); } catch(Exception e) { e.printStackTrace(); } return "Bug"; } }