I’m not too deep in the literature on this, but this is working as expected? your workaround is the real solution.
If you setup a VPN, android treats it as “metered” by default. While your wifi is treated unmetered, the vpn could use the parallel mobile data connection when it is unavailable and slurp up your traffic allowance. Using the split option, the Apps see the unmetered wifi directly and do their sync schpiel.
I could be wrong if the code somehow can handle the connection-inheritance situation, as said I didn’t read to deep into ConnectivityManager.
VPNs can be set unmetered (some do this deliberately, see example), but this exposes you to the traffic risk when outside your wifi.
- https://developer.android.com/reference/android/net/VpnService.Builder#setMetered(boolean)
- https://github.com/guardianproject/orbot/pull/432/files
- user of a VPN app complaining with reproduction repo - https://github.com/pia-foss/android/issues/20
- https://support.google.com/fi/thread/75537738/bug-android-11-treats-vpn-as-a-metered-connection?hl=en