Skip to content

Commit b7d2bd1

Browse files
committed
Merge remote-tracking branch 'origin/3.1.0' into 3.1.0
2 parents 1728648 + efc5369 commit b7d2bd1

File tree

3 files changed

+66
-11
lines changed

3 files changed

+66
-11
lines changed

frag-nav/build.gradle

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,15 @@ dependencies {
9292
testImplementation "org.spekframework.spek2:spek-dsl-jvm:$spek_version"
9393
testImplementation "org.spekframework.spek2:spek-runner-junit5:$spek_version"
9494
testImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
95+
testImplementation('org.jetbrains.spek:spek-api:1.1.5') {
96+
exclude group: 'org.jetbrains.kotlin'
97+
}
98+
testImplementation('org.jetbrains.spek:spek-junit-platform-engine:1.1.5') {
99+
exclude group: 'org.junit.platform'
100+
exclude group: 'org.jetbrains.kotlin'
101+
}
102+
103+
95104
}
96105

97106
group = publishedGroupId // Maven Group ID for the artifact

frag-nav/src/main/java/com/ncapdevi/fragnav/FragNavController.kt

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -382,16 +382,29 @@ class FragNavController constructor(private val fragmentManger: FragmentManager,
382382
*/
383383
@JvmOverloads
384384
fun clearStack(transactionOptions: FragNavTransactionOptions? = defaultTransactionOptions) {
385-
if (currentStackIndex == NO_TAB) {
385+
clearStack(currentStackIndex,transactionOptions)
386+
}
387+
388+
/**
389+
* Clears the passed tab's stack to get to just the bottom Fragment. This will reveal the root fragment
390+
*
391+
* @param tabIndex Index of tab that needs to be cleared
392+
* @param transactionOptions Transaction options to be displayed
393+
*/
394+
@JvmOverloads
395+
fun clearStack(tabIndex: Int, transactionOptions: FragNavTransactionOptions? = defaultTransactionOptions) {
396+
if (tabIndex == NO_TAB) {
386397
return
387398
}
388399

389400
//Grab Current stack
390-
val fragmentStack = fragmentStacksTags[currentStackIndex]
401+
val fragmentStack = fragmentStacksTags[tabIndex]
391402

392403
// Only need to start popping and reattach if the stack is greater than 1
393404
if (fragmentStack.size > 1) {
394-
val ft = createTransactionWithOptions(transactionOptions, true)
405+
//Only animate if we're clearing the current stack
406+
val shouldAnimate = tabIndex == currentStackIndex
407+
val ft = createTransactionWithOptions(transactionOptions,true, shouldAnimate)
395408

396409
//Pop all of the fragments on the stack and remove them from the FragmentManager
397410
while (fragmentStack.size > 1) {
@@ -657,10 +670,14 @@ class FragNavController constructor(private val fragmentManger: FragmentManager,
657670
setTransition(options.transition)
658671

659672
options.sharedElements.forEach { sharedElement ->
660-
addSharedElement(
661-
sharedElement.first,
662-
sharedElement.second
663-
)
673+
sharedElement.first?.let {
674+
sharedElement.second?.let { it1 ->
675+
addSharedElement(
676+
it,
677+
it1
678+
)
679+
}
680+
}
664681
}
665682

666683
when {
@@ -729,7 +746,7 @@ class FragNavController constructor(private val fragmentManger: FragmentManager,
729746

730747
fun getFragmentManagerForDialog(): FragmentManager {
731748
val currentFrag = this.currentFrag
732-
return if(currentFrag?.isAdded == true) {
749+
return if (currentFrag?.isAdded == true) {
733750
currentFrag.childFragmentManager
734751
} else {
735752
this.fragmentManger
@@ -809,9 +826,9 @@ class FragNavController constructor(private val fragmentManger: FragmentManager,
809826
val stackArray = stackArrays.getJSONArray(x)
810827
val stack = Stack<String>()
811828
(0 until stackArray.length())
812-
.map { stackArray.getString(it) }
813-
.filter { !it.isNullOrEmpty() && !"null".equals(it, ignoreCase = true) }
814-
.mapNotNullTo(stack) { it }
829+
.map { stackArray.getString(it) }
830+
.filter { !it.isNullOrEmpty() && !"null".equals(it, ignoreCase = true) }
831+
.mapNotNullTo(stack) { it }
815832

816833
fragmentStacksTags.add(stack)
817834
}

frag-nav/src/test/java/com/ncapdevi/fragnav/FragNavControllerTest.kt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,35 @@ class FragNavControllerTest : FragNavController.TransactionListener {
190190
Assert.assertTrue(mFragNavController.isRootFragment)
191191
}
192192

193+
@Test
194+
fun testTabStackClear() {
195+
val rootFragments = ArrayList<Fragment>()
196+
rootFragments.add(Fragment())
197+
rootFragments.add(Fragment())
198+
199+
val mFragNavController = FragNavController(fragmentManager, frameLayout.id).apply {
200+
this.rootFragments = rootFragments
201+
}
202+
mFragNavController.initialize()
203+
204+
Assert.assertEquals(FragNavController.TAB1.toLong(), mFragNavController.currentStackIndex.toLong())
205+
Assert.assertNotNull(mFragNavController.currentStack)
206+
207+
var size = mFragNavController.currentStack?.size ?: 1
208+
209+
mFragNavController.pushFragment(Fragment())
210+
Assert.assertTrue(mFragNavController.currentStack?.size == ++size)
211+
212+
mFragNavController.pushFragment(Fragment())
213+
Assert.assertTrue(mFragNavController.currentStack?.size == ++size)
214+
215+
mFragNavController.switchTab(FragNavController.TAB2)
216+
217+
mFragNavController.clearStack(FragNavController.TAB1)
218+
219+
mFragNavController.switchTab(FragNavController.TAB1)
220+
Assert.assertTrue(mFragNavController.currentStack?.size == 1)
221+
}
193222

194223
override fun onTabTransaction(fragment: Fragment?, index: Int) {
195224
Assert.assertNotNull(fragment)

0 commit comments

Comments
 (0)