* fix: share double-stop guard via VpnProtocol base class
* feat: add local proxy core module
* feat: local proxy settings api
* feat: wire local proxy into app controllers
* feat: local proxy settings ui
* feat: arbitrate shared xray engine ownership via ipc tokens
* fix: remove connection type
* chore: add qthttpserver to desktop ci qt modules
* fix: local proxy port fallback and active port reporting
* fix: keep text field button aligned when error is shown
* fix: hide local proxy for free servers and guard device unlink
* fix: show local proxy state per server
* fix: anchor text field button to content
* fix: adapt local proxy pages to design
* fix: copy logic and port logic
* refactor: move local proxy files to controllers and utils
* refactor: merge local proxy into LocalProxyController
* refactor: reuse gateway config request and keep local proxy state in memory
---------
Co-authored-by: vkamn <vk@amnezia.org>
* fix: prepare the gateway request once instead of a blocking callback per attempt
* chore: libagw 1.0.8, gateway and failover timeouts 6s, health check 1s
* chore: change amnezia hosting description
* fix: ios safe areas and ds component alignment
- extend window into ios safe areas, pass insets to PageController
- use dark interface style and portrait-only orientation on iphone
- drop bottom inset while keyboard is open
- align controls with figma: title-only cards, caption height,
selectable list items, nav bar spacing, chip hover, switch rows
* fix: news settings icon unread badge
* fix: align ds effects with figma
- three-layer selection glow for switch, radio and connect ring
- connect button disk with glow in all states
- snackbar elevate shadow spread, dropdown panel shadow
- backdrop blur for loading overlay container
- pressed state layer 0.1 for icon buttons, segments, list items, cards
* refactor: remove Qt5Compat.GraphicalEffects
* feature: cover gateway service config import
* fix: use AmneziaApplication in gateway service import test
* feature: cover gateway service update
* fix: drain gateway workers before test teardown
* feat: split app/tunnel log streams and add in-app log viewer
* fix: report real save result on android
* remove dead logging code & open qt log on start, stop ne logging on auto-off, pin log date locale
* drop dead share api and simplify logs ui components
* add ru strings for logs redesign
* Feat: location separation
* remove temp code
* remove tab filter
* fixed models
* remove settings button in native configs
* reset & fixed crash focus
* derive country list use-case set from listId
* fixed: search field: Esc on empty field -> passed on, page closes
* country list: three levels, split by full catalog
* favorites: keep unstarred row until list refresh
* favorites on configuration files screen
* split country list by visible locations
* hysteresis for region split: split above 15, merge below 13
* section counters ignore search, follow chip
* empty state: suggest switching keyboard layout
* section header: counter in parentheses on collapsed sections only
* country list: scroll-linked large title header
* current section expanded on entry without overwriting saved collapse
* country list: raise scrollbar above pinned overlays, drawer above it
* qml: collapsing header component, config files header, country list parts extracted
* country list: ignore unknown use case ids from catalog
* country list: use case names from catalog (nameLocalized), ui language in model
* country list: collapsed sections kept for the session only, as in the task
* country list: design review fixes
* favorites limit: toast from the mockup with 'show' action
* toast: geometry, typography, shadow and action button from figma
Three recipes use f-string syntax that is only valid on Python 3.12+
(PEP 701): reusing the same quote character inside an f-string
expression, and using a backslash inside one.
recipes/amnezia-xray-bindings/conanfile.py:115
recipes/tun2socks/conanfile.py:118
recipes/hev-socks5-tunnel/conanfile.py:63-65
On older interpreters Conan fails to load the recipe with a SyntaxError
before resolving a single dependency, so the build cannot start:
SyntaxError: unexpected character after line continuation character
This is not platform specific. It is invisible in CI only because
ubuntu-latest ships Python 3.12+. Debian 12 (bookworm), current stable
and the base for Raspberry Pi OS, ships Python 3.11.
Hoist the expressions out of the f-strings, and use single quotes for
the nested string literals. Behaviour is unchanged on every version.
Verified with python3 -m py_compile on Python 3.11.2 (aarch64,
Debian 12): all three fail before this change and pass after.
* basic tests adaptation
* fix: ui servers model and controller test awg config
* fix: platforms test builds
* build dirs inspection
* fix: changed paths for tests and tests artifacts
* fix: 'deploy' parent dir
* windows ctest configuration and macos dependencies inspection
* windows check executable and macos copy openssl libs
* windows test executables check and macos copy openssl
* changed some path on windows
* android apk list
* fix: updated android apk path
* Verify Android test files
* fix: build tests only with AMNEZIA_BUILD_TESTS
* fix: copy openssl runtime next to test_openssl_library
* fix: awg2 test config and inverted description checks
* chore: move run_android_tests.sh to client/tests and drop personal paths
* chore: gate tests by option, scope secrets and drop global concurrency in ci
* chore: serialized vps test job, scoped secrets, backup secret guard, test data lookup
---------
Co-authored-by: MrMirDan <8mirdan8@gmail.com>
* Add Google Play Billing Library
* Disable Qt debugger sleep
* Add billing module, provide a separate build for Google Play
* Add a method to detect Google Play build
* Add method to get the list of offers
* Add methods to verify and purchase subscriptions
* refactor: modify response json
* feat: add purchase to UI
* feat: add test purchase android
* fix: merge with new structure, fix payment flow
* fix: build flow for new conan structure
* fix: add build android via Win
* fix: fix multi-ABI filter
* fix: split payment to detect payment type
* fix: add artifact apk
* fix: add check purchase on restore
* fix: release keystore
* fix: copy apk to right path
* fix: separate oss/play build
* fix: simply build AAB
* fix: add custom target for Play billing
* fix: add logs billing
* fix: add support market types, add logs
* fix: revert market field, up android GP version, fix subscription plan parser
* fix: add support getSubscriptionInfo and subscriptions/restore
* fix: update api endpoint and pay logic
* fix: add logs and rename restore func
* fix: add ios logs
* fix: rename restore function, fix icon resource error
* fix: double purchase android
* fix: update Google Play Billing Library to 8.0.0
* fix: prefer free trial subscription offer on Android purchase
Bump APP version to 2137.
* fix: up kotlin version compiler
* fix: sync price for PlayMarket from GP
* fix: add logs for Google Play price merge
* fix: show App Store intro offer discount price in catalog
* feat: add trial support for multi platform, redesign PageSetupWizardApiPremiumInfo
* feat: add logs android
* fix: tighten spacing Change plan and test period tag
* fix: UI text changes
* fix: upgrade existing android subscription and add renew logic
* feat: add support upgrade CP plan without call subscription
* fix: add billing logs for plan
* fix: show upgrade success as notification
* fix: call getSubscriptionInfo/importServiceFromMarket on upgrade instead of skipping
* fix: restore ios prod var
* fix: remove noisy debug logs
* chore: up version code
* fix: getSubscriptionInfo used removed GatewayRequestData after rebase
* fix: aab in sep tasks
* fix: warn before subscription upgrade/downgrade purchase
* chore: add acknowledgePlayPurchase
* refactor: add store purchase controller
* feat: use same acknowledge method as appstore
* fix: IOS add upgrade
* fix: change QML warn message
* refactor: dedupe Play purchase validation and startup billing query
* chore: log purchaseToken through the Android purchase flow
* fix: resolve Android active plan by base plan id
* fix: remove comment
* fix: subscribe to Transaction.updates before Transaction.unfinished
* fix: update days values
* fix: genuine restore failure when another transaction was a duplicate
* fix: remove debug lines and comment
* chore: cleanup logs
---------
Co-authored-by: albexk <albexk@proton.me>
Co-authored-by: vkamn <vk@amnezia.org>