Fixed
Status Update
Comments
su...@google.com <su...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 92bd7222fcfd7523e8fa80b7f72e967b8bbf4750
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 10:07:52 2019
Split LifecycleCallbacks from FragmentManager
Create a separate FragmentLifecycleCallbacksDispatcher
object that is responsible for dispatching
FragmentLifecycleCallbacks events.
Test: existing FragmentLifecycleTest pass
BUG: 139536619
Change-Id: I64cc2b364af65760b0008efb317a742df2c0718d
A fragment/fragment/src/main/java/androidx/fragment/app/FragmentLifecycleCallbacksDispatcher.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
https://android-review.googlesource.com/1110155
https://goto.google.com/android-sha1/92bd7222fcfd7523e8fa80b7f72e967b8bbf4750
Branch: androidx-master-dev
commit 92bd7222fcfd7523e8fa80b7f72e967b8bbf4750
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 10:07:52 2019
Split LifecycleCallbacks from FragmentManager
Create a separate FragmentLifecycleCallbacksDispatcher
object that is responsible for dispatching
FragmentLifecycleCallbacks events.
Test: existing FragmentLifecycleTest pass
BUG: 139536619
Change-Id: I64cc2b364af65760b0008efb317a742df2c0718d
A fragment/fragment/src/main/java/androidx/fragment/app/FragmentLifecycleCallbacksDispatcher.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
dr...@gmail.com <dr...@gmail.com> #3
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 092d14cd22c174405221b930665869f7c9fc8b65
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 14:46:02 2019
Remove FragmentState mInstance
Make FragmentState a simple Parcelable by removing
its mInstance field and its instantiate() method.
This required we change the order of restoring:
instead of reconnecting retained Fragments with their
FragmentState instances, we first iterate through
all FragmentState instances and do one of two things:
1) Reconnect the retained fragment if it exists
2) Create a new fragment from the FragmentState
This allows us to do just one pass through our
FragmentState objects and run the edge case of
detecting retained fragments created after the
state was saved after creating the set of active
fragments.
Test: all existing tests pass
BUG: 139536619
Change-Id: Iba7cc300c127bc05127d122fa5acc1ccc871a76b
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentState.java
https://android-review.googlesource.com/1108716
https://goto.google.com/android-sha1/092d14cd22c174405221b930665869f7c9fc8b65
Branch: androidx-master-dev
commit 092d14cd22c174405221b930665869f7c9fc8b65
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 14:46:02 2019
Remove FragmentState mInstance
Make FragmentState a simple Parcelable by removing
its mInstance field and its instantiate() method.
This required we change the order of restoring:
instead of reconnecting retained Fragments with their
FragmentState instances, we first iterate through
all FragmentState instances and do one of two things:
1) Reconnect the retained fragment if it exists
2) Create a new fragment from the FragmentState
This allows us to do just one pass through our
FragmentState objects and run the edge case of
detecting retained fragments created after the
state was saved after creating the set of active
fragments.
Test: all existing tests pass
BUG: 139536619
Change-Id: Iba7cc300c127bc05127d122fa5acc1ccc871a76b
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentState.java
ra...@google.com <ra...@google.com> #4
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 66d98b470d8887fdd16461c2da0df69ec62dd8d8
Author: Ian Lake <ilake@google.com>
Date: Fri Aug 16 13:22:20 2019
Add skeleton for FragmentStateManager
Store a HashMap of mWho to FragmentStateManager
instances. This serves as the minimal starting
point for moving logic that interacts with a
single Fragment from FragmentManager into
FragmentStateManager.
Test: existing tests pass, new FragmentStateManagerTest
BUG: 139536619
Change-Id: Ifaea272a3202e918143f65245fb98157ad971827
A fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/BackStackState.java
M fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
A fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1109796
https://goto.google.com/android-sha1/66d98b470d8887fdd16461c2da0df69ec62dd8d8
Branch: androidx-master-dev
commit 66d98b470d8887fdd16461c2da0df69ec62dd8d8
Author: Ian Lake <ilake@google.com>
Date: Fri Aug 16 13:22:20 2019
Add skeleton for FragmentStateManager
Store a HashMap of mWho to FragmentStateManager
instances. This serves as the minimal starting
point for moving logic that interacts with a
single Fragment from FragmentManager into
FragmentStateManager.
Test: existing tests pass, new FragmentStateManagerTest
BUG: 139536619
Change-Id: Ifaea272a3202e918143f65245fb98157ad971827
A fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/BackStackState.java
M fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
A fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
dr...@gmail.com <dr...@gmail.com> #5
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 92d322f39a3436da8ce0e59f55194c70abe1fb8e
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 16:46:05 2019
Move saving/restore Fragment state to FragmentStateManager
Separate the saving and restoring of Fragment
instances from FragmentManager, allowing
FragmentStateManager to fully manage the
restoration of Fragments.
Test: new FragmentStateManagerTest, existing tests
BUG: 139536619
Change-Id: Iba0df8f617d7805995612eaad52e26f5f2e99707
M fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1109797
https://goto.google.com/android-sha1/92d322f39a3436da8ce0e59f55194c70abe1fb8e
Branch: androidx-master-dev
commit 92d322f39a3436da8ce0e59f55194c70abe1fb8e
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 16:46:05 2019
Move saving/restore Fragment state to FragmentStateManager
Separate the saving and restoring of Fragment
instances from FragmentManager, allowing
FragmentStateManager to fully manage the
restoration of Fragments.
Test: new FragmentStateManagerTest, existing tests
BUG: 139536619
Change-Id: Iba0df8f617d7805995612eaad52e26f5f2e99707
M fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
ra...@google.com <ra...@google.com> #6
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 5318d9bfea4baae7190875673fd087b9526c30c5
Author: Ian Lake <ilake@google.com>
Date: Wed Sep 04 13:40:58 2019
Move ensureInflatedFragmentView to FragmentStateManager
Move this logic into FragmentStateManager.
Test: all existing tests pass
BUG: 139536619
Change-Id: I1f8fafba5e35fda592bbe13954eed2ff355aae55
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1113752
https://goto.google.com/android-sha1/5318d9bfea4baae7190875673fd087b9526c30c5
Branch: androidx-master-dev
commit 5318d9bfea4baae7190875673fd087b9526c30c5
Author: Ian Lake <ilake@google.com>
Date: Wed Sep 04 13:40:58 2019
Move ensureInflatedFragmentView to FragmentStateManager
Move this logic into FragmentStateManager.
Test: all existing tests pass
BUG: 139536619
Change-Id: I1f8fafba5e35fda592bbe13954eed2ff355aae55
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
dr...@gmail.com <dr...@gmail.com> #7
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 61497f97f85997ed8bf4dd58d6e513e810784f1e
Author: Ian Lake <ilake@google.com>
Date: Fri Sep 20 14:23:27 2019
Have FragmentStateManager compute the Fragment's max state
Move logic restricting the Fragment to a particular
state into FragmentStateManager.
Test: all existing tests pass
BUG: 139536619
Change-Id: Ief8528ed9990da515f0765199f64f4ca04bd2494
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1126844
https://goto.google.com/android-sha1/61497f97f85997ed8bf4dd58d6e513e810784f1e
Branch: androidx-master-dev
commit 61497f97f85997ed8bf4dd58d6e513e810784f1e
Author: Ian Lake <ilake@google.com>
Date: Fri Sep 20 14:23:27 2019
Have FragmentStateManager compute the Fragment's max state
Move logic restricting the Fragment to a particular
state into FragmentStateManager.
Test: all existing tests pass
BUG: 139536619
Change-Id: Ief8528ed9990da515f0765199f64f4ca04bd2494
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
ra...@google.com <ra...@google.com> #8
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 359974ef2d7a879b4a96373b96e1c537b252dfa2
Author: Ian Lake <ilake@google.com>
Date: Thu Sep 26 14:56:35 2019
Move start/resume/pause/stop to FragmentStateManager
Test: Fragment tests still pass
BUG: 139536619
Change-Id: I1cabaaa361e9b0d0e142b06e5d9ee4a7c1b1e4c4
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1129475
https://goto.google.com/android-sha1/359974ef2d7a879b4a96373b96e1c537b252dfa2
Branch: androidx-master-dev
commit 359974ef2d7a879b4a96373b96e1c537b252dfa2
Author: Ian Lake <ilake@google.com>
Date: Thu Sep 26 14:56:35 2019
Move start/resume/pause/stop to FragmentStateManager
Test: Fragment tests still pass
BUG: 139536619
Change-Id: I1cabaaa361e9b0d0e142b06e5d9ee4a7c1b1e4c4
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
dr...@gmail.com <dr...@gmail.com> #9
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 669381d551753c454afbf5ff5d0cfb66bac78247
Author: Ian Lake <ilake@google.com>
Date: Tue Oct 01 11:14:39 2019
Move attach/detach to FragmentStateManager
Logic in dealing with target fragments and
mActive remain in moveToState() for now.
Test: Fragment tests still pass
BUG: 139536619
Change-Id: If65bce1b315b7e5a9010a39044c406cb3d3be37d
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1131672
https://goto.google.com/android-sha1/669381d551753c454afbf5ff5d0cfb66bac78247
Branch: androidx-master-dev
commit 669381d551753c454afbf5ff5d0cfb66bac78247
Author: Ian Lake <ilake@google.com>
Date: Tue Oct 01 11:14:39 2019
Move attach/detach to FragmentStateManager
Logic in dealing with target fragments and
mActive remain in moveToState() for now.
Test: Fragment tests still pass
BUG: 139536619
Change-Id: If65bce1b315b7e5a9010a39044c406cb3d3be37d
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
ra...@google.com <ra...@google.com> #10
Project: platform/frameworks/support
Branch: androidx-master-dev
commit bef266f3ab8734afc111c70413687380ad2d9161
Author: Ian Lake <ilake@google.com>
Date: Tue Oct 01 11:04:33 2019
Move create/destroy to FragmentStateManager
Due to restoreSaveState()'s cleaning up
of no longer valid retained Fragments, moveToState()
now always creates a FragmentStateManager if one
does not exist so that we can continue to run the
create callbacks despite these retained Fragments
not being in mActive.
Interactions with mExitAnimationCancellationSignals
as part of destroying the Fragment remain in
moveToState() for now.
Test: Fragment tests still pass
BUG: 139536619
Change-Id: Id05f4e78f6fc0cef6be9cc7abc0d58b40b2e3f43
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1131291
https://goto.google.com/android-sha1/bef266f3ab8734afc111c70413687380ad2d9161
Branch: androidx-master-dev
commit bef266f3ab8734afc111c70413687380ad2d9161
Author: Ian Lake <ilake@google.com>
Date: Tue Oct 01 11:04:33 2019
Move create/destroy to FragmentStateManager
Due to restoreSaveState()'s cleaning up
of no longer valid retained Fragments, moveToState()
now always creates a FragmentStateManager if one
does not exist so that we can continue to run the
create callbacks despite these retained Fragments
not being in mActive.
Interactions with mExitAnimationCancellationSignals
as part of destroying the Fragment remain in
moveToState() for now.
Test: Fragment tests still pass
BUG: 139536619
Change-Id: Id05f4e78f6fc0cef6be9cc7abc0d58b40b2e3f43
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
ap...@google.com <ap...@google.com> #11
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 0d32170b1e98a00ab67b487241bbba687ad99d79
Author: Ian Lake <ilake@google.com>
Date: Tue Oct 01 10:49:06 2019
Move restoreState() out of moveToState()
We can safely call restoreState() immediately
after creating a FragmentStateManager instance
rather than waiting for moveToState().
This simplifies the logic required since
we know we'll have the correct value of
mDeferStart before computeMaxState().
Test: all existing tests still pass
BUG: 139536619
Change-Id: I4602a4987c4f20c9ccf3a083b8ecb48f963be1c4
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1130436
https://goto.google.com/android-sha1/0d32170b1e98a00ab67b487241bbba687ad99d79
Branch: androidx-master-dev
commit 0d32170b1e98a00ab67b487241bbba687ad99d79
Author: Ian Lake <ilake@google.com>
Date: Tue Oct 01 10:49:06 2019
Move restoreState() out of moveToState()
We can safely call restoreState() immediately
after creating a FragmentStateManager instance
rather than waiting for moveToState().
This simplifies the logic required since
we know we'll have the correct value of
mDeferStart before computeMaxState().
Test: all existing tests still pass
BUG: 139536619
Change-Id: I4602a4987c4f20c9ccf3a083b8ecb48f963be1c4
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
Description
When I set up a periodic job, I want the first in the series to be performed INSTANTLY (the user expects it... they hit a button and are waiting for an immediate result), and then for subsequent ones to be performed based on the periodic schedule (more vague timings is fine... the user is no longer waiting).
When you set up a periodic work request *without* a flex interval, it can run anytime in the set interval, i.e. from NOW until the end of the interval. If the device is awake when the periodic work request is scheduled, which is the case for me, I find that the first work in the series is generally performed at the START of the interval, i.e. NOW... though "NOW" may not be instantly (it's up to the device to decide... may be delayed a few seconds).
Because it cannot be guaranteed that the first periodic work will be performed *instantly*, instead I do an explicit call to the work-performing function outside of the WorkManager realm, and put a flexInterval on the periodic work of 5 mins so that the first periodic work will certainly not be performed straight away, but instead it will be near the end of the first period, most likely 5 mins before the end. This is not quite ideal (first gap between work runs is not quite a full interval) but it's OK... the user won't care or even notice it runs 5 mins "early" the first time.
Now, I thought that the ability to set an "initialDelay" in 2.1.0 would solve my problems... so that I could:
(a) still make an explicit call to the work-performing function to do the immediate work, guaranteed to be NOW (the user expects that)
(b) set up a periodic work request WITHOUT flexInterval (i.e. use the whole interval) and WITH an initial delay equal to the period "interval"
That way, I get the immediate work done, and then after "interval" the periodic work request is scheduled, and because (let's assume) the device is still awake, the first periodic work will likely perform at the START of the interval, i.e. almost straight away, i.e. pretty close to exactly one "interval" after the user set the schedule going.
BUT I'm not finding that. Let's say that "interval" of the periodic work is 15 mins, and I set an "initial delay" also of 15 mins, and I set this going when the user hits the button. I find that the immediate work is performed at 0 mins (triggered explicitly, not by WorkManager, so that's as expected), then at 15 mins NOTHING happens, and only at 30 mins does the first periodic work actually run.
It seems that either the first periodic work happens at the END of the first interval (15-30 mins) and not the start (like it usually does, if the device is awake and not busy), or WorkManager delayed first periodic interval to be at 30-45 mins, i.e. it waited 30 mins not 15 mins, twice what I asked for.
So, how is "setInitialDelay" for a periodic work request meant to work? It doesn't just wait "delay" (instead of not waiting at all) and then enqueue the periodic work request?