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).
This commit is contained in:
Tobias Brunner
2018-07-03 11:31:38 +02:00
parent bc52868173
commit 0d9dd4b150
2 changed files with 16 additions and 3 deletions
@@ -49,6 +49,7 @@ public class ImcStateFragment extends Fragment implements VpnStateListener
{ {
private int mColorIsolate; private int mColorIsolate;
private int mColorBlock; private int mColorBlock;
private boolean mVisible;
private TextView mStateView; private TextView mStateView;
private TextView mAction; private TextView mAction;
private LinearLayout mButton; private LinearLayout mButton;
@@ -65,7 +66,11 @@ public class ImcStateFragment extends Fragment implements VpnStateListener
public void onServiceConnected(ComponentName name, IBinder service) public void onServiceConnected(ComponentName name, IBinder service)
{ {
mService = ((VpnStateService.LocalBinder)service).getService(); 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() public void onResume()
{ {
super.onResume(); super.onResume();
mVisible = true;
if (mService != null) if (mService != null)
{ {
mService.registerListener(this); mService.registerListener(this);
@@ -160,6 +166,7 @@ public class ImcStateFragment extends Fragment implements VpnStateListener
public void onPause() public void onPause()
{ {
super.onPause(); super.onPause();
mVisible = false;
if (mService != null) if (mService != null)
{ {
mService.unregisterListener(this); mService.unregisterListener(this);
@@ -46,6 +46,7 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
{ {
private static final String KEY_ERROR_CONNECTION_ID = "error_connection_id"; private static final String KEY_ERROR_CONNECTION_ID = "error_connection_id";
private boolean mVisible;
private TextView mProfileNameView; private TextView mProfileNameView;
private TextView mProfileView; private TextView mProfileView;
private TextView mStateView; private TextView mStateView;
@@ -72,8 +73,11 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
public void onServiceConnected(ComponentName name, IBinder service) public void onServiceConnected(ComponentName name, IBinder service)
{ {
mService = ((VpnStateService.LocalBinder)service).getService(); mService = ((VpnStateService.LocalBinder)service).getService();
mService.registerListener(VpnStateFragment.this); if (mVisible)
updateView(); {
mService.registerListener(VpnStateFragment.this);
updateView();
}
} }
}; };
private OnClickListener mDisconnectListener = new OnClickListener() private OnClickListener mDisconnectListener = new OnClickListener()
@@ -154,6 +158,7 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
public void onStart() public void onStart()
{ {
super.onStart(); super.onStart();
mVisible = true;
if (mService != null) if (mService != null)
{ {
mService.registerListener(this); mService.registerListener(this);
@@ -165,6 +170,7 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
public void onStop() public void onStop()
{ {
super.onStop(); super.onStop();
mVisible = false;
if (mService != null) if (mService != null)
{ {
mService.unregisterListener(this); mService.unregisterListener(this);