Security & Play Protect (an effort to fix Google Play Protect false positive warning)
- Replaced Runtime.exec("logcat") with in-memory log buffer (AppLog)
- Removed setExecutable() call from Snowflake bridge — another Play Protect trigger
Bug Fixes
- Fixed Slipstream proxy-only mode failing with "Protected socket: result=false" — VpnService.protect() is now
skipped when no VPN interface exists - Fixed CancellationException being swallowed as a connection error instead of properly rethrown — coroutine
cancellation no longer masks the real disconnect cause
Internal
- All tunnel/bridge classes now use AppLog (in-memory ring buffer) instead of android.util.Log directly
- Debug log sheet reads from AppLog.lines StateFlow instead of parsing logcat output