Skip to content

Commit 627a157

Browse files
committed
Pop cropScreen when navigating forward
1 parent 199aae1 commit 627a157

File tree

8 files changed

+91
-111
lines changed

8 files changed

+91
-111
lines changed

.idea/caches/deviceStreaming.xml

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/navEditor.xml

Lines changed: 7 additions & 84 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/kotlin/com/w2sv/autocrop/MainActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ class MainActivity : AppCompatActivity(R.layout.activity_main) {
2020
super.onCreate(savedInstanceState)
2121

2222
if (BuildConfig.DEBUG) {
23-
findNavController(R.id.nav_host_fragment).currentBackStack.collectOn(lifecycleScope) { backStackEntries ->
23+
val navController = findNavController(R.id.nav_host_fragment)
24+
navController.currentBackStack.collectOn(lifecycleScope) { backStackEntries ->
2425
i { "BackStack: ${backStackEntries.map { it.destination.displayName.substringAfterLast("/") }}" }
2526
}
2627
}

app/src/main/kotlin/com/w2sv/autocrop/ui/designsystem/Navigation.kt

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.w2sv.autocrop.ui.designsystem
22

3+
import android.os.Bundle
4+
import androidx.annotation.IdRes
35
import androidx.annotation.MainThread
46
import androidx.navigation.NavController
57
import androidx.navigation.NavDirections
8+
import androidx.navigation.NavGraph
69
import androidx.navigation.NavOptionsBuilder
710
import androidx.navigation.Navigator
811
import androidx.navigation.navOptions
@@ -14,9 +17,41 @@ fun NavController.navigateAnimated(
1417
extras: Navigator.Extras? = null,
1518
optionsBuilder: NavOptionsBuilder.() -> Unit = {}
1619
) {
17-
navigate(
20+
navigateAnimated(
21+
resId = directions.actionId,
22+
args = directions.arguments,
23+
extras = extras,
24+
optionsBuilder = optionsBuilder
25+
)
26+
}
27+
28+
@MainThread
29+
fun NavController.navigateAnimatedAndPopCurrentDestination(
30+
directions: NavDirections,
31+
extras: Navigator.Extras? = null,
32+
optionsBuilder: NavOptionsBuilder.() -> Unit = {}
33+
) {
34+
navigateAnimated(
1835
resId = directions.actionId,
1936
args = directions.arguments,
37+
extras = extras,
38+
optionsBuilder = {
39+
popUpTo(checkNotNull(currentDestination).id, { inclusive = true })
40+
optionsBuilder()
41+
}
42+
)
43+
}
44+
45+
@MainThread
46+
fun NavController.navigateAnimated(
47+
@IdRes resId: Int,
48+
args: Bundle? = null,
49+
extras: Navigator.Extras? = null,
50+
optionsBuilder: NavOptionsBuilder.() -> Unit = {}
51+
) {
52+
navigate(
53+
resId = resId,
54+
args = args,
2055
navigatorExtras = extras,
2156
navOptions = navOptions {
2257
launchSingleTop = true
@@ -30,3 +65,10 @@ fun NavController.navigateAnimated(
3065
}
3166
)
3267
}
68+
69+
/**
70+
* Returns the current subgraph (the parent graph of the active destination),
71+
* or null if no active destination exists.
72+
*/
73+
fun NavController.currentSubGraph(): NavGraph? =
74+
currentDestination?.parent

app/src/main/kotlin/com/w2sv/autocrop/ui/screen/CropBundleViewModel.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,22 @@ import kotlinx.coroutines.coroutineScope
2727
import kotlinx.coroutines.flow.SharingStarted
2828
import kotlinx.coroutines.launch
2929
import kotlinx.coroutines.withContext
30+
import slimber.log.i
3031

3132
inline fun <reified VM : ViewModel> Fragment.cropNavGraphViewModel(): Lazy<VM> =
3233
hiltNavGraphViewModels<VM>(R.id.crop_nav_graph)
3334

3435
@HiltViewModel
35-
class CropSessionViewModel @Inject constructor(val cropSession: CropSession) : ViewModel()
36+
class CropSessionViewModel @Inject constructor(val cropSession: CropSession) : ViewModel() {
37+
init {
38+
i { "Lifecycle: init" }
39+
}
40+
41+
override fun onCleared() {
42+
super.onCleared()
43+
i { "Lifecycle: onCleared" }
44+
}
45+
}
3646

3747
interface CropSessionAccessingViewModelFactory<VM : ViewModel> {
3848
fun create(cropSession: CropSession): VM

app/src/main/kotlin/com/w2sv/autocrop/ui/screen/crop/CropFragment.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.w2sv.androidutils.BackPressHandler
77
import com.w2sv.androidutils.widget.showToast
88
import com.w2sv.autocrop.databinding.CropBinding
99
import com.w2sv.autocrop.ui.AppFragment
10-
import com.w2sv.autocrop.ui.designsystem.navigateAnimated
10+
import com.w2sv.autocrop.ui.designsystem.navigateAnimatedAndPopCurrentDestination
1111
import com.w2sv.autocrop.ui.screen.cropSessionInjectedViewModel
1212
import com.w2sv.autocrop.ui.util.Constant
1313
import com.w2sv.core.common.R.string as Strings
@@ -58,8 +58,16 @@ class CropFragment : AppFragment<CropBinding>(CropBinding::class.java) {
5858
lifecycleScope.launch {
5959
viewModel.cropScreenshots(
6060
contentResolver = requireContext().contentResolver,
61-
onAnySuccessfulCrops = { navController.navigateAnimated(CropFragmentDirections.navigateToCropPagerScreen()) },
62-
onNoSuccessfulCrops = { navController.navigateAnimated(CropFragmentDirections.navigateToCroppingFailedScreen()) }
61+
onAnySuccessfulCrops = {
62+
navController.navigateAnimatedAndPopCurrentDestination(
63+
CropFragmentDirections.navigateToCropPagerScreen()
64+
)
65+
},
66+
onNoSuccessfulCrops = {
67+
navController.navigateAnimatedAndPopCurrentDestination(
68+
CropFragmentDirections.navigateToCroppingFailedScreen()
69+
)
70+
}
6371
)
6472
}
6573
}

app/src/main/kotlin/com/w2sv/autocrop/ui/screen/croppingfailed/CroppingFailedScreenFragment.kt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,14 @@ import android.os.Bundle
44
import android.view.View
55
import com.w2sv.autocrop.databinding.CroppingFailedBinding
66
import com.w2sv.autocrop.ui.AppFragment
7-
import com.w2sv.autocrop.ui.designsystem.navigateAnimated
87

98
class CroppingFailedScreenFragment : AppFragment<CroppingFailedBinding>(CroppingFailedBinding::class.java) {
109

11-
override val onBackPressed: () -> Unit
12-
get() = ::navigateToMainActivity
13-
1410
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1511
super.onViewCreated(view, savedInstanceState)
1612

1713
binding.gotItButton.setOnClickListener {
18-
navigateToMainActivity()
14+
navController.popBackStack()
1915
}
2016
}
21-
22-
private fun navigateToMainActivity() {
23-
navController.navigateAnimated(CroppingFailedScreenFragmentDirections.navigateToHomeScreen())
24-
}
2517
}

app/src/main/res/navigation/nav_graph.xml

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
android:id="@+id/main_nav_graph"
45
app:startDestination="@id/home_screen">
56

67
<fragment
@@ -26,25 +27,16 @@
2627

2728
<action
2829
android:id="@+id/navigate_to_cropping_failed_screen"
29-
app:destination="@id/cropping_failed_screen"
30-
app:popUpTo="@id/crop_nav_graph"
31-
app:popUpToInclusive="false" />
30+
app:destination="@id/cropping_failed_screen" />
3231

3332
<action
3433
android:id="@+id/navigate_to_crop_pager_screen"
35-
app:destination="@id/crop_pager_screen"
36-
app:popUpTo="@id/crop_nav_graph"
37-
app:popUpToInclusive="false" />
34+
app:destination="@id/crop_pager_screen" />
3835
</fragment>
3936

4037
<fragment
4138
android:id="@+id/cropping_failed_screen"
42-
android:name="com.w2sv.autocrop.ui.screen.croppingfailed.CroppingFailedScreenFragment">
43-
44-
<action
45-
android:id="@+id/navigate_to_home_screen"
46-
app:destination="@id/home_screen" />
47-
</fragment>
39+
android:name="com.w2sv.autocrop.ui.screen.croppingfailed.CroppingFailedScreenFragment" />
4840

4941
<fragment
5042
android:id="@+id/crop_pager_screen"

0 commit comments

Comments
 (0)