summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.hgignore4
-rw-r--r--AndroidManifest.xml5
-rw-r--r--res/drawable-hdpi/ic_sysbar_quicksettings.pngbin0 -> 773 bytes
-rw-r--r--res/drawable-mdpi/ic_sysbar_quicksettings.pngbin0 -> 653 bytes
-rw-r--r--res/drawable-xhdpi/ic_sysbar_quicksettings.pngbin0 -> 956 bytes
-rw-r--r--res/layout/config.xml40
-rw-r--r--res/layout/vpn_preference_layout.xml94
-rw-r--r--res/layout/vpn_preference_widget.xml8
-rw-r--r--res/values/arrays.xml2
-rw-r--r--res/values/strings.xml13
-rw-r--r--res/xml/vpn_authentification.xml11
-rw-r--r--res/xml/vpn_headers.xml46
-rw-r--r--res/xml/vpn_ipsettings.xml53
-rw-r--r--res/xml/vpn_obscure.xml42
-rw-r--r--res/xml/vpn_overview.xml15
-rw-r--r--res/xml/vpn_preferences.xml7
-rw-r--r--src/de/blinkt/openvpn/OpenVPNClient.java28
-rw-r--r--src/de/blinkt/openvpn/OpenVpnService.java23
-rw-r--r--src/de/blinkt/openvpn/VPNConfigPreference.java15
-rw-r--r--src/de/blinkt/openvpn/VPNPreferences.java138
-rw-r--r--src/de/blinkt/openvpn/VPNProfileList.java22
-rw-r--r--src/de/blinkt/openvpn/VpnProfile.java4
22 files changed, 559 insertions, 11 deletions
diff --git a/.hgignore b/.hgignore
new file mode 100644
index 00000000..154c2a9b
--- /dev/null
+++ b/.hgignore
@@ -0,0 +1,4 @@
+obj
+bin
+libs
+gen \ No newline at end of file
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f25a1b62..24c8f164 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -17,8 +17,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.blinkt.openvpn"
- android:versionCode="6"
- android:versionName="0.0.3" >
+ android:versionCode="8"
+ android:versionName="0.0.4" >
<uses-permission android:name="android.permission.INTERNET" />
@@ -34,6 +34,7 @@
<activity android:name="com.lamerman.FileDialog" />
<activity android:name=".AboutActivity" />
+ <activity android:name=".VPNPreferences" />
<activity android:name=".LogWindow" />
<activity
android:name=".OpenVPNClient"
diff --git a/res/drawable-hdpi/ic_sysbar_quicksettings.png b/res/drawable-hdpi/ic_sysbar_quicksettings.png
new file mode 100644
index 00000000..47b4ba23
--- /dev/null
+++ b/res/drawable-hdpi/ic_sysbar_quicksettings.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_sysbar_quicksettings.png b/res/drawable-mdpi/ic_sysbar_quicksettings.png
new file mode 100644
index 00000000..79281042
--- /dev/null
+++ b/res/drawable-mdpi/ic_sysbar_quicksettings.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_sysbar_quicksettings.png b/res/drawable-xhdpi/ic_sysbar_quicksettings.png
new file mode 100644
index 00000000..a057db8b
--- /dev/null
+++ b/res/drawable-xhdpi/ic_sysbar_quicksettings.png
Binary files differ
diff --git a/res/layout/config.xml b/res/layout/config.xml
index e2ea8aa0..cfe8c6e3 100644
--- a/res/layout/config.xml
+++ b/res/layout/config.xml
@@ -152,12 +152,50 @@
android:inputType="textPassword" />
</LinearLayout>
+ <LinearLayout
+ android:id="@+id/userpassword"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:visibility="gone" >
+
+ <TextView
+ style="@style/item"
+ android:layout_marginLeft="8dip"
+ android:layout_marginRight="8dip"
+ android:text="@string/auth_username"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+
+
+ <EditText
+ android:id="@+id/auth_username"
+ style="@style/item"
+ android:layout_marginLeft="8dip"
+ android:layout_marginRight="8dip"
+ android:inputType="textNoSuggestions" />
+ <TextView
+ style="@style/item"
+ android:layout_marginLeft="8dip"
+ android:layout_marginRight="8dip"
+ android:text="@string/auth_pwquery"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+
+
+ <EditText
+ android:id="@+id/auth_password"
+ style="@style/item"
+ android:layout_marginLeft="8dip"
+ android:layout_marginRight="8dip"
+ android:inputType="textPassword" />
+</LinearLayout>
<LinearLayout
- android:id="@+id/commonsecret"
+ android:id="@+id/statickeys"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone" >
+ <TextView android:text="@string/static_keys_info"
+ style="@style/item"/>
</LinearLayout>
<CheckBox
diff --git a/res/layout/vpn_preference_layout.xml b/res/layout/vpn_preference_layout.xml
new file mode 100644
index 00000000..4d1f7e2e
--- /dev/null
+++ b/res/layout/vpn_preference_layout.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical"
+ android:minHeight="?android:attr/listPreferredItemHeight" >
+
+ <LinearLayout
+ android:id="@+id/inputmethod_pref"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="?android:attr/selectableItemBackground"
+ android:clickable="true"
+ android:focusable="true"
+ android:gravity="center_vertical" >
+
+ <LinearLayout
+ android:id="@android:id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical"
+ android:orientation="vertical" />
+
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="6dip"
+ android:layout_marginRight="6dip"
+ android:layout_marginTop="6dip"
+ android:layout_weight="1" >
+
+ <TextView
+ android:id="@+android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+ <TextView
+ android:id="@android:id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignLeft="@android:id/title"
+ android:layout_below="@android:id/title"
+ android:focusable="false"
+ android:maxLines="4"
+ android:paddingBottom="3dip"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textSize="13sp"
+ android:visibility="gone" />
+ </RelativeLayout>
+ </LinearLayout>
+
+ <View
+ android:layout_width="2dip"
+ android:layout_height="match_parent"
+ android:layout_marginBottom="5dip"
+ android:layout_marginTop="5dip"
+ android:background="@android:drawable/divider_horizontal_dark" />
+
+ <ImageView
+ android:id="@+id/vpn_edit_settings"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:layout_gravity="center"
+ android:background="?android:attr/selectableItemBackground"
+ android:clickable="true"
+ android:contentDescription="@string/configure_the_vpn"
+ android:focusable="true"
+ android:paddingLeft="15dip"
+ android:paddingRight="?android:attr/scrollbarSize"
+ android:src="@drawable/ic_sysbar_quicksettings" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/vpn_preference_widget.xml b/res/layout/vpn_preference_widget.xml
new file mode 100644
index 00000000..fef23003
--- /dev/null
+++ b/res/layout/vpn_preference_widget.xml
@@ -0,0 +1,8 @@
+<CheckBox
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+android:id/checkbox"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:focusable="false"
+ android:clickable="false" /> \ No newline at end of file
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 52e3afd8..eb2c1b1c 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -4,6 +4,8 @@
<item>Certificates</item>
<item>PKCS12 File</item>
<item>Android Certficate</item>
+ <item>Username/Password</item>
+ <item>Static Keys</item>
</string-array>
<string-array name="tls_directions">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4e191d8a..a9c1b1dc 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -80,6 +80,19 @@
<string name="show_advanced">Show advanced settings</string>
<string name="useTLSAuth">Use TLS Authentication</string>
<string name="tls_direction">TLS Direction</string>
+ <string name="vpn_settings_activity_title">VPN List</string>
+ <string name="new_vpn">Add OpenVPN Config</string>
+ <string name="vpn">Saved VPN Configs</string>
+
+ <string name="ipv6_dialog_tile">Enter IPv6 Address/Netmask in CIDR Format (e.g. 2000:dd::23/64)</string>
+ <string name="ipv4_dialog_title">Enter IPv4 Address/Netmask in CIDR Format (e.g. 1.2.3.4/24)</string>
+ <string name="ipv4_address">IPv4 Address</string>
+ <string name="ipv6_address">IPv6 Address</string>
+ <string name="custom_option_warning">Enter custom OpenVPN. Use with great care. Also note that many of the tun related Openvpn settings cannot be supported by design of the VPNSettings. If you think an important option is missing contact the author</string>
+ <string name="auth_username">Username</string>
+ <string name="auth_pwquery">Password</string>
+ <string name="static_keys_info">For the static configuration the TLS Auth Keys will be used as static keys.</string>
+ <string name="configure_the_vpn">Configure the VPN</string>
diff --git a/res/xml/vpn_authentification.xml b/res/xml/vpn_authentification.xml
new file mode 100644
index 00000000..11ea3abe
--- /dev/null
+++ b/res/xml/vpn_authentification.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
+
+ <CheckBoxPreference
+ android:key="remoteServerTLS"
+ android:summary="Checks whether the server use a TLS Server Certificate"
+ android:title="Except TLS Server" />
+
+ <de.blinkt.openvpn.VPNConfigPreference
+ android:title="Whaaaaats UUUUuuuuup?" />
+</PreferenceScreen> \ No newline at end of file
diff --git a/res/xml/vpn_headers.xml b/res/xml/vpn_headers.xml
new file mode 100644
index 00000000..7d0ade3f
--- /dev/null
+++ b/res/xml/vpn_headers.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
+
+ <header android:summary="Server, port and authentication method. Normally you should only settings specified here." >
+ android:title="Basic Setting"
+ <intent
+ android:targetClass="de.blinkt.openvpn.OpenVPNClient"
+ android:targetPackage="de.binkt.openvpn" />
+ </header>
+ <!-- android:icon="@drawable/ic_settings_applications" -->
+ <header
+ android:fragment="de.blinkt.openvpn.VPNPreferences$IP_Settings"
+ android:summary="IP Address and Routing"
+ android:title="IP Settings" />
+
+ <header
+ android:fragment="de.blinkt.openvpn.VPNPreferences$Authentication"
+ android:summary="Authentication"
+ android:title="Authentication" />
+
+
+ <!-- android:icon="@drawable/ic_settings_display" -->
+ <header
+ android:fragment="de.blinkt.openvpn.VPNPreferences$Obscure"
+ android:summary="Obscure OpenVPN Settings. Normaly not needed."
+ android:title="Obscure" >
+
+ <!--
+ Arbitrary key/value pairs can be included with a header as
+ arguments to its fragment.
+ -->
+ <extra
+ android:name="someKey"
+ android:value="someHeaderValue" />
+ </header>
+
+ <!-- android:icon="@drawable/ic_settings_display" -->
+ <header
+ android:summary="Launches an Intent."
+ android:title="Intent" >
+ <intent
+ android:action="android.intent.action.VIEW"
+ android:data="http://www.android.com" />
+ </header>
+
+</preference-headers> \ No newline at end of file
diff --git a/res/xml/vpn_ipsettings.xml b/res/xml/vpn_ipsettings.xml
new file mode 100644
index 00000000..8aacaaca
--- /dev/null
+++ b/res/xml/vpn_ipsettings.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
+
+ <SwitchPreference
+ android:disableDependentsState="true"
+ android:key="usePull"
+ android:title="Pull Settings" />
+
+ <PreferenceCategory android:title="IP" >
+ <EditTextPreference
+ android:dependency="usePull"
+ android:dialogMessage="@string/ipv4_dialog_title"
+ android:key="ipv4_address"
+ android:title="@string/ipv4_address" />
+ <EditTextPreference
+ android:dependency="usePull"
+ android:dialogMessage="@string/ipv6_dialog_tile"
+ android:key="ipv6_address"
+ android:title="@string/ipv6_address" />
+ </PreferenceCategory>
+ <PreferenceCategory android:title="DNS" >
+ <CheckBoxPreference
+ android:key="overrideDNS"
+ android:summary="Override DNS Settings by Server"
+ android:title="Override DNS Settings" />
+
+ <EditTextPreference
+ android:key="searchdomain"
+ android:title="searchDomain" />
+ <EditTextPreference
+ android:key="dns1"
+ android:title="DNS Server" />
+ <EditTextPreference
+ android:key="dns2"
+ android:title="Backup DNS Server" />
+ </PreferenceCategory>
+ <PreferenceCategory android:title="Routing" >
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:dependency="usePull"
+ android:disableDependentsState="true"
+ android:key="useDefaultRoute"
+ android:summary="Redirects all Traffic over the VPN"
+ android:title="Use default Route" />
+
+ <EditTextPreference
+ android:dependency="useDefaultRoute"
+ android:dialogMessage="Enter custom routes. Only enter destination in CIDR format. &quot;10.0.0.0/8 2002::/16&quot; would direct the networks 10.0.0.0/8 and 2002::/16 over the VPN."
+ android:key="customRoutes"
+ android:title="Custom Routes" />
+ </PreferenceCategory>
+
+</PreferenceScreen> \ No newline at end of file
diff --git a/res/xml/vpn_obscure.xml b/res/xml/vpn_obscure.xml
new file mode 100644
index 00000000..09b237f2
--- /dev/null
+++ b/res/xml/vpn_obscure.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="Obscure Settings" >
+
+ <CheckBoxPreference
+ android:key="useRandomHostname"
+ android:summary="adds 6 random chars in front of hostname"
+ android:title="Random Host Prefix" />
+ <CheckBoxPreference
+ android:key="useFloat"
+ android:summary="Allows authenticated packets from any IP" />
+
+ <CheckBoxPreference android:key="setmtu" android:title="Set custom MTU" />
+ <EditTextPreference
+ android:dependency="setmtu"
+ android:defaultValue="1500"
+ android:title="MTU" />
+
+ <CheckBoxPreference
+ android:key="useBWShaping"
+ android:title="Use bandwidth shaping" />
+
+ <EditTextPreference
+ android:key="shaperLimit"
+ android:title="Bandwidth in byte/s" />
+
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:key="enableReplayProtection"
+ android:title="Replay Protection" />
+ <CheckBoxPreference
+ android:summary="Specify custom options. Use with care!"
+ android:title="Enable Custom Options"
+ android:key="enableCustomOptions"/>
+
+ <EditTextPreference
+ android:dependency="enableCustomOptions"
+ android:dialogMessage="@string/custom_option_warning" />
+ android:key="customOptions"
+ android:title="Custom Options" />
+
+</PreferenceScreen> \ No newline at end of file
diff --git a/res/xml/vpn_overview.xml b/res/xml/vpn_overview.xml
new file mode 100644
index 00000000..053f2526
--- /dev/null
+++ b/res/xml/vpn_overview.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/vpn_settings_activity_title" >
+
+ <PreferenceScreen
+ android:key="new_vpn"
+ android:title="@string/new_vpn" />
+
+ <PreferenceCategory
+ android:fragment="de.blinkt.openvpn.VPNList$ListFragment"
+ android:key="vpn_list"
+ android:title="@string/vpn" >
+ </PreferenceCategory>
+
+</PreferenceScreen>
diff --git a/res/xml/vpn_preferences.xml b/res/xml/vpn_preferences.xml
new file mode 100644
index 00000000..16c330c0
--- /dev/null
+++ b/res/xml/vpn_preferences.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/vpn_settings_activity_title" >
+
+
+
+</PreferenceScreen>
diff --git a/src/de/blinkt/openvpn/OpenVPNClient.java b/src/de/blinkt/openvpn/OpenVPNClient.java
index 27073459..f1a32b63 100644
--- a/src/de/blinkt/openvpn/OpenVPNClient.java
+++ b/src/de/blinkt/openvpn/OpenVPNClient.java
@@ -52,6 +52,7 @@ import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.ToggleButton;
@@ -103,6 +104,12 @@ public class OpenVPNClient extends Activity implements View.OnClickListener, OnI
private Spinner mTLSDirection;
+
+ private EditText mUserName;
+
+
+ private EditText mPassword;
+
@Override
protected void onStop(){
super.onStop();
@@ -264,7 +271,8 @@ public class OpenVPNClient extends Activity implements View.OnClickListener, OnI
mShowAdvanced = (CheckBox) findViewById(R.id.show_advanced);
mTlsFile = (FileSelectLayout) findViewById(R.id.tlsAuth);
-
+ mUserName = (EditText) findViewById(R.id.auth_username);
+ mPassword = (EditText) findViewById(R.id.auth_password);
addFileSelectLayout(mCaCert);
@@ -304,7 +312,7 @@ public class OpenVPNClient extends Activity implements View.OnClickListener, OnI
// hide everything
findViewById(R.id.pkcs12).setVisibility(View.GONE);
findViewById(R.id.certs).setVisibility(View.GONE);
- findViewById(R.id.commonsecret).setVisibility(View.GONE);
+ findViewById(R.id.statickeys).setVisibility(View.GONE);
findViewById(R.id.keystore).setVisibility(View.GONE);
switch(type) {
@@ -314,12 +322,15 @@ public class OpenVPNClient extends Activity implements View.OnClickListener, OnI
case VpnProfile.TYPE_PKCS12:
findViewById(R.id.pkcs12).setVisibility(View.VISIBLE);
break;
- case VpnProfile.COMMON_SECRET:
- findViewById(R.id.commonsecret).setVisibility(View.VISIBLE);
+ case VpnProfile.TYPE_STATICKEYS:
+ findViewById(R.id.statickeys).setVisibility(View.VISIBLE);
break;
case VpnProfile.TYPE_KEYSTORE:
findViewById(R.id.keystore).setVisibility(View.VISIBLE);
break;
+
+ case VpnProfile.TYPE_USERPASS:
+ findViewById(R.id.userpassword).setVisibility(View.VISIBLE);
}
@@ -477,7 +488,8 @@ public class OpenVPNClient extends Activity implements View.OnClickListener, OnI
onActivityResult(START_OPENVPN, RESULT_OK, null);
}
} else if (v == findViewById(R.id.about)) {
- Intent intent = new Intent(getBaseContext(),AboutActivity.class);
+ //Intent intent = new Intent(getBaseContext(),AboutActivity.class);
+ Intent intent = new Intent(getBaseContext(),VPNPreferences.class);
startActivity(intent);
} else if (v == findViewById(R.id.select_keystore_button)) {
showCertDialog();
@@ -500,7 +512,11 @@ public class OpenVPNClient extends Activity implements View.OnClickListener, OnI
String pkcs12pw = savePKCS12();
intent.putExtra(prefix + ".PKCS12PASS", pkcs12pw);
}
-
+
+ if(mType.getSelectedItemPosition() == VpnProfile.TYPE_USERPASS) {
+ intent.putExtra(prefix + ".USERNAME", mUserName.getText().toString());
+ intent.putExtra(prefix + ".PASSWORD", mPassword.getText().toString());
+ }
startService(intent);
Intent startLW = new Intent(getBaseContext(),LogWindow.class);
diff --git a/src/de/blinkt/openvpn/OpenVpnService.java b/src/de/blinkt/openvpn/OpenVpnService.java
index e8174bcb..4aad9318 100644
--- a/src/de/blinkt/openvpn/OpenVpnService.java
+++ b/src/de/blinkt/openvpn/OpenVpnService.java
@@ -117,13 +117,34 @@ public class OpenVpnService extends VpnService implements Handler.Callback, Runn
}
}
+ if(intent.hasExtra(prefix +".USERNAME"))
+ {
+ try {
+ String user = managmentEscape(intent.getStringExtra(prefix +".USERNAME"));
+ String pw = managmentEscape(intent.getStringExtra(prefix +".PASSWORD"));
+ Thread.sleep(3000);
+
+
+ managmentCommand("username 'Auth' " + user+ "\n" +
+ "password 'Auth' " + pw + "\n");
+ } catch (InterruptedException e) {
+ }
+ }
return START_STICKY;
}
- @Override
+ private String managmentEscape(String unescape) {
+ String escapedString = unescape.replace("\\", "\\\\");
+ escapedString = escapedString.replace("\"","\\\"");
+ escapedString = escapedString.replace("\n","\\n");
+ return '"' + escapedString + '"';
+ }
+
+
+ @Override
public void onDestroy() {
if (mThread != null) {
managmentCommand("signal SIGINT\n");
diff --git a/src/de/blinkt/openvpn/VPNConfigPreference.java b/src/de/blinkt/openvpn/VPNConfigPreference.java
new file mode 100644
index 00000000..3afcfccb
--- /dev/null
+++ b/src/de/blinkt/openvpn/VPNConfigPreference.java
@@ -0,0 +1,15 @@
+package de.blinkt.openvpn;
+
+import android.content.Context;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.util.AttributeSet;
+
+public class VPNConfigPreference extends Preference {
+
+ public VPNConfigPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ setWidgetLayoutResource(R.layout.vpn_preference_layout);
+ }
+
+}
diff --git a/src/de/blinkt/openvpn/VPNPreferences.java b/src/de/blinkt/openvpn/VPNPreferences.java
new file mode 100644
index 00000000..69485efd
--- /dev/null
+++ b/src/de/blinkt/openvpn/VPNPreferences.java
@@ -0,0 +1,138 @@
+package de.blinkt.openvpn;
+
+import java.util.List;
+
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.EditTextPreference;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceManager;
+import android.preference.SwitchPreference;
+import android.widget.Button;
+
+
+public class VPNPreferences extends PreferenceActivity {
+
+ public VPNPreferences() {
+ super();
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (hasHeaders()) {
+ Button button = new Button(this);
+ button.setText("Some action");
+ setListFooter(button);
+ }
+ }
+ @Override
+ public void onBuildHeaders(List<Header> target) {
+ loadHeadersFromResource(R.xml.vpn_headers, target);
+ }
+
+ public static class IP_Settings extends PreferenceFragment implements OnPreferenceChangeListener {
+ private EditTextPreference mIPv4;
+ private EditTextPreference mIPv6;
+ private SwitchPreference mUsePull;
+ private CheckBoxPreference mOverrideDNS;
+ private Preference mSearchdomain;
+ private Preference mDNS1;
+ private Preference mDNS2;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Make sure default values are applied. In a real app, you would
+ // want this in a shared function that is used to retrieve the
+ // SharedPreferences wherever they are needed.
+ PreferenceManager.setDefaultValues(getActivity(),
+ R.xml.vpn_ipsettings, false);
+
+ // Load the preferences from an XML resource
+ addPreferencesFromResource(R.xml.vpn_ipsettings);
+ mIPv4 = (EditTextPreference) findPreference("ipv4_address");
+ mIPv6 = (EditTextPreference) findPreference("ipv6_address");
+ mUsePull = (SwitchPreference) findPreference("usePull");
+ mOverrideDNS = (CheckBoxPreference) findPreference("overrideDNS");
+ mSearchdomain =findPreference("searchdomain");
+ mDNS1 = findPreference("dns1");
+ mDNS2 = findPreference("dns2");
+
+ mIPv4.setOnPreferenceChangeListener(this);
+ mIPv6.setOnPreferenceChangeListener(this);
+ mDNS1.setOnPreferenceChangeListener(this);
+ mDNS2.setOnPreferenceChangeListener(this);
+ mUsePull.setOnPreferenceChangeListener(this);
+ mOverrideDNS.setOnPreferenceChangeListener(this);
+ setDNSState();
+
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference,
+ Object newValue) {
+ if(preference==mIPv4 || preference == mIPv6 ||
+ preference==mDNS1 || preference == mDNS2)
+ preference.setSummary((String)newValue);
+
+ if(preference== mUsePull || preference == mOverrideDNS)
+ setDNSState();
+
+ return true;
+ }
+
+ private void setDNSState() {
+ boolean enabled;
+ mOverrideDNS.setEnabled(mUsePull.isChecked());
+ if(!mUsePull.isChecked())
+ enabled =true;
+ else if (mOverrideDNS.isChecked())
+ enabled = true;
+ else
+ enabled = false;
+
+ mDNS1.setEnabled(enabled);
+ mDNS2.setEnabled(enabled);
+ mSearchdomain.setEnabled(enabled);
+
+ }
+
+
+ }
+ public static class Authentication extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Make sure default values are applied. In a real app, you would
+ // want this in a shared function that is used to retrieve the
+ // SharedPreferences wherever they are needed.
+ PreferenceManager.setDefaultValues(getActivity(),
+ R.xml.vpn_authentification, false);
+
+ // Load the preferences from an XML resource
+ addPreferencesFromResource(R.xml.vpn_authentification);
+ }
+ }
+ public static class Obscure extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Make sure default values are applied. In a real app, you would
+ // want this in a shared function that is used to retrieve the
+ // SharedPreferences wherever they are needed.
+ PreferenceManager.setDefaultValues(getActivity(),
+ R.xml.vpn_ipsettings, false);
+
+ // Load the preferences from an XML resource
+ addPreferencesFromResource(R.xml.vpn_obscure);
+ }
+ }
+}
+
diff --git a/src/de/blinkt/openvpn/VPNProfileList.java b/src/de/blinkt/openvpn/VPNProfileList.java
new file mode 100644
index 00000000..fb7af280
--- /dev/null
+++ b/src/de/blinkt/openvpn/VPNProfileList.java
@@ -0,0 +1,22 @@
+package de.blinkt.openvpn;
+
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+
+
+import android.app.ProfileManager;
+
+public class VPNProfileList extends PreferenceActivity {
+ private ProfileManager mProfileManager;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (getPreferenceManager() != null) {
+ addPreferencesFromResource(R.xml.profiles_settings);
+ mProfileManager = (ProfileManager) getActivity().getSystemService(PROFILE_SERVICE);
+
+ }
+ }
+}
diff --git a/src/de/blinkt/openvpn/VpnProfile.java b/src/de/blinkt/openvpn/VpnProfile.java
index d01b1104..8d5fbe32 100644
--- a/src/de/blinkt/openvpn/VpnProfile.java
+++ b/src/de/blinkt/openvpn/VpnProfile.java
@@ -3,6 +3,8 @@ package de.blinkt.openvpn;
public class VpnProfile {
static final int TYPE_CERTIFICATES=0;
static final int TYPE_PKCS12=1;
- static final int COMMON_SECRET=3;
static final int TYPE_KEYSTORE=2;
+ public static final int TYPE_USERPASS = 3;
+ public static final int TYPE_STATICKEYS = 4;
+
}