From d87be9b981186cd3dec74990353d2818127c288e Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Thu, 3 Apr 2025 15:54:02 +0200 Subject: [PATCH 1/2] android: Fix starting a managed profile as Always-on VPN The callbacks provided via ProcessLifecycleOwner are only triggered when Activities are started. However, when Android triggers the Always-on VPN it directly starts our VpnService subclass, no Activity. So the configs were not loaded and the VPN couldn't be initiated with a managed profile. This ensures the config is loaded right from the start of the app. And by registering for modifications in onCreate() we can also use the correct config if the app is never started in-between changes to the managed profiles and triggering the Always-on VPN. --- .../android/logic/StrongSwanApplication.java | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/StrongSwanApplication.java b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/StrongSwanApplication.java index 7f73dbfb86..a49e1a2696 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/StrongSwanApplication.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/StrongSwanApplication.java @@ -1,6 +1,6 @@ /* * Copyright (C) 2023 Relution GmbH - * Copyright (C) 2014-2024 Tobias Brunner + * Copyright (C) 2014-2025 Tobias Brunner * * Copyright (C) secunet Security Networks AG * @@ -38,14 +38,10 @@ import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import androidx.annotation.NonNull; import androidx.core.os.HandlerCompat; -import androidx.lifecycle.DefaultLifecycleObserver; -import androidx.lifecycle.LifecycleOwner; -import androidx.lifecycle.ProcessLifecycleOwner; import androidx.localbroadcastmanager.content.LocalBroadcastManager; -public class StrongSwanApplication extends Application implements DefaultLifecycleObserver +public class StrongSwanApplication extends Application { private static final String TAG = StrongSwanApplication.class.getSimpleName(); @@ -80,6 +76,7 @@ public class StrongSwanApplication extends Application implements DefaultLifecyc public void onCreate() { super.onCreate(); + StrongSwanApplication.mContext = getApplicationContext(); StrongSwanApplication.mInstance = this; @@ -92,24 +89,12 @@ public class StrongSwanApplication extends Application implements DefaultLifecyc mUserCertificateManager = new ManagedUserCertificateManager(mContext, mManagedConfigurationService, mDatabaseHelper); - ProcessLifecycleOwner.get().getLifecycle().addObserver(this); - } - - @Override - public void onResume(@NonNull LifecycleOwner owner) - { reloadManagedConfigurationAndNotifyListeners(); final IntentFilter restrictionsFilter = new IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED); registerReceiver(mRestrictionsReceiver, restrictionsFilter); } - @Override - public void onPause(@NonNull LifecycleOwner owner) - { - unregisterReceiver(mRestrictionsReceiver); - } - private void reloadManagedConfigurationAndNotifyListeners() { final Set uuids = new HashSet<>(mManagedConfigurationService.getManagedProfiles().keySet()); From 8036b3f932b26296b3beaaf8d4dc5ee2ea4bc49e Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Thu, 3 Apr 2025 16:35:47 +0200 Subject: [PATCH 2/2] android: New release after fixing Always-on VPN with managed profiles --- src/frontends/android/app/build.gradle | 4 ++-- .../android/app/src/main/play/release-notes/de-DE/default.txt | 4 ++++ .../android/app/src/main/play/release-notes/en-US/default.txt | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/frontends/android/app/build.gradle b/src/frontends/android/app/build.gradle index 105647580e..01eb5a189d 100644 --- a/src/frontends/android/app/build.gradle +++ b/src/frontends/android/app/build.gradle @@ -9,8 +9,8 @@ android { minSdkVersion 21 targetSdkVersion 34 - versionCode 88 - versionName "2.5.4" + versionCode 89 + versionName "2.5.5" externalNativeBuild { ndkBuild { diff --git a/src/frontends/android/app/src/main/play/release-notes/de-DE/default.txt b/src/frontends/android/app/src/main/play/release-notes/de-DE/default.txt index 5cc848590d..7cfb62d6d3 100644 --- a/src/frontends/android/app/src/main/play/release-notes/de-DE/default.txt +++ b/src/frontends/android/app/src/main/play/release-notes/de-DE/default.txt @@ -1,3 +1,7 @@ +# 2.5.5 # + +- Fixt den Start von verwalteten Profilen als Always-on VPN + # 2.5.4 # - Fixt Probleme beim Wiederherstellen der Verbindung diff --git a/src/frontends/android/app/src/main/play/release-notes/en-US/default.txt b/src/frontends/android/app/src/main/play/release-notes/en-US/default.txt index 23bc8c75c9..4b8b02ed00 100644 --- a/src/frontends/android/app/src/main/play/release-notes/en-US/default.txt +++ b/src/frontends/android/app/src/main/play/release-notes/en-US/default.txt @@ -1,3 +1,7 @@ +# 2.5.5 # + +- Fix initiating managed profiles as Always-on VPN + # 2.5.4 # - Fix issues when reestablishing the connection