package com.florianmski.tracktoid.ui.fragments.base.switcher;
import android.animation.Animator;
import android.graphics.Rect;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.florianmski.tracktoid.R;
import com.florianmski.tracktoid.TraktoidTheme;
import com.florianmski.tracktoid.ui.fragments.BaseFragment;
import com.getbase.floatingactionbutton.FloatingActionButton2;
public abstract class SwitchFragment extends BaseFragment implements View.OnClickListener
{
private final static String BUNDLE_INDEX = "index";
private final static int FRAGMENT_SWITCH_RES_ID = R.id.fragment_switch;
protected FloatingActionButton2 fab;
protected int index = getDefaultIndex();
public abstract Fragment getFragment(int index);
public abstract int getCount();
public abstract int getDefaultIndex();
public SwitchFragment() {}
@Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putInt(BUNDLE_INDEX, index);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
fab.setOnClickListener(this);
if(savedInstanceState != null)
index = savedInstanceState.getInt(BUNDLE_INDEX);
replaceFragment(null, getFragment(index));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.fragment_switch, container, false);
fab = (FloatingActionButton2) v.findViewById(R.id.fab);
return v;
}
protected void replaceFragment(Fragment previousFragment, Fragment nextFragment)
{
// FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
//
// // check if we've already added the fragment to the activity, if not do it
// String tag = String.valueOf(index);
// if(getChildFragmentManager().findFragmentByTag(tag) == null)
// transaction.add(R.id.fragment_switch, nextFragment, tag);
//
// transaction.attach(nextFragment);
//
// // if previousFragment != null it means we can detach it
// if(previousFragment != null)
// {
// transaction.detach(previousFragment);
// }
//
// transaction.commit();
getChildFragmentManager().beginTransaction().replace(FRAGMENT_SWITCH_RES_ID, nextFragment).commit();
}
protected void next()
{
final Fragment previousFragment = getFragment(index);
index = ++index % getCount();
final Fragment nextFragment = getFragment(index);
replaceFragment(previousFragment, nextFragment);
}
public FloatingActionButton2 getFAB()
{
return fab;
}
@Override
public void onClick(View v)
{
next();
}
@Override
public void onInsetsChanged(Rect insets)
{
super.onInsetsChanged(insets);
// put the fab above the nav bar
((FrameLayout.LayoutParams)fab.getLayoutParams()).setMargins(0, 0, 0, insets.bottom);
}
@Override
public TraktoidTheme getTheme()
{
return ((BaseFragment)getFragment(index)).getTheme();
}
private void revealEffect(Animator.AnimatorListener listener)
{
// get the center for the clipping circle
int cx = (fab.getLeft() + fab.getRight()) / 2;
int cy = (fab.getTop() + fab.getBottom()) / 2;
// get the final radius for the clipping circle
int finalRadius = Math.max(getView().getWidth(), getView().getHeight());
// create the animator for this view (the start radius is zero)
Animator anim = ViewAnimationUtils.createCircularReveal(getView(), cx, cy, 0, finalRadius);
anim.addListener(listener);
anim.start();
}
}