public class VpnStateFragment extends Fragment implements VpnStateListener
{
private static final String KEY_ERROR_CONNECTION_ID = "error_connection_id";
- private static final String KEY_DISMISSED_CONNECTION_ID = "dismissed_connection_id";
private TextView mProfileNameView;
private TextView mProfileView;
private ProgressBar mProgress;
private AlertDialog mErrorDialog;
private long mErrorConnectionID;
- private long mDismissedConnectionID;
private VpnStateService mService;
private final ServiceConnection mServiceConnection = new ServiceConnection()
{
mServiceConnection, Service.BIND_AUTO_CREATE);
mErrorConnectionID = 0;
- mDismissedConnectionID = 0;
if (savedInstanceState != null && savedInstanceState.containsKey(KEY_ERROR_CONNECTION_ID))
{
mErrorConnectionID = (Long)savedInstanceState.getSerializable(KEY_ERROR_CONNECTION_ID);
- mDismissedConnectionID = (Long)savedInstanceState.getSerializable(KEY_DISMISSED_CONNECTION_ID);
}
}
super.onSaveInstanceState(outState);
outState.putSerializable(KEY_ERROR_CONNECTION_ID, mErrorConnectionID);
- outState.putSerializable(KEY_DISMISSED_CONNECTION_ID, mDismissedConnectionID);
}
@Override
private boolean reportError(long connectionID, String name, ErrorState error, ImcState imcState)
{
- if (connectionID > mDismissedConnectionID)
- { /* report error if it hasn't been dismissed yet */
- mErrorConnectionID = connectionID;
- }
- else
- { /* ignore all other errors */
- error = ErrorState.NO_ERROR;
- }
if (error == ErrorState.NO_ERROR)
{
hideErrorDialog();
{ /* we already show the dialog */
return true;
}
+ mErrorConnectionID = connectionID;
mProfileNameView.setText(name);
showProfile(true);
mProgress.setVisibility(View.GONE);
if (mService != null)
{
mService.disconnect();
+ if (mService.getConnectionID() == mErrorConnectionID)
+ {
+ mService.setError(ErrorState.NO_ERROR);
+ }
}
- mDismissedConnectionID = mErrorConnectionID;
updateView();
}