From 6fcd101fcbc7779ffd7239cc35e5c3359ae38fcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Parm=C3=A9nides=20GV?= Date: Wed, 28 May 2014 17:15:44 +0200 Subject: Resources merge correctly. --- app/build.gradle | 164 ++++++++++++++++----- .../java/de/blinkt/openvpn/api/APIVpnProfile.java | 51 +++++++ .../src/main/res/values/strings-icsopenvpn.xml | 15 ++ .../main/java/de/blinkt/openvpn/FileProvider.java | 142 ------------------ app/src/main/java/de/blinkt/openvpn/LaunchVPN.java | 72 +-------- .../java/de/blinkt/openvpn/OnBootReceiver.java | 36 ----- .../main/java/de/blinkt/openvpn/VpnProfile.java | 2 + .../de/blinkt/openvpn/fragments/LogFragment.java | 19 +-- app/src/main/res/values-ca/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-cs/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-de/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-es/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-et/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-fr/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-id/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-it/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-ja/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-ko/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-nl/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-no/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-pl/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-ro/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-ru/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-sv/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-tr/strings-icsopenvpn.xml | 2 +- app/src/main/res/values-uk/strings-icsopenvpn.xml | 2 +- .../main/res/values-zh-rCN/strings-icsopenvpn.xml | 2 +- .../main/res/values-zh-rTW/strings-icsopenvpn.xml | 2 +- app/src/main/res/values/strings-icsopenvpn.xml | 2 + app/src/main/res/values/untranslatable.xml | 41 +++++- .../src/main/res/values/strings-icsopenvpn.xml | 8 + 31 files changed, 273 insertions(+), 319 deletions(-) create mode 100644 app/remoteExample/src/main/java/de/blinkt/openvpn/api/APIVpnProfile.java create mode 100644 app/remoteExample/src/main/res/values/strings-icsopenvpn.xml delete mode 100644 app/src/main/java/de/blinkt/openvpn/FileProvider.java delete mode 100644 app/src/main/java/de/blinkt/openvpn/OnBootReceiver.java create mode 100644 app/vpndialogxposed/src/main/res/values/strings-icsopenvpn.xml (limited to 'app') 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_continuation = true + } + else if(string_continuation) { + bitmask_untranslatable << text + } + + if(text.contains('')) { + string_continuation = false + bitmask_untranslatable << System.getProperty("line.separator") + } + } + + bitmask_untranslatable.write(bitmask_untranslatable.text.replaceAll("", "")) + bitmask_untranslatable << "" -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 CREATOR + = new Parcelable.Creator() { + 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 @@ + + + + OpenVPN Remote + Hello world! + Settings + Allows another app to control OpenVPN + No Status yet + Not now + Show my IP + Disconnect + Start embedded profile + + + 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 { - @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 @@ - OpenVPN per Android + Adreá del servidor: Port del servidor: Lloc 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 @@ - OpenVPN pro Android + Adresa serveru: Port serveru: Lokace 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 @@ - OpenVPN für Android + Server: Server Port: Ort 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 @@ - OpenVPN para Android + Dirección del servidor: Puerto del servidor: Ubicación 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 @@ - OpenVPN Androidile + Serveri aadress: Serveri port: Asukoht 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 @@ - "OpenVPN pour Android" + "Adresse du serveur:" "Port du serveur:" "Emplacement" 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 @@ - OpenVPN untuk Android + Alamat Server: Port server: Lokasi 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 @@ - OpenVPN per Android + Indirizzo server: Porta del server: Posizione 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 @@ - OpenVPN for Android + サーバアドレス ポート番号 場所 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 @@ - 안드로이드용 OpenVPN + 서버 주소: 서버 포트: 위치 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 @@ - OpenVPN voor Android + Server Adres: Server Poort: Locatie 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 @@ - OpenVPN for Android + Server adresse: Server port: Plassering 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 @@ - OpenVPN dla Androida + Adres serwera: Port serwera: Lokalizacja 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 @@ - OpenVPN pentru Android + Adresa server: Port server: Locaţie 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 @@ - OpenVPN для Android + Адрес сервера: Порт сервера: Расположение 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 @@ - OpenVPN för Android + Serveradress: Serverport: Plats 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 @@ - Android için OpenVPN + Sunucu adresi: Sunucu Portu: Konum 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 @@ - OpenVPN для Android + Адреса сервера: Порт сервера: Розташування 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 @@ - OpenVPN for Android + 服务器地址: 服务器端口: 地点 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 @@ - OpenVPN for Android + 伺服器地址: 伺服器端口: 位置 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 @@ + + Server Address: Server Port: Location Unable to read directory 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 @@ LZO OpenSSL Unknown state - + + Copyright 2012–2014 Arne Schwabe <arne@rfc2549.org> + + openvpn.uni-paderborn.de + 1194 + File Dialog based on work by Alexander Ponomarev + + + + File Dialog + + + + Allows another app to control OpenVPN + Bouncy Castle Crypto APIs + Copyright © 2000–2012 The Legion Of The Bouncy Castle (http://www.bouncycastle.org) + Waiting for user permission to use VPN API + Waiting for user VPN password + VPN password input dialog cancelled + VPN API permission dialog cancelled + + + + + + + + + + + + + + + + + + + + \ 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 @@ + + + + VpnDialog Xposed Module + Select the apps that should be allowed to use the VpnService API without user confirmation + No Apps using the VPNService API found + + -- cgit v1.2.3