summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/build.gradle4
-rw-r--r--app/src/androidTest/legacy/TestGatewaysManager.java6
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/Constants.java1
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/DrawerSettingsAdapter.java0
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java18
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java19
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java3
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/fragments/ExcludeAppsFragment.java329
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/utils/PreferenceHelper.java18
-rwxr-xr-xapp/src/main/res/drawable-hdpi/ic_search_white_24dp.pngbin0 -> 396 bytes
-rw-r--r--app/src/main/res/drawable-hdpi/ic_shield_remove_grey600_36dp.pngbin0 -> 1628 bytes
-rwxr-xr-xapp/src/main/res/drawable-mdpi/ic_search_white_24dp.pngbin0 -> 247 bytes
-rw-r--r--app/src/main/res/drawable-mdpi/ic_shield_remove_grey600_36dp.pngbin0 -> 1192 bytes
-rwxr-xr-xapp/src/main/res/drawable-xhdpi/ic_search_white_24dp.pngbin0 -> 465 bytes
-rw-r--r--app/src/main/res/drawable-xhdpi/ic_shield_remove_grey600_36dp.pngbin0 -> 1930 bytes
-rw-r--r--app/src/main/res/drawable-xxhdpi/bg_switchbar.xml9
-rwxr-xr-xapp/src/main/res/drawable-xxhdpi/ic_search_white_24dp.pngbin0 -> 728 bytes
-rw-r--r--app/src/main/res/drawable-xxhdpi/ic_shield_remove_grey600_36dp.pngbin0 -> 2902 bytes
-rwxr-xr-xapp/src/main/res/drawable-xxxhdpi/ic_search_white_24dp.pngbin0 -> 915 bytes
-rw-r--r--app/src/main/res/drawable-xxxhdpi/ic_shield_remove_grey600_36dp.pngbin0 -> 3686 bytes
-rw-r--r--app/src/main/res/layout/allowed_application_layout.xml61
-rw-r--r--app/src/main/res/layout/allowed_vpn_apps.xml60
-rw-r--r--app/src/main/res/layout/f_drawer_main.xml36
-rw-r--r--app/src/main/res/layout/s_layout.xml12
-rw-r--r--app/src/main/res/menu/allowed_apps.xml15
-rw-r--r--app/src/main/res/values-ar/strings.xml26
-rw-r--r--app/src/main/res/values-az/strings.xml65
-rw-r--r--app/src/main/res/values-el/strings.xml36
-rw-r--r--app/src/main/res/values-es/strings.xml26
-rw-r--r--app/src/main/res/values-et/strings.xml31
-rw-r--r--app/src/main/res/values-fa-rIR/strings.xml24
-rw-r--r--app/src/main/res/values-fr/strings.xml26
-rw-r--r--app/src/main/res/values-he/strings.xml24
-rw-r--r--app/src/main/res/values-it/strings.xml12
-rw-r--r--app/src/main/res/values-ja/strings.xml24
-rw-r--r--app/src/main/res/values-pt-rBR/strings.xml26
-rw-r--r--app/src/main/res/values-pt-rPT/strings.xml97
-rw-r--r--app/src/main/res/values-ru/strings.xml18
-rw-r--r--app/src/main/res/values/colors.xml2
-rwxr-xr-xapp/src/main/res/values/strings-icsopenvpn.xml1
-rw-r--r--app/src/main/res/values/strings.xml3
-rw-r--r--app/src/main/res/values/untranslatable.xml12
-rw-r--r--app/src/test/java/se/leap/bitmaskclient/eip/GatewaySelectorTest.java34
43 files changed, 878 insertions, 200 deletions
diff --git a/app/build.gradle b/app/build.gradle
index 0fb4e5f4..91cbeed1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -14,8 +14,8 @@ android {
defaultConfig {
applicationId "se.leap.bitmaskclient"
- versionCode 139
- versionName "1.0.0RC1"
+ versionCode 141
+ versionName "1.0.1"
minSdkVersion 16
targetSdkVersion 27
vectorDrawables.useSupportLibrary = true
diff --git a/app/src/androidTest/legacy/TestGatewaysManager.java b/app/src/androidTest/legacy/TestGatewaysManager.java
index 02c521be..80438073 100644
--- a/app/src/androidTest/legacy/TestGatewaysManager.java
+++ b/app/src/androidTest/legacy/TestGatewaysManager.java
@@ -119,7 +119,7 @@ public class TestGatewaysManager extends InstrumentationTestCase {
eip_definition = new JSONObject(assets.toString(TestConstants.EIP_DEFINITION_FILE));
JSONObject secrets = new JSONObject(assets.toString(TestConstants.SECRETS_FILE));
JSONObject gateway = new JSONObject(assets.toString(TestConstants.GATEWAY_FILE));
- this.gateway = new Gateway(eip_definition, secrets, gateway);
+ this.gateway = new Gateway(eip_definition, secrets, gateway, context);
} catch (Exception e) {
e.printStackTrace();
}
@@ -137,7 +137,7 @@ public class TestGatewaysManager extends InstrumentationTestCase {
capabilitiesJson.put("protocols", protocolJsonArray);
gatewayJson.put("protocols", protocolJsonArray);
}
- this.gateway = new Gateway(eip_definition, secrets, gateways.getJSONObject(0));
+ this.gateway = new Gateway(eip_definition, secrets, gateways.getJSONObject(0), context);
} catch (JSONException e) {
e.printStackTrace();
assertFalse(true);
@@ -153,7 +153,7 @@ public class TestGatewaysManager extends InstrumentationTestCase {
eip_definition = new JSONObject(assets.toString(TestConstants.EIP_DEFINITION_FILE));
JSONObject secrets = new JSONObject(assets.toString(TestConstants.SECRETS_FILE).replace("6u6", "7u7"));
JSONObject gateway = new JSONObject(assets.toString(TestConstants.GATEWAY_FILE));
- this.gateway = new Gateway(eip_definition, secrets, gateway);
+ this.gateway = new Gateway(eip_definition, secrets, gateway, context);
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/Constants.java b/app/src/main/java/se/leap/bitmaskclient/Constants.java
index 0bc3c944..720cd1c4 100644
--- a/app/src/main/java/se/leap/bitmaskclient/Constants.java
+++ b/app/src/main/java/se/leap/bitmaskclient/Constants.java
@@ -13,6 +13,7 @@ public interface Constants {
String ALWAYS_ON_SHOW_DIALOG = "DIALOG.ALWAYS_ON_SHOW_DIALOG";
String CLEARLOG = "clearlogconnect";
String LAST_USED_PROFILE = "last_used_profile";
+ String EXCLUDED_APPS = "excluded_apps";
String USE_PLUGGABLE_TRANSPORTS = "usePluggableTransports";
diff --git a/app/src/main/java/se/leap/bitmaskclient/DrawerSettingsAdapter.java b/app/src/main/java/se/leap/bitmaskclient/DrawerSettingsAdapter.java
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/app/src/main/java/se/leap/bitmaskclient/DrawerSettingsAdapter.java
diff --git a/app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java b/app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java
index 3db86205..e3c7ac1b 100644
--- a/app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java
@@ -55,6 +55,7 @@ import se.leap.bitmaskclient.R;
import se.leap.bitmaskclient.eip.EipCommand;
import se.leap.bitmaskclient.fragments.AboutFragment;
import se.leap.bitmaskclient.fragments.AlwaysOnDialog;
+import se.leap.bitmaskclient.fragments.ExcludeAppsFragment;
import se.leap.bitmaskclient.fragments.LogFragment;
import se.leap.bitmaskclient.views.IconSwitchEntry;
import se.leap.bitmaskclient.views.IconTextEntry;
@@ -69,6 +70,7 @@ import static se.leap.bitmaskclient.Constants.PROVIDER_KEY;
import static se.leap.bitmaskclient.Constants.REQUEST_CODE_SWITCH_PROVIDER;
import static se.leap.bitmaskclient.Constants.SHARED_PREFERENCES;
import static se.leap.bitmaskclient.R.string.about_fragment_title;
+import static se.leap.bitmaskclient.R.string.exclude_apps_fragment_title;
import static se.leap.bitmaskclient.R.string.log_fragment_title;
import static se.leap.bitmaskclient.utils.ConfigHelper.isDefaultBitmask;
import static se.leap.bitmaskclient.utils.PreferenceHelper.getSaveBattery;
@@ -230,6 +232,7 @@ public class NavigationDrawerFragment extends Fragment {
initUseBridgesEntry();
initSaveBatteryEntry();
initAlwaysOnVpnEntry();
+ initExcludeAppsEntry();
initDonateEntry();
initLogEntry();
initAboutEntry();
@@ -308,6 +311,20 @@ public class NavigationDrawerFragment extends Fragment {
}
}
+ private void initExcludeAppsEntry() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ IconTextEntry excludeApps = drawerView.findViewById(R.id.exclude_apps);
+ excludeApps.setVisibility(VISIBLE);
+ FragmentManagerEnhanced fragmentManager = new FragmentManagerEnhanced(getActivity().getSupportFragmentManager());
+ excludeApps.setOnClickListener((buttonView) -> {
+ closeDrawer();
+ Fragment fragment = new ExcludeAppsFragment();
+ setActionBarTitle(exclude_apps_fragment_title);
+ fragmentManager.replace(R.id.main_container, fragment, MainActivity.TAG);
+ });
+ }
+ }
+
private void initDonateEntry() {
if (ENABLE_DONATION) {
IconTextEntry donate = drawerView.findViewById(R.id.donate);
@@ -330,7 +347,6 @@ public class NavigationDrawerFragment extends Fragment {
setActionBarTitle(log_fragment_title);
fragmentManager.replace(R.id.main_container, fragment, MainActivity.TAG);
});
-
}
private void initAboutEntry() {
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java b/app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java
index 352d6b18..15ee13c2 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java
@@ -16,6 +16,8 @@
*/
package se.leap.bitmaskclient.eip;
+import android.content.Context;
+
import android.support.annotation.NonNull;
import com.google.gson.Gson;
@@ -24,10 +26,13 @@ import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
import java.util.HashMap;
import de.blinkt.openvpn.VpnProfile;
import de.blinkt.openvpn.core.ConfigParser;
+import se.leap.bitmaskclient.utils.PreferenceHelper;
import de.blinkt.openvpn.core.connection.Connection;
import static se.leap.bitmaskclient.Constants.IP_ADDRESS;
@@ -65,7 +70,7 @@ public class Gateway {
* Build a gateway object from a JSON OpenVPN gateway definition in eip-service.json
* and create a VpnProfile belonging to it.
*/
- public Gateway(JSONObject eipDefinition, JSONObject secrets, JSONObject gateway) {
+ public Gateway(JSONObject eipDefinition, JSONObject secrets, JSONObject gateway, Context context) {
this.gateway = gateway;
this.secrets = secrets;
@@ -74,13 +79,17 @@ public class Gateway {
timezone = getTimezone(eipDefinition);
name = locationAsName(eipDefinition);
apiVersion = getApiVersion(eipDefinition);
- vpnProfiles = createVPNProfiles();
+ vpnProfiles = createVPNProfiles(context);
}
- private void addProfileInfos(HashMap<Connection.TransportType, VpnProfile> profiles) {
+ private void addProfileInfos(Context context, HashMap<Connection.TransportType, VpnProfile> profiles) {
+ Set<String> excludedAppsVpn = PreferenceHelper.getExcludedApps(context);
for (VpnProfile profile : profiles.values()) {
profile.mName = name;
profile.mGatewayIp = gateway.optString(IP_ADDRESS);
+ if (excludedAppsVpn != null) {
+ profile.mAllowedAppsVpn = new HashSet<>(excludedAppsVpn);
+ }
}
}
@@ -123,12 +132,12 @@ public class Gateway {
/**
* Create and attach the VpnProfile to our gateway object
*/
- private @NonNull HashMap<Connection.TransportType, VpnProfile> createVPNProfiles() {
+ private @NonNull HashMap<Connection.TransportType, VpnProfile> createVPNProfiles(Context context) {
HashMap<Connection.TransportType, VpnProfile> profiles = new HashMap<>();
try {
VpnConfigGenerator vpnConfigurationGenerator = new VpnConfigGenerator(generalConfiguration, secrets, gateway, apiVersion);
profiles = vpnConfigurationGenerator.generateVpnProfiles();
- addProfileInfos(profiles);
+ addProfileInfos(context, profiles);
} catch (ConfigParser.ConfigParseError | IOException | JSONException e) {
// FIXME We didn't get a VpnProfile! Error handling! and log level
e.printStackTrace();
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java
index 740df97f..0847a07e 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java
@@ -44,6 +44,7 @@ public class GatewaysManager {
private static final String TAG = GatewaysManager.class.getSimpleName();
+ private Context context;
private SharedPreferences preferences;
private LinkedHashMap<String, Gateway> gateways = new LinkedHashMap<>();
private Type listType = new TypeToken<ArrayList<Gateway>>() {}.getType();
@@ -91,7 +92,7 @@ public class GatewaysManager {
for (int i = 0; i < gatewaysDefined.length(); i++) {
JSONObject gw = gatewaysDefined.getJSONObject(i);
JSONObject secrets = secretsConfiguration();
- Gateway aux = new Gateway(eipDefinition, secrets, gw);
+ Gateway aux = new Gateway(eipDefinition, secrets, gw, this.context);
if (gateways.get(aux.getRemoteIP()) == null) {
addGateway(aux);
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/fragments/ExcludeAppsFragment.java b/app/src/main/java/se/leap/bitmaskclient/fragments/ExcludeAppsFragment.java
new file mode 100644
index 00000000..066c9636
--- /dev/null
+++ b/app/src/main/java/se/leap/bitmaskclient/fragments/ExcludeAppsFragment.java
@@ -0,0 +1,329 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package se.leap.bitmaskclient.fragments;
+
+import android.Manifest;
+import android.app.Activity;
+import android.content.SharedPreferences;
+import android.support.v4.app.Fragment;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.CompoundButton;
+import android.widget.Filter;
+import android.widget.Filterable;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.SearchView;
+import android.widget.TextView;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.Vector;
+
+import de.blinkt.openvpn.VpnProfile;
+
+import se.leap.bitmaskclient.R;
+import se.leap.bitmaskclient.utils.PreferenceHelper;
+
+/**
+ * Created by arne on 16.11.14.
+ */
+public class ExcludeAppsFragment extends Fragment implements AdapterView.OnItemClickListener, CompoundButton.OnCheckedChangeListener, View.OnClickListener {
+ private ListView mListView;
+ private VpnProfile mProfile;
+ private PackageAdapter mListAdapter;
+
+ private SharedPreferences allow_apps;
+ private SharedPreferences.Editor allow_apps_editor;
+ private Set<String> apps;
+
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ AppViewHolder avh = (AppViewHolder) view.getTag();
+ avh.checkBox.toggle();
+ }
+
+ @Override
+ public void onClick(View v) {
+
+ }
+
+ static class AppViewHolder {
+ public ApplicationInfo mInfo;
+ public View rootView;
+ public TextView appName;
+ public ImageView appIcon;
+ //public TextView appSize;
+ //public TextView disabled;
+ public CompoundButton checkBox;
+
+ static public AppViewHolder createOrRecycle(LayoutInflater inflater, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = inflater.inflate(R.layout.allowed_application_layout, parent, false);
+
+ // Creates a ViewHolder and store references to the two children views
+ // we want to bind data to.
+ AppViewHolder holder = new AppViewHolder();
+ holder.rootView = convertView;
+ holder.appName = (TextView) convertView.findViewById(R.id.app_name);
+ holder.appIcon = (ImageView) convertView.findViewById(R.id.app_icon);
+ holder.checkBox = (CompoundButton) convertView.findViewById(R.id.app_selected);
+ convertView.setTag(holder);
+
+ return holder;
+ } else {
+ // Get the ViewHolder back to get fast access to the TextView
+ // and the ImageView.
+ return (AppViewHolder) convertView.getTag();
+ }
+ }
+
+ }
+
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ String packageName = (String) buttonView.getTag();
+
+ if (isChecked) {
+ Log.d("openvpn", "adding to allowed apps" + packageName);
+
+ apps.add(packageName);
+
+ } else {
+ Log.d("openvpn", "removing from allowed apps" + packageName);
+
+ apps.remove(packageName);
+ }
+
+ PreferenceHelper.setExcludedApps(this.getContext(), apps);
+ }
+
+
+ class PackageAdapter extends BaseAdapter implements Filterable {
+ private Vector<ApplicationInfo> mPackages;
+ private final LayoutInflater mInflater;
+ private final PackageManager mPm;
+ private ItemFilter mFilter = new ItemFilter();
+ private Vector<ApplicationInfo> mFilteredData;
+
+
+ private class ItemFilter extends Filter {
+ @Override
+ protected FilterResults performFiltering(CharSequence constraint) {
+
+ String filterString = constraint.toString().toLowerCase(Locale.getDefault());
+
+ FilterResults results = new FilterResults();
+
+
+ int count = mPackages.size();
+ final Vector<ApplicationInfo> nlist = new Vector<>(count);
+
+ for (int i = 0; i < count; i++) {
+ ApplicationInfo pInfo = mPackages.get(i);
+ CharSequence appName = pInfo.loadLabel(mPm);
+
+ if (TextUtils.isEmpty(appName))
+ appName = pInfo.packageName;
+
+ if (appName instanceof String) {
+ if (((String) appName).toLowerCase(Locale.getDefault()).contains(filterString))
+ nlist.add(pInfo);
+ } else {
+ if (appName.toString().toLowerCase(Locale.getDefault()).contains(filterString))
+ nlist.add(pInfo);
+ }
+ }
+ results.values = nlist;
+ results.count = nlist.size();
+
+ return results;
+ }
+
+ @Override
+ protected void publishResults(CharSequence constraint, FilterResults results) {
+ mFilteredData = (Vector<ApplicationInfo>) results.values;
+ notifyDataSetChanged();
+ }
+
+ }
+
+
+ PackageAdapter(Context c, VpnProfile vp) {
+ mPm = c.getPackageManager();
+ mProfile = vp;
+ mInflater = LayoutInflater.from(c);
+
+ mPackages = new Vector<>();
+ mFilteredData = mPackages;
+ }
+
+ private void populateList(Activity c) {
+ List<ApplicationInfo> installedPackages = mPm.getInstalledApplications(PackageManager.GET_META_DATA);
+
+ // Remove apps not using Internet
+
+ int androidSystemUid = 0;
+ ApplicationInfo system = null;
+ Vector<ApplicationInfo> apps = new Vector<ApplicationInfo>();
+
+ try {
+ system = mPm.getApplicationInfo("android", PackageManager.GET_META_DATA);
+ androidSystemUid = system.uid;
+ apps.add(system);
+ } catch (PackageManager.NameNotFoundException e) {
+ }
+
+
+ for (ApplicationInfo app : installedPackages) {
+
+ if (mPm.checkPermission(Manifest.permission.INTERNET, app.packageName) == PackageManager.PERMISSION_GRANTED &&
+ app.uid != androidSystemUid) {
+
+ apps.add(app);
+ }
+ }
+
+ Collections.sort(apps, new ApplicationInfo.DisplayNameComparator(mPm));
+ mPackages = apps;
+ mFilteredData = apps;
+ c.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ notifyDataSetChanged();
+ }
+ });
+ }
+
+ @Override
+ public int getCount() {
+ return mFilteredData.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mFilteredData.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return mFilteredData.get(position).packageName.hashCode();
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ AppViewHolder viewHolder = AppViewHolder.createOrRecycle(mInflater, convertView, parent);
+
+ viewHolder.mInfo = mFilteredData.get(position);
+ final ApplicationInfo mInfo = mFilteredData.get(position);
+
+
+ CharSequence appName = mInfo.loadLabel(mPm);
+
+ if (TextUtils.isEmpty(appName))
+ appName = mInfo.packageName;
+ viewHolder.appName.setText(appName);
+ viewHolder.appIcon.setImageDrawable(mInfo.loadIcon(mPm));
+ viewHolder.checkBox.setTag(mInfo.packageName);
+ viewHolder.checkBox.setOnCheckedChangeListener(ExcludeAppsFragment.this);
+ viewHolder.checkBox.setChecked(apps.contains(mInfo.packageName));
+
+ return viewHolder.rootView;
+ }
+
+ @Override
+ public Filter getFilter() {
+ return mFilter;
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ apps = PreferenceHelper.getExcludedApps(this.getContext());
+
+ setHasOptionsMenu(true);
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ inflater.inflate(R.menu.allowed_apps, menu);
+
+ SearchView searchView = (SearchView) menu.findItem( R.id.app_search_widget ).getActionView();
+ searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ mListView.setFilterText(query);
+ mListView.setTextFilterEnabled(true);
+ return true;
+ }
+
+ @Override
+ public boolean onQueryTextChange(String newText) {
+ mListView.setFilterText(newText);
+ if (TextUtils.isEmpty(newText))
+ mListView.setTextFilterEnabled(false);
+ else
+ mListView.setTextFilterEnabled(true);
+
+ return true;
+ }
+ });
+ searchView.setOnCloseListener(new SearchView.OnCloseListener() {
+ @Override
+ public boolean onClose() {
+ mListView.clearTextFilter();
+ mListAdapter.getFilter().filter("");
+ return false;
+ }
+ });
+
+ super.onCreateOptionsMenu(menu, inflater);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View v = inflater.inflate(R.layout.allowed_vpn_apps, container, false);
+
+ mListView = v.findViewById(android.R.id.list);
+
+ mListAdapter = new PackageAdapter(getActivity(), mProfile);
+ mListView.setAdapter(mListAdapter);
+ mListView.setOnItemClickListener(this);
+
+ mListView.setEmptyView(v.findViewById(R.id.loading_container));
+
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ mListAdapter.populateList(getActivity());
+ }
+ }).start();
+
+ return v;
+ }
+
+}
diff --git a/app/src/main/java/se/leap/bitmaskclient/utils/PreferenceHelper.java b/app/src/main/java/se/leap/bitmaskclient/utils/PreferenceHelper.java
index 09d941f5..44b2a45d 100644
--- a/app/src/main/java/se/leap/bitmaskclient/utils/PreferenceHelper.java
+++ b/app/src/main/java/se/leap/bitmaskclient/utils/PreferenceHelper.java
@@ -12,9 +12,11 @@ import org.json.JSONObject;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
import de.blinkt.openvpn.VpnProfile;
import se.leap.bitmaskclient.Provider;
@@ -30,6 +32,7 @@ import static se.leap.bitmaskclient.Constants.PROVIDER_PRIVATE_KEY;
import static se.leap.bitmaskclient.Constants.PROVIDER_VPN_CERTIFICATE;
import static se.leap.bitmaskclient.Constants.SHARED_PREFERENCES;
import static se.leap.bitmaskclient.Constants.USE_PLUGGABLE_TRANSPORTS;
+import static se.leap.bitmaskclient.Constants.EXCLUDED_APPS;
/**
* Created by cyberta on 18.03.18.
@@ -273,6 +276,21 @@ public class PreferenceHelper {
return result;
}
+ public static void setExcludedApps(Context context, Set<String> apps) {
+ SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES, MODE_PRIVATE);
+ SharedPreferences.Editor prefsedit = prefs.edit();
+ prefsedit.putStringSet(EXCLUDED_APPS, apps);
+ prefsedit.apply();
+ }
+
+ public static Set<String> getExcludedApps(Context context) {
+ if (context == null) {
+ return null;
+ }
+ SharedPreferences preferences = context.getSharedPreferences(SHARED_PREFERENCES, MODE_PRIVATE);
+ return preferences.getStringSet(EXCLUDED_APPS, new HashSet<>());
+ }
+
public static String getString(Context context, String key, String defValue) {
SharedPreferences preferences = context.getSharedPreferences(SHARED_PREFERENCES, MODE_PRIVATE);
return preferences.getString(key, defValue);
diff --git a/app/src/main/res/drawable-hdpi/ic_search_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_search_white_24dp.png
new file mode 100755
index 00000000..bbfbc96c
--- /dev/null
+++ b/app/src/main/res/drawable-hdpi/ic_search_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-hdpi/ic_shield_remove_grey600_36dp.png b/app/src/main/res/drawable-hdpi/ic_shield_remove_grey600_36dp.png
new file mode 100644
index 00000000..98dec84c
--- /dev/null
+++ b/app/src/main/res/drawable-hdpi/ic_shield_remove_grey600_36dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/ic_search_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_search_white_24dp.png
new file mode 100755
index 00000000..faefc59c
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/ic_search_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/ic_shield_remove_grey600_36dp.png b/app/src/main/res/drawable-mdpi/ic_shield_remove_grey600_36dp.png
new file mode 100644
index 00000000..d4b61030
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/ic_shield_remove_grey600_36dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_search_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_search_white_24dp.png
new file mode 100755
index 00000000..bfc3e393
--- /dev/null
+++ b/app/src/main/res/drawable-xhdpi/ic_search_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_shield_remove_grey600_36dp.png b/app/src/main/res/drawable-xhdpi/ic_shield_remove_grey600_36dp.png
new file mode 100644
index 00000000..3eae1fdc
--- /dev/null
+++ b/app/src/main/res/drawable-xhdpi/ic_shield_remove_grey600_36dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xxhdpi/bg_switchbar.xml b/app/src/main/res/drawable-xxhdpi/bg_switchbar.xml
new file mode 100644
index 00000000..7af57ad3
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/bg_switchbar.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (c) 2012-2016 Arne Schwabe
+ ~ Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/switchbar" />
+</shape> \ No newline at end of file
diff --git a/app/src/main/res/drawable-xxhdpi/ic_search_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_search_white_24dp.png
new file mode 100755
index 00000000..abbb9895
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/ic_search_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_shield_remove_grey600_36dp.png b/app/src/main/res/drawable-xxhdpi/ic_shield_remove_grey600_36dp.png
new file mode 100644
index 00000000..c6761744
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/ic_shield_remove_grey600_36dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_search_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_search_white_24dp.png
new file mode 100755
index 00000000..dd5adfc7
--- /dev/null
+++ b/app/src/main/res/drawable-xxxhdpi/ic_search_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_shield_remove_grey600_36dp.png b/app/src/main/res/drawable-xxxhdpi/ic_shield_remove_grey600_36dp.png
new file mode 100644
index 00000000..ad08be94
--- /dev/null
+++ b/app/src/main/res/drawable-xxxhdpi/ic_shield_remove_grey600_36dp.png
Binary files differ
diff --git a/app/src/main/res/layout/allowed_application_layout.xml b/app/src/main/res/layout/allowed_application_layout.xml
new file mode 100644
index 00000000..d8d846f9
--- /dev/null
+++ b/app/src/main/res/layout/allowed_application_layout.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (c) 2012-2016 Arne Schwabe
+ ~ Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ -->
+
+<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:paddingTop="8dip"
+ android:paddingBottom="8dip"
+ android:columnCount="4"
+ tools:ignore="RtlCompat">
+
+ <ImageView
+ android:id="@+id/app_icon"
+ android:layout_width="@android:dimen/app_icon_size"
+ android:layout_height="@android:dimen/app_icon_size"
+ android:layout_rowSpan="1"
+ android:layout_marginEnd="8dip"
+ android:scaleType="centerInside"
+ tools:background="@drawable/icon"
+ android:contentDescription="@null" />
+
+ <TextView
+ tools:text="@string/app"
+ android:id="@+id/app_name"
+ android:layout_width="0dip"
+ android:layout_columnSpan="2"
+ android:layout_rowSpan="1"
+ android:layout_gravity="fill_horizontal|center_vertical"
+ android:layout_marginTop="2dip"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textAlignment="viewStart" />
+
+ <CheckBox android:id="@+id/app_selected"
+ android:layout_marginStart="8dip"
+ android:layout_gravity="center_vertical"
+ android:layout_rowSpan="1"
+ android:visibility="visible" />
+
+<!-- <TextView
+ android:id="@+id/app_size"
+ android:layout_width="0dip"
+ android:layout_gravity="fill_horizontal|top"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textAlignment="viewStart" /> -->
+
+ <!-- <TextView
+ android:id="@+id/app_disabled"
+ android:layout_marginStart="8dip"
+ android:layout_gravity="top"
+ android:textAppearance="?android:attr/textAppearanceSmall" /> -->
+
+</GridLayout> \ No newline at end of file
diff --git a/app/src/main/res/layout/allowed_vpn_apps.xml b/app/src/main/res/layout/allowed_vpn_apps.xml
new file mode 100644
index 00000000..1219da54
--- /dev/null
+++ b/app/src/main/res/layout/allowed_vpn_apps.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ ~ Copyright (c) 2012-2016 Arne Schwabe
+ ~ Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ tools:ignore="RtlCompat"
+ android:layout_height="match_parent">
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:textStyle="bold"
+ android:textColor="@color/colorWarning"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/warning_exclude_apps_message" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="?android:attr/listDivider"/>
+
+ <ListView
+ android:visibility="gone"
+ android:id="@android:id/list"
+ android:drawSelectorOnTop="false"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipToPadding="false"
+ android:scrollbarStyle="outsideOverlay" />
+
+ <LinearLayout
+ android:id="@+id/loading_container"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="visible"
+ android:gravity="center">
+
+ <ProgressBar
+ style="?android:attr/progressBarStyleLarge"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/loading"
+ android:paddingTop="4dip"
+ android:singleLine="true" />
+
+ </LinearLayout>
+
+
+</LinearLayout> \ No newline at end of file
diff --git a/app/src/main/res/layout/f_drawer_main.xml b/app/src/main/res/layout/f_drawer_main.xml
index 8ca6f177..f6c9b2bb 100644
--- a/app/src/main/res/layout/f_drawer_main.xml
+++ b/app/src/main/res/layout/f_drawer_main.xml
@@ -10,7 +10,6 @@
android:fillViewport="true"
>
-
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -53,28 +52,30 @@
android:visibility="gone"
/>
- <Space
+ <View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
+ android:minHeight="20dp"
+ android:background="@color/black800_high_transparent"
/>
<se.leap.bitmaskclient.views.IconSwitchEntry
- android:id="@+id/bridges_switch"
+ android:id="@+id/battery_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- app:text="@string/nav_drawer_obfuscated_connection"
- app:subtitle="@string/nav_drawer_subtitle_obfuscated_connection"
- app:icon="@drawable/ic_bridge_36"
- android:visibility="gone"
+ app:text="@string/save_battery"
+ app:icon="@drawable/ic_battery_36"
/>
<se.leap.bitmaskclient.views.IconSwitchEntry
- android:id="@+id/battery_switch"
+ android:id="@+id/bridges_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- app:text="@string/save_battery"
- app:icon="@drawable/ic_battery_36"
+ app:text="@string/nav_drawer_obfuscated_connection"
+ app:subtitle="@string/nav_drawer_subtitle_obfuscated_connection"
+ app:icon="@drawable/ic_bridge_36"
+ android:visibility="gone"
/>
<se.leap.bitmaskclient.views.IconTextEntry
@@ -88,6 +89,21 @@
/>
<se.leap.bitmaskclient.views.IconTextEntry
+ android:id="@+id/exclude_apps"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ app:text="@string/exclude_apps_fragment_title"
+ app:icon="@drawable/ic_shield_remove_grey600_36dp"
+ android:visibility="gone"
+ />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="20dp"
+ android:background="@color/black800_high_transparent"
+ />
+
+ <se.leap.bitmaskclient.views.IconTextEntry
android:id="@+id/donate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/s_layout.xml b/app/src/main/res/layout/s_layout.xml
new file mode 100644
index 00000000..d5717a5b
--- /dev/null
+++ b/app/src/main/res/layout/s_layout.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <Button
+ android:id="@+id/buttontest"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:text="A"/>
+
+</ScrollView>
diff --git a/app/src/main/res/menu/allowed_apps.xml b/app/src/main/res/menu/allowed_apps.xml
new file mode 100644
index 00000000..20eb91e1
--- /dev/null
+++ b/app/src/main/res/menu/allowed_apps.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (c) 2012-2015 Arne Schwabe
+ ~ Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ -->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ <item
+ android:id="@+id/app_search_widget"
+ app:actionViewClass="android.widget.SearchView"
+ android:icon="@drawable/ic_search_white_24dp"
+ app:showAsAction="always"
+ android:title="@string/Search"/>
+</menu> \ No newline at end of file
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index bec8d843..f8e96760 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -49,11 +49,11 @@
<string name="setup_error_title">خطأ في الضبط</string>
<string name="setup_error_configure_button">ضبط</string>
<string name="setup_error_close_button">خروج</string>
- <string name="setup_error_text">حدث خطأ أثناء ضبط Bitmask مع مزود الخدمة المختار.\n\nيمكنك عمل إعادة الضبط أو الخروج وضبط المزود عند التشغيل اللاحق.</string>
+ <string name="setup_error_text">حدث خطأ أثناء ضبط %s مع مزود الخدمة المختار.\n\nيمكنك عمل إعادة الضبط أو الخروج وضبط المزود عند التشغيل اللاحق.</string>
<string name="server_unreachable_message">لا يمكن الوصول إلى لخادم، فضلا أعد المحاولة.</string>
<string name="error.security.pinnedcertificate">خطأ أمني، قم بتحديث التطبيق أو اختر مزودا آخر.</string>
- <string name="malformed_url">لا يبدو أنه مزود خدمة Bitmask.</string>
- <string name="certificate_error">هذا ليس مزود خدمة Bitmask موثوق.</string>
+ <string name="malformed_url">لا يبدو أنه مزود خدمة %s.</string>
+ <string name="certificate_error">هذا ليس مزود خدمة %s موثوق.</string>
<string name="service_is_down_error">الخدمة متوقفة.</string>
<string name="configuring_provider">جاري ضبط مزود الخدمة</string>
<string name="incorrectly_downloaded_certificate_message">شهادتك المجهلة لم يتم تحميلها</string>
@@ -72,29 +72,20 @@
<string name="provider_problem">يبدو أنه توجد مشكلة ما عند مزود الخدمة.</string>
<string name="try_another_provider">فضلا جرب مزود خدمة آخر أو تواصل مع الحالي.</string>
<string name="default_username">مجهول</string>
- <string name="logged_in_user_status">مسجل.</string>
- <string name="logged_out_user_status">خرج.</string>
- <string name="didnt_log_out_user_status">لم يسجل خروج. حاول لاحقا، يمكن أن تكون مشكلة بالشبكة أو من مزود الخدمة. إذا استمرت، احذف بيانات Bitmask من إعدادات أندرويد.</string>
- <string name="not_logged_in_user_status">لم يقم بتسجيل الدخول.</string>
- <string name="logging_in_user_status">جارٍ تسجيل الدخول.</string>
<string name="logging_in">جاري تسجيل الدخول</string>
<string name="signing_up">جاري التسجيل</string>
- <string name="logging_out_user_status">جارٍ تسجيل الخروج.</string>
- <string name="signingup_message">جاري تسجيله.</string>
<string name="vpn.button.turn.on">تشغيل</string>
<string name="vpn.button.turn.off">إيقاف</string>
<string name="vpn_button_turn_off_blocking">أوقف الحجب</string>
<string name="vpn_securely_routed">بيانات اتصالاتك يتم تمريرها بأمان من خلال:</string>
<string name="vpn_securely_routed_no_internet">لم يُعثر على اتصال انترنت، عندما يعود سيتم تمرير اتصالك بأمان من خلال:</string>
- <string name="bitmask_log">سجلات Bitmask</string>
- <string name="title_activity_main">Bitmask</string>
<string name="log_fragment_title">السجل</string>
<string name="vpn_fragment_title">الشبكة الخاصة الإفتراضية</string>
<string name="navigation_drawer_open">افتح راسم التصفح</string>
<string name="navigation_drawer_close">أغلق راسم التصفح</string>
<string name="action_example">مثال لإجراء</string>
<string name="action_settings">الإعدادات</string>
- <string name="void_vpn_establish">Bitmask يحجب جميع اتصالات الانترنت الخارجة.</string>
+ <string name="void_vpn_establish">%s يحجب جميع اتصالات الإنترنت الخارجة.</string>
<string name="void_vpn_error_establish">فشل تفعيل VPN حاجب.</string>
<string name="void_vpn_stopped">تم إيقاف حجب الاتصالات الخارجة.</string>
<string name="void_vpn_title">جاري حجب الاتصالات</string>
@@ -102,9 +93,9 @@
<string name="update_certificate">حدث الشهادة</string>
<string name="warning_eip_json_corrupted">فشل تحديث ضبط مزود الخدمة.</string>
<string name="eip_json_corrupted_user_message">فشل تحديث ضبط مزود الخدمة. سجل دخول وأعد المحاولة.</string>
- <string name="warning_corrupted_provider_details">بيانات مزود الخدمة المخزنة فسدت. يمكنك تحديث Bitmask (موصى به) أو تحديث بيانات مزود الخدمة باستخدام شهادة CA تجارية.</string>
- <string name="warning_corrupted_provider_cert">شهادة مزود الخدمة المخزنة غير صالحة. يمكنك تحديث Bitmask (موصى به) أو تحديث بيانات مزود الخدمة باستخدام شهادة CA تجارية.</string>
- <string name="warning_expired_provider_cert">شهادة مزود الخدمة المخزنة انتهت مدتها. يمكنك تحديث Bitmask (موصى به) أو تحديث بيانات مزود الخدمة باستخدام شهادة CA تجارية.</string>
+ <string name="warning_corrupted_provider_details">بيانات مزود الخدمة المخزنة فسدت. يمكنك تحديث %s (موصى به) أو تحديث بيانات مزود الخدمة باستخدام شهادة CA تجارية.</string>
+ <string name="warning_corrupted_provider_cert">شهادة مزود الخدمة المخزنة غير صالحة. يمكنك تحديث %s (موصى به) أو تحديث بيانات مزود الخدمة باستخدام شهادة CA تجارية.</string>
+ <string name="warning_expired_provider_cert">شهادة مزود الخدمة المخزنة انتهت مدتها. يمكنك تحديث %s (موصى به) أو تحديث بيانات مزود الخدمة باستخدام شهادة CA تجارية.</string>
<string name="downloading_vpn_certificate_failed">فشل تحميل شهادة VPN. أعد المحاولة أو اختر مزود خدمة آخر.</string>
<string name="vpn_certificate_is_invalid">شهادة VPN غير صالحة. حاول تحميل أخرى جديدة.</string>
<string name="vpn_certificate_user_message">شهادة VPN غير صالحة. سجل دخول لتحميل أخرى جديدة.</string>
@@ -112,7 +103,8 @@
<string name="save_battery_message">اتصالات البيانات في الخلفية ستتوقف حين يكون هاتفك غير نشط.</string>
<string name="always_on_vpn">اتصال دائم بالشبكة الافتراضية الخاصة</string>
<string name="do_not_show_again">‮لا تظهر مجددا</string>
- <string name="always_on_vpn_user_message">قصد تمكين الاستخدام المستدام للشبكة الافتراضية الخاصة عبر إعدادات الشبكة الافتراضية الخاصة للأندرويد، يجب النقر على أيقونة الضبط [img src] وتفعيل زر التشغيل.</string>
+ <string name="always_on_vpn_user_message">لتفعيل الاتصال الدائم بالشبكة الافتراضية الخاصة في إعدادات آندرويد لل VPN، يجب النقر على أيقونة الضبط [img src] ومن ثمّ تشغيل \"شبكة ظاهريّة خاصّة (VPN) دائمة التشغيل\".</string>
+ <string name="always_on_blocking_vpn_user_message">لحماية خصوصيتكم على نحو أمثل ، يجب عليكم أيضا تفعيل خيار \"منع الاتصالات بدون الشبكة الافتراضية الخاصة\".</string>
<string name="donate_title">ادعم</string>
<string name="donate_default_message">فضلا تبرع اليوم إذا كنت تُقدّر الاتصال الآمن المتوفر بسهولة سواءا للمستخدم النهائي ولمزود الخدمة.</string>
<string name="donate_message">LEAP تعتمد على التبرعات والمنح. فضلا تبرع اليوم إذا كنت تقدر الاتصال الآمن المتوفر بسهولة للمستخدم النهائي ومزود الخدمة.</string>
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
new file mode 100644
index 00000000..48feaf7b
--- /dev/null
+++ b/app/src/main/res/values-az/strings.xml
@@ -0,0 +1,65 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+ <string name="retry">Təkrar</string>
+ <string name="repository_url_text">Başlanğıc kodunu https://0xacab.org/leap/bitmask_android ünvanından əldə edə bilərsiniz</string>
+ <string name="leap_tracker">Issue tracker available at https://0xacab.org/leap/bitmask_android/issues</string>
+ <string name="translation_project_text">Tərcümələri xoşlayır və qiymətləndirir. Bizim Transifex layihəsinə https://www.transifex.com/projects/p/bitmask-android/ səhifəsinə baxın.</string>
+ <string name="switch_provider_menu_option">Provayderi dəyiş</string>
+ <string name="info">Məlumat</string>
+ <string name="show_connection_details">Qoşulma məlumatlarını göstər</string>
+ <string name="routes_info">Routerlər: %s</string>
+ <string name="routes_info6">IPv6 routerləri: %s</string>
+ <string name="error_empty_username">İstifadəçi adı boş olmamalıdır.</string>
+ <string name="cert_from_keystore">Sertifikat \'%s\' açar mağazasından verildi</string>
+ <string name="provider_label">Provayder: </string>
+ <string name="provider_label_none">Heç bir provayder konfiqurasiya yoxdur</string>
+ <string name="status_unknown">Status naməlumdur. </string>
+ <string name="eip_service_label">Şifrəli VPN İnternet qoşulub</string>
+ <string name="configuration_wizard_title">Bir servis provayderini seçin</string>
+ <string name="add_provider">Yeni provayderi əlavə et</string>
+ <string name="introduce_new_provider">Yeni servis provayderini əlavə et</string>
+ <string name="save">Saxla</string>
+ <string name="new_provider_uri">Domen adı</string>
+ <string name="valid_url_entered">URL etibarlıdır</string>
+ <string name="not_valid_url_entered">Səhv olan URL</string>
+ <string name="provider_details_title">Provayder məlumatı</string>
+ <string name="use_anonymously_button">Anonim olaraq istifadə et</string>
+ <string name="username_hint">istifadəçi ad</string>
+ <string name="username_ask">Zəhmət olmasa istifadəçi adı daxil edin</string>
+ <string name="password_ask">Zəhmət olmasa parolunuzu daxil edin </string>
+ <string name="password_hint">parol</string>
+ <string name="password_match">Parollar uyğun gəlir</string>
+ <string name="password_mismatch">Parollar uyğun gəlmir</string>
+ <string name="user_message">İstifadəçi mesajı</string>
+ <string name="about_fragment_title">Haqqında</string>
+ <string name="error_srp_math_error_user_message">Yenidən cəhd edin: Server səhvi</string>
+ <string name="error_bad_user_password_user_message">Yanlış istifadəçi adı və ya parol</string>
+ <string name="error_not_valid_password_user_message">Ən azı 8 simvol olmalıdır</string>
+ <string name="error_client_http_user_message">Yenidən cəhd edin: Müştəri HTTP səhvi</string>
+ <string name="error_io_exception_user_message">Yenidən cəhd edin: I/O səhv</string>
+ <string name="error_json_exception_user_message">Yenidən cəhd edin: Serverdan gələn pis cavab</string>
+ <string name="error_no_such_algorithm_exception_user_message">Şifrələmə alqoritmi tapılmadı. Xahiş edirik Android-ni yeniləyin!</string>
+ <string name="signup_or_login_button">Qeydiyyat / Daxil ol</string>
+ <string name="login_button">Daxil ol</string>
+ <string name="login_to_profile">Profilə daxil ol</string>
+ <string name="logout_button">Çıx</string>
+ <string name="signup_button">Qeydiyyatdan keç</string>
+ <string name="create_profile">Profil yarat</string>
+ <string name="setup_provider">Provayderi quraşdırın</string>
+ <string name="setup_error_title">Konfiqurasiya xətası</string>
+ <string name="setup_error_configure_button">Konfiqurasiya</string>
+ <string name="setup_error_close_button">Çıxış</string>
+ <string name="server_unreachable_message">Server ələçatmazdır, yenidən cəhd edin.</string>
+ <string name="error.security.pinnedcertificate">Təhlükəsizlik xətası, tətbiqi yeniləyin və ya başqa bir provayder seçin.</string>
+ <string name="service_is_down_error">Bu servis işini başa vurur. </string>
+ <string name="configuring_provider">Provayderin konfiqurasiyası</string>
+ <string name="updating_certificate_message">VPN sertifikatının yenilənməsi</string>
+ <string name="succesful_authentication_message">Tanınmış</string>
+ <string name="default_username">Anonim</string>
+ <string name="log_fragment_title">Loq</string>
+ <string name="save_battery">Enerji qənaəti</string>
+ <string name="always_on_vpn">Həmişə VPN-la</string>
+ <string name="donate_title">Maddi dəstək</string>
+ <string name="donate_button_remind_later">Sonra yadıma sal</string>
+ <string name="donate_button_donate">Maddi dəstək</string>
+</resources>
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index 832e232b..27214c4d 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -32,6 +32,9 @@
<string name="password_mismatch">Οι κωδικοί δεν ταιριάζουν</string>
<string name="user_message">Μήνυμα χρήστη</string>
<string name="about_fragment_title">Σχετικά</string>
+ <string name="error_srp_math_error_user_message">Προσπαθήστε ξανά: Μαθηματικό σφάλμα διακομιστή.</string>
+ <string name="error_bad_user_password_user_message">Λάθος όνομα χρήστη ή κωδικός πρόσβασης</string>
+ <string name="error_not_valid_password_user_message">Πρέπει να είναι τουλάχιστον 8 χαρακτήρες</string>
<string name="error_client_http_user_message">Προσπαθήστε ξανά: Σφάλμα HTTP πελάτη</string>
<string name="error_io_exception_user_message">Προσπαθήστε ξανά: Σφάλμα Ι/Ο</string>
<string name="error_json_exception_user_message">Προσπαθήστε ξανά: Κακή απάντηση από τον διακομιστή</string>
@@ -46,49 +49,43 @@
<string name="setup_error_title">Σφάλμα ρυθμίσεων</string>
<string name="setup_error_configure_button">Ρύθμιση </string>
<string name="setup_error_close_button">Έξοδος</string>
- <string name="setup_error_text">Υπήρξε ένα σφάλμα κατά τη ρύθμιση του Bitmask με τον πάροχο που επιλέξατε.\n\Μπορείτε να ξανακάνετε τις ρυθμίσεις ή να βγείτε από την εφαρμογή και να ρυθμίσετε έναν άλλο πάροχο κατά την επόμενη εκτέλεση.</string>
+ <string name="setup_error_text">Υπήρξε ένα σφάλμα κατά τη ρύθμιση του %s με τον πάροχο που επιλέξατε.\n\nΜπορείτε να ξανακάνετε τις ρυθμίσεις ή να βγείτε από την εφαρμογή και να ρυθμίσετε έναν άλλο πάροχο κατά την επόμενη εκτέλεση. </string>
<string name="server_unreachable_message">Ο διακομιστής δεν είναι προσπελάσιμος, παρακαλούμε προσπαθήστε ξανά.</string>
<string name="error.security.pinnedcertificate">Σφάλμα ασφάλειας, αναβαθμίστε την εφαρμογή ή επιλέξτε άλλο πάροχο.</string>
- <string name="malformed_url">Δεν φαίνεται να είναι πάροχος Bitmask.</string>
- <string name="certificate_error">Αυτός δεν είναι ένας έμπιστος πάροχος Bitmask.</string>
+ <string name="malformed_url">Δεν φαίνεται να είναι πάροχος %s.</string>
+ <string name="certificate_error">Δεν είναι έμπιστος πάροχος %s.</string>
<string name="service_is_down_error">Η υπηρεσία έχει πέσει.</string>
<string name="configuring_provider">Ο πάροχος ρυθμίζεται</string>
+ <string name="incorrectly_downloaded_certificate_message">Το ανώνυμο πιστοποιητικό σας δεν ελήφθη</string>
<string name="downloading_certificate_message">Λήψη πιστοποιητικού VPN</string>
<string name="updating_certificate_message">Αναβάθμιση πιστοποιητικού VPN</string>
<string name="login.riseup.warning">Οι χρήστες και χρήστριες του Riseup θα πρέπει να δημιουργήσουν ένα ξεχωριστό λογαριασμό για να χρησιμοποιήσουν την υπηρεσία VPN</string>
<string name="succesful_authentication_message">Πιστοποιημένο(ς)</string>
<string name="authentication_failed_message">Αποτυχία πιστοποίησης</string>
+ <string name="registration_failed_message">Η εγγραφή απέτυχε</string>
<string name="eip_status_start_pending">Έναρξη σύνδεσης</string>
<string name="eip_cancel_connect_title">Ακύρωση σύνδεσης;</string>
<string name="eip_cancel_connect_text">Υπάρχει μια προσπάθεια σύνδεσης σε εξέλιξη. Θέλετε να την ακυρώσετε;</string>
<string name="eip.warning.browser_inconsistency">Κλείσιμο της σύνδεσης VPN; Όταν το VPN είναι κλειστό, μπορεί να διαρρέουν προσωπικές σας πληροφορίες στον πάροχο διαδικτύου σας ή στο τοπικό δίκτυο.</string>
<string name="eip_state_not_connected">Δεν εκτελείται! Μη ασφαλής σύνδεση!</string>
+ <string name="eip_state_connected">Ασφαλής σύνδεση</string>
<string name="provider_problem">Φαίνεται πως υπάρχει κάποιο πρόβλημα με τον πάροχο.</string>
<string name="try_another_provider">Παρακαλούμε προσπαθήστε με άλλο πάροχο, ή επικοινωνήστε με τον δικό σας.</string>
<string name="default_username">Ανώνυμος/η</string>
- <string name="logged_in_user_status">είναι συνδεμένος/η.</string>
- <string name="logged_out_user_status">αποσυνδέθηκε.</string>
- <string name="didnt_log_out_user_status">δεν αποσυνδέθηκε. Προσπαθήστε ξανά, μπορεί να είναι πρόβλημα δικτύου ή του παρόχου. Αν το πρόβλημα επιμείνει, εκκαθαρίστε τα δεδομένα του Bitmask από τις ρυθμίσεις του Android.</string>
- <string name="not_logged_in_user_status">δεν έχει συνδεθεί.</string>
- <string name="logging_in_user_status">συνδέεται.</string>
<string name="logging_in">Συνδέεται</string>
<string name="signing_up">Εγγράφεται</string>
- <string name="logging_out_user_status">αποσυνδέεται.</string>
- <string name="signingup_message">εγγράφεται.</string>
<string name="vpn.button.turn.on">Άνοιγμα</string>
<string name="vpn.button.turn.off">Κλείσιμο</string>
<string name="vpn_button_turn_off_blocking">Παύση μπλοκαρίσματος</string>
<string name="vpn_securely_routed">Η κίνηση δεδομένων σας δρομολογείται ασφαλώς μέσω:</string>
<string name="vpn_securely_routed_no_internet">Δεν εντοπίστηκε σύνδεση στο διαδίκτυο, όταν επανέλθει θα δρομολογήσουμε την κίνησή σας ασφαλώς μέσω:</string>
- <string name="bitmask_log">Αρχείο καταγραφής Bitmask</string>
- <string name="title_activity_main">Bitmask</string>
<string name="log_fragment_title">Αρχείο Καταγραφής</string>
<string name="vpn_fragment_title">VPN</string>
<string name="navigation_drawer_open">Άνοιγμα συρταριού πλοήγησης</string>
<string name="navigation_drawer_close">Κλείσιμο συρταριού πλοήγησης</string>
<string name="action_example">Ενέργεια - παράδειγμα</string>
<string name="action_settings">Ρυθμίσεις</string>
- <string name="void_vpn_establish">Το Bitmask μπλοκάρει όλη την εξερχόμενη κίνηση διαδικτύου.</string>
+ <string name="void_vpn_establish">Το %s μπλοκάρει όλη την εξερχόμενη κίνηση διαδικτύου.</string>
<string name="void_vpn_error_establish">Αποτυχία εγκαθίδρυσης VPN μπλοκαρίσματος.</string>
<string name="void_vpn_stopped">Παύση μπλοκαρίσματος όλης της εξερχόμενης κίνησης διαδικτύου.</string>
<string name="void_vpn_title">Η κίνηση διαδικτύου μπλοκάρεται</string>
@@ -96,18 +93,21 @@
<string name="update_certificate">Αναβάθμιση πιστοποιητικού</string>
<string name="warning_eip_json_corrupted">Η αναβάθμιση των ρυθμίσεων παρόχου απέτυχε.</string>
<string name="eip_json_corrupted_user_message">Η αναβάθμιση των ρυθμίσεων παρόχου απέτυχε. Παρακαλούμε συνδεθείτε για να ξαναπροσπαθήσετε.</string>
- <string name="warning_corrupted_provider_details">Οι αποθηκευμένες λεπτομέρειες του παρόχου έχουν σφάλματα. Μπορείτε είτε να αναβαθμίσετε το Bitmask (προτεινόμενο), είτε να αναβαθμίσετε τις λεπτομέρειες παρόχου χρησιμοποιώντας ένα εμπορικό πιστοποιητικό CA.</string>
- <string name="warning_corrupted_provider_cert">Το αποθηκευμένο πιστοποιητικό του παρόχου δεν είναι έγκυρο. Μπορείτε είτε να αναβαθμίσετε το Bitmask (προτεινόμενο), είτε να αναβαθμίσετε τις λεπτομέρειες παρόχου χρησιμοποιώντας ένα εμπορικό πιστοποιητικό CA.</string>
- <string name="warning_expired_provider_cert">Το αποθηκευμένο πιστοποιητικό του παρόχου έχει λήξει. Μπορείτε είτε να αναβαθμίσετε το Bitmask (προτεινόμενο), είτε να αναβαθμίσετε τις λεπτομέρειες παρόχου χρησιμοποιώντας ένα εμπορικό πιστοποιητικό CA.</string>
+ <string name="warning_corrupted_provider_details">Οι αποθηκευμένες λεπτομέρειες του παρόχου έχουν σφάλματα. Μπορείτε είτε να αναβαθμίσετε το %s (προτεινόμενο), είτε να αναβαθμίσετε τις λεπτομέρειες παρόχου χρησιμοποιώντας ένα εμπορικό πιστοποιητικό CA.</string>
+ <string name="warning_corrupted_provider_cert">Το αποθηκευμένο πιστοποιητικό του παρόχου δεν είναι έγκυρο. Μπορείτε είτε να αναβαθμίσετε το %s (προτεινόμενο), είτε να αναβαθμίσετε τις λεπτομέρειες παρόχου χρησιμοποιώντας ένα εμπορικό πιστοποιητικό CA.</string>
+ <string name="warning_expired_provider_cert">Το αποθηκευμένο πιστοποιητικό του παρόχου έχει λήξει. Μπορείτε είτε να αναβαθμίσετε το %s (προτεινόμενο), είτε να αναβαθμίσετε τις λεπτομέρειες παρόχου χρησιμοποιώντας ένα εμπορικό πιστοποιητικό CA.</string>
<string name="downloading_vpn_certificate_failed">Το κατέβασμα του πιστοποιητικού του VPN απέτυχε. Προσπαθήστε ξανά ή επιλέξτε άλλο πάροχο.</string>
<string name="vpn_certificate_is_invalid">Το πιστοποιητικό του VPN δεν είναι έγκυρο. Δοκιμάστε να κατεβάσετε ένα καινούργιο.</string>
<string name="vpn_certificate_user_message">Το πιστοποιητικό VPN δεν είναι έγκυρο. Παρακαλούμε συνδεθείτε για να κατεβάσετε ένα καινούργιο.</string>
<string name="save_battery">Εξοικονόμηση μπαταρίας</string>
<string name="save_battery_message">Οι συνδέσεις δεδομένων στο υπόβαθρο θα παύονται όταν το τηλέφωνό σας δεν είναι ενεργό.</string>
- <string name="always_on_vpn">Πάντα ανοιχτό VPN</string>
+ <string name="always_on_vpn">Always-on VPN</string>
+ <string name="do_not_show_again">Να μην εμφανιστεί ξανά</string>
+ <string name="always_on_vpn_user_message">Για να ενεργοποιηθεί το always-on VPN στις ρυθμίσεις VPN του Android, πατήστε στο εικονίδιο παραμετροποίησης [img src] και ανοίξτε το διακόπτη.</string>
+ <string name="always_on_blocking_vpn_user_message">Για βέλτιστη προστασία της ιδιωτικότητάς σας, πρέπει να ενεργοποιήσετε επίσης την επιλογή \"Μπλοκάρισμα συνδέσεων χωρίς VPN\".</string>
<string name="donate_title">Δωρεά</string>
<string name="donate_default_message">Παρακαλούμε κάντε μια δωρεά σήμερα αν θεωρείτε πως η ασφαλής επικοινωνία που είναι εύκολη τόσο για τον τελικό χρήστη όσο και για τον πάροχο της υπηρεσίας έχει αξία.</string>
- <string name="donate_message">Το LEAP βασίζεται σε δωρεές και χρηματοδοτήσεις. Παρακαλούμε κάντε μια δωρεά σήμερα αν θεωρείτε πως η ασφαλής επικοινωνία που είναι εύκολη τόσο για τον τελικό χρήστη όσο και για τον πάροχο της υπηρεσίας έχει αξία.</string>
+ <string name="donate_message">Το LEAP στηρίζεται από δωρεές και χρηματοδοτήσεις. Αν θεωρείτε πως αν δίνετε αξία στην ασφαλή επικοινωνία που είναι εύκολη τόσο για τον τελικό χρήστη όσο και για τον πάροχο της υπηρεσίας, κάντε μια δωρεά σήμερα.</string>
<string name="donate_button_remind_later">Υπενθύμιση αργότερα</string>
<string name="donate_button_donate">Δωρεά</string>
</resources>
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index d96594fe..1b84b3ae 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -49,11 +49,11 @@
<string name="setup_error_title">Error de configuración</string>
<string name="setup_error_configure_button">Configurar</string>
<string name="setup_error_close_button">Salir</string>
- <string name="setup_error_text">Hubo un error al configurar Bitmask con tu proveedor seleccionado.\n\nPuedes escoger reconfigurar, o salir y configurar un proveedor en el próximo inicio.</string>
+ <string name="setup_error_text">Hubo un error al configurar %s con tu proveedor seleccionado.\n\nPuedes escoger reconfigurar, o salir y configurar un proveedor en el próximo inicio.</string>
<string name="server_unreachable_message">No se pudo alcanzar el servidor, por favor inténtalo de nuevo.</string>
<string name="error.security.pinnedcertificate">Error de seguridad, actualiza la aplicación o escoge otro proveedor.</string>
- <string name="malformed_url">No parece un proveedor Bitmask</string>
- <string name="certificate_error">Este no es un proveedor de Bitmask confiable.</string>
+ <string name="malformed_url">No parece ser un proveedor %s.</string>
+ <string name="certificate_error">Este no es un proveedor %s de confianza.</string>
<string name="service_is_down_error">El servicio está caído.</string>
<string name="configuring_provider">Configurando proveedor</string>
<string name="incorrectly_downloaded_certificate_message">Tu certificado anónimo no se pudo descargar</string>
@@ -72,29 +72,20 @@
<string name="provider_problem">Parece que hay un problema con el proveedor.</string>
<string name="try_another_provider">Por favor, prueba otro proveedor, o contacta con el tuyo.</string>
<string name="default_username">Anónimo</string>
- <string name="logged_in_user_status">tiene sesión iniciada.</string>
- <string name="logged_out_user_status">cerró sesión.</string>
- <string name="didnt_log_out_user_status">no cerró sesión. Inténtalo más tarde, puede ser un problema en la red o con el proveedor. Si persiste, limpia los datos de Bitmask desde la configuración de Android.</string>
- <string name="not_logged_in_user_status">no ha iniciado sesión.</string>
- <string name="logging_in_user_status">está iniciando sesión.</string>
<string name="logging_in">Iniciando sesión</string>
<string name="signing_up">Registrándose</string>
- <string name="logging_out_user_status">está cerrando sesión.</string>
- <string name="signingup_message">se está registrando.</string>
<string name="vpn.button.turn.on">Activar</string>
<string name="vpn.button.turn.off">Desactivar</string>
<string name="vpn_button_turn_off_blocking">Detener bloqueo</string>
<string name="vpn_securely_routed">Tu tráfico se está enrutando de forma segura a través de:</string>
<string name="vpn_securely_routed_no_internet">No se detectó conexión a Internet, cuando vuelva, enrutaremos tu tráfico de forma segura a través de:</string>
- <string name="bitmask_log">Registro de Bitmask</string>
- <string name="title_activity_main">Bitmask</string>
<string name="log_fragment_title">Registro</string>
<string name="vpn_fragment_title">VPN</string>
<string name="navigation_drawer_open">Abrir panel de navegación</string>
<string name="navigation_drawer_close">Cerrar panel de navegación</string>
<string name="action_example">Acción de ejemplo</string>
<string name="action_settings">Configuración</string>
- <string name="void_vpn_establish">Bitmask bloquea todo el tráfico saliente de Internet.</string>
+ <string name="void_vpn_establish">%s bloquea todo el tráfico saliente de internet</string>
<string name="void_vpn_error_establish">No se pudo establecer VPN de bloqueo.</string>
<string name="void_vpn_stopped">Se detuvo el bloqueo de todo el tráfico saliente de Internet.</string>
<string name="void_vpn_title">Bloqueando el tráfico</string>
@@ -102,9 +93,9 @@
<string name="update_certificate">Actualizar certificado</string>
<string name="warning_eip_json_corrupted">No se pudo actualizar la configuración del proveedor.</string>
<string name="eip_json_corrupted_user_message">No se pudo actualizar la configuración del proveedor. Por favor inicia sesión e inténtalo de nuevo.</string>
- <string name="warning_corrupted_provider_details">Los detalles almacenados del proveedor están corrompidos. Puedes actualizar Bitmask (recomendado), o bien actualizar los detalles del proveedor usando un certificado de una autoridad de certificación/CA comercial.</string>
- <string name="warning_corrupted_provider_cert">El certificado de proveedor almacenado no es válido. Puedes actualizar Bitmask (recomendado), o bien actualizar el certificado de proveedor usando una autoridad de certificación/CA comercial.</string>
- <string name="warning_expired_provider_cert">El certificado de proveedor almacenado ha caducado. Puedes actualizar Bitmask (recomendado) o actualizar el certificado de proveedor usando una autoridad de certificación/CA comercial.</string>
+ <string name="warning_corrupted_provider_details">Los detalles almacenados de este proveedor están corrompidos. Puedes actualizar %s (recomendado), o bien actualizar los detalles del proveedor usando un certificado de una autoridad de certificación comercial.</string>
+ <string name="warning_corrupted_provider_cert">El certificado almacenado de este proveedor es inválido. Puedes actualizar %s (recomendado) o actualizar el certificado del proveedor usando una autoridad de certificación comercial. </string>
+ <string name="warning_expired_provider_cert">El certificado almacenado de este proveedor ha caducado. Puedes actualizar %s (recomendado) o actualizar el certificado de proveedor usando una autoridad de certificación comercial.</string>
<string name="downloading_vpn_certificate_failed">No se pudo descargar el certificado de la VPN. Inténtalo de nuevo o escoge otro proveedor.</string>
<string name="vpn_certificate_is_invalid">El certificado de la VPN no es válido. Trata de descargar uno nuevo.</string>
<string name="vpn_certificate_user_message">El certificado de la VPN no es válido. Por favor inicia sesión para descargar uno nuevo.</string>
@@ -112,7 +103,8 @@
<string name="save_battery_message">Las conexiones de datos de segundo plano hibernarán cuando tu teléfono esté inactivo.</string>
<string name="always_on_vpn">VPN siempre activa</string>
<string name="do_not_show_again">No mostrar de nuevo.</string>
- <string name="always_on_vpn_user_message">Para habilitar Always-on VPN en las configuraciones de VPN de Android, haz clic en el ícono de configuración [img src] y activa el selector.</string>
+ <string name="always_on_vpn_user_message">Para habilitar VPN siempre activa en las configuraciones de VPN de Android, haz clic en el ícono de configuración [img src] y activa el selector.</string>
+ <string name="always_on_blocking_vpn_user_message">Para proteger tu privacidad de manera óptima, también deberías activar la opción \"Bloquear conexiones sin VPN\". </string>
<string name="donate_title">Donar</string>
<string name="donate_default_message">Por favor haz una donación hoy si valoras la comunicación segura que es fácil tanto para el usuario final como para el proveedor de servicio.</string>
<string name="donate_message">LEAP depende de donaciones y subvenciones. Por favor haz una donación hoy si valoras la comunicación segura que es fácil tanto para el usuario final como para el proveedor de servicio.</string>
diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml
index 3e75a861..4ff6bc7f 100644
--- a/app/src/main/res/values-et/strings.xml
+++ b/app/src/main/res/values-et/strings.xml
@@ -32,6 +32,9 @@
<string name="password_mismatch">Paroolid ei ühti</string>
<string name="user_message">Kasutaja sõnum</string>
<string name="about_fragment_title">Teave</string>
+ <string name="error_srp_math_error_user_message">Proovi uuesti: serveripoolne matemaatika viga.</string>
+ <string name="error_bad_user_password_user_message">Sobimatu kasutajanimi või parool.</string>
+ <string name="error_not_valid_password_user_message">See peab olema vähemalt 8 tähemärki pikk.</string>
<string name="error_client_http_user_message">Proovi uuesti: rakenduse HTTP viga</string>
<string name="error_io_exception_user_message">Proovi uuesti: I/O viga</string>
<string name="error_json_exception_user_message">Proovi uuesti: serverist saadeti halb vastus</string>
@@ -46,49 +49,43 @@
<string name="setup_error_title">Häälestusviga</string>
<string name="setup_error_configure_button">Seadista</string>
<string name="setup_error_close_button">Välju</string>
- <string name="setup_error_text">Esines viga sinu valitud pakkujaga Bitmaski seadistamisel.\n\nSa võid proovida uuesti seadistada või väljud ja seadistad pakkuja järgmisel käivitusel.</string>
+ <string name="setup_error_text">Esines viga %s seadistamisel sinu valitud pakkujaga.\n\nSa võid proovida uuesti seadistada või väljud ja seadistad pakkuja järgmisel käivitusel.</string>
<string name="server_unreachable_message">Server on ligipääsmatu, palun proovi uuesti.</string>
<string name="error.security.pinnedcertificate">Turvaviga, täienda rakendust või vali teine pakkuja.</string>
- <string name="malformed_url">See ei paista olevat Bitmask\'i pakkuja.</string>
- <string name="certificate_error">See ei ole usaldatud Bitmask\'i pakkuja.</string>
+ <string name="malformed_url">See ei paista olevat %s pakkuja.</string>
+ <string name="certificate_error">See ei ole usaldatud %s pakkuja.</string>
<string name="service_is_down_error">Teenus on maas.</string>
<string name="configuring_provider">Häälestan pakkujat</string>
+ <string name="incorrectly_downloaded_certificate_message">Sinu anonüümset sertifikaati ei laaditud alla</string>
<string name="downloading_certificate_message">Laadin alla VPN-sertifikaati</string>
<string name="updating_certificate_message">Uuendan VPN-sertifikaati</string>
<string name="login.riseup.warning">Riseup kasutajad peavad looma VPN-teenuse kasutamiseks eraldi konto</string>
<string name="succesful_authentication_message">Tuvastatud</string>
<string name="authentication_failed_message">Autentimine ebaõnnestus</string>
+ <string name="registration_failed_message">Registreerimine ebaõnnestus</string>
<string name="eip_status_start_pending">Alustan ühendust</string>
<string name="eip_cancel_connect_title">Tühistan ühenduse?</string>
<string name="eip_cancel_connect_text">Hetkel toimub ühendumiskatse. Kas soovid seda tühistada?</string>
<string name="eip.warning.browser_inconsistency">Lülitad VPN-ühenduse välja? Kui VPN on väljas, võid sa lekitada isiklikke andmeid oma Internetipakkujale või kohalikku võrku.</string>
<string name="eip_state_not_connected">Pole käivitatud! Ebaturvaline ühendus!</string>
+ <string name="eip_state_connected">Ühendus on turvaline</string>
<string name="provider_problem">Tundub, et pakkujal on probleem.</string>
<string name="try_another_provider">Palun proovi teist pakkujat, või kontakteeru enda omaga.</string>
<string name="default_username">Anonüümne</string>
- <string name="logged_in_user_status">on sisselogitud.</string>
- <string name="logged_out_user_status">väljalogitud.</string>
- <string name="didnt_log_out_user_status">ei loginud välja. Proovi hiljem, viga võib olla võrgus või pakkujas. Kui see jätkub, tühjenda Bitmaski andmed Androidi seadetes.</string>
- <string name="not_logged_in_user_status">pole sisse loginud.</string>
- <string name="logging_in_user_status">on sisse logimas.</string>
<string name="logging_in">Sisselogimine</string>
<string name="signing_up">Registreerumine</string>
- <string name="logging_out_user_status">on välja logimas.</string>
- <string name="signingup_message">on registreerumas.</string>
<string name="vpn.button.turn.on">Lülita sisse</string>
<string name="vpn.button.turn.off">Lülita välja</string>
<string name="vpn_button_turn_off_blocking">Peata blokeerimine</string>
<string name="vpn_securely_routed">Sinu liiklus on turvaliselt suunatud läbi:</string>
<string name="vpn_securely_routed_no_internet">Internetiühendust ei tuvastatud, kui see tuleb tagasi, suuname me su liikluse läbi:</string>
- <string name="bitmask_log">Bitmaski logi</string>
- <string name="title_activity_main">Bitmask</string>
<string name="log_fragment_title">Logi</string>
<string name="vpn_fragment_title">VPN</string>
<string name="navigation_drawer_open">Ava navigatsioonisahtel</string>
<string name="navigation_drawer_close">Sule navigatsioonisahtel</string>
<string name="action_example">Näidistegevus</string>
<string name="action_settings">Seaded</string>
- <string name="void_vpn_establish">Bitmask blokeerib kogu väljuva internetiliikluse.</string>
+ <string name="void_vpn_establish">%s blokeerib kogu väljuva internetiliikluse.</string>
<string name="void_vpn_error_establish">Blokeeriva VPNi loomine ebaõnnestus.</string>
<string name="void_vpn_stopped">Kogu väljuva internetiliikluse blokeerimine peatatud.</string>
<string name="void_vpn_title">Liikluse blokeerimine</string>
@@ -96,16 +93,18 @@
<string name="update_certificate">Uuenda sertifikaati</string>
<string name="warning_eip_json_corrupted">Pakkuja seadistuse uuendamine ebaõnnestus.</string>
<string name="eip_json_corrupted_user_message">Pakkuja seadistuse uuendamine ebaõnnestus. Palun logi sisse, et uuesti proovida.</string>
- <string name="warning_corrupted_provider_details">Säilitatud pakkujaandmed on korrumpeerunud. Sa võid kas uuendada Bitmaski (soovitatud) või uuendada pakkujaandmeid, kasutades kommerts-sertifitseerimiskeskuse sertifikaati.</string>
- <string name="warning_corrupted_provider_cert">Säilitatud pakkuja sertifikaat on sobimatu. Sa võid kas uuendada Bitmaski (soovitatud) või uuendada pakkujaandmeid, kasutades kommerts-sertifitseerimiskeskuse sertifikaati.</string>
- <string name="warning_expired_provider_cert">Säilitatud pakkuja sertifikaat on aegunud. Sa võid kas uuendada Bitmaski (soovitatud) või uuendada pakkujaandmeid, kasutades kommerts-sertifitseerimiskeskuse sertifikaati.</string>
+ <string name="warning_corrupted_provider_details">Säilitatud pakkujaandmed on korrumpeerunud. Sa võid kas uuendada %s (soovitatud) või uuendada pakkujaandmeid, kasutades kommerts-sertifitseerimiskeskuse sertifikaati.</string>
+ <string name="warning_corrupted_provider_cert">Säilitatud pakkuja sertifikaat on sobimatu. Sa võid kas uuendada %s (soovitatud) või uuendada pakkujaandmeid, kasutades kommerts-sertifitseerimiskeskuse sertifikaati.</string>
+ <string name="warning_expired_provider_cert">Säilitatud pakkuja sertifikaat on aegunud. Sa võid kas uuendada %s (soovitatud) või uuendada pakkujaandmeid, kasutades kommerts-sertifitseerimiskeskuse sertifikaati.</string>
<string name="downloading_vpn_certificate_failed">VPN-sertifikaadi allalaadimine ebaõnnestus. Proovi uuesti või vali teine pakkuja.</string>
<string name="vpn_certificate_is_invalid">VPN-sertifikaat on sobimatu. Proovi alla laadida uus.</string>
<string name="vpn_certificate_user_message">VPN-sertifikaat on sobimatu. Palun logi sisse, et alla laadida uus.</string>
<string name="save_battery">Säästa akut</string>
<string name="save_battery_message">Taustal olevad andmeühendused uinuvad, kui su telefon pole aktiivne.</string>
<string name="always_on_vpn">Alati sees VPN</string>
+ <string name="do_not_show_again">Ära kuva uuesti</string>
<string name="always_on_vpn_user_message">Et lubada alati-sees VPN Androidi VPNi seadetes, vajuta seadistusikoonile [img src] ning lülita lüliti sisse.</string>
+ <string name="always_on_blocking_vpn_user_message">Et optimaalset oma privaatsust kaitsta, peaksid aktiveerima ka valiku \"VPN-ita ühenduste blokeerimine\".</string>
<string name="donate_title">Anneta</string>
<string name="donate_default_message">Palun anneta täna, kui väärtustad turvalist suhtlust, mis on lihtne nii kasutajale kui teenusepakkujale.</string>
<string name="donate_message">LEAP sõltub annetustest ja toetustest. Palun anneta täna, kui väärtustad turvalist suhtlust, mis on lihtne nii kasutajale kui teenusepakkujale.</string>
diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml
index 6d5c6c7c..eb81c4a1 100644
--- a/app/src/main/res/values-fa-rIR/strings.xml
+++ b/app/src/main/res/values-fa-rIR/strings.xml
@@ -49,11 +49,11 @@
<string name="setup_error_title">خطای تنظیمات</string>
<string name="setup_error_configure_button">تنظیم</string>
<string name="setup_error_close_button">خروج</string>
- <string name="setup_error_text">خطای تنظیم بیتمسک با ارائه‌دهنده انتخابی شما. n\n\ تنظیم را دوباره انجام دهید یا از برنامه خارج شوید و تنظیم ارائه‌دهنده را با بازکردن مجدد انجام دهید.</string>
+ <string name="setup_error_text">در تنظیم %s با ارائه دهنده منتخب شما خطایی رخ داد. تنظیم را دوباره انجام دهید یا از برنامه خارج شوید و تنظیم ارائه دهنده را در باز کردن مجدد برنامه انجام دهید.</string>
<string name="server_unreachable_message">سرور قابل دسترس نیست، لطفا دوباره تلاش کنید.</string>
<string name="error.security.pinnedcertificate">اخطار امنیتی، برنامه app را به‌روز رسانی کنید یا ارائه‌دهنده دیگری انتخاب کنید.</string>
- <string name="malformed_url">به نظر نمی‌رسد که یک ارائه‌دهنده‌ی بیتمسک باشد.</string>
- <string name="certificate_error">این یک ارائه‌دهنده‌ی قابل اعتماد بیتمسک نیست.</string>
+ <string name="malformed_url">به نظر نمی‌رسد که %s یک ارائه دهنده قابل اعتماد باشد.</string>
+ <string name="certificate_error">این یک ارائه دهنده %s قابل اعتماد نیست.</string>
<string name="service_is_down_error">سرور وی‌پی‌ان در دسترس نیست.</string>
<string name="configuring_provider">در حال تنظیم کردن ارائه‌دهنده</string>
<string name="incorrectly_downloaded_certificate_message">گواهی ناشناسی شما دریافت نشد</string>
@@ -72,29 +72,20 @@
<string name="provider_problem">به نظر می‌رسد مشکلی با ارائه‌دهنده وجود دارد.</string>
<string name="try_another_provider">لطفا از ارائه‌دهنده دیگری استفاده کنید و یا با ارائه‌دهنده تماس بگیرید.</string>
<string name="default_username">ناشناس</string>
- <string name="logged_in_user_status">وارد شده است.</string>
- <string name="logged_out_user_status">خارج شده است</string>
- <string name="didnt_log_out_user_status">خارج نشده‌است. بعدا دوباره امتحان کنید، ممکن است مشکلی در شبکه یا با ارائه‌دهنده باشد. اگر قابل حل نیست، اطلاعات بیتمسک را از روی تنظیمات اندروید پاک کنید. </string>
- <string name="not_logged_in_user_status">وارد نشده است.</string>
- <string name="logging_in_user_status">در حال ورود.</string>
<string name="logging_in">وارد شدن</string>
<string name="signing_up">ثبت‌نام کردن</string>
- <string name="logging_out_user_status">در حال خروج.</string>
- <string name="signingup_message">ثبت شده است.</string>
<string name="vpn.button.turn.on">روشن کردن</string>
<string name="vpn.button.turn.off">خاموش کردن</string>
<string name="vpn_button_turn_off_blocking">توقف مسدود کردن</string>
<string name="vpn_securely_routed">ترافیک شما به صورت امن از اینجا گذشته است:</string>
<string name="vpn_securely_routed_no_internet">ارتباط با اینترنت وجود ندارد. پس از برقراری مجدد، ما ترافیک شما را به شکل امن از این مسیر هدایت خواهیم کرد:</string>
- <string name="bitmask_log">لاگ بیتمسک</string>
- <string name="title_activity_main">بیتمسک</string>
<string name="log_fragment_title">لاگ</string>
<string name="vpn_fragment_title">وی‌پی‌ان</string>
<string name="navigation_drawer_open">بازکردن نوار ابزار</string>
<string name="navigation_drawer_close">بستن نوار ابزار</string>
<string name="action_example">فعالیت نمونه</string>
<string name="action_settings">تنظیمات</string>
- <string name="void_vpn_establish">بیتمسک تمام ترافیک خروجی اینترنت را مسدود می‌کند.</string>
+ <string name="void_vpn_establish">%s تمام ترافیک خروجی را مصدود می‌کند.</string>
<string name="void_vpn_error_establish">ناموفق در راه‌اندازی وی‌پی‌ان مسدودکننده</string>
<string name="void_vpn_stopped">مسدودکردن تمام ترافیک خروجی اینترنت متوقف شد.</string>
<string name="void_vpn_title">مسدود کردن ترافیک</string>
@@ -102,9 +93,9 @@
<string name="update_certificate">به‌روز رسانی گواهی </string>
<string name="warning_eip_json_corrupted">ناموفق در به‌روز رسانی تنظیمات ارا‌ئه‌دهنده</string>
<string name="eip_json_corrupted_user_message">ناموفق در به‌روز رسانی تنظیمات ارا‌ئه‌دهنده. برای تلاش مجدد، لطفا دوباره وارد شوید.</string>
- <string name="warning_corrupted_provider_details">گواهی ارائه‌دهنده ذخیره‌شده خراب است. یا بیتمسک را به‌روز رسانی کنید (گزینه پیشنهادی)، و یا اطلاعات ارائه‌دهنده را با استفاده از گواهی تجاری CA به‌روز رسانی کنید.</string>
- <string name="warning_corrupted_provider_cert">گواهی ارائه‌دهنده ذخیره‌شده نامعتبر است. یا بیتمسک را به‌روز رسانی کنید (گزینه پیشنهادی)، و یا گواهی ارائه‌دهنده را با استفاده از گواهی تجاری CA به‌روز رسانی کنید.</string>
- <string name="warning_expired_provider_cert"> گواهی ارائه‌دهنده ذخیره‌شده تاریخ‌گذشته است. یا بیتمسک را به‌روز رسانی کنید (گزینه پیشنهادی)، و یا گواهی ارائه‌دهنده را با استفاده از گواهی تجاری CA به‌روز رسانی کنید.</string>
+ <string name="warning_corrupted_provider_details">اطلاعات ذخیره شده ارائه دهنده خراب است. شما می‌توانید %s را به روز رسانی کنید (گزینه پیشنهادی)، ویا اطلاعات ارائه دهنده را با استفاده از گواهی تجاری CA به روز رسانی کنید.</string>
+ <string name="warning_corrupted_provider_cert">گواهی ارائه دهنده ذخیره شده نامعتبر است. شما می‌توانید %s را به روز رسانی کنید (گزینه پیشنهادی)، و یا گواهی ارائه دهنده را با استفاده از گواهی تجاری CA به روز رسانی کنید.</string>
+ <string name="warning_expired_provider_cert">گواهی ارائه دهنده ذخیره شده تاریخ گذشته است. شما می‌توانید %s را به روز رسانی کنید (گزینه پیشنهادی)، ویا گواهی ارائه دهنده را با استفاده از گواهی تجاری CA به روز رسانی کنید.</string>
<string name="downloading_vpn_certificate_failed">ناموفق در دریافت گواهی وی‌پی‌ان. لطفا دوباره تلاش کنید و یا ارائه‌دهنده دیگری را انتخاب کنید.</string>
<string name="vpn_certificate_is_invalid">گواهی وی‌پی‌ان نامعتبر است. تلاش کنید که گواهی جدیدی دریافت کنید.</string>
<string name="vpn_certificate_user_message">گواهی وی‌پی‌ان نامعتبر است. لطفا برای دریافت گواهی جدید وارد شوید. </string>
@@ -113,6 +104,7 @@
<string name="always_on_vpn">وی پی ان در حالت همیشه روشن</string>
<string name="do_not_show_again">دوباره نشان نده</string>
<string name="always_on_vpn_user_message">برای روشن کردن VPN همیشه فعال، در تنظیمات VPN آندروید روی آیکون [img src] کلیک کنید و آن را به حالت روشن تغییر دهید.</string>
+ <string name="always_on_blocking_vpn_user_message">برای بهینه سازی حفاظت از حریم شخصی شما، شما باید گزینه \"جلوگیری ارتباطات بدون VPN\" را فعال کنید.</string>
<string name="donate_title">کمک مالی</string>
<string name="donate_default_message">اگر برای ارتباطات امن که برای کاربر نهایی و ارائه دهنده سرویس آسان است ارزش قائل هستید، لطفا کمک مالی کنید.</string>
<string name="donate_message">LEAP به کمک‌های مالی و وام‌های بلاعوض متکی است. اگر برای ارتباطات امن که برای کاربر نهایی و ارائه دهنده سرویس آسان است ارزش قائل هستید، لطفا کمک مالی کنید.</string>
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 59fb86ce..ffc52359 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -2,7 +2,7 @@
<resources>
<string name="retry">Ressayer</string>
<string name="repository_url_text">Le code source se trouve sur https://0xacab.org/leap/bitmask_android</string>
- <string name="leap_tracker">Le gestionnaire de problèmes se trouve sur https://0xacab.org/leap/bitmask_android/issues</string>
+ <string name="leap_tracker">Le système de suivi des problèmes se trouve sur https://0xacab.org/leap/bitmask_android/issues</string>
<string name="translation_project_text">Les traductions sont les bienvenues et nous les valorisons. Consulter notre projet Transifex sur https://www.transifex.com/projects/p/bitmask-android/</string>
<string name="switch_provider_menu_option">Changer de fournisseur</string>
<string name="info">infos</string>
@@ -49,11 +49,11 @@
<string name="setup_error_title">Erreur de configuration</string>
<string name="setup_error_configure_button">Configurer</string>
<string name="setup_error_close_button">Quitter</string>
- <string name="setup_error_text">Une erreur est survenue lors de la configuration de Bitmask avec le fournisseur choisi.\n\nVous pouvez soit reconfigurer ou quitter et configurer un fournisseur lors du prochain lancement.</string>
+ <string name="setup_error_text">Une erreur est survenue lors de la configuration de %s avec le fournisseur de votre choix.\n\nVous pouvez soit reconfigurer, soit quitter et configurer un fournisseur lors du prochain lancement.</string>
<string name="server_unreachable_message">Le serveur est inaccessible, veuillez ressayer.</string>
<string name="error.security.pinnedcertificate">Erreur de sécurité. Mettre l’appli à niveau ou choisir un autre fournisseur.</string>
- <string name="malformed_url">Cela ne semble pas être un fournisseur Bitmask.</string>
- <string name="certificate_error">Ce n’est pas un fournisseur Bitmask de confiance.</string>
+ <string name="malformed_url">Cela ne semble pas être un fournisseur %s.</string>
+ <string name="certificate_error">Ce n’est pas un fournisseur %s de confiance.</string>
<string name="service_is_down_error">Le service est interrompu.</string>
<string name="configuring_provider">Configuration du fournisseur</string>
<string name="incorrectly_downloaded_certificate_message">Votre certificat anonyme n’a pas été téléchargé</string>
@@ -72,29 +72,20 @@
<string name="provider_problem">Il semble que le fournisseur pose un problème.</string>
<string name="try_another_provider">Veuillez essayer un autre fournisseur ou nous contacter.</string>
<string name="default_username">Anonyme</string>
- <string name="logged_in_user_status">est connecté.</string>
- <string name="logged_out_user_status">déconnecté.</string>
- <string name="didnt_log_out_user_status">n’est pas déconnecté. Essayer ultérieurement. Le problème peut provenir du réseau ou du fournisseur. Si le problème persiste, effacer les données Bitmask dans les paramètres d’Android.</string>
- <string name="not_logged_in_user_status">ne sont pas connectés.</string>
- <string name="logging_in_user_status">se connecte.</string>
<string name="logging_in">Connexion</string>
<string name="signing_up">Inscription</string>
- <string name="logging_out_user_status">se déconnecte.</string>
- <string name="signingup_message">est en cours d’enregistrement.</string>
<string name="vpn.button.turn.on">Activer</string>
<string name="vpn.button.turn.off">Désactiver</string>
<string name="vpn_button_turn_off_blocking">Arrêter le blocage</string>
<string name="vpn_securely_routed">Votre trafic est acheminé en toute sécurité par :</string>
<string name="vpn_securely_routed_no_internet">Aucune connexion à Internet n’a été détectée. Une fois que vous serez connecté, nous acheminerons votre trafic de façon sécuritaire par :</string>
- <string name="bitmask_log">Journal Bitmask</string>
- <string name="title_activity_main">Bitmask</string>
<string name="log_fragment_title">Journal</string>
<string name="vpn_fragment_title">RPV</string>
<string name="navigation_drawer_open">Ouvrir le tiroir de navigation</string>
<string name="navigation_drawer_close">Fermer le tiroir de navigation</string>
<string name="action_example">Exemple d’action</string>
<string name="action_settings">Paramètres</string>
- <string name="void_vpn_establish">Bitmask bloque tout le trafic Internet sortant.</string>
+ <string name="void_vpn_establish">%s bloque tout le trafic Internet sortant.</string>
<string name="void_vpn_error_establish">Échec de mise en place du blocage RPV.</string>
<string name="void_vpn_stopped">Le trafic Internet sortant n’est plus bloqué.</string>
<string name="void_vpn_title">Blocage du trafic</string>
@@ -102,9 +93,9 @@
<string name="update_certificate">Mettre le certificat à jour</string>
<string name="warning_eip_json_corrupted">Échec de mise à jour de la configuration du fournisseur.</string>
<string name="eip_json_corrupted_user_message">Échec de mise à jour de la configuration du fournisseur. Veuillez vous connecter pour ressayer.</string>
- <string name="warning_corrupted_provider_details">Les renseignements de fournisseur enregistrés sont corrompus. Vous pouvez soit mettre Bitmask à jour (recommandé), soit mettre les renseignements de fournisseur à jour en utilisant un certificat CA commercial.</string>
- <string name="warning_corrupted_provider_cert">Le certificat de fournisseur enregistré est invalide. Vous pouvez soit mettre Bitmask à jour (recommandé), soit mettre le certificat de fournisseur à jour en utilisant un certificat CA commercial.</string>
- <string name="warning_expired_provider_cert">Le certificat de fournisseur enregistré est expiré. Vous pouvez soit mettre Bitmask à jour (recommandé), soit mettre le certificat de fournisseur à jour en utilisant un certificat CA commercial.</string>
+ <string name="warning_corrupted_provider_details">Les renseignements de fournisseur enregistrés sont corrompus. Vous pouvez soit mettre %s à jour (recommandé), soit mettre les renseignements de fournisseur à jour en utilisant un certificat CA commercial.</string>
+ <string name="warning_corrupted_provider_cert">Le certificat de fournisseur enregistré est invalide. Vous pouvez soit mettre %s à jour (recommandé), soit mettre le certificat de fournisseur à jour en utilisant un certificat CA commercial.</string>
+ <string name="warning_expired_provider_cert">Le certificat de fournisseur enregistré est expiré. Vous pouvez soit mettre %s à jour (recommandé), soit mettre le certificat de fournisseur à jour en utilisant un certificat CA commercial.</string>
<string name="downloading_vpn_certificate_failed">Échec de téléchargement du certificat du RPV. Ressayez ou choisissez un autre fournisseur.</string>
<string name="vpn_certificate_is_invalid">Le certificat du RPV est invalide. Essayez d’en télécharger un nouveau.</string>
<string name="vpn_certificate_user_message">Le certificat du RPV est invalide. Veuillez vous connecter pour en télécharger un nouveau.</string>
@@ -113,6 +104,7 @@
<string name="always_on_vpn">RPV permanent</string>
<string name="do_not_show_again">Ne plus afficher</string>
<string name="always_on_vpn_user_message">Pour activer l’option « RPV permanent » ou « VPN permanent » des paramètres RPV d’Android, cliquez sur l’icône de configuration [img src] et basculez l’interrupteur.</string>
+ <string name="always_on_blocking_vpn_user_message">Afin de protéger de façon optimale votre vie privée et vos données personnelles, vous devriez activer l’option « Bloquer les connexions sans RPV ».</string>
<string name="donate_title">Faire un don</string>
<string name="donate_default_message">Veuillez faire un don aujourd’hui si des communications sécurisées faciles à mettre en place pour l’utilisateur final et le fournisseur de services sont importantes à vous yeux.</string>
<string name="donate_message">LEAP dépend de dons et de subventions. Veuillez faire un don aujourd’hui si des communications sécurisées faciles à mettre en place pour l’utilisateur final et le fournisseur de services sont importantes à vous yeux.</string>
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 94155516..4cd7c032 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -49,11 +49,11 @@
<string name="setup_error_title">שגיאת תצורה</string>
<string name="setup_error_configure_button">תצר</string>
<string name="setup_error_close_button">צא</string>
- <string name="setup_error_text">הייתה שגיאה בתיצור Bitmask עם הספק הנבחר שלך.\n\nאתה יכול לבחור לתצר מחדש, או לצאת ולתצר ספק בעת ההפעלה הבאה.</string>
+ <string name="setup_error_text">הייתה שגיאה בתיצור %s ם הספק הנבחר שלך.\n\nאתה יכול לבחור לתצר מחדש, או לצאת ולתצר ספק בעת ההפעלה הבאה.</string>
<string name="server_unreachable_message">השרת בלתי נגיש, אנא נסה שוב.</string>
<string name="error.security.pinnedcertificate">שגיאת אבטחה. שדרג את היישום או נסה ספק אחר.</string>
- <string name="malformed_url">נראה שזה לא ספק Bitmask.</string>
- <string name="certificate_error">זה לא ספק Bitmask מהימן.</string>
+ <string name="malformed_url">נראה שזה לא ספק %s.</string>
+ <string name="certificate_error">זה לא ספק %s מהימן.</string>
<string name="service_is_down_error">השירות אינו פעיל.</string>
<string name="configuring_provider">מתצר ספק</string>
<string name="incorrectly_downloaded_certificate_message">האישור האלמוני שלך לא הורד</string>
@@ -72,29 +72,20 @@
<string name="provider_problem">נראה שיש בעיה עם הספק.</string>
<string name="try_another_provider">אנא נסה ספק אחר, או צור קשר עם הספק שלך.</string>
<string name="default_username">אלמוני</string>
- <string name="logged_in_user_status">מחובר.</string>
- <string name="logged_out_user_status">מנותק.</string>
- <string name="didnt_log_out_user_status">לא התנתק. נסה מאוחר יותר, עשויה להיות בעיה ברשת או עם הספק. אם זה ממשיך, נקה את נתוני Bitmask מתוך הגדרות Android.</string>
- <string name="not_logged_in_user_status">לא התחבר.</string>
- <string name="logging_in_user_status">מתחבר.</string>
<string name="logging_in">התחברות</string>
<string name="signing_up">הרשמה</string>
- <string name="logging_out_user_status">מתנתק.</string>
- <string name="signingup_message">נרשם כרגע.</string>
<string name="vpn.button.turn.on">הפעל</string>
<string name="vpn.button.turn.off">כבה</string>
<string name="vpn_button_turn_off_blocking">הפסק לחסום</string>
<string name="vpn_securely_routed">התעבורה שלך מנותבת באופן מאובטח דרך:</string>
<string name="vpn_securely_routed_no_internet">לא התגלה חיבור אינטרנט, כשהוא יחזור אנחנו ננתב את התעבורה שלך באופן מאובטח דרך:</string>
- <string name="bitmask_log">יומן Bitmask</string>
- <string name="title_activity_main">Bitmask</string>
<string name="log_fragment_title">יומן</string>
<string name="vpn_fragment_title">VPN</string>
<string name="navigation_drawer_open">פתח מגירת ניווט</string>
<string name="navigation_drawer_close">סגור מגירת ניווט</string>
<string name="action_example">פעולת דוגמה</string>
<string name="action_settings">הגדרות</string>
- <string name="void_vpn_establish">Bitmask חוסם את כל תעבורת האינטרנט היוצאת.</string>
+ <string name="void_vpn_establish">%s חוסם את כל תעבורת האינטרנט היוצאת.</string>
<string name="void_vpn_error_establish">נכשל בהקמת VPN חסימה.</string>
<string name="void_vpn_stopped">הפסיק לחסום את כל תעבורת האינטרנט היוצאת.</string>
<string name="void_vpn_title">חוסם תעבורה</string>
@@ -102,9 +93,9 @@
<string name="update_certificate">עדכן אישור</string>
<string name="warning_eip_json_corrupted">עדכון תצורת ספק נכשל.</string>
<string name="eip_json_corrupted_user_message">עדכון תצורת ספק נכשל. אנא התחבר כדי לנסות שוב.</string>
- <string name="warning_corrupted_provider_details">פרטי הספק השמורים פגומים. אתה יכול לעדכן את Bitmask (מומלץ) או לעדכן את פרטי הספק ע\"י שימוש באישור CA מסחרי.</string>
- <string name="warning_corrupted_provider_cert">האישור השמור של הספק בלתי תקף. אתה יכול לעדכן את Bitmask (מומלץ) או לעדכן את אישור הספק ע\"י שימוש באישור CA מסחרי.</string>
- <string name="warning_expired_provider_cert">האישור השמור של הספק פג. אתה יכול לעדכן את Bitmask (מומלץ) או לעדכן את אישור הספק ע\"י שימוש באישור CA מסחרי.</string>
+ <string name="warning_corrupted_provider_details">פרטי הספק השמורים פגומים. אתה יכול לעדכן את %s (מומלץ) או לעדכן את פרטי הספק ע\"י שימוש באישור CA מסחרי.</string>
+ <string name="warning_corrupted_provider_cert">האישור השמור של הספק בלתי תקף. אתה יכול לעדכן את %s (מומלץ) או לעדכן את אישור הספק ע\"י שימוש באישור CA מסחרי.</string>
+ <string name="warning_expired_provider_cert">האישור השמור של הספק פג. אתה יכול לעדכן את %s (מומלץ) או לעדכן את אישור הספק ע\"י שימוש באישור CA מסחרי.</string>
<string name="downloading_vpn_certificate_failed">הורדת אישור VPN נכשלה. נסה שוב או בחר ספר אחר.</string>
<string name="vpn_certificate_is_invalid">אישור VPN בלתי תקף. נסה להוריד אחד חדש.</string>
<string name="vpn_certificate_user_message">אישור ה־VPN בלתי תקף. אנא התחבר כדי להוריד אחד חדש.</string>
@@ -113,6 +104,7 @@
<string name="always_on_vpn">VPN פועל תמיד</string>
<string name="do_not_show_again">אל תראה שוב</string>
<string name="always_on_vpn_user_message">כדי לאפשר VPN תמיד פועל בהגדרות VPN של Android, לחץ על הצלמית הגדר [img src] והפעל את המתג.</string>
+ <string name="always_on_blocking_vpn_user_message">כדי להגן על פרטיותך באופן הרצוי ביותר, אתה גם צריך להפעיל את האפשרות \"חסום חיבורים ללא VPN\".</string>
<string name="donate_title">תרום</string>
<string name="donate_default_message">אנא תרום היום אם אתה מעריך תקשורת מאובטחת שקלה גם עבור משתמש־הקצה וגם עבור ספק השירות.</string>
<string name="donate_message">LEAP מסתמך על תרומות ומענקים. אנא תרום היום אם אתה מעריך תקשורת מאובטחת שקלה גם עבור משתמש־הקצה וגם עבור ספק השירות.</string>
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index dcec0c0f..db5c17fe 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -15,23 +15,29 @@
<string name="introduce_new_provider">Aggiungi un nuovo provider di servizi</string>
<string name="save">Salva</string>
<string name="new_provider_uri">Nome dominio</string>
+ <string name="valid_url_entered">L\'URL è valido</string>
<string name="use_anonymously_button">Usa in modo anonimo</string>
<string name="username_hint">nome utente</string>
- <string name="username_ask">Inserisci il tuo nome utente</string>
+ <string name="username_ask">Inserire il nome utente</string>
+ <string name="password_ask">Inserire la password</string>
<string name="password_hint">password</string>
+ <string name="password_match">Le password corrispondono</string>
+ <string name="password_mismatch">Le password non corrispondono</string>
<string name="user_message">Messaggio utente</string>
<string name="about_fragment_title">Informazioni</string>
+ <string name="error_bad_user_password_user_message">Nome utente o password errati</string>
+ <string name="error_not_valid_password_user_message">Deve essere composta da almeno 8 caratteri</string>
<string name="error_client_http_user_message">Riprova: errore Client HTTP</string>
<string name="error_io_exception_user_message">Riprova: errore I/O</string>
<string name="error_json_exception_user_message">Riprova: risposta errata dal server</string>
<string name="login_button">Accedi</string>
+ <string name="login_to_profile">Accedi al profilo</string>
<string name="logout_button">Disconnetti</string>
<string name="signup_button">Iscriviti</string>
<string name="setup_error_title">Errore di Configurazione</string>
<string name="setup_error_configure_button">Configura</string>
<string name="setup_error_close_button">Esci</string>
- <string name="malformed_url">Non sembra essere un provider Bitmask.</string>
- <string name="certificate_error">Questo non è un provider Bitmask fidato.</string>
+ <string name="malformed_url">Non sembra essere un provider %s.</string>
<string name="configuring_provider">Configurazione provider</string>
<string name="succesful_authentication_message">Autentificato</string>
<string name="authentication_failed_message">Autenticazione fallita</string>
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 41ad342f..fe2ac256 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -49,11 +49,11 @@
<string name="setup_error_title">構成エラー</string>
<string name="setup_error_configure_button">構成</string>
<string name="setup_error_close_button">終了</string>
- <string name="setup_error_text">選択されたプロバイダーでBitmaskを構成中にエラーが発生しました。\n\nもう一度構成するか、終了して次回の起動時にプロバイダーを構成することができます。</string>
+ <string name="setup_error_text">選択されたプロバイダーで%sを構成中にエラーが発生しました。\n\nもう一度構成するか、終了して次回の起動時にプロバイダーを構成することができます。</string>
<string name="server_unreachable_message">サーバーに到達できません。再度実行してください。</string>
<string name="error.security.pinnedcertificate">セキュリティエラー。アプリをアップデートするか別のプロバイダーを選択してください。</string>
- <string name="malformed_url">Bitmaskのプロバイダーではないようです。</string>
- <string name="certificate_error">これは、信頼できるBitmaskプロバイダーではありません。</string>
+ <string name="malformed_url">%sのプロバイダーではないようです。</string>
+ <string name="certificate_error">これは、信頼できる%sプロバイダーではありません。</string>
<string name="service_is_down_error">サービスがダウンしています。</string>
<string name="configuring_provider">プロバイダーを構成中</string>
<string name="incorrectly_downloaded_certificate_message">匿名の証明書はダウンロードされませんでした</string>
@@ -72,29 +72,20 @@
<string name="provider_problem">プロバイダーに問題があるようです。</string>
<string name="try_another_provider">別のプロバイダーを試すか、連絡してください。</string>
<string name="default_username">匿名</string>
- <string name="logged_in_user_status">ログイン中です。</string>
- <string name="logged_out_user_status">ログアウトしました</string>
- <string name="didnt_log_out_user_status">ログアウトしませんでした。 後でやり直してください。ネットワークまたはプロバイダーに問題がある可能性があります。 問題が解決しない場合は、Androidの設定からBitmaskデータを消去してください</string>
- <string name="not_logged_in_user_status">ログインしていません。</string>
- <string name="logging_in_user_status">ログイン中です。</string>
<string name="logging_in">ログイン中</string>
<string name="signing_up">サインアップ中</string>
- <string name="logging_out_user_status">ログアウトしています。</string>
- <string name="signingup_message">登録しています。</string>
<string name="vpn.button.turn.on">オンにする</string>
<string name="vpn.button.turn.off">オフにする</string>
<string name="vpn_button_turn_off_blocking">ブロックを停止</string>
<string name="vpn_securely_routed">通信は安全に次の経路でルーティングされます:</string>
<string name="vpn_securely_routed_no_internet">インターネット接続が検出されませんでした。回復した時に通信を安全にルーティングします:</string>
- <string name="bitmask_log">Bitmaskログ</string>
- <string name="title_activity_main">Bitmask</string>
<string name="log_fragment_title">履歴</string>
<string name="vpn_fragment_title">VPN</string>
<string name="navigation_drawer_open">ナビゲーションドロワーを開く</string>
<string name="navigation_drawer_close">ナビゲーションドロワーを閉じる</string>
<string name="action_example">サンプルアクション</string>
<string name="action_settings">設定</string>
- <string name="void_vpn_establish">Bitmask はすべての送信インターネット通信をブロックします</string>
+ <string name="void_vpn_establish">%sはすべての送信インターネット通信をブロックします</string>
<string name="void_vpn_error_establish">VPNのブロックの確立に失敗しました。</string>
<string name="void_vpn_stopped">すべての送信インターネット通信のブロックを停止しました。</string>
<string name="void_vpn_title">通信のブロック</string>
@@ -102,9 +93,9 @@
<string name="update_certificate">証明書をアップデート</string>
<string name="warning_eip_json_corrupted">プロバイダー設定の更新に失敗しました。</string>
<string name="eip_json_corrupted_user_message">プロバイダー設定の更新に失敗しました。もう一度ログインし直してください。</string>
- <string name="warning_corrupted_provider_details">保存されたプロバイダーの詳細が壊れています。 Bitmaskを更新する (推奨) か、商用CA証明書を使用してプロバイダーの詳細をアップデートすることができます。</string>
- <string name="warning_corrupted_provider_cert">保存されたプロバイダーの証明書が無効です。 商用CA証明書を使用してBitmaskを更新する (推奨) か、プロバイダーの証明書を更新することができます。</string>
- <string name="warning_expired_provider_cert">保存されたプロバイダーの証明書が有効期限切れです。 商用CA証明書を使用してBitmaskを更新する (推奨) か、プロバイダー証明書を更新することができます。</string>
+ <string name="warning_corrupted_provider_details">保存されたプロバイダーの詳細が壊れています。 %sを更新する (推奨) か、商用CA証明書を使用してプロバイダーの詳細をアップデートすることができます。</string>
+ <string name="warning_corrupted_provider_cert">保存されたプロバイダーの証明書が無効です。 商用CA証明書を使用して%sを更新する (推奨) か、プロバイダーの証明書を更新することができます。</string>
+ <string name="warning_expired_provider_cert">保存されたプロバイダーの証明書が有効期限切れです。 商用CA証明書を使用して%sを更新する (推奨) か、プロバイダー証明書を更新することができます。</string>
<string name="downloading_vpn_certificate_failed">VPN証明書のダウンロードに失敗しました。 もう一度やり直すか、別のプロバイダーを選択してください。</string>
<string name="vpn_certificate_is_invalid">VPN証明書が不正です。 新しくダウンロードし直してください。</string>
<string name="vpn_certificate_user_message">VPN証明書が不正です。 ログインして新しくダウンロードし直してください。</string>
@@ -113,6 +104,7 @@
<string name="always_on_vpn">常時VPN接続</string>
<string name="do_not_show_again">今後表示しない</string>
<string name="always_on_vpn_user_message">Android VPNの設定で常時VPN接続を有効にするには、設定アイコン [img src] をクリックしてスイッチをオンにします。</string>
+ <string name="always_on_blocking_vpn_user_message">あなたのプライバシーを最適に保護するために、「VPNを使用しない接続をブロックする」オプションも有効にするべきです。</string>
<string name="donate_title">寄付</string>
<string name="donate_default_message">エンドユーザーとサービスプロバイダーの両側に対する簡単で安全な通信を評価するなら、今日寄付してください。</string>
<string name="donate_message">LEAPは寄付と助成金に依存しています。 エンドユーザーとサービスプロバイダーの両側に対して簡単で安全な通信を評価するなら、今日寄付してください。</string>
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 27bf36df..520eaac4 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -49,11 +49,11 @@
<string name="setup_error_title">Erro de Configuração</string>
<string name="setup_error_configure_button">Configurar</string>
<string name="setup_error_close_button">Sair</string>
- <string name="setup_error_text">Houve um erro ao configurar o Bitmask com o provedor escolhido.\n\nVocê pode optar por reconfigurar, ou sair e configurar um provedor na próxima vez que iniciar o programa. </string>
+ <string name="setup_error_text">Houve um erro configurando %s com o provedor escolhido por você.\n\nVocê pode optar por reconfigurar ou sair e configurar um provedor na próxima vez que abrir o programa. </string>
<string name="server_unreachable_message">O servidor está inalcançável, tente novamente.</string>
<string name="error.security.pinnedcertificate">Erro de segurança, atualize seu aplicativo ou escolha outro provedor.</string>
- <string name="malformed_url">Não parece ser um provedor Bitmask.</string>
- <string name="certificate_error">Esse não é um provedor confiável do Bitmask.</string>
+ <string name="malformed_url">Não parece ser um provedor %s.</string>
+ <string name="certificate_error">Esse não é um provedor confiável %s.</string>
<string name="service_is_down_error">O Serviço está fora do ar</string>
<string name="configuring_provider">Configurando o provedor</string>
<string name="incorrectly_downloaded_certificate_message">O download de seu certificado anônimo não foi efetuado.</string>
@@ -72,29 +72,20 @@
<string name="provider_problem">Parece que há um problema com o provedor.</string>
<string name="try_another_provider">Por favor tente outro provedor, ou entre em contato conosco.</string>
<string name="default_username">Anônimo</string>
- <string name="logged_in_user_status">está logado.</string>
- <string name="logged_out_user_status">deslogado.</string>
- <string name="didnt_log_out_user_status">não deslogou. Tente mais tarde, pode haver um problema na rede ou com o provedor. Se persistir, limpe os dados do Bitmask nas configurações do Android.</string>
- <string name="not_logged_in_user_status">não logou.</string>
- <string name="logging_in_user_status">está logando.</string>
<string name="logging_in">Logando</string>
<string name="signing_up">Cadastrando</string>
- <string name="logging_out_user_status">está deslogado.</string>
- <string name="signingup_message">está sendo registrado.</string>
<string name="vpn.button.turn.on">Ligar</string>
<string name="vpn.button.turn.off">Desligar</string>
<string name="vpn_button_turn_off_blocking">Parar bloqueio</string>
<string name="vpn_securely_routed">Seu tráfego está direcionado com segurança através do:</string>
<string name="vpn_securely_routed_no_internet">Conexão com a internet não detectada, quando a conexão for recuperada seu tráfego será direcionado com segurança através do:</string>
- <string name="bitmask_log">Log do Bitmask</string>
- <string name="title_activity_main">Bitmask</string>
<string name="log_fragment_title">Log</string>
<string name="vpn_fragment_title">VPN</string>
<string name="navigation_drawer_open">Abrir menu de navegação</string>
<string name="navigation_drawer_close">Fechar menu de navegação</string>
<string name="action_example">Ação de exemplo</string>
<string name="action_settings">Configurações</string>
- <string name="void_vpn_establish">O Bitmask bloqueia todo o tráfego de saída</string>
+ <string name="void_vpn_establish">%s bloqueia todo o tráfego de saída de internet.</string>
<string name="void_vpn_error_establish">Falha ao estabelecer VPN de bloqueio</string>
<string name="void_vpn_stopped">Parou de bloquear todo o tráfego de saída de internet.</string>
<string name="void_vpn_title">Bloqueando tráfego</string>
@@ -102,17 +93,18 @@
<string name="update_certificate">Atualizar certificado</string>
<string name="warning_eip_json_corrupted">Atualização de configurações do provedor falhou.</string>
<string name="eip_json_corrupted_user_message">Atualização do provedor falhou. Por favor, faça login e tente novamente.</string>
- <string name="warning_corrupted_provider_details">Os detalhes armazenados do provedor estão corrompidos. Você pode ou atualizar o Bitmask (recomendado) ou atualizar o certificado do seu provedor usando um certificado CA comercial. </string>
- <string name="warning_corrupted_provider_cert">O certificado armazenado do provedor é invalido. Você pode ou atualizar o Bitmask (recomendado) ou atualizar o certificado do seu provedor usando um certificado CA comercial. </string>
- <string name="warning_expired_provider_cert">O certificado armazenado do provedor expirou. Você pode ou atualizar o Bitmask (recomendado) ou atualizar o certificado do seu provedor usando um certificado CA comercial. </string>
+ <string name="warning_corrupted_provider_details">Os dados armazenados do provedor estão corrompidos. Você pode atualizar %s (recomendado) ou atualizar os detalhes do provedor utilizando um certificado CA comercial. </string>
+ <string name="warning_corrupted_provider_cert">O certificado armazenado do provedor é invalido. Você pode atualizar %s (recomendado) ou atualizar o certificado do provedor utilizando um certificado CA comercial. </string>
+ <string name="warning_expired_provider_cert">O certificado do provedor está expirado. Você pode atualizar %s (recomendado) ou atualizar o certificado do provedor utilizando um certificado CA comercial. </string>
<string name="downloading_vpn_certificate_failed">Download do certificado VPN falhou. Tente novamente ou escolha outro provedor.</string>
<string name="vpn_certificate_is_invalid">Certificado VPN inválido. Tente baixar um novo.</string>
<string name="vpn_certificate_user_message">O certificado VPN é inválido. Por favor, faça login e baixe um novo.</string>
<string name="save_battery">Economizar energia</string>
<string name="save_battery_message">Conexões de dados em segundo plano vão hibernar quando o seu telefone estiver inativo.</string>
- <string name="always_on_vpn">VPN sempre ligada</string>
+ <string name="always_on_vpn">VPN sempre ativa</string>
<string name="do_not_show_again">Não mostrar novamente</string>
<string name="always_on_vpn_user_message">Para habilitar VPN sempre ativa nas configurações de VPN clique no ícone de configurar [img src] e mude para ligado. </string>
+ <string name="always_on_blocking_vpn_user_message">Para proteger sua privacidade da melhor forma, você deveria ativar também a opção \"Bloqueie conexões sem VPN\"</string>
<string name="donate_title">Doar</string>
<string name="donate_default_message">Por favor doe hoje se você valoriza uma comunicação segura que é simples de usar para o usuário final e para o servidor.</string>
<string name="donate_message">LEAP depende de doações. Por favor doe hoje se você valoriza uma comunicação segura que é simples de usar para o usuário final e para o servidor.</string>
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
new file mode 100644
index 00000000..392411bd
--- /dev/null
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -0,0 +1,97 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+ <string name="retry">Repetir</string>
+ <string name="repository_url_text">O código fonte está disponível em https://0xacab.org/leap/bitmask_android</string>
+ <string name="leap_tracker">O rastreador de problemas está disponível em https://0xacab.org/leap/bitmask_android/issues</string>
+ <string name="translation_project_text">As traduções são bem-vindas e apreciadas. Consulte o nosso projeto na Transifex em https://www.transifex.com/projects/p/bitmask-android/</string>
+ <string name="switch_provider_menu_option">Mudar Provedor</string>
+ <string name="info">informação</string>
+ <string name="show_connection_details">Mostrar detalhes da ligação</string>
+ <string name="routes_info">Rotas: %s</string>
+ <string name="routes_info6">Rotas de IPv6: %s</string>
+ <string name="error_empty_username">O nome de utilizador não deve estar em branco</string>
+ <string name="cert_from_keystore">Obteve certificado \'%s\' do gestor de chaves</string>
+ <string name="provider_label">Provedor:</string>
+ <string name="provider_label_none">Nenhum provedor configurado</string>
+ <string name="status_unknown">Estado desconhecido</string>
+ <string name="eip_service_label">Acesso de VPN à Internet Encriptado</string>
+ <string name="configuration_wizard_title">Selecione um provedor de serviço</string>
+ <string name="add_provider">Adicionar novo Provedor</string>
+ <string name="introduce_new_provider">Adicione um novo provedor de serviço</string>
+ <string name="save">Guardar</string>
+ <string name="new_provider_uri">Nome do Domínio</string>
+ <string name="valid_url_entered">O URL é válido</string>
+ <string name="not_valid_url_entered">URL errado</string>
+ <string name="provider_details_title">Detalhes do provedor</string>
+ <string name="use_anonymously_button">Utilizar anonimamente</string>
+ <string name="username_hint">nome de utilizador</string>
+ <string name="username_ask">Por favor, insira o seu nome de utilizador</string>
+ <string name="password_ask">Por favor, insira a sua palavra-passe</string>
+ <string name="password_hint">senha</string>
+ <string name="password_match">As palavras-passe coincidem</string>
+ <string name="password_mismatch">As palavras-passe não coincidem</string>
+ <string name="user_message">Mensagem do Utilizador</string>
+ <string name="about_fragment_title">Sobre</string>
+ <string name="error_bad_user_password_user_message">Nome de utilizador ou palavra-passe incorreta</string>
+ <string name="error_client_http_user_message">Tente de novo: Erro HTTP de Cliente</string>
+ <string name="error_io_exception_user_message">Tente de novo: Erro I/O</string>
+ <string name="error_json_exception_user_message">Tente de novo: Má resposta do servidor</string>
+ <string name="error_no_such_algorithm_exception_user_message">Algoritmo de encriptação não encontrado. Por favor, atualize o Android!</string>
+ <string name="signup_or_login_button">Registar / Iniciar Sessão</string>
+ <string name="login_button">Iniciar Sessão</string>
+ <string name="login_to_profile">Inicie a sessão para o perfil</string>
+ <string name="logout_button">Terminar Sessão</string>
+ <string name="signup_button">Registar</string>
+ <string name="create_profile">Criar perfil</string>
+ <string name="setup_provider">Configurar provedor</string>
+ <string name="setup_error_title">Erro de Configuração</string>
+ <string name="setup_error_configure_button">Configurar</string>
+ <string name="setup_error_close_button">Sair</string>
+ <string name="server_unreachable_message">O servidor não está a responder, por favor, tente novamente.</string>
+ <string name="error.security.pinnedcertificate">Erro de segurança, atualize a aplicação ou escolha outro provedor.</string>
+ <string name="service_is_down_error">O serviço está desligado.</string>
+ <string name="configuring_provider">A configurar o provedor</string>
+ <string name="downloading_certificate_message">A transferir o certificado de VPN</string>
+ <string name="updating_certificate_message">A enviar o certificado de VPN</string>
+ <string name="login.riseup.warning">Os utilizadores de Riseup terão de criar uma conta separada para usar o serviço de VPN</string>
+ <string name="authentication_failed_message">Falhou a autenticação</string>
+ <string name="eip_status_start_pending">A iniciar a conexão</string>
+ <string name="eip_cancel_connect_title">Cancelar coneção?</string>
+ <string name="eip_cancel_connect_text">Existe uma tentativa de conexão em progresso. Deseja-a cancelar?</string>
+ <string name="eip.warning.browser_inconsistency">Desativar a ligação de VPN? Quando a VPN está desativada, poderá divulgar informação pessoal para o seu provedor da Internet ou rede local.</string>
+ <string name="eip_state_not_connected">Não está em execução! Ligação insegura!</string>
+ <string name="provider_problem">Parece que há um problema com o provedor.</string>
+ <string name="try_another_provider">Por favor, tente outro provedor, ou entre em contacto com o seu.</string>
+ <string name="default_username">Anónimo</string>
+ <string name="logging_in">A iniciar a sessão</string>
+ <string name="signing_up">A registar</string>
+ <string name="vpn.button.turn.on">Ativar</string>
+ <string name="vpn.button.turn.off">Desativar</string>
+ <string name="vpn_button_turn_off_blocking">Parar de bloquear</string>
+ <string name="vpn_securely_routed">O seu tráfego está encaminhado de forma segura através de:</string>
+ <string name="vpn_securely_routed_no_internet">Detetado, sem ligação à Internet. Quando esta voltar, nós encaminharemos o seu tráfego com segurança através de:</string>
+ <string name="log_fragment_title">Registo</string>
+ <string name="vpn_fragment_title">VPN</string>
+ <string name="navigation_drawer_open">Abrir gaveta de navegação</string>
+ <string name="navigation_drawer_close">Fechar gaveta de navegação</string>
+ <string name="action_example">Exemplo de ação</string>
+ <string name="action_settings">Definições</string>
+ <string name="void_vpn_error_establish">Não foi possível estabelecer a VPN de bloqueio.</string>
+ <string name="void_vpn_stopped">Parado o bloqueio de todo o tráfego de saída da Internet.</string>
+ <string name="void_vpn_title">A bloquear tráfego</string>
+ <string name="update_provider_details">Atualizar detalhes do provedor</string>
+ <string name="update_certificate">Atualizar certificado</string>
+ <string name="warning_eip_json_corrupted">A atualização da configuração do provedor falhou. </string>
+ <string name="eip_json_corrupted_user_message">A atualização da configuração do provedor falhou. Por favor, inicie a sessão e tente novamente.</string>
+ <string name="downloading_vpn_certificate_failed">A transferência do certificado da VPN falhou. Tente novamente ou escolha outro provedor.</string>
+ <string name="vpn_certificate_is_invalid">O certificado da VPN é inválido. Tente transferir um novo.</string>
+ <string name="vpn_certificate_user_message">O certificado da VPN é inválido. Por favor, inicie a sessão para transferir um novo.</string>
+ <string name="save_battery">Poupar bateria</string>
+ <string name="save_battery_message">As ligações de dados em segundo plano hibernarão quando o seu telefone estiver inativo.</string>
+ <string name="always_on_vpn">VPN - Sempre ligada</string>
+ <string name="donate_title">Doar</string>
+ <string name="donate_default_message">Por favor, doe hoje se valoriza a comunicação segura que é fácil, tanto para o utilizador final quanto para o provedor de serviços.</string>
+ <string name="donate_message">LEAP depende de doações. Por favor, doe hoje se valoriza a comunicação segura que é fácil, tanto para o utilizador final quanto para o provedor de serviços.</string>
+ <string name="donate_button_remind_later">Lembrar-me mais tarde</string>
+ <string name="donate_button_donate">Doar</string>
+</resources>
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index a81e7a28..5e3dae1a 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -7,7 +7,7 @@ https://0xacab.org/leap/bitmask_android/issues</string>
<string name="translation_project_text">Переводы приветствуются. Смотрите наш проект Transifex на
https://www.transifex.com/projects/p/bitmask-android/</string>
<string name="switch_provider_menu_option">Смена провайдера</string>
- <string name="info">информация</string>
+ <string name="info">Информация </string>
<string name="show_connection_details">Показать подробности о подключении</string>
<string name="routes_info">Маршруты: %s</string>
<string name="routes_info6">Маршруты IPv6: %s</string>
@@ -51,11 +51,8 @@ https://www.transifex.com/projects/p/bitmask-android/</string>
<string name="setup_error_title">Ошибка конфигурации</string>
<string name="setup_error_configure_button">Настройка</string>
<string name="setup_error_close_button">Выход</string>
- <string name="setup_error_text">Произошла ошибка настройки Bitmask с выбранным Вами провайдером.\n\nВы можете выбрать повторную настройку или настроить провайдера при следующей загрузке.</string>
<string name="server_unreachable_message">Сервер недоступен, пожалуйста, попробуйте еще раз.</string>
<string name="error.security.pinnedcertificate">Ошибка безопасности, обновите приложение или выберите другого провайдера</string>
- <string name="malformed_url">Кажется это не провайдер Bitmask.</string>
- <string name="certificate_error">Этот провайдер не является надежным провайдером Bitmask.</string>
<string name="service_is_down_error">Сервис недоступен.</string>
<string name="configuring_provider">Настройка провайдера</string>
<string name="incorrectly_downloaded_certificate_message">Ваш анонимный сертификат не был загружен</string>
@@ -74,29 +71,19 @@ https://www.transifex.com/projects/p/bitmask-android/</string>
<string name="provider_problem">Похоже проблема с провайдером.</string>
<string name="try_another_provider">Пожалуйста попробуйте иного провайдера или полключите себя.</string>
<string name="default_username">Анонимно</string>
- <string name="logged_in_user_status">Вошли.</string>
- <string name="logged_out_user_status">Вышли.</string>
- <string name="didnt_log_out_user_status">Не выходите. Попробуйте позже. Возможно это проблема в сети или у провайдера. Если это продолжится то удалити данные Bitmask из настроек Android.</string>
- <string name="not_logged_in_user_status">Ещё не вошёл.</string>
- <string name="logging_in_user_status">Входит.</string>
<string name="logging_in">Вошёл.</string>
<string name="signing_up">Подписывается.</string>
- <string name="logging_out_user_status">Выходит.</string>
- <string name="signingup_message">Зарегистрировался.</string>
<string name="vpn.button.turn.on">Вкл</string>
<string name="vpn.button.turn.off">Выкл</string>
<string name="vpn_button_turn_off_blocking">Остановить блокирование</string>
<string name="vpn_securely_routed">Ваш трафик безопасно маршрутизируется через:</string>
<string name="vpn_securely_routed_no_internet">Не определяется соединение с Internet, когда оно восстановится мы безопасно передадим Ваши сообщения:</string>
- <string name="bitmask_log">Лог Bitmask</string>
- <string name="title_activity_main">Bitmask</string>
<string name="log_fragment_title">Журнал</string>
<string name="vpn_fragment_title">VPN</string>
<string name="navigation_drawer_open">Открыть навигационный ящик</string>
<string name="navigation_drawer_close">Закрыть навигационный ящик</string>
<string name="action_example">Пример действия</string>
<string name="action_settings">Настройки</string>
- <string name="void_vpn_establish">Bitmask блокирует весь исходящий интернет-трафик.</string>
<string name="void_vpn_error_establish">Не удалось установить блокировку VPN</string>
<string name="void_vpn_stopped">Перестал блокироваться весь исходящий интернет-трафик.</string>
<string name="void_vpn_title">Блокирование траффика</string>
@@ -104,9 +91,6 @@ https://www.transifex.com/projects/p/bitmask-android/</string>
<string name="update_certificate">Обновление сертификата</string>
<string name="warning_eip_json_corrupted">Не удалось обновить конфигурацию провайдера.</string>
<string name="eip_json_corrupted_user_message">Не удалось обновить конфигурацию провайдера. Пожалуйста, войдите, чтобы повторить попытку.</string>
- <string name="warning_corrupted_provider_details">Сохраненные данные провайдера повреждены. Вы можете либо обновить Bitmask (рекомендуется), либо обновить информацию о провайдере, используя коммерческий сертификат CA.</string>
- <string name="warning_corrupted_provider_cert">Сохранённый сертификат провардера недействителен. Вы можете либо обновить Bitmask (рекомендуется) либо обновить сертификат провайдера используя сертификат коммерческого центра сертификации (CA).</string>
- <string name="warning_expired_provider_cert">Сохранённый сертификат провайдера просрочен. Вы можете либо обновить Bitmask (рекомендуется) либо обновить сертификат провайдера используя сертификат коммерческого цента сертификации (CA).</string>
<string name="downloading_vpn_certificate_failed">Загрузка сертификата VPN не удалась. Попробуйте еще раз или выберите другого поставщика.</string>
<string name="vpn_certificate_is_invalid">Сертификат VPN недействителен. Попытайтесь загрузить новый.</string>
<string name="vpn_certificate_user_message">Сертификат VPN недействителен. Войдите для загрузки нового.</string>
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index d8873017..a8cdb28e 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -35,4 +35,6 @@
<color name="colorActionBarTitleFont">@color/white</color>
<color name="colorActionBarSubtitleFont">@color/black800</color>
+ <color name="colorWarning">#B33A3A</color>
+
</resources>
diff --git a/app/src/main/res/values/strings-icsopenvpn.xml b/app/src/main/res/values/strings-icsopenvpn.xml
index b390ecec..b552715a 100755
--- a/app/src/main/res/values/strings-icsopenvpn.xml
+++ b/app/src/main/res/values/strings-icsopenvpn.xml
@@ -486,5 +486,4 @@
<string name="external_authenticator">External Authenticator</string>
<string name="configure">Configure</string>
<string name="extauth_not_configured">External Authneticator not configured</string>
-
</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5ae52ea9..27f508d5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -32,6 +32,7 @@
<string name="password_mismatch">Passwords do not match</string>
<string name="user_message">User message</string>
<string name="about_fragment_title">About</string>
+ <string name="exclude_apps_fragment_title">Exclude apps from VPN</string>
<string name="error_srp_math_error_user_message">Try again: Server math error</string>
<string name="error_bad_user_password_user_message">Incorrect username or password</string>
<string name="error_not_valid_password_user_message">It must be at least 8 characters long</string>
@@ -115,4 +116,6 @@
<string name="obfuscated_connection_try">Trying an obfuscated connection.</string>
<string name="nav_drawer_obfuscated_connection">Using Bridges</string>
<string name="nav_drawer_subtitle_obfuscated_connection">Circumvent VPN filtering</string>
+ <string name="warning_exclude_apps_message">Be careful of excluding apps from VPN. This will reveal your identity and compromise your security.</string>
+
</resources>
diff --git a/app/src/main/res/values/untranslatable.xml b/app/src/main/res/values/untranslatable.xml
index a92cd176..cbae03fd 100644
--- a/app/src/main/res/values/untranslatable.xml
+++ b/app/src/main/res/values/untranslatable.xml
@@ -2,13 +2,13 @@
<resources>
<string name="notifcation_title_bitmask" translatable="false">%s - %s</string>
<string name="copyright_leapgui" translatable="false">Copyright 2012-2019\nLEAP Encryption Access Project &lt;info@leap.se></string>
- <string name="opevpn_copyright" translatable="false">Copyright © 2002–2019 OpenVPN Technologies, Inc. &lt;sales@openvpn.net>\n
+ <string name="opevpn_copyright" translatable="false">Copyright ? 2002?2019 OpenVPN Technologies, Inc. &lt;sales@openvpn.net>\n
"OpenVPN" is a trademark of OpenVPN Technologies, Inc.</string>
- <string name="lzo_copyright" translatable="false">Copyright © 1996 – 2011 Markus Franz Xaver Johannes Oberhumer</string>
+ <string name="lzo_copyright" translatable="false">Copyright ? 1996 ? 2011 Markus Franz Xaver Johannes Oberhumer</string>
<string name="copyright_openssl" translatable="false"> Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.\n\n
This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)\n
- Copyright © 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved.</string>
- <string name="copyright_okhttp" translatable="false">Copyright © 2019 Square, Inc.</string>
+ Copyright ? 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved.</string>
+ <string name="copyright_okhttp" translatable="false">Copyright ? 2019 Square, Inc.</string>
<string name="okhttp" translatable="false">OkHttp</string>
<string name="openvpn" translatable="false">OpenVPN</string>
<string name="lzo" translatable="false">LZO</string>
@@ -23,14 +23,14 @@
<string name="copyright_openvpn3" translatable="false">GNU AFFERO GENERAL PUBLIC LICENSE\n
Version 3, 19 November 2007</string>
<string name="unknown_state" translatable="false">Unknown state</string>
- <string name="copyright_blinktgui" translatable="false">Copyright 2012–2019 Arne Schwabe &lt;arne@rfc2549.org></string>
+ <string name="copyright_blinktgui" translatable="false">Copyright 2012?2019 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" translatable="false">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="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>
diff --git a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaySelectorTest.java b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaySelectorTest.java
index 6d858d39..2f5ae9b6 100644
--- a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaySelectorTest.java
+++ b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaySelectorTest.java
@@ -1,5 +1,32 @@
package se.leap.bitmaskclient.eip;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.IntentSender;
+import android.content.ServiceConnection;
+import android.content.SharedPreferences;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.res.AssetManager;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.database.DatabaseErrorHandler;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.UserHandle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.view.Display;
+
import com.tngtech.java.junit.dataprovider.DataProvider;
import com.tngtech.java.junit.dataprovider.DataProviderRunner;
import com.tngtech.java.junit.dataprovider.UseDataProvider;
@@ -14,7 +41,12 @@ import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+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 java.util.ArrayList;
import se.leap.bitmaskclient.Provider;
@@ -74,7 +106,7 @@ public class GatewaySelectorTest {
for (int i = 0; i < gateways.length(); i++) {
JSONObject gw = gateways.getJSONObject(i);
JSONObject secrets = secretsConfiguration();
- Gateway aux = new Gateway(eipDefinition, secrets, gw);
+ Gateway aux = new Gateway(eipDefinition, secrets, gw, null);
gatewayList.add(aux);
}