package de.htwdd.fragments;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import de.htwdd.R;
import de.htwdd.RoomTimeTableAdapter;
import de.htwdd.RoomTimetableDetailsActivity;
import de.htwdd.classes.HTTPDownloader;
import de.htwdd.classes.Timetable;
import de.htwdd.database.RoomTimetableDAO;
import de.htwdd.types.RoomTimetable;
public class RoomTimetableFragment extends Fragment
{
private View view;
private ArrayList<RoomTimetable> roomTimetables;
private RoomTimeTableAdapter adapter;
private RoomTimetableDAO dao;
public RoomTimetableFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_room_timetable, container, false);
// ListView holen
ListView listView = (ListView) view.findViewById(R.id.room_timetable_listview);
// Footer View setzen
View listView_footer = inflater.inflate(R.layout.fragment_room_timetable_footer, listView, false);
listView.addFooterView(listView_footer, null, false);
// Erstelle Liste mit Räumen für Adapter
roomTimetables = new ArrayList<RoomTimetable>();
adapter = new RoomTimeTableAdapter(getActivity(), roomTimetables);
dao = new RoomTimetableDAO(getActivity());
// Lade Daten
loadData();
// Wurde nach einen neuem Raum gesucht?
if (getArguments() != null && getArguments().getString("add_room") != null) {
String getRoom = getArguments().getString("add_room");
LoadRoom loadRoom = new LoadRoom();
loadRoom.execute(getRoom);
}
// ListView Adapter setzen
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Bundle bundle = new Bundle();
bundle.putString("room", roomTimetables.get(i).RoomName);
Intent intent = new Intent(getActivity(), RoomTimetableDetailsActivity.class);
intent.putExtras(bundle);
startActivityForResult(intent, 1);
}
});
// Löschen, aktualisieren über Context-Menu
registerForContextMenu(listView);
return view;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.context_menu_room_timetable, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
String room = roomTimetables.get(info.position).RoomName;
switch (item.getItemId())
{
case R.id.room_timetable_delete:
// Lösche Raum aus DB
RoomTimetableDAO dao = new RoomTimetableDAO(getActivity());
dao.removeRoom(room);
loadData();
return true;
case R.id.room_timetable_update:
LoadRoom loadRoom = new LoadRoom();
loadRoom.execute(room);
return true;
default:
return super.onContextItemSelected(item);
}
}
private void loadData()
{
// Kalender zum bestimmen welcher Plan angezeigt wird
Calendar calendar = GregorianCalendar.getInstance();
// Wenn Sonntag ist, auf Plan für Montag springen
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
calendar.add(Calendar.DAY_OF_YEAR, 1);
int day = calendar.get(Calendar.DAY_OF_WEEK);
int week = calendar.get(Calendar.WEEK_OF_YEAR);
// Lade Stundepläne aus DB
roomTimetables.clear();
roomTimetables.addAll(dao.getOverview(day - 1, week));
// Hinweis ein / ausblenden
TextView textView = (TextView) view.findViewById(R.id.room_timetable_note);
ListView listView = (ListView) view.findViewById(R.id.room_timetable_listview);
if (roomTimetables.size() == 0) {
textView.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
}
else {
textView.setVisibility(View.GONE);
listView.setVisibility(View.VISIBLE);
}
adapter.notifyDataSetChanged();
}
private class LoadRoom extends AsyncTask<String, Void, Timetable>
{
private Context context = getActivity();
private ProgressBar progressBar;
private ListView listView;
private TextView textView;
private int responseCode;
@Override
protected void onPreExecute()
{
// Überprüfe Internetverbindung
if (!HTTPDownloader.CheckInternet(context))
{
Toast.makeText(context, R.string.app_no_internet, Toast.LENGTH_LONG).show();
this.cancel(true);
}
// ListView ausblenden
listView = (ListView) view.findViewById(R.id.room_timetable_listview);
listView.setVisibility(View.GONE);
// Hinweise ausblenden
textView = (TextView) view.findViewById(R.id.room_timetable_note);
textView.setVisibility(View.GONE);
// Progressbar anzeigen
progressBar = (ProgressBar) view.findViewById(R.id.room_timetable_progressbar);
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected Timetable doInBackground(String... strings)
{
// Lade Stundenplan für Raum
Timetable timetable = new Timetable(context);
responseCode = timetable.getTimetableRoom(strings[0]);
// Alles OK? - Dann Stundenplan in DB speichern
if (responseCode == 200 && timetable.lessonArrayList.size() != 0)
{
RoomTimetable roomTimetable = new RoomTimetable();
roomTimetable.RoomName = strings[0].toUpperCase();
roomTimetable.Timetable = timetable.lessonArrayList;
// Lösche ggf alten Plan
dao.removeRoom(roomTimetable.RoomName);
// Neuen Plan speichern
dao.add(roomTimetable);
}
return timetable;
}
@Override
protected void onPostExecute(Timetable timetable)
{
if (!isAdded())
return;
// Auswertung anzeigen
if (responseCode != 200)
Toast.makeText(context, R.string.room_timetable_updade_error, Toast.LENGTH_SHORT).show();
else if (timetable.lessonArrayList.size() == 0)
Toast.makeText(context, R.string.room_timetable_updade_notFound, Toast.LENGTH_SHORT).show();
else{
Toast.makeText(context, R.string.room_timetable_updade_success, Toast.LENGTH_SHORT).show();
}
// Daten neuladen
loadData();
// Progressbar ausblenden
progressBar.setVisibility(View.GONE);
// ListView anzeigen?
if (roomTimetables.size() != 0)
listView.setVisibility(View.VISIBLE);
else textView.setVisibility(View.VISIBLE);
}
}
}