diff options
author | Jared Stafford <jspenguin@jspenguin.org> | 2018-10-25 15:57:25 -0500 |
---|---|---|
committer | Arne Schwabe <arne@rfc2549.org> | 2018-11-14 14:39:37 +0100 |
commit | b3ed4adfc3c4088ca525cf8a994995699648d71d (patch) | |
tree | 0f6470e4b0dc10464e735b7d966ea07d301fea7b /main | |
parent | d37d763d84ae5d2fceacecf707ac8ade3259996a (diff) |
Add option to allow apps to bypass VPN
Diffstat (limited to 'main')
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> |