summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/build.gradle164
-rw-r--r--app/remoteExample/src/main/java/de/blinkt/openvpn/api/APIVpnProfile.java51
-rw-r--r--app/remoteExample/src/main/res/values/strings-icsopenvpn.xml15
-rw-r--r--app/src/main/java/de/blinkt/openvpn/FileProvider.java142
-rw-r--r--app/src/main/java/de/blinkt/openvpn/LaunchVPN.java72
-rw-r--r--app/src/main/java/de/blinkt/openvpn/OnBootReceiver.java36
-rw-r--r--app/src/main/java/de/blinkt/openvpn/VpnProfile.java2
-rw-r--r--app/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java19
-rwxr-xr-xapp/src/main/res/values-ca/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-cs/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-de/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-es/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-et/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-fr/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-id/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-it/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-ja/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-ko/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-nl/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-no/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-pl/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-ro/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-ru/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-sv/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-tr/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-uk/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-zh-rCN/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values-zh-rTW/strings-icsopenvpn.xml2
-rwxr-xr-xapp/src/main/res/values/strings-icsopenvpn.xml2
-rw-r--r--app/src/main/res/values/untranslatable.xml41
-rw-r--r--app/vpndialogxposed/src/main/res/values/strings-icsopenvpn.xml8
31 files changed, 273 insertions, 319 deletions
diff --git a/app/build.gradle b/app/build.gradle
index 44e48292..062bb7c7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,53 +1,143 @@
apply plugin: 'android'
android {
- compileSdkVersion 19
- buildToolsVersion "19.0.3"
+ compileSdkVersion 19
+ buildToolsVersion "19.0.3"
- defaultConfig {
- minSdkVersion 14
- targetSdkVersion 19
+ defaultConfig {
+ minSdkVersion 14
+ targetSdkVersion 19
- testPackageName "se.leap.bitmaskclient.test"
- testInstrumentationRunner "android.test.InstrumentationTestRunner"
+ testPackageName "se.leap.bitmaskclient.test"
+ testInstrumentationRunner "android.test.InstrumentationTestRunner"
+ }
+
+ signingConfigs {
+ release {
+ storeFile project.hasProperty('storeFileProperty') ? file(storeFileProperty) : null
+ storePassword project.hasProperty('storePasswordProperty') ? storePasswordProperty : ""
+ keyAlias project.hasProperty('keyAliasProperty') ? keyAliasProperty : ""
+ keyPassword project.hasProperty('keyPasswordProperty') ? keyPasswordProperty : ""
}
+ }
- signingConfigs {
- release {
- storeFile project.hasProperty('storeFileProperty') ? file(storeFileProperty) : null
- storePassword project.hasProperty('storePasswordProperty') ? storePasswordProperty : ""
- keyAlias project.hasProperty('keyAliasProperty') ? keyAliasProperty : ""
- keyPassword project.hasProperty('keyPasswordProperty') ? keyPasswordProperty : ""
- }
+ buildTypes {
+ release {
+ //runProguard true
+ signingConfig signingConfigs.release.isSigningReady() ? signingConfigs.release : signingConfigs.debug
}
+ }
- buildTypes {
- release {
- //runProguard true
- signingConfig signingConfigs.release.isSigningReady() ? signingConfigs.release : signingConfigs.debug
- }
+ lintOptions {
+ abortOnError false
+ }
+
+ sourceSets {
+ main {
+ assets.srcDirs = ['assets', 'ovpnlibs/assets']
+ jniLibs.srcDirs = ['ovpnlibs/jniLibs']
+ jni.srcDirs = [] //disable automatic ndk-build
}
+ debug {
+ assets.srcDirs = ['src/debug/assets']
+ }
+ }
+
+ //check.dependsOn connectedCheck
+}
+
+dependencies {
+ androidTestCompile 'com.android.support:support-v4:+'
+ androidTestCompile 'com.jayway.android.robotium:robotium-solo:4.3.1'
+ compile 'com.intellij:annotations:12.0'
+}
+
+def processFileInplace(file, Closure processText) {
+ def text = file.text
+ file.write(processText(text))
+}
+
+
+task checkoutStrippedIcsOpenVPN ( type: Copy ) {
+ //FIXME Checkout ics-openvpn-stripped from branch "ics-openvpn-upstream"
+ from '/tmp/bitmask_android_tmp/ics-openvpn-stripped'
+ into '../ics-openvpn-stripped'
+}
+
+task copyIcsOpenVPNClasses( type: Copy, dependsOn: 'checkoutStrippedIcsOpenVPN' ) {
+ from ('../ics-openvpn-stripped/main/') {
+ include '**/*.java'
+ include '**/*.aidl'
+ include '**/strings.xml'
+ include '**/log_window.xml'
- lintOptions {
- abortOnError false
+ rename 'strings.xml', 'strings-icsopenvpn.xml'
+ filter {
+ line -> line.replaceAll('de.blinkt.openvpn.R', 'se.leap.bitmaskclient.R')
}
-
- sourceSets {
- main {
- assets.srcDirs = ['assets', 'ovpnlibs/assets']
- jniLibs.srcDirs = ['ovpnlibs/jniLibs']
- jni.srcDirs = [] //disable automatic ndk-build
- }
- debug {
- assets.srcDirs = ['src/debug/assets']
+ filter {
+ line -> line.replaceAll('de.blinkt.openvpn.BuildConfig', 'se.leap.bitmaskclient.BuildConfig')
+ }
+ filter {
+ line -> line.replace('package de.blinkt.openvpn;', 'package de.blinkt.openvpn;\n\nimport se.leap.bitmaskclient.R;')
+ }
+ filter {
+ line -> line.replace('package de.blinkt.openvpn.fragments;', 'package de.blinkt.openvpn.fragments;\n\nimport se.leap.bitmaskclient.R;')
+ }
+ filter {
+ line -> line.replaceAll('.*name="app".*', '')
+ }
+ } into '.'
+}
+
+// thanks to http://pleac.sourceforge.net/pleac_groovy/fileaccess.html
+task removeDuplicatedStrings( dependsOn: 'copyIcsOpenVPNClasses' ) << {
+ new File('.').eachFileRecurse {
+ if(it.name.equals('strings.xml')) {
+ def ics_openvpn_file = file(it.path.replace('strings.xml', 'strings-icsopenvpn.xml'))
+ if(ics_openvpn_file.exists()) {
+ def ics_openvpn_strings_names = (new XmlParser()).parse(ics_openvpn_file)
+ def current_file = it
+
+ ics_openvpn_strings_names.string.each {
+ processFileInplace(current_file) { text ->
+ text.replaceAll('.*name=\"' + it.attribute('name') + '\".*(\n)*.*string>.*\n+', '')
+ }
}
+ }
}
+ }
+}
- //check.dependsOn connectedCheck
- }
+task mergeUntranslatable( type: Copy, dependsOn: 'removeDuplicatedStrings') {
+ from ('../ics-openvpn-stripped/main/') {
+ include '**/untranslatable.xml'
+ rename 'untranslatable.xml', 'untranslatable-icsopenvpn.xml'
+ } into '.'
+ def bitmask_untranslatable = file('src/main/res/values/untranslatable.xml')
+ def ics_openvpn_untranslatable = new File(bitmask_untranslatable.path.replace('untranslatable.xml', 'untranslatable-icsopenvpn.xml'))
+ ics_openvpn_untranslatable.createNewFile()
+ def string_continuation = false;
+ ics_openvpn_untranslatable.eachLine { text ->
+ if(text.contains('string name=')) {
+ if(!bitmask_untranslatable.text.contains(text))
+ bitmask_untranslatable << text
+ if(text.contains('</string>'))
+ string_continuation = true
+ }
+ else if(string_continuation) {
+ bitmask_untranslatable << text
+ }
+
+ if(text.contains('</string>')) {
+ string_continuation = false
+ bitmask_untranslatable << System.getProperty("line.separator")
+ }
+ }
+
+ bitmask_untranslatable.write(bitmask_untranslatable.text.replaceAll("</resources>", ""))
+ bitmask_untranslatable << "</resources>"
-dependencies {
- androidTestCompile 'com.android.support:support-v4:+'
- androidTestCompile 'com.jayway.android.robotium:robotium-solo:4.3.1'
- compile 'com.intellij:annotations:12.0'
-} \ No newline at end of file
+ delete ics_openvpn_untranslatable
+}
+build.dependsOn ':app:mergeUntranslatable' \ No newline at end of file
diff --git a/app/remoteExample/src/main/java/de/blinkt/openvpn/api/APIVpnProfile.java b/app/remoteExample/src/main/java/de/blinkt/openvpn/api/APIVpnProfile.java
new file mode 100644
index 00000000..a44891ab
--- /dev/null
+++ b/app/remoteExample/src/main/java/de/blinkt/openvpn/api/APIVpnProfile.java
@@ -0,0 +1,51 @@
+package de.blinkt.openvpn.api;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class APIVpnProfile implements Parcelable {
+
+ public final String mUUID;
+ public final String mName;
+ public final boolean mUserEditable;
+
+ public APIVpnProfile(Parcel in) {
+ mUUID = in.readString();
+ mName = in.readString();
+ mUserEditable = in.readInt() != 0;
+ }
+
+ public APIVpnProfile(String uuidString, String name, boolean userEditable) {
+ mUUID=uuidString;
+ mName = name;
+ mUserEditable=userEditable;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(mUUID);
+ dest.writeString(mName);
+ if(mUserEditable)
+ dest.writeInt(0);
+ else
+ dest.writeInt(1);
+ }
+
+ public static final Parcelable.Creator<APIVpnProfile> CREATOR
+ = new Parcelable.Creator<APIVpnProfile>() {
+ public APIVpnProfile createFromParcel(Parcel in) {
+ return new APIVpnProfile(in);
+ }
+
+ public APIVpnProfile[] newArray(int size) {
+ return new APIVpnProfile[size];
+ }
+ };
+
+
+}
diff --git a/app/remoteExample/src/main/res/values/strings-icsopenvpn.xml b/app/remoteExample/src/main/res/values/strings-icsopenvpn.xml
new file mode 100644
index 00000000..bbaee226
--- /dev/null
+++ b/app/remoteExample/src/main/res/values/strings-icsopenvpn.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="app_name">OpenVPN Remote</string>
+ <string name="hello_world">Hello world!</string>
+ <string name="action_settings">Settings</string>
+ <string name="permission_description">Allows another app to control OpenVPN</string>
+ <string name="no_status_yet">No Status yet</string>
+ <string name="no_now">Not now</string>
+ <string name="show_my_ip">Show my IP</string>
+ <string name="disconnect">Disconnect</string>
+ <string name="start_embedded">Start embedded profile</string>
+
+
+</resources>
diff --git a/app/src/main/java/de/blinkt/openvpn/FileProvider.java b/app/src/main/java/de/blinkt/openvpn/FileProvider.java
deleted file mode 100644
index f9fedd02..00000000
--- a/app/src/main/java/de/blinkt/openvpn/FileProvider.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package de.blinkt.openvpn;
-
-import se.leap.bitmaskclient.R;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import android.content.ContentProvider;
-import android.content.ContentProvider.PipeDataWriter;
-import android.content.ContentValues;
-import android.content.res.AssetFileDescriptor;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.ParcelFileDescriptor;
-import android.provider.OpenableColumns;
-import android.util.Log;
-import de.blinkt.openvpn.core.VpnStatus;
-
-/**
- * A very simple content provider that can serve arbitrary asset files from
- * our .apk.
- */
-public class FileProvider extends ContentProvider
-implements PipeDataWriter<InputStream> {
- @Override
- public boolean onCreate() {
- return true;
- }
-
- @Override
- public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
- String sortOrder) {
- try {
- File dumpfile = getFileFromURI(uri);
-
-
- MatrixCursor c = new MatrixCursor(projection);
-
- Object[] row = new Object[projection.length];
- int i=0;
- for (String r:projection) {
- if(r.equals(OpenableColumns.SIZE))
- row[i] = dumpfile.length();
- if(r.equals(OpenableColumns.DISPLAY_NAME))
- row[i] = dumpfile.getName();
- i++;
- }
- c.addRow(row);
- return c;
- } catch (FileNotFoundException e) {
- VpnStatus.logException(e);
- return null;
- }
-
-
- }
-
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- // Don't support inserts.
- return null;
- }
-
- @Override
- public int delete(Uri uri, String selection, String[] selectionArgs) {
- // Don't support deletes.
- return 0;
- }
-
- @Override
- public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
- // Don't support updates.
- return 0;
- }
-
- @Override
- public String getType(Uri uri) {
- // For this sample, assume all files are .apks.
- return "application/octet-stream";
- }
-
- @Override
- public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {
- File dumpfile = getFileFromURI(uri);
-
- try {
-
- InputStream is = new FileInputStream(dumpfile);
- // Start a new thread that pipes the stream data back to the caller.
- return new AssetFileDescriptor(
- openPipeHelper(uri, null, null, is, this), 0,
- dumpfile.length());
- } catch (IOException e) {
- throw new FileNotFoundException("Unable to open minidump " + uri);
- }
- }
-
- private File getFileFromURI(Uri uri) throws FileNotFoundException {
- // Try to open an asset with the given name.
- String path = uri.getPath();
- if(path.startsWith("/"))
- path = path.replaceFirst("/", "");
-
- // I think this already random enough, no need for magic secure cookies
- // 1f9563a4-a1f5-2165-255f2219-111823ef.dmp
- if (!path.matches("^[0-9a-z-.]*(dmp|dmp.log)$"))
- throw new FileNotFoundException("url not in expect format " + uri);
- File cachedir = getContext().getCacheDir();
- return new File(cachedir,path);
- }
-
- @Override
- public void writeDataToPipe(ParcelFileDescriptor output, Uri uri, String mimeType,
- Bundle opts, InputStream args) {
- // Transfer data from the asset to the pipe the client is reading.
- byte[] buffer = new byte[8192];
- int n;
- FileOutputStream fout = new FileOutputStream(output.getFileDescriptor());
- try {
- while ((n=args.read(buffer)) >= 0) {
- fout.write(buffer, 0, n);
- }
- } catch (IOException e) {
- Log.i("OpenVPNFileProvider", "Failed transferring", e);
- } finally {
- try {
- args.close();
- } catch (IOException e) {
- }
- try {
- fout.close();
- } catch (IOException e) {
- }
- }
- }
-}
diff --git a/app/src/main/java/de/blinkt/openvpn/LaunchVPN.java b/app/src/main/java/de/blinkt/openvpn/LaunchVPN.java
index cfd0efb0..6b4addb3 100644
--- a/app/src/main/java/de/blinkt/openvpn/LaunchVPN.java
+++ b/app/src/main/java/de/blinkt/openvpn/LaunchVPN.java
@@ -2,6 +2,8 @@ package de.blinkt.openvpn;
import se.leap.bitmaskclient.R;
+import se.leap.bitmaskclient.R;
+
import java.io.IOException;
import android.app.Activity;
@@ -108,75 +110,7 @@ public class LaunchVPN extends Activity {
}
}
-
- private void askForPW(final int type) {
-
- final EditText entry = new EditText(this);
- final View userpwlayout = getLayoutInflater().inflate(R.layout.userpass, null);
-
- entry.setSingleLine();
- entry.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
- entry.setTransformationMethod(new PasswordTransformationMethod());
-
- AlertDialog.Builder dialog = new AlertDialog.Builder(this);
- dialog.setTitle("Need " + getString(type));
- dialog.setMessage("Enter the password for profile " + mSelectedProfile.mName);
-
- if (type == R.string.password) {
- ((EditText)userpwlayout.findViewById(R.id.username)).setText(mSelectedProfile.mUsername);
- ((EditText)userpwlayout.findViewById(R.id.password)).setText(mSelectedProfile.mPassword);
- ((CheckBox)userpwlayout.findViewById(R.id.save_password)).setChecked(!TextUtils.isEmpty(mSelectedProfile.mPassword));
- ((CheckBox)userpwlayout.findViewById(R.id.show_password)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- if (isChecked)
- ((EditText)userpwlayout.findViewById(R.id.password)).setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
- else
- ((EditText)userpwlayout.findViewById(R.id.password)).setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
- }
- });
-
- dialog.setView(userpwlayout);
- } else {
- dialog.setView(entry);
- }
-
- AlertDialog.Builder builder = dialog.setPositiveButton(android.R.string.ok,
- new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
-
- if (type == R.string.password) {
- mSelectedProfile.mUsername = ((EditText) userpwlayout.findViewById(R.id.username)).getText().toString();
-
- String pw = ((EditText) userpwlayout.findViewById(R.id.password)).getText().toString();
- if (((CheckBox) userpwlayout.findViewById(R.id.save_password)).isChecked()) {
- mSelectedProfile.mPassword=pw;
- } else {
- mSelectedProfile.mPassword=null;
- mSelectedProfile.mTransientPW = pw;
- }
- } else {
- mSelectedProfile.mTransientPCKS12PW = entry.getText().toString();
- }
- onActivityResult(START_VPN_PROFILE, Activity.RESULT_OK, null);
-
- }
-
- });
- dialog.setNegativeButton(android.R.string.cancel,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- VpnStatus.updateStateString("USER_VPN_PASSWORD_CANCELLED", "", R.string.state_user_vpn_password_cancelled,
- ConnectionStatus.LEVEL_NOTCONNECTED);
- finish();
- }
- });
-
- dialog.create().show();
-
- }
+
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
diff --git a/app/src/main/java/de/blinkt/openvpn/OnBootReceiver.java b/app/src/main/java/de/blinkt/openvpn/OnBootReceiver.java
deleted file mode 100644
index 129d8d1c..00000000
--- a/app/src/main/java/de/blinkt/openvpn/OnBootReceiver.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package de.blinkt.openvpn;
-
-import se.leap.bitmaskclient.R;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import de.blinkt.openvpn.core.ProfileManager;
-
-
-public class OnBootReceiver extends BroadcastReceiver {
-
- // Debug: am broadcast -a android.intent.action.BOOT_COMPLETED
- @Override
- public void onReceive(Context context, Intent intent) {
-
- final String action = intent.getAction();
-
- if(Intent.ACTION_BOOT_COMPLETED.equals(action)) {
- VpnProfile bootProfile = ProfileManager.getOnBootProfile(context);
- if(bootProfile != null) {
- launchVPN(bootProfile, context);
- }
- }
- }
-
- void launchVPN(VpnProfile profile, Context context) {
- Intent startVpnIntent = new Intent(Intent.ACTION_MAIN);
- startVpnIntent.setClass(context, LaunchVPN.class);
- startVpnIntent.putExtra(LaunchVPN.EXTRA_KEY,profile.getUUIDString());
- startVpnIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startVpnIntent.putExtra(LaunchVPN.EXTRA_HIDELOG, true);
-
- context.startActivity(startVpnIntent);
- }
-}
diff --git a/app/src/main/java/de/blinkt/openvpn/VpnProfile.java b/app/src/main/java/de/blinkt/openvpn/VpnProfile.java
index afa70100..000fc47c 100644
--- a/app/src/main/java/de/blinkt/openvpn/VpnProfile.java
+++ b/app/src/main/java/de/blinkt/openvpn/VpnProfile.java
@@ -2,6 +2,8 @@ package de.blinkt.openvpn;
import se.leap.bitmaskclient.R;
+import se.leap.bitmaskclient.R;
+
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
diff --git a/app/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java b/app/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java
index fe7a8bd3..2f04d235 100644
--- a/app/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java
+++ b/app/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java
@@ -2,6 +2,8 @@ package de.blinkt.openvpn.fragments;
import se.leap.bitmaskclient.R;
+import se.leap.bitmaskclient.R;
+
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
@@ -22,8 +24,7 @@ import android.widget.*;
import android.widget.AdapterView.OnItemLongClickListener;
import de.blinkt.openvpn.*;
import de.blinkt.openvpn.activities.DisconnectVPN;
-import de.blinkt.openvpn.activities.MainActivity;
-import de.blinkt.openvpn.activities.VPNPreferences;
+import se.leap.bitmaskclient.Dashboard;
import de.blinkt.openvpn.core.OpenVPNManagement;
import de.blinkt.openvpn.core.VpnStatus;
import de.blinkt.openvpn.core.VpnStatus.ConnectionStatus;
@@ -424,24 +425,14 @@ public class LogFragment extends ListFragment implements StateListener, SeekBar.
Intent intent = new Intent(getActivity(),DisconnectVPN.class);
startActivity(intent);
return true;
- } else if(item.getItemId()==R.id.send) {
+ } else if(item.getItemId()==R.id.send) {
ladapter.shareLog();
- } else if(item.getItemId()==R.id.edit_vpn) {
- VpnProfile lastConnectedprofile = ProfileManager.getLastConnectedVpn();
-
- if(lastConnectedprofile!=null) {
- Intent vprefintent = new Intent(getActivity(),VPNPreferences.class)
- .putExtra(VpnProfile.EXTRA_PROFILEUUID,lastConnectedprofile.getUUIDString());
- startActivityForResult(vprefintent,START_VPN_CONFIG);
- } else {
- Toast.makeText(getActivity(), R.string.log_no_last_vpn, Toast.LENGTH_LONG).show();
- }
} else if(item.getItemId() == R.id.toggle_time) {
showHideOptionsPanel();
} else if(item.getItemId() == android.R.id.home) {
// This is called when the Home (Up) button is pressed
// in the Action Bar.
- Intent parentActivityIntent = new Intent(getActivity(), MainActivity.class);
+ Intent parentActivityIntent = new Intent(getActivity(), Dashboard.class);
parentActivityIntent.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK);
diff --git a/app/src/main/res/values-ca/strings-icsopenvpn.xml b/app/src/main/res/values-ca/strings-icsopenvpn.xml
index 554b4816..67db8022 100755
--- a/app/src/main/res/values-ca/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-ca/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN per Android</string>
+
<string name="address">Adreá del servidor:</string>
<string name="port">Port del servidor:</string>
<string name="location">Lloc</string>
diff --git a/app/src/main/res/values-cs/strings-icsopenvpn.xml b/app/src/main/res/values-cs/strings-icsopenvpn.xml
index 2377062e..179f81f1 100755
--- a/app/src/main/res/values-cs/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-cs/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN pro Android</string>
+
<string name="address">Adresa serveru:</string>
<string name="port">Port serveru:</string>
<string name="location">Lokace</string>
diff --git a/app/src/main/res/values-de/strings-icsopenvpn.xml b/app/src/main/res/values-de/strings-icsopenvpn.xml
index ef9fb9d6..9bf58685 100755
--- a/app/src/main/res/values-de/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-de/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN für Android</string>
+
<string name="address">Server:</string>
<string name="port">Server Port:</string>
<string name="location">Ort</string>
diff --git a/app/src/main/res/values-es/strings-icsopenvpn.xml b/app/src/main/res/values-es/strings-icsopenvpn.xml
index 5ad33bbd..e9b6ed81 100755
--- a/app/src/main/res/values-es/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-es/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN para Android</string>
+
<string name="address">Dirección del servidor:</string>
<string name="port">Puerto del servidor:</string>
<string name="location">Ubicación</string>
diff --git a/app/src/main/res/values-et/strings-icsopenvpn.xml b/app/src/main/res/values-et/strings-icsopenvpn.xml
index 61f8556c..f8e219f3 100755
--- a/app/src/main/res/values-et/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-et/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN Androidile</string>
+
<string name="address">Serveri aadress:</string>
<string name="port">Serveri port:</string>
<string name="location">Asukoht</string>
diff --git a/app/src/main/res/values-fr/strings-icsopenvpn.xml b/app/src/main/res/values-fr/strings-icsopenvpn.xml
index 140ac977..e84f8cb8 100755
--- a/app/src/main/res/values-fr/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-fr/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">"OpenVPN pour Android"</string>
+
<string name="address">"Adresse du serveur:"</string>
<string name="port">"Port du serveur:"</string>
<string name="location">"Emplacement"</string>
diff --git a/app/src/main/res/values-id/strings-icsopenvpn.xml b/app/src/main/res/values-id/strings-icsopenvpn.xml
index 0a7d32b0..ccb60754 100755
--- a/app/src/main/res/values-id/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-id/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN untuk Android</string>
+
<string name="address">Alamat Server:</string>
<string name="port">Port server:</string>
<string name="location">Lokasi</string>
diff --git a/app/src/main/res/values-it/strings-icsopenvpn.xml b/app/src/main/res/values-it/strings-icsopenvpn.xml
index b35fa480..aaa18afa 100755
--- a/app/src/main/res/values-it/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-it/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN per Android</string>
+
<string name="address">Indirizzo server:</string>
<string name="port">Porta del server:</string>
<string name="location">Posizione</string>
diff --git a/app/src/main/res/values-ja/strings-icsopenvpn.xml b/app/src/main/res/values-ja/strings-icsopenvpn.xml
index 162d56f0..2ce290a3 100755
--- a/app/src/main/res/values-ja/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-ja/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN for Android</string>
+
<string name="address">サーバアドレス</string>
<string name="port">ポート番号</string>
<string name="location">場所</string>
diff --git a/app/src/main/res/values-ko/strings-icsopenvpn.xml b/app/src/main/res/values-ko/strings-icsopenvpn.xml
index 61504764..cd8bc176 100755
--- a/app/src/main/res/values-ko/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-ko/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">안드로이드용 OpenVPN</string>
+
<string name="address">서버 주소:</string>
<string name="port">서버 포트:</string>
<string name="location">위치</string>
diff --git a/app/src/main/res/values-nl/strings-icsopenvpn.xml b/app/src/main/res/values-nl/strings-icsopenvpn.xml
index a7ae78fd..f553449b 100755
--- a/app/src/main/res/values-nl/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-nl/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN voor Android</string>
+
<string name="address">Server Adres:</string>
<string name="port">Server Poort:</string>
<string name="location">Locatie</string>
diff --git a/app/src/main/res/values-no/strings-icsopenvpn.xml b/app/src/main/res/values-no/strings-icsopenvpn.xml
index 23af8c31..7a7dd124 100755
--- a/app/src/main/res/values-no/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-no/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN for Android</string>
+
<string name="address">Server adresse:</string>
<string name="port">Server port:</string>
<string name="location">Plassering</string>
diff --git a/app/src/main/res/values-pl/strings-icsopenvpn.xml b/app/src/main/res/values-pl/strings-icsopenvpn.xml
index 5c96d94c..d628da6c 100755
--- a/app/src/main/res/values-pl/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-pl/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN dla Androida</string>
+
<string name="address">Adres serwera:</string>
<string name="port">Port serwera:</string>
<string name="location">Lokalizacja</string>
diff --git a/app/src/main/res/values-ro/strings-icsopenvpn.xml b/app/src/main/res/values-ro/strings-icsopenvpn.xml
index 7e00ba96..8ae2770e 100755
--- a/app/src/main/res/values-ro/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-ro/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN pentru Android</string>
+
<string name="address">Adresa server:</string>
<string name="port">Port server:</string>
<string name="location">Locaţie</string>
diff --git a/app/src/main/res/values-ru/strings-icsopenvpn.xml b/app/src/main/res/values-ru/strings-icsopenvpn.xml
index 9cc95a5a..292ddf46 100755
--- a/app/src/main/res/values-ru/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-ru/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN для Android</string>
+
<string name="address">Адрес сервера:</string>
<string name="port">Порт сервера:</string>
<string name="location">Расположение</string>
diff --git a/app/src/main/res/values-sv/strings-icsopenvpn.xml b/app/src/main/res/values-sv/strings-icsopenvpn.xml
index 12a94cc9..1e4f3635 100755
--- a/app/src/main/res/values-sv/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-sv/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN för Android</string>
+
<string name="address">Serveradress:</string>
<string name="port">Serverport:</string>
<string name="location">Plats</string>
diff --git a/app/src/main/res/values-tr/strings-icsopenvpn.xml b/app/src/main/res/values-tr/strings-icsopenvpn.xml
index 85f1740f..903c358a 100755
--- a/app/src/main/res/values-tr/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-tr/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">Android için OpenVPN</string>
+
<string name="address">Sunucu adresi:</string>
<string name="port">Sunucu Portu:</string>
<string name="location">Konum</string>
diff --git a/app/src/main/res/values-uk/strings-icsopenvpn.xml b/app/src/main/res/values-uk/strings-icsopenvpn.xml
index 3418ece1..173ae0d4 100755
--- a/app/src/main/res/values-uk/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-uk/strings-icsopenvpn.xml
@@ -2,7 +2,7 @@
<!--Generated by crowdin.net-->
<!-- Generated by crowdin.net -->
<resources>
- <string name="app">OpenVPN для Android</string>
+
<string name="address">Адреса сервера:</string>
<string name="port">Порт сервера:</string>
<string name="location">Розташування</string>
diff --git a/app/src/main/res/values-zh-rCN/strings-icsopenvpn.xml b/app/src/main/res/values-zh-rCN/strings-icsopenvpn.xml
index a2fb95ce..0ffb5d6b 100755
--- a/app/src/main/res/values-zh-rCN/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-zh-rCN/strings-icsopenvpn.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
- <string name="app">OpenVPN for Android</string>
+
<string name="address">服务器地址:</string>
<string name="port">服务器端口:</string>
<string name="location">地点</string>
diff --git a/app/src/main/res/values-zh-rTW/strings-icsopenvpn.xml b/app/src/main/res/values-zh-rTW/strings-icsopenvpn.xml
index 75f72ecb..e467dd5b 100755
--- a/app/src/main/res/values-zh-rTW/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-zh-rTW/strings-icsopenvpn.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
- <string name="app">OpenVPN for Android</string>
+
<string name="address">伺服器地址:</string>
<string name="port">伺服器端口:</string>
<string name="location">位置</string>
diff --git a/app/src/main/res/values/strings-icsopenvpn.xml b/app/src/main/res/values/strings-icsopenvpn.xml
index a5424c39..6ab41787 100755
--- a/app/src/main/res/values/strings-icsopenvpn.xml
+++ b/app/src/main/res/values/strings-icsopenvpn.xml
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <!-- Generated by crowdin.net -->
<resources>
+
+ <string name="address">Server Address:</string>
<string name="port">Server Port:</string>
<string name="location">Location</string>
<string name="cant_read_folder">Unable to read directory</string>
diff --git a/app/src/main/res/values/untranslatable.xml b/app/src/main/res/values/untranslatable.xml
index 6435bfbf..4c652f20 100644
--- a/app/src/main/res/values/untranslatable.xml
+++ b/app/src/main/res/values/untranslatable.xml
@@ -16,4 +16,43 @@
<string name="lzo" translatable="false">LZO</string>
<string name="openssl" translatable="false">OpenSSL</string>
<string name="unknown_state" translatable="false">Unknown state</string>
-</resources>
+
+ <string name="copyright_blinktgui" translatable="false">Copyright 2012–2014 Arne Schwabe &lt;arne@rfc2549.org></string>
+
+ <string name="defaultserver" translatable="false">openvpn.uni-paderborn.de</string>
+ <string name="defaultport" translatable="false">1194</string>
+ <string name="copyright_file_dialog" translatable="false">File Dialog based on work by Alexander Ponomarev</string>
+
+
+
+ <string name="file_dialog" translatable="false">File Dialog</string>
+
+
+
+ <string name="permission_description">Allows another app to control OpenVPN</string>
+ <string name="bouncy_castle" translatable="false">Bouncy Castle Crypto APIs</string>
+ <string name="copyright_bouncycastle" translatable="false">Copyright © 2000–2012 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)</string>
+ <string name="state_user_vpn_permission" translatable="false">Waiting for user permission to use VPN API</string>
+ <string name="state_user_vpn_password" translatable="false">Waiting for user VPN password</string>
+ <string name="state_user_vpn_password_cancelled" translatable="false">VPN password input dialog cancelled</string>
+ <string name="state_user_vpn_permission_cancelled" translatable="false">VPN API permission dialog cancelled</string>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</resources> \ No newline at end of file
diff --git a/app/vpndialogxposed/src/main/res/values/strings-icsopenvpn.xml b/app/vpndialogxposed/src/main/res/values/strings-icsopenvpn.xml
new file mode 100644
index 00000000..6eace130
--- /dev/null
+++ b/app/vpndialogxposed/src/main/res/values/strings-icsopenvpn.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="app_name">VpnDialog Xposed Module</string>
+ <string name="select_apps">Select the apps that should be allowed to use the VpnService API without user confirmation</string>
+ <string name="no_apps_found">No Apps using the VPNService API found</string>
+
+</resources>