Fixed
Status Update
Comments
da...@google.com <da...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-main
commit 93dc6213fe2e74aa9c9d3dcdb4551c6ad3a85ba4
Author: sanura <sanura@google.com>
Date: Thu Mar 16 01:59:33 2023
Add private initViewTreeOwners() to AppCompatDialog
Ensure that AppCompatDialog also sets initial view
tree owners, since it does not call through to
super.setContentView(), which would set them via
ComponentDialog.
RelNote: "`AppCompatDialog` now correctly sets the `LifecycleOwner`, `SavedStateRegistryOwner`, and `OnBackPressedDispatcherOwner` on the dialog's decor view via the ViewTree APIs, fixing issues when hosting a ComposeView within an AppCompatDialog. AppCompat now depends on Activity 1.7.0."
Bug: 261314581
Test: AppComptaDialogTest
Change-Id: Ib28abb12cc3c617b9ffed9e1450e48308dc7c3df
M appcompat/appcompat/build.gradle
A appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogTest.kt
M appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
https://android-review.googlesource.com/2493316
Branch: androidx-main
commit 93dc6213fe2e74aa9c9d3dcdb4551c6ad3a85ba4
Author: sanura <sanura@google.com>
Date: Thu Mar 16 01:59:33 2023
Add private initViewTreeOwners() to AppCompatDialog
Ensure that AppCompatDialog also sets initial view
tree owners, since it does not call through to
super.setContentView(), which would set them via
ComponentDialog.
RelNote: "`AppCompatDialog` now correctly sets the `LifecycleOwner`, `SavedStateRegistryOwner`, and `OnBackPressedDispatcherOwner` on the dialog's decor view via the ViewTree APIs, fixing issues when hosting a ComposeView within an AppCompatDialog. AppCompat now depends on Activity 1.7.0."
Bug: 261314581
Test: AppComptaDialogTest
Change-Id: Ib28abb12cc3c617b9ffed9e1450e48308dc7c3df
M appcompat/appcompat/build.gradle
A appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogTest.kt
M appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
ap...@google.com <ap...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-main
commit 6b7a0f963d43aa6a06b461d62743ed81adddce40
Author: sanura <sanura@google.com>
Date: Thu Mar 16 23:01:38 2023
Open up initViewTreeOwners() API for ComponentDialog and ComponentActivity
Making initViewTreeOwners() a public API in ComponentDialog
and ComponentActivity so it can be used by AppCompat.
RelNote: "`ComponentDialog` and `ComponentActivity` now
contain public API `initViewTreeOwners()` to be used to
initialize all view tree owners before setting the
content view."
Bug: 261314581
Test: all tests pass
Change-Id: Ibdce0a994b0daddc090e4ff58583ccba71612870
M activity/activity/api/current.txt
M activity/activity/api/public_plus_experimental_current.txt
M activity/activity/api/restricted_current.txt
M activity/activity/src/main/java/androidx/activity/ComponentActivity.java
M activity/activity/src/main/java/androidx/activity/ComponentDialog.kt
https://android-review.googlesource.com/2493317
Branch: androidx-main
commit 6b7a0f963d43aa6a06b461d62743ed81adddce40
Author: sanura <sanura@google.com>
Date: Thu Mar 16 23:01:38 2023
Open up initViewTreeOwners() API for ComponentDialog and ComponentActivity
Making initViewTreeOwners() a public API in ComponentDialog
and ComponentActivity so it can be used by AppCompat.
RelNote: "`ComponentDialog` and `ComponentActivity` now
contain public API `initViewTreeOwners()` to be used to
initialize all view tree owners before setting the
content view."
Bug: 261314581
Test: all tests pass
Change-Id: Ibdce0a994b0daddc090e4ff58583ccba71612870
M activity/activity/api/current.txt
M activity/activity/api/public_plus_experimental_current.txt
M activity/activity/api/restricted_current.txt
M activity/activity/src/main/java/androidx/activity/ComponentActivity.java
M activity/activity/src/main/java/androidx/activity/ComponentDialog.kt
da...@google.com <da...@google.com> #4
This has been fixed internally and will be available in the Activity 1.8.0-alpha03
release.
Description
Version used: 1.0.0-alpha01
Devices/Android versions reproduced on:
I have libraries that use viewmodels without injection and hilt causes a dual SavedStateProvider reregistration
Sample Project
Look at file BaseFragment
java.lang.IllegalArgumentException: SavedStateProvider with the given key is already registered
at androidx.savedstate.SavedStateRegistry.registerSavedStateProvider(SavedStateRegistry.java:111)
at androidx.lifecycle.SavedStateHandleController.attachToLifecycle(SavedStateHandleController.java:50)
at androidx.lifecycle.SavedStateHandleController.create(SavedStateHandleController.java:70)
at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:109)
at androidx.hilt.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:69)
at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:69)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:54)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:41)
at org.jdc.template.ui.fragment.BaseFragment.getBaseViewModel(Unknown Source:2)
at org.jdc.template.ui.fragment.BaseFragment.onActivityCreated(BaseFragment.kt:22)
at org.jdc.template.ux.directory.DirectoryFragment.onActivityCreated(DirectoryFragment.kt:52)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2717)
at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1425)
at android.app.Activity.performStart(Activity.java:7825)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3294)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)