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-06-18 16:45:37 +02:00
parent bc52868173
commit 0d9dd4b150
2 changed files with 16 additions and 3 deletions

View 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);

View 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);