From: Tobias Brunner Date: Fri, 30 Jun 2017 07:46:56 +0000 (+0200) Subject: android: Close activity when dialog is canceled if it was not visible before X-Git-Tag: 5.6.0dr1~21^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6333a756eee462a4ae071b24fe3af218493cf9c5;p=thirdparty%2Fstrongswan.git android: Close activity when dialog is canceled if it was not visible before onPause/onResume() won't work because onPause() is called right before onNewIntent(). --- diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java index 76aef72588..efdeddd484 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java @@ -69,8 +69,10 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec private static final String PROFILE_REQUIRES_PASSWORD = "org.strongswan.android.MainActivity.REQUIRES_PASSWORD"; private static final String PROFILE_RECONNECT = "org.strongswan.android.MainActivity.RECONNECT"; private static final String PROFILE_DISCONNECT = "org.strongswan.android.MainActivity.DISCONNECT"; + private static final String PROFILE_FOREGROUND = "org.strongswan.android.MainActivity.PROFILE_FOREGROUND"; private static final String DIALOG_TAG = "Dialog"; + private boolean mIsVisible; private Bundle mProfileInfo; private VpnStateService mService; private final ServiceConnection mServiceConnection = new ServiceConnection() @@ -88,11 +90,11 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec if (START_PROFILE.equals(getIntent().getAction())) { - startVpnProfile(getIntent()); + startVpnProfile(getIntent(), false); } else if (DISCONNECT.equals(getIntent().getAction())) { - disconnect(); + disconnect(false); } } }; @@ -126,6 +128,20 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec } } + @Override + protected void onStart() + { + super.onStart(); + mIsVisible = true; + } + + @Override + protected void onStop() + { + super.onStop(); + mIsVisible = false; + } + /** * Due to launchMode=singleTop this is called if the Activity already exists */ @@ -136,11 +152,11 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec if (START_PROFILE.equals(intent.getAction())) { - startVpnProfile(intent); + startVpnProfile(intent, mIsVisible); } else if (DISCONNECT.equals(intent.getAction())) { - disconnect(); + disconnect(mIsVisible); } } @@ -245,6 +261,17 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec @Override public void onVpnProfileSelected(VpnProfile profile) + { + startVpnProfile(profile, true); + } + + /** + * Start the given VPN profile + * + * @param profile VPN profile + * @param foreground whether this was initiated when the activity was visible + */ + public void startVpnProfile(VpnProfile profile, boolean foreground) { Bundle profileInfo = new Bundle(); profileInfo.putLong(VpnProfileDataSource.KEY_ID, profile.getId()); @@ -258,6 +285,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec if (mService != null && (mService.getState() == State.CONNECTED || mService.getState() == State.CONNECTING)) { profileInfo.putBoolean(PROFILE_RECONNECT, mService.getProfile().getId() == profile.getId()); + profileInfo.putBoolean(PROFILE_FOREGROUND, foreground); ConfirmationDialog dialog = new ConfirmationDialog(); dialog.setArguments(profileInfo); @@ -290,8 +318,9 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec * if the profile doesn't exist. * * @param intent Intent that caused us to start this + * @param foreground whether this was initiated when the activity was visible */ - private void startVpnProfile(Intent intent) + private void startVpnProfile(Intent intent, boolean foreground) { long profileId = intent.getLongExtra(EXTRA_VPN_PROFILE_ID, 0); if (profileId <= 0) @@ -305,7 +334,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec if (profile != null) { - onVpnProfileSelected(profile); + startVpnProfile(profile, foreground); } else { @@ -316,7 +345,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec /** * Disconnect the current connection, if any (silently ignored if there is no connection). */ - private void disconnect() + private void disconnect(boolean foreground) { removeFragmentByTag(DIALOG_TAG); @@ -324,11 +353,11 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec { Bundle args = new Bundle(); args.putBoolean(PROFILE_DISCONNECT, true); + args.putBoolean(PROFILE_FOREGROUND, foreground); ConfirmationDialog dialog = new ConfirmationDialog(); dialog.setArguments(args); dialog.show(this.getSupportFragmentManager(), DIALOG_TAG); - return; } } @@ -429,6 +458,11 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec public void onClick(DialogInterface dialog, int which) { dismiss(); + if (!profileInfo.getBoolean(PROFILE_FOREGROUND)) + { /* if the app was not in the foreground before this action was triggered + * externally, we just close the activity if canceled */ + getActivity().finish(); + } } }).create(); }