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.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import com.androidquery.AQuery;
import java.util.ArrayList;
import java.util.HashSet;
import dk.dr.radio.data.DRData;
import dk.dr.radio.data.DRJson;
import dk.dr.radio.data.Programserie;
import dk.dr.radio.diverse.App;
import dk.dr.radio.diverse.CirclePageIndicator;
import dk.dr.radio.diverse.Log;
import dk.dr.radio.diverse.PinnedSectionListView;
import dk.dr.radio.diverse.Sidevisning;
import dk.dr.radio.v3.R;
public class DramaOgBog_frag extends Basisfragment implements Runnable, AdapterView.OnItemClickListener {
private ViewPager viewPager;
private KarruselAdapter karruselAdapter;
private ArrayList<Programserie> karruselListe = new ArrayList<Programserie>();
private ArrayList liste = new ArrayList();
private CirclePageIndicator karruselIndikator;
private PinnedSectionListView listView;
HashSet<Integer> listesektionerUdvidet = new HashSet<Integer>();
@Override
public void run() {
karruselListe.clear();
liste.clear();
if (DRData.instans.dramaOgBog.lister == null) {
DRData.instans.dramaOgBog.startHentData();
return; // run() kaldes igen når der er data
} else {
int sektionsnummer = 0;
for (ArrayList<Programserie> sektion : DRData.instans.dramaOgBog.lister) {
liste.add(DRData.instans.dramaOgBog.overskrifter.get(sektionsnummer)+" ("+sektion.size()+")");
int n = 0;
for (Programserie programserie : sektion) {
//Log.d("DramaOgBogF "+sektionsnummer+" "+n+programserie+" "+programserie.antalUdsendelser+" "+programserie.billedeUrl);
n++;
if (programserie.antalUdsendelser>0 && programserie.billedeUrl!=null
&& DRData.instans.dramaOgBog.karuselSerieSlug.contains(programserie.slug)) {
karruselListe.add(programserie);
}
if (n < 3 || listesektionerUdvidet.contains(sektionsnummer)) liste.add(programserie);
if (n == 3 && !listesektionerUdvidet.contains(sektionsnummer)) liste.add(sektionsnummer); // VIS FLERE
}
sektionsnummer++;
}
//karruselListe.addAll(DRData.instans.dramaOgBog.karusel);
}
if (karruselAdapter != null) {
karruselAdapter.notifyDataSetChanged();
listeAdapter.notifyDataSetChanged();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d("onCreateView " + this);
View rod = inflater.inflate(R.layout.drama_og_bog_frag, container, false);
karruselAdapter = new KarruselAdapter(getChildFragmentManager());
viewPager = (ViewPager) rod.findViewById(R.id.pager);
viewPager.setAdapter(karruselAdapter);
viewPager.getLayoutParams().height = billedeHø; // Viewpageren skal fylde præcist ét billede i højden
karruselIndikator = (CirclePageIndicator)rod.findViewById(R.id.indicator);
karruselIndikator.setViewPager(viewPager);
final float density = getResources().getDisplayMetrics().density;
karruselIndikator.setRadius(5 * density);
karruselIndikator.setPageColor(Color.BLACK);
karruselIndikator.setFillColor(App.color.blå);
karruselIndikator.setStrokeColor(0);
karruselIndikator.setStrokeWidth(0);
DRData.instans.dramaOgBog.observatører.add(this);
run();
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_DOWN || event.getAction()==MotionEvent.ACTION_UP) {
App.forgrundstråd.removeCallbacks(skiftTilNæsteIKarrusellen);
App.forgrundstråd.postDelayed(skiftTilNæsteIKarrusellen, 10000);
}
return false;
}
});
App.forgrundstråd.postDelayed(skiftTilNæsteIKarrusellen, 10000);
AQuery aq = new AQuery(rod);
listView = (PinnedSectionListView) aq.id(R.id.listView).adapter(listeAdapter).getListView();
listView.setEmptyView(aq.id(R.id.tom).typeface(App.skrift_gibson).getView());
listView.setOnItemClickListener(this);
return rod;
}
Runnable skiftTilNæsteIKarrusellen = new Runnable() {
@Override
public void run() {
if (viewPager==null || karruselListe.size()==0) return;
int n = (viewPager.getCurrentItem() + 1) % karruselListe.size();
viewPager.setCurrentItem(n, true);
App.forgrundstråd.removeCallbacks(skiftTilNæsteIKarrusellen);
App.forgrundstråd.postDelayed(skiftTilNæsteIKarrusellen, 5000);
}
};
@Override
public void onDestroyView() {
viewPager = null;
karruselAdapter = null;
karruselIndikator = null;
DRData.instans.dramaOgBog.observatører.remove(this);
super.onDestroyView();
}
public class KarruselAdapter extends FragmentPagerAdapter {
public KarruselAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return karruselListe.size();
}
@Override
public float getPageWidth(int position) {
return halvbreddebilleder?0.5f : 1;
}
@Override
public Basisfragment getItem(int position) {
Basisfragment f = new KarruselFrag();
Bundle b = new Bundle();
b.putString(DRJson.SeriesSlug.name(), karruselListe.get(position).slug);
f.setArguments(b);
return f;
}
}
public static class KarruselFrag extends Basisfragment implements View.OnClickListener {
private String programserieSlug;
private Programserie programserie;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
programserieSlug = getArguments().getString(DRJson.SeriesSlug.name());
View rod = inflater.inflate(R.layout.kanal_elem0_inkl_billede_titel, container, false);
programserie = DRData.instans.programserieFraSlug.get(programserieSlug);
if (programserie==null) {
// Fix for https://mint.splunk.com/dashboard/project/cd78aa05/errors/4024198209
Log.rapporterFejl(new IllegalStateException(programserieSlug + " fandtes ikke i DRData.instans.programserieFraSlug"));
return rod;
}
String burl = Basisfragment.skalérBillede(programserie);
//Log.d("onCreateView " + this + " viser " + programserie+" "+burl);
AQuery aq = new AQuery(rod);
aq.clicked(this);
aq.id(R.id.billede).width(billedeBr, false).height(billedeHø, false)
.image(burl, true, true, billedeBr, AQuery.INVISIBLE, null, AQuery.FADE_IN, (float) højde9 / bredde16);
aq.id(R.id.titel).typeface(App.skrift_gibson_fed).text(programserie.undertitel);
aq.id(R.id.lige_nu).text(programserie.titel.toUpperCase()).typeface(App.skrift_gibson);
//udvikling_checkDrSkrifter(rod, this + " rod");
return rod;
}
@Override
public void onClick(View v) {
åbn(this, programserie);
}
}
static final int[] layoutFraType = {
R.layout.kanal_elem3_i_dag_i_morgen,
R.layout.drama_og_bog_elem1_programserie,
R.layout.drama_og_bog_elem2_vis_flere,
};
private BaseAdapter listeAdapter = new Basisadapter() {
@Override
public int getCount() {
return liste.size();
}
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
if (position>=liste.size()) return 0; // Workaround for https://mint.splunk.com/dashboard/project/cd78aa05/errors/4088408563 hvor PinnedSectionListView spørger ud over adapterens størrelse
Object o = liste.get(position);
if (o instanceof String) return 0;
if (o instanceof Integer) return 2;
return 1;
}
@Override
public boolean isItemViewTypePinned(int viewType) {
return viewType==0;
}
@Override
public boolean isEnabled(int position) {
return getItemViewType(position) != 0;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public View getView(int position, View v, ViewGroup parent) {
int type = getItemViewType(position);
if (v == null) {
v = getLayoutInflater(null).inflate(layoutFraType[type], parent, false);
}
AQuery aq = new AQuery(v);
switch (type) {
case 0:
String s = (String) liste.get(position);
aq.id(R.id.titel).typeface(App.skrift_gibson).text(s);
break;
case 1:
Programserie programserie = (Programserie) liste.get(position);
String burl = Basisfragment.skalérBillede(programserie);
aq.id(R.id.billede).width(billedeBr / 3, false).height(billedeHø / 3, false).image(burl, true, true, 0, AQuery.INVISIBLE, null, AQuery.FADE_IN, (float) højde9 / bredde16);
aq.id(R.id.titel).typeface(App.skrift_gibson_fed).text(programserie.titel);
aq.id(R.id.antalUdsendelser).typeface(App.skrift_gibson).text(programserie.antalUdsendelser+" AFSNIT");
break;
case 2:
aq.id(R.id.titel).typeface(App.skrift_gibson);
aq.id(R.id.stiplet_linje).visibility(position==liste.size()-1?View.GONE:View.VISIBLE);
}
udvikling_checkDrSkrifter(v, this + " position " + position);
return v;
}
};
private static void åbn(Basisfragment ths, Programserie programserie) {
Fragment f = new Programserie_frag();
f.setArguments(new Intent()
.putExtra(DRJson.SeriesSlug.name(), programserie.slug)
.getExtras());
ths.getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.indhold_frag, f)
.addToBackStack(null)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit();
Sidevisning.vist(Programserie_frag.class, programserie.slug);
}
@Override
public void onItemClick(AdapterView<?> listView, View v, int position, long id) {
Object o = liste.get(position);
if (o instanceof Integer) {
int n = (Integer) o;
if (listesektionerUdvidet.contains(n)) listesektionerUdvidet.remove(n); else listesektionerUdvidet.add(n);
run();
} else if (o instanceof Programserie) {
åbn(this, (Programserie) o);
} else {
Log.rapporterFejl(new IllegalStateException("onItemClick på "+o.getClass()), o+" pos "+position);
}
}
}