package dk.dr.radio.akt; import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.DownloadManager; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.os.Build; 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 android.widget.ProgressBar; import com.androidquery.AQuery; 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.HentedeUdsendelser; import dk.dr.radio.data.HentetStatus; 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.v3.R; public class Hentede_udsendelser_frag extends Basisfragment implements AdapterView.OnItemClickListener, Runnable, View.OnClickListener { private ListView listView; private ArrayList<Udsendelse> liste = new ArrayList<Udsendelse>(); protected View rod; HentedeUdsendelser hentedeUdsendelser = DRData.instans.hentedeUdsendelser; private AQuery aq; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rod = inflater.inflate(R.layout.hentede_udsendelser_frag, container, false); aq = new AQuery(rod); listView = aq.id(R.id.listView).adapter(adapter).itemClicked(this).getListView(); View emptyView = aq.id(R.id.tom).typeface(App.skrift_gibson) .text(Html.fromHtml(getString(R.string.Du_har_ingen_downloads___))) .getView(); listView.setEmptyView(emptyView); listView.setCacheColorHint(Color.WHITE); aq.id(R.id.overskrift).typeface(App.skrift_gibson_fed).text(R.string.Downloadede_udsendelser).getTextView(); aq.id(R.id.supplerende_info).typeface(App.skrift_gibson).clicked(this); hentedeUdsendelser.observatører.add(this); run(); udvikling_checkDrSkrifter(rod, this + " rod"); return rod; } @Override public void onResume() { super.onResume(); //File dir = DRData.instans.hentedeUdsendelser.findPlaceringAfHentedeFilerFraPrefs(); //String tekst = App.res.getString(R.string.Gem_udsendelser_på)+" "+dir+"\n"; String tekst = App.res.getString( App.prefs.getBoolean("hentKunOverWifi", false) ? R.string.Udsendelser_hentes_kun_over_wifi_fremover___ : R.string.Udsendelser_hentes_både_over_telefonnet_3g_4g_og_wifi_ ); //aq.id(R.id.supplerende_info).text(tekst); } @Override public void onDestroyView() { hentedeUdsendelser.observatører.remove(this); super.onDestroyView(); } @Override public void run() { liste.clear(); liste.addAll(hentedeUdsendelser.getUdsendelser()); aq.id(R.id.supplerende_info).visibility(liste.size()>0?View.VISIBLE:View.GONE); Collections.reverse(liste); adapter.notifyDataSetChanged(); } /* private static View.OnTouchListener farvKnapNårDenErTrykketNed = new View.OnTouchListener() { public boolean onTouch(View view, MotionEvent me) { ImageView ib = (ImageView) view; if (me.getAction() == MotionEvent.ACTION_DOWN) { ib.setColorFilter(App.color.blå, PorterDuff.Mode.MULTIPLY); } else if (me.getAction() == MotionEvent.ACTION_MOVE) { } else { ib.setColorFilter(null); } return false; } }; */ private BaseAdapter adapter = new Basisadapter() { @Override public int getCount() { return liste.size(); } @Override public View getView(int position, View v, ViewGroup parent) { Udsendelse udsendelse = liste.get(position); AQuery aq; if (v == null) { v = getLayoutInflater(null).inflate(R.layout.hentede_udsendelser_listeelem_2linjer, parent, false); v.setBackgroundResource(0); aq = new AQuery(v); aq.id(R.id.startStopKnap).clicked(Hentede_udsendelser_frag.this); aq.id(R.id.slet).clicked(Hentede_udsendelser_frag.this); aq.id(R.id.hør).clicked(Hentede_udsendelser_frag.this); // .getView().setOnTouchListener(farvKnapNårDenErTrykketNed); aq.id(R.id.linje1).typeface(App.skrift_gibson_fed); aq.id(R.id.linje2).typeface(App.skrift_gibson); } else { aq = new AQuery(v); } // Skjul stiplet linje over øverste listeelement aq.id(R.id.stiplet_linje).visibility(position == 0 ? View.INVISIBLE : View.VISIBLE); aq.id(R.id.startStopKnap).tag(udsendelse); // sæt udsendelsen ind som tag, så vi kan se dem i onClick() aq.id(R.id.slet).tag(udsendelse); aq.id(R.id.hør).tag(udsendelse); HentetStatus hs = hentedeUdsendelser.getHentetStatus(udsendelse); if (hs == null) { aq.id(R.id.startStopKnap).visible().image(R.drawable.dri_radio_spil_graa40); aq.id(R.id.progressBar).gone(); aq.id(R.id.linje1).text(udsendelse.titel).textColor(App.color.grå40); aq.id(R.id.linje2).text(DRJson.datoformat.format(udsendelse.startTid) + " - Ikke hentet"); return v; } aq.id(R.id.linje1).text(udsendelse.titel) .textColor(hs.status == DownloadManager.STATUS_SUCCESSFUL ? Color.BLACK : App.color.grå60); aq.id(R.id.linje2).text(DRJson.datoformat.format(udsendelse.startTid).toUpperCase() + " - " + hs.statustekst.toUpperCase()); if (hs.status == DownloadManager.STATUS_SUCCESSFUL) { aq.id(R.id.progressBar).gone(); aq.id(R.id.startStopKnap).gone(); } else if (hs.status == DownloadManager.STATUS_FAILED) { aq.id(R.id.progressBar).gone(); aq.id(R.id.startStopKnap).visible().image(R.drawable.dri_radio_stop_graa40); } else { // Genopfrisk hele listen om 1 sekund App.forgrundstråd.removeCallbacks(Hentede_udsendelser_frag.this); App.forgrundstråd.postDelayed(Hentede_udsendelser_frag.this, 1000); ProgressBar progressBar = aq.id(R.id.progressBar).visible().getProgressBar(); progressBar.setMax(hs.iAlt); progressBar.setProgress(hs.hentet); aq.id(R.id.startStopKnap).visible().image(R.drawable.dri_radio_stop_graa40); } udvikling_checkDrSkrifter(v, this.getClass() + " "); return v; } }; @Override public void onItemClick(AdapterView<?> listView, View v, int position, long id) { Udsendelse udsendelse = liste.get(position); visUdsendelse_frag(udsendelse); } private void visUdsendelse_frag(Udsendelse udsendelse) { if (udsendelse == null) return; // Tjek om udsendelsen er i RAM, og put den ind hvis den ikke er if (!DRData.instans.udsendelseFraSlug.containsKey(udsendelse.slug)) { DRData.instans.udsendelseFraSlug.put(udsendelse.slug, udsendelse); } Fragment f = Fragmentfabrikering.udsendelse(udsendelse); getActivity().getSupportFragmentManager().beginTransaction() .replace(R.id.indhold_frag, f) .addToBackStack(null) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .commitAllowingStateLoss(); // Fix for https://mint.splunk.com/dashboard/project/cd78aa05/errors/4316188119 Sidevisning.vist(Udsendelse_frag.class, udsendelse.slug); } @Override public void onClick(View v) { if (v.getId()==R.id.supplerende_info) { startActivity(new Intent(getActivity(), Indstillinger_akt.class)); return; } try { final Udsendelse u = (Udsendelse) v.getTag(); if (v.getId() == R.id.hør) { DRData.instans.afspiller.setLydkilde(u); DRData.instans.afspiller.startAfspilning(); } else if (v.getId() == R.id.slet) { new AlertDialog.Builder(getActivity()) .setTitle(R.string.Slet_udsendelse) .setMessage(R.string.Vil_du_slette_denne_udsendele_du_kan_altid_hente_den_igen_) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface d, int w) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { // Animeret fjernelse af listeelement int pos = liste.indexOf(u); final View le = listView.getChildAt(pos-listView.getFirstVisiblePosition()); if (le==null) { // Burde ikke ske efter 28 dec 2015 - TODO fjern hentedeUdsendelser.slet(u); Log.rapporterFejl(new Exception("Burde ikke ske efter 28 dec 2015: sletning index "+pos+" på liste med "+liste.size()+" elementer")); return; } le.animate().alpha(0).translationX(le.getWidth()).withEndAction(new Runnable() { @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public void run() { le.setAlpha(1); le.setTranslationX(0); hentedeUdsendelser.slet(u); } }); } else { hentedeUdsendelser.slet(u); } } }) .setNegativeButton(android.R.string.cancel, null) .show(); } else { // startStopKnap HentetStatus hs = hentedeUdsendelser.getHentetStatus(u); if (hs!=null) { hentedeUdsendelser.stop(u); //xxx } else { if (u.streamsKlar()) hentedeUdsendelser.hent(u); // vi har streams, hent dem else { Log.d("Hentede_udsendelser_frag - hack - vis udsendelsessiden, den indlæser streamsne"); visUdsendelse_frag(u); } } } } catch (Exception e) { Log.rapporterFejl(e); } } }