Fixed
Status Update
Comments
ap...@google.com <ap...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-master-dev
commit ce50c8cb5faa43f67a3ae4f5f4413c3ae39f3873
Author: Jeremy Woods <jbwoods@google.com>
Date: Mon Mar 16 13:04:37 2020
Ensure DialogFragment call setContentView before shown
The lifecycleObserver in dialog fragment does not get an onChanged call
until the lifecyle moves to STARTED, which means the call to
setContentView happens after the dialog is already shown.
The viewLifecycleOwnerLiveData should use observeForever, instead of
observe, to ensure that setContentView is called in time for it to have
an affect when the dialog is shown. It is okay for DialogFragment to use
this since is manually removes the observer in onDetach.
Test: add DialogFragmentTest test
Bug: 151652127
Relnote: "Fixed a regression from Fragment 1.3.0-alpha02 that caused
DialogFragment set the content view after the dialog was shown."
Change-Id: Ia27adfcd90d7a9420fcec0309c9cba774f600311
M fragment/fragment/src/androidTest/java/androidx/fragment/app/DialogFragmentTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java
https://android-review.googlesource.com/1260539
Branch: androidx-master-dev
commit ce50c8cb5faa43f67a3ae4f5f4413c3ae39f3873
Author: Jeremy Woods <jbwoods@google.com>
Date: Mon Mar 16 13:04:37 2020
Ensure DialogFragment call setContentView before shown
The lifecycleObserver in dialog fragment does not get an onChanged call
until the lifecyle moves to STARTED, which means the call to
setContentView happens after the dialog is already shown.
The viewLifecycleOwnerLiveData should use observeForever, instead of
observe, to ensure that setContentView is called in time for it to have
an affect when the dialog is shown. It is okay for DialogFragment to use
this since is manually removes the observer in onDetach.
Test: add DialogFragmentTest test
Bug: 151652127
Relnote: "Fixed a regression from Fragment 1.3.0-alpha02 that caused
DialogFragment set the content view after the dialog was shown."
Change-Id: Ia27adfcd90d7a9420fcec0309c9cba774f600311
M fragment/fragment/src/androidTest/java/androidx/fragment/app/DialogFragmentTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java
ap...@google.com <ap...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 4734bc39cf00d0cec42e87e64bb54ebd14c33bc3
Author: Jeremy Woods <jbwoods@google.com>
Date: Wed Mar 18 09:20:23 2020
Ensure onRestoreInstanceState gets called after setContentView
If setContentView is called after the state of a DialogFragment is
restored, that state is essentially erased. We should ensure that
onRestoreInstanceState is always called after we setContentView.
This change moves the saving and restoring of the dialogState to the
onViewStateRestored method.
Test: updated dialogFragmentTest
Bug: 151652127
Change-Id: If81709abc50ab78a7b6f4ab25eb20be432cb51d5
M fragment/fragment/src/androidTest/java/androidx/fragment/app/DialogFragmentTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java
https://android-review.googlesource.com/1261699
Branch: androidx-master-dev
commit 4734bc39cf00d0cec42e87e64bb54ebd14c33bc3
Author: Jeremy Woods <jbwoods@google.com>
Date: Wed Mar 18 09:20:23 2020
Ensure onRestoreInstanceState gets called after setContentView
If setContentView is called after the state of a DialogFragment is
restored, that state is essentially erased. We should ensure that
onRestoreInstanceState is always called after we setContentView.
This change moves the saving and restoring of the dialogState to the
onViewStateRestored method.
Test: updated dialogFragmentTest
Bug: 151652127
Change-Id: If81709abc50ab78a7b6f4ab25eb20be432cb51d5
M fragment/fragment/src/androidTest/java/androidx/fragment/app/DialogFragmentTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java
jb...@google.com <jb...@google.com> #4
This has been fixed internally and will be available in the Fragment 1.3.0-alpha03 release.
Description
Component used: Fragment
Version used: 1.3.0-alpha02
Devices/Android versions reproduced on: all
The changes introduced into DialogFragment in version 1.3.0-alpha02 are causing BottomSheetDialogFragment to not be display properly. Instead of the Dialog being full screen width, it is a centered, floating dialog.
This reason for this is the recent changes use observe() with a LifecycleObserver on the DialogFragment's viewLifecycleOwnerLiveData , and calls setContentView in the observer's onChanged, instead of in the deprecated onActivityCreated() . But because it uses observe, the observer is not active until the LifecycleOwner is started, so onChanged is not called until the Dialog is started, which means it is shown before setContentView is called.
Instead of observe, the viewLifecycleOwnereLiveData should use observeForever() so that the observer can receive events before the LifecycleOwner is started.