package de.htwdd;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.text.DateFormatSymbols;
import java.util.ArrayList;
import java.util.Arrays;
import de.htwdd.types.Lesson;
public class TimetableAdapter extends BaseAdapter
{
private LayoutInflater inflater;
private int week;
private ArrayList<Lesson> lessons_week;
private final String[] nameOfDays = DateFormatSymbols.getInstance().getShortWeekdays();
public TimetableAdapter(Context context, ArrayList<Lesson> lessons_week, int week)
{
this.week = week;
this.lessons_week= lessons_week;
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount()
{
return 56;
}
@Override
public ArrayList<Lesson> getItem(int i)
{
int DS = i/7;
int Day = i%7;
ArrayList<Lesson> lessons = new ArrayList<Lesson>();
for (Lesson lesson: lessons_week)
if (lesson.day == Day && lesson.ds == DS)
lessons.add(lesson);
return lessons;
}
@Override
public long getItemId(int i)
{
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup)
{
ArrayList<Lesson> lessons;
if (view == null)
view = this.inflater.inflate(R.layout.fragment_timetable_item, viewGroup, false);
// Standardgröße einer Zeile
view.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, 180));
LinearLayout layout = (LinearLayout) view.findViewById(R.id.TimetableLayout);
TextView textViewTag = (TextView) view.findViewById(R.id.TimetableTag);
TextView textViewType = (TextView) view.findViewById(R.id.TimetableType);
TextView textViewRoom = (TextView) view.findViewById(R.id.TimetableRoom);
TextView textViewMore = (TextView) view.findViewById(R.id.TimetableMoreLessons);
TextView textViewKW = (TextView) view.findViewById(R.id.TimetableOnlyKW);
textViewTag.setVisibility(View.GONE);
textViewRoom.setVisibility(View.GONE);
textViewMore.setVisibility(View.GONE);
textViewKW.setVisibility(View.GONE);
switch (i)
{
case 0:
textViewType.setText(null);
view.setBackgroundColor(view.getResources().getColor(R.color.white));
view.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, 50));
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
textViewType.setText(nameOfDays[i+1]);
view.setBackgroundColor(view.getResources().getColor(R.color.white));
view.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, 50));
break;
case 7:
view.setBackgroundColor(view.getResources().getColor(R.color.white));
textViewType.setText(R.string.timetable_DS_1);
textViewType.setHeight(180);
break;
case 14:
view.setBackgroundColor(view.getResources().getColor(R.color.white));
textViewType.setText(R.string.timetable_DS_2);
textViewType.setHeight(180);
break;
case 21:
view.setBackgroundColor(view.getResources().getColor(R.color.white));
textViewType.setText(R.string.timetable_DS_3);
textViewType.setHeight(180);
break;
case 28:
view.setBackgroundColor(view.getResources().getColor(R.color.white));
textViewType.setText(R.string.timetable_DS_4);
textViewType.setHeight(180);
break;
case 35:
view.setBackgroundColor(view.getResources().getColor(R.color.white));
textViewType.setText(R.string.timetable_DS_5);
textViewType.setHeight(180);
break;
case 42:
view.setBackgroundColor(view.getResources().getColor(R.color.white));
textViewType.setText(R.string.timetable_DS_6);
textViewType.setHeight(180);
break;
case 49:
view.setBackgroundColor(view.getResources().getColor(R.color.white));
textViewType.setText(R.string.timetable_DS_7);
textViewType.setHeight(180);
break;
default:
textViewTag.setVisibility(View.VISIBLE);
textViewRoom.setVisibility(View.VISIBLE);
Lesson lesson = null;
lessons = getItem(i);
// Nur eine Stunde für dieser DS vorhanden
if (lessons.size() == 1)
{
lesson = lessons.get(0);
textViewTag.setText(lesson.lessonTag);
textViewRoom.setText(lesson.rooms);
if (!lesson.weeksOnly.isEmpty()) {
textViewKW.setVisibility(View.VISIBLE);
}
}
// mehrere Stunden für dieser DS vorhanden
else if (lessons.size() > 1)
{
int single=0;
textViewMore.setVisibility(View.VISIBLE);
// Suche nach einer passenden Veranstaltung
for (Lesson tmp : lessons)
{
// Es ist keine spezielle KW gesetzt, d.h. die Veranstaltung ist immer
if (tmp.weeksOnly.isEmpty())
{
single++;
if (single==1)
lesson = tmp;
else
// Zweite Veranstallung gefunden, die "immer" ist
break;
}
// Es sind spezielle KW gestzt, suche aktuelle zum anzeigen
String[] lessonWeek = tmp.weeksOnly.split(";");
// Aktuelle Woche enthalten?
if (Arrays.asList(lessonWeek).contains(week+""))
{
single++;
if (single==1)
lesson = tmp;
else
// Zweite Veranstallung gefunden, die "immer" ist
break;
}
}
// Es gibt keine passende Veranstaltung die angezeigt werden kann
if (single!=1)
{
textViewRoom.setVisibility(View.GONE);
textViewType.setText(R.string.timetable_moreLessons);
break;
}
// Doch eine Veranstalltung gefunden
textViewTag.setText(lesson.lessonTag);
textViewRoom.setText(lesson.rooms);
}
// Keine Stunde in dieser DS
else
{
view.setBackgroundColor(view.getResources().getColor(R.color.faded_grey));
textViewTag.setText(null);
textViewType.setText(null);
textViewRoom.setText(null);
break;
}
// Zeige Art an
String[] lessonType = view.getResources().getStringArray(R.array.lesson_type);
// Setze Hintergrundfarbe
switch (lesson.getTypeInt())
{
case 0:
layout.setBackgroundColor(view.getResources().getColor(R.color.faded_blue));
textViewType.setText(lessonType[0]);
break;
case 1:
layout.setBackgroundColor(view.getResources().getColor(R.color.faded_orange));
textViewType.setText(lessonType[1]);
break;
case 2:
layout.setBackgroundColor(view.getResources().getColor(R.color.faded_green));
textViewType.setText(lessonType[2]);
break;
default:
layout.setBackgroundColor(view.getResources().getColor(R.color.faded_magenta));
textViewType.setText(lessonType[3]);
}
}
return view;
}
}