package dk.dr.radio.akt;
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.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
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.diverse.PagerSlidingTabStrip;
import dk.dr.radio.diverse.Sidevisning;
import dk.dr.radio.v3.R;
public class Kanaler_frag extends Basisfragment implements ViewPager.OnPageChangeListener, Runnable {
private ViewPager viewPager;
private KanalAdapter adapter;
private ArrayList<Kanal> kanaler;
private Venstremenu_frag venstremenuFrag;
private PagerSlidingTabStrip kanalfaneblade;
private int viewPagerScrollState;
@Override
public void run() {
kanaler = new ArrayList<Kanal>();
for (Kanal k : DRData.instans.grunddata.kanaler) {
if (!k.p4underkanal) kanaler.add(k);
}
if (adapter != null) {
adapter.kanaler2 = kanaler;
if (viewPager.getCurrentItem() >= kanaler.size()) {
viewPager.setCurrentItem(0);
}
kanalfaneblade.notifyDataSetChanged();
adapter.notifyDataSetChanged();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d("onCreateView " + this);
View rod = inflater.inflate(R.layout.kanaler_frag, container, false);
run();
adapter = new KanalAdapter(getChildFragmentManager());
adapter.kanaler2 = kanaler;
viewPager = (ViewPager) rod.findViewById(R.id.pager);
viewPager.setAdapter(adapter);
venstremenuFrag = (Venstremenu_frag) getFragmentManager().findFragmentById(R.id.venstremenu_frag);
if (savedInstanceState == null) {
int kanalindex = kanaler.indexOf(DRData.instans.afspiller.getLydkilde().getKanal());
if (kanalindex == -1) kanalindex = 3; // Hvis vi ikke rammer nogen af de overordnede kanaler, så er det P4
viewPager.setCurrentItem(kanalindex);
Sidevisning.vist(Kanal_frag.class, kanaler.get(kanalindex).slug);
}
kanalfaneblade = (PagerSlidingTabStrip) rod.findViewById(R.id.tabs);
kanalfaneblade.setTextSize(getResources().getDimensionPixelSize(R.dimen.metainfo_skrifstørrelse));
kanalfaneblade.setViewPager(viewPager);
kanalfaneblade.setOnPageChangeListener(this);
DRData.instans.grunddata.observatører.add(this);
return rod;
}
@Override
public void onResume() {
App.hentEvtNyeGrunddata.run();
venstremenuFrag.visOpnavigering(false);
super.onResume();
}
@Override
public void onPause() {
venstremenuFrag.visOpnavigering(true);
super.onPause();
}
@Override
public void onDestroyView() {
viewPager.setAdapter(null); // forårsager crash? - men nødvendig for at undgå https://mint.splunk.com/dashboard/project/cd78aa05/errors/2151178610
viewPager = null;
adapter = null;
kanalfaneblade = null;
DRData.instans.grunddata.observatører.remove(this);
super.onDestroyView();
}
@Override
public void onPageSelected(int position) {
Log.d("onPageSelected( " + position);
// Husk foretrukken getKanal
App.prefs.edit().putString(App.FORETRUKKEN_KANAL, kanaler.get(position).kode).commit();
Sidevisning.vist(Kanal_frag.class, kanaler.get(position).slug);
}
@Override
public void onPageScrollStateChanged(int state) {
Log.d("onPageScrollStateChanged( " + state);
viewPagerScrollState = state;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (App.fejlsøgning) Log.d("onPageScrolled( " + position + " " + positionOffset + " " + positionOffsetPixels);
// Hvis vi er på 0'te side og der trækkes mod højre kan viewpageren ikke komme længere og offsetPixels vil være 0,
if (position == 0 && positionOffsetPixels == 0 && viewPagerScrollState == ViewPager.SCROLL_STATE_DRAGGING) {
venstremenuFrag.visMenu();
}
}
public class KanalAdapter extends FragmentPagerAdapter implements PagerSlidingTabStrip.IconTabProvider {
public ArrayList<Kanal> kanaler2;
//public class KanalAdapter extends FragmentStatePagerAdapter implements PagerSlidingTabStrip.IconTabProvider {
public KanalAdapter(FragmentManager fm) {
super(fm);
}
//@Override
//public float getPageWidth(int position) { return(0.9f); }
@Override
public Fragment getItem(int position) {
Kanal k = kanaler2.get(position);
Fragment f = Fragmentfabrikering.kanal(k);
return f;
}
@Override
public int getCount() {
return kanaler2.size();
}
@Override
public CharSequence getPageTitle(int position) {
return kanaler2.get(position).navn;
}
@Override
public int getPageIconResId(int position) {
return kanaler2.get(position).kanallogo_resid;
}
@Override
public String getPageContentDescription(int position) {
return kanaler2.get(position).navn;
}
}
}