package com.florianmski.tracktoid.ui.fragments;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import com.florianmski.tracktoid.TraktoidTheme;
import com.florianmski.tracktoid.ui.activities.BaseActivity;
import com.florianmski.tracktoid.ui.activities.TranslucentActivity;
import com.florianmski.tracktoid.ui.widgets.DrawInsetsFrameLayout;
public abstract class BaseFragment extends Fragment implements DrawInsetsFrameLayout.OnInsetsCallback
{
private Rect insets;
public void launchActivity(Class<?> activityToLaunch, Bundle args)
{
Intent i = new Intent(getActivity(), activityToLaunch);
if(args != null)
i.putExtras(args);
startActivity(i);
}
public void launchActivity(Class<?> activityToLaunch)
{
launchActivity(activityToLaunch, null);
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
super.setUserVisibleHint(isVisibleToUser);
if(getActivity() != null && isVisibleToUser)
setupActionBar();
}
protected void showActionBar(boolean show)
{
((BaseActivity)getActivity()).showActionBar(show);
}
protected void setupActionBar()
{
// if(getActionBar().getNavigationMode() != ActionBar.NAVIGATION_MODE_STANDARD)
// getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Can't retain fragments that are nested in other fragments
// if(getParentFragment() == null)
// setRetainInstance(true);
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && getActivity() instanceof TranslucentActivity)
((TranslucentActivity)getActivity()).addOnInsetsCallback(this);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
setActivityTheme();
}
protected void setActivityTheme()
{
((BaseActivity)getActivity()).setTheme(getTheme());
}
@Override
public void onDestroy()
{
super.onDestroy();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && getActivity() instanceof TranslucentActivity)
((TranslucentActivity)getActivity()).removeOnInsetsCallback(this);
}
public ActionBar getActionBar()
{
return ((ActionBarActivity)getActivity()).getSupportActionBar();
}
public Toolbar getToolbar()
{
return ((BaseActivity)getActivity()).getToolbar();
}
protected void setTitle(String title)
{
getActionBar().setTitle(title);
}
protected void setSubtitle(String subtitle)
{
getActionBar().setSubtitle(subtitle);
}
public abstract TraktoidTheme getTheme();
@Override
public void onInsetsChanged(Rect insets)
{
this.insets = insets;
}
public Rect getInsets()
{
return insets;
}
// you can't setRetainInstance() on nested fragments so in a nested fragment getRetainInstance()
// returns always false but the child is retained if its parent is also retained
// go up to see if the parent is retained and so is the child if that's the case
protected boolean isInstanceRetained()
{
Fragment f = this;
while(f.getParentFragment() != null)
f = f.getParentFragment();
return f.getRetainInstance();
}
}