From cdcc1e3d7b57fdddcbc0c9b9595c80719d38dc98 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Mon, 8 Aug 2022 00:02:48 +0200 Subject: update gradle plugin to version 7.2.2, compile and target sdk to API 31, androidx libraries and leakcanary to latest versions --- app/build.gradle | 36 ++++++----------- app/src/main/AndroidManifest.xml | 7 +++- .../se/leap/bitmaskclient/base/BitmaskApp.java | 46 ++++++---------------- .../base/fragments/NavigationDrawerFragment.java | 30 +++++++------- build.gradle | 6 +-- gradle/wrapper/gradle-wrapper.properties | 6 +-- tor-android | 2 +- 7 files changed, 48 insertions(+), 85 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7eec00b0..668f0783 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,9 +4,9 @@ import java.util.regex.Pattern apply plugin: 'com.android.application' android { - compileSdkVersion 30 + compileSdkVersion 31 ndkVersion "21.4.7075529" - buildToolsVersion '30.0.3' + buildToolsVersion '31.0.0' compileOptions { targetCompatibility 1.8 @@ -25,7 +25,7 @@ android { versionCode 163000 versionName "1.1.5" minSdkVersion 16 - targetSdkVersion 30 + targetSdkVersion 31 vectorDrawables.useSupportLibrary = true buildConfigField 'boolean', 'openvpn3', 'false' @@ -404,9 +404,7 @@ dependencies { //TODO: remove that library androidTestImplementation 'com.jayway.android.robotium:robotium-solo:5.6.3' testImplementation 'org.json:json:20180813' - debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2' - releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2' - betaImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2' + debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' annotationProcessor 'com.squareup.dagger:dagger-compiler:1.2.2' implementation 'com.jakewharton:butterknife:10.2.1' @@ -416,15 +414,15 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.6' implementation 'com.squareup.okhttp3:okhttp:3.12.12' implementation 'androidx.legacy:legacy-support-core-utils:1.0.0' - implementation 'androidx.annotation:annotation:1.1.0' + implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'com.google.android.material:material:1.2.1' - implementation 'androidx.fragment:fragment:1.2.5' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'com.google.android.material:material:1.6.1' + implementation 'androidx.fragment:fragment:1.5.1' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' + implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0' implementation 'de.hdodenhof:circleimageview:3.1.0' @@ -486,23 +484,11 @@ android.applicationVariants.all { variant -> } } - -// Ensure the no-op dependency is always used in JVM tests. -configurations.all { config -> - if (config.name.contains('UnitTest')) { - config.resolutionStrategy.eachDependency { details -> - if (details.requested.group == 'com.squareup.leakcanary' && details.requested.name == 'leakcanary-android') { - details.useTarget(group: details.requested.group, name: 'leakcanary-android-no-op', version: details.requested.version) - } - } - } -} - subprojects { afterEvaluate {project -> if (project.hasProperty("android")) { android { - compileSdkVersion 30 + compileSdkVersion 31 } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 75b166d9..6a9de68d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -41,6 +41,7 @@ android:theme="@style/BitmaskTheme"> @@ -48,6 +49,7 @@ @@ -62,7 +64,8 @@ + android:permission="android.permission.RECEIVE_BOOT_COMPLETED" + android:exported="true"> @@ -79,6 +82,7 @@ android:label="@string/app_name" android:launchMode="singleTop" android:theme="@style/SplashTheme" + android:exported="true" > @@ -126,6 +130,7 @@ android:icon="@drawable/vpn_disconnected" android:label="@string/qs_title" android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" + android:exported="true" android:value="true"> diff --git a/app/src/main/java/se/leap/bitmaskclient/base/BitmaskApp.java b/app/src/main/java/se/leap/bitmaskclient/base/BitmaskApp.java index 3f73e49d..828ef27d 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/BitmaskApp.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/BitmaskApp.java @@ -17,6 +17,15 @@ package se.leap.bitmaskclient.base; +import static android.content.Intent.CATEGORY_DEFAULT; +import static se.leap.bitmaskclient.appUpdate.DownloadBroadcastReceiver.ACTION_DOWNLOAD; +import static se.leap.bitmaskclient.appUpdate.DownloadServiceCommand.CHECK_VERSION_FILE; +import static se.leap.bitmaskclient.appUpdate.DownloadServiceCommand.DOWNLOAD_UPDATE; +import static se.leap.bitmaskclient.base.models.Constants.BROADCAST_DOWNLOAD_SERVICE_EVENT; +import static se.leap.bitmaskclient.base.models.Constants.SHARED_PREFERENCES; +import static se.leap.bitmaskclient.base.utils.ConfigHelper.isCalyxOSWithTetheringSupport; +import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getSavedProviderFromSharedPreferences; + import android.content.Context; import android.content.IntentFilter; import android.content.SharedPreferences; @@ -25,27 +34,14 @@ import androidx.appcompat.app.AppCompatDelegate; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.multidex.MultiDexApplication; -import com.squareup.leakcanary.LeakCanary; -import com.squareup.leakcanary.RefWatcher; - import se.leap.bitmaskclient.BuildConfig; import se.leap.bitmaskclient.appUpdate.DownloadBroadcastReceiver; -import se.leap.bitmaskclient.eip.EipSetupObserver; import se.leap.bitmaskclient.base.models.ProviderObservable; -import se.leap.bitmaskclient.tethering.TetheringStateManager; import se.leap.bitmaskclient.base.utils.PRNGFixes; -import se.leap.bitmaskclient.tor.TorNotificationManager; +import se.leap.bitmaskclient.eip.EipSetupObserver; +import se.leap.bitmaskclient.tethering.TetheringStateManager; import se.leap.bitmaskclient.tor.TorStatusObservable; -import static android.content.Intent.CATEGORY_DEFAULT; -import static se.leap.bitmaskclient.base.models.Constants.BROADCAST_DOWNLOAD_SERVICE_EVENT; -import static se.leap.bitmaskclient.base.models.Constants.SHARED_PREFERENCES; -import static se.leap.bitmaskclient.appUpdate.DownloadBroadcastReceiver.ACTION_DOWNLOAD; -import static se.leap.bitmaskclient.appUpdate.DownloadServiceCommand.CHECK_VERSION_FILE; -import static se.leap.bitmaskclient.appUpdate.DownloadServiceCommand.DOWNLOAD_UPDATE; -import static se.leap.bitmaskclient.base.utils.ConfigHelper.isCalyxOSWithTetheringSupport; -import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getSavedProviderFromSharedPreferences; - /** * Created by cyberta on 24.10.17. */ @@ -53,7 +49,6 @@ import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getSavedProvider public class BitmaskApp extends MultiDexApplication { private final static String TAG = BitmaskApp.class.getSimpleName(); - private RefWatcher refWatcher; private ProviderObservable providerObservable; private DownloadBroadcastReceiver downloadBroadcastReceiver; private TorStatusObservable torStatusObservable; @@ -62,12 +57,6 @@ public class BitmaskApp extends MultiDexApplication { @Override public void onCreate() { super.onCreate(); - if (LeakCanary.isInAnalyzerProcess(this)) { - // This process is dedicated to LeakCanary for heap analysis. - // You should not init your app in this process. - return; - } - refWatcher = LeakCanary.install(this); // Normal app init code...*/ PRNGFixes.apply(); SharedPreferences preferences = getSharedPreferences(SHARED_PREFERENCES, MODE_PRIVATE); @@ -89,17 +78,4 @@ public class BitmaskApp extends MultiDexApplication { LocalBroadcastManager.getInstance(this.getApplicationContext()).registerReceiver(downloadBroadcastReceiver, intentFilter); } } - - /** - * Use this method to get a RefWatcher object that checks for memory leaks in the given context. - * Call refWatcher.watch(this) to check if all references get garbage collected. - * @param context - * @return the RefWatcher object - */ - public static RefWatcher getRefWatcher(Context context) { - BitmaskApp application = (BitmaskApp) context.getApplicationContext(); - return application.refWatcher; - } - - } diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/NavigationDrawerFragment.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/NavigationDrawerFragment.java index c5593bf7..cdfee7b2 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/NavigationDrawerFragment.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/NavigationDrawerFragment.java @@ -17,6 +17,20 @@ package se.leap.bitmaskclient.base.fragments; +import static android.content.Context.MODE_PRIVATE; +import static android.view.View.GONE; +import static android.view.View.VISIBLE; +import static se.leap.bitmaskclient.base.models.Constants.DONATION_URL; +import static se.leap.bitmaskclient.base.models.Constants.ENABLE_DONATION; +import static se.leap.bitmaskclient.base.models.Constants.PREFERRED_CITY; +import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_KEY; +import static se.leap.bitmaskclient.base.models.Constants.REQUEST_CODE_SWITCH_PROVIDER; +import static se.leap.bitmaskclient.base.models.Constants.SHARED_PREFERENCES; +import static se.leap.bitmaskclient.base.utils.ConfigHelper.isDefaultBitmask; +import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getPreferredCity; +import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getSaveBattery; +import static se.leap.bitmaskclient.base.utils.PreferenceHelper.saveBattery; + import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; @@ -56,21 +70,6 @@ import se.leap.bitmaskclient.eip.EipStatus; import se.leap.bitmaskclient.providersetup.ProviderListActivity; import se.leap.bitmaskclient.tethering.TetheringObservable; -import static android.content.Context.MODE_PRIVATE; -import static android.view.View.GONE; -import static android.view.View.VISIBLE; -import static se.leap.bitmaskclient.base.BitmaskApp.getRefWatcher; -import static se.leap.bitmaskclient.base.models.Constants.DONATION_URL; -import static se.leap.bitmaskclient.base.models.Constants.ENABLE_DONATION; -import static se.leap.bitmaskclient.base.models.Constants.PREFERRED_CITY; -import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_KEY; -import static se.leap.bitmaskclient.base.models.Constants.REQUEST_CODE_SWITCH_PROVIDER; -import static se.leap.bitmaskclient.base.models.Constants.SHARED_PREFERENCES; -import static se.leap.bitmaskclient.base.utils.ConfigHelper.isDefaultBitmask; -import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getPreferredCity; -import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getSaveBattery; -import static se.leap.bitmaskclient.base.utils.PreferenceHelper.saveBattery; - /** * Fragment used for managing interactions for and presentation of a navigation drawer. * See the @@ -433,7 +432,6 @@ public class NavigationDrawerFragment extends Fragment implements SharedPreferen @Override public void onDestroy() { super.onDestroy(); - getRefWatcher(getActivity()).watch(this); preferences.unregisterOnSharedPreferenceChangeListener(this); } diff --git a/build.gradle b/build.gradle index a995fd04..6fbe3207 100644 --- a/build.gradle +++ b/build.gradle @@ -5,11 +5,10 @@ buildscript { name 'Google' } mavenCentral() - jcenter() - google() + google() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.2' + classpath 'com.android.tools.build:gradle:7.2.2' } } @@ -24,6 +23,5 @@ allprojects { name 'Google' } mavenCentral() - jcenter() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5e689c00..aaa09975 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Feb 11 23:53:25 CET 2021 +#Sun Aug 07 23:06:29 CEST 2022 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip +zipStoreBase=GRADLE_USER_HOME diff --git a/tor-android b/tor-android index 9ff61322..4fa3a347 160000 --- a/tor-android +++ b/tor-android @@ -1 +1 @@ -Subproject commit 9ff61322e25b290cc8d5eb288974840ac2355b03 +Subproject commit 4fa3a34726544a52d8dc8a1920928830aac2172a -- cgit v1.2.3 From 23ef4c290db8692465fc66c3467129cf72eafe78 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Mon, 8 Aug 2022 00:11:37 +0200 Subject: update docker images for SDK 31, keep docker image version in sync with Android SDK version --- docker/android-emulator/Dockerfile | 6 +++--- docker/android-sdk/Dockerfile | 14 +++----------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/docker/android-emulator/Dockerfile b/docker/android-emulator/Dockerfile index b5f5f32b..c30d4970 100644 --- a/docker/android-emulator/Dockerfile +++ b/docker/android-emulator/Dockerfile @@ -1,7 +1,7 @@ FROM registry.0xacab.org/leap/bitmask_android/android-sdk:latest MAINTAINER LEAP Encryption Access Project -LABEL Description="Android SDK baseimage based on debian:bullseye" Vendor="LEAP" Version="27" +LABEL Description="Android SDK baseimage based on debian:bullseye" Vendor="LEAP" Version="31" # Make sure debconf doesn't complain about lack of interactivity ENV DEBIAN_FRONTEND noninteractive @@ -30,9 +30,9 @@ RUN apt-get update -qq && \ RUN echo y | sdkmanager "emulator" # Install System Images for emulators -RUN echo y | sdkmanager "system-images;android-30;google_apis;x86" +RUN echo y | sdkmanager "system-images;android-31;google_apis;x86" # RUN echo y | sdkmanager "system-images;android-27;google_apis;x86" # RUN echo y | sdkmanager "system-images;android-25;google_apis;x86_64" # RUN echo y | sdkmanager "system-images;android-23;google_apis;x86_64" -RUN echo no | avdmanager create avd --force --name testApi30 --abi google_apis/x86 --package 'system-images;android-30;google_apis;x86' +RUN echo no | avdmanager create avd --force --name testApi31 --abi google_apis/x86 --package 'system-images;android-31;google_apis;x86' diff --git a/docker/android-sdk/Dockerfile b/docker/android-sdk/Dockerfile index 6093cf18..6f996616 100644 --- a/docker/android-sdk/Dockerfile +++ b/docker/android-sdk/Dockerfile @@ -1,7 +1,7 @@ FROM 0xacab.org:4567/leap/docker/debian:bullseye_amd64 MAINTAINER LEAP Encryption Access Project -LABEL Description="Android SDK baseimage based on debian:bullseye" Vendor="LEAP" Version="27.0.0" +LABEL Description="Android SDK baseimage based on debian:bullseye" Vendor="LEAP" Version="31.0.0" # ------------------------------------------------------ # --- Install System Dependencies @@ -77,18 +77,10 @@ RUN echo y | sdkmanager "platform-tools" # echo y to accept google licenses RUN sdkmanager "extras;android;m2repository" # Install Build Tools (Please keep in descending order) -RUN sdkmanager "build-tools;30.0.3" -# RUN sdkmanager "build-tools;28.0.3" -# RUN sdkmanager "build-tools;27.0.3" -# RUN sdkmanager "build-tools;25.0.2" -# RUN sdkmanager "build-tools;23.0.3" +RUN sdkmanager "build-tools;31.0.0" # Install Target SDK Packages (Please keep in descending order) -RUN sdkmanager "platforms;android-30" -# RUN sdkmanager "platforms;android-28" -# RUN sdkmanager "platforms;android-27" -# RUN sdkmanager "platforms;android-25" -# RUN sdkmanager "platforms;android-23" +RUN sdkmanager "platforms;android-31" RUN echo "accept all licenses" # Accept all licenses -- cgit v1.2.3 From e74c8f429e6d18d7e8a7312b414c8739f8a8f48e Mon Sep 17 00:00:00 2001 From: cyBerta Date: Mon, 8 Aug 2022 16:49:21 +0200 Subject: update bitmaskcore / IPtProxy / snowflake --- bitmaskcore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitmaskcore b/bitmaskcore index a63cd6b2..f3229dc6 160000 --- a/bitmaskcore +++ b/bitmaskcore @@ -1 +1 @@ -Subproject commit a63cd6b2c573edb1de3119f4a158f840e4c4a9b2 +Subproject commit f3229dc6ce31ba0962657bcd2c29e999224d8853 -- cgit v1.2.3 From 363ce8d3c1fd9e25b5fa2423691d13f845f4f89f Mon Sep 17 00:00:00 2001 From: cyBerta Date: Mon, 8 Aug 2022 19:03:50 +0200 Subject: update ics-openvpn to v0.7.38, OpenSSL to 3.0.5, asio to 1.23 --- ics-openvpn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ics-openvpn b/ics-openvpn index a9dc600d..08ec7607 160000 --- a/ics-openvpn +++ b/ics-openvpn @@ -1 +1 @@ -Subproject commit a9dc600d98c2549fd05019449c0990f057174547 +Subproject commit 08ec76072a374ba2bdd2ef09df7cffc74652ee01 -- cgit v1.2.3 From 090b2f7412889aa18dc0c7cfe28c829b9e36384e Mon Sep 17 00:00:00 2001 From: cyBerta Date: Mon, 8 Aug 2022 19:04:28 +0200 Subject: apply some minor bugfixes from ics-openvpn --- app/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java | 3 ++- app/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java b/app/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java index 2b0c785e..219c1394 100644 --- a/app/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java +++ b/app/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java @@ -13,6 +13,7 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.NetworkInfo.State; import android.os.Handler; +import android.os.Looper; import android.preference.PreferenceManager; import se.leap.bitmaskclient.R; @@ -133,7 +134,7 @@ public class DeviceStateReceiver extends BroadcastReceiver implements ByteCountL trafficdata = new LinkedList<>(); mManagement = management; mManagement.setPauseCallback(this); - mDisconnectHandler = new Handler(); + mDisconnectHandler = new Handler(Looper.getMainLooper()); } diff --git a/app/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java b/app/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java index 00147828..0edfeaeb 100644 --- a/app/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java +++ b/app/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java @@ -457,7 +457,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement { } // atuo detection of proxy - if (proxyType == Connection.ProxyType.NONE) { + if (proxyType == Connection.ProxyType.NONE && mProfile != null) { SocketAddress proxyaddr = ProxyDetection.detectProxy(mProfile); if (proxyaddr instanceof InetSocketAddress) { InetSocketAddress isa = (InetSocketAddress) proxyaddr; -- cgit v1.2.3 From e26a3ada50f9f6d3f0f91f2fd03cff2c776cccf7 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Mon, 8 Aug 2022 19:05:27 +0200 Subject: fix path to openvpn libs --- scripts/build_deps.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build_deps.sh b/scripts/build_deps.sh index 14d2bafc..0d37d7de 100755 --- a/scripts/build_deps.sh +++ b/scripts/build_deps.sh @@ -8,7 +8,7 @@ function quit { SCRIPT_DIR=$(dirname "$0") BASE_DIR="$SCRIPT_DIR/.." DIR_OVPNASSETS=./ics-openvpn/main/build/ovpnassets -DIR_OVPNLIBS=./ics-openvpn/main/build/intermediates/cmake/noovpn3/release/obj +DIR_OVPNLIBS=./ics-openvpn/main/build/intermediates/cmake/skeletonRelease/obj DIR_GOLIBS=./bitmaskcore/lib/ #FILE_X86=./go/out/x86/piedispatcherlib #FILE_ARM=./go/out/armeabi-v7a/piedispatcherlib -- cgit v1.2.3 From fa5beea3c70a5e20304953b8dbf778ca8f338536 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Mon, 8 Aug 2022 20:52:11 +0200 Subject: update tor-android, fix gradle configuration resolve issue --- tor-android | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tor-android b/tor-android index 4fa3a347..b7bf4551 160000 --- a/tor-android +++ b/tor-android @@ -1 +1 @@ -Subproject commit 4fa3a34726544a52d8dc8a1920928830aac2172a +Subproject commit b7bf4551ff359e92e9023778715f39a4c7eb7cff -- cgit v1.2.3 From 6d705263bf0fd616926d2c64ada98e2ee7740024 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Mon, 8 Aug 2022 22:59:50 +0200 Subject: set IMMUTABLE flags for PendingIntents on Android 12+ --- .../appUpdate/DownloadNotificationManager.java | 6 ++++-- .../java/se/leap/bitmaskclient/base/utils/ConfigHelper.java | 9 +++++++++ .../se/leap/bitmaskclient/eip/VpnNotificationManager.java | 11 ++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/app/src/fatweb/java/se.leap.bitmaskclient/appUpdate/DownloadNotificationManager.java b/app/src/fatweb/java/se.leap.bitmaskclient/appUpdate/DownloadNotificationManager.java index 336802c6..687fc66a 100644 --- a/app/src/fatweb/java/se.leap.bitmaskclient/appUpdate/DownloadNotificationManager.java +++ b/app/src/fatweb/java/se.leap.bitmaskclient/appUpdate/DownloadNotificationManager.java @@ -33,6 +33,7 @@ import se.leap.bitmaskclient.R; import static android.content.Intent.CATEGORY_DEFAULT; import static se.leap.bitmaskclient.appUpdate.DownloadBroadcastReceiver.ACTION_DOWNLOAD; +import static se.leap.bitmaskclient.base.utils.ConfigHelper.getPendingIntentFlags; public class DownloadNotificationManager { private Context context; @@ -130,12 +131,13 @@ public class DownloadNotificationManager { private PendingIntent getDownloadIntent() { Intent downloadIntent = new Intent(context, DownloadBroadcastReceiver.class); downloadIntent.setAction(ACTION_DOWNLOAD); - return PendingIntent.getBroadcast(context, 0, downloadIntent, PendingIntent.FLAG_CANCEL_CURRENT); + + return PendingIntent.getBroadcast(context, 0, downloadIntent, getPendingIntentFlags()); } private PendingIntent getInstallIntent() { Intent installIntent = new Intent(context, InstallActivity.class); - return PendingIntent.getActivity(context, 0, installIntent, PendingIntent.FLAG_CANCEL_CURRENT); + return PendingIntent.getActivity(context, 0, installIntent, getPendingIntentFlags()); } public void cancelNotifications() { diff --git a/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java b/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java index 91894fb8..96518a8e 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java @@ -18,6 +18,7 @@ package se.leap.bitmaskclient.base.utils; import static se.leap.bitmaskclient.base.models.Constants.DEFAULT_BITMASK; +import android.app.PendingIntent; import android.content.Context; import android.content.res.Resources; import android.os.Build; @@ -307,4 +308,12 @@ public class ConfigHelper { return BuildConfig.obfsvpn_use_kcp; } } + + public static int getPendingIntentFlags() { + int flags = PendingIntent.FLAG_CANCEL_CURRENT; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + flags |= PendingIntent.FLAG_IMMUTABLE; + } + return flags; + } } diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/VpnNotificationManager.java b/app/src/main/java/se/leap/bitmaskclient/eip/VpnNotificationManager.java index a869210e..31893fb1 100644 --- a/app/src/main/java/se/leap/bitmaskclient/eip/VpnNotificationManager.java +++ b/app/src/main/java/se/leap/bitmaskclient/eip/VpnNotificationManager.java @@ -55,6 +55,7 @@ import static se.leap.bitmaskclient.base.MainActivity.ACTION_SHOW_VPN_FRAGMENT; import static se.leap.bitmaskclient.base.models.Constants.ASK_TO_CANCEL_VPN; import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_START; import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_STOP_BLOCKING_VPN; +import static se.leap.bitmaskclient.base.utils.ConfigHelper.getPendingIntentFlags; /** * Created by cyberta on 14.01.18. @@ -305,19 +306,19 @@ public class VpnNotificationManager { private PendingIntent getMainActivityIntent() { Intent startActivity = new Intent(context, StartActivity.class); - return PendingIntent.getActivity(context, 0, startActivity, PendingIntent.FLAG_CANCEL_CURRENT); + return PendingIntent.getActivity(context, 0, startActivity, getPendingIntentFlags()); } private PendingIntent getStartOpenvpnIntent() { Intent startIntent = new Intent(context, EIP.class); startIntent.setAction(EIP_ACTION_START); - return PendingIntent.getService(context, 0, startIntent, PendingIntent.FLAG_CANCEL_CURRENT); + return PendingIntent.getService(context, 0, startIntent, getPendingIntentFlags()); } private PendingIntent getStopVoidVpnIntent() { Intent stopVoidVpnIntent = new Intent (context, VoidVpnService.class); stopVoidVpnIntent.setAction(EIP_ACTION_STOP_BLOCKING_VPN); - return PendingIntent.getService(context, 0, stopVoidVpnIntent, PendingIntent.FLAG_CANCEL_CURRENT); + return PendingIntent.getService(context, 0, stopVoidVpnIntent, getPendingIntentFlags()); } private PendingIntent getDisconnectIntent() { @@ -325,7 +326,7 @@ public class VpnNotificationManager { disconnectVPN.setAction(ACTION_SHOW_VPN_FRAGMENT); disconnectVPN.putExtra(ASK_TO_CANCEL_VPN, true); disconnectVPN.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); - return PendingIntent.getActivity(context, 0, disconnectVPN, PendingIntent.FLAG_CANCEL_CURRENT); + return PendingIntent.getActivity(context, 0, disconnectVPN, getPendingIntentFlags()); } private PendingIntent getUserInputIntent(String needed) { @@ -334,7 +335,7 @@ public class VpnNotificationManager { intent.putExtra("need", needed); Bundle b = new Bundle(); b.putString("need", needed); - PendingIntent pIntent = PendingIntent.getActivity(context, 12, intent, 0); + PendingIntent pIntent = PendingIntent.getActivity(context, 12, intent, getPendingIntentFlags()); return pIntent; } -- cgit v1.2.3