diff options
author | Arne Schwabe <arne@rfc2549.org> | 2012-04-21 18:36:35 +0200 |
---|---|---|
committer | Arne Schwabe <arne@rfc2549.org> | 2012-04-21 18:36:35 +0200 |
commit | 488a41cc60636298581c2b44b4706b259fc98a36 (patch) | |
tree | ba247a01a310ca7b68343e655e0d7b550597de46 | |
parent | 89369d1e8651514ad295b11e6e1f5ee00a402168 (diff) |
wip
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 Binary files differnew file mode 100644 index 00000000..47b4ba23 --- /dev/null +++ b/res/drawable-hdpi/ic_sysbar_quicksettings.png diff --git a/res/drawable-mdpi/ic_sysbar_quicksettings.png b/res/drawable-mdpi/ic_sysbar_quicksettings.png Binary files differnew file mode 100644 index 00000000..79281042 --- /dev/null +++ b/res/drawable-mdpi/ic_sysbar_quicksettings.png diff --git a/res/drawable-xhdpi/ic_sysbar_quicksettings.png b/res/drawable-xhdpi/ic_sysbar_quicksettings.png Binary files differnew file mode 100644 index 00000000..a057db8b --- /dev/null +++ b/res/drawable-xhdpi/ic_sysbar_quicksettings.png 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. "10.0.0.0/8 2002::/16" 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; + } |