Status Update
Comments
db...@gmail.com <db...@gmail.com> #2
Is this specific to navigation? Or can this be reproduced with another other Composable component?
vi...@google.com <vi...@google.com>
bo...@google.com <bo...@google.com>
wd...@google.com <wd...@google.com> #3
It only happens inside of a NavHost. So, yes, it seems to be specific to navigation.
wd...@google.com <wd...@google.com>
wd...@google.com <wd...@google.com> #4
This was caused by the fix to BackHandler
lifecycle aware. The problem here is that the NavController
registers its lifecycle and added an observer to the Activity
Lifecycle
in composition while the BackHandler
registers its observer on the Activity
Lifecycle
in a DisposbleEffect
. This means that the NavController
will always get Lifecycle callbacks before the BackHandler
, so the components listening the the NavController
's lifecycle (like the NavBackStackEntry) will always get their Lifecycle callbacks before the BackHandler
as well.
This should be addressed by work coming in 2.7 to integrate the BackHandler
into the NavHost
.
wd...@google.com <wd...@google.com> #5
Branch: androidx-main
commit d2c5efe67531a30fb9f1a129d52beb1e9ece0b29
Author: Jeremy Woods <jbwoods@google.com>
Date: Wed May 31 23:09:54 2023
Integrate BackHandler into NavHost
Instead of NavHost taking over the onBackPressedDispatcher from the
Activity, we should just make it use a BackHandler. This will ensure
that it interacters with the other BackHandlers in Compose correctly.
RelNote: "`NavHost` now correctly intercepts system back calls even
after the Activity has been `STOPPED` and `RESUMED`."
Test: modified tests
Bug: 279118447
Change-Id: Icb6deab996d122487243f0d3d775af8c15fc7c25
M navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavHostTest.kt
M navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavHost.kt
wd...@google.com <wd...@google.com>
db...@gmail.com <db...@gmail.com> #6
This has been fixed internally and will be available in Navigation 2.7.0-beta01.
wd...@google.com <wd...@google.com> #7
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-compose:2.7.0-beta01
wd...@google.com <wd...@google.com> #8
[Deleted User] <[Deleted User]> #9
I wouldn't say this is fixed. If you add a back-callback in the activity which is lifecycle aware, and then background->foreground the app, the activity back-callback will be put on top of the callback pile. This leads to that any BackHandler in your composable will NOT be triggered.
The best workaround I have for now is to use the non-lifecycle aware function in the activity.
class MainActivity : FragmentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// open fragment which hoists the composables
...
if (savedInstanceState == null) {
onBackPressedDispatcher.addCallback(onBackPressedCallback = someBackHandling())
// onBackPressedDispatcher.addCallback(owner = this, onBackPressedCallback = someBackHandling) // not this one
}
}
Description
Please Read:https://developer.android.com/studio/report-bugs.html#emulator-bugs
Android Studio Version: Unknown
Emulator Version (Emulator--> Extended Controls--> Emulator Version): 31.3.14-9322596 HAXM / KVM Version: HAXM 7.6.5
Android SDK Tools: 26.1.1
Host Operating System: Windows 10 Pro
CPU Manufacturer: Intel CPU Virtualization is supported 64-bit CPU
RAM: 16327 MB
GPU: GPU #1 Make: 1002 Model: AMD Radeon HD 7570 Device ID: 675d
Build Fingerprint:
AVD Details: Name: Pixel_2_API_33_2 CPU/ABI: x86_64 Path: C:\Users\Doron.android\avd\Pixel_2_API_33_2.avd Target: google_apis_playstore [Google Play] (API level 33) Skin: pixel_2 SD Card: 512M AvdId: Pixel_2_API_33_2 PlayStore.enabled: true avd.ini.displayname: Pixel 2 API 33 2 avd.ini.encoding: UTF-8 disk.dataPartition.size: 6442450944 fastboot.chosenSnapshotFile: fastboot.forceChosenSnapshotBoot: no fastboot.forceColdBoot: no fastboot.forceFastBoot: yes hw.accelerometer: yes hw.arc: false hw.audioInput: yes hw.battery: yes hw.camera.back: virtualscene hw.camera.front: emulated hw.cpu.ncore: 4 hw.dPad: no hw.device.hash2: MD5:55acbc835978f326788ed66a5cd4c9a7 hw.device.manufacturer: Google hw.device.name: pixel_2 hw.gps: yes hw.gpu.enabled: yes hw.gpu.mode: auto hw.initialOrientation: Portrait hw.keyboard: yes hw.lcd.density: 420 hw.lcd.height: 1920 hw.lcd.width: 1080 hw.mainKeys: no hw.ramSize: 1536 hw.sdCard: yes hw.sensors.orientation: yes hw.sensors.proximity: yes hw.trackBall: no image.sysdir.1: system-images\android-33\google_apis_playstore\x86_64
runtime.network.latency: none runtime.network.speed: full showDeviceFrame: yes skin.dynamic: yes tag.display: Google Play tag.id: google_apis_playstore vm.heapSize: 228
Steps to Reproduce Bug:
Write Hebrew characters when sending a message - the message is not sent. Same happens if sent programmatically from another app. The happens on API 33 but not on API 29.
Expected Behavior:
Observed Behavior: