package com.lechucksoftware.proxy.proxysettings.utils;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import com.lechucksoftware.proxy.proxysettings.ui.activities.MasterActivity;
import timber.log.Timber;
/**
* Created by Marco on 22/06/13.
*/
public class FragmentsUtils
{
private static final String TAG = FragmentsUtils.class.getSimpleName();
public static void goToMainActivity(Context context)
{
Intent mainIntent = new Intent(context, MasterActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mainIntent);
}
public static void changeFragment(FragmentManager fragmentManager, int frameId, Fragment fragment, boolean addToBackStack)
{
String newFragmentName = fragment.getClass().getName();
String currentFragmentName = "";
try
{
Fragment currentFragment = fragmentManager.findFragmentById(frameId);
if (currentFragment != null)
{
currentFragmentName = currentFragment.getClass().getName();
Timber.d(String.format("changeFragment from '%s' to '%s' ", currentFragmentName, newFragmentName));
if (currentFragmentName.equals(newFragmentName))
{
// TODO: Evaluate if at least a refresh of the current fragment can be executed
Timber.d(String.format("No need to do anything the fragment is the same (%s = %s ), just return!", currentFragmentName, newFragmentName));
return;
}
}
else
{
Timber.d(String.format("changeFragment add '%s' ", newFragmentName));
}
boolean fragmentPopped = fragmentManager.popBackStackImmediate(newFragmentName, 0);
Timber.d("Popped fragment: " + fragmentPopped);
if (!fragmentPopped)
{
//Fragment not in back stack, create it.
FragmentTransaction ft = fragmentManager.beginTransaction();
// TODO: Add animation to the transaction
// ft.setCustomAnimations(enter, exit, pop_enter, pop_exit);
if (currentFragment == null)
{
Timber.d("Add fragment: " + fragment);
ft.add(frameId, fragment);
}
else
{
Timber.d("Replace current with fragment: " + fragment);
ft.replace(frameId, fragment);
if (addToBackStack)
{
Timber.d("Fragment added to back stack");
ft.addToBackStack(newFragmentName);
}
}
ft.commit();
}
}
catch (IllegalStateException e)
{
Timber.e(e,"Unable to commit fragment, could be activity as been killed in background. ");
}
}
}