package com.xda.one.util; import com.xda.one.R; import com.xda.one.api.model.interfaces.Forum; import com.xda.one.api.model.response.container.ResponsePostContainer; import com.xda.one.model.augmented.AugmentedUnifiedThread; import com.xda.one.ui.ForumFragment; import com.xda.one.ui.PostPagerFragment; import com.xda.one.ui.ThreadFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.text.TextUtils; import android.util.Log; import java.util.ArrayList; import java.util.List; public class FragmentUtils { public static FragmentTransaction getDefaultTransaction(final FragmentManager fragmentManager) { final FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right); return transaction; } public static void switchToForumContent(final FragmentManager parentManager, final Fragment parent, final List<String> hierarchyList, final String forumTitle, final Forum forum) { final ArrayList<String> hierarchy = new ArrayList<>(hierarchyList); hierarchy.add(forum.getTitle()); // There are three possibilities - forums and threads in this forum, // just threads or just forums if (forum.canContainThreads() && forum.hasChildren()) { // TODO - this dual setup needs to be written } else if (forum.hasChildren()) { switchToForumList(parent, parentManager, hierarchy, forumTitle, forum); } else if (forum.canContainThreads()) { switchToThreadList(parentManager, forum, forumTitle, hierarchy); } else { // This is invalid and indicates a bug Log.e("XDA-One", "There's a bug here - forums should have either threads or forums or" + " both but not nothing"); } } private static void switchToForumList(final Fragment parent, final FragmentManager parentManager, final ArrayList<String> hierarchy, final String forumTitle, final Forum forum) { final FragmentManager fragmentManager = parent == null ? parentManager : parent.getFragmentManager(); final FragmentTransaction transaction = getDefaultTransaction(fragmentManager); if (TextUtils.isEmpty(forumTitle)) { transaction.addToBackStack(null); } else { final String title = forum.getTitle(); transaction.addToBackStack(title); } final Fragment fragment = ForumFragment.createInstance(forum, forumTitle, hierarchy); transaction.replace(R.id.content_frame, fragment).commit(); } public static void switchToThreadList(final FragmentManager fragmentManager, final Forum forum, final String parentTitle, final ArrayList<String> hierarchy) { final FragmentTransaction transaction = getDefaultTransaction(fragmentManager); transaction.addToBackStack(forum.getTitle()); final Fragment fragment = ThreadFragment.createDefault(forum.getForumId(), forum.getTitle(), parentTitle, hierarchy); transaction.replace(R.id.content_frame, fragment).commit(); } public static Fragment switchToPostList(final AugmentedUnifiedThread unifiedThread, final ArrayList<String> hierarchy) { return switchToPostList(unifiedThread, hierarchy, null); } public static Fragment switchToPostList(final AugmentedUnifiedThread unifiedThread, final ArrayList<String> hierarchy, final ResponsePostContainer container) { final int pageCount; if (container == null) { final int totalPosts = unifiedThread.getTotalPosts(); pageCount = (totalPosts / 10) + (totalPosts % 10 == 0 ? 0 : 1); } else { pageCount = container.getTotalPages(); } hierarchy.add(unifiedThread.getTitle()); return PostPagerFragment.getInstance(unifiedThread, container, pageCount, hierarchy); } }