package dk.dr.radio.akt; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.util.Linkify; import android.widget.ProgressBar; import android.widget.TextView; import com.android.volley.Request; import com.android.volley.VolleyError; import org.json.JSONObject; import dk.dr.radio.data.DRData; import dk.dr.radio.data.DRJson; import dk.dr.radio.data.Kanal; 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; public class FangBrowseIntent_akt extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Tjek om vi er blevet startet med et Intent med en URL, f.eks. som // new Intent(Intent.ACTION_VIEW, Uri.parse("http://android.lundogbendsen.dk/hej.txt")); Intent i = getIntent(); String urlFraIntent = i.getDataString(); if (urlFraIntent == null) { TextView tv = new TextView(this); tv.setText("Dette eksempel viser hvordan man fanger et browserintent. "); Linkify.addLinks(tv, Linkify.WEB_URLS); setContentView(tv); } else try { // Ok, der var en URL med i intentet Log.d(" viser " + urlFraIntent); Sidevisning.vist(FangBrowseIntent_akt.class, urlFraIntent); Log.d("Intent var " + i); ProgressBar progressBar = new ProgressBar(this); setContentView(progressBar); // undgå at starte ny aktivitet ved skærmvending if (savedInstanceState != null) return; String UDSENDELSER_præfix = "/radio/ondemand/"; int pos = urlFraIntent.indexOf(UDSENDELSER_præfix); if (pos > 0) { hentOgVisUdsendelse(urlFraIntent.substring(pos + UDSENDELSER_præfix.length())); } else if (urlFraIntent.contains("/radio/live")) { String[] bidder = urlFraIntent.split("/"); final String kanalSlug = bidder[bidder.length - 1]; Kanal kanal = DRData.instans.grunddata.kanalFraSlug.get(kanalSlug); if (kanal != null) { DRData.instans.afspiller.setLydkilde(kanal); DRData.instans.afspiller.startAfspilning(); } Intent intent = new Intent(this, Hovedaktivitet.class) .putExtra(Hovedaktivitet.VIS_FRAGMENT_KLASSE, Kanaler_frag.class.getName()) .putExtra(Hovedaktivitet.SPØRG_OM_STOP, false); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); Sidevisning.vist(Kanaler_frag.class); finish(); } else { throw new IllegalStateException("ingen match??!?"); } } catch (Exception e) { Log.rapporterFejl(e, urlFraIntent); finish(); } } private void hentOgVisUdsendelse(String urlFraIntent) { // http://www.dr.dk/radio/ondemand/p4syd/p4-hjemad-481/#!/02:45:15 // http://www.dr.dk/radio/ondemand/p4syd/p4-hjemad-481 // p4syd/p4-hjemad-481/#!/02:45:15 // p4syd/p4-hjemad-481 String[] bidder = urlFraIntent.split("/"); final String kanalSlug = bidder[0]; final String udsendelseSlug = bidder[1]; int tidsangivelse0 = 0; if (bidder.length > 3) try { // 02:45:15 String[] b = bidder[3].split(":"); tidsangivelse0 = Integer.parseInt(b[0]) * 60000 + Integer.parseInt(b[1]) * 1000 + Integer.parseInt(b[2]) * 10; Log.d("tidsangivelse " + tidsangivelse0 + " fra " + urlFraIntent); } catch (Exception e) { Log.rapporterFejl(e, urlFraIntent + " parsning af " + bidder[3]); } final int tidsangivelse = tidsangivelse0; final Udsendelse udsendelse = DRData.instans.udsendelseFraSlug.get(udsendelseSlug); if (udsendelse != null) { visUdsendelseFrag(kanalSlug, udsendelse, tidsangivelse); } else { Request<?> req = new DrVolleyStringRequest(DRData.getUdsendelseStreamsUrlFraSlug(udsendelseSlug), new DrVolleyResonseListener() { @Override public void fikSvar(String json, boolean fraCache, boolean uændret) throws Exception { if (uændret) return; Log.d("hentStreams fikSvar(" + fraCache + " " + url); if (json != null && !"null".equals(json)) { JSONObject o = new JSONObject(json); Udsendelse udsendelse2 = DRJson.parseUdsendelse(null, DRData.instans, o); udsendelse2.setStreams(o); udsendelse2.indslag = DRJson.parsIndslag(o.optJSONArray(DRJson.Chapters.name())); udsendelse2.produktionsnummer = o.optString(DRJson.ProductionNumber.name()); udsendelse2.shareLink = o.optString(DRJson.ShareLink.name()); visUdsendelseFrag(kanalSlug, udsendelse2, tidsangivelse); } luk(); } @Override protected void fikFejl(VolleyError error) { super.fikFejl(error); luk(); } }).setTag(this); App.volleyRequestQueue.add(req); } } private void visUdsendelseFrag(String kanalSlug, Udsendelse udsendelse, int tidsangivelse) { DRData.instans.senestLyttede.registrérLytning(udsendelse); DRData.instans.senestLyttede.sætStartposition(udsendelse, tidsangivelse); DRData.instans.afspiller.setLydkilde(udsendelse); DRData.instans.afspiller.startAfspilning(); Intent intent = new Intent(this, Hovedaktivitet.class) .putExtra(Kanal_frag.P_kode, kanalSlug) .putExtra(DRJson.Slug.name(), udsendelse.slug) .putExtra(Hovedaktivitet.VIS_FRAGMENT_KLASSE, Udsendelse_frag.class.getName()) .putExtra(Hovedaktivitet.SPØRG_OM_STOP, false); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); Sidevisning.vist(Udsendelse_frag.class, udsendelse.slug); luk(); } boolean lukket = false; private void luk() { if (!lukket) finish(); lukket = true; } }