package dk.dr.radio.akt; import android.graphics.Rect; import android.os.Bundle; import android.view.LayoutInflater; import android.view.TouchDelegate; import android.view.View; import android.view.ViewGroup; import com.android.volley.Request; import com.androidquery.AQuery; import org.json.JSONObject; import dk.dr.radio.afspilning.Status; import dk.dr.radio.data.DRData; import dk.dr.radio.data.Kanal; import dk.dr.radio.diverse.App; import dk.dr.radio.diverse.Log; import dk.dr.radio.net.volley.DrVolleyResonseListener; import dk.dr.radio.net.volley.DrVolleyStringRequest; import dk.dr.radio.v3.R; public class Kanal_nyheder_frag extends Basisfragment implements View.OnClickListener, Runnable { private Kanal kanal; protected View rod; private boolean fragmentErSynligt; private AQuery aq; @Override public String toString() { return super.toString() + "/" + kanal; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //Log.d(this + " onCreateView startet efter " + (System.currentTimeMillis() - App.opstartstidspunkt) + " ms"); String kanalkode = getArguments().getString(P_kode); kanal = DRData.instans.grunddata.kanalFraKode.get(kanalkode); rod = inflater.inflate(R.layout.kanal_nyheder_frag, container, false); aq = new AQuery(rod); aq.id(R.id.hør_live).typeface(App.skrift_gibson).clicked(this); // Knappen er meget vigtig, og har derfor et udvidet område hvor det også er den man rammer // se http://developer.android.com/reference/android/view/TouchDelegate.html final int udvid = getResources().getDimensionPixelSize(R.dimen.hørknap_udvidet_klikområde); final View hør = aq.id(R.id.hør_live).getView(); hør.post(new Runnable() { @Override public void run() { Rect r = new Rect(); hør.getHitRect(r); r.top -= udvid; r.bottom += udvid; r.right += udvid; r.left -= udvid; //Log.d("hør_udvidet_klikområde=" + r); ((View) hør.getParent()).setTouchDelegate(new TouchDelegate(r, hør)); } }); aq.id(R.id.titel).typeface(App.skrift_gibson); udvikling_checkDrSkrifter(rod, this + " rod"); DRData.instans.afspiller.observatører.add(this); App.netværk.observatører.add(this); //Log.d(this + " onCreateView færdig efter " + (System.currentTimeMillis() - App.opstartstidspunkt) + " ms"); return rod; } @Override public void onDestroyView() { super.onDestroyView(); //TODO: rod = null; aq=null; DRData.instans.afspiller.observatører.remove(this); App.netværk.observatører.remove(this); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { //Log.d(kanal + " QQQ setUserVisibleHint " + isVisibleToUser + " " + this); fragmentErSynligt = isVisibleToUser; if (fragmentErSynligt) { App.forgrundstråd.post(this); // Opdatér lidt senere, efter onCreateView helt sikkert har kørt App.forgrundstråd.post(new Runnable() { @Override public void run() { if (DRData.instans.afspiller.getAfspillerstatus() == Status.STOPPET && DRData.instans.afspiller.getLydkilde() != kanal) { DRData.instans.afspiller.setLydkilde(kanal); } } }); } else { App.forgrundstråd.removeCallbacks(this); } super.setUserVisibleHint(isVisibleToUser); } @Override public void run() { Log.d(this + " run()"); App.forgrundstråd.removeCallbacks(this); if (!kanal.harStreams()) { // ikke && App.erOnline(), det kan være vi har en cachet udgave Request<?> req = new DrVolleyStringRequest(kanal.getStreamsUrl(), new DrVolleyResonseListener() { @Override public void fikSvar(String json, boolean fraCache, boolean uændret) throws Exception { if (uændret) return; // ingen grund til at parse det igen JSONObject o = new JSONObject(json); kanal.setStreams(o); Log.d("hentStreams Kanal_nyheder_frag fraCache=" + fraCache + " => " + kanal); run(); // Opdatér igen } }) { public Priority getPriority() { return fragmentErSynligt ? Priority.HIGH : Priority.NORMAL; } }; App.volleyRequestQueue.add(req); } boolean spillerDenneKanal = DRData.instans.afspiller.getAfspillerstatus() != Status.STOPPET && DRData.instans.afspiller.getLydkilde() == kanal; boolean online = App.netværk.erOnline(); aq.id(R.id.hør_live).enabled(online && kanal.harStreams() && !spillerDenneKanal) .text(!online ? "Internetforbindelse mangler" : (spillerDenneKanal ? " SPILLER " : " HØR ") + kanal.navn.toUpperCase()); aq.getView().setContentDescription(!online ? "Internetforbindelse mangler" : (spillerDenneKanal ? "Spiller " : "Hør ") + kanal.navn.toUpperCase()); } @Override public void onClick(View v) { if (!kanal.harStreams()) { Log.rapporterOgvisFejl(getActivity(), new IllegalStateException("kanal.streams er null")); } else { // hør_udvidet_klikområde eller hør Kanal_frag.hør(kanal, getActivity()); Log.registrérTestet("Afspilning af seneste radioavis", "ja"); } } }