My build includes Capacitor 7, Ionic 8, Vue3. The following test result are on a virtual Pixel 6 running Android 12.
Short version: On first rotation, the safeAreaChanged listener doesn't fire. On subsequent rotations, the listener receives safe area inset values appropriate for the prior orientation. Even immediately calling getSafeAreaInsets immediately in the listening function gets previous orientation inset values. Only after waiting 2 seconds and re-calling getSafeAreaInsets do we get the correct values for the current orientation.

My build includes Capacitor 7, Ionic 8, Vue3. The following test result are on a virtual Pixel 6 running Android 12.
Short version: On first rotation, the safeAreaChanged listener doesn't fire. On subsequent rotations, the listener receives safe area inset values appropriate for the prior orientation. Even immediately calling getSafeAreaInsets immediately in the listening function gets previous orientation inset values. Only after waiting 2 seconds and re-calling getSafeAreaInsets do we get the correct values for the current orientation.