From 01fc077bbf1e2c690e7c771fb0b0311351bcfc58 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Tue, 27 Feb 2024 14:59:29 +0100 Subject: bring setup activity back to foreground if provider setup is about to finish --- app/build.gradle | 1 + .../java/se/leap/bitmaskclient/base/BitmaskApp.java | 19 ++++++++++++++++++- .../se/leap/bitmaskclient/eip/EipSetupObserver.java | 15 +++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 171cad02..1393640b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -422,6 +422,7 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0' + implementation 'androidx.lifecycle:lifecycle-process:2.7.0' implementation 'de.hdodenhof:circleimageview:3.1.0' 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 0fa62285..c7e12491 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/BitmaskApp.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/BitmaskApp.java @@ -27,7 +27,11 @@ import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getSavedProvider import android.content.IntentFilter; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatDelegate; +import androidx.lifecycle.DefaultLifecycleObserver; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.ProcessLifecycleOwner; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.multidex.MultiDexApplication; @@ -49,7 +53,7 @@ import se.leap.bitmaskclient.tor.TorStatusObservable; * Created by cyberta on 24.10.17. */ -public class BitmaskApp extends MultiDexApplication { +public class BitmaskApp extends MultiDexApplication implements DefaultLifecycleObserver { private final static String TAG = BitmaskApp.class.getSimpleName(); private ProviderObservable providerObservable; @@ -74,6 +78,7 @@ public class BitmaskApp extends MultiDexApplication { providerSetupObservable = ProviderSetupObservable.getInstance(); EipSetupObserver.init(this); AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); + ProcessLifecycleOwner.get().getLifecycle().addObserver(this); if (!isCalyxOSWithTetheringSupport(this)) { TetheringStateManager.getInstance().init(this); } @@ -87,4 +92,16 @@ public class BitmaskApp extends MultiDexApplication { LocalBroadcastManager.getInstance(this.getApplicationContext()).registerReceiver(downloadBroadcastReceiver, intentFilter); } } + + @Override + public void onStart(@NonNull LifecycleOwner owner) { + DefaultLifecycleObserver.super.onPause(owner); + EipSetupObserver.setActivityForeground(true); + } + + @Override + public void onStop(@NonNull LifecycleOwner owner) { + DefaultLifecycleObserver.super.onResume(owner); + EipSetupObserver.setActivityForeground(false); + } } diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java b/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java index c8b8bea4..ed95b75c 100644 --- a/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java +++ b/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java @@ -38,6 +38,7 @@ import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_KEY; import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_PROFILE; import static se.leap.bitmaskclient.providersetup.ProviderAPI.CORRECTLY_DOWNLOADED_EIP_SERVICE; import static se.leap.bitmaskclient.providersetup.ProviderAPI.CORRECTLY_DOWNLOADED_GEOIP_JSON; +import static se.leap.bitmaskclient.providersetup.ProviderAPI.CORRECTLY_DOWNLOADED_VPN_CERTIFICATE; import static se.leap.bitmaskclient.providersetup.ProviderAPI.CORRECTLY_UPDATED_INVALID_VPN_CERTIFICATE; import static se.leap.bitmaskclient.providersetup.ProviderAPI.DELAY; import static se.leap.bitmaskclient.providersetup.ProviderAPI.DOWNLOAD_MOTD; @@ -80,6 +81,7 @@ import se.leap.bitmaskclient.base.utils.PreferenceHelper; import se.leap.bitmaskclient.providersetup.ProviderAPI; import se.leap.bitmaskclient.providersetup.ProviderAPICommand; import se.leap.bitmaskclient.providersetup.ProviderSetupObservable; +import se.leap.bitmaskclient.providersetup.activities.SetupActivity; import se.leap.bitmaskclient.tor.TorServiceCommand; import se.leap.bitmaskclient.tor.TorStatusObservable; @@ -96,6 +98,8 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta private String observedProfileFromVpnStatus; AtomicInteger reconnectTry = new AtomicInteger(); AtomicBoolean changingGateway = new AtomicBoolean(false); + + AtomicBoolean activityForeground = new AtomicBoolean(false); AtomicInteger setupNClosestGateway = new AtomicInteger(); private Vector listeners = new Vector<>(); private static EipSetupObserver instance; @@ -127,6 +131,10 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta return instance.setupNClosestGateway.get(); } + public static void setActivityForeground(boolean isForeground) { + instance.activityForeground.set(isForeground); + } + public static synchronized void addListener(EipSetupListener listener) { if (instance.listeners.contains(listener)) { return; @@ -235,6 +243,13 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta break; case PROVIDER_OK: Log.d(TAG, "PROVIDER OK - FETCH SUCCESSFUL"); + //no break, continue with next case + case CORRECTLY_DOWNLOADED_VPN_CERTIFICATE: + if (ProviderSetupObservable.getProgress() > 0 && !activityForeground.get()) { + Intent activityIntent = new Intent(appContext, SetupActivity.class); + activityIntent.setAction(Intent.ACTION_MAIN); + appContext.startActivity(activityIntent); + } break; case TOR_TIMEOUT: case TOR_EXCEPTION: -- cgit v1.2.3