package ar.rulosoft.mimanganu; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.support.v7.widget.SearchView.OnQueryTextListener; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.ProgressBar; import java.util.List; import ar.rulosoft.mimanganu.adapters.MangaAdapter; import ar.rulosoft.mimanganu.componentes.Manga; import ar.rulosoft.mimanganu.servers.ServerBase; import ar.rulosoft.mimanganu.utils.Util; public class ServerListFragment extends Fragment { private int id = -1; private ServerBase serverBase; private ListView list; private ProgressBar loading; private MangaAdapter adapter; private LoadMangasTask loadMangasTask = new LoadMangasTask(); @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true); setRetainInstance(true); return inflater.inflate(R.layout.fragment_server_plain_list, container, false); } @Override public void onActivityCreated(Bundle savedState) { super.onActivityCreated(savedState); super.onStart(); if (id == -1) id = getArguments().getInt(MainFragment.SERVER_ID); serverBase = ServerBase.getServer(id, getContext()); list = (ListView) getView().findViewById(R.id.lista_de_mangas); loading = (ProgressBar) getView().findViewById(R.id.loading); if (adapter == null) { loadMangasTask = (LoadMangasTask) new LoadMangasTask().execute(); } else { list.setAdapter(adapter); loading.setVisibility(View.INVISIBLE); } list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Manga m = (Manga) list.getAdapter().getItem(position); Bundle bundle = new Bundle(); bundle.putInt(MainFragment.SERVER_ID, serverBase.getServerID()); bundle.putString(DetailsFragment.TITLE, m.getTitle()); bundle.putString(DetailsFragment.PATH, m.getPath()); DetailsFragment detailsFragment = new DetailsFragment(); detailsFragment.setArguments(bundle); ((MainActivity) getActivity()).replaceFragment(detailsFragment, "DetailsFragment"); } }); } @Override public void onResume() { super.onResume(); ((MainActivity) getActivity()).setTitle(getResources().getString(R.string.listaen) + " " + serverBase.getServerName()); ((MainActivity)getActivity()).enableHomeButton(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: getActivity().onBackPressed(); return true; } return false; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.manga_server, menu); MenuItem search; search = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) MenuItemCompat.getActionView(search); searchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String s) { return false; } @Override public boolean onQueryTextChange(String s) { if (adapter != null) adapter.getFilter().filter(s); return false; } }); } @Override public void onDetach() { super.onDetach(); loadMangasTask.cancel(true); } private class LoadMangasTask extends AsyncTask<Void, Void, List<Manga>> { String error = ""; @Override protected void onPreExecute() { loading.setVisibility(ProgressBar.VISIBLE); super.onPreExecute(); } @Override protected List<Manga> doInBackground(Void... params) { List<Manga> mangas = null; try { mangas = serverBase.getMangas(); } catch (Exception e) { error = Log.getStackTraceString(e); } return mangas; } @Override protected void onPostExecute(List<Manga> result) { if (list != null && result != null && !result.isEmpty() && isAdded()) { adapter = new MangaAdapter(getContext(), result, MainActivity.darkTheme); list.setAdapter(adapter); } if (!error.isEmpty() && isAdded()) { Util.getInstance().toast(getContext(), error); } if (loading != null) loading.setVisibility(ProgressBar.INVISIBLE); } } }