/*
* Copyright (C) 2011 - 2013 Michi Gysel <michael.gysel@gmail.com>
*
* This file is part of the HSR Timetable.
*
* 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 ch.scythe.hsr;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TableLayout;
import android.widget.TextView;
import ch.scythe.hsr.api.ui.UiDay;
import ch.scythe.hsr.api.ui.UiLesson;
import ch.scythe.hsr.api.ui.UiWeek;
import ch.scythe.hsr.enumeration.Weekday;
public class DayFragment extends DialogFragment {
public static final String FRAGMENT_PARAMETER_DATA = "week";
public static final String FRAGMENT_PARAMETER_WEEKDAY = "position";
private UiWeek week;
private Weekday weekDay;
private LayoutInflater layoutInflater;
public DayFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle arguments = getArguments();
if (arguments != null) {
week = (UiWeek) (arguments.getSerializable(FRAGMENT_PARAMETER_DATA));
weekDay = (Weekday) (arguments.getSerializable(FRAGMENT_PARAMETER_WEEKDAY));
}
}
@Override
public void onSaveInstanceState(Bundle instanceToSave) {
super.onSaveInstanceState(instanceToSave);
instanceToSave.putSerializable(FRAGMENT_PARAMETER_DATA, week);
instanceToSave.putSerializable(FRAGMENT_PARAMETER_WEEKDAY, weekDay);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (savedInstanceState != null && savedInstanceState.containsKey(FRAGMENT_PARAMETER_DATA)) {
week = (UiWeek) (savedInstanceState.getSerializable(FRAGMENT_PARAMETER_DATA));
weekDay = (Weekday) (savedInstanceState.getSerializable(FRAGMENT_PARAMETER_WEEKDAY));
}
layoutInflater = getLayoutInflater(savedInstanceState);
View v = inflater.inflate(R.layout.timetable_day, container, false);
TableLayout timeTable = (TableLayout) v.findViewById(R.id.timeTable);
updateTable(timeTable);
return v;
}
private void updateTable(TableLayout timeTable) {
UiDay day = week.getDay(weekDay);
if (day != null) {
List<UiLesson> lessons = day.getLessons();
if (lessons.size() > 0) {
createAndFormatTableRows(lessons, timeTable, layoutInflater);
} else {
String message = getString(R.string.message_no_lessons);
showInfoRow(timeTable, message);
}
} else {
String message = getString(R.string.message_no_data);
showInfoRow(timeTable, message);
}
}
private void showInfoRow(TableLayout timeTable, String message) {
View descriptionRow = (View) layoutInflater.inflate(R.layout.timetable_info_row, null);
TextView infoField = (TextView) descriptionRow.findViewById(R.id.infoRow);
infoField.setText(message);
timeTable.addView(descriptionRow);
}
public void updateDate(UiWeek week) {
this.week = week;
View view = getView();
if (view != null) {
TableLayout timeTable = (TableLayout) view.findViewById(R.id.timeTable);
// remove all existing table rows and add them again
timeTable.removeAllViews();
updateTable(timeTable);
} else {
Log.w("DayFragment", "Not possible to update data as the view is not available.");
}
}
private void createAndFormatTableRows(List<UiLesson> lessons, TableLayout timeTable, LayoutInflater layoutInflater) {
String lastLessonTimeslot = "";
boolean firstRow = true;
for (UiLesson lesson : lessons) {
View row = layoutInflater.inflate(R.layout.timetable_row, null);
timeTable.addView(row);
View horizontalLine = row.findViewById(R.id.horizontalLine);
if (firstRow) {
horizontalLine.setVisibility(View.GONE);
firstRow = false;
}
TextView timeUnitField = (TextView) row.findViewById(R.id.rowTimeunit);
TextView lessonField = (TextView) row.findViewById(R.id.rowLesson);
TextView lecturerFieldShort = (TextView) row.findViewById(R.id.rowLecturerShort);
TextView lecturerFieldLong = (TextView) row.findViewById(R.id.rowLecturerLong);
TextView roomField = (TextView) row.findViewById(R.id.rowRoom);
TextView descriptionField = (TextView) row.findViewById(R.id.rowDescription);
TextView typeField = (TextView) row.findViewById(R.id.rowType);
// fill values into row
String newTimeslot = lesson.getTimeSlot();
if (!lastLessonTimeslot.equals(newTimeslot)) {
timeUnitField.setText(newTimeslot);
} else {
timeUnitField.setText("");
horizontalLine.setVisibility(View.GONE);
}
lastLessonTimeslot = newTimeslot;
lessonField.setText(lesson.getName());
roomField.setText(lesson.getRoom());
if (lecturerFieldShort != null)
lecturerFieldShort.setText(lesson.getLecturerShort());
if (lecturerFieldLong != null)
lecturerFieldLong.setText(lesson.getLecturerLong());
typeField.setText(lesson.getType());
if (lesson.hasDescription()) {
descriptionField.setText(lesson.getDescription());
} else {
descriptionField.setVisibility(View.GONE);
}
}
}
public Weekday getWeekDay() {
return weekDay;
}
}