From 0d9dd4b1507c9f3eb6f0957f8cf97c898e8db542 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 18 Jun 2018 16:45:37 +0200 Subject: [PATCH] android: Avoid IllegalStateException in state fragments This happened if the state service got connected while such a fragment was not visible (anymore or at all). --- .../org/strongswan/android/ui/ImcStateFragment.java | 9 ++++++++- .../org/strongswan/android/ui/VpnStateFragment.java | 10 ++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/ImcStateFragment.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/ImcStateFragment.java index c6a80a1001..a3cb245e8c 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/ImcStateFragment.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/ImcStateFragment.java @@ -49,6 +49,7 @@ public class ImcStateFragment extends Fragment implements VpnStateListener { private int mColorIsolate; private int mColorBlock; + private boolean mVisible; private TextView mStateView; private TextView mAction; private LinearLayout mButton; @@ -65,7 +66,11 @@ public class ImcStateFragment extends Fragment implements VpnStateListener public void onServiceConnected(ComponentName name, IBinder service) { mService = ((VpnStateService.LocalBinder)service).getService(); - mService.registerListener(ImcStateFragment.this); + if (mVisible) + { + mService.registerListener(ImcStateFragment.this); + updateView(); + } } }; @@ -149,6 +154,7 @@ public class ImcStateFragment extends Fragment implements VpnStateListener public void onResume() { super.onResume(); + mVisible = true; if (mService != null) { mService.registerListener(this); @@ -160,6 +166,7 @@ public class ImcStateFragment extends Fragment implements VpnStateListener public void onPause() { super.onPause(); + mVisible = false; if (mService != null) { mService.unregisterListener(this); diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnStateFragment.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnStateFragment.java index 4042eb7613..9c92463dee 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnStateFragment.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnStateFragment.java @@ -46,6 +46,7 @@ public class VpnStateFragment extends Fragment implements VpnStateListener { private static final String KEY_ERROR_CONNECTION_ID = "error_connection_id"; + private boolean mVisible; private TextView mProfileNameView; private TextView mProfileView; private TextView mStateView; @@ -72,8 +73,11 @@ public class VpnStateFragment extends Fragment implements VpnStateListener public void onServiceConnected(ComponentName name, IBinder service) { mService = ((VpnStateService.LocalBinder)service).getService(); - mService.registerListener(VpnStateFragment.this); - updateView(); + if (mVisible) + { + mService.registerListener(VpnStateFragment.this); + updateView(); + } } }; private OnClickListener mDisconnectListener = new OnClickListener() @@ -154,6 +158,7 @@ public class VpnStateFragment extends Fragment implements VpnStateListener public void onStart() { super.onStart(); + mVisible = true; if (mService != null) { mService.registerListener(this); @@ -165,6 +170,7 @@ public class VpnStateFragment extends Fragment implements VpnStateListener public void onStop() { super.onStop(); + mVisible = false; if (mService != null) { mService.unregisterListener(this); -- 2.39.2