Status Update
Comments
ti...@gmail.com <ti...@gmail.com> #2
The code referred to can be found in
override fun onResume() {
super.onResume()
if (navigated) {
findNavController().popBackStack()
return
}
var monitor = installViewModel.installMonitor
if (monitor == null) {
Log.i(TAG, "onResume: monitor is null, navigating")
navigate()
monitor = installViewModel.installMonitor
}
if (monitor != null) {
Log.i(TAG, "onResume: monitor is now not null, observing")
monitor.status.observe(this, StateObserver(monitor))
}
}
In case no monitor is attached during onResume
, we assign the installMonitor
from installViewModel
.
In either case a new StateObserver
is attached, which then observes status changes.
Once SplitSessionInstallState.INSTALLED
is observed, navigate()
is invoked from within StateObserver
.
Since navigate
is called in the StateObserver we might see multiple invocations by accident.
To alleviate this, we could create a Event
Alternatively, moving the calls from onResume
earlier in the lifecycle, e.g. onCreateView
could avoid unnecessary view creation in case navigation already has taken place, and could avoid multiple calls to the observed status.
il...@google.com <il...@google.com> #3
Branch: androidx-master-dev
commit 29c5aee2bf2685e3bc2a0e38ca0290408aa65b11
Author: Ben Weiss <benweiss@google.com>
Date: Tue Nov 03 14:41:39 2020
Move install monitor observation to onViewCreated
Bug: 169636207
Test: Existing tests pass
Change-Id: Ia0c1d903066a5206de5b862eb2a0d9e0899c690b
M navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt
ti...@gmail.com <ti...@gmail.com> #4
This has been fixed and will be available in an upcoming Navigation 2.3.2 release.
ru...@gmail.com <ru...@gmail.com> #5
#4 I think this fix break the behavior of DefaultProgressFragment, it doesn't call super.onViewCreated() so that the installation won't execute.
k8...@gmail.com <k8...@gmail.com> #6
onViewCreated
Can you provide more information as to how your installation won't execute?
il...@google.com <il...@google.com> #7
Move install monitor observation to onViewCreated
DefaultProgressFragment
won't execute super(AbstractProgressFragment)'s onViewCreated()
. So after this change, DefaultProgressFragment
can't monitor the installation progress.
jb...@google.com <jb...@google.com>
ap...@google.com <ap...@google.com> #8
TL;DR
Call super.onViewCreated(view, savedInstanceState)
in DefaultProgressFragment
will solve this issue.
ap...@google.com <ap...@google.com> #9
Branch: androidx-master-dev
commit 524a4f074b688975041f6ddd9db9eb31a88410e8
Author: Ben Weiss <benweiss@google.com>
Date: Tue Dec 15 12:26:06 2020
Add missing onViewCreated call
DefaultProgressFragment did not call super.onViewCreated which
could lead to installation progress not completing.
Bug: 169636207
Test: N/A
RelNote: Fix stuck installation progress
Change-Id: Ib27a77bc4572fc69cea38d738255c987449d6137
M navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragment.kt
ap...@google.com <ap...@google.com> #10
Why this fix doesn't included in 2.3.3?
ap...@google.com <ap...@google.com> #11
Re #10, yes, you're right this didn't make it into Navigation 2.3.3. Sorry about that. We'll look at doing a Navigation 2.3.4 with this fix.
ap...@google.com <ap...@google.com> #12
il...@google.com <il...@google.com> #13
I believe I'm facing another issue because of this fix:
When navigating to an activity that belongs to a dynamic module, the AbstractProgressFragment
is not removed from the back stack. The line that's supposed to do it was moved from onResume
to onViewCreated
:
if (navigated) {
findNavController().popBackStack()
return
}
And onViewCreated
is not called since we're coming back from another activity.
Moving that block back to the onResume
method should solve the problem. In the meantime (as a workaround), I guess we can do as follows:
class CustomProgressFragment : AbstractProgressFragment() {
private var navigated = false
override fun onResume() {
super.onResume()
// Workaround:
// AbstractProgressFragment is not being removed from the back stack when returning from another activity
if (navigated) findNavController().popBackStack()
}
override fun onInstalled() {
testing = true
}
...
...
}
Description
As of compose Compose Animation APIs are still
1.0.1
many of the@Experimental
.Because of AndroidX internal restrictions, modules cannot depend on experimental APIs from other modules.
In the interest of providing a solution for Navigation with custom Compose Animations as soon as possible, we opted to provide a new module in Accompanist Navigation . Once all the required animation APIs become stable, which is planned as part of Compose
1.1.0
, we will move the implementation back into theJetpack Navigation library
fromAccompanist Navigation Animation
.For more details, see the Animations in Navigation Compose blog post.