package de.htwdd.fragments; import android.app.Dialog; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.Html; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; import java.util.ArrayList; import de.htwdd.LibrarySearchAdapter; import de.htwdd.R; import de.htwdd.classes.Library; import de.htwdd.types.Medium; public class LibrarySearchFragment extends Fragment { private LibrarySearchAdapter mAdapter; private Context context; private ArrayList<Medium> mediums = new ArrayList<Medium>(); private Dialog dialog; private int ResultPage; private boolean loading = false; public LibrarySearchFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_library_search, container, false); context = inflater.getContext(); // Baue Dialog für die Anzeigen von Medien-Datails zusammen dialog = new Dialog(context); dialog.setContentView(R.layout.fragment_library_item_detail); dialog.setTitle("Medien Details"); // Schließen Button Button close = (Button) dialog.findViewById(R.id.MediumInfoClose); close.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.cancel(); } }); ListView listView = (ListView)view.findViewById(R.id.BiBSeachResults); final EditText editText = (EditText)view.findViewById(R.id.BiBSeachInput); final ProgressBar progressBar = (ProgressBar)view.findViewById(R.id.progressBar); final TextView textView = (TextView)view.findViewById(R.id.BiBSeachInfo); // Add OnclickListener Button button = (Button) view.findViewById(R.id.BiBSeachSubmit); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Hide Keyboard InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); // Lösche alte Ergbnisse mediums.clear(); mAdapter.notifyDataSetChanged(); textView.setVisibility(View.GONE); // Zeige Progressbar an progressBar.setVisibility(View.VISIBLE); // Setze Startpage zum Suchen auf 1 ResultPage = 1; // Starte Suche new SearchWorker().execute(editText.getText().toString()); } }); // Füge OnItemClickListener zur ListView hinzu listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Medium medium = (Medium) mAdapter.getItem(i); // Blende Progressbar ein final ProgressBar progressBar = (ProgressBar)dialog.findViewById(R.id.progressBar); progressBar.setVisibility(View.VISIBLE); // Blende Inhalt aus final TableLayout tableLayout = (TableLayout)dialog.findViewById(R.id.library_details_table); tableLayout.setVisibility(View.GONE); // Dialog anzeigen dialog.show(); // Starte das Laden der Medien-Details GetDetailsWorker worker = new GetDetailsWorker(); worker.execute(medium.ID); } }); listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView absListView, int i, int i2, int i3) { if (((i+i2) == i3) && (mediums.size() != 0) && !loading) { // Bereits einen Task gestartet, für weitere sperren loading = true; // Seitenzahl erhöhen ResultPage++; // Starte Suche new SearchWorker().execute(editText.getText().toString()); } } }); // Set Adapter mAdapter = new LibrarySearchAdapter(context, mediums); listView.setAdapter(mAdapter); return view; } private class GetDetailsWorker extends AsyncTask<String, Void, Medium> { @Override protected Medium doInBackground(String... strings) { return Library.getMedium(strings[0]); } @Override protected void onPostExecute(Medium medium) { if (!isAdded()) return; // Blende Progressbar aus final ProgressBar progressBar = (ProgressBar)dialog.findViewById(R.id.progressBar); progressBar.setVisibility(View.GONE); // Internetverbindung verloren final TextView textView = (TextView)dialog.findViewById(R.id.library_info); if (medium == null) { textView.setVisibility(View.VISIBLE); return; } else textView.setVisibility(View.GONE); // Blende Inhalt ein final TableLayout tableLayout = (TableLayout)dialog.findViewById(R.id.library_details_table); tableLayout.setVisibility(View.VISIBLE); // Felder anzeigen final TextView title = (TextView)dialog.findViewById(R.id.library_title); title.setText(medium.Title); final TextView mediumText = (TextView)dialog.findViewById(R.id.library_medium); mediumText.setText(medium.Medium); final TextView linkText = (TextView)dialog.findViewById(R.id.library_katalog); linkText.setText(Html.fromHtml("<a href=\""+medium.Link+"\">Katalog</a>")); linkText.setMovementMethod(LinkMovementMethod.getInstance()); final TableRow signaturTextRow = (TableRow) dialog.findViewById(R.id.library_location_row); final TableRow authorRow = (TableRow)dialog.findViewById(R.id.library_author_row); final TableRow availabilityRow = (TableRow)dialog.findViewById(R.id.library_availability_row); // Author vorhanden? -> anzeigen oder ausblenden if (medium.Author != null) { final TextView author = (TextView)dialog.findViewById(R.id.library_author); author.setText(medium.Author); authorRow.setVisibility(View.VISIBLE); } else authorRow.setVisibility(View.GONE); // Location vorhanden? -> anzeigen oder ausblenden if (medium.Signatur != null) { final TextView signaturText = (TextView) dialog.findViewById(R.id.library_location); signaturText.setText(medium.Signatur); signaturTextRow.setVisibility(View.VISIBLE); } else signaturTextRow.setVisibility(View.GONE); // Verfügbarkeit vorhanden? -> anzeigen oder ausblenden if (!medium.Availability.isEmpty()) { final TextView availabilityText = (TextView) dialog.findViewById(R.id.library_availability); // Verfügbarkeit farbig darstellen if (medium.Availability.equals("Verfügbar")) availabilityText.setTextColor(getResources().getColor(R.color.green)); else if (medium.Availability.equals("Ausgeliehen")) availabilityText.setTextColor(getResources().getColor(R.color.red)); else if (medium.Availability.equals("Bestellt")) availabilityText.setTextColor(getResources().getColor(R.color.faded_orange)); else availabilityText.setTextColor(getResources().getColor(R.color.black)); availabilityText.setText(medium.Availability); availabilityRow.setVisibility(View.VISIBLE); } else availabilityRow.setVisibility(View.GONE); } } private class SearchWorker extends AsyncTask<String,Void,ArrayList<Medium>> { @Override protected ArrayList<Medium> doInBackground(String... SearchTerm) { Library library = new Library(); return library.search(SearchTerm[0], ResultPage); } @Override protected void onPostExecute(ArrayList<Medium> mediums2) { if (!isAdded()) return; loading = false; // Info-Feld anzeigen? final TextView textView = (TextView)getActivity().findViewById(R.id.BiBSeachInfo); if (mediums2 == null) { textView.setText(getActivity().getText(R.string.app_no_internet)); textView.setVisibility(View.VISIBLE); mediums2 = new ArrayList<Medium>(); } else if (mediums2.size() == 0) { if (ResultPage == 1) textView.setText("Keine Ergebnisse gefunden"); else textView.setText("Keine weiteren Ergebnisse gefunden"); textView.setVisibility(View.VISIBLE); // Weiteres Nachladen von Medien sperren loading = true; } // alte Items entfernen (nur bei neuer Suche) if (ResultPage == 1) mediums.clear(); // neue Items hinzufügen mediums.addAll(mediums2); // Blende Progressbar aus final ProgressBar progressBar = (ProgressBar)getActivity().findViewById(R.id.progressBar); progressBar.setVisibility(View.GONE); mAdapter.notifyDataSetChanged(); } } }