]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
android: Avoid IllegalStateException in state fragments
authorTobias Brunner <tobias@strongswan.org>
Mon, 18 Jun 2018 14:45:37 +0000 (16:45 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 3 Jul 2018 09:31:38 +0000 (11:31 +0200)
This happened if the state service got connected while such a fragment was
not visible (anymore or at all).

src/frontends/android/app/src/main/java/org/strongswan/android/ui/ImcStateFragment.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnStateFragment.java

index c6a80a1001875e613a44988c236427d4c769504e..a3cb245e8cffce4394d0ddf3d9d5aaf6e1bdc014 100644 (file)
@@ -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);
index 4042eb76137c651179227fd6a6b7f71d150f668b..9c92463dee1d9e288b97179d8f41103e2752e0e4 100644 (file)
@@ -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);