package dk.dr.radio.akt; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import com.android.volley.Request; import com.androidquery.AQuery; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.Collections; import dk.dr.radio.data.DRData; import dk.dr.radio.data.DRJson; import dk.dr.radio.data.Favoritter; import dk.dr.radio.data.Programserie; import dk.dr.radio.data.Udsendelse; import dk.dr.radio.diverse.App; import dk.dr.radio.diverse.Log; import dk.dr.radio.diverse.Sidevisning; import dk.dr.radio.net.volley.DrVolleyResonseListener; import dk.dr.radio.net.volley.DrVolleyStringRequest; import dk.dr.radio.v3.R; public class Favoritprogrammer_frag extends Basisfragment implements AdapterView.OnItemClickListener, Runnable { private ListView listView; private ArrayList<Object> liste = new ArrayList<Object>(); // Indeholder både udsendelser og -serier protected View rod; Favoritter favoritter = DRData.instans.favoritter; private static long sidstOpdateretAntalNyeUdsendelser; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rod = inflater.inflate(R.layout.senest_lyttede, container, false); AQuery aq = new AQuery(rod); listView = aq.id(R.id.listView).adapter(adapter).itemClicked(this).getListView(); listView.setEmptyView(aq.id(R.id.tom).typeface(App.skrift_gibson).text( // "Ingen favoritter\nGå ind på en programserie og tryk på hjertet for at gøre det til en favorit" Html.fromHtml(getString(R.string.Saml_dine_favoritter_her____)) ).getView() ); listView.setCacheColorHint(Color.WHITE); aq.id(R.id.overskrift).typeface(App.skrift_gibson_fed).text(getString(R.string.Dine_favoritter)).getTextView(); favoritter.observatører.add(this); run(); if (favoritter.getAntalNyeUdsendelser() < 0 || sidstOpdateretAntalNyeUdsendelser > System.currentTimeMillis() + 1000 * 60 * 10) { // Opdatering af nye antal udsendelser er ikke sket endnu - eller det er mere end end ti minutter siden. DRData.instans.favoritter.startOpdaterAntalNyeUdsendelser.run(); sidstOpdateretAntalNyeUdsendelser = System.currentTimeMillis(); } udvikling_checkDrSkrifter(rod, this + " rod"); return rod; } @Override public void onDestroyView() { favoritter.observatører.remove(this); super.onDestroyView(); } @Override public void run() { App.forgrundstråd.removeCallbacks(this); // Ingen gentagne kald liste.clear(); try { ArrayList<String> pss = new ArrayList<String>(favoritter.getProgramserieSlugSæt()); Collections.sort(pss); Log.d(this + " psss = " + pss); for (final String programserieSlug : pss) { Programserie programserie = DRData.instans.programserieFraSlug.get(programserieSlug); if (programserie != null) liste.add(programserie); else { if (DRData.instans.programserieSlugFindesIkke.contains(programserieSlug)) continue; Log.d("programserieSlug gav ingen værdi, henter for " + programserieSlug); final int offset = 0; String url = DRData.getProgramserieUrl(programserie, programserieSlug) + "&offset=" + offset; Request<?> req = new DrVolleyStringRequest(url, new DrVolleyResonseListener() { @Override public void fikSvar(String json, boolean fraCache, boolean uændret) throws Exception { Log.d("favoritter fikSvar(" + fraCache + " " + url); if (uændret) return; if (json != null && !"null".equals(json)) { JSONObject data = new JSONObject(json); Programserie programserie = DRJson.parsProgramserie(data, null); JSONArray prg = data.getJSONArray(DRJson.Programs.name()); ArrayList<Udsendelse> udsendelser = DRJson.parseUdsendelserForProgramserie(prg, null, DRData.instans); programserie.tilføjUdsendelser(offset, udsendelser); DRData.instans.programserieFraSlug.put(programserieSlug, programserie); } else { DRData.instans.programserieSlugFindesIkke.add(programserieSlug); Log.d("programserieSlugFindesIkke for " + programserieSlug); } App.forgrundstråd.postDelayed(Favoritprogrammer_frag.this, 250); // Vent 1/4 sekund på eventuelt andre svar } }); App.volleyRequestQueue.add(req); } } Log.d(this + " liste = " + liste); } catch (Exception e1) { Log.rapporterFejl(e1); } adapter.notifyDataSetChanged(); } private BaseAdapter adapter = new Basisadapter() { @Override public int getCount() { return liste.size(); } @Override public View getView(int position, View v, ViewGroup parent) { try { if (v == null) v = getLayoutInflater(null).inflate(R.layout.listeelem_2linjer, parent, false); AQuery aq = new AQuery(v); Object obj = liste.get(position); if (obj instanceof Programserie) { Programserie ps = (Programserie) obj; aq.id(R.id.linje1).text(ps.titel).typeface(App.skrift_gibson_fed).textColor(Color.BLACK); int n = favoritter.getAntalNyeUdsendelser(ps.slug); String txt = (n == 1 ? n + getString(R.string._ny_udsendelse) : n + getString(R.string._nye_udsendelser)); aq.id(R.id.linje2).text(txt).typeface(App.skrift_gibson); aq.id(R.id.stiplet_linje).visibility(position == 0 ? View.INVISIBLE : View.VISIBLE); } else { Udsendelse udsendelse = (Udsendelse) obj; aq.id(R.id.linje1).text(DRJson.datoformat.format(udsendelse.startTid)).typeface(App.skrift_gibson); aq.id(R.id.linje2).text(udsendelse.titel).typeface(App.skrift_gibson); aq.id(R.id.stiplet_linje).visibility(View.VISIBLE); } v.setBackgroundResource(0); udvikling_checkDrSkrifter(v, this.getClass() + " "); } catch (Exception e) { Log.rapporterFejl(e); } return v; } }; @Override public void onItemClick(AdapterView<?> listView, View v, int position, long id) { Object obj = liste.get(position); if (obj instanceof Programserie) { Programserie programserie = (Programserie) obj; Fragment f = new Programserie_frag(); f.setArguments(new Intent() .putExtra(DRJson.SeriesSlug.name(), programserie.slug) .getExtras()); getActivity().getSupportFragmentManager().beginTransaction() .replace(R.id.indhold_frag, f) .addToBackStack(null) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .commit(); Sidevisning.vist(Programserie_frag.class, programserie.slug); } else { Udsendelse udsendelse = (Udsendelse) obj; Fragment f = Fragmentfabrikering.udsendelse(udsendelse); getActivity().getSupportFragmentManager().beginTransaction() .replace(R.id.indhold_frag, f) .addToBackStack(null) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .commit(); Sidevisning.vist(Udsendelse_frag.class, udsendelse.slug); } } }