Status Update
Comments
su...@google.com <su...@google.com> #2
Jeremy, is this still an issue? I think the problem was that you had two transitions targeting the same View for the same action (e.g. two Slide() transitions).
ru...@gmail.com <ru...@gmail.com> #3
I have a similar issue with plain AnimatorSet:
set.start()
set.pause()
set.setCurrentPlayTime(100)
set.setCurrentPlayTime(0)
set.setCurrentPlayTime(100)
set.resume()
doesn't play animation in resume().
an...@google.com <an...@google.com> #4
Should clarify that if I filter out setCurrentPlayTime(0)
(or replace it with setCurrentPlayTime(1)
) it works well.
Also even with setCurrentPlayTime(0)
, onAnimationEnd
is notified with correct delay (as if the animation has played).
ru...@gmail.com <ru...@gmail.com> #5
@
I think that is intended for Animator. If you set the currentPlayTime
to 0 or the total duration the animator completes. We do some
ra...@google.com <ra...@google.com> #6
Did some investigation on the Fragment side and it seems like the merged transition is targeting correctly.
Exiting Transition: Slide@aa9288e: tgts(android.widget.LinearLayout{f9add3d})
>>>>> ExitingViews <<<<<
View: android.widget.LinearLayout{f9add3d}
Entering Transition: Slide@35b8af: tgts(android.widget.LinearLayout{b7f24bc})
>>>>> EnteringViews <<<<<
View: android.widget.LinearLayout{b7f24bc}
Final merged transition: TransitionSet@7bc1c45:
TransitionSet@e133f9a:
Slide@aa9288e: tgts(android.widget.LinearLayout{f9add3d})
Slide@35b8af: tgts(android.widget.LinearLayout{b7f24bc})
merged transition passed to controlDelayedTransition: TransitionSet@7bc1c45:
TransitionSet@e133f9a:
Slide@aa9288e: tgts(android.widget.LinearLayout{f9add3d})
Slide@35b8af: tgts(android.widget.LinearLayout{b7f24bc})
Still digging.
ru...@gmail.com <ru...@gmail.com> #7
Branch: androidx-main
commit 567b7459329d1ec8d27a8c6fe1c4a86442065d7d
Author: Jeremy Woods <jbwoods@google.com>
Date: Tue Sep 26 20:06:54 2023
Add additional logging for transitions
Adding more debug logging in transitions to track the entering and
exiting transitions as well as the final merged transition and its
targets.
Test: added logging
Bug: 300157785
Change-Id: I0d9ad72b865422493c6c895ddb6115abf85eed16
M fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
Description
Version used: 2.1.0
Devices/Android versions reproduced on: 6.0
We're getting this crash on multiple devices:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.util.ArrayMap.containsKey(java.lang.Object)' on a null object reference
at android.os.BaseBundle.containsKey + 277(BaseBundle.java:277)
at androidx.work.impl.background.systemjob.SystemJobScheduler.getPendingJobIds + 331(SystemJobScheduler.java:331)
at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule + 138(SystemJobScheduler.java:138)
at androidx.work.impl.Schedulers.schedule + 93(Schedulers.java:93)
at androidx.work.impl.WorkManagerImpl.rescheduleEligibleWork + 587(WorkManagerImpl.java:587)
at androidx.work.impl.utils.ForceStopRunnable.run + 82(ForceStopRunnable.java:82)
at androidx.work.impl.utils.SerialExecutor$Task.run + 75(SerialExecutor.java:75)
at java.util.concurrent.ThreadPoolExecutor.runWorker + 1113(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run + 588(ThreadPoolExecutor.java:588)
at java.lang.Thread.run + 833(Thread.java:833)
For some reason, the mMap in BaseBundle is null and getPendingJobIds doesn't catch that:
for (JobInfo jobInfo : jobs) {
PersistableBundle extras = jobInfo.getExtras();
// The map inside extras can be null, so extras.containsKey can cause a NPE
if (extras != null && extras.containsKey(EXTRA_WORK_SPEC_ID)) {
if (workSpecId.equals(extras.getString(EXTRA_WORK_SPEC_ID))) {
jobIds.add(jobInfo.getId());
}
}
}