summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJared Stafford <jspenguin@jspenguin.org>2018-10-25 15:57:25 -0500
committerArne Schwabe <arne@rfc2549.org>2018-11-14 14:39:37 +0100
commitb3ed4adfc3c4088ca525cf8a994995699648d71d (patch)
tree0f6470e4b0dc10464e735b7d966ea07d301fea7b
parentd37d763d84ae5d2fceacecf707ac8ade3259996a (diff)
Add option to allow apps to bypass VPN
-rw-r--r--main/src/main/java/de/blinkt/openvpn/VpnProfile.java1
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java5
-rw-r--r--main/src/main/java/de/blinkt/openvpn/fragments/Settings_Allowed_Apps.java15
-rw-r--r--main/src/main/res/layout/allowed_vpn_apps.xml27
-rwxr-xr-xmain/src/main/res/values/strings.xml1
5 files changed, 49 insertions, 0 deletions
diff --git a/main/src/main/java/de/blinkt/openvpn/VpnProfile.java b/main/src/main/java/de/blinkt/openvpn/VpnProfile.java
index a9b76bda..a715805d 100644
--- a/main/src/main/java/de/blinkt/openvpn/VpnProfile.java
+++ b/main/src/main/java/de/blinkt/openvpn/VpnProfile.java
@@ -142,6 +142,7 @@ public class VpnProfile implements Serializable, Cloneable {
public boolean mRemoteRandom = false;
public HashSet<String> mAllowedAppsVpn = new HashSet<>();
public boolean mAllowedAppsVpnAreDisallowed = true;
+ public boolean mAllowAppVpnBypass = false;
public String mCrlFilename;
public String mProfileCreator;
public String mExternalAuthenticator;
diff --git a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
index 8ee8b8a6..5612b55f 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
@@ -979,6 +979,11 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
} else {
VpnStatus.logDebug(R.string.allowed_vpn_apps_info, TextUtils.join(", ", mProfile.mAllowedAppsVpn));
}
+
+ if (mProfile.mAllowAppVpnBypass) {
+ builder.allowBypass();
+ VpnStatus.logDebug("Apps may bypass VPN");
+ }
}
public void addDNS(String dns) {
diff --git a/main/src/main/java/de/blinkt/openvpn/fragments/Settings_Allowed_Apps.java b/main/src/main/java/de/blinkt/openvpn/fragments/Settings_Allowed_Apps.java
index e6e161b7..24bb28ae 100644
--- a/main/src/main/java/de/blinkt/openvpn/fragments/Settings_Allowed_Apps.java
+++ b/main/src/main/java/de/blinkt/openvpn/fragments/Settings_Allowed_Apps.java
@@ -46,6 +46,7 @@ public class Settings_Allowed_Apps extends Fragment implements AdapterView.OnIte
private ListView mListView;
private VpnProfile mProfile;
private TextView mDefaultAllowTextView;
+ private TextView mAllowBypassTextView;
private PackageAdapter mListAdapter;
@Override
@@ -304,6 +305,7 @@ public class Settings_Allowed_Apps extends Fragment implements AdapterView.OnIte
View v = inflater.inflate(R.layout.allowed_vpn_apps, container, false);
mDefaultAllowTextView = (TextView) v.findViewById(R.id.default_allow_text);
+ mAllowBypassTextView = (TextView) v.findViewById(R.id.allow_bypass_text);
Switch vpnOnDefaultSwitch = (Switch) v.findViewById(R.id.default_allow);
@@ -318,6 +320,17 @@ public class Settings_Allowed_Apps extends Fragment implements AdapterView.OnIte
vpnOnDefaultSwitch.setChecked(mProfile.mAllowedAppsVpnAreDisallowed);
+ Switch vpnAllowBypassSwitch = (Switch) v.findViewById(R.id.allow_bypass);
+
+ vpnAllowBypassSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ mProfile.mAllowAppVpnBypass = isChecked;
+ }
+ });
+
+ vpnAllowBypassSwitch.setChecked(mProfile.mAllowAppVpnBypass);
+
mListView = (ListView) v.findViewById(android.R.id.list);
mListAdapter = new PackageAdapter(getActivity(), mProfile);
@@ -341,5 +354,7 @@ public class Settings_Allowed_Apps extends Fragment implements AdapterView.OnIte
mDefaultAllowTextView.setText(R.string.vpn_disallow_radio);
else
mDefaultAllowTextView.setText(R.string.vpn_allow_radio);
+
+ mAllowBypassTextView.setText(R.string.vpn_allow_bypass);
}
}
diff --git a/main/src/main/res/layout/allowed_vpn_apps.xml b/main/src/main/res/layout/allowed_vpn_apps.xml
index 0883f4b8..4219e13d 100644
--- a/main/src/main/res/layout/allowed_vpn_apps.xml
+++ b/main/src/main/res/layout/allowed_vpn_apps.xml
@@ -37,6 +37,33 @@
android:layout_height="wrap_content" />
</RelativeLayout>
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/actionBarSize"
+ android:background="@drawable/bg_switchbar"
+ android:paddingStart="@dimen/switchbar_pad"
+ android:elevation="1dp"
+ android:paddingEnd="@dimen/switchbar_pad"
+ tools:ignore="NewApi">
+
+ <Switch
+ android:id="@+id/allow_bypass"
+ android:layout_alignParentEnd="true"
+ android:layout_centerVertical="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ />
+ <TextView
+ android:id="@+id/allow_bypass_text"
+ style="@android:style/TextAppearance.Medium.Inverse"
+ tools:text="@string/vpn_allow_bypass"
+ android:layout_toStartOf="@id/allow_bypass"
+ android:layout_width="wrap_content"
+ android:layout_centerVertical="true"
+ android:layout_height="wrap_content" />
+ </RelativeLayout>
+
<ListView
android:visibility="gone"
android:id="@android:id/list"
diff --git a/main/src/main/res/values/strings.xml b/main/src/main/res/values/strings.xml
index 505dc80a..145c62eb 100755
--- a/main/src/main/res/values/strings.xml
+++ b/main/src/main/res/values/strings.xml
@@ -335,6 +335,7 @@
<string name="app_no_longer_exists">Package %s is no longer installed, removing it from app allow/disallow list</string>
<string name="vpn_disallow_radio">VPN is used for all apps but exclude selected</string>
<string name="vpn_allow_radio">VPN is used for only for selected apps</string>
+ <string name="vpn_allow_bypass">Allow apps to bypass the VPN</string>
<string name="query_delete_remote">Remove remote server entry?</string>
<string name="keep">Keep</string>
<string name="delete">Delete</string>