package de.htwdd.fragments;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ExpandableListView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import de.htwdd.NotenListAdapter;
import de.htwdd.R;
import de.htwdd.WizardWelcome;
import de.htwdd.classes.Noten;
import de.htwdd.types.Grade;
public class NotenFragment extends Fragment
{
private int mode = 0;
private NotenListAdapter mAdapter;
private View view;
private int countNoten;
List<String> listDataHeader = new ArrayList<String>();
HashMap<String, List<Grade>> listDataChild = new HashMap<String, List<Grade>>();
public NotenFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
if (getArguments() != null)
mode = getArguments().getInt("mode");
view = inflater.inflate(R.layout.fragment_noten, container, false);
// Get the ListView
ExpandableListView expandableListView = (ExpandableListView) view.findViewById(R.id.expandableListView);
mAdapter = new NotenListAdapter(getActivity(), listDataHeader, listDataChild);
// setting list adapter
expandableListView.setAdapter(mAdapter);
// Hole lokale Noten
Noten noten = new Noten(getActivity());
noten.getNotenLocal();
countNoten = noten.noten.length;
// Hinweis falls keine Noten vorhanden
if (countNoten == 0)
{
LinearLayout layoutHinweis = (LinearLayout) view.findViewById(R.id.NotenHinweis);
TextView message = (TextView) view.findViewById(R.id.NotenHinweisText);
layoutHinweis.setVisibility(View.VISIBLE);
message.setText("Keine Noten vorhanden!");
}
// Kontrolle ob Parameter (SNummer, RZLogin) überhaupt vorhanden
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
if ((sharedPreferences.getString("bib", "").length() < 5) || (sharedPreferences.getString("RZLogin", "").length()) < 3)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("Für die Notenanzeige müssen sNummer und RZ-Login angegeben werden\n\nSoll der Konfigurations-Assistent gestartet werden?")
.setTitle(R.string.noData)
.setIcon(R.drawable.ic_launcher)
.setPositiveButton(R.string.startAssistent, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
Intent nextScreen = new Intent(getActivity(), WizardWelcome.class);
startActivity(nextScreen);
getActivity().finish();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
LinearLayout hinweis = (LinearLayout) view.findViewById(R.id.NotenHinweis);
hinweis.setVisibility(View.VISIBLE);
TextView message = (TextView) view.findViewById(R.id.NotenHinweisText);
message.setText("Die Noten konnten auf Grund von fehlenden Daten nicht aktualisiert werden.");
}
}).show();
}
// Button aktualisieren wurde gedrückt
else if (mode == 1)
{
LinearLayout hinweis = (LinearLayout) view.findViewById(R.id.NotenHinweis);
hinweis.setVisibility(View.VISIBLE);
ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.NotenProgressBar);
progressBar.setVisibility(View.VISIBLE);
TextView message = (TextView) view.findViewById(R.id.NotenHinweisText);
message.setText("Lade Noten...");
WorkerGetNoten worker = new WorkerGetNoten();
worker.execute();
}
else
sortData(noten);
return view;
}
private void sortData(Noten noten)
{
listDataHeader.clear();
listDataChild.clear();
for (Grade note : noten.noten)
{
String semester = Noten.getSemester(note.Semester);
if (!listDataHeader.contains(semester))
{
listDataHeader.add(semester);
listDataChild.put(semester, new ArrayList<Grade>());
}
listDataChild.get(semester).add(note);
}
}
private class WorkerGetNoten extends AsyncTask<Void, Noten, Noten>
{
int responseCode;
@Override
protected Noten doInBackground(Void... voids)
{
Noten noten = new Noten(getActivity());
responseCode = noten.getNotenHIS();
if (responseCode==200)
noten.saveNotenLocal();
return noten;
}
@Override
protected void onPostExecute(Noten noten)
{
// check if the fragment is currently added to its activity
// otherwise getActivity will throw an exception
if(isAdded())
{
TextView message;
// Blende ProgressBar aus
LinearLayout hinweis = (LinearLayout) getActivity().findViewById(R.id.NotenHinweis);
hinweis.setVisibility(View.GONE);
ProgressBar progressBar = (ProgressBar) getActivity().findViewById(R.id.NotenProgressBar);
progressBar.setVisibility(View.GONE);
sortData(noten);
mAdapter.notifyDataSetChanged();
// Hinweis falls keine Noten vorhanden
if (noten.noten.length == 0)
{
hinweis = (LinearLayout) getActivity().findViewById(R.id.NotenHinweis);
hinweis.setVisibility(View.VISIBLE);
message = (TextView) getActivity().findViewById(R.id.NotenHinweisText);
message.setText("Keine Noten vorhanden!");
}
// Fehler ausgeben
switch (responseCode)
{
case 999:
hinweis = (LinearLayout) getActivity().findViewById(R.id.NotenHinweis);
hinweis.setVisibility(View.VISIBLE);
message = (TextView) getActivity().findViewById(R.id.NotenHinweisText);
message.setText(R.string.pars_error);
break;
case 900:
hinweis = (LinearLayout) getActivity().findViewById(R.id.NotenHinweis);
hinweis.setVisibility(View.VISIBLE);
message = (TextView) getActivity().findViewById(R.id.NotenHinweisText);
message.setText(R.string.app_no_internet);
break;
case 401:
hinweis = (LinearLayout) getActivity().findViewById(R.id.NotenHinweis);
hinweis.setVisibility(View.VISIBLE);
message = (TextView) getActivity().findViewById(R.id.NotenHinweisText);
message.setText("Fehler bei der Authentifikation!\n\nBitte überprüfe dein sNummer und RZ-Login in den Einstellungen.");
break;
case 200:
// Hinweis ob neue Noten vorhanden
if (countNoten == (countNoten = noten.noten.length))
Toast.makeText(getActivity(),"Keine neuen Noten",Toast.LENGTH_SHORT).show();
else
Toast.makeText(getActivity(),"Neue Noten heruntergeladen",Toast.LENGTH_SHORT).show();
break;
default:
hinweis = (LinearLayout) getActivity().findViewById(R.id.NotenHinweis);
hinweis.setVisibility(View.VISIBLE);
message = (TextView) getActivity().findViewById(R.id.NotenHinweisText);
message.setText("Fehler beim herunterladen der Noten!");
break;
}
}
}
}
}