VPNServiceRepository created its own service binding which caused conflicts
when unbinding - it would disconnect other components relying on the service.
Now NetworksFragmentViewModel uses ServiceAccessor from MainActivity, which
maintains a single shared service binding across all components.
* Remove onClickListener from peersBtn
When HomeFragment is destroyed
* Remove unused imports
* Check if BottomDialogFragment is attached to Activity
When setting its onShowListener
This restores the intent of PR #105 which removed the route change
notification feature. PR #100 accidentally reintroduced these elements
due to a force push that overwrote PR #105 changes."
* feat/add-android-tv-support
Add android TV support with the following changes:
- Implement new URLOpener interface with updated open method that accepts UserCode
- Add logic to MainActivity.java to detect Android TV, adjust UI and SSO flow accordingly
- Add QRCodeDialog.java to handle QR code/user code display logic
- Updated relevant layout xml files
- Add TV banner icon
---------
Co-authored-by: Ashley Mensah <ashleymensah@Ashleys-MBP.fritz.box>
- Fix the background color of the peers view in the light theme.
- Extend the background mask.
- Set a maximum width for the peers button.
- Change the shadow of the peers button in the dark theme.
* Add network change detector and listeners
* Add network toggle listener to VPNService
* Add unit tests for ConcreteNetworkChangeListener
* Rename NetworkChangeListener to NetworkAvailabilityListener
* Change EngineRunner's Set implementation
From HashSet to ConcurrentHashMap's KeySet,
which is thread-safe.
* Update submodule to the latest tag (v0.59.6)
* Add EngineRestarter to restart the Go engine
* Add LOGTAG to NetworkChangeDetector
* Add some documentation to NetworkToggleListener
* Use EngineRestarter as implementation of NetworkToggleListener
When subscribing to ConcreteNetworkAvailabilityListener
* Replace HashMap usage with ConcurrentHashMap
The availableNetworkTypes HashMap is accessed from network
callback threads without synchronization
* Wrap connectivityManager.unregisterNetworkCallback with try-catch
* Add restart runnable and timeout callback to EngineRestarter
Restart runnable is used as a debouncing mechanism to
prevent concurrent restarts
Timeout callback is to reset the isRestartInProgress flag's
value if the engine takes too long to restart
* Update git submodule reference to latest tag
* Reverse cleanup order on VPNService's onDestroy
Now it disposes of network listener components
before stopping engineRunner
* Ci tests (#99)
Add testing steps for CI
* Remove line break
---------
Co-authored-by: Zoltan Papp <zoltan.pmail@gmail.com>
* Add onLoginSuccess implementation to CustomTabURLOpener
This will bring the app's main activity to foreground
after successful authentication
* Check isOpened is set to true on 'onLoginSuccess' callback
* Update submodule reference and URL to forked repo
Once the forked repo's PR is approved, it will be
changed back to the original URL
* Update submodule reference and URL back to main