diff options
-rw-r--r-- | res/values/strings.xml | 2 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/ConfigConverter.java | 2 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/OpenVpnPreferencesFragment.java | 52 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/Settings_Authentication.java | 18 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/Settings_Basic.java | 24 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/Settings_IP.java | 23 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/Settings_Obscure.java | 16 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/VPNPreferences.java | 18 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/VpnProfile.java | 5 | ||||
-rw-r--r-- | todo.txt | 9 |
10 files changed, 97 insertions, 72 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index 85ed7620..24332316 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -58,7 +58,7 @@ <string name="copyright_blinktgui">Copyright 2012\nArne Schwabe <arne@rfc2549.org></string> <string name="copyright_guicode">Source code and issue tracker available under http://code.google.com/p/ics-openvpn/ </string> <string name="copyright_others">The program uses the following components. See the source for full details on the licenses</string> - <string name="copyright_file_dialog">File Dialog for the Android\nAlexander Ponomarev"</string> + <string name="copyright_file_dialog">File Dialog based on work by Alexander Ponomarev"</string> <string name="lzo_copyright">Copyright © 1996 – 2011 Markus Franz Xaver Johannes Oberhumer</string> <string name="copyright_openssl"> This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit\n diff --git a/src/de/blinkt/openvpn/ConfigConverter.java b/src/de/blinkt/openvpn/ConfigConverter.java index 50d08b73..952ab968 100644 --- a/src/de/blinkt/openvpn/ConfigConverter.java +++ b/src/de/blinkt/openvpn/ConfigConverter.java @@ -44,6 +44,8 @@ public class ConfigConverter extends ListActivity { Intent result = new Intent();
ProfileManager vpl = ProfileManager.getInstance(this);
vpl.addProfile(mResult);
+ vpl.saveProfile(this, mResult);
+ vpl.saveProfileList(this);
result.putExtra(VpnProfile.EXTRA_PROFILEUUID,mResult.getUUID().toString());
setResult(Activity.RESULT_OK, result);
finish();
diff --git a/src/de/blinkt/openvpn/OpenVpnPreferencesFragment.java b/src/de/blinkt/openvpn/OpenVpnPreferencesFragment.java new file mode 100644 index 00000000..10378a80 --- /dev/null +++ b/src/de/blinkt/openvpn/OpenVpnPreferencesFragment.java @@ -0,0 +1,52 @@ +package de.blinkt.openvpn;
+
+import android.os.Bundle;
+import android.preference.PreferenceFragment;
+
+public abstract class OpenVpnPreferencesFragment extends PreferenceFragment {
+
+ protected VpnProfile mProfile;
+
+ protected abstract void loadSettings();
+ protected abstract void saveSettings();
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // Make sure there is an instance of the profile manager
+ ProfileManager.getInstance(getActivity());
+
+ String profileUUID = getArguments().getString(getActivity().getPackageName() + ".profileUUID");
+ mProfile = ProfileManager.get(profileUUID);
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ saveSettings();
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ if(savedInstanceState!=null) {
+ String profileUUID=savedInstanceState.getString(VpnProfile.EXTRA_PROFILEUUID);
+ ProfileManager.getInstance(getActivity());
+ mProfile = ProfileManager.get(profileUUID);
+ loadSettings();
+ }
+ }
+
+ @Override
+ public void onStop() {
+ // TODO Auto-generated method stub
+ super.onStop();
+ }
+
+ @Override
+ public void onSaveInstanceState (Bundle outState) {
+ super.onSaveInstanceState(outState);
+ saveSettings();
+ outState.putString(VpnProfile.EXTRA_PROFILEUUID, mProfile.getUUIDString());
+ }
+}
diff --git a/src/de/blinkt/openvpn/Settings_Authentication.java b/src/de/blinkt/openvpn/Settings_Authentication.java index e8740b5d..6d6960e9 100644 --- a/src/de/blinkt/openvpn/Settings_Authentication.java +++ b/src/de/blinkt/openvpn/Settings_Authentication.java @@ -13,12 +13,11 @@ import android.preference.PreferenceFragment; import android.preference.SwitchPreference; -public class Settings_Authentication extends PreferenceFragment implements OnPreferenceChangeListener, OnPreferenceClickListener { +public class Settings_Authentication extends OpenVpnPreferencesFragment implements OnPreferenceChangeListener, OnPreferenceClickListener { private static final int SELECT_TLS_FILE = 23223232; private CheckBoxPreference mExpectTLSCert; private CheckBoxPreference mCheckRemoteCN; private EditTextPreference mRemoteCN; - private VpnProfile mProfile; private ListPreference mTLSAuthDirection; private Preference mTLSAuthFile; private SwitchPreference mUseTLSAuth; @@ -41,8 +40,7 @@ public class Settings_Authentication extends PreferenceFragment implements OnPre mTLSAuthFile = findPreference("tlsAuthFile"); mTLSAuthDirection = (ListPreference) findPreference("tls_direction"); - String profileUUID = getArguments().getString(getActivity().getPackageName() + ".profileUUID"); - mProfile = ProfileManager.get(profileUUID); + mTLSAuthFile.setOnPreferenceClickListener(this); mCipher =(EditTextPreference) findPreference("cipher"); @@ -52,7 +50,8 @@ public class Settings_Authentication extends PreferenceFragment implements OnPre } - private void loadSettings() { + @Override + protected void loadSettings() { mExpectTLSCert.setChecked(mProfile.mExpectTLSCert); mCheckRemoteCN.setChecked(mProfile.mCheckRemoteCN); @@ -67,7 +66,8 @@ public class Settings_Authentication extends PreferenceFragment implements OnPre onPreferenceChange(mCipher, mProfile.mCipher); } - private void saveSettings() { + @Override + protected void saveSettings() { mProfile.mExpectTLSCert=mExpectTLSCert.isChecked(); mProfile.mCheckRemoteCN=mCheckRemoteCN.isChecked(); mProfile.mRemoteCN=mRemoteCN.getText(); @@ -87,11 +87,7 @@ public class Settings_Authentication extends PreferenceFragment implements OnPre } - @Override - public void onPause() { - super.onPause(); - saveSettings(); - } + @Override public boolean onPreferenceChange(Preference preference, Object newValue) { diff --git a/src/de/blinkt/openvpn/Settings_Basic.java b/src/de/blinkt/openvpn/Settings_Basic.java index 3234d0df..3eb484cb 100644 --- a/src/de/blinkt/openvpn/Settings_Basic.java +++ b/src/de/blinkt/openvpn/Settings_Basic.java @@ -93,9 +93,9 @@ public class Settings_Basic extends Fragment implements View.OnClickListener, On public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); String profileuuid =getArguments().getString(getActivity().getPackageName() + ".profileUUID"); mProfile=ProfileManager.get(profileuuid); - super.onCreate(savedInstanceState); } @Override @@ -129,8 +129,7 @@ public class Settings_Basic extends Fragment implements View.OnClickListener, On addFileSelectLayout(mpkcs12); mpkcs12.setNoline(); - loadPreferences(); - + mType.setOnItemSelectedListener(this); mView.findViewById(R.id.select_keystore_button).setOnClickListener(this); @@ -143,6 +142,15 @@ public class Settings_Basic extends Fragment implements View.OnClickListener, On return mView; } + + @Override + public void onStart() { + super.onStart(); + String profileuuid =getArguments().getString(getActivity().getPackageName() + ".profileUUID"); + mProfile=ProfileManager.get(profileuuid); + loadPreferences(); + + } @Override public void onActivityResult(int request, int result, Intent data) { @@ -158,7 +166,6 @@ public class Settings_Basic extends Fragment implements View.OnClickListener, On @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - ((VPNPreferences) getActivity()).setmBS(this); } @Override @@ -167,6 +174,11 @@ public class Settings_Basic extends Fragment implements View.OnClickListener, On changeType(position); } } + @Override + public void onPause() { + super.onPause(); + savePreferences(); + } @@ -298,7 +310,9 @@ public class Settings_Basic extends Fragment implements View.OnClickListener, On public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); savePreferences(); - outState.putString(getActivity().getPackageName() + "profileUUID", mProfile.getUUID().toString()); + if(mProfile!=null) { + outState.putString(getActivity().getPackageName() + "profileUUID", mProfile.getUUID().toString()); + } } @Override diff --git a/src/de/blinkt/openvpn/Settings_IP.java b/src/de/blinkt/openvpn/Settings_IP.java index 52dcc5dc..dcdc10c0 100644 --- a/src/de/blinkt/openvpn/Settings_IP.java +++ b/src/de/blinkt/openvpn/Settings_IP.java @@ -8,7 +8,7 @@ import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.preference.SwitchPreference; -public class Settings_IP extends PreferenceFragment implements OnPreferenceChangeListener { +public class Settings_IP extends OpenVpnPreferencesFragment implements OnPreferenceChangeListener { private EditTextPreference mIPv4; private EditTextPreference mIPv6; private SwitchPreference mUsePull; @@ -18,7 +18,6 @@ public class Settings_IP extends PreferenceFragment implements OnPreferenceChang private EditTextPreference mDNS2; private EditTextPreference mCustomRoutes; private CheckBoxPreference mUseDefaultRoute; - private VpnProfile mProfile; private CheckBoxPreference mRouteNoPull; private CheckBoxPreference mNobind; @@ -26,10 +25,7 @@ public class Settings_IP extends PreferenceFragment implements OnPreferenceChang public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - String profileUUID = getArguments().getString(getActivity().getPackageName() + ".profileUUID"); - mProfile = ProfileManager.get(profileUUID); - - + // 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. @@ -62,7 +58,8 @@ public class Settings_IP extends PreferenceFragment implements OnPreferenceChang loadSettings(); } - private void loadSettings() { + @Override + protected void loadSettings() { mUsePull.setChecked(mProfile.mUsePull); mIPv4.setText(mProfile.mIPv4Address); @@ -74,6 +71,7 @@ public class Settings_IP extends PreferenceFragment implements OnPreferenceChang mUseDefaultRoute.setChecked(mProfile.mUseDefaultRoute); mCustomRoutes.setText(mProfile.mCustomRoutes); mRouteNoPull.setChecked(mProfile.mRoutenopull); + mNobind.setChecked(mProfile.mNobind); // Sets Summary onPreferenceChange(mIPv4, mIPv4.getText()); @@ -86,18 +84,9 @@ public class Settings_IP extends PreferenceFragment implements OnPreferenceChang setDNSState(); } - public void onSaveInstanceState (Bundle outState) { - saveSettings(); - } @Override - public void onStop() { - saveSettings(); - super.onStop(); - - } - - private void saveSettings() { + protected void saveSettings() { mProfile.mUsePull = mUsePull.isChecked(); mProfile.mIPv4Address = mIPv4.getText(); mProfile.mIPv6Address = mIPv6.getText(); diff --git a/src/de/blinkt/openvpn/Settings_Obscure.java b/src/de/blinkt/openvpn/Settings_Obscure.java index fd3b540d..aed61392 100644 --- a/src/de/blinkt/openvpn/Settings_Obscure.java +++ b/src/de/blinkt/openvpn/Settings_Obscure.java @@ -6,10 +6,8 @@ import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; -import android.preference.PreferenceFragment; -public class Settings_Obscure extends PreferenceFragment implements OnPreferenceChangeListener { - private VpnProfile mProfile; +public class Settings_Obscure extends OpenVpnPreferencesFragment implements OnPreferenceChangeListener { private CheckBoxPreference mUseRandomHostName; private CheckBoxPreference mUseFloat; private CheckBoxPreference mUseCustomConfig; @@ -22,9 +20,6 @@ public class Settings_Obscure extends PreferenceFragment implements OnPreference // Load the preferences from an XML resource addPreferencesFromResource(R.xml.vpn_obscure); - String profileUUID = getArguments().getString(getActivity().getPackageName() + ".profileUUID"); - mProfile = ProfileManager.get(profileUUID); - mUseRandomHostName = (CheckBoxPreference) findPreference("useRandomHostname"); mUseFloat = (CheckBoxPreference) findPreference("useFloat"); @@ -39,7 +34,7 @@ public class Settings_Obscure extends PreferenceFragment implements OnPreference } - private void loadSettings() { + protected void loadSettings() { mUseRandomHostName.setChecked(mProfile.mUseRandomHostname); mUseFloat.setChecked(mProfile.mUseFloat); mUseCustomConfig.setChecked(mProfile.mUseCustomConfig); @@ -49,13 +44,8 @@ public class Settings_Obscure extends PreferenceFragment implements OnPreference onPreferenceChange(mLogverbosity, mProfile.mVerb); } - @Override - public void onPause() { - saveSettings(); - super.onPause(); - } - private void saveSettings() { + protected void saveSettings() { mProfile.mUseRandomHostname = mUseRandomHostName.isChecked(); mProfile.mUseFloat = mUseFloat.isChecked(); mProfile.mUseCustomConfig = mUseCustomConfig.isChecked(); diff --git a/src/de/blinkt/openvpn/VPNPreferences.java b/src/de/blinkt/openvpn/VPNPreferences.java index e1c8a401..f128270a 100644 --- a/src/de/blinkt/openvpn/VPNPreferences.java +++ b/src/de/blinkt/openvpn/VPNPreferences.java @@ -9,10 +9,6 @@ import android.preference.PreferenceActivity; public class VPNPreferences extends PreferenceActivity { private String mProfileUUID; - private Settings_Basic mBS; - public void setmBS(Settings_Basic mBS) { - this.mBS = mBS; - } public VPNPreferences() { super(); @@ -20,13 +16,7 @@ public class VPNPreferences extends PreferenceActivity { } - protected void onPause() { - super.onPause(); - if(mBS!=null) - mBS.savePreferences(); - } - @Override protected void onStop() { @@ -39,14 +29,6 @@ public class VPNPreferences extends PreferenceActivity { protected void onCreate(Bundle savedInstanceState) { mProfileUUID = getIntent().getStringExtra(getPackageName() + ".profileUUID"); super.onCreate(savedInstanceState); - - - - /* if (hasHeaders()) { - Button button = new Button(this); - button.setText("Save"); - setListFooter(button); - } */ } diff --git a/src/de/blinkt/openvpn/VpnProfile.java b/src/de/blinkt/openvpn/VpnProfile.java index b5e421fb..a0f6db76 100644 --- a/src/de/blinkt/openvpn/VpnProfile.java +++ b/src/de/blinkt/openvpn/VpnProfile.java @@ -557,6 +557,11 @@ public class VpnProfile implements Serializable{ } + public String getUUIDString() { + return mUuid.toString(); + } + + } @@ -1,7 +1,4 @@ Ideas: - - implement security notice fragment - - explain plain text storage of all data except for android keystore - - explain even more insecure of storage on sd card - implement a small app that can do cert+key+ca => p12 or suggest an app on the market - Implementation in ICS OpenVpn would require SD_WRITE permission which I would like to avoid @@ -20,12 +17,10 @@ Ideas: Missing configuration options: IPv6 support: -- Enable IPv6 (tun-ipv6) -- Implementing/testing IPv6 route/ifconfig/DNS Server +- Make GUI IPv6 fit +- fix bogus tun-ipv6 warning Tap support: -- People still ask how to do tap support. :( -- Put statements that tap is not supported everywhere. - Actually it is possible to emulate tap with tun device, a minimal implementation would have to do: - generate random mac - strip macs header on receive |