summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2019-05-22 20:28:08 +0200
committercyBerta <cyberta@riseup.net>2019-05-22 20:28:08 +0200
commit7dc9f9e9caf41976d08c967d2d966648c99f929b (patch)
treea00be0a81bf0c8cf179c85b6f8058bd77e74db52
parente92081d9aff29b0f2592ab960593c59b5db41dbc (diff)
* adds a DISCONNECTING state
* fixes vpn startup issues
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java25
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/EipFragment.java33
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/EipSetupObserver.java2
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java8
4 files changed, 51 insertions, 17 deletions
diff --git a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
index e42e36bb..af31e977 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
@@ -237,15 +237,22 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
@Override
- public boolean stopVPN(boolean replaceConnection) throws RemoteException {
- if (getManagement() != null && getManagement().stopVPN(replaceConnection)) {
- if (!replaceConnection) {
- VpnStatus.updateStateString("NOPROCESS", "VPN STOPPED", R.string.state_noprocess, ConnectionStatus.LEVEL_NOTCONNECTED);
- }
- return true;
- } else {
- return false;
- }
+ public boolean stopVPN(boolean replaceConnection) {
+ if(isVpnRunning()) {
+ if (getManagement() != null && getManagement().stopVPN(replaceConnection)) {
+ if (!replaceConnection) {
+ VpnStatus.updateStateString("NOPROCESS", "VPN STOPPED", R.string.state_noprocess, ConnectionStatus.LEVEL_NOTCONNECTED);
+ }
+ return true;
+ }
+ return false;
+ } else {
+ if (!replaceConnection) {
+ VpnStatus.updateStateString("NOPROCESS", "VPN STOPPED", R.string.state_noprocess, ConnectionStatus.LEVEL_NOTCONNECTED);
+ return true;
+ }
+ return false;
+ }
}
/**
diff --git a/app/src/main/java/se/leap/bitmaskclient/EipFragment.java b/app/src/main/java/se/leap/bitmaskclient/EipFragment.java
index d54d01af..69d81ccf 100644
--- a/app/src/main/java/se/leap/bitmaskclient/EipFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/EipFragment.java
@@ -289,6 +289,11 @@ public class EipFragment extends Fragment implements Observer {
}
}
+ private void setMainButtonEnabled(boolean enabled) {
+ mainButton.setEnabled(enabled);
+ vpnStateImage.setEnabled(enabled);
+ }
+
public void startEipFromScratch() {
saveStatus(true);
Context context = getContext();
@@ -370,6 +375,7 @@ public class EipFragment extends Fragment implements Observer {
if (eipStatus.isConnecting() ) {
+ setMainButtonEnabled(true);
showConnectingLayout(activity);
if (eipStatus.isReconnecting()) {
//Log.d(TAG, "eip show reconnecting toast!");
@@ -377,6 +383,7 @@ public class EipFragment extends Fragment implements Observer {
}
} else if (eipStatus.isConnected() ) {
mainButton.setText(activity.getString(R.string.vpn_button_turn_off));
+ setMainButtonEnabled(true);
vpnStateImage.setStateIcon(R.drawable.vpn_connected);
vpnStateImage.stopProgress(true);
routedText.setText(R.string.vpn_securely_routed);
@@ -386,6 +393,7 @@ public class EipFragment extends Fragment implements Observer {
colorBackground();
} else if(isOpenVpnRunningWithoutNetwork()){
mainButton.setText(activity.getString(R.string.vpn_button_turn_off));
+ setMainButtonEnabled(true);
vpnStateImage.setStateIcon(R.drawable.vpn_disconnected);
vpnStateImage.stopProgress(true);
routedText.setText(R.string.vpn_securely_routed_no_internet);
@@ -396,9 +404,12 @@ public class EipFragment extends Fragment implements Observer {
} else if (eipStatus.isDisconnected() && reconnectingWithDifferentGateway()) {
showConnectingLayout(activity);
// showRetryToast(activity);
- }
- else {
+ } else if (eipStatus.isDisconnecting()) {
+ setMainButtonEnabled(false);
+ showDisconnectingLayout(activity);
+ } else {
mainButton.setText(activity.getString(R.string.vpn_button_turn_on));
+ setMainButtonEnabled(true);
vpnStateImage.setStateIcon(R.drawable.vpn_disconnected);
vpnStateImage.stopProgress(false);
routedText.setVisibility(GONE);
@@ -410,9 +421,9 @@ public class EipFragment extends Fragment implements Observer {
private void showToast(Activity activity, String message, boolean vibrateLong) {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast,
- (ViewGroup) activity.findViewById(R.id.custom_toast_container));
+ activity.findViewById(R.id.custom_toast_container));
- TextView text = (TextView) layout.findViewById(R.id.text);
+ TextView text = layout.findViewById(R.id.text);
text.setText(message);
Vibrator v = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE);
@@ -441,12 +452,24 @@ public class EipFragment extends Fragment implements Observer {
}
private void showConnectingLayout(Context activity) {
+ showConnectionTransitionLayout(activity, true);
+ }
+
+ private void showDisconnectingLayout(Activity activity) {
+ showConnectionTransitionLayout(activity, false);
+ }
+
+ private void showConnectionTransitionLayout(Context activity, boolean isConnecting) {
mainButton.setText(activity.getString(android.R.string.cancel));
vpnStateImage.setStateIcon(R.drawable.vpn_connecting);
vpnStateImage.showProgress();
routedText.setVisibility(GONE);
vpnRoute.setVisibility(GONE);
- colorBackgroundALittle();
+ if (isConnecting) {
+ colorBackgroundALittle();
+ } else {
+ greyscaleBackground();
+ }
}
private boolean isOpenVpnRunningWithoutNetwork() {
diff --git a/app/src/main/java/se/leap/bitmaskclient/EipSetupObserver.java b/app/src/main/java/se/leap/bitmaskclient/EipSetupObserver.java
index d9a6121b..ff94fe82 100644
--- a/app/src/main/java/se/leap/bitmaskclient/EipSetupObserver.java
+++ b/app/src/main/java/se/leap/bitmaskclient/EipSetupObserver.java
@@ -33,7 +33,6 @@ import static se.leap.bitmaskclient.Constants.BROADCAST_RESULT_CODE;
import static se.leap.bitmaskclient.Constants.BROADCAST_RESULT_KEY;
import static se.leap.bitmaskclient.Constants.EIP_ACTION_START;
import static se.leap.bitmaskclient.Constants.EIP_ACTION_START_ALWAYS_ON_VPN;
-import static se.leap.bitmaskclient.Constants.EIP_ACTION_STOP;
import static se.leap.bitmaskclient.Constants.EIP_REQUEST;
import static se.leap.bitmaskclient.Constants.PROVIDER_KEY;
import static se.leap.bitmaskclient.Constants.SHARED_PREFERENCES;
@@ -252,7 +251,6 @@ class EipSetupObserver extends BroadcastReceiver implements VpnStatus.StateListe
}
}
-
private void selectNextGateway() {
changingGateway.set(true);
reconnectTry.set(0);
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java b/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java
index 20154ac1..fc07c521 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java
@@ -115,9 +115,11 @@ public class EipStatus extends Observable implements VpnStatus.StateListener {
break;
case LEVEL_AUTH_FAILED:
case LEVEL_NOTCONNECTED:
- case LEVEL_STOPPING:
currentEipLevel = EipLevel.DISCONNECTED;
break;
+ case LEVEL_STOPPING:
+ currentEipLevel = EipLevel.DISCONNECTING;
+ break;
case LEVEL_NONETWORK:
case LEVEL_BLOCKING:
setEipLevelWithDelay(level);
@@ -207,6 +209,10 @@ public class EipStatus extends Observable implements VpnStatus.StateListener {
return currentEipLevel == EipLevel.DISCONNECTED;
}
+ public boolean isDisconnecting() {
+ return currentEipLevel == EipLevel.DISCONNECTING;
+ }
+
/**
* ics-openvpn's paused state is not implemented yet
* @return true if vpn is paused false if not