* 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>
* feat: move amnezia hardcode from sources to cmake
* feat: move amnezia hardcode from sources to cmake
* refactor: remove prem v1 migration
* chore: move more branding
* fix: use host-matching architecture for iOS simulator builds
x86_64 was hardcoded; Apple Silicon Macs run arm64 simulators and Xcode 26
has no Rosetta simulator destinations, so simulators showed as unsupported.
* fix: mark the branded media assets catalog as a bundle resource
MACOSX_PACKAGE_LOCATION was set on the upstream Media.xcassets path while
target_sources uses CLIENT_IOS_MEDIA_ASSETS_PATH, so a branded catalog was
never compiled by actool and the app got a blank icon.
* fix: parametrize the Swift app-group identifier used by Log.swift
Log.swift hardcoded Amnezia's own app-group instead of the branded one,
since Swift -D flags can't carry the string value like the ObjC++ side
does. Generate a small Swift constants file instead, same pattern as
version.h.in, wired into all four targets that compile Log.swift.
* fix: use APPLICATION_NAME instead of hardcoded Amnezia in log line format
Every log line printed "Amnezia" regardless of branding; the log file name
two lines above this already used APPLICATION_NAME correctly.
* fix: restore branding fixes dropped by rebase, rename swiftInterop to swiftBridge
* fix: move more branding variables to cmake
* feat: move macOS branding from sources to cmake
- macos/app/Info.plist.in: app group, camera usage text, UTI ids and
descriptions now come from CLIENT_APPLICATION_NAME / BUILD_* variables,
mirroring ios/app/Info.plist.in
- macos/networkextension/Info.plist.in: bundle names and app group ids are
templated; the plist is configured by CMake into the binary dir because
Xcode only expands its own $(...) settings
- new knobs: CLIENT_MACOS_MEDIA_ASSETS_PATH, CLIENT_MACOS_APP_ICNS_PATH,
CLIENT_MACOS_PROVISIONING_PROFILE_SPECIFIER(_DEBUG),
CLIENT_MACOS_NE_PROVISIONING_PROFILE_SPECIFIER(_DEBUG)
* fix: resolve macOS pf template paths relative to the client source dir
CMAKE_SOURCE_DIR points at the wrapper project when the client is built as a
subproject, so the pf template lookup failed there.
* chore: separate brandings defaults
---------
Co-authored-by: vkamn <vk@amnezia.org>
* refactor: remove serverConfig struct
* refactor: add warnings for api v1 configs
* refactor: moved the server type definition to a separate namespace
* refactor: simplified gateway stacks
* fix: fixed server description
* fix: fixed postAsync reply usage
* fix: fixed validateConfig call
* fix: fixed server name in notifications
* fix: fixed initPrepareConfigHandler for lagacy configs
* refactor: move business logic from servers model
* refactor: move containersModel initialization
* refactor: added protocol ui controller and removed settings class from protocols model
* refactor: moved cli management to separate controller
* refactor: moved app split to separate controller
* refactor: moved site split to separate controller
* refactor: moved allowed dns to separate controller
* refactor: moved language logic to separate ui controller
* refactor: removed Settings from devices model
* refactor: moved configs and services api logit to separate core controller
* refactor: added a layer with a repository between the storage and controllers
* refactor: use child parent system instead of smart pointers for controllers and models initialization
* refactor: moved install functions from server controller to install controller
* refactor: install controller refactoring
* chore: renamed exportController to exportUiController
* refactor: separate export controller
* refactor: removed VpnConfigurationsController
* chore: renamed ServerController to SshSession
* refactor: replaced ServerController to SshSession
* chore: moved qml controllers to separate folder
* chore: include fixes
* chore: moved utils from core root to core/utils
* chore: include fixes
* chore: rename core/utils files to camelCase foramt
* chore: include fixes
* chore: moved some utils to api and selfhosted folders
* chore: include fixes
* chore: remove unused file
* chore: moved serialization folder to core/utils
* chore: include fixes
* chore: moved some files from client root to core/utils
* chore: include fixes
* chore: moved ui utils to ui/utils folder
* chore: include fixes
* chore: move utils from root to ui/utils
* chore: include fixes
* chore: moved configurators to core/configurators
* chore: include fixes
* refactor: moved iap logic from ui controller to core
* refactor: moved remaining core logic from ApiConfigsController to SubscriptionController
* chore: rename apiNewsController to apiNewsUiController
* refactor: moved core logic from news ui controller to core
* chore: renamed apiConfigsController to subscriptionUiController
* chore: include fixes
* refactor: merge ApiSettingsController with SubscriptionUiController
* chore: moved ui selfhosted controllers to separate folder
* chore: include fixes
* chore: rename connectionController to connectiomUiController
* refactor: moved core logic from connectionUiController
* chore: rename settingsController to settingsUiController
* refactor: move core logic from settingsUiController
* refactor: moved core controller signal/slot connections to separate class
* fix: newsController fixes after refactoring
* chore: rename model to camelCase
* chore: include fixes
* chore: remove unused code
* chore: move selfhosted core to separate folder
* chore: include fixes
* chore: rename importController to importUiController
* refactor: move core logic from importUiController
* chore: minor fixes
* chore: remove prem v1 migration
* refactor: remove openvpn over cloak and openvpn over shadowsocks
* refactor: removed protocolsForContainer function
* refactor: add core models
* refactor: replace json with c++ structs for server config
* refactor: move getDnsPair to ServerConfigUtils
* feat: add admin selfhosted config export test
* feat: add multi import test
* refactor: use coreController for tests
* feat: add few simple tests
* chore: qrepos in all core controllers
* feat: add test for settings
* refactor: remove repo dependency from configurators
* chore: moved protocols to core folder
* chore: include fixes
* refactor: moved containersDefs, defs, apiDefs, protocolsDefs to different places
* chore: include fixes
* chore: build fixes
* chore: build fixes
* refactor: remove q repo and interface repo
* feat: add test for ui servers model and controller
* chore: renamed to camelCase
* chore: include fixes
* refactor: moved core logic from sites ui controller
* fix: fixed api config processing
* fix: fixed processed server index processing
* refactor: protocol models now use c++ structs instead of json configs
* refactor: servers model now use c++ struct instead of json config
* fix: fixed default server index processing
* fix: fix logs init
* fix: fix secure settings load keys
* chore: build fixes
* fix: fixed clear settings
* fix: fixed restore backup
* fix: sshSession usage
* fix: fixed export functions signatures
* fix: return missing part from buildContainerWorker
* fix: fixed server description on page home
* refactor: add container config helpers functions
* refactor: c++ structs instead of json
* chore: add dns protocol config struct
* refactor: move config utils functions to config structs
* feat: add test for selfhosted server setup
* refactor: separate resources.qrc
* fix: fixed server rename
* chore: return nameOverriddenByUser
* fix: build fixes
* fix: fixed models init
* refactor: cleanup models usage
* fix: fixed models init
* chore: cleanup connections and functions signatures
* chore: cleanup updateModel calls
* feat: added cache to servers repo
* chore: cleanup unused functions
* chore: ssxray processing
* chore: remove transportProtoWithDefault and portWithDefault functions
* chore: removed proto types any and l2tp
* refactor: moved some constants
* fix: fixed native configs export
* refactor: remove json from processConfigWith functions
* fix: fixed processed server index usage
* fix: qml warning fixes
* chore: merge fixes
* chore: update tests
* fix: fixed xray config processing
* fix: fixed split tunneling processing
* chore: rename sites controllers and model
* chore: rename fixes
* chore: minor fixes
* chore: remove ability to load backup from "file with connection settings" button
* fix: fixed api device revoke
* fix: remove full model update when renaming a user
* fix: fixed premium/free server rename
* fix: fixed selfhosted new server install
* fix: fixed updateContainer function
* fix: fixed revoke for external premium configs
* feat: add native configs qr processing
* chore: codestyle fixes
* fix: fixed admin config create
* chore: again remove ability to load backup from "file with connection settings" button
* chore: minor fixes
* fix: fixed variables initialization
* fix: fixed qml imports
* fix: minor fixes
* fix: fix vpnConnection function calls
* feat: add buckup error handling
* fix: fixed admin config revok
* fix: fixed selfhosted awg installation
* fix: ad visability
* feat: add empty check for primary dns
* chore: minor fixes