package org.michenux.drodrolib.ui.fragment;
import android.content.res.Configuration;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import java.util.ArrayList;
import java.util.List;
public class MasterDetailFragmentHelper {
public static MasterDetailFragments getCurrentFragments(int masterView, int detailView, Class<? extends Fragment> detailClass,
FragmentManager fm) {
MasterDetailFragments masterDetailFragments = new MasterDetailFragments();
List<Fragment> fragmentToRemove = new ArrayList<>();
Fragment frag1 = fm.findFragmentById(masterView);
if (frag1 != null) {
if (detailClass.isAssignableFrom(frag1.getClass())) {
masterDetailFragments.detail = frag1;
fm.popBackStackImmediate();
fragmentToRemove.add(frag1);
frag1 = fm.findFragmentById(masterView);
masterDetailFragments.master = frag1;
fragmentToRemove.add(frag1);
} else {
masterDetailFragments.master = frag1;
fragmentToRemove.add(frag1);
}
}
Fragment frag2 = fm.findFragmentById(detailView);
if (frag2 != null) {
fragmentToRemove.add(frag2);
if (masterDetailFragments.detail == null) {
masterDetailFragments.detail = frag2;
}
}
FragmentTransaction ft = fm.beginTransaction();
for (Fragment f : fragmentToRemove) {
ft.remove(f);
}
ft.commit();
fm.executePendingTransactions();
return masterDetailFragments;
}
public static void initFragments(MasterDetailFragments fragments, int masterView, int detailView, Configuration configuration, FragmentManager fm) {
boolean dualPanel = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE;
if (dualPanel) {
FragmentTransaction ft = fm.beginTransaction();
ft.add(masterView, fragments.master);
if (fragments.detail != null) {
ft.add(detailView, fragments.detail);
}
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
} else {
FragmentTransaction ft = fm.beginTransaction();
ft.add(masterView, fragments.master);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
if (fragments.detail != null) {
ft = fm.beginTransaction();
ft.add(masterView, fragments.detail);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
}
}
}