From b3caf0f435c5a37dcccab73cf27d29ac31f38556 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Sat, 3 Feb 2024 00:11:25 +0100 Subject: fix foreground service permissions for Android API 34 --- app/src/main/AndroidManifest.xml | 7 +++++++ app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java | 4 +++- .../main/java/se/leap/bitmaskclient/eip/VoidVpnService.java | 7 ++++--- .../main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java | 10 +++++++++- 4 files changed, 23 insertions(+), 5 deletions(-) (limited to 'app/src/main') diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7d1ee39f..8cf2e6f4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,11 @@ + + + @@ -36,6 +41,7 @@ @@ -44,6 +50,7 @@ diff --git a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java index 5a618f10..506b04a6 100644 --- a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java +++ b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java @@ -5,6 +5,7 @@ package de.blinkt.openvpn.core; +import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED; import static de.blinkt.openvpn.core.ConnectionStatus.LEVEL_CONNECTED; import static de.blinkt.openvpn.core.ConnectionStatus.LEVEL_WAITING_FOR_USER_INPUT; import static de.blinkt.openvpn.core.NetworkSpace.IpAddress; @@ -33,6 +34,7 @@ import android.util.Log; import android.widget.Toast; import androidx.annotation.RequiresApi; +import androidx.core.app.ServiceCompat; import java.io.IOException; import java.lang.reflect.InvocationTargetException; @@ -1098,7 +1100,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac @Override public void onNotificationBuild(int notificationId, Notification notification) { - startForeground(notificationId, notification); + ServiceCompat.startForeground(this, notificationId, notification, FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED); } public void trigger_url_open(String info) { diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java b/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java index f08371c6..8e15ca3e 100644 --- a/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java +++ b/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java @@ -16,6 +16,7 @@ */ package se.leap.bitmaskclient.eip; +import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED; import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_START_ALWAYS_ON_VPN; import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_START_BLOCKING_VPN; import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_STOP_BLOCKING_VPN; @@ -33,11 +34,11 @@ import android.os.ParcelFileDescriptor; import android.system.OsConstants; import android.util.Log; +import androidx.core.app.ServiceCompat; + import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.IOException; -import java.util.Observable; -import java.util.Observer; import de.blinkt.openvpn.core.ConnectionStatus; import de.blinkt.openvpn.core.VpnStatus; @@ -210,7 +211,7 @@ public class VoidVpnService extends VpnService implements PropertyChangeListener @Override public void onNotificationBuild(int notificationId, Notification notification) { - startForeground(notificationId, notification); + ServiceCompat.startForeground(this, notificationId, notification, FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED); } public void startWithForegroundNotification() { diff --git a/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java b/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java index 9e95700c..abc029ff 100644 --- a/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java +++ b/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java @@ -16,6 +16,7 @@ package se.leap.bitmaskclient.tor; * along with this program. If not, see . */ +import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC; import static se.leap.bitmaskclient.tor.TorNotificationManager.TOR_SERVICE_NOTIFICATION_ID; import static se.leap.bitmaskclient.tor.TorStatusObservable.waitUntil; @@ -26,6 +27,7 @@ import android.os.Build; import android.util.Log; import androidx.annotation.WorkerThread; +import androidx.core.app.ServiceCompat; import org.torproject.jni.TorService; @@ -62,9 +64,15 @@ public class TorServiceCommand { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Notification notification = TorNotificationManager.buildTorForegroundNotification(context.getApplicationContext()); + if (notification == null) { + if (torServiceConnection != null) { + torServiceConnection.close(); + } + return false; + } //noinspection NewApi context.getApplicationContext().startForegroundService(torServiceIntent); - torServiceConnection.getService().startForeground(TOR_SERVICE_NOTIFICATION_ID, notification); + ServiceCompat.startForeground(torServiceConnection.getService(), TOR_SERVICE_NOTIFICATION_ID, notification, FOREGROUND_SERVICE_TYPE_DATA_SYNC); } else { context.getApplicationContext().startService(torServiceIntent); } -- cgit v1.2.3