package com.fireworksdk.bridge.utils import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity object FWFragmentUtil { fun removeFragmentsFromActivity(fragmentActivity: FragmentActivity?) { fragmentActivity ?: return val fragments = fragmentActivity.supportFragmentManager.fragments for (f in fragments) { removeFragment(fragmentActivity, f) } } fun removeFragment(fragmentActivity: FragmentActivity?, fragment: Fragment?, includeChildren: Boolean = true) { fragmentActivity ?: return fragment ?: return if (!fragment.isAdded || fragment.isDetached || fragment.isRemoving || fragmentActivity.isFinishing) { return } if (includeChildren) { removeChildFragment(fragment) } fragmentActivity.supportFragmentManager.beginTransaction().remove(fragment).commitAllowingStateLoss() } private fun removeChildFragment(fragment: Fragment?) { fragment ?: return if (!fragment.isAdded || fragment.isDetached || fragment.isRemoving) { return } val cfm = fragment.childFragmentManager val fragments = cfm.fragments if (fragments.isEmpty()) { return } for (f in fragments) { removeChildFragment(f) if (!fragment.isAdded || fragment.isDetached || fragment.isRemoving) { continue } cfm.beginTransaction().remove(f).commitAllowingStateLoss() } } }