Brings the app from 1.13.11 to 1.14.0-alpha.45, matching the sing-box core
now targeted by omv-dijiang. Fork customizations preserved: private
release.keystore and gradle heap limit (-Xmx4096m).
Dropped the 'temporary fix for building' neighbor-monitor stubs in
VPNService/ProxyService — upstream's new PlatformInterfaceWrapper now
provides the real startNeighborMonitor/closeNeighborMonitor implementations,
so the empty stubs would have overridden them.
The download progress indicator passed a deferred lambda
`progress = { progress!! }` reading UpdateState.downloadProgress
(MutableState<Float?>). Material3 invokes the lambda during
layout/draw, outside the composition snapshot that guarded it, so it
re-read the live state. ApkDownloader sets the value to null when the
response has no content length (total <= 0), and it can also flip while
the screen is being torn down, causing the `!!` to throw NPE.
Capture the value into an immutable local before branching so the
lambda closes over a non-null Float instead of re-reading live state.
On phones, the Connections list and Connection Details share a single
ModalBottomSheet. System back was consumed by the sheet's default dismiss
handler, closing the sheet and returning to Dashboard. The in-app back
button just cleared selectedConnectionId, returning to the list.
Add a BackHandler that runs only while a connection is selected, matching
the in-app back button behavior. Swipe-to-dismiss remains unchanged.
Move allLogs/bufferedLogs mutations in appendLogs, clearLogs,
and setDefaultLogLevel into viewModelScope.launch(Dispatchers.Main)
to avoid concurrent iteration from the search debounce flow.
Add a toggle in the service settings screen that calls
VpnService.Builder.allowBypass() when enabled, with a description
linking to Android documentation. Always show the Service item
in the settings list (remove battery-optimization-gated visibility).
- Use proper ClassLoader in ParceledListSlice.createFromParcel instead of null
- Add early root permission check in RootClient.bindService
- Migrate RootService.bind to bindOrTask for proper error propagation