tor-commits
Threads by month
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
October 2020
- 17 participants
- 2275 discussions
[orbot/master] First stab at modularizing shared code between the app and app mini projects
by n8fr8@torproject.org 07 Oct '20
by n8fr8@torproject.org 07 Oct '20
07 Oct '20
commit 17178d23d1578a7586cc441065728d73c5e11eb9
Author: bim <dsnake(a)protonmail.com>
Date: Tue Sep 8 13:01:19 2020 -0400
First stab at modularizing shared code between the app and app mini projects
---
app-mini/build.gradle | 6 +-
app-mini/src/debug/AndroidManifest.xml | 2 +-
app-mini/src/main/AndroidManifest.xml | 29 +-
.../integration/android/IntentIntegrator.java | 506 -----------
.../org/torproject/android/mini/MainConstants.java | 15 -
.../torproject/android/mini/MiniMainActivity.java | 995 +++++++++------------
.../torproject/android/mini/OnBootReceiver.java | 39 -
.../org/torproject/android/mini/OrbotMiniApp.java | 79 +-
.../android/mini/settings/Languages.java | 228 -----
.../android/mini/settings/LocaleHelper.java | 86 --
.../android/mini/settings/SettingsPreferences.java | 72 --
.../mini/ui/NoPersonalizedLearningEditText.java | 13 -
.../android/mini/ui/Rotate3dAnimation.java | 76 --
.../mini/ui/onboarding/OnboardingActivity.java | 3 +-
.../src/main/res/layout/content_app_config.xml | 1 -
app/build.gradle | 2 +
app/src/main/AndroidManifest.xml | 4 +-
.../zxing/integration/android/IntentResult.java | 95 --
.../org/torproject/android/OnBootReceiver.java | 42 -
.../main/java/org/torproject/android/OrbotApp.java | 6 +-
.../org/torproject/android/OrbotMainActivity.java | 12 +-
.../org/torproject/android/settings/Languages.java | 195 ----
.../torproject/android/settings/LocaleHelper.java | 80 --
.../android/settings/SettingsPreferences.java | 68 --
.../android/ui/NoPersonalizedLearningEditText.java | 13 -
.../torproject/android/ui/Rotate3dAnimation.java | 76 --
.../ui/hiddenservices/ClientCookiesActivity.java | 2 +-
.../ui/hiddenservices/HiddenServicesActivity.java | 2 +-
.../ui/hiddenservices/backup/BackupUtils.java | 2 +-
.../dialogs/SelectCookieBackupDialog.java | 2 +-
.../dialogs/SelectHSBackupDialog.java | 2 +-
.../ui/hiddenservices/storage/ExternalStorage.java | 28 -
.../ui/onboarding/BridgeWizardActivity.java | 4 +-
.../android/ui/onboarding/OnboardingActivity.java | 2 +-
.../res/layout/layout_add_client_cookie_dialog.xml | 4 +-
app/src/main/res/layout/layout_hs_data_dialog.xml | 6 +-
appcore/.gitignore | 1 +
appcore/build.gradle | 41 +
appcore/consumer-rules.pro | 0
appcore/proguard-rules.pro | 21 +
.../android/core/ExampleInstrumentedTest.kt | 24 +
appcore/src/main/AndroidManifest.xml | 3 +
.../org/torproject/android/core/ExternalStorage.kt | 15 +
.../java/org/torproject/android/core/Languages.kt | 174 ++++
.../org/torproject/android/core/LocaleHelper.kt | 55 ++
.../org/torproject/android/core/OnBootReceiver.kt | 31 +
.../core/ui/NoPersonalizedLearningEditText.kt | 12 +
.../android/core/ui/Rotate3dAnimation.kt | 48 +
.../android/core/ui/SettingsPreferencesActivity.kt | 65 ++
.../org/torproject/android/core/ExampleUnitTest.kt | 17 +
build.gradle | 4 +
intentintegrator/.gitignore | 1 +
intentintegrator/build.gradle | 30 +
intentintegrator/consumer-rules.pro | 0
intentintegrator/proguard-rules.pro | 21 +
intentintegrator/src/main/AndroidManifest.xml | 5 +
.../integration/android/IntentIntegrator.java | 0
.../zxing/integration/android/IntentResult.java | 0
settings.gradle | 2 +
59 files changed, 1017 insertions(+), 2350 deletions(-)
diff --git a/app-mini/build.gradle b/app-mini/build.gradle
index 140011cc..6cf3d7f3 100644
--- a/app-mini/build.gradle
+++ b/app-mini/build.gradle
@@ -109,8 +109,12 @@ dependencies {
implementation project(':orbotservice')
implementation 'com.github.apl-devs:appintro:v4.2.2'
implementation 'androidx.palette:palette:1.0.0'
- implementation 'com.github.javiersantos:AppUpdater:2.7'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ implementation project(path: ':appcore')
+ implementation 'androidx.recyclerview:recyclerview:1.1.0'
+ implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
+ implementation 'com.google.android.material:material:1.2.1'
+ implementation project(path: ':intentintegrator')
androidTestImplementation "tools.fastlane:screengrab:1.2.0"
}
diff --git a/app-mini/src/debug/AndroidManifest.xml b/app-mini/src/debug/AndroidManifest.xml
index a04afa83..a06b3fe8 100644
--- a/app-mini/src/debug/AndroidManifest.xml
+++ b/app-mini/src/debug/AndroidManifest.xml
@@ -72,7 +72,7 @@
android:exported="false"
android:label="@string/app_name" />
<activity
- android:name=".settings.SettingsPreferences"
+ android:name=".settings.SettingsPreferencesActivity"
android:label="@string/app_name" />
<activity
android:name=".ui.AppManagerActivity"
diff --git a/app-mini/src/main/AndroidManifest.xml b/app-mini/src/main/AndroidManifest.xml
index 6e73081a..dda8d0bf 100644
--- a/app-mini/src/main/AndroidManifest.xml
+++ b/app-mini/src/main/AndroidManifest.xml
@@ -51,7 +51,7 @@
android:stateNotNeeded="true"
android:theme="@android:style/Theme.Translucent" />
<activity
- android:name=".settings.SettingsPreferences"
+ android:name="org.torproject.android.core.ui.SettingsPreferencesActivity"
android:label="@string/app_name" />
<activity
android:name=".ui.AppManagerActivity"
@@ -61,36 +61,11 @@
<activity android:name=".ui.onboarding.OnboardingActivity" />
- <receiver
- android:name=".OnBootReceiver"
- android:enabled="true"
- android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED" />
-
- <category android:name="android.intent.category.HOME" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.QUICKBOOT_POWERON" />
-
- <category android:name="android.intent.category.HOME" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED" />
-
- <category android:name="android.intent.category.HOME" />
- </intent-filter>
- </receiver>
-
<service
android:name="org.torproject.android.service.OrbotService"
android:enabled="true"
android:permission="android.permission.BIND_VPN_SERVICE"
- android:stopWithTask="false" />
- <service
- android:name="org.torproject.android.service.vpn.TorVpnService"
- android:enabled="true"
- android:permission="android.permission.BIND_VPN_SERVICE">
+ android:stopWithTask="false">
<intent-filter>
<action android:name="android.net.VpnService" />
</intent-filter>
diff --git a/app-mini/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java b/app-mini/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java
deleted file mode 100644
index d5628e87..00000000
--- a/app-mini/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * Copyright 2009 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.zxing.integration.android;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Fragment;
-import android.content.ActivityNotFoundException;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.net.Uri;
-import android.os.Bundle;
-import android.util.Log;
-
-/**
- * <p>A utility class which helps ease integration with Barcode Scanner via {@link Intent}s. This is a simple
- * way to invoke barcode scanning and receive the result, without any need to integrate, modify, or learn the
- * project's source code.</p>
- *
- * <h2>Initiating a barcode scan</h2>
- *
- * <p>To integrate, create an instance of {@code IntentIntegrator} and call {@link #initiateScan()} and wait
- * for the result in your app.</p>
- *
- * <p>It does require that the Barcode Scanner (or work-alike) application is installed. The
- * {@link #initiateScan()} method will prompt the user to download the application, if needed.</p>
- *
- * <p>There are a few steps to using this integration. First, your {@link Activity} must implement
- * the method {@link Activity#onActivityResult(int, int, Intent)} and include a line of code like this:</p>
- *
- * <pre>{@code
- * public void onActivityResult(int requestCode, int resultCode, Intent intent) {
- * IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
- * if (scanResult != null) {
- * // handle scan result
- * }
- * // else continue with any other code you need in the method
- * ...
- * }
- * }</pre>
- *
- * <p>This is where you will handle a scan result.</p>
- *
- * <p>Second, just call this in response to a user action somewhere to begin the scan process:</p>
- *
- * <pre>{@code
- * IntentIntegrator integrator = new IntentIntegrator(yourActivity);
- * integrator.initiateScan();
- * }</pre>
- *
- * <p>Note that {@link #initiateScan()} returns an {@link AlertDialog} which is non-null if the
- * user was prompted to download the application. This lets the calling app potentially manage the dialog.
- * In particular, ideally, the app dismisses the dialog if it's still active in its {@link Activity#onPause()}
- * method.</p>
- *
- * <p>You can use {@link #setTitle(String)} to customize the title of this download prompt dialog (or, use
- * {@link #setTitleByID(int)} to set the title by string resource ID.) Likewise, the prompt message, and
- * yes/no button labels can be changed.</p>
- *
- * <p>Finally, you can use {@link #addExtra(String, Object)} to add more parameters to the Intent used
- * to invoke the scanner. This can be used to set additional options not directly exposed by this
- * simplified API.</p>
- *
- * <p>By default, this will only allow applications that are known to respond to this intent correctly
- * do so. The apps that are allowed to response can be set with {@link #setTargetApplications(List)}.
- * For example, set to {@link #TARGET_BARCODE_SCANNER_ONLY} to only target the Barcode Scanner app itself.</p>
- *
- * <h2>Sharing text via barcode</h2>
- *
- * <p>To share text, encoded as a QR Code on-screen, similarly, see {@link #shareText(CharSequence)}.</p>
- *
- * <p>Some code, particularly download integration, was contributed from the Anobiit application.</p>
- *
- * <h2>Enabling experimental barcode formats</h2>
- *
- * <p>Some formats are not enabled by default even when scanning with {@link #ALL_CODE_TYPES}, such as
- * PDF417. Use {@link #initiateScan(java.util.Collection)} with
- * a collection containing the names of formats to scan for explicitly, like "PDF_417", to use such
- * formats.</p>
- *
- * @author Sean Owen
- * @author Fred Lin
- * @author Isaac Potoczny-Jones
- * @author Brad Drehmer
- * @author gcstang
- */
-public class IntentIntegrator {
-
- public static final int REQUEST_CODE = 0x0000c0de; // Only use bottom 16 bits
- private static final String TAG = IntentIntegrator.class.getSimpleName();
-
- public static final String DEFAULT_TITLE = "Install Barcode Scanner?";
- public static final String DEFAULT_MESSAGE =
- "This application requires Barcode Scanner. Would you like to install it?";
- public static final String DEFAULT_YES = "Yes";
- public static final String DEFAULT_NO = "No";
-
- private static final String BS_PACKAGE = "com.google.zxing.client.android";
- private static final String BSPLUS_PACKAGE = "com.srowen.bs.android";
-
- // supported barcode formats
- public static final Collection<String> PRODUCT_CODE_TYPES = list("UPC_A", "UPC_E", "EAN_8", "EAN_13", "RSS_14");
- public static final Collection<String> ONE_D_CODE_TYPES =
- list("UPC_A", "UPC_E", "EAN_8", "EAN_13", "CODE_39", "CODE_93", "CODE_128",
- "ITF", "RSS_14", "RSS_EXPANDED");
- public static final Collection<String> QR_CODE_TYPES = Collections.singleton("QR_CODE");
- public static final Collection<String> DATA_MATRIX_TYPES = Collections.singleton("DATA_MATRIX");
-
- public static final Collection<String> ALL_CODE_TYPES = null;
-
- public static final List<String> TARGET_BARCODE_SCANNER_ONLY = Collections.singletonList(BS_PACKAGE);
- public static final List<String> TARGET_ALL_KNOWN = list(
- BSPLUS_PACKAGE, // Barcode Scanner+
- BSPLUS_PACKAGE + ".simple", // Barcode Scanner+ Simple
- BS_PACKAGE // Barcode Scanner
- // What else supports this intent?
- );
-
- private final Activity activity;
- private final Fragment fragment;
-
- private String title;
- private String message;
- private String buttonYes;
- private String buttonNo;
- private List<String> targetApplications;
- private final Map<String,Object> moreExtras = new HashMap<String,Object>(3);
-
- /**
- * @param activity {@link Activity} invoking the integration
- */
- public IntentIntegrator(Activity activity) {
- this.activity = activity;
- this.fragment = null;
- initializeConfiguration();
- }
-
- /**
- * @param fragment {@link Fragment} invoking the integration.
- * {@link #startActivityForResult(Intent, int)} will be called on the {@link Fragment} instead
- * of an {@link Activity}
- */
- public IntentIntegrator(Fragment fragment) {
- this.activity = fragment.getActivity();
- this.fragment = fragment;
- initializeConfiguration();
- }
-
- private void initializeConfiguration() {
- title = DEFAULT_TITLE;
- message = DEFAULT_MESSAGE;
- buttonYes = DEFAULT_YES;
- buttonNo = DEFAULT_NO;
- targetApplications = TARGET_ALL_KNOWN;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public void setTitleByID(int titleID) {
- title = activity.getString(titleID);
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public void setMessageByID(int messageID) {
- message = activity.getString(messageID);
- }
-
- public String getButtonYes() {
- return buttonYes;
- }
-
- public void setButtonYes(String buttonYes) {
- this.buttonYes = buttonYes;
- }
-
- public void setButtonYesByID(int buttonYesID) {
- buttonYes = activity.getString(buttonYesID);
- }
-
- public String getButtonNo() {
- return buttonNo;
- }
-
- public void setButtonNo(String buttonNo) {
- this.buttonNo = buttonNo;
- }
-
- public void setButtonNoByID(int buttonNoID) {
- buttonNo = activity.getString(buttonNoID);
- }
-
- public Collection<String> getTargetApplications() {
- return targetApplications;
- }
-
- public final void setTargetApplications(List<String> targetApplications) {
- if (targetApplications.isEmpty()) {
- throw new IllegalArgumentException("No target applications");
- }
- this.targetApplications = targetApplications;
- }
-
- public void setSingleTargetApplication(String targetApplication) {
- this.targetApplications = Collections.singletonList(targetApplication);
- }
-
- public Map<String,?> getMoreExtras() {
- return moreExtras;
- }
-
- public final void addExtra(String key, Object value) {
- moreExtras.put(key, value);
- }
-
- /**
- * Initiates a scan for all known barcode types with the default camera.
- *
- * @return the {@link AlertDialog} that was shown to the user prompting them to download the app
- * if a prompt was needed, or null otherwise.
- */
- public final AlertDialog initiateScan() {
- return initiateScan(ALL_CODE_TYPES, -1);
- }
-
- /**
- * Initiates a scan for all known barcode types with the specified camera.
- *
- * @param cameraId camera ID of the camera to use. A negative value means "no preference".
- * @return the {@link AlertDialog} that was shown to the user prompting them to download the app
- * if a prompt was needed, or null otherwise.
- */
- public final AlertDialog initiateScan(int cameraId) {
- return initiateScan(ALL_CODE_TYPES, cameraId);
- }
-
- /**
- * Initiates a scan, using the default camera, only for a certain set of barcode types, given as strings corresponding
- * to their names in ZXing's {@code BarcodeFormat} class like "UPC_A". You can supply constants
- * like {@link #PRODUCT_CODE_TYPES} for example.
- *
- * @param desiredBarcodeFormats names of {@code BarcodeFormat}s to scan for
- * @return the {@link AlertDialog} that was shown to the user prompting them to download the app
- * if a prompt was needed, or null otherwise.
- */
- public final AlertDialog initiateScan(Collection<String> desiredBarcodeFormats) {
- return initiateScan(desiredBarcodeFormats, -1);
- }
-
- /**
- * Initiates a scan, using the specified camera, only for a certain set of barcode types, given as strings corresponding
- * to their names in ZXing's {@code BarcodeFormat} class like "UPC_A". You can supply constants
- * like {@link #PRODUCT_CODE_TYPES} for example.
- *
- * @param desiredBarcodeFormats names of {@code BarcodeFormat}s to scan for
- * @param cameraId camera ID of the camera to use. A negative value means "no preference".
- * @return the {@link AlertDialog} that was shown to the user prompting them to download the app
- * if a prompt was needed, or null otherwise
- */
- public final AlertDialog initiateScan(Collection<String> desiredBarcodeFormats, int cameraId) {
- Intent intentScan = new Intent(BS_PACKAGE + ".SCAN");
- intentScan.addCategory(Intent.CATEGORY_DEFAULT);
-
- // check which types of codes to scan for
- if (desiredBarcodeFormats != null) {
- // set the desired barcode types
- StringBuilder joinedByComma = new StringBuilder();
- for (String format : desiredBarcodeFormats) {
- if (joinedByComma.length() > 0) {
- joinedByComma.append(',');
- }
- joinedByComma.append(format);
- }
- intentScan.putExtra("SCAN_FORMATS", joinedByComma.toString());
- }
-
- // check requested camera ID
- if (cameraId >= 0) {
- intentScan.putExtra("SCAN_CAMERA_ID", cameraId);
- }
-
- String targetAppPackage = findTargetAppPackage(intentScan);
- if (targetAppPackage == null) {
- return showDownloadDialog();
- }
- intentScan.setPackage(targetAppPackage);
- intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
- attachMoreExtras(intentScan);
- startActivityForResult(intentScan, REQUEST_CODE);
- return null;
- }
-
- /**
- * Start an activity. This method is defined to allow different methods of activity starting for
- * newer versions of Android and for compatibility library.
- *
- * @param intent Intent to start.
- * @param code Request code for the activity
- * @see android.app.Activity#startActivityForResult(Intent, int)
- * @see android.app.Fragment#startActivityForResult(Intent, int)
- */
- protected void startActivityForResult(Intent intent, int code) {
- if (fragment == null) {
- activity.startActivityForResult(intent, code);
- } else {
- fragment.startActivityForResult(intent, code);
- }
- }
-
- private String findTargetAppPackage(Intent intent) {
- PackageManager pm = activity.getPackageManager();
- List<ResolveInfo> availableApps = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
- if (availableApps != null) {
- for (String targetApp : targetApplications) {
- if (contains(availableApps, targetApp)) {
- return targetApp;
- }
- }
- }
- return null;
- }
-
- private static boolean contains(Iterable<ResolveInfo> availableApps, String targetApp) {
- for (ResolveInfo availableApp : availableApps) {
- String packageName = availableApp.activityInfo.packageName;
- if (targetApp.equals(packageName)) {
- return true;
- }
- }
- return false;
- }
-
- private AlertDialog showDownloadDialog() {
- AlertDialog.Builder downloadDialog = new AlertDialog.Builder(activity);
- downloadDialog.setTitle(title);
- downloadDialog.setMessage(message);
- downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int i) {
- String packageName;
- if (targetApplications.contains(BS_PACKAGE)) {
- // Prefer to suggest download of BS if it's anywhere in the list
- packageName = BS_PACKAGE;
- } else {
- // Otherwise, first option:
- packageName = targetApplications.get(0);
- }
- Uri uri = Uri.parse("market://details?id=" + packageName);
- Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- try {
- if (fragment == null) {
- activity.startActivity(intent);
- } else {
- fragment.startActivity(intent);
- }
- } catch (ActivityNotFoundException anfe) {
- // Hmm, market is not installed
- Log.w(TAG, "Google Play is not installed; cannot install " + packageName);
- }
- }
- });
- downloadDialog.setNegativeButton(buttonNo, null);
- downloadDialog.setCancelable(true);
- return downloadDialog.show();
- }
-
-
- /**
- * <p>Call this from your {@link Activity}'s
- * {@link Activity#onActivityResult(int, int, Intent)} method.</p>
- *
- * @param requestCode request code from {@code onActivityResult()}
- * @param resultCode result code from {@code onActivityResult()}
- * @param intent {@link Intent} from {@code onActivityResult()}
- * @return null if the event handled here was not related to this class, or
- * else an {@link IntentResult} containing the result of the scan. If the user cancelled scanning,
- * the fields will be null.
- */
- public static IntentResult parseActivityResult(int requestCode, int resultCode, Intent intent) {
- if (requestCode == REQUEST_CODE) {
- if (resultCode == Activity.RESULT_OK) {
- String contents = intent.getStringExtra("SCAN_RESULT");
- String formatName = intent.getStringExtra("SCAN_RESULT_FORMAT");
- byte[] rawBytes = intent.getByteArrayExtra("SCAN_RESULT_BYTES");
- int intentOrientation = intent.getIntExtra("SCAN_RESULT_ORIENTATION", Integer.MIN_VALUE);
- Integer orientation = intentOrientation == Integer.MIN_VALUE ? null : intentOrientation;
- String errorCorrectionLevel = intent.getStringExtra("SCAN_RESULT_ERROR_CORRECTION_LEVEL");
- return new IntentResult(contents,
- formatName,
- rawBytes,
- orientation,
- errorCorrectionLevel);
- }
- return new IntentResult();
- }
- return null;
- }
-
-
- /**
- * Defaults to type "TEXT_TYPE".
- *
- * @param text the text string to encode as a barcode
- * @return the {@link AlertDialog} that was shown to the user prompting them to download the app
- * if a prompt was needed, or null otherwise
- * @see #shareText(CharSequence, CharSequence)
- */
- public final AlertDialog shareText(CharSequence text) {
- return shareText(text, "TEXT_TYPE");
- }
-
- /**
- * Shares the given text by encoding it as a barcode, such that another user can
- * scan the text off the screen of the device.
- *
- * @param text the text string to encode as a barcode
- * @param type type of data to encode. See {@code com.google.zxing.client.android.Contents.Type} constants.
- * @return the {@link AlertDialog} that was shown to the user prompting them to download the app
- * if a prompt was needed, or null otherwise
- */
- public final AlertDialog shareText(CharSequence text, CharSequence type) {
- Intent intent = new Intent();
- intent.addCategory(Intent.CATEGORY_DEFAULT);
- intent.setAction(BS_PACKAGE + ".ENCODE");
- intent.putExtra("ENCODE_TYPE", type);
- intent.putExtra("ENCODE_DATA", text);
- String targetAppPackage = findTargetAppPackage(intent);
- if (targetAppPackage == null) {
- return showDownloadDialog();
- }
- intent.setPackage(targetAppPackage);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
- attachMoreExtras(intent);
- if (fragment == null) {
- activity.startActivity(intent);
- } else {
- fragment.startActivity(intent);
- }
- return null;
- }
-
- private static List<String> list(String... values) {
- return Collections.unmodifiableList(Arrays.asList(values));
- }
-
- private void attachMoreExtras(Intent intent) {
- for (Map.Entry<String,Object> entry : moreExtras.entrySet()) {
- String key = entry.getKey();
- Object value = entry.getValue();
- // Kind of hacky
- if (value instanceof Integer) {
- intent.putExtra(key, (Integer) value);
- } else if (value instanceof Long) {
- intent.putExtra(key, (Long) value);
- } else if (value instanceof Boolean) {
- intent.putExtra(key, (Boolean) value);
- } else if (value instanceof Double) {
- intent.putExtra(key, (Double) value);
- } else if (value instanceof Float) {
- intent.putExtra(key, (Float) value);
- } else if (value instanceof Bundle) {
- intent.putExtra(key, (Bundle) value);
- } else {
- intent.putExtra(key, value.toString());
- }
- }
- }
-
-}
diff --git a/app-mini/src/main/java/org/torproject/android/mini/MainConstants.java b/app-mini/src/main/java/org/torproject/android/mini/MainConstants.java
deleted file mode 100644
index b4d64147..00000000
--- a/app-mini/src/main/java/org/torproject/android/mini/MainConstants.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.torproject.android.mini;
-
-public interface MainConstants {
-
- //EXIT COUNTRY CODES
- String[] COUNTRY_CODES = {"DE","AT","SE","CH","IS","CA","US","ES","FR","BG","PL","AU","BR","CZ","DK","FI","GB","HU","NL","JP","RO","RU","SG","SK"};
-
- //path to check Tor against
- String URL_TOR_CHECK = "https://check.torproject.org";
-
- String URL_TOR_BRIDGES = "https://bridges.torproject.org/bridges?transport=";
-
- int RESULT_CLOSE_ALL = 0;
-
-}
diff --git a/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java b/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
index 4566031d..26b17fdf 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
@@ -3,8 +3,6 @@
package org.torproject.android.mini;
-import android.app.ActivityManager;
-import android.app.ActivityManager.RunningServiceInfo;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -39,6 +37,7 @@ import android.view.animation.AccelerateInterpolator;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
+
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SwitchCompat;
import androidx.appcompat.widget.Toolbar;
@@ -47,15 +46,17 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.palette.graphics.Palette;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
+
import org.json.JSONArray;
-import org.torproject.android.mini.settings.Languages;
-import org.torproject.android.mini.settings.LocaleHelper;
-import org.torproject.android.mini.settings.SettingsPreferences;
+import org.torproject.android.core.Languages;
+import org.torproject.android.core.LocaleHelper;
+import org.torproject.android.core.ui.Rotate3dAnimation;
+import org.torproject.android.core.ui.SettingsPreferencesActivity;
import org.torproject.android.mini.ui.AppConfigActivity;
import org.torproject.android.mini.ui.AppManagerActivity;
-import org.torproject.android.mini.ui.Rotate3dAnimation;
import org.torproject.android.mini.ui.onboarding.OnboardingActivity;
import org.torproject.android.service.OrbotConstants;
import org.torproject.android.service.OrbotService;
@@ -73,108 +74,83 @@ import java.util.ArrayList;
import java.util.Locale;
import java.util.StringTokenizer;
-import static org.torproject.android.mini.MainConstants.RESULT_CLOSE_ALL;
import static org.torproject.android.service.vpn.VpnPrefs.PREFS_KEY_TORIFIED;
-public class MiniMainActivity extends AppCompatActivity
- implements OrbotConstants, OnLongClickListener {
+public class MiniMainActivity extends AppCompatActivity implements OrbotConstants, OnLongClickListener {
+ private static final int RESULT_CLOSE_ALL = 0;
+ private final static int REQUEST_VPN = 8888;
+ private final static int REQUEST_SETTINGS = 0x9874;
+ private final static int REQUEST_VPN_APPS_SELECT = 8889;
+ private final static int LOG_DRAWER_GRAVITY = Gravity.END;
+ // message types for mStatusUpdateHandler
+ private final static int STATUS_UPDATE = 1;
+ private static final int MESSAGE_TRAFFIC_COUNT = 2;
+ private static final int MESSAGE_PORTS = 3;
+ private static final float ROTATE_FROM = 0.0f;
+ private static final float ROTATE_TO = 360.0f * 4f;// 3.141592654f * 32.0f;
+ ArrayList<String> pkgIds = new ArrayList<>();
+ AlertDialog aDialog = null;
/* Useful UI bits */
// private TextView lblStatus = null; //the main text display widget
private ImageView imgStatus = null; //the main touchable image for activating Orbot
-
private TextView downloadText = null;
private TextView uploadText = null;
private TextView mTxtOrbotLog = null;
-
- private SwitchCompat mBtnVPN = null;
-
- private DrawerLayout mDrawer;
-
+ private SwitchCompat mBtnVPN = null;
+ private DrawerLayout mDrawer;
/* Some tracking bits */
private String torStatus = null; //latest status reported from the tor service
private Intent lastStatusIntent; // the last ACTION_STATUS Intent received
-
private SharedPreferences mPrefs = null;
-
private boolean autoStartFromIntent = false;
-
- private final static int REQUEST_VPN = 8888;
- private final static int REQUEST_SETTINGS = 0x9874;
- private final static int REQUEST_VPN_APPS_SELECT = 8889;
-
- private final static int LOG_DRAWER_GRAVITY = Gravity.END;
-
- // message types for mStatusUpdateHandler
- private final static int STATUS_UPDATE = 1;
- private static final int MESSAGE_TRAFFIC_COUNT = 2;
- private static final int MESSAGE_PORTS = 3;
-
-
private RecyclerView rv;
+ // this is what takes messages or values from the callback threads or other non-mainUI threads
+//and passes them back into the main UI thread for display to the user
+ private Handler mStatusUpdateHandler = new Handler() {
- ArrayList<String> pkgIds = new ArrayList<>();
-
- /**
- * Called when the activity is first created.
- */
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mPrefs = Prefs.getSharedPrefs(getApplicationContext());
-
- /* Create the widgets before registering for broadcasts to guarantee
- * that the widgets exist when the status updates try to update them */
- doLayout();
-
- /* receive the internal status broadcasts, which are separate from the public
- * status broadcasts to prevent other apps from sending fake/wrong status
- * info to this app */
- LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
- lbm.registerReceiver(mLocalBroadcastReceiver,
- new IntentFilter(TorServiceConstants.ACTION_STATUS));
- lbm.registerReceiver(mLocalBroadcastReceiver,
- new IntentFilter(TorServiceConstants.LOCAL_ACTION_BANDWIDTH));
- lbm.registerReceiver(mLocalBroadcastReceiver,
- new IntentFilter(TorServiceConstants.LOCAL_ACTION_LOG));
- lbm.registerReceiver(mLocalBroadcastReceiver,
- new IntentFilter(TorServiceConstants.LOCAL_ACTION_PORTS));
-
+ @Override
+ public void handleMessage(final Message msg) {
- boolean showFirstTime = mPrefs.getBoolean("connect_first_time", true);
+ Bundle data = msg.getData();
- if (showFirstTime)
- {
- Editor pEdit = mPrefs.edit();
- pEdit.putBoolean("connect_first_time", false);
- pEdit.commit();
- startActivity(new Intent(this,OnboardingActivity.class));
- }
+ switch (msg.what) {
+ case MESSAGE_TRAFFIC_COUNT:
- /**
- * Resets previous DNS Port to the default
- */
- mPrefs.edit().putInt(VpnPrefs.PREFS_DNS_PORT,
- TorServiceConstants.TOR_DNS_PORT_DEFAULT).apply();
+ DataCount datacount = new DataCount(data.getLong("upload"), data.getLong("download"));
- }
+ long totalRead = data.getLong("readTotal");
+ long totalWrite = data.getLong("writeTotal");
- private void sendIntentToService(final String action) {
+// downloadText.setText(formatCount(datacount.Download) + " / " + formatTotal(totalRead));
+ // uploadText.setText(formatCount(datacount.Upload) + " / " + formatTotal(totalWrite));
- Intent intent = new Intent(MiniMainActivity.this, OrbotService.class);
- intent.setAction(action);
- startService(intent);
+ downloadText.setText(formatTotal(totalRead) + " \u2193");
+ uploadText.setText(formatTotal(totalWrite) + " \u2191");
- }
+ break;
+ case MESSAGE_PORTS:
- private void stopTor() {
+ int socksPort = data.getInt("socks");
+ int httpPort = data.getInt("http");
- Intent intent = new Intent(MiniMainActivity.this, OrbotService.class);
- stopService(intent);
+ break;
+ default:
+ String newTorStatus = msg.getData().getString("status");
+ String log = (String) msg.obj;
- }
+ if (torStatus == null && newTorStatus != null) //first time status
+ {
+ updateStatus(log, newTorStatus);
+ } else
+ updateStatus(log, newTorStatus);
+ super.handleMessage(msg);
+ break;
+ }
+ }
+ };
/**
* The state and log info from {@link OrbotService} are sent to the UI here in
* the form of a local broadcast. Regular broadcasts can be sent by any app,
@@ -212,61 +188,171 @@ public class MiniMainActivity extends AppCompatActivity
} else if (action.equals(TorServiceConstants.ACTION_STATUS)) {
lastStatusIntent = intent;
-
+
Message msg = mStatusUpdateHandler.obtainMessage(STATUS_UPDATE);
msg.getData().putString("status", intent.getStringExtra(TorServiceConstants.EXTRA_STATUS));
mStatusUpdateHandler.sendMessage(msg);
- }
- else if (action.equals(TorServiceConstants.LOCAL_ACTION_PORTS)) {
+ } else if (action.equals(TorServiceConstants.LOCAL_ACTION_PORTS)) {
Message msg = mStatusUpdateHandler.obtainMessage(MESSAGE_PORTS);
- msg.getData().putInt("socks",intent.getIntExtra(OrbotService.EXTRA_SOCKS_PROXY_PORT,-1));
- msg.getData().putInt("http",intent.getIntExtra(OrbotService.EXTRA_HTTP_PROXY_PORT,-1));
+ msg.getData().putInt("socks", intent.getIntExtra(OrbotService.EXTRA_SOCKS_PROXY_PORT, -1));
+ msg.getData().putInt("http", intent.getIntExtra(OrbotService.EXTRA_HTTP_PROXY_PORT, -1));
mStatusUpdateHandler.sendMessage(msg);
}
}
};
-
- private void doLayout ()
- {
+
+ private static String readFromAssets(Context context, String filename) throws IOException {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(context.getAssets().open(filename)));
+
+ // do reading, usually loop until end of file reading
+ StringBuilder sb = new StringBuilder();
+ String mLine = reader.readLine();
+ while (mLine != null) {
+ sb.append(mLine + '\n'); // process line
+ mLine = reader.readLine();
+ }
+ reader.close();
+ return sb.toString();
+ }
+
+ public static TorifiedApp getApp(Context context, ApplicationInfo aInfo) {
+ TorifiedApp app = new TorifiedApp();
+
+ PackageManager pMgr = context.getPackageManager();
+
+
+ try {
+ app.setName(pMgr.getApplicationLabel(aInfo).toString());
+ } catch (Exception e) {
+ return null;
+ }
+
+
+ app.setEnabled(aInfo.enabled);
+ app.setUid(aInfo.uid);
+ app.setUsername(pMgr.getNameForUid(app.getUid()));
+ app.setProcname(aInfo.processName);
+ app.setPackageName(aInfo.packageName);
+
+ app.setTorified(true);
+
+ try {
+ app.setIcon(pMgr.getApplicationIcon(app.getPackageName()));
+
+
+ } catch (NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ return app;
+ }
+
+ public static Bitmap drawableToBitmap(Drawable drawable) {
+ Bitmap bitmap = null;
+
+ if (drawable instanceof BitmapDrawable) {
+ BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
+ if (bitmapDrawable.getBitmap() != null) {
+ return bitmapDrawable.getBitmap();
+ }
+ }
+
+ if (drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
+ bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
+ } else {
+ bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+ }
+
+ Canvas canvas = new Canvas(bitmap);
+ drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+ drawable.draw(canvas);
+ return bitmap;
+ }
+
+ /**
+ * Called when the activity is first created.
+ */
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ mPrefs = Prefs.getSharedPrefs(getApplicationContext());
+
+ /* Create the widgets before registering for broadcasts to guarantee
+ * that the widgets exist when the status updates try to update them */
+ doLayout();
+
+ /* receive the internal status broadcasts, which are separate from the public
+ * status broadcasts to prevent other apps from sending fake/wrong status
+ * info to this app */
+ LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
+ lbm.registerReceiver(mLocalBroadcastReceiver,
+ new IntentFilter(TorServiceConstants.ACTION_STATUS));
+ lbm.registerReceiver(mLocalBroadcastReceiver,
+ new IntentFilter(TorServiceConstants.LOCAL_ACTION_BANDWIDTH));
+ lbm.registerReceiver(mLocalBroadcastReceiver,
+ new IntentFilter(TorServiceConstants.LOCAL_ACTION_LOG));
+ lbm.registerReceiver(mLocalBroadcastReceiver,
+ new IntentFilter(TorServiceConstants.LOCAL_ACTION_PORTS));
+
+
+ boolean showFirstTime = mPrefs.getBoolean("connect_first_time", true);
+
+ if (showFirstTime) {
+ Editor pEdit = mPrefs.edit();
+ pEdit.putBoolean("connect_first_time", false);
+ pEdit.commit();
+ startActivity(new Intent(this, OnboardingActivity.class));
+ }
+
+ /**
+ * Resets previous DNS Port to the default
+ */
+ mPrefs.edit().putInt(VpnPrefs.PREFS_DNS_PORT, TorServiceConstants.TOR_DNS_PORT_DEFAULT).apply();
+
+ }
+
+ private void sendIntentToService(final String action) {
+
+ Intent intent = new Intent(MiniMainActivity.this, OrbotService.class);
+ intent.setAction(action);
+ startService(intent);
+
+ }
+
+ private void stopTor() {
+
+ Intent intent = new Intent(MiniMainActivity.this, OrbotService.class);
+ stopService(intent);
+
+ }
+
+ private void doLayout() {
setContentView(R.layout.layout_main);
-
+
setTitle(R.string.app_name);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
-
- mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
- mTxtOrbotLog = (TextView)findViewById(R.id.orbotLog);
+ mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
- /**
- lblStatus = (TextView)findViewById(R.id.lblStatus);
- lblStatus.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- mDrawer.openDrawer(LOG_DRAWER_GRAVITY);
- }
- });**/
+ mTxtOrbotLog = (TextView) findViewById(R.id.orbotLog);
- imgStatus = (ImageView)findViewById(R.id.imgStatus);
+ imgStatus = (ImageView) findViewById(R.id.imgStatus);
imgStatus.setOnLongClickListener(this);
- downloadText = (TextView)findViewById(R.id.trafficDown);
- uploadText = (TextView)findViewById(R.id.trafficUp);
+ downloadText = (TextView) findViewById(R.id.trafficDown);
+ uploadText = (TextView) findViewById(R.id.trafficUp);
- // downloadText.setText(formatCount(0) + " / " + formatTotal(0)+ " \u2193");
- // uploadText.setText(formatCount(0) + " / " + formatTotal(0)+ " \u2191");
-
- downloadText.setText(formatTotal(0) +" \u2193");
+ downloadText.setText(formatTotal(0) + " \u2193");
uploadText.setText(formatTotal(0) + " \u2191");
- mBtnVPN = (SwitchCompat)findViewById(R.id.btnVPN);
-
+ mBtnVPN = (SwitchCompat) findViewById(R.id.btnVPN);
+
boolean useVPN = Prefs.useVpn();
mBtnVPN.setChecked(useVPN);
@@ -287,26 +373,17 @@ public class MiniMainActivity extends AppCompatActivity
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
rv.setLayoutManager(llm);
-
- /**
- findViewById(R.id.btnAdd).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivityForResult(new Intent(MiniMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
- }
- });**/
}
-
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(LocaleHelper.onAttach(base));
}
- /*
- * Create the UI Options Menu (non-Javadoc)
- * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
- */
+ /*
+ * Create the UI Options Menu (non-Javadoc)
+ * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
+ */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
@@ -314,111 +391,52 @@ public class MiniMainActivity extends AppCompatActivity
inflater.inflate(R.menu.orbot_main, menu);
return true;
}
-
-
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
+ public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == R.id.menu_newnym)
- {
+ if (item.getItemId() == R.id.menu_newnym) {
requestNewTorIdentity();
+ } else if (item.getItemId() == R.id.menu_settings) {
+ Intent intent = SettingsPreferencesActivity.createIntent(this, R.xml.preferences);
+ startActivityForResult(intent, REQUEST_SETTINGS);
}
- else if (item.getItemId() == R.id.menu_settings)
- {
- Intent intent = new Intent(MiniMainActivity.this, SettingsPreferences.class);
- startActivityForResult(intent, REQUEST_SETTINGS);
- }
- /**
- else if (item.getItemId() == R.id.menu_exit)
- {
- //exit app
- doExit();
-
- }**/
- else if (item.getItemId() == R.id.menu_about)
- {
- showAbout();
-
-
- }
- /**
- else if (item.getItemId() == R.id.menu_scan)
- {
- IntentIntegrator integrator = new IntentIntegrator(MiniMainActivity.this);
- integrator.initiateScan();
- }
- else if (item.getItemId() == R.id.menu_share_bridge)
- {
-
- String bridges = Prefs.getBridgesList();
-
- if (bridges != null && bridges.length() > 0)
- {
- try {
- bridges = "bridge://" + URLEncoder.encode(bridges,"UTF-8");
-
- IntentIntegrator integrator = new IntentIntegrator(MiniMainActivity.this);
- integrator.shareText(bridges);
-
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- }**/
-
- return super.onOptionsItemSelected(item);
- }
-
- private void showAbout ()
- {
-
- LayoutInflater li = LayoutInflater.from(this);
- View view = li.inflate(R.layout.layout_about, null);
-
- String version = "";
-
- try {
- version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName + " (Tor " + OrbotService.BINARY_TOR_VERSION + ")";
- } catch (NameNotFoundException e) {
- version = "Version Not Found";
- }
-
- TextView versionName = (TextView)view.findViewById(R.id.versionName);
- versionName.setText(version);
+ else if (item.getItemId() == R.id.menu_about) {
+ showAbout();
+ }
+ return super.onOptionsItemSelected(item);
+ }
- TextView aboutOther = (TextView)view.findViewById(R.id.aboutother);
+ private void showAbout() {
- try
- {
- String aboutText = readFromAssets(this,"LICENSE");
- aboutText = aboutText.replace("\n","<br/>");
- aboutOther.setText(Html.fromHtml(aboutText));
- }
- catch (Exception e){}
-
- new AlertDialog.Builder(this)
- .setTitle(getString(R.string.button_about))
- .setView(view)
- .show();
+ LayoutInflater li = LayoutInflater.from(this);
+ View view = li.inflate(R.layout.layout_about, null);
+
+ String version = "";
+
+ try {
+ version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName + " (Tor " + OrbotService.BINARY_TOR_VERSION + ")";
+ } catch (NameNotFoundException e) {
+ version = "Version Not Found";
}
- private static String readFromAssets(Context context, String filename) throws IOException {
- BufferedReader reader = new BufferedReader(new InputStreamReader(context.getAssets().open(filename)));
+ TextView versionName = (TextView) view.findViewById(R.id.versionName);
+ versionName.setText(version);
- // do reading, usually loop until end of file reading
- StringBuilder sb = new StringBuilder();
- String mLine = reader.readLine();
- while (mLine != null) {
- sb.append(mLine + '\n'); // process line
- mLine = reader.readLine();
+ TextView aboutOther = (TextView) view.findViewById(R.id.aboutother);
+
+ try {
+ String aboutText = readFromAssets(this, "LICENSE");
+ aboutText = aboutText.replace("\n", "<br/>");
+ aboutOther.setText(Html.fromHtml(aboutText));
+ } catch (Exception e) {
}
- reader.close();
- return sb.toString();
- }
+ new AlertDialog.Builder(this)
+ .setTitle(getString(R.string.button_about))
+ .setView(view)
+ .show();
+ }
/**
* This is our attempt to REALLY exit Orbot, and stop the background service
@@ -434,43 +452,36 @@ public class MiniMainActivity extends AppCompatActivity
finish();
}
- protected void onPause() {
- try
- {
- super.onPause();
-
- if (aDialog != null)
- aDialog.dismiss();
- }
- catch (IllegalStateException ise)
- {
- //can happen on exit/shutdown
- }
- }
+ protected void onPause() {
+ try {
+ super.onPause();
+ if (aDialog != null)
+ aDialog.dismiss();
+ } catch (IllegalStateException ise) {
+ //can happen on exit/shutdown
+ }
+ }
@Override
public void onBackPressed() {
// check to see if the log is open, if so close it
if (mDrawer.isDrawerOpen(LOG_DRAWER_GRAVITY)) {
mDrawer.closeDrawers();
- }
- else {
+ } else {
super.onBackPressed();
}
}
- private void refreshVPNApps() {
+ private void refreshVPNApps() {
sendIntentToService(TorServiceConstants.ACTION_STOP_VPN);
sendIntentToService(TorServiceConstants.ACTION_START_VPN);
}
- private void enableVPN (boolean enable)
- {
+ private void enableVPN(boolean enable) {
if (enable && pkgIds.size() == 0) {
showAppPicker();
- }
- else {
+ } else {
Prefs.putUseVpn(enable);
Prefs.putStartOnBoot(enable);
@@ -491,7 +502,6 @@ public class MiniMainActivity extends AppCompatActivity
}
}
-
private synchronized void handleIntents() {
if (getIntent() == null)
return;
@@ -510,9 +520,7 @@ public class MiniMainActivity extends AppCompatActivity
if (urlString != null) {
- if (urlString.toLowerCase().startsWith("bridge://"))
-
- {
+ if (urlString.toLowerCase().startsWith("bridge://")) {
String newBridgeValue = urlString.substring(9); //remove the bridge protocol piece
newBridgeValue = URLDecoder.decode(newBridgeValue); //decode the value here
@@ -542,58 +550,53 @@ public class MiniMainActivity extends AppCompatActivity
enableBridges(true);
}
- /*
- * Launch the system activity for Uri viewing with the provided url
- */
- private void openBrowser(final String browserLaunchUrl,boolean forceExternal, String pkgId) {
- if (pkgId != null) {
- startIntent(pkgId,Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));
+ /*
+ * Launch the system activity for Uri viewing with the provided url
+ */
+ private void openBrowser(final String browserLaunchUrl, boolean forceExternal, String pkgId) {
+ if (pkgId != null) {
+ startIntent(pkgId, Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
+ } else if (mBtnVPN.isChecked() || forceExternal) {
+ //use the system browser since VPN is on
+ startIntent(null, Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
}
- else if (mBtnVPN.isChecked()||forceExternal) {
- //use the system browser since VPN is on
- startIntent(null,Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
- }
- }
-
- private void startIntent (String pkg, String action, Uri data)
- {
+ }
+
+ private void startIntent(String pkg, String action, Uri data) {
Intent i;
- PackageManager pm = getPackageManager();
+ PackageManager pm = getPackageManager();
try {
- if (pkg != null) {
- i = pm.getLaunchIntentForPackage(pkg);
- if (i == null)
- throw new PackageManager.NameNotFoundException();
- }
- else
- {
- i = new Intent();
- }
+ if (pkg != null) {
+ i = pm.getLaunchIntentForPackage(pkg);
+ if (i == null)
+ throw new PackageManager.NameNotFoundException();
+ } else {
+ i = new Intent();
+ }
i.setAction(action);
i.setData(data);
- if (i.resolveActivity(pm)!=null)
- startActivity(i);
+ if (i.resolveActivity(pm) != null)
+ startActivity(i);
} catch (PackageManager.NameNotFoundException e) {
}
}
-
+
@Override
protected void onActivityResult(int request, int response, Intent data) {
super.onActivityResult(request, response, data);
- if (request == REQUEST_SETTINGS && response == RESULT_OK)
- {
+ if (request == REQUEST_SETTINGS && response == RESULT_OK) {
if (data != null && (!TextUtils.isEmpty(data.getStringExtra("locale")))) {
String newLocale = data.getStringExtra("locale");
Prefs.setDefaultLocale(newLocale);
Languages.setLanguage(this, newLocale, true);
- // Language.setFromPreference(this, "pref_default_locale");
+ // Language.setFromPreference(this, "pref_default_locale");
finish();
@@ -609,8 +612,7 @@ public class MiniMainActivity extends AppCompatActivity
}
- } else if (request == REQUEST_VPN_APPS_SELECT)
- {
+ } else if (request == REQUEST_VPN_APPS_SELECT) {
if (response == RESULT_OK &&
torStatus == TorServiceConstants.STATUS_ON) {
refreshVPNApps();
@@ -625,104 +627,78 @@ public class MiniMainActivity extends AppCompatActivity
Prefs.putUseVpn(false);
}
-
+
IntentResult scanResult = IntentIntegrator.parseActivityResult(request, response, data);
if (scanResult != null) {
- // handle scan result
-
- String results = scanResult.getContents();
-
- if (results != null && results.length() > 0)
- {
- try {
-
- int urlIdx = results.indexOf("://");
-
- if (urlIdx!=-1)
- {
- results = URLDecoder.decode(results, "UTF-8");
- results = results.substring(urlIdx+3);
-
- showAlert(getString(R.string.bridges_updated),getString(R.string.restart_orbot_to_use_this_bridge_) + results,false);
-
- setNewBridges(results);
- }
- else
- {
- JSONArray bridgeJson = new JSONArray(results);
- StringBuffer bridgeLines = new StringBuffer();
-
- for (int i = 0; i < bridgeJson.length(); i++)
- {
- String bridgeLine = bridgeJson.getString(i);
- bridgeLines.append(bridgeLine).append("\n");
- }
-
- setNewBridges(bridgeLines.toString());
- }
-
-
- } catch (Exception e) {
- Log.e(TAG,"unsupported",e);
- }
- }
-
- }
-
- }
+ // handle scan result
- /**
- public void promptSetupBridges ()
- {
+ String results = scanResult.getContents();
+
+ if (results != null && results.length() > 0) {
+ try {
+
+ int urlIdx = results.indexOf("://");
+
+ if (urlIdx != -1) {
+ results = URLDecoder.decode(results, "UTF-8");
+ results = results.substring(urlIdx + 3);
+
+ showAlert(getString(R.string.bridges_updated), getString(R.string.restart_orbot_to_use_this_bridge_) + results, false);
+
+ setNewBridges(results);
+ } else {
+ JSONArray bridgeJson = new JSONArray(results);
+ StringBuffer bridgeLines = new StringBuffer();
+
+ for (int i = 0; i < bridgeJson.length(); i++) {
+ String bridgeLine = bridgeJson.getString(i);
+ bridgeLines.append(bridgeLine).append("\n");
+ }
+
+ setNewBridges(bridgeLines.toString());
+ }
+
+
+ } catch (Exception e) {
+ Log.e(TAG, "unsupported", e);
+ }
+ }
- if (mBtnBridges.isChecked())
- {
- Prefs.putBridgesEnabled(true);
- startActivity(new Intent(this, BridgeWizardActivity.class));
}
- else
- {
- enableBridges(false);
+
+ }
+
+ private void enableBridges(boolean enable) {
+ Prefs.putBridgesEnabled(enable);
+
+ if (torStatus == TorServiceConstants.STATUS_ON) {
+ String bridgeList = Prefs.getBridgesList();
+ if (bridgeList != null && bridgeList.length() > 0) {
+ requestTorRereadConfig();
+ }
}
-
- }**/
-
-
- private void enableBridges (boolean enable)
- {
- Prefs.putBridgesEnabled(enable);
-
- if (torStatus == TorServiceConstants.STATUS_ON)
- {
- String bridgeList = Prefs.getBridgesList();
- if (bridgeList != null && bridgeList.length() > 0)
- {
- requestTorRereadConfig ();
- }
- }
}
private void requestTorRereadConfig() {
sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
}
-
@Override
protected void onResume() {
super.onResume();
- if (mBtnVPN.isChecked()!=Prefs.useVpn())
+ if (mBtnVPN.isChecked() != Prefs.useVpn())
mBtnVPN.setChecked(Prefs.useVpn());
- requestTorStatus();
+ requestTorStatus();
- if (torStatus == null)
- updateStatus("", TorServiceConstants.STATUS_STOPPING);
+ if (torStatus == null)
+ updateStatus("", TorServiceConstants.STATUS_STOPPING);
else
updateStatus(null, torStatus);
- //now you can handle the intents properly
- handleIntents();
+ //now you can handle the intents properly
+ handleIntents();
pkgIds.clear();
String tordAppString = mPrefs.getString(PREFS_KEY_TORIFIED, "");
@@ -735,40 +711,33 @@ public class MiniMainActivity extends AppCompatActivity
}
- AlertDialog aDialog = null;
-
//general alert dialog for mostly Tor warning messages
//sometimes this can go haywire or crazy with too many error
//messages from Tor, and the user cannot stop or exit Orbot
//so need to ensure repeated error messages are not spamming this method
- private void showAlert(String title, String msg, boolean button)
- {
- try
- {
- if (aDialog != null && aDialog.isShowing())
- aDialog.dismiss();
- }
- catch (Exception e){} //swallow any errors
-
- if (button)
- {
- aDialog = new AlertDialog.Builder(MiniMainActivity.this)
- .setIcon(R.drawable.onion32)
- .setTitle(title)
- .setMessage(msg)
- .setPositiveButton(R.string.btn_okay, null)
- .show();
- }
- else
- {
- aDialog = new AlertDialog.Builder(MiniMainActivity.this)
- .setIcon(R.drawable.onion32)
- .setTitle(title)
- .setMessage(msg)
- .show();
- }
-
- aDialog.setCanceledOnTouchOutside(true);
+ private void showAlert(String title, String msg, boolean button) {
+ try {
+ if (aDialog != null && aDialog.isShowing())
+ aDialog.dismiss();
+ } catch (Exception e) {
+ } //swallow any errors
+
+ if (button) {
+ aDialog = new AlertDialog.Builder(MiniMainActivity.this)
+ .setIcon(R.drawable.onion32)
+ .setTitle(title)
+ .setMessage(msg)
+ .setPositiveButton(R.string.btn_okay, null)
+ .show();
+ } else {
+ aDialog = new AlertDialog.Builder(MiniMainActivity.this)
+ .setIcon(R.drawable.onion32)
+ .setTitle(title)
+ .setMessage(msg)
+ .show();
+ }
+
+ aDialog.setCanceledOnTouchOutside(true);
}
/**
@@ -777,10 +746,9 @@ public class MiniMainActivity extends AppCompatActivity
*/
private void updateStatus(String torServiceMsg, String newTorStatus) {
- if (!TextUtils.isEmpty(torServiceMsg))
- {
+ if (!TextUtils.isEmpty(torServiceMsg)) {
if (torServiceMsg.contains(TorServiceConstants.LOG_NOTICE_HEADER)) {
- // lblStatus.setText(torServiceMsg);
+ // lblStatus.setText(torServiceMsg);
}
mTxtOrbotLog.append(torServiceMsg + '\n');
@@ -790,18 +758,16 @@ public class MiniMainActivity extends AppCompatActivity
if (torStatus == null || (newTorStatus != null && newTorStatus.equals(torStatus))) {
torStatus = newTorStatus;
return;
- }
- else
- torStatus = newTorStatus;
+ } else
+ torStatus = newTorStatus;
if (torStatus == TorServiceConstants.STATUS_ON) {
-
+
imgStatus.setImageResource(R.drawable.toron);
//lblStatus.setText(getString(R.string.status_activated));
- if (autoStartFromIntent)
- {
+ if (autoStartFromIntent) {
autoStartFromIntent = false;
Intent resultIntent = lastStatusIntent;
@@ -810,7 +776,7 @@ public class MiniMainActivity extends AppCompatActivity
resultIntent.putExtra(
TorServiceConstants.EXTRA_STATUS,
- torStatus == null?TorServiceConstants.STATUS_OFF:torStatus
+ torStatus == null ? TorServiceConstants.STATUS_OFF : torStatus
);
setResult(RESULT_OK, resultIntent);
@@ -818,35 +784,33 @@ public class MiniMainActivity extends AppCompatActivity
finish();
Log.d(TAG, "autoStartFromIntent finish");
}
-
-
+
} else if (torStatus == TorServiceConstants.STATUS_STARTING) {
imgStatus.setImageResource(R.drawable.torstarting);
- if (torServiceMsg != null)
- {
- if (torServiceMsg.contains(TorServiceConstants.LOG_NOTICE_BOOTSTRAPPED)) {
+ if (torServiceMsg != null) {
+ if (torServiceMsg.contains(TorServiceConstants.LOG_NOTICE_BOOTSTRAPPED)) {
// lblStatus.setText(torServiceMsg);
}
}
- // else
- // lblStatus.setText(getString(R.string.status_starting_up));
+ // else
+ // lblStatus.setText(getString(R.string.status_starting_up));
} else if (torStatus == TorServiceConstants.STATUS_STOPPING) {
- // if (torServiceMsg != null && torServiceMsg.contains(TorServiceConstants.LOG_NOTICE_HEADER))
- // lblStatus.setText(torServiceMsg);
-
+ // if (torServiceMsg != null && torServiceMsg.contains(TorServiceConstants.LOG_NOTICE_HEADER))
+ // lblStatus.setText(torServiceMsg);
+
imgStatus.setImageResource(R.drawable.torstarting);
// lblStatus.setText(torServiceMsg);
} else if (torStatus == TorServiceConstants.STATUS_OFF) {
imgStatus.setImageResource(R.drawable.toroff);
- // lblStatus.setText("Tor v" + OrbotService.BINARY_TOR_VERSION);
+ // lblStatus.setText("Tor v" + OrbotService.BINARY_TOR_VERSION);
}
@@ -863,7 +827,7 @@ public class MiniMainActivity extends AppCompatActivity
sendIntentToService(TorServiceConstants.ACTION_START);
mTxtOrbotLog.setText("");
}
-
+
/**
* Request tor status without starting it
* {@link TorServiceConstants#ACTION_START} {@link Intent} to
@@ -873,16 +837,6 @@ public class MiniMainActivity extends AppCompatActivity
sendIntentToService(TorServiceConstants.ACTION_STATUS);
}
- private boolean isTorServiceRunning() {
- ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
- for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
- if (OrbotService.class.getName().equals(service.service.getClassName())) {
- return true;
- }
- }
- return false;
- }
-
public boolean onLongClick(View view) {
if (torStatus == TorServiceConstants.STATUS_OFF) {
@@ -890,92 +844,18 @@ public class MiniMainActivity extends AppCompatActivity
} else {
stopTor();
}
-
- return true;
-
- }
-
-// this is what takes messages or values from the callback threads or other non-mainUI threads
-//and passes them back into the main UI thread for display to the user
- private Handler mStatusUpdateHandler = new Handler() {
-
- @Override
- public void handleMessage(final Message msg) {
-
-
- Bundle data = msg.getData();
-
- switch (msg.what) {
- case MESSAGE_TRAFFIC_COUNT:
-
- DataCount datacount = new DataCount(data.getLong("upload"),data.getLong("download"));
-
- long totalRead = data.getLong("readTotal");
- long totalWrite = data.getLong("writeTotal");
-
-// downloadText.setText(formatCount(datacount.Download) + " / " + formatTotal(totalRead));
- // uploadText.setText(formatCount(datacount.Upload) + " / " + formatTotal(totalWrite));
-
- downloadText.setText(formatTotal(totalRead) +" \u2193");
- uploadText.setText(formatTotal(totalWrite) + " \u2191");
-
- break;
- case MESSAGE_PORTS:
-
- int socksPort = data.getInt("socks");
- int httpPort = data.getInt("http");
-
- break;
- default:
- String newTorStatus = msg.getData().getString("status");
- String log = (String)msg.obj;
- if (torStatus == null && newTorStatus != null) //first time status
- {
- updateStatus(log, newTorStatus);
+ return true;
- }
- else
- updateStatus(log, newTorStatus);
- super.handleMessage(msg);
- break;
- }
- }
- };
+ }
@Override
protected void onDestroy() {
super.onDestroy();
- LocalBroadcastManager.getInstance(this).unregisterReceiver(mLocalBroadcastReceiver);
+ LocalBroadcastManager.getInstance(this).unregisterReceiver(mLocalBroadcastReceiver);
}
- public class DataCount {
- // data uploaded
- public long Upload;
- // data downloaded
- public long Download;
-
- DataCount(long Upload, long Download){
- this.Upload = Upload;
- this.Download = Download;
- }
- }
-
- private String formatCount(long count) {
- NumberFormat numberFormat = NumberFormat.getInstance(Locale.getDefault());
- // Converts the supplied argument into a string.
- // Under 2Mb, returns "xxx.xKb"
- // Over 2Mb, returns "xxx.xxMb"
- if (count < 1e6)
- return numberFormat.format(Math.round(((float) ((int) (count * 10 / 1024)) / 10)))
- + getString(R.string.kbps);
- else
- return numberFormat.format(Math
- .round(((float) ((int) (count * 100 / 1024 / 1024)) / 100)))
- + getString(R.string.mbps);
- }
-
private String formatTotal(long count) {
NumberFormat numberFormat = NumberFormat.getInstance(Locale.getDefault());
// Converts the supplied argument into a string.
@@ -983,57 +863,59 @@ public class MiniMainActivity extends AppCompatActivity
// Over 2Mb, returns "xxx.xxMb"
if (count < 1e6)
return numberFormat.format(Math.round(
- (int)(((float)count)) * 10f / 1024f / 10f)
- )
+ (int) (((float) count)) * 10f / 1024f / 10f)
+ )
+ getString(R.string.kb);
else
return numberFormat.format(Math
.round(
- ((float)count)) * 100f / 1024f / 1024f / 100f
- )
+ ((float) count)) * 100f / 1024f / 1024f / 100f
+ )
+ getString(R.string.mb);
}
- private static final float ROTATE_FROM = 0.0f;
- private static final float ROTATE_TO = 360.0f*4f;// 3.141592654f * 32.0f;
+ private void requestNewTorIdentity() {
+ sendIntentToService(TorServiceConstants.CMD_NEWNYM);
- private void requestNewTorIdentity ()
- {
- sendIntentToService (TorServiceConstants.CMD_NEWNYM);
-
- Rotate3dAnimation rotation = new Rotate3dAnimation(ROTATE_FROM, ROTATE_TO, imgStatus.getWidth()/2f,imgStatus.getWidth()/2f,20f,false);
+ Rotate3dAnimation rotation = new Rotate3dAnimation(ROTATE_FROM, ROTATE_TO, imgStatus.getWidth() / 2f, imgStatus.getWidth() / 2f, 20f, false);
rotation.setFillAfter(true);
rotation.setInterpolator(new AccelerateInterpolator());
- rotation.setDuration((long) 2*1000);
+ rotation.setDuration((long) 2 * 1000);
rotation.setRepeatCount(0);
imgStatus.startAnimation(rotation);
// lblStatus.setText(getString(R.string.newnym));
}
+ public void showAppPicker() {
+ startActivityForResult(new Intent(MiniMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
- public class RVAdapter extends RecyclerView.Adapter<RVAdapter.AppViewHolder>{
-
-
- public class AppViewHolder extends RecyclerView.ViewHolder {
+ }
- ImageView iv;
- TextView tv;
- View parent;
+ public void showAppConfig(String pkgId) {
+ Intent data = new Intent(this, AppConfigActivity.class);
+ data.putExtra(Intent.EXTRA_PACKAGE_NAME, pkgId);
+ startActivityForResult(data, REQUEST_VPN_APPS_SELECT);
+ }
- AppViewHolder(View itemView) {
- super(itemView);
- parent = itemView;
- iv = itemView.findViewById(R.id.itemicon);
- tv = itemView.findViewById(R.id.itemtext);
+ public class DataCount {
+ // data uploaded
+ public long Upload;
+ // data downloaded
+ public long Download;
+
+ DataCount(long Upload, long Download) {
+ this.Upload = Upload;
+ this.Download = Download;
+ }
+ }
- }
+ public class RVAdapter extends RecyclerView.Adapter<RVAdapter.AppViewHolder> {
- }
@Override
public int getItemCount() {
- return pkgIds.size()+1;
+ return pkgIds.size() + 1;
}
@Override
@@ -1043,7 +925,6 @@ public class MiniMainActivity extends AppCompatActivity
final AppViewHolder avh = new AppViewHolder(v);
-
return avh;
}
@@ -1051,10 +932,10 @@ public class MiniMainActivity extends AppCompatActivity
public void onBindViewHolder(final AppViewHolder avh, int i) {
- if (i < getItemCount()-1) {
+ if (i < getItemCount() - 1) {
final String pkgId = pkgIds.get(i);
- ApplicationInfo aInfo = null;
+ ApplicationInfo aInfo;
try {
aInfo = getPackageManager().getApplicationInfo(pkgId, 0);
TorifiedApp app = getApp(MiniMainActivity.this, aInfo);
@@ -1085,9 +966,7 @@ public class MiniMainActivity extends AppCompatActivity
} catch (NameNotFoundException e) {
e.printStackTrace();
}
- }
- else
- {
+ } else {
avh.iv.setVisibility(View.INVISIBLE);
avh.tv.setText("+ ADD APP");
avh.parent.setOnClickListener(new View.OnClickListener() {
@@ -1101,80 +980,20 @@ public class MiniMainActivity extends AppCompatActivity
}
}
+ public class AppViewHolder extends RecyclerView.ViewHolder {
- }
-
- public static TorifiedApp getApp (Context context, ApplicationInfo aInfo)
- {
- TorifiedApp app = new TorifiedApp();
-
- PackageManager pMgr = context.getPackageManager();
-
-
- try
- {
- app.setName(pMgr.getApplicationLabel(aInfo).toString());
- }
- catch (Exception e)
- {
- return null;
- }
-
-
- app.setEnabled(aInfo.enabled);
- app.setUid(aInfo.uid);
- app.setUsername(pMgr.getNameForUid(app.getUid()));
- app.setProcname(aInfo.processName);
- app.setPackageName(aInfo.packageName);
-
- app.setTorified(true);
-
- try {
- app.setIcon(pMgr.getApplicationIcon(app.getPackageName()));
-
-
- } catch (NameNotFoundException e) {
- e.printStackTrace();
- }
- return app;
- }
-
-
- public void showAppPicker ()
- {
- startActivityForResult(new Intent(MiniMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
-
- }
-
- public void showAppConfig (String pkgId)
- {
- Intent data = new Intent(this, AppConfigActivity.class);
- data.putExtra(Intent.EXTRA_PACKAGE_NAME,pkgId);
- startActivityForResult(data,REQUEST_VPN_APPS_SELECT);
- }
-
+ ImageView iv;
+ TextView tv;
+ View parent;
- public static Bitmap drawableToBitmap (Drawable drawable) {
- Bitmap bitmap = null;
+ AppViewHolder(View itemView) {
+ super(itemView);
+ parent = itemView;
+ iv = itemView.findViewById(R.id.itemicon);
+ tv = itemView.findViewById(R.id.itemtext);
- if (drawable instanceof BitmapDrawable) {
- BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
- if(bitmapDrawable.getBitmap() != null) {
- return bitmapDrawable.getBitmap();
}
- }
- if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
- bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
- } else {
- bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
}
-
- Canvas canvas = new Canvas(bitmap);
- drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
- drawable.draw(canvas);
- return bitmap;
}
-
-
}
diff --git a/app-mini/src/main/java/org/torproject/android/mini/OnBootReceiver.java b/app-mini/src/main/java/org/torproject/android/mini/OnBootReceiver.java
deleted file mode 100644
index c958df8b..00000000
--- a/app-mini/src/main/java/org/torproject/android/mini/OnBootReceiver.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.torproject.android.mini;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Build;
-
-import org.torproject.android.service.OrbotService;
-import org.torproject.android.service.TorServiceConstants;
-import org.torproject.android.service.util.Prefs;
-
-public class OnBootReceiver extends BroadcastReceiver {
-
- private static boolean sReceivedBoot = false;
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (Prefs.startOnBoot() && (!sReceivedBoot)) {
- startService(TorServiceConstants.ACTION_START_ON_BOOT, context);
- sReceivedBoot = true;
- }
- }
-
- private void startService (String action, Context context) {
- Intent intent = new Intent(context, OrbotService.class);
- intent.setAction(action);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- context.startForegroundService(intent);
- }
- else
- {
- context.startService(intent);
- }
-
- }
-
-
-}
-
diff --git a/app-mini/src/main/java/org/torproject/android/mini/OrbotMiniApp.java b/app-mini/src/main/java/org/torproject/android/mini/OrbotMiniApp.java
index 41bd0697..f0612cc5 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/OrbotMiniApp.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/OrbotMiniApp.java
@@ -1,32 +1,18 @@
-
package org.torproject.android.mini;
-import android.annotation.SuppressLint;
-import android.app.Activity;
import android.app.Application;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
import android.content.res.Configuration;
-import androidx.core.app.NotificationCompat;
-import com.github.javiersantos.appupdater.AppUpdater;
-import com.github.javiersantos.appupdater.enums.Display;
-import com.github.javiersantos.appupdater.enums.UpdateFrom;
-import org.torproject.android.mini.settings.Languages;
-import org.torproject.android.mini.settings.LocaleHelper;
+
+import org.torproject.android.core.Languages;
+import org.torproject.android.core.LocaleHelper;
import org.torproject.android.service.OrbotConstants;
import org.torproject.android.service.util.Prefs;
import java.util.Locale;
-
public class OrbotMiniApp extends Application implements OrbotConstants {
- private Locale locale;
-
@Override
public void onCreate() {
super.onCreate();
@@ -35,18 +21,12 @@ public class OrbotMiniApp extends Application implements OrbotConstants {
if (!Prefs.getDefaultLocale().equals(Locale.getDefault().getLanguage())) {
Languages.setLanguage(this, Prefs.getDefaultLocale(), true);
}
-
- //check for updates via github, since it is unlikely to be blocked; notify the user of places where upgrades can be found
- new AppUpdater(this)
- .setUpdateFrom(UpdateFrom.JSON)
- .setUpdateJSON("https://raw.githubusercontent.com/n8fr8/orbot/master/update.json")
- .setDisplay(Display.NOTIFICATION).start();
}
@Override
protected void attachBaseContext(Context base) {
Prefs.setContext(base);
- super.attachBaseContext(LocaleHelper.onAttach(base, Prefs.getDefaultLocale()));
+ super.attachBaseContext(LocaleHelper.onAttach(base));
}
@Override
@@ -56,53 +36,4 @@ public class OrbotMiniApp extends Application implements OrbotConstants {
if (!Prefs.getDefaultLocale().equals(Locale.getDefault().getLanguage()))
Languages.setLanguage(this, Prefs.getDefaultLocale(), true);
}
- /**
- public static void forceChangeLanguage(Activity activity) {
- Intent intent = activity.getIntent();
- if (intent == null) // when launched as LAUNCHER
- intent = new Intent(activity, OrbotMainActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
- activity.finish();
- activity.overridePendingTransition(0, 0);
- activity.startActivity(intent);
- activity.overridePendingTransition(0, 0);
- }**/
-
- public static Languages getLanguages(Activity activity) {
- return Languages.get(activity);
- }
-
-
- @SuppressLint("NewApi")
- protected void showToolbarNotification (String shortMsg, String notifyMsg, int notifyId, int icon)
- {
-
- NotificationCompat.Builder notifyBuilder;
-
- //Reusable code.
- PackageManager pm = getPackageManager();
- Intent intent = pm.getLaunchIntentForPackage(getPackageName());
- PendingIntent pendIntent = PendingIntent.getActivity(this, 0, intent, 0);
-
- NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-
- notifyBuilder = new NotificationCompat.Builder(this)
- .setContentTitle(getString(org.torproject.android.service.R.string.app_name));
-
-
- notifyBuilder.setContentIntent(pendIntent);
-
- notifyBuilder.setContentText(shortMsg);
- notifyBuilder.setSmallIcon(icon);
- notifyBuilder.setTicker(notifyMsg);
-
- notifyBuilder.setOngoing(false);
-
- notifyBuilder.setStyle(new NotificationCompat.BigTextStyle()
- .bigText(notifyMsg).setBigContentTitle(getString(org.torproject.android.service.R.string.app_name)));
-
- Notification notification = notifyBuilder.build();
-
- notificationManager.notify(notifyId, notification);
- }
-}
+}
\ No newline at end of file
diff --git a/app-mini/src/main/java/org/torproject/android/mini/settings/Languages.java b/app-mini/src/main/java/org/torproject/android/mini/settings/Languages.java
deleted file mode 100644
index 5fe04a62..00000000
--- a/app-mini/src/main/java/org/torproject/android/mini/settings/Languages.java
+++ /dev/null
@@ -1,228 +0,0 @@
-package org.torproject.android.mini.settings;
-
-import android.annotation.SuppressLint;
-import android.app.Activity;
-import android.content.ContextWrapper;
-import android.content.Intent;
-import android.content.res.AssetManager;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.os.Build;
-import android.text.TextUtils;
-import android.util.DisplayMetrics;
-
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-public class Languages {
- public static final String TAG = "Languages";
-
- public static final Locale defaultLocale;
- public static final Locale TIBETAN = new Locale("bo");
- static final Locale localesToTest[] = {
- Locale.ENGLISH, Locale.FRENCH, Locale.GERMAN,
- Locale.ITALIAN, Locale.JAPANESE, Locale.KOREAN,
- Locale.TRADITIONAL_CHINESE, Locale.SIMPLIFIED_CHINESE,
- TIBETAN, new Locale("af"), new Locale("am"),
- new Locale("ar"), new Locale("ay"), new Locale("az"), new Locale("bg"),
- new Locale("bn"), new Locale("ca"), new Locale("cs"),
- new Locale("da"), new Locale("el"), new Locale("es"),
- new Locale("et"), new Locale("eu"), new Locale("fa"),
- new Locale("fi"), new Locale("gl"), new Locale("hi"),
- new Locale("hr"), new Locale("hu"), new Locale("hy"),
- new Locale("in"), new Locale("hy"), new Locale("in"),
- new Locale("is"), new Locale("it"), new Locale("iw"),
- new Locale("ka"), new Locale("kk"), new Locale("km"),
- new Locale("kn"), new Locale("ky"), new Locale("lo"),
- new Locale("lt"), new Locale("lv"), new Locale("mk"),
- new Locale("ml"), new Locale("mn"), new Locale("mr"),
- new Locale("ms"), new Locale("my"), new Locale("nb"),
- new Locale("ne"), new Locale("nl"), new Locale("pl"),
- new Locale("pt"), new Locale("rm"), new Locale("ro"),
- new Locale("ru"), new Locale("si"), new Locale("sk"),
- new Locale("sl"), new Locale("sn"), new Locale("sr"),
- new Locale("sv"), new Locale("sw"), new Locale("ta"),
- new Locale("te"), new Locale("th"), new Locale("tl"),
- new Locale("tr"), new Locale("uk"), new Locale("ur"),
- new Locale("uz"), new Locale("vi"), new Locale("zu"),
- };
-
- private static final String USE_SYSTEM_DEFAULT = "";
- private static final String defaultString = "Use System Default";
-
- private static Locale locale;
- private static Languages singleton;
- private static Class<?> clazz;
- private static int resId;
- private static Map<String, String> tmpMap = new TreeMap<String, String>();
- private static Map<String, String> nameMap;
-
- static {
- defaultLocale = Locale.getDefault();
- }
-
- private Languages(Activity activity) {
- AssetManager assets = activity.getAssets();
- Configuration config = activity.getResources().getConfiguration();
- // Resources() requires DisplayMetrics, but they are only needed for drawables
- DisplayMetrics ignored = new DisplayMetrics();
- activity.getWindowManager().getDefaultDisplay().getMetrics(ignored);
- Resources resources;
- Set<Locale> localeSet = new LinkedHashSet<Locale>();
- for (Locale locale : localesToTest) {
- config.locale = locale;
- resources = new Resources(assets, ignored, config);
- if (!TextUtils.equals(defaultString, resources.getString(resId))
- || locale.equals(Locale.ENGLISH))
- localeSet.add(locale);
- }
-
- for (Locale locale : localeSet) {
- if (locale.equals(TIBETAN)) {
- // include English name for devices without Tibetan font support
- tmpMap.put(TIBETAN.toString(), "Tibetan བོད་སྐད།"); // Tibetan
- } else if (locale.equals(Locale.SIMPLIFIED_CHINESE)) {
- tmpMap.put(Locale.SIMPLIFIED_CHINESE.toString(), "中文 (中国)"); // Chinese (China)
- } else if (locale.equals(Locale.TRADITIONAL_CHINESE)) {
- tmpMap.put(Locale.TRADITIONAL_CHINESE.toString(), "中文 (台灣)"); // Chinese (Taiwan)
- } else {
- tmpMap.put(locale.toString(), locale.getDisplayLanguage(locale));
- }
- }
-
- /* USE_SYSTEM_DEFAULT is a fake one for displaying in a chooser menu. */
- // localeSet.add(null);
- // tmpMap.put(USE_SYSTEM_DEFAULT, activity.getString(resId));
- nameMap = Collections.unmodifiableMap(tmpMap);
- }
-
- /**
- * Get the instance of {@link Languages} to work with, providing the
- * {@link Activity} that is will be working as part of, as well as the
- * {@code resId} that has the exact string "Use System Default",
- * i.e. {@code R.string.use_system_default}.
- * <p/>
- * That string resource {@code resId} is also used to find the supported
- * translations: if an included translation has a translated string that
- * matches that {@code resId}, then that language will be included as a
- * supported language.
- *
- * @param clazz the {@link Class} of the default {@code Activity},
- * usually the main {@code Activity} from where the
- * Settings is launched from.
- * @param resId the string resource ID to for the string "Use System Default",
- * e.g. {@code R.string.use_system_default}
- * @return
- */
- public static void setup(Class<?> clazz, int resId) {
- if (Languages.clazz == null) {
- Languages.clazz = clazz;
- Languages.resId = resId;
- } else {
- throw new RuntimeException("Languages singleton was already initialized, duplicate call to Languages.setup()!");
- }
- }
-
- /**
- * Get the singleton to work with.
- *
- * @param activity the {@link Activity} this is working as part of
- * @return
- */
- public static Languages get(Activity activity) {
- if (singleton == null) {
- singleton = new Languages(activity);
- }
- return singleton;
- }
-
- @SuppressLint("NewApi")
- public static void setLanguage(final ContextWrapper contextWrapper, String language, boolean refresh) {
- if (locale != null && TextUtils.equals(locale.getLanguage(), language) && (!refresh)) {
- return; // already configured
- } else if (language == null || language == USE_SYSTEM_DEFAULT) {
- locale = defaultLocale;
- } else {
- /* handle locales with the country in it, i.e. zh_CN, zh_TW, etc */
- String localeSplit[] = language.split("_");
- if (localeSplit.length > 1) {
- locale = new Locale(localeSplit[0], localeSplit[1]);
- } else {
- locale = new Locale(language);
- }
- }
-
- setLocale(contextWrapper, locale);
-
- }
-
- @SuppressWarnings("deprecation")
- private static void setLocale(final ContextWrapper contextWrapper, Locale locale){
- Resources resources = contextWrapper.getResources();
- Configuration configuration = resources.getConfiguration();
- DisplayMetrics displayMetrics = resources.getDisplayMetrics();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
- configuration.setLocale(locale);
- contextWrapper.getApplicationContext().createConfigurationContext(configuration);
- }
- else{
- configuration.locale=locale;
- resources.updateConfiguration(configuration,displayMetrics);
- }
- }
-
- /**
- * Force reload the {@link Activity to make language changes take effect.}
- *
- * @param activity the {@code Activity} to force reload
- */
- public static void forceChangeLanguage(Activity activity) {
- Intent intent = activity.getIntent();
- if (intent == null) // when launched as LAUNCHER
- return;
- intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
- activity.finish();
- activity.overridePendingTransition(0, 0);
- activity.startActivity(intent);
- activity.overridePendingTransition(0, 0);
- }
-
- /**
- * Return the name of the language based on the locale.
- *
- * @param locale
- * @return
- */
- public String getName(String locale) {
- String ret = nameMap.get(locale);
- // if no match, try to return a more general name (i.e. English for
- // en_IN)
- if (ret == null && locale.contains("_"))
- ret = nameMap.get(locale.split("_")[0]);
- return ret;
- }
-
- /**
- * Return an array of the names of all the supported languages, sorted to
- * match what is returned by {@link Languages#getSupportedLocales()}.
- *
- * @return
- */
- public String[] getAllNames() {
- return nameMap.values().toArray(new String[nameMap.size()]);
- }
-
- /**
- * Get sorted list of supported locales.
- *
- * @return
- */
- public String[] getSupportedLocales() {
- Set<String> keys = nameMap.keySet();
- return keys.toArray(new String[keys.size()]);
- }
-}
diff --git a/app-mini/src/main/java/org/torproject/android/mini/settings/LocaleHelper.java b/app-mini/src/main/java/org/torproject/android/mini/settings/LocaleHelper.java
deleted file mode 100644
index e4b29be2..00000000
--- a/app-mini/src/main/java/org/torproject/android/mini/settings/LocaleHelper.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.torproject.android.mini.settings;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.os.Build;
-import org.torproject.android.service.util.Prefs;
-
-import java.util.Locale;
-
-/**
- * This class is used to change your application locale and persist this change for the next time
- * that your app is going to be used.
- * <p/>
- * You can also change the locale of your application on the fly by using the setLocale method.
- * <p/>
- * Created by gunhansancar on 07/10/15.
- * https://gunhansancar.com/change-language-programmatically-in-android/
- */
-public class LocaleHelper {
-
- private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language";
-
- public static Context onAttach(Context context) {
- String lang = getPersistedData(context, Locale.getDefault().getLanguage());
- return setLocale(context, lang);
- }
-
- public static Context onAttach(Context context, String defaultLanguage) {
- String lang = getPersistedData(context, defaultLanguage);
- return setLocale(context, lang);
- }
-
- public static String getLanguage(Context context) {
- return getPersistedData(context, Locale.getDefault().getLanguage());
- }
-
- public static Context setLocale(Context context, String language) {
- persist(context, language);
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- return updateResources(context, language);
- }
-
- return updateResourcesLegacy(context, language);
- }
-
- private static String getPersistedData(Context context, String defaultLanguage) {
- return Prefs.getDefaultLocale();
- }
-
- private static void persist(Context context, String language) {
- Prefs.setDefaultLocale(language);
- }
-
- @TargetApi(Build.VERSION_CODES.N)
- private static Context updateResources(Context context, String language) {
- Locale locale = new Locale(language);
- Locale.setDefault(locale);
-
- Configuration configuration = context.getResources().getConfiguration();
- configuration.setLocale(locale);
- configuration.setLayoutDirection(locale);
-
- return context.createConfigurationContext(configuration);
- }
-
- @SuppressWarnings("deprecation")
- private static Context updateResourcesLegacy(Context context, String language) {
- Locale locale = new Locale(language);
- Locale.setDefault(locale);
-
- Resources resources = context.getResources();
-
- Configuration configuration = resources.getConfiguration();
- configuration.locale = locale;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
- configuration.setLayoutDirection(locale);
- }
-
- resources.updateConfiguration(configuration, resources.getDisplayMetrics());
-
- return context;
- }
-}
\ No newline at end of file
diff --git a/app-mini/src/main/java/org/torproject/android/mini/settings/SettingsPreferences.java b/app-mini/src/main/java/org/torproject/android/mini/settings/SettingsPreferences.java
deleted file mode 100644
index e5b5074b..00000000
--- a/app-mini/src/main/java/org/torproject/android/mini/settings/SettingsPreferences.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-
-package org.torproject.android.mini.settings;
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.preference.EditTextPreference;
-import android.preference.ListPreference;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceScreen;
-import android.view.inputmethod.EditorInfo;
-import android.widget.EditText;
-import org.torproject.android.mini.R;
-
-public class SettingsPreferences extends PreferenceActivity {
- private ListPreference prefLocale = null;
-
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- addPreferencesFromResource(R.xml.preferences);
- setNoPersonalizedLearningOnEditTextPreferences();
- getPreferenceManager().setSharedPreferencesMode(Context.MODE_MULTI_PROCESS);
-
- prefLocale = (ListPreference) findPreference("pref_default_locale");
-
- Languages languages = Languages.get(this);
- prefLocale.setEntries(languages.getAllNames());
- prefLocale.setEntryValues(languages.getSupportedLocales());
- prefLocale.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- String language = (String) newValue;
- Intent intentResult = new Intent();
- intentResult.putExtra("locale", language);
- setResult(RESULT_OK, intentResult);
- finish();
- return false;
- }
- });
- }
-
- @Override
- protected void attachBaseContext(Context base) {
- super.attachBaseContext(LocaleHelper.onAttach(base));
- }
-
- private void setNoPersonalizedLearningOnEditTextPreferences() {
- PreferenceScreen preferenceScreen = getPreferenceScreen();
- int categoryCount = preferenceScreen.getPreferenceCount();
- for (int i = 0; i < categoryCount; i++) {
- Preference p = preferenceScreen.getPreference(i);
- if (p instanceof PreferenceCategory) {
- PreferenceCategory pc = (PreferenceCategory) p;
- int preferenceCount = pc.getPreferenceCount();
- for (int j = 0; j < preferenceCount; j++) {
- p = pc.getPreference(j);
- if (p instanceof EditTextPreference) {
- EditText editText = ((EditTextPreference) p).getEditText();
- editText.setImeOptions(editText.getImeOptions() | EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING);
- }
- }
- }
- }
- }
-
-}
diff --git a/app-mini/src/main/java/org/torproject/android/mini/ui/NoPersonalizedLearningEditText.java b/app-mini/src/main/java/org/torproject/android/mini/ui/NoPersonalizedLearningEditText.java
deleted file mode 100644
index 07d91429..00000000
--- a/app-mini/src/main/java/org/torproject/android/mini/ui/NoPersonalizedLearningEditText.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.torproject.android.mini.ui;
-
-import android.content.Context;
-import androidx.appcompat.widget.AppCompatEditText;
-import android.util.AttributeSet;
-import android.view.inputmethod.EditorInfo;
-
-public class NoPersonalizedLearningEditText extends AppCompatEditText {
- public NoPersonalizedLearningEditText(Context context, AttributeSet attrs) {
- super(context, attrs);
- setImeOptions(getImeOptions() | EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING);
- }
-}
diff --git a/app-mini/src/main/java/org/torproject/android/mini/ui/Rotate3dAnimation.java b/app-mini/src/main/java/org/torproject/android/mini/ui/Rotate3dAnimation.java
deleted file mode 100644
index ac8de549..00000000
--- a/app-mini/src/main/java/org/torproject/android/mini/ui/Rotate3dAnimation.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.torproject.android.mini.ui;
-
-import android.graphics.Camera;
-import android.graphics.Matrix;
-import android.view.animation.Animation;
-import android.view.animation.Transformation;
-
-/**
- * An animation that rotates the view on the Y axis between two specified angles.
- * This animation also adds a translation on the Z axis (depth) to improve the effect.
- */
-public class Rotate3dAnimation extends Animation {
- private final float mFromDegrees;
- private final float mToDegrees;
- private final float mCenterX;
- private final float mCenterY;
- private final float mDepthZ;
- private final boolean mReverse;
- private Camera mCamera;
-
- /**
- * Creates a new 3D rotation on the Y axis. The rotation is defined by its
- * start angle and its end angle. Both angles are in degrees. The rotation
- * is performed around a center point on the 2D space, definied by a pair
- * of X and Y coordinates, called centerX and centerY. When the animation
- * starts, a translation on the Z axis (depth) is performed. The length
- * of the translation can be specified, as well as whether the translation
- * should be reversed in time.
- *
- * @param fromDegrees the start angle of the 3D rotation
- * @param toDegrees the end angle of the 3D rotation
- * @param centerX the X center of the 3D rotation
- * @param centerY the Y center of the 3D rotation
- * @param reverse true if the translation should be reversed, false otherwise
- */
- public Rotate3dAnimation(float fromDegrees, float toDegrees,
- float centerX, float centerY, float depthZ, boolean reverse) {
- mFromDegrees = fromDegrees;
- mToDegrees = toDegrees;
- mCenterX = centerX;
- mCenterY = centerY;
- mDepthZ = depthZ;
- mReverse = reverse;
- }
-
- @Override
- public void initialize(int width, int height, int parentWidth, int parentHeight) {
- super.initialize(width, height, parentWidth, parentHeight);
- mCamera = new Camera();
- }
-
- @Override
- protected void applyTransformation(float interpolatedTime, Transformation t) {
- final float fromDegrees = mFromDegrees;
- float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);
-
- final float centerX = mCenterX;
- final float centerY = mCenterY;
- final Camera camera = mCamera;
-
- final Matrix matrix = t.getMatrix();
-
- camera.save();
- if (mReverse) {
- camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
- } else {
- camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));
- }
- camera.rotateY(degrees);
- camera.getMatrix(matrix);
- camera.restore();
-
- matrix.preTranslate(-centerX, -centerY);
- matrix.postTranslate(centerX, centerY);
- }
-}
diff --git a/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java b/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
index bce4585a..56031c34 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
@@ -5,8 +5,9 @@ import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.github.paolorotolo.appintro.AppIntro;
+
+import org.torproject.android.core.LocaleHelper;
import org.torproject.android.mini.R;
-import org.torproject.android.mini.settings.LocaleHelper;
public class OnboardingActivity extends AppIntro {
diff --git a/app-mini/src/main/res/layout/content_app_config.xml b/app-mini/src/main/res/layout/content_app_config.xml
index 3a8c41a8..bdb56595 100644
--- a/app-mini/src/main/res/layout/content_app_config.xml
+++ b/app-mini/src/main/res/layout/content_app_config.xml
@@ -4,7 +4,6 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".ui.AppConfigActivity"
android:orientation="vertical"
tools:showIn="@layout/activity_app_config"
diff --git a/app/build.gradle b/app/build.gradle
index 16656dc7..017315ca 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -125,6 +125,8 @@ dependencies {
implementation 'com.google.android.material:material:1.1.0'
implementation 'pl.bclogic:pulsator4droid:1.0.3'
implementation 'com.github.apl-devs:appintro:v4.2.2'
+ implementation project(path: ':appcore')
+ implementation project(path: ':intentintegrator')
androidTestImplementation "tools.fastlane:screengrab:1.2.0"
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
implementation 'com.android.volley:volley:1.1.1'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index fa7a54d4..971fd52b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -74,7 +74,7 @@
android:theme="@android:style/Theme.Translucent" />
<activity
- android:name=".settings.SettingsPreferences"
+ android:name=".core.ui.SettingsPreferencesActivity"
android:label="@string/app_name" />
<activity
@@ -143,7 +143,7 @@
</receiver>
<receiver
- android:name=".OnBootReceiver"
+ android:name=".core.OnBootReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
diff --git a/app/src/main/java/com/google/zxing/integration/android/IntentResult.java b/app/src/main/java/com/google/zxing/integration/android/IntentResult.java
deleted file mode 100644
index 2469af92..00000000
--- a/app/src/main/java/com/google/zxing/integration/android/IntentResult.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2009 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.zxing.integration.android;
-
-/**
- * <p>Encapsulates the result of a barcode scan invoked through {@link IntentIntegrator}.</p>
- *
- * @author Sean Owen
- */
-public final class IntentResult {
-
- private final String contents;
- private final String formatName;
- private final byte[] rawBytes;
- private final Integer orientation;
- private final String errorCorrectionLevel;
-
- IntentResult() {
- this(null, null, null, null, null);
- }
-
- IntentResult(String contents,
- String formatName,
- byte[] rawBytes,
- Integer orientation,
- String errorCorrectionLevel) {
- this.contents = contents;
- this.formatName = formatName;
- this.rawBytes = rawBytes;
- this.orientation = orientation;
- this.errorCorrectionLevel = errorCorrectionLevel;
- }
-
- /**
- * @return raw content of barcode
- */
- public String getContents() {
- return contents;
- }
-
- /**
- * @return name of format, like "QR_CODE", "UPC_A". See {@code BarcodeFormat} for more format names.
- */
- public String getFormatName() {
- return formatName;
- }
-
- /**
- * @return raw bytes of the barcode content, if applicable, or null otherwise
- */
- public byte[] getRawBytes() {
- return rawBytes;
- }
-
- /**
- * @return rotation of the image, in degrees, which resulted in a successful scan. May be null.
- */
- public Integer getOrientation() {
- return orientation;
- }
-
- /**
- * @return name of the error correction level used in the barcode, if applicable
- */
- public String getErrorCorrectionLevel() {
- return errorCorrectionLevel;
- }
-
- @Override
- public String toString() {
- StringBuilder dialogText = new StringBuilder(100);
- dialogText.append("Format: ").append(formatName).append('\n');
- dialogText.append("Contents: ").append(contents).append('\n');
- int rawBytesLength = rawBytes == null ? 0 : rawBytes.length;
- dialogText.append("Raw bytes: (").append(rawBytesLength).append(" bytes)\n");
- dialogText.append("Orientation: ").append(orientation).append('\n');
- dialogText.append("EC level: ").append(errorCorrectionLevel).append('\n');
- return dialogText.toString();
- }
-
-}
diff --git a/app/src/main/java/org/torproject/android/OnBootReceiver.java b/app/src/main/java/org/torproject/android/OnBootReceiver.java
deleted file mode 100644
index b8d88e58..00000000
--- a/app/src/main/java/org/torproject/android/OnBootReceiver.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.torproject.android;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Build;
-import org.torproject.android.service.OrbotService;
-import org.torproject.android.service.TorServiceConstants;
-import org.torproject.android.service.util.Prefs;
-
-public class OnBootReceiver extends BroadcastReceiver {
-
- private static boolean sReceivedBoot = false;
-
- @Override
- public void onReceive(Context context, Intent intent) {
-
- if (Prefs.startOnBoot() && (!sReceivedBoot))
- {
- startService(TorServiceConstants.ACTION_START_ON_BOOT, context);
- sReceivedBoot = true;
- }
- }
-
-
- private void startService (String action, Context context)
- {
- Intent intent = new Intent(context, OrbotService.class);
- intent.setAction(action);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- context.startForegroundService(intent);
- }
- else
- {
- context.startService(intent);
- }
-
- }
-
-
-}
-
diff --git a/app/src/main/java/org/torproject/android/OrbotApp.java b/app/src/main/java/org/torproject/android/OrbotApp.java
index 7cb4317f..d037efa9 100644
--- a/app/src/main/java/org/torproject/android/OrbotApp.java
+++ b/app/src/main/java/org/torproject/android/OrbotApp.java
@@ -4,10 +4,10 @@ import android.app.Application;
import android.content.Context;
import android.content.res.Configuration;
+import org.torproject.android.core.LocaleHelper;
import org.torproject.android.service.OrbotConstants;
import org.torproject.android.service.util.Prefs;
-import org.torproject.android.settings.Languages;
-import org.torproject.android.settings.LocaleHelper;
+import org.torproject.android.core.Languages;
import java.util.Locale;
@@ -26,7 +26,7 @@ public class OrbotApp extends Application implements OrbotConstants {
@Override
protected void attachBaseContext(Context base) {
Prefs.setContext(base);
- super.attachBaseContext(LocaleHelper.onAttach(base, Prefs.getDefaultLocale()));
+ super.attachBaseContext(LocaleHelper.onAttach(base));
}
@Override
diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index 81631e9f..61b6333d 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -54,17 +54,17 @@ import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import org.json.JSONArray;
+import org.torproject.android.core.LocaleHelper;
import org.torproject.android.service.OrbotConstants;
import org.torproject.android.service.OrbotService;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.Prefs;
import org.torproject.android.service.util.Utils;
import org.torproject.android.service.vpn.VpnPrefs;
-import org.torproject.android.settings.Languages;
-import org.torproject.android.settings.LocaleHelper;
-import org.torproject.android.settings.SettingsPreferences;
+import org.torproject.android.core.Languages;
+import org.torproject.android.core.ui.SettingsPreferencesActivity;
import org.torproject.android.ui.AppManagerActivity;
-import org.torproject.android.ui.Rotate3dAnimation;
+import org.torproject.android.core.ui.Rotate3dAnimation;
import org.torproject.android.ui.dialog.AboutDialogFragment;
import org.torproject.android.ui.hiddenservices.ClientCookiesActivity;
import org.torproject.android.ui.hiddenservices.HiddenServicesActivity;
@@ -449,10 +449,10 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
if (item.getItemId() == R.id.menu_newnym) {
requestNewTorIdentity();
} else if (item.getItemId() == R.id.menu_settings) {
- Intent intent = new Intent(OrbotMainActivity.this, SettingsPreferences.class);
+ Intent intent = SettingsPreferencesActivity.createIntent(this, R.xml.preferences);
startActivityForResult(intent, REQUEST_SETTINGS);
} else if (item.getItemId() == R.id.menu_exit) {
- doExit(); // exit appp
+ doExit(); // exit app
} else if (item.getItemId() == R.id.menu_about) {
new AboutDialogFragment().show(getSupportFragmentManager(), AboutDialogFragment.TAG);
} else if (item.getItemId() == R.id.menu_scan) {
diff --git a/app/src/main/java/org/torproject/android/settings/Languages.java b/app/src/main/java/org/torproject/android/settings/Languages.java
deleted file mode 100644
index b9a76b91..00000000
--- a/app/src/main/java/org/torproject/android/settings/Languages.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package org.torproject.android.settings;
-
-import android.annotation.SuppressLint;
-import android.app.Activity;
-import android.content.ContextWrapper;
-import android.content.res.AssetManager;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.os.Build;
-import android.text.TextUtils;
-import android.util.DisplayMetrics;
-
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-public class Languages {
-
- public static Locale defaultLocale;
- public static final Locale TIBETAN = new Locale("bo");
- static final Locale localesToTest[] = {
- Locale.ENGLISH, Locale.FRENCH, Locale.GERMAN,
- Locale.ITALIAN, Locale.JAPANESE, Locale.KOREAN,
- Locale.TRADITIONAL_CHINESE, Locale.SIMPLIFIED_CHINESE,
- TIBETAN, new Locale("af"), new Locale("am"),
- new Locale("ar"), new Locale("ay"), new Locale("az"), new Locale("bg"),
- new Locale("bn"), new Locale("ca"), new Locale("cs"),
- new Locale("da"), new Locale("el"), new Locale("es"),
- new Locale("et"), new Locale("eu"), new Locale("fa"),
- new Locale("fi"), new Locale("gl"), new Locale("hi"),
- new Locale("hr"), new Locale("hu"), new Locale("hy"),
- new Locale("in"), new Locale("hy"), new Locale("in"),
- new Locale("is"), new Locale("it"), new Locale("iw"),
- new Locale("ka"), new Locale("kk"), new Locale("km"),
- new Locale("kn"), new Locale("ky"), new Locale("lo"),
- new Locale("lt"), new Locale("lv"), new Locale("mk"),
- new Locale("ml"), new Locale("mn"), new Locale("mr"),
- new Locale("ms"), new Locale("my"), new Locale("nb"),
- new Locale("ne"), new Locale("nl"), new Locale("pl"),
- new Locale("pt"), new Locale("rm"), new Locale("ro"),
- new Locale("ru"), new Locale("si"), new Locale("sk"),
- new Locale("sl"), new Locale("sn"), new Locale("sr"),
- new Locale("sv"), new Locale("sw"), new Locale("ta"),
- new Locale("te"), new Locale("th"), new Locale("tl"),
- new Locale("tr"), new Locale("uk"), new Locale("ur"),
- new Locale("uz"), new Locale("vi"), new Locale("zu"),
- };
-
- private static final String USE_SYSTEM_DEFAULT = "";
- private static final String defaultString = "Use System Default";
-
- private static Locale locale;
- private static Languages singleton;
- private static Class<?> clazz;
- private static int resId;
- private static Map<String, String> tmpMap = new TreeMap<String, String>();
- private static Map<String, String> nameMap;
-
-
- private Languages(Activity activity) {
-
-
- AssetManager assets = activity.getAssets();
- Configuration config = activity.getResources().getConfiguration();
- // Resources() requires DisplayMetrics, but they are only needed for drawables
- DisplayMetrics ignored = new DisplayMetrics();
- activity.getWindowManager().getDefaultDisplay().getMetrics(ignored);
- Resources resources;
- Set<Locale> localeSet = new LinkedHashSet<>();
- for (Locale locale : localesToTest) {
- resources = new Resources(assets, ignored, config);
- if (!TextUtils.equals(defaultString, resources.getString(resId))
- || locale.equals(Locale.ENGLISH))
- localeSet.add(locale);
- }
-
- for (Locale locale : localeSet) {
- if (locale.equals(TIBETAN)) {
- // include English name for devices without Tibetan font support
- tmpMap.put(TIBETAN.toString(), "Tibetan བོད་སྐད།"); // Tibetan
- } else if (locale.equals(Locale.SIMPLIFIED_CHINESE)) {
- tmpMap.put(Locale.SIMPLIFIED_CHINESE.toString(), "中文 (中国)"); // Chinese (China)
- } else if (locale.equals(Locale.TRADITIONAL_CHINESE)) {
- tmpMap.put(Locale.TRADITIONAL_CHINESE.toString(), "中文 (台灣)"); // Chinese (Taiwan)
- } else {
- tmpMap.put(locale.toString(), locale.getDisplayLanguage(locale));
- }
- }
-
- /* USE_SYSTEM_DEFAULT is a fake one for displaying in a chooser menu. */
- // localeSet.add(null);
- // tmpMap.put(USE_SYSTEM_DEFAULT, activity.getString(resId));
- nameMap = Collections.unmodifiableMap(tmpMap);
- }
-
- /**
- * Get the instance of {@link Languages} to work with, providing the
- * {@link Activity} that is will be working as part of, as well as the
- * {@code resId} that has the exact string "Use System Default",
- * i.e. {@code R.string.use_system_default}.
- * <p/>
- * That string resource {@code resId} is also used to find the supported
- * translations: if an included translation has a translated string that
- * matches that {@code resId}, then that language will be included as a
- * supported language.
- *
- * @param clazz the {@link Class} of the default {@code Activity},
- * usually the main {@code Activity} from where the
- * Settings is launched from.
- * @param resId the string resource ID to for the string "Use System Default",
- * e.g. {@code R.string.use_system_default}
- * @return
- */
- public static void setup(Class<?> clazz, int resId) {
- defaultLocale = Locale.getDefault();
-
- if (Languages.clazz == null) {
- Languages.clazz = clazz;
- Languages.resId = resId;
- } else {
- throw new RuntimeException("Languages singleton was already initialized, duplicate call to Languages.setup()!");
- }
- }
-
- /**
- * Get the singleton to work with.
- *
- * @param activity the {@link Activity} this is working as part of
- * @return
- */
- public static Languages get(Activity activity) {
- if (singleton == null) {
- singleton = new Languages(activity);
- }
- return singleton;
- }
-
- @SuppressLint("NewApi")
- public static void setLanguage(final ContextWrapper contextWrapper, String language, boolean refresh) {
- if (locale != null && TextUtils.equals(locale.getLanguage(), language) && (!refresh)) {
- return; // already configured
- } else if (language == null || language == USE_SYSTEM_DEFAULT) {
- locale = defaultLocale;
- } else {
- /* handle locales with the country in it, i.e. zh_CN, zh_TW, etc */
- String localeSplit[] = language.split("_");
- if (localeSplit.length > 1) {
- locale = new Locale(localeSplit[0], localeSplit[1]);
- } else {
- locale = new Locale(language);
- }
- }
-
- setLocale(contextWrapper, locale);
-
- }
-
- @SuppressWarnings("deprecation")
- private static void setLocale(final ContextWrapper contextWrapper, Locale locale){
- Resources resources = contextWrapper.getResources();
- Configuration configuration = resources.getConfiguration();
- DisplayMetrics displayMetrics = resources.getDisplayMetrics();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
- configuration.setLocale(locale);
- contextWrapper.getApplicationContext().createConfigurationContext(configuration);
- }
- else{
- configuration.locale=locale;
- resources.updateConfiguration(configuration,displayMetrics);
- }
- }
-
- /**
- * Return an array of the names of all the supported languages, sorted to
- * match what is returned by {@link Languages#getSupportedLocales()}.
- *
- * @return
- */
- public String[] getAllNames() {
- return nameMap.values().toArray(new String[nameMap.size()]);
- }
-
- /**
- * Get sorted list of supported locales.
- *
- * @return
- */
- public String[] getSupportedLocales() {
- Set<String> keys = nameMap.keySet();
- return keys.toArray(new String[keys.size()]);
- }
-}
diff --git a/app/src/main/java/org/torproject/android/settings/LocaleHelper.java b/app/src/main/java/org/torproject/android/settings/LocaleHelper.java
deleted file mode 100644
index 4fb9e833..00000000
--- a/app/src/main/java/org/torproject/android/settings/LocaleHelper.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.torproject.android.settings;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.os.Build;
-import org.torproject.android.service.util.Prefs;
-
-import java.util.Locale;
-
-/**
- * This class is used to change your application locale and persist this change for the next time
- * that your app is going to be used.
- * <p/>
- * You can also change the locale of your application on the fly by using the setLocale method.
- * <p/>
- * Created by gunhansancar on 07/10/15.
- * https://gunhansancar.com/change-language-programmatically-in-android/
- */
-public class LocaleHelper {
-
- public static Context onAttach(Context context) {
- String lang = getPersistedData(context, Locale.getDefault().getLanguage());
- return setLocale(context, lang);
- }
-
- public static Context onAttach(Context context, String defaultLanguage) {
- String lang = getPersistedData(context, defaultLanguage);
- return setLocale(context, lang);
- }
-
- public static Context setLocale(Context context, String language) {
- persist(context, language);
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- return updateResources(context, language);
- }
-
- return updateResourcesLegacy(context, language);
- }
-
- private static String getPersistedData(Context context, String defaultLanguage) {
- return Prefs.getDefaultLocale();
- }
-
- private static void persist(Context context, String language) {
- Prefs.setDefaultLocale(language);
- }
-
- @TargetApi(Build.VERSION_CODES.N)
- private static Context updateResources(Context context, String language) {
- Locale locale = new Locale(language);
- Locale.setDefault(locale);
-
- Configuration configuration = context.getResources().getConfiguration();
- configuration.setLocale(locale);
- configuration.setLayoutDirection(locale);
-
- return context.createConfigurationContext(configuration);
- }
-
- @SuppressWarnings("deprecation")
- private static Context updateResourcesLegacy(Context context, String language) {
- Locale locale = new Locale(language);
- Locale.setDefault(locale);
-
- Resources resources = context.getResources();
-
- Configuration configuration = resources.getConfiguration();
- configuration.locale = locale;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
- configuration.setLayoutDirection(locale);
- }
-
- resources.updateConfiguration(configuration, resources.getDisplayMetrics());
-
- return context;
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/torproject/android/settings/SettingsPreferences.java b/app/src/main/java/org/torproject/android/settings/SettingsPreferences.java
deleted file mode 100644
index 4279fd65..00000000
--- a/app/src/main/java/org/torproject/android/settings/SettingsPreferences.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-
-package org.torproject.android.settings;
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.preference.EditTextPreference;
-import android.preference.ListPreference;
-import android.preference.Preference;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceScreen;
-import android.view.inputmethod.EditorInfo;
-import android.widget.EditText;
-import org.torproject.android.R;
-
-public class SettingsPreferences extends PreferenceActivity {
- private ListPreference prefLocale = null;
-
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- addPreferencesFromResource(R.xml.preferences);
- setNoPersonalizedLearningOnEditTextPreferences();
- getPreferenceManager().setSharedPreferencesMode(Context.MODE_MULTI_PROCESS);
-
- prefLocale = (ListPreference) findPreference("pref_default_locale");
-
- Languages languages = Languages.get(this);
- prefLocale.setEntries(languages.getAllNames());
- prefLocale.setEntryValues(languages.getSupportedLocales());
- prefLocale.setOnPreferenceChangeListener((preference, newValue) -> {
- String language = (String) newValue;
- Intent intentResult = new Intent();
- intentResult.putExtra("locale", language);
- setResult(RESULT_OK, intentResult);
- finish();
- return false;
- });
- }
-
- @Override
- protected void attachBaseContext(Context base) {
- super.attachBaseContext(LocaleHelper.onAttach(base));
- }
-
- private void setNoPersonalizedLearningOnEditTextPreferences() {
- PreferenceScreen preferenceScreen = getPreferenceScreen();
- int categoryCount = preferenceScreen.getPreferenceCount();
- for (int i = 0; i < categoryCount; i++) {
- Preference p = preferenceScreen.getPreference(i);
- if (p instanceof PreferenceCategory) {
- PreferenceCategory pc = (PreferenceCategory) p;
- int preferenceCount = pc.getPreferenceCount();
- for (int j = 0; j < preferenceCount; j++) {
- p = pc.getPreference(j);
- if (p instanceof EditTextPreference) {
- EditText editText = ((EditTextPreference) p).getEditText();
- editText.setImeOptions(editText.getImeOptions() | EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING);
- }
- }
- }
- }
- }
-
-}
diff --git a/app/src/main/java/org/torproject/android/ui/NoPersonalizedLearningEditText.java b/app/src/main/java/org/torproject/android/ui/NoPersonalizedLearningEditText.java
deleted file mode 100644
index 7a21c7c5..00000000
--- a/app/src/main/java/org/torproject/android/ui/NoPersonalizedLearningEditText.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.torproject.android.ui;
-
-import android.content.Context;
-import androidx.appcompat.widget.AppCompatEditText;
-import android.util.AttributeSet;
-import android.view.inputmethod.EditorInfo;
-
-public class NoPersonalizedLearningEditText extends AppCompatEditText {
- public NoPersonalizedLearningEditText(Context context, AttributeSet attrs) {
- super(context, attrs);
- setImeOptions(getImeOptions() | EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING);
- }
-}
diff --git a/app/src/main/java/org/torproject/android/ui/Rotate3dAnimation.java b/app/src/main/java/org/torproject/android/ui/Rotate3dAnimation.java
deleted file mode 100644
index 7829d2db..00000000
--- a/app/src/main/java/org/torproject/android/ui/Rotate3dAnimation.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.torproject.android.ui;
-
-import android.graphics.Camera;
-import android.graphics.Matrix;
-import android.view.animation.Animation;
-import android.view.animation.Transformation;
-
-/**
- * An animation that rotates the view on the Y axis between two specified angles.
- * This animation also adds a translation on the Z axis (depth) to improve the effect.
- */
-public class Rotate3dAnimation extends Animation {
- private final float mFromDegrees;
- private final float mToDegrees;
- private final float mCenterX;
- private final float mCenterY;
- private final float mDepthZ;
- private final boolean mReverse;
- private Camera mCamera;
-
- /**
- * Creates a new 3D rotation on the Y axis. The rotation is defined by its
- * start angle and its end angle. Both angles are in degrees. The rotation
- * is performed around a center point on the 2D space, definied by a pair
- * of X and Y coordinates, called centerX and centerY. When the animation
- * starts, a translation on the Z axis (depth) is performed. The length
- * of the translation can be specified, as well as whether the translation
- * should be reversed in time.
- *
- * @param fromDegrees the start angle of the 3D rotation
- * @param toDegrees the end angle of the 3D rotation
- * @param centerX the X center of the 3D rotation
- * @param centerY the Y center of the 3D rotation
- * @param reverse true if the translation should be reversed, false otherwise
- */
- public Rotate3dAnimation(float fromDegrees, float toDegrees,
- float centerX, float centerY, float depthZ, boolean reverse) {
- mFromDegrees = fromDegrees;
- mToDegrees = toDegrees;
- mCenterX = centerX;
- mCenterY = centerY;
- mDepthZ = depthZ;
- mReverse = reverse;
- }
-
- @Override
- public void initialize(int width, int height, int parentWidth, int parentHeight) {
- super.initialize(width, height, parentWidth, parentHeight);
- mCamera = new Camera();
- }
-
- @Override
- protected void applyTransformation(float interpolatedTime, Transformation t) {
- final float fromDegrees = mFromDegrees;
- float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);
-
- final float centerX = mCenterX;
- final float centerY = mCenterY;
- final Camera camera = mCamera;
-
- final Matrix matrix = t.getMatrix();
-
- camera.save();
- if (mReverse) {
- camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
- } else {
- camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));
- }
- camera.rotateY(degrees);
- camera.getMatrix(matrix);
- camera.restore();
-
- matrix.preTranslate(-centerX, -centerY);
- matrix.postTranslate(centerX, centerY);
- }
-}
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/ClientCookiesActivity.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/ClientCookiesActivity.java
index 0ed20f57..c5f8a5e1 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/ClientCookiesActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/ClientCookiesActivity.java
@@ -20,7 +20,7 @@ import com.google.zxing.integration.android.IntentResult;
import org.json.JSONException;
import org.json.JSONObject;
import org.torproject.android.R;
-import org.torproject.android.settings.LocaleHelper;
+import org.torproject.android.core.LocaleHelper;
import org.torproject.android.ui.hiddenservices.adapters.ClientCookiesAdapter;
import org.torproject.android.ui.hiddenservices.dialogs.AddCookieDialog;
import org.torproject.android.ui.hiddenservices.dialogs.CookieActionsDialog;
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java
index 8ea67ec7..bfd29645 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java
@@ -24,7 +24,7 @@ import android.widget.ListView;
import android.widget.Spinner;
import org.torproject.android.R;
-import org.torproject.android.settings.LocaleHelper;
+import org.torproject.android.core.LocaleHelper;
import org.torproject.android.ui.hiddenservices.adapters.OnionListAdapter;
import org.torproject.android.ui.hiddenservices.dialogs.HSActionsDialog;
import org.torproject.android.ui.hiddenservices.dialogs.HSDataDialog;
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java
index 8efa47d3..67918d13 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java
@@ -13,7 +13,7 @@ import org.torproject.android.R;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.ui.hiddenservices.providers.CookieContentProvider;
import org.torproject.android.ui.hiddenservices.providers.HSContentProvider;
-import org.torproject.android.ui.hiddenservices.storage.ExternalStorage;
+import org.torproject.android.core.ExternalStorage;
import java.io.File;
import java.io.FileInputStream;
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectCookieBackupDialog.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectCookieBackupDialog.java
index 120b0693..03f7b506 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectCookieBackupDialog.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectCookieBackupDialog.java
@@ -10,7 +10,7 @@ import android.widget.ListView;
import org.torproject.android.R;
import org.torproject.android.ui.hiddenservices.adapters.BackupAdapter;
import org.torproject.android.ui.hiddenservices.backup.BackupUtils;
-import org.torproject.android.ui.hiddenservices.storage.ExternalStorage;
+import org.torproject.android.core.ExternalStorage;
import java.io.File;
import java.util.ArrayList;
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectHSBackupDialog.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectHSBackupDialog.java
index 6f02f872..642c5c17 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectHSBackupDialog.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectHSBackupDialog.java
@@ -10,7 +10,7 @@ import android.widget.ListView;
import org.torproject.android.R;
import org.torproject.android.ui.hiddenservices.adapters.BackupAdapter;
import org.torproject.android.ui.hiddenservices.backup.BackupUtils;
-import org.torproject.android.ui.hiddenservices.storage.ExternalStorage;
+import org.torproject.android.core.ExternalStorage;
import java.io.File;
import java.util.ArrayList;
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/storage/ExternalStorage.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/storage/ExternalStorage.java
deleted file mode 100644
index f3780f87..00000000
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/storage/ExternalStorage.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.torproject.android.ui.hiddenservices.storage;
-
-import android.os.Environment;
-
-import java.io.File;
-
-public class ExternalStorage {
- private static final String ORBOT_BACKUPS_DIR = "Orbot";
-
- public static File getOrCreateBackupDir() {
- if (!isExternalStorageWritable())
- return null;
-
- File dir = new File(Environment.getExternalStorageDirectory(), ORBOT_BACKUPS_DIR);
-
- if (!dir.isDirectory() && !dir.mkdirs())
- return null;
-
- return dir;
- }
-
- /* Checks if external storage is available for read and write */
- private static boolean isExternalStorageWritable() {
- String state = Environment.getExternalStorageState();
- return Environment.MEDIA_MOUNTED.equals(state);
- }
-
-}
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
index be8ab1bf..d8f35f86 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
@@ -8,7 +8,6 @@ import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
-import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.TextView;
@@ -18,9 +17,8 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import org.torproject.android.R;
-import org.torproject.android.service.OrbotService;
+import org.torproject.android.core.LocaleHelper;
import org.torproject.android.service.util.Prefs;
-import org.torproject.android.settings.LocaleHelper;
import java.io.BufferedReader;
import java.io.IOException;
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java
index 8e796724..7868faf5 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java
@@ -11,8 +11,8 @@ import androidx.fragment.app.Fragment;
import com.github.paolorotolo.appintro.AppIntro;
import org.torproject.android.R;
+import org.torproject.android.core.LocaleHelper;
import org.torproject.android.service.util.Prefs;
-import org.torproject.android.settings.LocaleHelper;
import org.torproject.android.ui.AppManagerActivity;
import org.torproject.android.ui.hiddenservices.permissions.PermissionManager;
diff --git a/app/src/main/res/layout/layout_add_client_cookie_dialog.xml b/app/src/main/res/layout/layout_add_client_cookie_dialog.xml
index 2f4b9885..c4725ff3 100644
--- a/app/src/main/res/layout/layout_add_client_cookie_dialog.xml
+++ b/app/src/main/res/layout/layout_add_client_cookie_dialog.xml
@@ -15,7 +15,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Small"
android:paddingLeft="5dp" />
- <org.torproject.android.ui.NoPersonalizedLearningEditText
+ <org.torproject.android.core.ui.NoPersonalizedLearningEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
@@ -29,7 +29,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Small"
android:paddingLeft="5dp" />
- <org.torproject.android.ui.NoPersonalizedLearningEditText
+ <org.torproject.android.core.ui.NoPersonalizedLearningEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
diff --git a/app/src/main/res/layout/layout_hs_data_dialog.xml b/app/src/main/res/layout/layout_hs_data_dialog.xml
index a4ac590e..cf390d31 100644
--- a/app/src/main/res/layout/layout_hs_data_dialog.xml
+++ b/app/src/main/res/layout/layout_hs_data_dialog.xml
@@ -15,7 +15,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Small"
android:paddingLeft="5dp" />
- <org.torproject.android.ui.NoPersonalizedLearningEditText
+ <org.torproject.android.core.ui.NoPersonalizedLearningEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
@@ -29,7 +29,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Small"
android:paddingLeft="5dp" />
- <org.torproject.android.ui.NoPersonalizedLearningEditText
+ <org.torproject.android.core.ui.NoPersonalizedLearningEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
@@ -43,7 +43,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Small"
android:paddingLeft="5dp" />
- <org.torproject.android.ui.NoPersonalizedLearningEditText
+ <org.torproject.android.core.ui.NoPersonalizedLearningEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
diff --git a/appcore/.gitignore b/appcore/.gitignore
new file mode 100644
index 00000000..42afabfd
--- /dev/null
+++ b/appcore/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/appcore/build.gradle b/appcore/build.gradle
new file mode 100644
index 00000000..701ce2bf
--- /dev/null
+++ b/appcore/build.gradle
@@ -0,0 +1,41 @@
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+
+android {
+ compileSdkVersion 29
+ buildToolsVersion "29.0.3"
+
+ defaultConfig {
+ minSdkVersion 16
+ targetSdkVersion 29
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
+ implementation 'androidx.core:core-ktx:1.3.1'
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation project(path: ':orbotservice')
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+
+}
\ No newline at end of file
diff --git a/appcore/consumer-rules.pro b/appcore/consumer-rules.pro
new file mode 100644
index 00000000..e69de29b
diff --git a/appcore/proguard-rules.pro b/appcore/proguard-rules.pro
new file mode 100644
index 00000000..481bb434
--- /dev/null
+++ b/appcore/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/appcore/src/androidTest/java/org/torproject/android/core/ExampleInstrumentedTest.kt b/appcore/src/androidTest/java/org/torproject/android/core/ExampleInstrumentedTest.kt
new file mode 100644
index 00000000..b7e9cad1
--- /dev/null
+++ b/appcore/src/androidTest/java/org/torproject/android/core/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package org.torproject.android.core
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("org.torproject.android.core.test", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/appcore/src/main/AndroidManifest.xml b/appcore/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..64220dd7
--- /dev/null
+++ b/appcore/src/main/AndroidManifest.xml
@@ -0,0 +1,3 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="org.torproject.android.core">
+</manifest>
\ No newline at end of file
diff --git a/appcore/src/main/java/org/torproject/android/core/ExternalStorage.kt b/appcore/src/main/java/org/torproject/android/core/ExternalStorage.kt
new file mode 100644
index 00000000..77493195
--- /dev/null
+++ b/appcore/src/main/java/org/torproject/android/core/ExternalStorage.kt
@@ -0,0 +1,15 @@
+package org.torproject.android.core
+
+import android.os.Environment
+import java.io.File
+
+object ExternalStorage {
+ private const val ORBOT_BACKUPS_DIR = "Orbot"
+ @JvmStatic
+ fun getOrCreateBackupDir(): File? {
+ // Checks if external storage is available for read and write
+ if (Environment.MEDIA_MOUNTED != Environment.getExternalStorageState()) return null
+ val dir = File(Environment.getExternalStorageDirectory(), ORBOT_BACKUPS_DIR)
+ return if (!dir.isDirectory && !dir.mkdirs()) null else dir
+ }
+}
\ No newline at end of file
diff --git a/appcore/src/main/java/org/torproject/android/core/Languages.kt b/appcore/src/main/java/org/torproject/android/core/Languages.kt
new file mode 100644
index 00000000..a76a816b
--- /dev/null
+++ b/appcore/src/main/java/org/torproject/android/core/Languages.kt
@@ -0,0 +1,174 @@
+package org.torproject.android.core
+
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.content.ContextWrapper
+import android.content.res.Resources
+import android.os.Build
+import android.text.TextUtils
+import android.util.DisplayMetrics
+import java.util.*
+
+class Languages private constructor(activity: Activity) {
+ /**
+ * Return an array of the names of all the supported languages, sorted to
+ * match what is returned by [Languages.supportedLocales].
+ *
+ * @return
+ */
+ val allNames: Array<String>
+ get() = nameMap.values.toTypedArray()
+
+ val supportedLocales: Array<String>
+ get() {
+ val keys = nameMap.keys
+ return keys.toTypedArray()
+ }
+
+ companion object {
+ private var defaultLocale: Locale? = null
+ val TIBETAN = Locale("bo")
+ val localesToTest = arrayOf(
+ Locale.ENGLISH, Locale.FRENCH, Locale.GERMAN,
+ Locale.ITALIAN, Locale.JAPANESE, Locale.KOREAN,
+ Locale.TRADITIONAL_CHINESE, Locale.SIMPLIFIED_CHINESE,
+ TIBETAN, Locale("af"), Locale("am"),
+ Locale("ar"), Locale("ay"), Locale("az"), Locale("bg"),
+ Locale("bn"), Locale("ca"), Locale("cs"),
+ Locale("da"), Locale("el"), Locale("es"),
+ Locale("et"), Locale("eu"), Locale("fa"),
+ Locale("fi"), Locale("gl"), Locale("hi"),
+ Locale("hr"), Locale("hu"), Locale("hy"),
+ Locale("in"), Locale("hy"), Locale("in"),
+ Locale("is"), Locale("it"), Locale("iw"),
+ Locale("ka"), Locale("kk"), Locale("km"),
+ Locale("kn"), Locale("ky"), Locale("lo"),
+ Locale("lt"), Locale("lv"), Locale("mk"),
+ Locale("ml"), Locale("mn"), Locale("mr"),
+ Locale("ms"), Locale("my"), Locale("nb"),
+ Locale("ne"), Locale("nl"), Locale("pl"),
+ Locale("pt"), Locale("rm"), Locale("ro"),
+ Locale("ru"), Locale("si"), Locale("sk"),
+ Locale("sl"), Locale("sn"), Locale("sr"),
+ Locale("sv"), Locale("sw"), Locale("ta"),
+ Locale("te"), Locale("th"), Locale("tl"),
+ Locale("tr"), Locale("uk"), Locale("ur"),
+ Locale("uz"), Locale("vi"), Locale("zu"))
+ private const val USE_SYSTEM_DEFAULT = ""
+ private const val defaultString = "Use System Default"
+ private var locale: Locale? = null
+ private var singleton: Languages? = null
+ private var clazz: Class<*>? = null
+ private var resId = 0
+ private val tmpMap: MutableMap<String, String> = TreeMap()
+ private lateinit var nameMap: Map<String, String>
+
+ /**
+ * Get the instance of [Languages] to work with, providing the
+ * [Activity] that is will be working as part of, as well as the
+ * `resId` that has the exact string "Use System Default",
+ * i.e. `R.string.use_system_default`.
+ *
+ *
+ * That string resource `resId` is also used to find the supported
+ * translations: if an included translation has a translated string that
+ * matches that `resId`, then that language will be included as a
+ * supported language.
+ *
+ * @param clazz the [Class] of the default `Activity`,
+ * usually the main `Activity` from where the
+ * Settings is launched from.
+ * @param resId the string resource ID to for the string "Use System Default",
+ * e.g. `R.string.use_system_default`
+ * @return
+ */
+ @JvmStatic
+ fun setup(clazz: Class<*>?, resId: Int) {
+ defaultLocale = Locale.getDefault()
+ if (Companion.clazz == null) {
+ Companion.clazz = clazz
+ Companion.resId = resId
+ } else {
+ throw RuntimeException("Languages singleton was already initialized, duplicate call to Languages.setup()!")
+ }
+ }
+
+ /**
+ * Get the singleton to work with.
+ *
+ * @param activity the [Activity] this is working as part of
+ * @return
+ */
+ @JvmStatic
+ operator fun get(activity: Activity): Languages? {
+ if (singleton == null) {
+ singleton = Languages(activity)
+ }
+ return singleton
+ }
+
+ @JvmStatic
+ @SuppressLint("NewApi")
+ fun setLanguage(contextWrapper: ContextWrapper, language: String?, refresh: Boolean) {
+ locale = if (locale != null && TextUtils.equals(locale!!.language, language) && !refresh) {
+ return // already configured
+ } else if (language == null || language === USE_SYSTEM_DEFAULT) {
+ defaultLocale
+ } else {
+ /* handle locales with the country in it, i.e. zh_CN, zh_TW, etc */
+ val localeSplit = language.split("_".toRegex()).toTypedArray()
+ if (localeSplit.size > 1) {
+ Locale(localeSplit[0], localeSplit[1])
+ } else {
+ Locale(language)
+ }
+ }
+ setLocale(contextWrapper, locale)
+ }
+
+ private fun setLocale(contextWrapper: ContextWrapper, locale: Locale?) {
+ val resources = contextWrapper.resources
+ val configuration = resources.configuration
+ val displayMetrics = resources.displayMetrics
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ configuration.setLocale(locale)
+ contextWrapper.applicationContext.createConfigurationContext(configuration)
+ } else {
+ configuration.locale = locale
+ resources.updateConfiguration(configuration, displayMetrics)
+ }
+ }
+ }
+
+ init {
+ val assets = activity.assets
+ val config = activity.resources.configuration
+ // Resources() requires DisplayMetrics, but they are only needed for drawables
+ val ignored = DisplayMetrics()
+ activity.windowManager.defaultDisplay.getMetrics(ignored)
+ var resources: Resources
+ val localeSet: MutableSet<Locale> = LinkedHashSet()
+ for (locale in localesToTest) {
+ resources = Resources(assets, ignored, config)
+ if (!TextUtils.equals(defaultString, resources.getString(resId))
+ || locale == Locale.ENGLISH) localeSet.add(locale)
+ }
+ for (locale in localeSet) {
+ if (locale == TIBETAN) {
+ // include English name for devices without Tibetan font support
+ tmpMap[TIBETAN.toString()] = "Tibetan བོད་སྐད།" // Tibetan
+ } else if (locale == Locale.SIMPLIFIED_CHINESE) {
+ tmpMap[Locale.SIMPLIFIED_CHINESE.toString()] = "中文 (中国)" // Chinese (China)
+ } else if (locale == Locale.TRADITIONAL_CHINESE) {
+ tmpMap[Locale.TRADITIONAL_CHINESE.toString()] = "中文 (台灣)" // Chinese (Taiwan)
+ } else {
+ tmpMap[locale.toString()] = locale.getDisplayLanguage(locale)
+ }
+ }
+
+ /* USE_SYSTEM_DEFAULT is a fake one for displaying in a chooser menu. */
+ // localeSet.add(null);
+ // tmpMap.put(USE_SYSTEM_DEFAULT, activity.getString(resId));
+ nameMap = Collections.unmodifiableMap(tmpMap)
+ }
+}
\ No newline at end of file
diff --git a/appcore/src/main/java/org/torproject/android/core/LocaleHelper.kt b/appcore/src/main/java/org/torproject/android/core/LocaleHelper.kt
new file mode 100644
index 00000000..271e1c8a
--- /dev/null
+++ b/appcore/src/main/java/org/torproject/android/core/LocaleHelper.kt
@@ -0,0 +1,55 @@
+package org.torproject.android.core
+
+import android.annotation.TargetApi
+import android.content.Context
+import android.os.Build
+import org.torproject.android.service.util.Prefs
+import java.util.*
+
+/**
+ * This class is used to change your application locale and persist this change for the next time
+ * that your app is going to be used.
+ *
+ *
+ * You can also change the locale of your application on the fly by using the setLocale method.
+ *
+ *
+ * Created by gunhansancar on 07/10/15.
+ * https://gunhansancar.com/change-language-programmatically-in-android/
+ */
+object LocaleHelper {
+ @JvmStatic
+ fun onAttach(context: Context): Context = setLocale(context, Prefs.getDefaultLocale())
+
+ private fun setLocale(context: Context, language: String): Context {
+ Prefs.setDefaultLocale(language)
+ return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+ updateResources(context, language)
+ else
+ updateResourcesLegacy(context, language)
+ }
+
+ @TargetApi(Build.VERSION_CODES.N)
+ private fun updateResources(context: Context, language: String): Context {
+ val locale = Locale(language)
+ Locale.setDefault(locale)
+ val configuration = context.resources.configuration
+ configuration.setLocale(locale)
+ configuration.setLayoutDirection(locale)
+ return context.createConfigurationContext(configuration)
+ }
+
+ @SuppressWarnings("deprecation")
+ private fun updateResourcesLegacy(context: Context, language: String): Context {
+ val locale = Locale(language)
+ Locale.setDefault(locale)
+ val resources = context.resources
+ val configuration = resources.configuration
+ configuration.locale = locale
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ configuration.setLayoutDirection(locale)
+ }
+ resources.updateConfiguration(configuration, resources.displayMetrics)
+ return context
+ }
+}
\ No newline at end of file
diff --git a/appcore/src/main/java/org/torproject/android/core/OnBootReceiver.kt b/appcore/src/main/java/org/torproject/android/core/OnBootReceiver.kt
new file mode 100644
index 00000000..3602a249
--- /dev/null
+++ b/appcore/src/main/java/org/torproject/android/core/OnBootReceiver.kt
@@ -0,0 +1,31 @@
+package org.torproject.android.core
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.os.Build
+import org.torproject.android.service.OrbotService
+import org.torproject.android.service.TorServiceConstants
+import org.torproject.android.service.util.Prefs
+
+class OnBootReceiver : BroadcastReceiver() {
+ override fun onReceive(context: Context, intent: Intent) {
+ if (Prefs.startOnBoot() && !sReceivedBoot) {
+ startService(TorServiceConstants.ACTION_START_ON_BOOT, context)
+ sReceivedBoot = true
+ }
+ }
+
+ private fun startService(action: String, context: Context) {
+ val intent = Intent(context, OrbotService::class.java).apply { this.action = action }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
+ context.startForegroundService(intent)
+ else {
+ context.startService(intent)
+ }
+ }
+
+ companion object {
+ private var sReceivedBoot = false
+ }
+}
\ No newline at end of file
diff --git a/appcore/src/main/java/org/torproject/android/core/ui/NoPersonalizedLearningEditText.kt b/appcore/src/main/java/org/torproject/android/core/ui/NoPersonalizedLearningEditText.kt
new file mode 100644
index 00000000..d9e7dfb7
--- /dev/null
+++ b/appcore/src/main/java/org/torproject/android/core/ui/NoPersonalizedLearningEditText.kt
@@ -0,0 +1,12 @@
+package org.torproject.android.core.ui
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.inputmethod.EditorInfo
+import androidx.appcompat.widget.AppCompatEditText
+
+class NoPersonalizedLearningEditText(context: Context, attrs: AttributeSet?) : AppCompatEditText(context, attrs) {
+ init {
+ imeOptions = imeOptions or EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING
+ }
+}
\ No newline at end of file
diff --git a/appcore/src/main/java/org/torproject/android/core/ui/Rotate3dAnimation.kt b/appcore/src/main/java/org/torproject/android/core/ui/Rotate3dAnimation.kt
new file mode 100644
index 00000000..3e4a484b
--- /dev/null
+++ b/appcore/src/main/java/org/torproject/android/core/ui/Rotate3dAnimation.kt
@@ -0,0 +1,48 @@
+package org.torproject.android.core.ui
+
+import android.graphics.Camera
+import android.view.animation.Animation
+import android.view.animation.Transformation
+
+/**
+ * An animation that rotates the view on the Y axis between two specified angles.
+ * This animation also adds a translation on the Z axis (depth) to improve the effect.
+ */
+class Rotate3dAnimation
+/**
+ * Creates a new 3D rotation on the Y axis. The rotation is defined by its
+ * start angle and its end angle. Both angles are in degrees. The rotation
+ * is performed around a center point on the 2D space, defined by a pair
+ * of X and Y coordinates, called centerX and centerY. When the animation
+ * starts, a translation on the Z axis (depth) is performed. The length
+ * of the translation can be specified, as well as whether the translation
+ * should be reversed in time.
+ *
+ * @param fromDegrees the start angle of the 3D rotation
+ * @param toDegrees the end angle of the 3D rotation
+ * @param centerX the X center of the 3D rotation
+ * @param centerY the Y center of the 3D rotation
+ * @param reverse true if the translation should be reversed, false otherwise
+ */(private val mFromDegrees: Float, private val mToDegrees: Float,
+ private val mCenterX: Float, private val mCenterY: Float, private val mDepthZ: Float, private val mReverse: Boolean) : Animation() {
+ private lateinit var mCamera: Camera
+ override fun initialize(width: Int, height: Int, parentWidth: Int, parentHeight: Int) {
+ super.initialize(width, height, parentWidth, parentHeight)
+ mCamera = Camera()
+ }
+
+ override fun applyTransformation(interpolatedTime: Float, t: Transformation) {
+ val degrees = mFromDegrees + (mToDegrees - mFromDegrees) * interpolatedTime
+ with(mCamera) {
+ save()
+ if (mReverse) translate(0.0f, 0.0f, mDepthZ * interpolatedTime)
+ else translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime))
+ rotateY(degrees)
+ getMatrix(t.matrix)
+ restore()
+ }
+ t.matrix.preTranslate(-mCenterX, -mCenterY)
+ t.matrix.postTranslate(mCenterX, mCenterY)
+ }
+
+}
\ No newline at end of file
diff --git a/appcore/src/main/java/org/torproject/android/core/ui/SettingsPreferencesActivity.kt b/appcore/src/main/java/org/torproject/android/core/ui/SettingsPreferencesActivity.kt
new file mode 100644
index 00000000..a8eaf644
--- /dev/null
+++ b/appcore/src/main/java/org/torproject/android/core/ui/SettingsPreferencesActivity.kt
@@ -0,0 +1,65 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */ /* See LICENSE for licensing information */
+package org.torproject.android.core.ui
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.preference.*
+import android.preference.Preference.OnPreferenceChangeListener
+import android.view.inputmethod.EditorInfo
+import androidx.annotation.XmlRes
+import org.torproject.android.core.Languages
+import org.torproject.android.core.LocaleHelper
+
+class SettingsPreferencesActivity : PreferenceActivity() {
+ private var prefLocale: ListPreference? = null
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ addPreferencesFromResource(intent.getIntExtra(BUNDLE_KEY_PREFERENCES_XML, 0))
+ setNoPersonalizedLearningOnEditTextPreferences()
+ preferenceManager.sharedPreferencesMode = MODE_MULTI_PROCESS
+ prefLocale = findPreference("pref_default_locale") as ListPreference
+ val languages = Languages[this]
+ prefLocale?.entries = languages!!.allNames
+ prefLocale?.entryValues = languages.supportedLocales
+ prefLocale?.onPreferenceChangeListener = OnPreferenceChangeListener { _: Preference?, newValue: Any? ->
+ val language = newValue as String?
+ val intentResult = Intent()
+ intentResult.putExtra("locale", language)
+ setResult(RESULT_OK, intentResult)
+ finish()
+ false
+ }
+ }
+
+ override fun attachBaseContext(newBase: Context) = super.attachBaseContext(LocaleHelper.onAttach(newBase))
+
+ private fun setNoPersonalizedLearningOnEditTextPreferences() {
+ val preferenceScreen = preferenceScreen
+ val categoryCount = preferenceScreen.preferenceCount
+ for (i in 0 until categoryCount) {
+ var p = preferenceScreen.getPreference(i)
+ if (p is PreferenceCategory) {
+ val pc = p
+ val preferenceCount = pc.preferenceCount
+ for (j in 0 until preferenceCount) {
+ p = pc.getPreference(j)
+ if (p is EditTextPreference) {
+ val editText = p.editText
+ editText.imeOptions = editText.imeOptions or EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING
+ }
+ }
+ }
+ }
+ }
+
+ companion object {
+ private const val BUNDLE_KEY_PREFERENCES_XML = "prefxml"
+ @JvmStatic
+ fun createIntent(context: Context?, @XmlRes xmlPrefId: Int): Intent {
+ val intent = Intent(context, SettingsPreferencesActivity::class.java)
+ intent.putExtra(BUNDLE_KEY_PREFERENCES_XML, xmlPrefId)
+ return intent
+ }
+ }
+}
\ No newline at end of file
diff --git a/appcore/src/test/java/org/torproject/android/core/ExampleUnitTest.kt b/appcore/src/test/java/org/torproject/android/core/ExampleUnitTest.kt
new file mode 100644
index 00000000..9b2de166
--- /dev/null
+++ b/appcore/src/test/java/org/torproject/android/core/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package org.torproject.android.core
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 031c2bfc..51012a87 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,11 +1,15 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
+ ext {
+ kotlin_version = '1.3.72'
+ }
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.0'
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
diff --git a/intentintegrator/.gitignore b/intentintegrator/.gitignore
new file mode 100644
index 00000000..42afabfd
--- /dev/null
+++ b/intentintegrator/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/intentintegrator/build.gradle b/intentintegrator/build.gradle
new file mode 100644
index 00000000..81efeb31
--- /dev/null
+++ b/intentintegrator/build.gradle
@@ -0,0 +1,30 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion 29
+ buildToolsVersion "29.0.3"
+
+ defaultConfig {
+ minSdkVersion 16
+ targetSdkVersion 29
+ versionCode 1
+ versionName "1.0"
+ consumerProguardFiles "consumer-rules.pro"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+}
\ No newline at end of file
diff --git a/intentintegrator/consumer-rules.pro b/intentintegrator/consumer-rules.pro
new file mode 100644
index 00000000..e69de29b
diff --git a/intentintegrator/proguard-rules.pro b/intentintegrator/proguard-rules.pro
new file mode 100644
index 00000000..481bb434
--- /dev/null
+++ b/intentintegrator/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/intentintegrator/src/main/AndroidManifest.xml b/intentintegrator/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..a0410a4b
--- /dev/null
+++ b/intentintegrator/src/main/AndroidManifest.xml
@@ -0,0 +1,5 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.google.zxing.integration.android">
+
+ /
+</manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java b/intentintegrator/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java
similarity index 100%
rename from app/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java
rename to intentintegrator/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java
diff --git a/app-mini/src/main/java/com/google/zxing/integration/android/IntentResult.java b/intentintegrator/src/main/java/com/google/zxing/integration/android/IntentResult.java
similarity index 100%
rename from app-mini/src/main/java/com/google/zxing/integration/android/IntentResult.java
rename to intentintegrator/src/main/java/com/google/zxing/integration/android/IntentResult.java
diff --git a/settings.gradle b/settings.gradle
index 05e4830c..46cf1758 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1,3 @@
+include ':intentintegrator'
+include ':appcore'
include ':orbotservice',':app',':app-mini'
1
0
commit e436df06d9616faebf01fdb1e08a5e5fe5bf80a7
Author: bim <dsnake(a)protonmail.com>
Date: Tue Sep 15 23:30:15 2020 -0400
Final linting round:
- replaced deprecated Switch with androidx SwitchCompat
- Made the country dropdown centered on the main activity UI
- Removed XML attributes that do nothing
---
.../org/torproject/android/OrbotMainActivity.java | 5 +-
.../adapters/ClientCookiesAdapter.java | 13 ++---
.../hiddenservices/adapters/OnionListAdapter.java | 5 +-
app/src/main/res/layout/layout_about.xml | 2 +-
app/src/main/res/layout/layout_apps.xml | 1 -
.../res/layout/layout_client_cookie_list_item.xml | 2 +-
app/src/main/res/layout/layout_hs_list_item.xml | 8 ++--
app/src/main/res/layout/layout_main.xml | 56 +++++-----------------
8 files changed, 29 insertions(+), 63 deletions(-)
diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index f336e8bf..8c898fce 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -45,6 +45,7 @@ import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SwitchCompat;
import androidx.appcompat.widget.Toolbar;
+import androidx.core.content.res.ResourcesCompat;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
@@ -316,8 +317,6 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
Intent intent = new Intent(OrbotMainActivity.this, OrbotService.class);
stopService(intent);
-
-
}
private void doLayout() {
@@ -1204,7 +1203,7 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(3, 3, 3, 3);
iv.setLayoutParams(params);
- iv.setImageDrawable(getResources().getDrawable(R.drawable.ic_settings_white_24dp));
+ iv.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_settings_white_24dp, null));
llBoxShortcuts.addView(iv);
iv.setOnClickListener(v -> startActivityForResult(new Intent(OrbotMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT));
}
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/ClientCookiesAdapter.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/ClientCookiesAdapter.java
index f61958cd..e7123522 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/ClientCookiesAdapter.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/ClientCookiesAdapter.java
@@ -4,11 +4,12 @@ import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
+
+import androidx.appcompat.widget.SwitchCompat;
import androidx.cursoradapter.widget.CursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import org.torproject.android.R;
@@ -33,7 +34,7 @@ public class ClientCookiesAdapter extends CursorAdapter {
TextView domain = view.findViewById(R.id.cookie_onion);
domain.setText(cursor.getString(cursor.getColumnIndex(CookieContentProvider.ClientCookie.DOMAIN)));
- Switch enabled = view.findViewById(R.id.cookie_switch);
+ SwitchCompat enabled = view.findViewById(R.id.cookie_switch);
enabled.setChecked(
cursor.getInt(cursor.getColumnIndex(CookieContentProvider.ClientCookie.ENABLED)) == 1
);
@@ -42,13 +43,9 @@ public class ClientCookiesAdapter extends CursorAdapter {
ContentResolver resolver = mContext.getContentResolver();
ContentValues fields = new ContentValues();
fields.put(CookieContentProvider.ClientCookie.ENABLED, isChecked);
- resolver.update(
- CookieContentProvider.CONTENT_URI, fields, where, null
- );
+ resolver.update(CookieContentProvider.CONTENT_URI, fields, where, null);
- Toast.makeText(
- mContext, R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG
- ).show();
+ Toast.makeText(mContext, R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG).show();
});
}
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/OnionListAdapter.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/OnionListAdapter.java
index 895f2779..0d06ce3e 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/OnionListAdapter.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/OnionListAdapter.java
@@ -4,11 +4,12 @@ import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
+
+import androidx.appcompat.widget.SwitchCompat;
import androidx.cursoradapter.widget.CursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import org.torproject.android.R;
@@ -37,7 +38,7 @@ public class OnionListAdapter extends CursorAdapter {
TextView domain = view.findViewById(R.id.hs_onion);
domain.setText(cursor.getString(cursor.getColumnIndex(HSContentProvider.HiddenService.DOMAIN)));
- Switch enabled = view.findViewById(R.id.hs_switch);
+ SwitchCompat enabled = view.findViewById(R.id.hs_switch);
enabled.setChecked(
cursor.getInt(cursor.getColumnIndex(HSContentProvider.HiddenService.ENABLED)) == 1
);
diff --git a/app/src/main/res/layout/layout_about.xml b/app/src/main/res/layout/layout_about.xml
index dca409c9..6f338ec7 100644
--- a/app/src/main/res/layout/layout_about.xml
+++ b/app/src/main/res/layout/layout_about.xml
@@ -12,7 +12,7 @@
<LinearLayout
android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
diff --git a/app/src/main/res/layout/layout_apps.xml b/app/src/main/res/layout/layout_apps.xml
index bc35af99..49215fe8 100644
--- a/app/src/main/res/layout/layout_apps.xml
+++ b/app/src/main/res/layout/layout_apps.xml
@@ -15,7 +15,6 @@
android:id="@+id/applistview"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_alignParentTop="true"
android:gravity="center"
android:horizontalSpacing="5dp"
android:numColumns="4"
diff --git a/app/src/main/res/layout/layout_client_cookie_list_item.xml b/app/src/main/res/layout/layout_client_cookie_list_item.xml
index 1d5d1ccb..213ba6cb 100644
--- a/app/src/main/res/layout/layout_client_cookie_list_item.xml
+++ b/app/src/main/res/layout/layout_client_cookie_list_item.xml
@@ -12,7 +12,7 @@
android:textSize="18sp"
android:layout_weight="1" />
- <Switch
+ <androidx.appcompat.widget.SwitchCompat
android:id="@+id/cookie_switch"
android:layout_width="wrap_content"
android:layout_height="match_parent"
diff --git a/app/src/main/res/layout/layout_hs_list_item.xml b/app/src/main/res/layout/layout_hs_list_item.xml
index e83b8747..8f603bd9 100644
--- a/app/src/main/res/layout/layout_hs_list_item.xml
+++ b/app/src/main/res/layout/layout_hs_list_item.xml
@@ -18,8 +18,8 @@
android:id="@+id/hs_port"
android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:paddingRight="10dp"
android:paddingTop="10dp"
+ android:paddingRight="10dp"
android:textSize="35sp" />
<LinearLayout
@@ -32,21 +32,21 @@
android:id="@+id/hs_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingBottom="10dp"
android:paddingLeft="10dp"
+ android:paddingBottom="10dp"
android:textSize="24sp" />
<TextView
android:id="@+id/hs_onion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingBottom="10dp"
android:paddingLeft="10dp"
+ android:paddingBottom="10dp"
android:textSize="18sp" />
</LinearLayout>
- <Switch
+ <androidx.appcompat.widget.SwitchCompat
android:id="@+id/hs_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/layout_main.xml b/app/src/main/res/layout/layout_main.xml
index ce70f957..7ff57108 100644
--- a/app/src/main/res/layout/layout_main.xml
+++ b/app/src/main/res/layout/layout_main.xml
@@ -26,7 +26,7 @@
<RelativeLayout
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="wrap_content">
<FrameLayout
android:id="@+id/frameMain"
@@ -107,9 +107,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/lblPorts"
- android:orientation="horizontal"
-
- >
+ android:orientation="horizontal">
<LinearLayout
android:layout_width="170dp"
@@ -119,21 +117,14 @@
android:layout_weight="1"
android:background="#11CCCCCC"
android:orientation="vertical">
- <!--
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Select Region"
- android:layout_margin="12dp"
- />-->
<Spinner
android:id="@+id/spinnerCountry"
android:layout_width="165dp"
android:layout_height="wrap_content"
+ android:layout_gravity="center"
android:layout_margin="9dp"
-
- />
+ android:padding="3dp" />
</LinearLayout>
@@ -145,9 +136,7 @@
android:layout_margin="3dp"
android:layout_weight="1"
android:background="#11CCCCCC"
- android:orientation="vertical"
-
- >
+ android:orientation="vertical">
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/btnVPN"
@@ -156,9 +145,7 @@
android:layout_gravity="center"
android:layout_margin="9dp"
android:text="@string/apps_mode"
- app:switchPadding="3dp"
-
- />
+ app:switchPadding="3dp" />
</LinearLayout>
</LinearLayout>
@@ -169,9 +156,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/controls"
- android:orientation="horizontal"
-
- >
+ android:orientation="horizontal">
<LinearLayout
android:layout_width="170dp"
@@ -188,9 +173,7 @@
android:fontFamily="sans-serif-light"
android:gravity="center"
android:lines="1"
- android:text="@string/main_layout_download"
-
- />
+ android:text="@string/main_layout_download" />
<TextView
@@ -201,9 +184,7 @@
android:fontFamily="sans-serif-light"
android:gravity="center_vertical"
android:lines="1"
- android:text="0kbps"
-
- />
+ android:text="0kbps" />
</LinearLayout>
@@ -213,9 +194,7 @@
android:layout_gravity="center"
android:layout_margin="3dp"
android:layout_weight="1"
- android:orientation="horizontal"
-
- >
+ android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
@@ -233,9 +212,7 @@
android:fontFamily="sans-serif-light"
android:gravity="center_vertical"
android:lines="1"
- android:text="0kbps"
-
- />
+ android:text="0kbps" />
</LinearLayout>
@@ -247,7 +224,6 @@
android:layout_height="40dp"
android:layout_below="@+id/traffic"
android:layout_margin="3dp"
- android:layout_weight="1"
android:background="#11CCCCCC"
android:gravity="center_horizontal"
android:orientation="horizontal">
@@ -259,16 +235,12 @@
android:fontFamily="sans-serif-light"
android:gravity="center_vertical"
android:lines="1"
- android:text="@string/trouble_connecting"
-
- />
+ android:text="@string/trouble_connecting" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/btnBridges"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_centerHorizontal="true"
- android:layout_centerVertical="true"
android:layout_margin="3dp"
android:layout_marginTop="10dp"
android:text="@string/use_bridges"
@@ -281,7 +253,6 @@
android:layout_height="80dp"
android:layout_below="@+id/row_bridges"
android:layout_margin="3dp"
- android:layout_weight="1"
android:background="#55CCCCCC"
android:gravity="center_horizontal"
android:orientation="vertical">
@@ -301,7 +272,7 @@
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
- android:padding="3dp"/>
+ android:padding="3dp" />
</LinearLayout>
@@ -327,7 +298,6 @@
android:id="@+id/orbotLog"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
android:layout_marginTop="10dp"
android:fontFamily="monospace"
android:gravity="start"
1
0
commit cf2dd39003cb14055d037dded599d878117e0218
Author: bim <dsnake(a)protonmail.com>
Date: Wed Sep 23 22:47:28 2020 -0400
removed polipo from about
---
app/src/main/res/layout/layout_about.xml | 234 ++++++++++++++---------------
app/src/main/res/values-ar/strings.xml | 3 +-
app/src/main/res/values-ay/strings.xml | 1 -
app/src/main/res/values-az/strings.xml | 3 +-
app/src/main/res/values-be/strings.xml | 3 +-
app/src/main/res/values-bg/strings.xml | 3 +-
app/src/main/res/values-ca/strings.xml | 1 -
app/src/main/res/values-cs-rCZ/strings.xml | 3 +-
app/src/main/res/values-de/strings.xml | 1 -
app/src/main/res/values-el/strings.xml | 3 +-
app/src/main/res/values-es-rAR/strings.xml | 3 +-
app/src/main/res/values-es/strings.xml | 3 +-
app/src/main/res/values-eu/strings.xml | 1 -
app/src/main/res/values-fa/strings.xml | 3 +-
app/src/main/res/values-fi/strings.xml | 3 +-
app/src/main/res/values-fr-rFR/strings.xml | 3 +-
app/src/main/res/values-fr/strings.xml | 3 +-
app/src/main/res/values-gl/strings.xml | 3 +-
app/src/main/res/values-he/strings.xml | 1 -
app/src/main/res/values-hi/strings.xml | 3 +-
app/src/main/res/values-hr/strings.xml | 3 +-
app/src/main/res/values-hu/strings.xml | 3 +-
app/src/main/res/values-id/strings.xml | 3 +-
app/src/main/res/values-in-rID/strings.xml | 3 +-
app/src/main/res/values-is/strings.xml | 3 +-
app/src/main/res/values-it/strings.xml | 3 +-
app/src/main/res/values-iw/strings.xml | 1 -
app/src/main/res/values-ja/strings.xml | 3 +-
app/src/main/res/values-ko/strings.xml | 3 +-
app/src/main/res/values-lv/strings.xml | 3 +-
app/src/main/res/values-mk/strings.xml | 3 +-
app/src/main/res/values-nb/strings.xml | 3 +-
app/src/main/res/values-nl/strings.xml | 3 +-
app/src/main/res/values-pl/strings.xml | 3 +-
app/src/main/res/values-pt-rBR/strings.xml | 3 +-
app/src/main/res/values-pt-rPT/strings.xml | 1 -
app/src/main/res/values-pt/strings.xml | 3 +-
app/src/main/res/values-ro/strings.xml | 3 +-
app/src/main/res/values-ru/strings.xml | 3 +-
app/src/main/res/values-sk/strings.xml | 3 +-
app/src/main/res/values-sr/strings.xml | 3 +-
app/src/main/res/values-sv/strings.xml | 3 +-
app/src/main/res/values-th/strings.xml | 3 +-
app/src/main/res/values-tl/strings.xml | 3 +-
app/src/main/res/values-tr/strings.xml | 3 +-
app/src/main/res/values-uk/strings.xml | 3 +-
app/src/main/res/values-vi/strings.xml | 3 +-
app/src/main/res/values-zh-rCN/strings.xml | 3 +-
app/src/main/res/values-zh-rTW/strings.xml | 3 +-
app/src/main/res/values/strings.xml | 3 +-
50 files changed, 152 insertions(+), 215 deletions(-)
diff --git a/app/src/main/res/layout/layout_about.xml b/app/src/main/res/layout/layout_about.xml
index 6f338ec7..47f9e695 100644
--- a/app/src/main/res/layout/layout_about.xml
+++ b/app/src/main/res/layout/layout_about.xml
@@ -1,145 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
- <ScrollView
- android:id="@+id/scrollView"
+ <LinearLayout
android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_height="wrap_content"
android:orientation="vertical">
- <LinearLayout
+ <TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:orientation="vertical">
+ android:paddingLeft="15px"
+ android:paddingTop="15px"
+ android:text="@string/wizard_details"
+ android:textColor="#00ff00"
+ android:textStyle="bold" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="15px"
- android:paddingTop="15px"
- android:text="@string/wizard_details"
- android:textColor="#00ff00"
- android:textStyle="bold" />
-
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:autoLink="web"
- android:paddingLeft="15px"
- android:text="@string/wizard_details_msg"
- android:textColor="#ffffff"
- android:textColorLink="#ffffff" />
-
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="15px"
- android:paddingTop="15px"
- android:text="Version: "
- android:textColor="#00ff00"
- android:textStyle="bold" />
-
- <TextView
- android:id="@+id/versionName"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:paddingLeft="15px"
- android:text="- Unknown -"
- android:textColor="#ffffff" />
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:autoLink="web"
+ android:paddingLeft="15px"
+ android:text="@string/wizard_details_msg"
+ android:textColor="#ffffff"
+ android:textColorLink="#ffffff" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="15px"
- android:paddingTop="15px"
- android:text="@string/project_home"
- android:textColor="#00ff00"
- android:textStyle="bold" />
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="15px"
+ android:paddingTop="15px"
+ android:text="Version: "
+ android:textColor="#00ff00"
+ android:textStyle="bold" />
+
+ <TextView
+ android:id="@+id/versionName"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:paddingLeft="15px"
+ android:text="- Unknown -"
+ android:textColor="#ffffff" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:autoLink="web"
- android:paddingLeft="15px"
- android:text="@string/project_urls"
- android:textColor="#ffffff"
- android:textColorLink="#ffffff" />
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="15px"
+ android:paddingTop="15px"
+ android:text="@string/project_home"
+ android:textColor="#00ff00"
+ android:textStyle="bold" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="15px"
- android:paddingTop="15px"
- android:text="@string/third_party_software"
- android:textColor="#00ff00"
- android:textStyle="bold" />
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:autoLink="web"
+ android:paddingLeft="15px"
+ android:text="@string/project_urls"
+ android:textColor="#ffffff"
+ android:textColorLink="#ffffff" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:autoLink="web"
- android:paddingLeft="15px"
- android:text="@string/tor_version"
- android:textColor="#ffffff"
- android:textColorLink="#ffffff" />
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="15px"
+ android:paddingTop="15px"
+ android:text="@string/third_party_software"
+ android:textColor="#00ff00"
+ android:textStyle="bold" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:autoLink="web"
- android:paddingLeft="15px"
- android:text="@string/libevent_version"
- android:textColor="#ffffff"
- android:textColorLink="#ffffff" />
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:autoLink="web"
+ android:paddingLeft="15px"
+ android:text="@string/tor_version"
+ android:textColor="#ffffff"
+ android:textColorLink="#ffffff" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:autoLink="web"
- android:paddingLeft="15px"
- android:text="@string/polipo_version"
- android:textColor="#ffffff"
- android:textColorLink="#ffffff" />
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:autoLink="web"
+ android:paddingLeft="15px"
+ android:text="@string/libevent_version"
+ android:textColor="#ffffff"
+ android:textColorLink="#ffffff" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:autoLink="web"
- android:paddingLeft="15px"
- android:text="@string/obfsproxy_version"
- android:textColor="#ffffff"
- android:textColorLink="#ffffff" />
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:autoLink="web"
+ android:paddingLeft="15px"
+ android:text="@string/obfsproxy_version"
+ android:textColor="#ffffff"
+ android:textColorLink="#ffffff" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:autoLink="web"
- android:paddingLeft="15px"
- android:text="@string/openssl_version"
- android:textColor="#ffffff"
- android:textColorLink="#ffffff" />
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:autoLink="web"
+ android:paddingLeft="15px"
+ android:text="@string/openssl_version"
+ android:textColor="#ffffff"
+ android:textColorLink="#ffffff" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="15px"
- android:paddingTop="15px"
- android:text="License: "
- android:textColor="#00ff00"
- android:textStyle="bold" />
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="15px"
+ android:paddingTop="15px"
+ android:text="License: "
+ android:textColor="#00ff00"
+ android:textStyle="bold" />
+
+ <TextView
+ android:id="@+id/aboutother"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:autoLink="web"
+ android:paddingLeft="15px"
+ android:textColor="#ffffff"
+ android:textColorLink="#ffffff" />
+ </LinearLayout>
+</ScrollView>
- <TextView
- android:id="@+id/aboutother"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:autoLink="web"
- android:paddingLeft="15px"
- android:textColor="#ffffff"
- android:textColorLink="#ffffff" />
- </LinearLayout>
- </ScrollView>
-</LinearLayout>
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 98ebdc60..ea1b5b41 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">برامج من الطرف الثالث:</string>
<string name="tor_version">تور: https://www.torproject.org</string>
<string name="libevent_version">لب إيفينت النسخة http://www.monkey.org/~provos/libevent/ :v2.0.21</string>
- <string name="polipo_version">بوليبو النسخة 1.1.9 : https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="found_existing_tor_process">عُثر علي عملية تور سابقة تعمل...</string>
<string name="something_bad_happened">حصل خطأ ما. افحص السجل</string>
diff --git a/app/src/main/res/values-ay/strings.xml b/app/src/main/res/values-ay/strings.xml
index 1b9ebeea..df4f5ad4 100644
--- a/app/src/main/res/values-ay/strings.xml
+++ b/app/src/main/res/values-ay/strings.xml
@@ -92,7 +92,6 @@
<string name="third_party_software">3ar jaljat-Software </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Imantat apayañ thakhinak Tor llikar mä wakichäwiw jist\'arañ muni %1$s. Wakichawitix uñt\'atachixa, iyaw sama.</string>
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
index 19ca1d86..8ca8c115 100644
--- a/app/src/main/res/values-az/strings.xml
+++ b/app/src/main/res/values-az/strings.xml
@@ -92,8 +92,7 @@
Tor: https://www.torproject.org</string>
<string name="libevent_version">
LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">mövcud Tor prosesi tapıldı...</string>
+ <string name="found_existing_tor_process">mövcud Tor prosesi tapıldı...</string>
<string name="something_bad_happened">Nə isə pis bir şey oldu. Girişi yoxla</string>
<string name="unable_to_read_hidden_service_name">gizli xidmət adını oxumağı deaktivləşdir</string>
<string name="unable_to_start_tor">Tor-un başlanmasını dayandır:</string>
diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml
index 69011f94..aa91590e 100644
--- a/app/src/main/res/values-be/strings.xml
+++ b/app/src/main/res/values-be/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Праграмы іншых распрацоўнікаў: </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Дадатак хоча адкрыць схаваны порт сервера %1$s сеткі Tor. Гэта бяспечна, калі вы давяраеце дадзенаму дадатку.</string>
<string name="found_existing_tor_process">знойдзены існавалы працэс Tor...</string>
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index c6e991cc..ef3ea54e 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">Софтуер на трети страни: </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">намерил си съвместим Tor проект...</string>
+ <string name="found_existing_tor_process">намерил си съвместим Tor проект...</string>
<string name="something_bad_happened">Нещо лошо се случи. Проверете лога</string>
<string name="unable_to_read_hidden_service_name">не може да прочете име на скрита услуга</string>
<string name="unable_to_start_tor">Не може да стартира Тор:</string>
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index 14c6965a..37c4f22a 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -92,7 +92,6 @@
<string name="third_party_software">Programari de terceres parts:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Una aplicació vol obrir el port de servidor ocults%1$s a la xarxa Tor. Això és segur si confieu en l\'aplicació</string>
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml
index f2c7fcdd..a753905a 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/app/src/main/res/values-cs-rCZ/strings.xml
@@ -89,8 +89,7 @@
<string name="third_party_software">Software třetích stran:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">nalezev existující Tor proces…</string>
+ <string name="found_existing_tor_process">nalezev existující Tor proces…</string>
<string name="something_bad_happened">Stalo se něco špatného. Zkontrolujte log</string>
<string name="unable_to_read_hidden_service_name">nelze číst název skryté služby</string>
<string name="unable_to_start_tor">Nelze spustit Tor:</string>
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 9cfc6763..51c478dc 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -92,7 +92,6 @@
<string name="third_party_software">Drittanbieteranwendungen:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Eine Anwendung möchte den Versteckten Server-Anschluss %1$s zum Tor-Netz öffnen. Dies ist sicher, wenn Sie der Anwendung vertrauen.</string>
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index fc34cf83..acb1c517 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Λογισμικό τρίτων:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Κάποια εφαρμογή προσπαθεί να ανοίξει την κρυφή θύρα διακομιστή %1$sστο δίκτυο Tor. Πρόκειται για ασφαλή ενέργεια, εφόσον γνωρίζετε την εφαρμογή.</string>
<string name="found_existing_tor_process">αναζήτηση διεργασιών Tor...</string>
diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml
index b1cd7cb2..6d6755b3 100644
--- a/app/src/main/res/values-es-rAR/strings.xml
+++ b/app/src/main/res/values-es-rAR/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Software de terceros:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Una aplicación quiere abrir el puerto del servidor oculto %1$s a la red de tor. Esto es seguro si confías en la aplicación</string>
<string name="found_existing_tor_process">encontrado el proceso tor existente</string>
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 46bff414..216fcd45 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -93,8 +93,7 @@ direcciones (o rangos). No prevalecen sobre las configuraciones de exclusión de
<string name="third_party_software">Software de terceras partes</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Una aplicación quiere abrir el puerto %1$s de servidor oculto a la red Tor. Esto es seguro si confía en la aplicación.</string>
<string name="found_existing_tor_process">Se encontró un proceso de Tor ya existente...</string>
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index b02d1cd2..11fa9ba3 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -92,7 +92,6 @@
<string name="third_party_software">Hirugarrengoen softwarea:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Aplikazio batek ezkutuko zerbitzariko %1$s ataka ireki nau du Tor sarera. Segurua da aplikazioaz fidatzen bazara.</string>
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index be3a6e26..1b9691ca 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">3rd-Party-Software:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy نسخهی 0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy نسخهی 0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">اپلیکیشنی میخواهد پورت سرور %1$s را به شبکه تور بگشاید. در صورتی که به این برنامه اطمینان دارید، چنین کاری امن است.</string>
<string name="found_existing_tor_process">یک تور درحال اجرا پیدا شد...</string>
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 5138ff60..ec38870f 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">3:n osapuolen ohjelmisto:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">löytyi olemassaoleva Tor-prosessi...</string>
+ <string name="found_existing_tor_process">löytyi olemassaoleva Tor-prosessi...</string>
<string name="something_bad_happened">Jotain pahaa tapahtui. Tarkista loki</string>
<string name="unable_to_read_hidden_service_name">piilopalvelunimen lukeminen epäonnistui</string>
<string name="unable_to_start_tor">Torin käynnistys epäonnistui:</string>
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index f454d840..74620dff 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">Logiciels tiers :</string>
<string name="tor_version">Tor : https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21 : http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9 : https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">un processus existant de Tor a été trouvé...</string>
+ <string name="found_existing_tor_process">un processus existant de Tor a été trouvé...</string>
<string name="something_bad_happened">Quelque chose n’a pas été. Vérifiez le journal</string>
<string name="unable_to_read_hidden_service_name">impossible de lire le nom du service caché</string>
<string name="unable_to_start_tor">Impossible de démarrer Tor :</string>
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 6af6bd4f..7d1df0f4 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Logiciels tiers :</string>
<string name="tor_version">Tor : https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21 : http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9 : https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8 : https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8 : https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j : http://www.openssl.org</string>
<string name="hidden_service_request">Une appli veut ouvrir le port %1$s du serveur caché au réseau Tor. Cela est sécuritaire si vous faites confiance à l’appli.</string>
<string name="found_existing_tor_process">un processus existant de Tor a été trouvé...</string>
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index 327a9c50..7c7a923b 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Software de Terceiros:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Unha aplicación quere abrir o porto oculto de servidor %1$s a rede Tor. Esto é seguro se vostede confía na app.</string>
<string name="found_existing_tor_process">atopado proceso Tor existente...</string>
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 9ea570c6..a2ceeaec 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -92,7 +92,6 @@
<string name="third_party_software">תוכנה-צד-ג׳: </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">יישום רוצה לפתוח פתחה של שרת נסתר %1$s אל רשת Tor. זה בטוח אם אתה בוטח ביישום.</string>
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index 4070859f..66207af0 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -93,8 +93,7 @@
<string name="third_party_software">तृतीय-पक्ष-सॉफ़्टवेयर:</string>
<string name="tor_version">तोर : https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">पोलीपो v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">एक ऐप Tor नेटवर्क पर %1$sछिपा सर्वर पोर्ट खोलना चाहता है। यदि आप ऐप पर विश्वास करते हैं, तो यह सुरक्षित है</string>
<string name="found_existing_tor_process">मौजूदा तोर प्रक्रिया पाया ...</string>
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index 74041b1f..8e0fe937 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">Software treće strane:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">pronađeni postojeći Tor procesi...</string>
+ <string name="found_existing_tor_process">pronađeni postojeći Tor procesi...</string>
<string name="something_bad_happened">Nešto loše se dogodilo. Provjerite dnevnik</string>
<string name="unable_to_read_hidden_service_name">nije moguće pročitati ime skrivene usluge</string>
<string name="unable_to_start_tor">Nije moguće pokrenuti Tor:</string>
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 1f187b2e..1fb51809 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">3. fél szoftver:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Egy app egy rejtett szerver portot %1$s nyitna a Tor hálózatra. Ez biztonságos, ha megbízik az appban.</string>
<string name="found_existing_tor_process">létező Tor folyamat találva...</string>
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml
index 4768ecd5..7ca828d8 100644
--- a/app/src/main/res/values-id/strings.xml
+++ b/app/src/main/res/values-id/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">Perangkat Lunak Pihak Ke-3:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">menemukan proses Tor yang ada...</string>
+ <string name="found_existing_tor_process">menemukan proses Tor yang ada...</string>
<string name="something_bad_happened">Sesuatu yang buruk terjadi. Periksa log</string>
<string name="unable_to_read_hidden_service_name">tidak dapat membaca nama layanan tersembunyi</string>
<string name="unable_to_start_tor">Tidak dapat memulai Tor:</string>
diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml
index b9d02d2d..77427587 100644
--- a/app/src/main/res/values-in-rID/strings.xml
+++ b/app/src/main/res/values-in-rID/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">Perangkat Lunak Pihak Ke-3:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">menemukan proses Tor yang ada...</string>
+ <string name="found_existing_tor_process">menemukan proses Tor yang ada...</string>
<string name="something_bad_happened">Sesuatu yang buruk terjadi. Periksa log</string>
<string name="unable_to_read_hidden_service_name">tidak dapat membaca nama layanan tersembunyi</string>
<string name="unable_to_start_tor">Tidak dapat memulai Tor:</string>
diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml
index f8889d45..801e4330 100644
--- a/app/src/main/res/values-is/strings.xml
+++ b/app/src/main/res/values-is/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Hugbúnaður frá 3ja aðila:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Forrit vill opna földu vefgáttina %1$s inn á Tor-netið. Þetta er öruggt ef þú treystir forritinu.</string>
<string name="found_existing_tor_process">fann annað Tor-ferli...</string>
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index aedd1376..22e1dac1 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Software di terze parti:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Un\'app vuole aprire la porta %1$s del server nascosto alla rete Tor. È un\'azione sicura se ti fidi dell\'app.</string>
<string name="found_existing_tor_process">trovato un processo Tor esistente...</string>
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index e8aa0c8b..f6859955 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -80,7 +80,6 @@
<string name="third_party_software">תוכנה-צד-ג׳: </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="found_existing_tor_process">נמצא תהליך Tor קיים…</string>
<string name="something_bad_happened">משהו רע התרחש. בדוק את היומן</string>
<string name="unable_to_read_hidden_service_name">לא מסוגל לקרוא שם שירות נסתר</string>
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 70f8a063..384c93a2 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">第三者製のソフトウェア</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">アプリが非公開サーバーポート %1$s をTorネットワークに開放しようとしています。信頼できるアプリであればこれは安全です。</string>
<string name="found_existing_tor_process">Torプロセスを発見</string>
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index db9e43cf..086e9be6 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">3rd-Party-Software: </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">존재하고 있는 Tor 프로세스 발견</string>
+ <string name="found_existing_tor_process">존재하고 있는 Tor 프로세스 발견</string>
<string name="something_bad_happened">어떤 나쁜 것이 발생. 로그 확인하세요.</string>
<string name="unable_to_read_hidden_service_name">히든 서비스 이름을 읽을 수 없음</string>
<string name="unable_to_start_tor">Tor 시작 불가능</string>
diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml
index 37062994..51732372 100644
--- a/app/src/main/res/values-lv/strings.xml
+++ b/app/src/main/res/values-lv/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">Trešo personu programmatūra:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">Atrada esošu Tor procesu...</string>
+ <string name="found_existing_tor_process">Atrada esošu Tor procesu...</string>
<string name="something_bad_happened">Nav labi. Pārbaudiet žurnālu</string>
<string name="unable_to_read_hidden_service_name">Nespēj lasīt slēpta pakalpojuma nosaukumu</string>
<string name="unable_to_start_tor">Nevar startēt Tor:</string>
diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml
index 907df60e..949f1c8b 100644
--- a/app/src/main/res/values-mk/strings.xml
+++ b/app/src/main/res/values-mk/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Софтвер од производител од 3-та страна:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Апликација сака да отвори сокриена серверска порта %1$s кон Tor мрежата. Ова е безбедно доколку и верувате на апликацијата.</string>
<string name="found_existing_tor_process">Пронајден постоечки Tor-процес ...</string>
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 5e689ce3..b780794a 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">Tredjepartsprogramvare:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: https://www.openssl.org</string>
<string name="found_existing_tor_process">fant eksisterende Tor-prosess…</string>
<string name="something_bad_happened">Noe alvorlig skjedde. Sjekk loggen.</string>
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 7d90b698..c681a577 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Software van 3e partijen: </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Een app wil de verborgenserverpoort %1$s tot het Tor-netwerk openen. Dit is veilig als je de app vertrouwt.</string>
<string name="found_existing_tor_process">bestaand Tor-proces gevonden…</string>
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index df454dd1..c7d97517 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">Oprogramowanie 3rd-Party</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">znaleziono istniejący proces Tora...</string>
+ <string name="found_existing_tor_process">znaleziono istniejący proces Tora...</string>
<string name="something_bad_happened">Coś nie poszło nie tak. Sprawdź logi</string>
<string name="unable_to_read_hidden_service_name">uniemożliw czytanie nazw ukrytych serwisów</string>
<string name="unable_to_start_tor">Nie można wystartować aplikacji Tor:</string>
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index c86a2f02..787cecf1 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Software de Terceiros</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Um aplicativo precisa abrir uma porta tipo servidor escondida %1$spara a Rede Tor. Isso é seguro se você confiar nesta aplicação.</string>
<string name="found_existing_tor_process">procurando processos Tor existentes...</string>
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index a66ca5a7..8fe12cbd 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -44,7 +44,6 @@
<string name="third_party_software">Software de terceiros: </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
<string name="set_locale_title">idioma</string>
<string name="pref_socks_title">SOCKS do Tor</string>
<string name="pref_dnsport_title">Porta DNS do Tor</string>
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index cbe439aa..b819147e 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -59,8 +59,7 @@
<string name="third_party_software">Programas de Terceiros: </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">encontrado o processo Tor existente...</string>
+ <string name="found_existing_tor_process">encontrado o processo Tor existente...</string>
<string name="something_bad_happened">Aconteceu algo de mau. Verifique o registo de eventos.</string>
<string name="unable_to_read_hidden_service_name">não é possível ler o nome do serviço ocultado</string>
<string name="unable_to_start_tor">Não é possível iniciar o Tor:</string>
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 42d6bf86..47587d6d 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">Aplicatii tertiare:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">găsit proces Tor existent...</string>
+ <string name="found_existing_tor_process">găsit proces Tor existent...</string>
<string name="something_bad_happened">Ceva rău s-a întâmplat. Verifică log-ul</string>
<string name="unable_to_read_hidden_service_name">nu am putut citi numele serviciului ascuns</string>
<string name="unable_to_start_tor">Nu am reuşit să pornesc Tor:</string>
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 9b0fa54b..6149e0a9 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Программы сторонних разработчиков: </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Приложение хочет открыть скрытый порт сервера %1$s сети Tor. Это безопасно, если вы доверяете данному приложению.</string>
<string name="found_existing_tor_process">найден существующий процесс Tor...</string>
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 8a11909a..9efec20c 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">Software tretích strán:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">nájdený iný proces Tor...</string>
+ <string name="found_existing_tor_process">nájdený iný proces Tor...</string>
<string name="something_bad_happened">Deje sa niečo zlé. Skontrolujte podrobnosti.</string>
<string name="unable_to_read_hidden_service_name">nemožné prečítať názov skrytej služby</string>
<string name="unable_to_start_tor">Nemožné spustiť Tor:</string>
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index 4305c63e..ea0b1d80 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Софтвер од стране неслужбених издавача:</string>
<string name="tor_version">Toр: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="hidden_service_request">Апликација жели да отвори сакривен порт%1$s на серверу за Тор мрежу. Ово је сигуран потез уколико верујете апликацији.</string>
+ <string name="hidden_service_request">Апликација жели да отвори сакривен порт%1$s на серверу за Тор мрежу. Ово је сигуран потез уколико верујете апликацији.</string>
<string name="found_existing_tor_process">нађен покренути Тор процес...</string>
<string name="something_bad_happened">Нешто лоше се догодило. Прегледајте логове</string>
<string name="unable_to_read_hidden_service_name">нисам у могућности да прочитам име сакривеног сервиса</string>
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 3ede3994..f3ec3142 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Tredjepartsprogramvara:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">En app vill öppna dold serverport %1$s till Tor-nätverket. Det här är säkert om du litar på appen.</string>
<string name="found_existing_tor_process">hittade existerande Tor process...</string>
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index 58e2782a..b6e23352 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">ซอฟต์แวร์โดยผู้ผลิตอื่น:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">โปรแกรมต้องการเปิดพอร์ต %1$s ที่ซ่อนอยู่ของเซิร์ฟเวอร์ให้เชื่อมกับเครือข่าย Tor การกระทำนี้ปลอดภัยถ้าคุณเชื่อถือโปรแกรมนั้น</string>
<string name="found_existing_tor_process">พบกระบวนการ Tor ที่มีอยู่แล้ว...</string>
diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml
index 3f46744c..30bdb73c 100644
--- a/app/src/main/res/values-tl/strings.xml
+++ b/app/src/main/res/values-tl/strings.xml
@@ -88,8 +88,7 @@
<string name="third_party_software">3rd-Party-Software:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process"> nakakita ng umiiral na Tor process...</string>
+ <string name="found_existing_tor_process"> nakakita ng umiiral na Tor process...</string>
<string name="something_bad_happened">May nangyaring masama. Tingnan ang log</string>
<string name="unable_to_read_hidden_service_name">hindi mabasa ang pangalan ng tagong serbisyo</string>
<string name="unable_to_start_tor">Hindi masimulan ang Tor:</string>
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index b21dee26..e050f9e6 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Üçüncü Taraf Yazılım:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Bir uygulama Tor ağına %1$s gizli sunucu kapısını açmak istiyor. Uygulamaya güveniyorsanız bu işlem güvenlidir.</string>
<string name="found_existing_tor_process">varolan bir Tor işlemi bulundu...</string>
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 8f78937b..16c57e1c 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">Програми сторонніх розробників: </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">Програма хоче відкрити прихований серверний порт %1$s у мережу Tor. Це безпечно, якщо ви довіряєте застосунку.</string>
<string name="found_existing_tor_process">знайдено існуючий процес Tor...</string>
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index cf4f5b03..2b789ede 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">Phần mềm bên thứ 3:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">tìm ra tiến trình hiện hành của Tor...</string>
+ <string name="found_existing_tor_process">tìm ra tiến trình hiện hành của Tor...</string>
<string name="something_bad_happened">Có gì đó không ổn. Xin xem lại nhật ký</string>
<string name="unable_to_read_hidden_service_name">không thể đọc được tên dịch vụ ẩn</string>
<string name="unable_to_start_tor">Không thể khởi động Tor được: </string>
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 82eeaeda..12adef13 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -90,8 +90,7 @@
<string name="third_party_software">第三方软件:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="found_existing_tor_process">发现当前已存在 Tor 进程...</string>
+ <string name="found_existing_tor_process">发现当前已存在 Tor 进程...</string>
<string name="something_bad_happened">发生错误,请检查日志</string>
<string name="unable_to_read_hidden_service_name">无法读取隐藏服务名称</string>
<string name="unable_to_start_tor">无法启动 Tor:</string>
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index c48052c1..4c79d4d6 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -92,8 +92,7 @@
<string name="third_party_software">第三方軟體:</string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
- <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
+ <string name="obfsproxy_version">Obfs4proxy v0.0.8: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL v1.0.2j: http://www.openssl.org</string>
<string name="hidden_service_request">有一個應用要開啟隱藏的伺服器端口 %1$s 到 Tor 網路,如果信得過此應用才進行此操作</string>
<string name="found_existing_tor_process">發現已有 Tor 程序運行中 ...</string>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8575b390..bc73e840 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -21,7 +21,7 @@
<string name="btn_cancel">Cancel</string>
<!--Welcome Wizard strings (DJH)-->
<string name="wizard_details">Some Orbot Details</string>
- <string name="wizard_details_msg">Orbot is an open-source application that contains Tor, Obfs4Proxy, BadVPN Tun2Socks, LibEvent and Polipo. It provides a local HTTP proxy (8118) and a SOCKS proxy (9050) into the Tor network. Orbot also has the ability, on rooted device, to send all internet traffic through Tor.</string>
+ <string name="wizard_details_msg">Orbot is an open-source application that contains Tor, Obfs4Proxy, BadVPN Tun2Socks, LibEvent. It provides a local HTTP proxy (8118) and a SOCKS proxy (9050) into the Tor network. Orbot also has the ability, on rooted device, to send all internet traffic through Tor.</string>
<!--END Welcome Wizard strings (DJH)-->
<string name="pref_general_group">General</string>
<string name="pref_start_boot_title">Start Orbot on Boot</string>
@@ -100,7 +100,6 @@
<string name="third_party_software">3rd-Party-Software: </string>
<string name="tor_version">Tor: https://www.torproject.org</string>
<string name="libevent_version">LibEvent: http://www.monkey.org/~provos/libevent/</string>
- <string name="polipo_version">Polipo: https://github.com/jech/polipo</string>
<string name="obfsproxy_version">Obfs4proxy: https://github.com/Yawning/obfs4</string>
<string name="openssl_version">OpenSSL: http://www.openssl.org</string>
<string name="hidden_service_request">An app wants to open onion server port %1$s to the Tor network. This is safe if you trust the app.</string>
1
0
07 Oct '20
commit dd348484b59545e0cc30fc48dbf3b97c8e1a08ea
Author: bim <dsnake(a)protonmail.com>
Date: Tue Sep 15 22:57:38 2020 -0400
removed unused string resources from all locales
---
app-mini/src/main/res/values-ar/strings.xml | 15 ++-------------
app-mini/src/main/res/values-ay/strings.xml | 15 ++-------------
app-mini/src/main/res/values-az/strings.xml | 16 ++++------------
app-mini/src/main/res/values-be/strings.xml | 15 ++-------------
app-mini/src/main/res/values-bg/strings.xml | 16 ++++------------
app-mini/src/main/res/values-bn-rBD/strings.xml | 2 --
app-mini/src/main/res/values-ca/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-cs-rCZ/strings.xml | 16 ++++------------
app-mini/src/main/res/values-cs/strings.xml | 2 --
app-mini/src/main/res/values-cy/strings.xml | 2 --
app-mini/src/main/res/values-da/strings.xml | 3 ---
app-mini/src/main/res/values-de/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-el/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-en-rGB/strings.xml | 2 --
app-mini/src/main/res/values-eo/strings.xml | 2 --
app-mini/src/main/res/values-es-rAR/strings.xml | 5 +----
app-mini/src/main/res/values-es/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-et/strings.xml | 6 +-----
app-mini/src/main/res/values-eu/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-fa/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-fi/strings.xml | 12 ++----------
app-mini/src/main/res/values-fr-rFR/strings.xml | 16 ++++------------
app-mini/src/main/res/values-fr/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-gl/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-he/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-hi/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-hr/strings.xml | 12 ++----------
app-mini/src/main/res/values-hu/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-id/strings.xml | 16 ++++------------
app-mini/src/main/res/values-in-rID/strings.xml | 16 ++++------------
app-mini/src/main/res/values-is/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-it/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-iw/strings.xml | 10 ++--------
app-mini/src/main/res/values-ja/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-ko/strings.xml | 16 ++++------------
app-mini/src/main/res/values-lt/strings.xml | 2 --
app-mini/src/main/res/values-lv/strings.xml | 16 ++++------------
app-mini/src/main/res/values-mk/strings.xml | 15 ++-------------
app-mini/src/main/res/values-ms-rMY/strings.xml | 2 --
app-mini/src/main/res/values-ms/strings.xml | 2 --
app-mini/src/main/res/values-nb/strings.xml | 16 ++++------------
app-mini/src/main/res/values-nl/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-pl/strings.xml | 16 ++++------------
app-mini/src/main/res/values-pt-rBR/strings.xml | 17 ++++-------------
app-mini/src/main/res/values-pt-rPT/strings.xml | 5 +----
app-mini/src/main/res/values-pt/strings.xml | 7 +------
app-mini/src/main/res/values-ro/strings.xml | 16 ++++------------
app-mini/src/main/res/values-rs-rAR/strings.xml | 1 -
app-mini/src/main/res/values-ru/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-si-rLK/strings.xml | 2 --
app-mini/src/main/res/values-sk/strings.xml | 16 ++++------------
app-mini/src/main/res/values-sl/strings.xml | 2 --
app-mini/src/main/res/values-sr/strings.xml | 16 ++++------------
app-mini/src/main/res/values-sv/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-ta/strings.xml | 2 --
app-mini/src/main/res/values-th/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-tl/strings.xml | 6 +-----
app-mini/src/main/res/values-tr/strings.xml | 15 ++-------------
app-mini/src/main/res/values-uk/strings.xml | 19 ++++---------------
app-mini/src/main/res/values-vi/strings.xml | 16 ++++------------
app-mini/src/main/res/values-zh-rCN/strings.xml | 17 ++++-------------
app-mini/src/main/res/values-zh-rTW/strings.xml | 19 ++++---------------
app-mini/src/main/res/values/strings.xml | 13 -------------
app/src/main/res/values-ar/strings.xml | 13 +------------
app/src/main/res/values-ay/strings.xml | 13 +------------
app/src/main/res/values-az/strings.xml | 14 +++-----------
app/src/main/res/values-be/strings.xml | 13 +------------
app/src/main/res/values-bg/strings.xml | 14 +++-----------
app/src/main/res/values-bn-rBD/strings.xml | 4 +---
app/src/main/res/values-ca/strings.xml | 17 +++--------------
app/src/main/res/values-cs-rCZ/strings.xml | 14 +++-----------
app/src/main/res/values-cs/strings.xml | 4 +---
app/src/main/res/values-cy/strings.xml | 4 +---
app/src/main/res/values-da/strings.xml | 7 ++-----
app/src/main/res/values-de/strings.xml | 17 +++--------------
app/src/main/res/values-el/strings.xml | 17 +++--------------
app/src/main/res/values-en-rGB/strings.xml | 4 +---
app/src/main/res/values-eo/strings.xml | 4 +---
app/src/main/res/values-es-rAR/strings.xml | 5 +----
app/src/main/res/values-es/strings.xml | 17 +++--------------
app/src/main/res/values-et/strings.xml | 8 ++------
app/src/main/res/values-eu/strings.xml | 17 +++--------------
app/src/main/res/values-fa/strings.xml | 17 +++--------------
app/src/main/res/values-fi/strings.xml | 10 +---------
app/src/main/res/values-fr-rFR/strings.xml | 14 +++-----------
app/src/main/res/values-fr/strings.xml | 17 +++--------------
app/src/main/res/values-gl/strings.xml | 17 +++--------------
app/src/main/res/values-he/strings.xml | 17 +++--------------
app/src/main/res/values-hi/strings.xml | 17 +++--------------
app/src/main/res/values-hr/strings.xml | 10 +---------
app/src/main/res/values-hu/strings.xml | 17 +++--------------
app/src/main/res/values-id/strings.xml | 14 +++-----------
app/src/main/res/values-in-rID/strings.xml | 14 +++-----------
app/src/main/res/values-is/strings.xml | 17 +++--------------
app/src/main/res/values-it/strings.xml | 17 +++--------------
app/src/main/res/values-iw/strings.xml | 10 ++--------
app/src/main/res/values-ja/strings.xml | 17 +++--------------
app/src/main/res/values-ko/strings.xml | 14 +++-----------
app/src/main/res/values-lt/strings.xml | 4 +---
app/src/main/res/values-lv/strings.xml | 14 +++-----------
app/src/main/res/values-mk/strings.xml | 13 +------------
app/src/main/res/values-ms-rMY/strings.xml | 4 +---
app/src/main/res/values-ms/strings.xml | 4 +---
app/src/main/res/values-nb/strings.xml | 16 ++++------------
app/src/main/res/values-nl/strings.xml | 17 +++--------------
app/src/main/res/values-pl/strings.xml | 14 +++-----------
app/src/main/res/values-pt-rBR/strings.xml | 15 +++------------
app/src/main/res/values-pt-rPT/strings.xml | 5 +----
app/src/main/res/values-pt/strings.xml | 7 +------
app/src/main/res/values-ro/strings.xml | 14 +++-----------
app/src/main/res/values-ru/strings.xml | 17 +++--------------
app/src/main/res/values-si-rLK/strings.xml | 4 +---
app/src/main/res/values-sk/strings.xml | 14 +++-----------
app/src/main/res/values-sl/strings.xml | 4 +---
app/src/main/res/values-sr/strings.xml | 14 +++-----------
app/src/main/res/values-sv/strings.xml | 17 +++--------------
app/src/main/res/values-ta/strings.xml | 4 +---
app/src/main/res/values-th/strings.xml | 17 +++--------------
app/src/main/res/values-tl/strings.xml | 8 ++------
app/src/main/res/values-tr/strings.xml | 13 +------------
app/src/main/res/values-uk/strings.xml | 17 +++--------------
app/src/main/res/values-vi/strings.xml | 14 +++-----------
app/src/main/res/values-zh-rCN/strings.xml | 15 +++------------
app/src/main/res/values-zh-rTW/strings.xml | 17 +++--------------
app/src/main/res/values/strings.xml | 13 -------------
125 files changed, 303 insertions(+), 1272 deletions(-)
diff --git a/app-mini/src/main/res/values-ar/strings.xml b/app-mini/src/main/res/values-ar/strings.xml
index 9c544e93..b8039520 100644
--- a/app-mini/src/main/res/values-ar/strings.xml
+++ b/app-mini/src/main/res/values-ar/strings.xml
@@ -5,8 +5,6 @@
<string name="status_activated">متصل بشبكة تور</string>
<string name="status_disabled">تم إيقاف اوربوت</string>
<string name="status_shutting_down">جاري ايقاف خدمة تور</string>
- <string name="tor_process_starting">جاري تشغيل تور...</string>
- <string name="tor_process_complete">كامل.</string>
<string name="menu_settings">إعدادات</string>
<string name="menu_log">السجل</string>
<string name="menu_start">بدء</string>
@@ -103,12 +101,9 @@
<string name="pref_use_expanded_notifications">قم بأظهار التنبيه بشكل موسع بأستخدام تور. أخرج من البلد ورقم الآي بي رقم العنوان على الشبكة</string>
<string name="pref_use_expanded_notifications_title">تنبيه موسّع</string>
<string name="set_locale_title">اللغة</string>
- <string name="no_internet_connection_tor">لا يوجد ارتباط بألانترنيت: تور في وضع الوقف المؤقت</string>
<string name="pref_disable_network_title">لاتوجد شبكة نوم-آلي</string>
<string name="pref_disable_network_summary">ضع تور في وضعية النوم عند عدم وجود الأنترنت</string>
<string name="newnym">لقد تحولت الى هوية تور جديدة</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">لا يوجد اتصال بألشبكة. سينتقل تور الى وضعية النوم</string>
- <string name="network_connectivity_is_good_waking_tor_up_">حال الإتصال بالشبكة جيد. يتم إيقاذ تور...</string>
<string name="updating_settings_in_tor_service">تحديث الاعدادات في خدمات تور</string>
<string name="pref_socks_title">تور سوكس</string>
<string name="pref_socks_summary">منفذ الشبكات الحاسوبية او بورت الذي يقدمه تور الى وحدة الخدمة النائبة البروكسي في سوكس. (الوضعية الأصلية: 9050 او 0 للتعطيل)</string>
@@ -129,17 +124,11 @@
<string name="bridges_updated">تم تحديث الجسور</string>
<string name="restart_orbot_to_use_this_bridge_">الرجاء إعادة تشغيل أوربوت لتفعيل التعديلات</string>
<string name="menu_qr">رمز كيو آر</string>
- <string name="bridge_mode">نمط الجسر</string>
<string name="get_bridges_email">البريد الإلكتروني</string>
- <string name="get_bridges_web">الويب</string>
- <string name="activate">تفعيل</string>
+ <string name="activate">تفعيل</string>
<string name="apps_mode">وضع الـ VPN</string>
<string name="send_email">أرسل بريد الكتروني</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">تستطيع الحصول على عنوان جسر عبر البريد الإلكتروني، عبر الويب، أو بعمل مسح لكيوآر كود خاص بجسر.
-إختر \"بريد إلكتروني\" أو \"ويب\" بالأسفل لطلب عنوان جسر.
-
-ما أن تحصل على جسر، أنسخه وألصقه في خانة \"الجسور\" في إعدادات أوربوت وأعد التشغيل.</string>
- <string name="vpn_default_world">شامل (تلقائي)</string>
+ <string name="vpn_default_world">شامل (تلقائي)</string>
<string name="hidden_services">خدمات خفية</string>
<string name="title_activity_hidden_services">خدمات خفية</string>
<string name="menu_hidden_services">خدمات خفية</string>
diff --git a/app-mini/src/main/res/values-ay/strings.xml b/app-mini/src/main/res/values-ay/strings.xml
index 7a206666..a7efa644 100644
--- a/app-mini/src/main/res/values-ay/strings.xml
+++ b/app-mini/src/main/res/values-ay/strings.xml
@@ -5,8 +5,6 @@
<string name="status_activated">Tor llikatuqir waythapitawa</string>
<string name="status_disabled">Orbotax jiwt\'atawa</string>
<string name="status_shutting_down">Tor wakichawix jist\'antasiskiwa</string>
- <string name="tor_process_starting">Tor apnaqirix qalltayaskiwa...</string>
- <string name="tor_process_complete">tukuyata.</string>
<string name="menu_settings">Mayjt\'ayaña</string>
<string name="menu_log">Imata</string>
<string name="menu_start">Qalltaña</string>
@@ -106,12 +104,9 @@
<string name="pref_use_expanded_notifications">Kawkja markans IP ukamp Toramp uñstani uka yatiyäw juk\'amp uñacht\'ayaña</string>
<string name="pref_use_expanded_notifications_title">Phuqhat yatiyäwinaka</string>
<string name="set_locale_title">Aru</string>
- <string name="no_internet_connection_tor">Llikax janiw utjkiti; Tor ukax suyt\'atawa...</string>
<string name="pref_disable_network_title">Jan jiwt\'ayas suyt\'aña</string>
<string name="pref_disable_network_summary">Llika jan uktjki ukjax Tor suyt\'ayam</string>
<string name="newnym">¡Jichhax Tor sutimax yaqhäxiwa!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Janiw llikax utjkiti. Torax suyt\'ayatawa...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Llikax khus uñstaniski. Torax aqtaskiwa...</string>
<string name="updating_settings_in_tor_service">Toran wakichäwinakax mayjt\'ayaskiwa</string>
<string name="pref_socks_title">Toran SOCKS ukapa</string>
<string name="pref_socks_summary">Toran proxy SOCKS apayañ thakhipa: (nayra utt\'atatakix 9050, jiwt\'ayañatakix 0)</string>
@@ -133,14 +128,11 @@
<string name="restart_orbot_to_use_this_bridge_">Mayjt\'ayatanak aqtayañatak Orbot mayamp qhant\'ayam, amp suma</string>
<string name="menu_qr">QR chimpunaka</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Jawsañ apnaqirinakax Tor jark\'antañ yatipk ukjax \'Jalakipañ yanapiri\' mantañatak apnaqarakismawa. Yant\'añataki, mayjt\'ayañatakix AJLLT\'AM...</string>
- <string name="bridge_mode">Jalakipaña</string>
<string name="get_bridges_email">Imaylu (Email)</string>
- <string name="get_bridges_web">Llika janja</string>
<string name="activate">Qhantayaña</string>
<string name="apps_mode">VPN</string>
<string name="send_email">Qillqat apayaña</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Jalakipañan QR waruqasa, jan ukax llikatuqi, imailtuqis jalakipañ utjirinakx jikxatarakismawa. Jalakipañ thakh jikxatañatakix \'Imail\' jan ukax \'llika\' ajllt\'am.\n\n Orbotan majt\'ayañawjapan \"Jalakipañ Thakhi\" limt\'añar apkatam, ukat mayamp qalltam.</string>
- <string name="vpn_default_world">Uraqpacha (justupaki)</string>
+ <string name="vpn_default_world">Uraqpacha (justupaki)</string>
<string name="hidden_services">Imantat lurañanaka</string>
<string name="title_activity_hidden_services">Imantat lurañanaka</string>
<string name="menu_hidden_services">Imantat lurañanaka</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Ch\'amanchir pist\'k ukjax jiwt\'añkam jan aqañapatak amuyt\'am</string>
<string name="pref_isolate_dest">Apayañ chiqanak jark\'aqaña</string>
<string name="pref_isolate_dest_summary">Sapa apayañ chiqatak kunayman thakhinak apnaqaña</string>
- <string name="no_transproxy_warning_short">UKATARAKI: Transproxy luräwix janiw mayampis iyaw jisxiti</string>
- <string name="no_transproxy_warning">UKATARAKI: Qhan apnaqat proxyx janiw iyaw satäkiti. Uka lantix Orbot wakichäw VPN apnaqam.</string>
<string name="pref_connection_padding">Waythapiñ ch\'amachiri</string>
<string name="pref_connection_padding_summary">Yaqhip apayat uñsusirinakat jark\'aqasiñataki, waythapiñ ch\'amachir aqtayapunim. Utt\'ayata: justupacha</string>
<string name="pref_reduced_connection_padding">Juk\'aptayat waythapiñ ch\'amañchiri</string>
@@ -198,8 +188,7 @@
<string name="bridge_direct_connect">Tor ukar chiqak waykattaña (juk\'amp khusa)</string>
<string name="bridge_community">Yanapirinakan atamirinakapamp waythapiña</string>
<string name="bridge_cloud">Llikan imirinakamp waythapiña</string>
- <string name="bridges_get_new">Machaq jalakipañanak mayiña... (yaqhanak jan walt\'kasp ukja)</string>
- <string name="trouble_connecting">¿Waythapiykasat jan walt\'xï?</string>
+ <string name="trouble_connecting">¿Waythapiykasat jan walt\'xï?</string>
<string name="full_device_vpn">Taqpach wakichäwinakaw VPN ukamp apnaqatäni</string>
<string name="vpn_disabled">VPN jiwt\'ayatawa</string>
</resources>
diff --git a/app-mini/src/main/res/values-az/strings.xml b/app-mini/src/main/res/values-az/strings.xml
index 13ce69b9..84f63aeb 100644
--- a/app-mini/src/main/res/values-az/strings.xml
+++ b/app-mini/src/main/res/values-az/strings.xml
@@ -5,9 +5,7 @@
<string name="status_activated">Tor şəbəkəsinə bağlandı</string>
<string name="status_disabled">Orbot deaktivasiya edildi</string>
<string name="status_shutting_down">Tor xidməti işini başa vurur</string>
- <string name="tor_process_starting">Tor xidməti başlayır...</string>
- <string name="tor_process_complete">tamamla.</string>
- <string name="menu_settings">Quraşdırmalar</string>
+ <string name="menu_settings">Quraşdırmalar</string>
<string name="menu_log">Jurnal</string>
<string name="menu_start">Başla</string>
<string name="menu_stop">Dur</string>
@@ -103,12 +101,9 @@ LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="pref_use_expanded_notifications">Torla birlikdə ətraflı bildirişi göstərib ölkə və IP-dən çıxın. </string>
<string name="pref_use_expanded_notifications_title">Ətraflı bildirişlər</string>
<string name="set_locale_title">Dil</string>
- <string name="no_internet_connection_tor">İnternet yoxdur; Tor gözləyir</string>
- <string name="pref_disable_network_title">Avto-Yuxu Şəbəkəsi Yoxdur</string>
+ <string name="pref_disable_network_title">Avto-Yuxu Şəbəkəsi Yoxdur</string>
<string name="pref_disable_network_summary">İnternet olmadıqda icazə ver Tor yatsın</string>
<string name="newnym">Yeni Tor oxşarına qoşuldun!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">İnternetlə əlaqə yoxdur. Tor gözləmə rejiminə keçir...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">İnternetlə əlaqə yaxşıdır. Tor iş rejiminə keçir...</string>
<string name="updating_settings_in_tor_service">Tor xidmətində quraşdırmalar yüklənir</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Torun təklif etdiyi Port SOCKS proksi işləyir (standart: 9050, yaxud söndürmək üçün 0) </string>
@@ -129,13 +124,10 @@ LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="bridges_updated">Körpülər yeniləndi</string>
<string name="restart_orbot_to_use_this_bridge_">Lütfən, Orbotu söndürün və yenidən yandırın ki, dəyişikliklər tətbiq edilsin.</string>
<string name="menu_qr">QR kodlar</string>
- <string name="bridge_mode">Körpü rejimi</string>
<string name="get_bridges_email">Emeyl</string>
- <string name="get_bridges_web">Veb</string>
- <string name="activate">Aktivləşdir</string>
+ <string name="activate">Aktivləşdir</string>
<string name="send_email">Emeyl göndərin</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Körpü ünvanını siz emeyl və veb vasitəsiylə, ya da körpünün QR kodunu skan etməklə əldə edə bilərsiniz. Körpü ünvanı haqda sorğunun altında \'Email\'i, yaxud \'Web\'i seçin.\n\nÜnvanı əldə edəndən sonra &amp-i nüsxələyin və onu Orbot quraşdırmasındakı \"Bridges\" parametrinə qoyun və cihazı yenidən yükləyin.</string>
- <string name="save">Saxla</string>
+ <string name="save">Saxla</string>
<string name="name">Ad</string>
<string name="please_restart_Orbot_to_enable_the_changes">Lütfən, Orbotu söndürün və yenidən yandırın ki, dəyişikliklər tətbiq edilsin.</string>
<string name="disable">Söndür</string>
diff --git a/app-mini/src/main/res/values-be/strings.xml b/app-mini/src/main/res/values-be/strings.xml
index a2440c79..fa707642 100644
--- a/app-mini/src/main/res/values-be/strings.xml
+++ b/app-mini/src/main/res/values-be/strings.xml
@@ -5,8 +5,6 @@
<string name="status_activated">Падлучаны да сеткі Tor</string>
<string name="status_disabled">Orbot адключаны</string>
<string name="status_shutting_down">Служба Tor выключаецца</string>
- <string name="tor_process_starting">Запускаецца кліент Tor...</string>
- <string name="tor_process_complete">завершана.</string>
<string name="menu_settings">Налады</string>
<string name="menu_log">Журнал</string>
<string name="menu_start">Пуск</string>
@@ -106,12 +104,9 @@
<string name="pref_use_expanded_notifications">Паказаць пашыранае апавяшчэнне Tor з краінай выхаду і IP</string>
<string name="pref_use_expanded_notifications_title">Пашыраныя апавяшчэнні</string>
<string name="set_locale_title">Мова</string>
- <string name="no_internet_connection_tor">Адсутнічае падключэнне да інтэрнэту, Tor знаходзіцца ў рэжыме чакання…</string>
<string name="pref_disable_network_title">Аўтазасынанне без сеткі</string>
<string name="pref_disable_network_summary">Пераводзіць Tor у спячы рэжым пры немені інтэрнэту</string>
<string name="newnym">Вы перамкнуліся на новы ідэнтыфікатар Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Няма падключэння да сеткі. Tor пераходзіць у рэжым сну...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Падключэнне да сеткі ўсталявана. Tor прачынаецца...</string>
<string name="updating_settings_in_tor_service">абнаўленне налад у сэрвісе Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Порт, на якім Tor прапануе свой SOCKS-проксі (па змаўчанні: 9050, 0 - для адключэння)</string>
@@ -133,14 +128,11 @@
<string name="restart_orbot_to_use_this_bridge_">Калі ласка, перазапусціце Orbot для ўступу змены ў сілу</string>
<string name="menu_qr">QR-коды</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Калі ваша мабільная сетка актыўна блакуе Tor, вы можаце выкарыстоўваць масты Tor для доступу да сеткі. Абярыце адзін з варыянтаў для налады і тэставання:</string>
- <string name="bridge_mode">Рэжым моста</string>
<string name="get_bridges_email">Эл. пошта</string>
- <string name="get_bridges_web">Сайт</string>
<string name="activate">Актывацыя</string>
<string name="apps_mode">VPN-рэжым</string>
<string name="send_email">Адправіць ліст</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Вы можаце атрымаць адрас моста па электроннай пошце, з сайта ці шляхам сканавання QR-кода. Абярыце \"Эл. пошта\" ці \"Сайт\" ніжэй, каб запытаць адрас моста.\n\nАтрыманы адрас скапіюйце і ўстаўце яго ў падзеле налад Orbot \"Масты\", пасля чаго перазапусціце дадатак.</string>
- <string name="vpn_default_world">Свет (аўта)</string>
+ <string name="vpn_default_world">Свет (аўта)</string>
<string name="hidden_services">Схаваныя службы</string>
<string name="title_activity_hidden_services">Схаваныя службы</string>
<string name="menu_hidden_services">Схаваныя службы</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Разгледзьце магчымасць уключэння аптымізацыі батарэі</string>
<string name="pref_isolate_dest">Ізаляваць адрасы прызначэння</string>
<string name="pref_isolate_dest_summary">Ужываць розныя ланцугі для кожнага адраса прызначэння</string>
- <string name="no_transproxy_warning_short">ПАПЯРЭДЖАННЕ: празрысты проксі больш не падтрымліваецца</string>
- <string name="no_transproxy_warning">ПАПЯРЭДЖАННЕ: празрысты проксі больш не падтрымліваецца. Замест гэтага выкарыстоўвайце VPN-рэжым Orbot.</string>
<string name="pref_connection_padding">Пракладка злучэння</string>
<string name="pref_connection_padding_summary">Заўсёды ўключае пракладку злучэння для абароны ад некаторых формаў аналізу трафіка. Звычайна: аўта</string>
<string name="pref_reduced_connection_padding">Сокращённая прокладка соединения</string>
@@ -198,8 +188,7 @@
<string name="bridge_direct_connect">Падключэнне непасрэдна да Tor (найлепей)</string>
<string name="bridge_community">Падключэнне праз серверы супольнасці</string>
<string name="bridge_cloud">Падключэнне праз воблачныя серверы</string>
- <string name="bridges_get_new">Запытаць новыя масты… (калі ўсе іншыя не атрымалася)</string>
- <string name="trouble_connecting">Праблема з падключэннем?</string>
+ <string name="trouble_connecting">Праблема з падключэннем?</string>
<string name="full_device_vpn">VPN для ўсёй прылады</string>
<string name="vpn_disabled">VPN адключаны</string>
</resources>
diff --git a/app-mini/src/main/res/values-bg/strings.xml b/app-mini/src/main/res/values-bg/strings.xml
index d2cfe5e1..fd346abb 100644
--- a/app-mini/src/main/res/values-bg/strings.xml
+++ b/app-mini/src/main/res/values-bg/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Свързан към Тор мрежата</string>
<string name="status_disabled">Орбот е деактивиран</string>
<string name="status_shutting_down">TorService спира</string>
- <string name="tor_process_starting">Стартиране на Тор клиент...</string>
- <string name="tor_process_complete">завършено.</string>
- <string name="menu_settings">Настройки</string>
+ <string name="menu_settings">Настройки</string>
<string name="menu_log">Лог</string>
<string name="menu_start">Старт</string>
<string name="menu_stop">Стоп</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Покажи разширена информация за Tor изходната държава и IP в лентата за известия</string>
<string name="pref_use_expanded_notifications_title">Разширени известия</string>
<string name="set_locale_title">Език</string>
- <string name="no_internet_connection_tor">Няма интернет връзка; Tor е в режим на изчакване...</string>
- <string name="pref_disable_network_title">Лиспва Автоматичен Режим на Изчакване</string>
+ <string name="pref_disable_network_title">Лиспва Автоматичен Режим на Изчакване</string>
<string name="pref_disable_network_summary">Сложи Tor в режим на изчакване, когато няма интернет</string>
<string name="newnym">Сменихте своята Тор идентичност!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Няма интернет връзка. Преминаване в режим на изчкаване...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Добра интернет връзка. Събуждане на Tor...</string>
<string name="updating_settings_in_tor_service">обновяване на настройките в Tor услугата</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Порт, на който Tor предлага своето SOCKS прокси(подразбиране: 9050 или 0, за да забраниш)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Мостове включени!</string>
<string name="restart_orbot_to_use_this_bridge_">Моля, рестартирай Orbot, за да влязат в действие промените</string>
<string name="menu_qr">QR Кодове</string>
- <string name="bridge_mode">Режим мост</string>
<string name="get_bridges_email">Имейл</string>
- <string name="get_bridges_web">Уеб</string>
- <string name="activate">Активирай</string>
+ <string name="activate">Активирай</string>
<string name="send_email">Изпрати имейл</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Можеш да получиш адреса на мост по имейл, интернет или като сканираш QR kod. Избери \'Имейл\' или \'Интернет\' по-долу, за да поискаш адрес на мост.\n\nВеднъж щом получиш адреса го копирай в \"Мостове\", в настройките на Orbot и рестартирай приложението.</string>
- <string name="hidden_services">Скрити услуги</string>
+ <string name="hidden_services">Скрити услуги</string>
<string name="title_activity_hidden_services">Скрити услуги</string>
<string name="menu_hidden_services">Скрити услуги</string>
<string name="save">Запази</string>
diff --git a/app-mini/src/main/res/values-bn-rBD/strings.xml b/app-mini/src/main/res/values-bn-rBD/strings.xml
index 4d2bc8f2..a511f6d3 100644
--- a/app-mini/src/main/res/values-bn-rBD/strings.xml
+++ b/app-mini/src/main/res/values-bn-rBD/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">টর নেটওয়ার্কের সাথে সংযুক্ত হয়েছে</string>
<string name="status_disabled">অরবট নিষ্ক্রিয় করা হয়েছে</string>
<string name="status_shutting_down">টর সার্ভিস বন্ধ করা হচ্ছে</string>
- <string name="tor_process_starting">টর ক্লায়েন্ট চালু করা হচ্ছে</string>
- <string name="tor_process_complete">সম্পূর্ণ</string>
<string name="menu_settings">নিয়ম বিন্যাস</string>
<string name="menu_log">লগ</string>
<string name="menu_start">শুরু</string>
diff --git a/app-mini/src/main/res/values-ca/strings.xml b/app-mini/src/main/res/values-ca/strings.xml
index 9e20becf..94c2d610 100644
--- a/app-mini/src/main/res/values-ca/strings.xml
+++ b/app-mini/src/main/res/values-ca/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Esteu connectat a la xarxa Tor</string>
<string name="status_disabled">L\'Orbot està desactivat</string>
<string name="status_shutting_down">El servei Tor s\'està desactivant</string>
- <string name="tor_process_starting">S\'està iniciant el client Tor...</string>
- <string name="tor_process_complete">fet.</string>
- <string name="menu_settings">Preferències</string>
+ <string name="menu_settings">Preferències</string>
<string name="menu_log">Registre</string>
<string name="menu_start">Inicia</string>
<string name="menu_stop">Atura</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Mostra la informació de sortida addicional del Tor amb el país i la IP</string>
<string name="pref_use_expanded_notifications_title">Notificacions addicionals</string>
<string name="set_locale_title">Llengua</string>
- <string name="no_internet_connection_tor">No s\'ha trobat cap connexió a Internet; el Tor és a l\'espera</string>
- <string name="pref_disable_network_title">No hi ha autodesconnexió de xarxa</string>
+ <string name="pref_disable_network_title">No hi ha autodesconnexió de xarxa</string>
<string name="pref_disable_network_summary">Posa el Tor en pausa mentre no hi ha connexió a internet</string>
<string name="newnym">Heu canviat a una nova identitat Tor.</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">No s\'ha trobat connectivitat a la xarxa. El Tor entra en suspensió...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">La connectivitat de la xarxa és bona. S\'està despertant el Tor...</string>
<string name="updating_settings_in_tor_service">S\'està actualitzant la configuració als serveis del Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_socks_summary">Port que ofereix el servidor intermediari SOCKS al Tor (per defecte: 9050 or 0 per inhabilitar)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Reinicieu l\'Orbot per aplicar els canvis</string>
<string name="menu_qr">Codis QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Si la teva xarxa mòbil boqueja activament Tor, pots utilitzar un \'Servidor pont\' com a via alternativa. SELECCIONA una de les opcions per configurar i provar.</string>
- <string name="bridge_mode">Mode pont</string>
<string name="get_bridges_email">Correu-e</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activa</string>
<string name="apps_mode">Mode VPN</string>
<string name="send_email">Envia correu-e</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Podeu obtenir un enllaç pont mitjançant el correu electrònic, el web o escanejant un codi QR. Trieu Correu-e o Web a sota per demanar una adreça.\n\nQuan tingueu un enllaç d\'aquest tipus, copieu-ho i enganxeu-ho a l\'apartat «Ponts» de la configuració de l\'Orbot i reinicieu.</string>
- <string name="vpn_default_world">Global (auto)</string>
+ <string name="vpn_default_world">Global (auto)</string>
<string name="hidden_services">Serveis ocults</string>
<string name="title_activity_hidden_services">Serveis ocults</string>
<string name="menu_hidden_services">Serveis ocults</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Penseu a habilitar les optimitzacions de la bateria</string>
<string name="pref_isolate_dest">Aïllar adreces de destinació</string>
<string name="pref_isolate_dest_summary">Utilitzeu un circuit diferent per a cada adreça de destinació</string>
- <string name="no_transproxy_warning_short">ATENCIÓ: Transproxying ja no és compatible</string>
- <string name="no_transproxy_warning">ATENCIÓ: no s\'admet Transparent proxying. Utilitzeu les aplicacions Orbot VPN.</string>
<string name="pref_connection_padding">Farciment de connexió</string>
<string name="pref_connection_padding_summary">Activeu sempre el farciment de connexió per defensar-vos d\'algunes formes d\'anàlisi de trànsit. Per defecte: automàtic</string>
<string name="pref_reduced_connection_padding">Farciment de connexió reduit</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Connecta directament a Tor (Lo millor)</string>
<string name="bridge_community">Connecta mitjançant servidors de comunitat</string>
<string name="bridge_cloud">Connecta mitjançant servidors núvol</string>
- <string name="bridges_get_new">Demana nous ponts (Si tot lo altra falla)</string>
- <string name="trouble_connecting">Problemes connectant?</string>
+ <string name="trouble_connecting">Problemes connectant?</string>
<string name="full_device_vpn">Dispositiu completament VPN</string>
<string name="vpn_disabled">VPN desactivat</string>
</resources>
diff --git a/app-mini/src/main/res/values-cs-rCZ/strings.xml b/app-mini/src/main/res/values-cs-rCZ/strings.xml
index c333b4c7..d5586b62 100644
--- a/app-mini/src/main/res/values-cs-rCZ/strings.xml
+++ b/app-mini/src/main/res/values-cs-rCZ/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Připojen k síti Tor</string>
<string name="status_disabled">Orbot je deaktivován</string>
<string name="status_shutting_down">TorService se vypíná...</string>
- <string name="tor_process_starting">Startuji Tor klienta...</string>
- <string name="tor_process_complete">hotovo.</string>
- <string name="menu_settings">Nastavení</string>
+ <string name="menu_settings">Nastavení</string>
<string name="menu_log">Log</string>
<string name="menu_start">Zapnout</string>
<string name="menu_stop">Vypnout</string>
@@ -101,12 +99,9 @@
<string name="pref_use_expanded_notifications">Zobrazit rozšířené oznánemí s Tor výstupní zemí a IP</string>
<string name="pref_use_expanded_notifications_title">Rozšířené oznámení</string>
<string name="set_locale_title">Jazyk</string>
- <string name="no_internet_connection_tor">Žádné připojení k internetu; Tor je standby...</string>
- <string name="pref_disable_network_title">Vypnout uspávání sítě</string>
+ <string name="pref_disable_network_title">Vypnout uspávání sítě</string>
<string name="pref_disable_network_summary">Uspat Tor když není k dispozici přístup k Internetu</string>
<string name="newnym">Vaše identita na Toru byla změněna!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Žádný síťový provoz. Ukládám Tor k spánku…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Síťový provoz v pořádku. Probouzím Tor…</string>
<string name="updating_settings_in_tor_service">aktualizuji nastavení služby Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Port, na kterém Tor nabízí SOCKS proxy (default: 9050, 0 pro zakázání)</string>
@@ -127,13 +122,10 @@
<string name="bridges_updated">Bridge aktualizovány</string>
<string name="restart_orbot_to_use_this_bridge_">Pro projevení změn restartujte Orbot</string>
<string name="menu_qr">QR kódy</string>
- <string name="bridge_mode">Bridge mód</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Aktivovat</string>
+ <string name="activate">Aktivovat</string>
<string name="send_email">Pošli email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Abresu bridge můžete získat emailem, na webu, nebo naskenováním bridge QR kódu. Zvolte níže \'Email\', nebo \'Web\' pro vyžádání adresy bridge.\n\nJakmile máte adresu, zkopírujte & vložte ji do položky \"Bridge\" v nastavení Orbot a restartujte aplikaci.</string>
- <string name="save">Uložit</string>
+ <string name="save">Uložit</string>
<string name="name">Jméno</string>
<string name="please_restart_Orbot_to_enable_the_changes">Pro projevení změn restartujte Orbot</string>
</resources>
diff --git a/app-mini/src/main/res/values-cs/strings.xml b/app-mini/src/main/res/values-cs/strings.xml
index 5fe50ed5..fbccc329 100644
--- a/app-mini/src/main/res/values-cs/strings.xml
+++ b/app-mini/src/main/res/values-cs/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Připojen k síti Tor</string>
<string name="status_disabled">\"Orbot je deaktivován</string>
<string name="status_shutting_down">Orbot se vypíná</string>
- <string name="tor_process_starting">Startuji Tor klienta…</string>
- <string name="tor_process_complete">hotovo.</string>
<string name="menu_settings">Nastavení</string>
<string name="menu_log">Log</string>
<string name="menu_start">Zapnout</string>
diff --git a/app-mini/src/main/res/values-cy/strings.xml b/app-mini/src/main/res/values-cy/strings.xml
index 9bd3852d..a2495b99 100644
--- a/app-mini/src/main/res/values-cy/strings.xml
+++ b/app-mini/src/main/res/values-cy/strings.xml
@@ -3,8 +3,6 @@
<string name="app_name">Orbot</string>
<string name="status_starting_up">Mae Orbot yn cychwyn...</string>
<string name="status_activated">Wedi cysylltu â rhwydwaith Tor</string>
- <string name="tor_process_starting">Yn cychwyn cleient Tor</string>
- <string name="tor_process_complete">Wedi ei gwblhau.</string>
<string name="menu_settings">Gosodiadau</string>
<string name="menu_log">Log</string>
<string name="menu_start">Cychwyn</string>
diff --git a/app-mini/src/main/res/values-da/strings.xml b/app-mini/src/main/res/values-da/strings.xml
index d212aac5..fee2ae48 100644
--- a/app-mini/src/main/res/values-da/strings.xml
+++ b/app-mini/src/main/res/values-da/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Der er forbindelse til Tor-netværket</string>
<string name="status_disabled">Orbot er slået fra</string>
<string name="status_shutting_down">TorServe lukker ned</string>
- <string name="tor_process_starting">Starter Tor klienten...</string>
- <string name="tor_process_complete">udført.</string>
<string name="menu_settings">Indstillinger</string>
<string name="menu_log">Log</string>
<string name="menu_start">Start</string>
@@ -96,7 +94,6 @@
<string name="pref_use_persistent_notifications">Vis altid ikonet i statuslinien når Orbot er forbundet til netværket</string>
<string name="pref_use_persistent_notifications_title">Vis altid notifikationer</string>
<string name="set_locale_title">Sprog</string>
- <string name="no_internet_connection_tor">Ingen internetforbindelse; Tor er på standby...</string>
<string name="kb">KB</string>
<string name="mb">MB</string>
<string name="get_bridges_email">Mail</string>
diff --git a/app-mini/src/main/res/values-de/strings.xml b/app-mini/src/main/res/values-de/strings.xml
index bf416e95..38f67706 100644
--- a/app-mini/src/main/res/values-de/strings.xml
+++ b/app-mini/src/main/res/values-de/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Verbunden mit dem Tor-Netzwerk</string>
<string name="status_disabled">Orbot ist Deaktiviert</string>
<string name="status_shutting_down">TorService wird heruntergefahren</string>
- <string name="tor_process_starting">Tor-Programm wird gestartet …</string>
- <string name="tor_process_complete">abgeschlossen.</string>
- <string name="menu_settings">Einstellungen</string>
+ <string name="menu_settings">Einstellungen</string>
<string name="menu_log">Protokoll</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stopp</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Zeige erweiterte Benachrichtigung mit Tor-Ausgangsland und IP an</string>
<string name="pref_use_expanded_notifications_title">Erweiterte Benachrichtigungen</string>
<string name="set_locale_title">Sprache</string>
- <string name="no_internet_connection_tor">Keine Internetverbindung; Tor ist in Bereitschaft...</string>
- <string name="pref_disable_network_title">Kein Automatischer Netzwerk Ruhezustand</string>
+ <string name="pref_disable_network_title">Kein Automatischer Netzwerk Ruhezustand</string>
<string name="pref_disable_network_summary">Versetze Tor in den Ruhezustand wenn kein Internet verfügbar ist</string>
<string name="newnym">Sie haben zu einer Neuen Tor-Identität gewechselt!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Keine Netzwerk-Verbindung. Tor wird in den Ruhezustand versetzt…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Netzwerk-Verbindung ist Gut. Tor wird aktiviert …</string>
<string name="updating_settings_in_tor_service">Aktualisiere Einstellungen für den Tor-Dienst</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Anschluss auf dem der SOCKS-Proxy von Tor bereitgestellt wird (Standard: 9050 oder 0 zum deaktivieren)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Bitte Tor Erneut Starten um die Änderungen wirksam werden zu lassen</string>
<string name="menu_qr">QR Codes</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Wenn Ihr mobiles Netzwerk Tor blockiert, können Sie einen \"Brücken-Server\" als alternativen Weg verwenden. Wählen Sie eine der Optionen zum Konfigurieren und Testen ..,.</string>
- <string name="bridge_mode">Brücken-Modus</string>
<string name="get_bridges_email">E-Mail</string>
- <string name="get_bridges_web">Netz</string>
<string name="activate">Aktivieren</string>
<string name="apps_mode">VPN Modus</string>
<string name="send_email">E-Mail senden</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Sie können eine Brücken-Adresse per E-Mail, im Web oder per Scan eines BrückenQR-Codes erhalten. Wählen Sie unten \'E-Mail\' oder \'Web\', um eine Brückenadresse anzufordern.\n\nSobald Sie eine Adresse haben, fügen Sie diese bei den Einstellungen für Brücken ein und starten Sie Orbot neu.</string>
- <string name="vpn_default_world">Global (Automatisch)</string>
+ <string name="vpn_default_world">Global (Automatisch)</string>
<string name="hidden_services">Versteckte Dienste</string>
<string name="title_activity_hidden_services">Versteckte Dienste</string>
<string name="menu_hidden_services">Versteckte Dienste</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Aktivieren Sie die Akku-Optimierung</string>
<string name="pref_isolate_dest">Isolierte Zieladressen</string>
<string name="pref_isolate_dest_summary">Verwenden Sie für jeden Netzwerk-Kreislauf eine andere Zieladresse</string>
- <string name="no_transproxy_warning_short">ACHTUNG: Transproxying wird nicht mehr unterstützt</string>
- <string name="no_transproxy_warning">ACHTUNG: Transparente Proxy-Unterstützung wird nicht mehr unterstützt. Verwenden Sie stattdessen Orbot Apps VPN.</string>
<string name="pref_connection_padding">Verbindungsauffüllung</string>
<string name="pref_connection_padding_summary">Aktiviert immer die Verbindungsauffüllung, um einige Formen der Verkehrsanalyse zu verhindern. Standard: Automatisch</string>
<string name="pref_reduced_connection_padding">Reduzierte Verbindungsauffüllung</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Direkt mit Tor verbinden (am Besten)</string>
<string name="bridge_community">Verbinden Sie sich über Community-Server</string>
<string name="bridge_cloud">Verbinden Sie sich über Cloud-Server</string>
- <string name="bridges_get_new">Fordere Neue Brücken an... (Wenn alles andere fehlschlägt)</string>
- <string name="trouble_connecting">Probleme beim Verbinden?</string>
+ <string name="trouble_connecting">Probleme beim Verbinden?</string>
<string name="full_device_vpn">Vollständiger Geräte-VPN</string>
<string name="vpn_disabled">VPN Deaktiviert</string>
</resources>
diff --git a/app-mini/src/main/res/values-el/strings.xml b/app-mini/src/main/res/values-el/strings.xml
index 140ae79a..2c14872d 100644
--- a/app-mini/src/main/res/values-el/strings.xml
+++ b/app-mini/src/main/res/values-el/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Συνδέθηκε στο δίκτυο Tor</string>
<string name="status_disabled">\"Το Orbot είναι Απενεργοποιημένο</string>
<string name="status_shutting_down">Η υπηρεσία Tor τερματίζεται</string>
- <string name="tor_process_starting">Εκκίνηση του πελάτη Tor...</string>
- <string name="tor_process_complete">ολοκληρώθηκε...</string>
- <string name="menu_settings">Ρυθμίσεις</string>
+ <string name="menu_settings">Ρυθμίσεις</string>
<string name="menu_log">Καταγραφή</string>
<string name="menu_start">Εκκίνηση</string>
<string name="menu_stop">Διακοπή</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Εμφάνιση εκτεταμένης ειδοποίησης με τη χώρα εξόδου του Tor και τη διεύθυνση IP</string>
<string name="pref_use_expanded_notifications_title">Επεκταμένες Ειδοποιήσεις</string>
<string name="set_locale_title">Γλώσσα </string>
- <string name="no_internet_connection_tor">Δεν υπάρχει σύνδεση στο διαδίκτυο. Ο Tor είναι σε αναμονή...</string>
- <string name="pref_disable_network_title">Χωρίς Αυτόματη Αναστολή Δικτύου</string>
+ <string name="pref_disable_network_title">Χωρίς Αυτόματη Αναστολή Δικτύου</string>
<string name="pref_disable_network_summary">Θέσε το Tor σε λειτουργία sleep όταν δεν υπάρχει διαθέσιμη σύνδεση Ιnternet</string>
<string name="newnym">Έχετε αλλάξει επιτυχώς την ταυτότητα σας στο Tor! </string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Δεν υπάρχει σύνδεση με δίκτυο. Ο Tor μπαίνει σε κατάσταση αναμονής...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Η σύνδεση δικτύου είναι καλή. Γίνεται αφύπνιση του Tor...</string>
<string name="updating_settings_in_tor_service">ενημέρωση ρυθμίσεων στην υπηρεσία Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Θύρα που προσφέρει ο Tor στο SOCKS proxy του (προεπιλογή: 9050 ή 0 για απενεργοποίηση)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Παρακαλούμε επανεκκινήστε το Orbot για να ενεργοποιήσετε τις αλλαγές</string>
<string name="menu_qr">Κώδικες QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Αν το δίκτυο κινητής τηλεφωνίας σας μπλοκάρει ενεργά το Tor, μπορείτε να χρησιμοποιήσετε μια γέφυρα για να έχετε πρόσβαση στο δίκτυο. ΕΠΙΛΕΞΤΕ έναν από τους παραπάνω τύπους γέφυρας για να ενεργοποιήσετε τις γέφυρες.</string>
- <string name="bridge_mode">Λειτουργία Γέφυρας</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Ενεργοποίηση</string>
<string name="apps_mode">Λειτουργία VPN</string>
<string name="send_email">Στείλτε Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Μπορείτε να πάρετε μια διεύθυνση γέφυρας μέσω ηλεκτρονικού ταχυδρομείου, στον ιστό ή με τη σάρωση κώδικα QR γέφυρας. Επιλέξτε \'Email\' ή \'Web\' παρακάτω για να ζητήσετε μια διεύθυνση γέφυρας.\n\nΌταν έχετε μια διεύθυνση, αντιγράψτε το & επικολλήστε το στην προτίμηση \"Bridges\" στη ρύθμιση του Orbot και επανεκκινήστε.</string>
- <string name="vpn_default_world">Παγκόσμια (Auto)</string>
+ <string name="vpn_default_world">Παγκόσμια (Auto)</string>
<string name="hidden_services">Αποκρυφες υπηρεσιες</string>
<string name="title_activity_hidden_services">Αποκρυφες υπηρεσιες</string>
<string name="menu_hidden_services">Αποκρυφες υπηρεσιες</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Σκέψη ενεργοποίησης βελτιστοποιήσεων μπαταρίας</string>
<string name="pref_isolate_dest">Μη έγκυρος προορισμός διευθύνσεων</string>
<string name="pref_isolate_dest_summary">Χρησιμοποιήστε ένα διαφορετικό κύκλωμα για κάθε διεύθυνση προορισμού</string>
- <string name="no_transproxy_warning_short">ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Το Transproxying δεν υποστηρίζεται πλέον</string>
- <string name="no_transproxy_warning">ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Το Transparent proxying δεν υποστηρίζεται. Χρήση Orbot Εφαρμογών VPN αντ \' αυτού.</string>
<string name="pref_connection_padding">Σύνδεση αναπλήρωσης</string>
<string name="pref_connection_padding_summary">Πάντα δίνετε η δυνατότητα σύνδεσης padding για υπεράσπιση ενάντια σε ορισμένες μορφές ανάλυση της κυκλοφορίας. Προεπιλογή: auto</string>
<string name="pref_reduced_connection_padding">Σύνδεση αναπλήρωσης</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Απευθείας σύνδεση με το δίκτυο Tor (προεπιλογή)</string>
<string name="bridge_community">Σύνδεση μέσω κοινοτικών διακομιστών</string>
<string name="bridge_cloud">Σύνδεση μέσω cloud server</string>
- <string name="bridges_get_new">Αίτημα νέων γεφυρών... (Αν όλα τα άλλα αποτύχουν)</string>
- <string name="trouble_connecting">Πρόβλημα σύνδεσης;</string>
+ <string name="trouble_connecting">Πρόβλημα σύνδεσης;</string>
<string name="full_device_vpn">Πλήρης Συσκευή VPN</string>
<string name="vpn_disabled">Το VPN απενεργοποιήθηκε</string>
</resources>
diff --git a/app-mini/src/main/res/values-en-rGB/strings.xml b/app-mini/src/main/res/values-en-rGB/strings.xml
index 75531ff4..93491249 100644
--- a/app-mini/src/main/res/values-en-rGB/strings.xml
+++ b/app-mini/src/main/res/values-en-rGB/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Connected to the Tor network</string>
<string name="status_disabled">Orbot is deactivated</string>
<string name="status_shutting_down">TorService is shutting down</string>
- <string name="tor_process_starting">Starting Tor client…</string>
- <string name="tor_process_complete">complete.</string>
<string name="menu_settings">Settings</string>
<string name="menu_log">Log</string>
<string name="menu_start">Start</string>
diff --git a/app-mini/src/main/res/values-eo/strings.xml b/app-mini/src/main/res/values-eo/strings.xml
index c00f5234..431e87e9 100644
--- a/app-mini/src/main/res/values-eo/strings.xml
+++ b/app-mini/src/main/res/values-eo/strings.xml
@@ -4,8 +4,6 @@
<string name="status_starting_up">Orbot ŝaltiĝas...</string>
<string name="status_activated">Konektita al Tor-reto</string>
<string name="status_disabled">Orbot estas malaktivigita</string>
- <string name="tor_process_starting">Ŝaltiĝas Tor-kliento...</string>
- <string name="tor_process_complete">kompleta.</string>
<string name="menu_settings">Agordoj</string>
<string name="menu_log">Protokolo</string>
<string name="menu_start">Starti</string>
diff --git a/app-mini/src/main/res/values-es-rAR/strings.xml b/app-mini/src/main/res/values-es-rAR/strings.xml
index f8af8019..be7922cc 100644
--- a/app-mini/src/main/res/values-es-rAR/strings.xml
+++ b/app-mini/src/main/res/values-es-rAR/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Conectado a la red Tor</string>
<string name="status_disabled">Orbot está desactivado</string>
<string name="status_shutting_down">El servicio de Tor se esta cerrando</string>
- <string name="tor_process_starting">Iniciando el cliente Tor...</string>
- <string name="tor_process_complete">completo.</string>
<string name="menu_settings">Configuración</string>
<string name="menu_log">Registro</string>
<string name="menu_start">Iniciar</string>
@@ -110,8 +108,7 @@
<string name="kb">KB</string>
<string name="mb">MB</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Activar</string>
+ <string name="activate">Activar</string>
<string name="save">Guardar</string>
<string name="name">Nombre</string>
<string name="disable">Deshabilitar</string>
diff --git a/app-mini/src/main/res/values-es/strings.xml b/app-mini/src/main/res/values-es/strings.xml
index dd25a163..37818dd5 100644
--- a/app-mini/src/main/res/values-es/strings.xml
+++ b/app-mini/src/main/res/values-es/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Conectado a la red Tor</string>
<string name="status_disabled">Orbot está desactivado</string>
<string name="status_shutting_down">TorService se está cerrando</string>
- <string name="tor_process_starting">Iniciando cliente Tor...</string>
- <string name="tor_process_complete">completado.</string>
- <string name="menu_settings">Configuración</string>
+ <string name="menu_settings">Configuración</string>
<string name="menu_log">Registro (log)</string>
<string name="menu_start">Iniciar</string>
<string name="menu_stop">Detener</string>
@@ -108,12 +106,9 @@ direcciones (o rangos). No prevalecen sobre las configuraciones de exclusión de
<string name="pref_use_expanded_notifications">Mostrar notificación expandida con el país de salida de Tor y la IP</string>
<string name="pref_use_expanded_notifications_title">Notificaciones expandidas</string>
<string name="set_locale_title">Idioma</string>
- <string name="no_internet_connection_tor">Sin conexión a Internet; Tor está en suspensión...</string>
- <string name="pref_disable_network_title">Sin suspensión-automática de la red</string>
+ <string name="pref_disable_network_title">Sin suspensión-automática de la red</string>
<string name="pref_disable_network_summary">Ponga Tor en suspensión cuando no haya Internet disponible</string>
<string name="newnym">¡Ha cambiado a una nueva identidad de Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">No hay conectividad de red. Poniendo a Tor a dormir...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">La conectividad de red es buena. Despertando a Tor...</string>
<string name="updating_settings_in_tor_service">actualizando la configuración en el servicio Tor</string>
<string name="pref_socks_title">SOCKS de Tor</string>
<string name="pref_socks_summary">Puerto sobre el que Tor ofrece su proxy SOCKS (por defecto: 9050 o 0 para deshabilitarlo)</string>
@@ -135,14 +130,11 @@ direcciones (o rangos). No prevalecen sobre las configuraciones de exclusión de
<string name="restart_orbot_to_use_this_bridge_">Por favor, reinicie Orbot para habilitar los cambios</string>
<string name="menu_qr">Códigos QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Si su red móvil bloquea Tor activamente, puede usar un \'Servidor Puente\' como alternativa para acceder. SELECCIONE una de las opciones a configurar y probar...</string>
- <string name="bridge_mode">Modo bridge</string>
<string name="get_bridges_email">Correo electrónico</string>
- <string name="get_bridges_web">Página web</string>
<string name="activate">Activar</string>
<string name="apps_mode">Modo VPN</string>
<string name="send_email">Enviar correo</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Puede obtener una dirección de bridge (repetidor puente) a través de correo electrónico, la web, o escaneando un código QR de bridge. Seleccione \'Correo\' o \'Web\' debajo para solicitar una dirección de bridge.\n\nUna vez tenga una dirección, copie y péguela en la opción \"Bridges\" de la configuración de Orbot, y reinicie.</string>
- <string name="vpn_default_world">Global (Automático)</string>
+ <string name="vpn_default_world">Global (Automático)</string>
<string name="hidden_services">Servicios ocultos</string>
<string name="title_activity_hidden_services">Servicios ocultos</string>
<string name="menu_hidden_services">Servicios ocultos</string>
@@ -187,8 +179,6 @@ direcciones (o rangos). No prevalecen sobre las configuraciones de exclusión de
<string name="consider_enable_battery_optimizations">Considere habilitar las optimizaciones de batería</string>
<string name="pref_isolate_dest">Aislar direcciones de destino</string>
<string name="pref_isolate_dest_summary">Usar un circuito diferente para cada dirección de destino</string>
- <string name="no_transproxy_warning_short">ADVERTENCIA: El proxyficado transparente ya no está soportado</string>
- <string name="no_transproxy_warning">ADVERTENCIA: El proxyficado transparente no está soportado. Use la VPN de aplicaciones de Orbot en su lugar.</string>
<string name="pref_connection_padding">Relleno de la conexión</string>
<string name="pref_connection_padding_summary">Habilita siempre el relleno de la conexión como defensa contra algunas formas de análisis de tráfico. Predeterminado: Automático</string>
<string name="pref_reduced_connection_padding">Relleno de la conexión reducido</string>
@@ -200,8 +190,7 @@ direcciones (o rangos). No prevalecen sobre las configuraciones de exclusión de
<string name="bridge_direct_connect">Conectar directamente a Tor (lo mejor)</string>
<string name="bridge_community">Conectar a través de servidores de la comunidad</string>
<string name="bridge_cloud">Conectar a través de servidores de la nube</string>
- <string name="bridges_get_new">Solicitar nuevos puentes... (si todo lo demás falla)</string>
- <string name="trouble_connecting">¿Problemas al conectar?</string>
+ <string name="trouble_connecting">¿Problemas al conectar?</string>
<string name="full_device_vpn">VPN de dispositivo completo</string>
<string name="vpn_disabled">VPN deshabilitada</string>
</resources>
diff --git a/app-mini/src/main/res/values-et/strings.xml b/app-mini/src/main/res/values-et/strings.xml
index d986129a..cb35e1b9 100644
--- a/app-mini/src/main/res/values-et/strings.xml
+++ b/app-mini/src/main/res/values-et/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Ühendatud Tor võrgustikku</string>
<string name="status_disabled">Orbot deaktiveeritud</string>
<string name="status_shutting_down">Orbot lülitub välja</string>
- <string name="tor_process_starting">Tor kliendi käivitamine...</string>
- <string name="tor_process_complete">valmis.</string>
<string name="menu_settings">Seaded</string>
<string name="menu_log">Logi</string>
<string name="menu_start">Start</string>
@@ -94,9 +92,7 @@
<string name="pref_disable_network_title">Pole võrgu auto-und</string>
<string name="pref_disable_network_summary">Pane Tor magama kui Internetiühendus puudub</string>
<string name="newnym">Lülitusite uuele Tor identiteedile!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Interneti ühendus puudub. Panen Tori magama...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Interneti ühendus hea. Äratan Tori üles...</string>
- <string name="save">Salvesta</string>
+ <string name="save">Salvesta</string>
<string name="name">Name</string>
<string name="disable">Keela</string>
<string name="enable">Luba</string>
diff --git a/app-mini/src/main/res/values-eu/strings.xml b/app-mini/src/main/res/values-eu/strings.xml
index c0138fe6..a0426fa2 100644
--- a/app-mini/src/main/res/values-eu/strings.xml
+++ b/app-mini/src/main/res/values-eu/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Tor sarera konektatuta</string>
<string name="status_disabled">Orbot desaktibatuta dago</string>
<string name="status_shutting_down">TorService itzaltzen ari da</string>
- <string name="tor_process_starting">Tor bezeroa hasten...</string>
- <string name="tor_process_complete">eginda.</string>
- <string name="menu_settings">Ezarpenak</string>
+ <string name="menu_settings">Ezarpenak</string>
<string name="menu_log">Egunkaria</string>
<string name="menu_start">Abiarazi</string>
<string name="menu_stop">Gelditu</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Erakutsi hedatutako jakinarazpenak Tor irteera herrialde eta IP-arekin</string>
<string name="pref_use_expanded_notifications_title">Hedatutako jakinarazpenak</string>
<string name="set_locale_title">Hizkuntza</string>
- <string name="no_internet_connection_tor">Ez dago Interneterako konexiorik; Tor egonean dago...</string>
- <string name="pref_disable_network_title">Sareko lokartze automatikorik ez</string>
+ <string name="pref_disable_network_title">Sareko lokartze automatikorik ez</string>
<string name="pref_disable_network_summary">Jarri Tor lotan internet atzigarri ez dagoenean</string>
<string name="newnym">Tor identitate berri batera aldatu duzu!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Sare konexiorik ez. Tor lotan jartzen...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Sare konexioa berreskuratu da. Tor esnatzen...</string>
<string name="updating_settings_in_tor_service">Tor zerbitzuaren ezarpenak eguneratzen</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Tor-ek bere SOCKS proxya eskaintzeko ataka (Lehenetsia: 9050 edo 0 desgaitzeko)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Berrabiarazi Orbot aldaketak aplikatzeko</string>
<string name="menu_qr">QR Kodeak</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Zure sare mugikorrak Tor nahita blokeatzen badu, \'Zubi zerbitzaria\' erabili dezakezu ordezko sarbide gisa. HAUTATU konfiguratzeko aukera bat eta probatu...</string>
- <string name="bridge_mode">Zubi modua</string>
<string name="get_bridges_email">E-mail</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Aktibatu</string>
<string name="apps_mode">VPN modua</string>
<string name="send_email">Bidali E-maila</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Zubi helbide bat lortu dezakezu e-mail eta web bidez edo QR kode bat eskaneatuz. Hautatu \'E-mail\' edo \'Web\' behean zubi helbide bat eskatzeko.\n\nBehin helbide bat duzula, kopiatu eta itsatsi ezazu Orbot ezarpenetako \"Zubiak\" atalean eta berrabiarazi.</string>
- <string name="vpn_default_world">Orokorra (Automatikoa)</string>
+ <string name="vpn_default_world">Orokorra (Automatikoa)</string>
<string name="hidden_services">Ezkutuko zerbitzuak</string>
<string name="title_activity_hidden_services">Ezkutuko zerbitzuak</string>
<string name="menu_hidden_services">Ezkutuko zerbitzuak</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Aztertu bateria optimizazioak gaitzea</string>
<string name="pref_isolate_dest">Isolatu helbide helburuak</string>
<string name="pref_isolate_dest_summary">Erabili zirkuitu desberdin bat helbide helburu bakoitzeko</string>
- <string name="no_transproxy_warning_short">ABISUA: Proxy gardenak ez du euskarria jada</string>
- <string name="no_transproxy_warning">ABISUA: Proxy gardenak ez du euskarria jada. Erabili Orbot aplikazioen VPN-a ordez.</string>
<string name="pref_connection_padding">Konexioaren betegarria</string>
<string name="pref_connection_padding_summary">Beti gaitzen du konexioaren betegarria trafikoaren azterketa motza batzuetaz babesteko. Lehenetsita: automatikoa</string>
<string name="pref_reduced_connection_padding">Konexioaren betegarria gutxitua</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Konektatu zuzenean Tor sarera (Onena)</string>
<string name="bridge_community">Konektatu komunitatearen zerbitzarietatik</string>
<string name="bridge_cloud">Konektatu hodeiko zerbitzarietatik</string>
- <string name="bridges_get_new">Eskatu zubi berriak... (Beste guztiak huts egiten badu)</string>
- <string name="trouble_connecting">Arazoak konektatzeko?</string>
+ <string name="trouble_connecting">Arazoak konektatzeko?</string>
<string name="full_device_vpn">Gailu osoaren VPN-a</string>
<string name="vpn_disabled">VPN-a desgaituta</string>
</resources>
diff --git a/app-mini/src/main/res/values-fa/strings.xml b/app-mini/src/main/res/values-fa/strings.xml
index b92f338f..44a68302 100644
--- a/app-mini/src/main/res/values-fa/strings.xml
+++ b/app-mini/src/main/res/values-fa/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">متصل به شبکه تور</string>
<string name="status_disabled">اربوت غیرفعال شده است.</string>
<string name="status_shutting_down">سرویس تور در حال خاموش شدن است</string>
- <string name="tor_process_starting">شروع کلاینت تور...</string>
- <string name="tor_process_complete">تمام.</string>
- <string name="menu_settings">تنظیمات</string>
+ <string name="menu_settings">تنظیمات</string>
<string name="menu_log">ورود</string>
<string name="menu_start">آغاز</string>
<string name="menu_stop">ایست</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">نمایش اطلاع رسانی گسترده با کشور خروجی Tor و IP</string>
<string name="pref_use_expanded_notifications_title">اطلاعیه گسترده</string>
<string name="set_locale_title">زبان</string>
- <string name="no_internet_connection_tor">ارتباط اینترنتی وجود ندارد; تور آماده کار است... </string>
- <string name="pref_disable_network_title">خاموش کردن در صورت عدم وجود شبکه</string>
+ <string name="pref_disable_network_title">خاموش کردن در صورت عدم وجود شبکه</string>
<string name="pref_disable_network_summary">در صورتی که شبکه وجود نداشته باشد خاموش شود</string>
<string name="newnym">شما به شناسه جدید تور منتقل شدید</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">ارتباط شبکه ای وجود ندارد. تور به حالت خواب می رود</string>
- <string name="network_connectivity_is_good_waking_tor_up_">ارتباط شبکه ای خوب است. تور را بیدار نمایید...</string>
<string name="updating_settings_in_tor_service">به روز رسانی تنظیمات در سرویس Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">پورتی که تور ارائه می دهد SOCKS proxy روی (پیش فرض: 9050 یا 0 برای غیرفعال کردن)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">برای فعال کردن تغییرات لطفا Orbot را راه اندازی مجدد کنید</string>
<string name="menu_qr">کدهای QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">اگر شبکه همراهتان به صورت مرتب تور را مسدود میکند، میتوانید از یک «کارساز پل» به عنوان راهی جایگزین برای ورود استفاده کنید. برای پیکربندی و تست، یکی از گزینهها را انتخاب کنید…</string>
- <string name="bridge_mode">حالت Bridges</string>
<string name="get_bridges_email">ایمیل</string>
- <string name="get_bridges_web">وب</string>
<string name="activate">فعال</string>
<string name="apps_mode">حالت VPN</string>
<string name="send_email">ایمیل بفرست</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">می توانید آدرس bridge را از طریق ایمیل٬ وب یا با اسکن کردن bridge QR code بدست آورید. ایمیل یا وب پایین را برای درخواست آدرس bridge انتخاب کنید.\n\n وقتی آدرس را دارید آن را کپی کنید و برگردانید در اولویت های Bridges در تنظیمات اربت و آن را دوباره راه اندازی کنید.</string>
- <string name="vpn_default_world">جهانی (خودکار)</string>
+ <string name="vpn_default_world">جهانی (خودکار)</string>
<string name="hidden_services">سرویسهای مخفی</string>
<string name="title_activity_hidden_services">سرویسهای مخفی</string>
<string name="menu_hidden_services">سرویسهای مخفی</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">فعال کردن بهینهسازی باتری را مدنظر قرار دهید</string>
<string name="pref_isolate_dest">آدرسهای مقصد را مجزا کن</string>
<string name="pref_isolate_dest_summary">برای هر آدرس مقصد از مداری متفاوت استفاده کن</string>
- <string name="no_transproxy_warning_short">هشدار: پراکسی کردن شفاف دیگر پشتیبانی نمیشود</string>
- <string name="no_transproxy_warning">هشدار: پراکسی کردن شفاف پشتیبانی نمیشود. از Orbot Apps VPN استفاده کنید.</string>
<string name="pref_connection_padding">پهنای ارتباط</string>
<string name="pref_connection_padding_summary">همیشه لایهگذاری ارتباط را فعال میکند تا با برخی از حالتهای تحلیل ترافیک مقابله کند. پیشفرض: خودکار</string>
<string name="pref_reduced_connection_padding">پنهای ارتباط کاهش پیدا کرد</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">اتصال مستقیم به تور (بهترین عملکرد)</string>
<string name="bridge_community">اتصال از طریق سرورهای جامعه</string>
<string name="bridge_cloud">اتصال از طریق سرورهای ابری</string>
- <string name="bridges_get_new">درخواست پلهای ارتباطی جدید... (اگر تمامی روشهای دیگر کار نکردند)</string>
- <string name="trouble_connecting">در اتصال مشکل دارید؟</string>
+ <string name="trouble_connecting">در اتصال مشکل دارید؟</string>
<string name="full_device_vpn">VPN برای تمام دستگاه</string>
<string name="vpn_disabled">VPN غیر فعال شد</string>
</resources>
diff --git a/app-mini/src/main/res/values-fi/strings.xml b/app-mini/src/main/res/values-fi/strings.xml
index 53c47265..9c0e1ce7 100644
--- a/app-mini/src/main/res/values-fi/strings.xml
+++ b/app-mini/src/main/res/values-fi/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Yhdistetty Tor-verkkoon</string>
<string name="status_disabled">Orbot on poistettu käytöstä</string>
<string name="status_shutting_down">Tor-palvelua sammutetaan</string>
- <string name="tor_process_starting">Käynnistetään Tor-ohjelmaa...</string>
- <string name="tor_process_complete">valmis.</string>
<string name="menu_settings">Asetukset</string>
<string name="menu_log">Loki</string>
<string name="menu_start">Aloita</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Näytä laajennettu ilmoitus (Torin ulostulon maa ja IP)</string>
<string name="pref_use_expanded_notifications_title">Laajennetut ilmoitukset</string>
<string name="set_locale_title">Kieli</string>
- <string name="no_internet_connection_tor">Ei internet-yhteyttä; Tor on valmiustilassa...</string>
<string name="pref_disable_network_title">Ei verkon automaattilepotilaa</string>
<string name="pref_disable_network_summary">Laita Tor nukkumaan, kun internet-yhteyttä ei ole saatavilla</string>
<string name="newnym">Vaihdoit Tor-identiteettisi uuteen!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Ei verkkoyhteyttä. Tor siirtyy valmiustilaan...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Verkkoyhteys toimii. Herätetään Tor...</string>
<string name="updating_settings_in_tor_service">päivitetään Tor-palvelun asetuksia</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Portti, jossa Torin SOCKS-välityspalvelin on (oletus: 9050, 0 = poista käytöstä)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Sillat päivitetty</string>
<string name="restart_orbot_to_use_this_bridge_">Käynnistä Orbot uudelleen ottaaksesi muutokset käyttöön</string>
<string name="menu_qr">QR-koodit</string>
- <string name="bridge_mode">Siltatila</string>
<string name="get_bridges_email">Sähköposti</string>
- <string name="get_bridges_web">Verkkosivu</string>
- <string name="activate">Ota käyttöön</string>
+ <string name="activate">Ota käyttöön</string>
<string name="send_email">Lähetä sähköpostia</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Voit saada sillan osoitteen sähköpostin kautta, verkkosivulta tai skannaamalla sillan QR-koodin. Valitse \'Sähköposti\' tai \'Verkkosivu\' alta pyytääksesi sillan osoitetta.\n\nKun sinulla on osoite, kopioi & liitä se \"Sillat\" -kohtaan Orbotin asetuksissa ja käynnistä uudelleen.</string>
- <string name="hidden_services">Piilopalvelut</string>
+ <string name="hidden_services">Piilopalvelut</string>
<string name="title_activity_hidden_services">Piilopalvelut</string>
<string name="menu_hidden_services">Piilopalvelut</string>
<string name="save">Tallenna</string>
diff --git a/app-mini/src/main/res/values-fr-rFR/strings.xml b/app-mini/src/main/res/values-fr-rFR/strings.xml
index ec082972..66266b7e 100644
--- a/app-mini/src/main/res/values-fr-rFR/strings.xml
+++ b/app-mini/src/main/res/values-fr-rFR/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Connecté au réseau Tor</string>
<string name="status_disabled">Orbot est désactivé</string>
<string name="status_shutting_down">TorService est en cours d’extinction</string>
- <string name="tor_process_starting">Démarrage du client Tor...</string>
- <string name="tor_process_complete">terminé.</string>
- <string name="menu_settings">Paramètres</string>
+ <string name="menu_settings">Paramètres</string>
<string name="menu_log">Journal</string>
<string name="menu_start">Démarrer</string>
<string name="menu_stop">Arrêter</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Montrer des notifications étendues avec le pays de sortie de Tor et l’IP</string>
<string name="pref_use_expanded_notifications_title">Notifications étendues</string>
<string name="set_locale_title">Langue</string>
- <string name="no_internet_connection_tor">Pas de connexion Internet ; Tor est en attente...</string>
- <string name="pref_disable_network_title">Pas de mise en veille automatique du réseau</string>
+ <string name="pref_disable_network_title">Pas de mise en veille automatique du réseau</string>
<string name="pref_disable_network_summary">Mettre Tor en veille quand aucune connexion Internet n’est disponible</string>
<string name="newnym">Vous avez basculé vers une nouvelle identité Tor !</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Pas de connectivité réseau. Mise au repos de Tor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">La connectivité réseau est bonne. Réveil de Tor...</string>
<string name="updating_settings_in_tor_service">mise à jour des paramètres dans le service Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_socks_summary">Port sur lequel Tor offre son mandataire SOCKS (par défaut : 9050 ou 0 pour le désactiver)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Ponts mis à jour</string>
<string name="restart_orbot_to_use_this_bridge_">Veuillez redémarrer Orbot pour activer les changements</string>
<string name="menu_qr">Codes QR</string>
- <string name="bridge_mode">Mode pont</string>
<string name="get_bridges_email">Courriel</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Activer</string>
+ <string name="activate">Activer</string>
<string name="send_email">Envoyer un courriel</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Vous pouvez obtenir une adresse de pont par courriel, par le Web ou en balayant le code QR d’un pont. Choisissez *Courriel* ou *Web* ci-dessous pour demander une adresse de pont.\n\nUne fois que vous avez une adresse, copiez & collez-la dans le champ « Ponts » des paramètres d’Orbot et redémarrez.</string>
- <string name="save">Enregistrer</string>
+ <string name="save">Enregistrer</string>
<string name="name">Name</string>
<string name="please_restart_Orbot_to_enable_the_changes">Veuillez redémarrer Orbot pour activer les changements</string>
</resources>
diff --git a/app-mini/src/main/res/values-fr/strings.xml b/app-mini/src/main/res/values-fr/strings.xml
index 2c163e96..1dc1661c 100644
--- a/app-mini/src/main/res/values-fr/strings.xml
+++ b/app-mini/src/main/res/values-fr/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Connecté au réseau Tor</string>
<string name="status_disabled">Orbot est désactivé</string>
<string name="status_shutting_down">TorService est en cours d’extinction</string>
- <string name="tor_process_starting">Démarrage du client Tor...</string>
- <string name="tor_process_complete">terminé.</string>
- <string name="menu_settings">Paramètres</string>
+ <string name="menu_settings">Paramètres</string>
<string name="menu_log">Journal</string>
<string name="menu_start">Démarrer</string>
<string name="menu_stop">Arrêter</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Montrer des notifications étendues avec le pays de sortie de Tor et l’IP</string>
<string name="pref_use_expanded_notifications_title">Notifications étendues</string>
<string name="set_locale_title">Langue</string>
- <string name="no_internet_connection_tor">Pas de connexion Internet ; Tor est en attente...</string>
- <string name="pref_disable_network_title">Pas de mise en veille automatique du réseau</string>
+ <string name="pref_disable_network_title">Pas de mise en veille automatique du réseau</string>
<string name="pref_disable_network_summary">Mettre Tor en veille quand aucune connexion Internet n’est disponible</string>
<string name="newnym">Vous avez basculé vers une nouvelle identité Tor !</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Pas de connectivité réseau. Mise au repos de Tor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">La connectivité réseau est bonne. Réveil de Tor...</string>
<string name="updating_settings_in_tor_service">mise à jour des paramètres dans le service Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_socks_summary">Port sur lequel Tor offre son mandataire SOCKS (par défaut : 9050 ou 0 pour le désactiver)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Veuillez redémarrer Orbot pour activer les changements</string>
<string name="menu_qr">Codes QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Si votre réseau mobile bloque Tor activement, vous pouvez utiliser un serveur-pont comme moyen de remplacement. CHOISIR une des options pour configurer et tester…</string>
- <string name="bridge_mode">Mode pont</string>
<string name="get_bridges_email">Courriel</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activer</string>
<string name="apps_mode">Mode RPV</string>
<string name="send_email">Envoyer un courriel</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Vous pouvez obtenir une adresse de pont par courriel, par le Web ou en balayant le code QR d’un pont. Choisissez *Courriel* ou *Web* ci-dessous pour demander une adresse de pont.\n\nUne fois que vous avez une adresse, copiez & collez-la dans le champ « Ponts » des paramètres d’Orbot et redémarrez.</string>
- <string name="vpn_default_world">Mondial (Auto)</string>
+ <string name="vpn_default_world">Mondial (Auto)</string>
<string name="hidden_services">Services cachés</string>
<string name="title_activity_hidden_services">Services cachés</string>
<string name="menu_hidden_services">Services cachés</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Envisagez d’activer les optimisations de la pile</string>
<string name="pref_isolate_dest">Isoler les adresses de destination</string>
<string name="pref_isolate_dest_summary">Utiliser un circuit différent pour chaque adresse de destination</string>
- <string name="no_transproxy_warning_short">AVERTISSEMENT : le transrelais n’est plus pris en charge</string>
- <string name="no_transproxy_warning">AVERTISSEMENT : le relais transparent n’est plus pris en charge. Utiliser plutôt le RPV pour applis d’Orbot.</string>
<string name="pref_connection_padding">Bourrage de la connexion</string>
<string name="pref_connection_padding_summary">Toujours activer le bourrage de la connexion pour se défendre contre certaines formes d’analyse du trafic. Par défaut de : auto</string>
<string name="pref_reduced_connection_padding">Bourrage réduit de la connexion</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Se connecter directement à Tor (le mieux)</string>
<string name="bridge_community">Se connecter par des serveurs communautaires</string>
<string name="bridge_cloud">Se connecter par des serveurs nuagiques</string>
- <string name="bridges_get_new">Demander de nouveaux ponts… (si tout échoue)</string>
- <string name="trouble_connecting">Des problèmes de connexion ?</string>
+ <string name="trouble_connecting">Des problèmes de connexion ?</string>
<string name="full_device_vpn">RPV de l’appareil entier</string>
<string name="vpn_disabled">Le RPV est désactivé</string>
</resources>
diff --git a/app-mini/src/main/res/values-gl/strings.xml b/app-mini/src/main/res/values-gl/strings.xml
index 28b1e619..141d9222 100644
--- a/app-mini/src/main/res/values-gl/strings.xml
+++ b/app-mini/src/main/res/values-gl/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Conectado á rede Tor</string>
<string name="status_disabled">Orbot está desactivado</string>
<string name="status_shutting_down">O ServizoTor estase pechando</string>
- <string name="tor_process_starting">Iniciando cliente Tor...</string>
- <string name="tor_process_complete">completado.</string>
- <string name="menu_settings">Axustes</string>
+ <string name="menu_settings">Axustes</string>
<string name="menu_log">Rexistro (log)</string>
<string name="menu_start">Iniciar</string>
<string name="menu_stop">Deter</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Mostar notificación extendida co país de saída de Tor e IP</string>
<string name="pref_use_expanded_notifications_title">Notificacións extendidas</string>
<string name="set_locale_title">Idioma</string>
- <string name="no_internet_connection_tor">Sen conexión a internet; Tor está a espera...</string>
- <string name="pref_disable_network_title">Auto-Parado Sen Rede</string>
+ <string name="pref_disable_network_title">Auto-Parado Sen Rede</string>
<string name="pref_disable_network_summary">Parar Tor cando non hai conexión a internet</string>
<string name="newnym">Cambiou a unha nova identidade Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Sen conexión a rede. Tor agardando...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">A conexión a rede é boa. Espertando a Tor...</string>
<string name="updating_settings_in_tor_service">actualizando axustes no servizo Tor</string>
<string name="pref_socks_title">SOCKS de Tor</string>
<string name="pref_socks_summary">Porto no que Tor ofrece o seu proxy SOCKS (por omisión: 9050 ou 0 para desactivar)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Por favor, reinicie Orbot para activar os cambios</string>
<string name="menu_qr">Códigod QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Si a súa rede móbil bloquea Tor de xeito activo, pode utilizar un \'Servidor Ponte\' como modo alternativo. ESCOLL unha das opcións para configurar e probar...</string>
- <string name="bridge_mode">Modo Ponte</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activar</string>
<string name="apps_mode">Modo VPN</string>
<string name="send_email">Enviar correo</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Pode obter un enderezo de ponte a través de correo electrónico, na web ou escaneando o código QR de unha ponte. Escolla abaixo \'Correo-e\' ou \'Web\' para solicitar un enderezo de ponte.\n\nUnha vez teña un enderezo, cópieo e pégueo no axuste \"Pontes\" na configuración de Orbot e reinicie.</string>
- <string name="vpn_default_world">Global (Auto)</string>
+ <string name="vpn_default_world">Global (Auto)</string>
<string name="hidden_services">Servizos agochados</string>
<string name="title_activity_hidden_services">Servizos agochados</string>
<string name="menu_hidden_services">Servizos agochados</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Considere activar as optimizacións da batería</string>
<string name="pref_isolate_dest">Illar enderezos de destino</string>
<string name="pref_isolate_dest_summary">Utilizar un circuito diferente para cada enderezo de destino</string>
- <string name="no_transproxy_warning_short">AVISO: xa non está soportado o Proxy Transparente</string>
- <string name="no_transproxy_warning">AVISO: o Proxy Transparente non está soportado. Utilice Orbot VPN Apps no seu lugar.</string>
<string name="pref_connection_padding">Espazado da conexión</string>
<string name="pref_connection_padding_summary">Activar sempre un espazado na conexión para defenderse contra algúns tipos de análise de tráfico. Por omisión: auto</string>
<string name="pref_reduced_connection_padding">Espazado limitado da conexión</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Conectar directamente con Tor (preferido)</string>
<string name="bridge_community">Conectar a través de servidores da comunidade</string>
<string name="bridge_cloud">Conectar a través de servidores na nube</string>
- <string name="bridges_get_new">Solicitar Novas Pontes... (si todo o anterior falla)</string>
- <string name="trouble_connecting">Problemas ao conectar?</string>
+ <string name="trouble_connecting">Problemas ao conectar?</string>
<string name="full_device_vpn">VPN para todo o dispositivo</string>
<string name="vpn_disabled">VPN desactivada</string>
</resources>
diff --git a/app-mini/src/main/res/values-he/strings.xml b/app-mini/src/main/res/values-he/strings.xml
index 8959f31c..b85080a1 100644
--- a/app-mini/src/main/res/values-he/strings.xml
+++ b/app-mini/src/main/res/values-he/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">מחובר לרשת Tor</string>
<string name="status_disabled">Orbot כבוי</string>
<string name="status_shutting_down">שירות Tor מתכבה</string>
- <string name="tor_process_starting">מתחיל לקוח Tor...</string>
- <string name="tor_process_complete">הושלם.</string>
- <string name="menu_settings">הגדרות</string>
+ <string name="menu_settings">הגדרות</string>
<string name="menu_log">יומן</string>
<string name="menu_start">התחל</string>
<string name="menu_stop">עצור</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">הראה התראה מורחבת עם מדינת יציאה ו-IP יציאה של Tor</string>
<string name="pref_use_expanded_notifications_title">התראות מורחבות</string>
<string name="set_locale_title">שפה</string>
- <string name="no_internet_connection_tor">אין חיבור לאינטרנט; תור ממתין...</string>
- <string name="pref_disable_network_title">אין שינה אוטומטית של רשת</string>
+ <string name="pref_disable_network_title">אין שינה אוטומטית של רשת</string>
<string name="pref_disable_network_summary">כבה את Tor כאשר אין חיבור לאינטרנט</string>
<string name="newnym">החלפת אל זהות Tor חדשה!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">אין חיבור לרשת. מכבה את Tor....</string>
- <string name="network_connectivity_is_good_waking_tor_up_">החיבור עובד טוב. מעיר את Tor...</string>
<string name="updating_settings_in_tor_service">מעדכן הגדרות Tor במכשיר</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">פתחה אשר Tor מציע את יפוי־הכוח SOCKS שלו עליה (ברירת מחדל: 9050 או 0 כדי להשבית)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">אנא הפעל מחדש את Orbot כדי לאפשר את השינויים</string>
<string name="menu_qr">קודי QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">אם פעילות הרשת הניידת שלך חוסמת את Tor, אתה יכול להשתמש ב\'שרת גשר\' כדרך חלופית להיכנס. בחר אחת מאפשרויות כדי להגדיר ולבחון...</string>
- <string name="bridge_mode">מצב גשר</string>
<string name="get_bridges_email">דוא\"ל</string>
- <string name="get_bridges_web">אתר</string>
<string name="activate">הפעל</string>
<string name="apps_mode">מצב VPN</string>
<string name="send_email">שלח דוא\"ל</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">אתה יכול להשיג כתובת גשר באמצעות דוא\"ל, הרשת או ע\"י סריקת קוד QR של גשר. בחר \'דוא\"ל\' או \'רשת\' למטה כדי לבקש כתובת גשר.\n\nברגע שיש לך כתובת, העתק והדבק אותה לתוך ההעדפה \"גשרים\" בהגדרות Orbot והפעל מחדש.</string>
- <string name="vpn_default_world">עולמי (אוטומטי)</string>
+ <string name="vpn_default_world">עולמי (אוטומטי)</string>
<string name="hidden_services">שירותים נסתרים</string>
<string name="title_activity_hidden_services">שירותים נסתרים</string>
<string name="menu_hidden_services">שירותים נסתרים</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">שקול לאפשר מיטובי סוללה</string>
<string name="pref_isolate_dest">בודד כתובות יעד</string>
<string name="pref_isolate_dest_summary">השתמש במעגל שונה לכל כתובת יעד</string>
- <string name="no_transproxy_warning_short">אזהרה: יפוי־כוח שקוף אינו נתמך יותר</string>
- <string name="no_transproxy_warning">אזהרה: יפוי־כוח שקוף אינו נתמך. השתמש ב-VPN של Orbot במקום.</string>
<string name="pref_connection_padding">ריפוד חיבור</string>
<string name="pref_connection_padding_summary">אפשר תמיד ריפוד חיבור כדי להגן מפני צורות מסוימות של ניתוח תעבורה. ברירת מחדל: אוטומטי</string>
<string name="pref_reduced_connection_padding">הופחת ריפוד חיבור</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">התחבר ישירות אל Tor (הכי טוב)</string>
<string name="bridge_community">התחבר באמצעות שרתי קהילה</string>
<string name="bridge_cloud">התחבר באמצעות שרתי ענן</string>
- <string name="bridges_get_new">בקש גשרים חדשים... (אם כל השאר נכשל)</string>
- <string name="trouble_connecting">בעית התחברות?</string>
+ <string name="trouble_connecting">בעית התחברות?</string>
<string name="full_device_vpn">VPN מכשיר מלא</string>
<string name="vpn_disabled">VPN מושבת</string>
</resources>
diff --git a/app-mini/src/main/res/values-hi/strings.xml b/app-mini/src/main/res/values-hi/strings.xml
index e85f9f9c..97003b17 100644
--- a/app-mini/src/main/res/values-hi/strings.xml
+++ b/app-mini/src/main/res/values-hi/strings.xml
@@ -7,9 +7,7 @@
<string name="status_activated">तोर नेटवर्क से जुड़ा </string>
<string name="status_disabled">औरबोट निष्क्रिय है</string>
<string name="status_shutting_down">तोर सर्विस बंध हो रहा हे </string>
- <string name="tor_process_starting">तोर क्लाइंट शुरू हो रहा हे </string>
- <string name="tor_process_complete">पूर्ण</string>
- <string name="menu_settings">सेटिंग्स</string>
+ <string name="menu_settings">सेटिंग्स</string>
<string name="menu_log">यात्रा दैनिकी</string>
<string name="menu_start">प्रारंभ</string>
<string name="menu_stop">विराम</string>
@@ -108,12 +106,9 @@
<string name="pref_use_expanded_notifications">तोर एग्जिट देश और आईपी के साथ विस्तारित सूचना दिखाएं</string>
<string name="pref_use_expanded_notifications_title">विस्तारित सूचनाएं</string>
<string name="set_locale_title">भाषा</string>
- <string name="no_internet_connection_tor">कोई इंटरनेट कनेक्शन नहीं; तोर स्टैंडबाय पर है ...</string>
- <string name="pref_disable_network_title">कोई नेटवर्क ऑटो-स्लीप नहीं</string>
+ <string name="pref_disable_network_title">कोई नेटवर्क ऑटो-स्लीप नहीं</string>
<string name="pref_disable_network_summary">जब कोई इंटरनेट उपलब्ध नहीं है तो तोर को सोएं</string>
<string name="newnym">आपने एक नई टोरी पहचान को बदल दिया है!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">कोई नेटवर्क कनेक्टिविटी नहीं टो को सोने के लिए डालना ...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">नेटवर्क कनेक्टिविटी अच्छा है जागो टॉर अप ...</string>
<string name="updating_settings_in_tor_service">टॉर सेवा में सेटिंग अपडेट करना</string>
<string name="pref_socks_title">टॉर सॉक्स</string>
<string name="pref_socks_summary">पोर्ट उस टो पर अपनी सॉक्स प्रॉक्सी प्रदान करता है (डिफ़ॉल्ट: 9050 या अक्षम करने के लिए 0)</string>
@@ -135,14 +130,11 @@
<string name="restart_orbot_to_use_this_bridge_">परिवर्तन सक्षम करने के लिए Orbot पुनः प्रारंभ करें</string>
<string name="menu_qr">QR कोड</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">यदि आपका मोबाइल नेटवर्क सक्रिय रूप से टो को ब्लॉक करता है, तो आप \'पुल सर्वर\' को एक वैकल्पिक तरीके से उपयोग कर सकते हैं। कॉन्फ़िगर और परीक्षण करने के लिए विकल्पों में से एक का चयन करें ..,।</string>
- <string name="bridge_mode">ब्रिज मोड</string>
<string name="get_bridges_email">ईमेल</string>
- <string name="get_bridges_web">वेब</string>
<string name="activate">सक्रिय</string>
<string name="apps_mode">वीपीएन मोड</string>
<string name="send_email">ईमेल भेजें</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">आप ईमेल, वेब के माध्यम से या एक पुल क्यूआर कोड को स्कैन करके एक पुल का पता मिल सकती है। एक पुल का पता अनुरोध करने के लिए \'ईमेल\' या \'वेब\' नीचे का चयन करें। एक बार जब आप एक पता है, कॉपी और यह Orbot की सेटिंग और पुनः आरंभ में \"पुल\" वरीयता में पेस्ट करें।</string>
- <string name="vpn_default_world">ग्लोबल (ऑटो)</string>
+ <string name="vpn_default_world">ग्लोबल (ऑटो)</string>
<string name="hidden_services">हिडन सेवाएं</string>
<string name="title_activity_hidden_services">हिडन सेवाएं</string>
<string name="menu_hidden_services">हिडन सेवाएं</string>
@@ -187,8 +179,6 @@
<string name="consider_enable_battery_optimizations">बैटरी ऑप्टिमाइज़ेशन को सक्षम करने पर विचार करें</string>
<string name="pref_isolate_dest">गंतव्य पते अलग करें</string>
<string name="pref_isolate_dest_summary">प्रत्येक गंतव्य पते के लिए एक अलग सर्किट का उपयोग करें</string>
- <string name="no_transproxy_warning_short">चेतावनी: ट्रांसप्रॉक्सिंग अब समर्थित नहीं है</string>
- <string name="no_transproxy_warning">चेतावनी: पारदर्शी प्रॉक्सीिंग समर्थित नहीं है। Orbot Apps VPN का उपयोग इसके बजाय</string>
<string name="pref_connection_padding">कनेक्शन पैडिंग</string>
<string name="pref_connection_padding_summary">ट्रैफिक विश्लेषण के कुछ रूपों से बचाव के लिए हमेशा कनेक्शन पैडिंग सक्षम करता है। डिफ़ॉल्ट: ऑटो</string>
<string name="pref_reduced_connection_padding">कम कनेक्शन पैडिंग</string>
@@ -200,8 +190,7 @@
<string name="bridge_direct_connect">सीधे टॉर से कनेक्ट करें (सर्वश्रेष्ठ)</string>
<string name="bridge_community">सामुदायिक सर्वर के माध्यम से कनेक्ट करें</string>
<string name="bridge_cloud">क्लाउड सर्वर से जुड़ें</string>
- <string name="bridges_get_new">नई ब्रिज का अनुरोध ... (यदि सब कुछ विफल रहता है)</string>
- <string name="trouble_connecting">कनेक्ट करने में समस्या?</string>
+ <string name="trouble_connecting">कनेक्ट करने में समस्या?</string>
<string name="full_device_vpn">पूर्ण डिवाइस VPN</string>
<string name="vpn_disabled">वीपीएन अक्षम किया गया</string>
</resources>
diff --git a/app-mini/src/main/res/values-hr/strings.xml b/app-mini/src/main/res/values-hr/strings.xml
index deb23402..716bf82d 100644
--- a/app-mini/src/main/res/values-hr/strings.xml
+++ b/app-mini/src/main/res/values-hr/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Spojen na Tor mrežu</string>
<string name="status_disabled">Orbot je deaktiviran</string>
<string name="status_shutting_down">TorService se gasi</string>
- <string name="tor_process_starting">Pokrećem Tor klijent...</string>
- <string name="tor_process_complete">gotovo.</string>
<string name="menu_settings">Postavke</string>
<string name="menu_log">Dnevnik</string>
<string name="menu_start">Početak</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Prikaži proširene obavijesti s Tor izlaznom državom i IP-em</string>
<string name="pref_use_expanded_notifications_title">Proširene obavijesti</string>
<string name="set_locale_title">Jezik</string>
- <string name="no_internet_connection_tor">Nema internet veze; Tor je u stanju pripravnosti...</string>
<string name="pref_disable_network_title">Nema mrežnog auto-spavanja</string>
<string name="pref_disable_network_summary">Stavi Tor na spavanje kad internet nije dostupan</string>
<string name="newnym">Prebacili ste se na nov Tor identitet!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nema mrežne povezivosti. Stavljam Tor na spavanje...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Mrežan povezanost je dobra. Budim Tor...</string>
<string name="updating_settings_in_tor_service">ažuriram postavke u Tor usluzi</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Port na kojem Tor pruža svoj SOCKS proxy (zadano: 9050, 0 za onemogućavanje)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Mostova ažurirano</string>
<string name="restart_orbot_to_use_this_bridge_">Ponovno pokrenite Orbot da bi omogućili promjene</string>
<string name="menu_qr">QR kodovi</string>
- <string name="bridge_mode">Način rada Most</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Aktiviraj</string>
+ <string name="activate">Aktiviraj</string>
<string name="send_email">Pošalji email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Možete dobiti adrese mostova kroz email, web ili skeniranjem QR koda. Odaberite \'Email\' ili \'Web\' niže da zatražite adresu mosta.\n\nJednom kad imate adresu, kopirajte i zalijepite ju u \"Mostovi\" postavku Orbot-a i ponovno ga pokrenite.</string>
- <string name="save">Spremi</string>
+ <string name="save">Spremi</string>
<string name="name">Ime</string>
<string name="please_restart_Orbot_to_enable_the_changes">Ponovno pokrenite Orbot da bi omogućili promjene</string>
</resources>
diff --git a/app-mini/src/main/res/values-hu/strings.xml b/app-mini/src/main/res/values-hu/strings.xml
index b7d126be..13ae04bf 100644
--- a/app-mini/src/main/res/values-hu/strings.xml
+++ b/app-mini/src/main/res/values-hu/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Csatlakozva a Tor hálózathoz</string>
<string name="status_disabled">Az Orbot deaktiválva</string>
<string name="status_shutting_down">A TorService leáll</string>
- <string name="tor_process_starting">A Tor kliens indítása...</string>
- <string name="tor_process_complete">kész.</string>
- <string name="menu_settings">Beállítások</string>
+ <string name="menu_settings">Beállítások</string>
<string name="menu_log">Log</string>
<string name="menu_start">Indítás</string>
<string name="menu_stop">Leállítás</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Mutassa a bővített értesítést a Tor kilépő országgal és IP-vel</string>
<string name="pref_use_expanded_notifications_title">Bővített értesítések</string>
<string name="set_locale_title">Nyelv</string>
- <string name="no_internet_connection_tor">Nincs internetkapcsolat; Tor készenlétben...</string>
- <string name="pref_disable_network_title">Nincs hálózati auto-alvás</string>
+ <string name="pref_disable_network_title">Nincs hálózati auto-alvás</string>
<string name="pref_disable_network_summary">A Tor alvó módba helyezése, ha internet nem elérhető</string>
<string name="newnym">Új Tor identitásra váltottál!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nincs hálózati kapcsolat. Tor alvó állapotba helyezése...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">A hálózati kapcsolat jó. Tor felébresztése...</string>
<string name="updating_settings_in_tor_service">a Tor szolgáltatás beállításainak frissítése</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Port amelyen a Tor a SOCKS proxyt biztosítja (alapértelmezett: 9050 vagy 0 a tiltáshoz)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Kérlek indítsd újra az Orbot-ot a változások engedélyezéséhez</string>
<string name="menu_qr">QR kódok</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Ha a mobil hálózata aktívan blokkolja a Tor-t, akkor választhatja a \'Híd szerver\'-t, mint alternatív utat. VÁLASSZON egyet a lehetőségek közül és tesztelje....</string>
- <string name="bridge_mode">Híd mód</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Aktiválás</string>
<string name="apps_mode">VPN Mód</string>
<string name="send_email">Email küldése</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Kaphatsz egy híd-címet emailen, weben keresztül vagy a híd QR kódjának beszkennelésével. Válaszd az \'Email\'-t vagy a \'Web\'-et alább a híd-cím kéréséhez.\n\nAmikor már van egy címed, másold & illeszd be \"Hidak\" preferenciákba az Orbot beállításaiban és indítsd újra.</string>
- <string name="vpn_default_world">Globális (Auto)</string>
+ <string name="vpn_default_world">Globális (Auto)</string>
<string name="hidden_services">Rejtett szolgáltatások</string>
<string name="title_activity_hidden_services">Rejtett szolgáltatások</string>
<string name="menu_hidden_services">Rejtett szolgáltatások</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Vegye fontolóra az akkumulátor optimalizálás engedélyezését</string>
<string name="pref_isolate_dest">Célcím elszigetelése</string>
<string name="pref_isolate_dest_summary">Másik áramkör használata minden célcímhez</string>
- <string name="no_transproxy_warning_short">FIGYELEM: A Transproxying már nem támogatott</string>
- <string name="no_transproxy_warning">FIGYELEM: A transzparens proxyzásmár nem támogatott. Használja az Orbot App VPN-t helyette.</string>
<string name="pref_connection_padding">Kapcsolat kitöltés</string>
<string name="pref_connection_padding_summary">Mindig engedélyezi a kapcsolat kitöltést, hogy megvédjen a hálózati analízistől. Alapértelmezés: auto </string>
<string name="pref_reduced_connection_padding">Csökkentett kapcsolat kitöltés</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Csatlakozás közvetlenül a Tor-hoz (Legjobb)</string>
<string name="bridge_community">Csatlakozás közösségi szervereken keresztül</string>
<string name="bridge_cloud">Csatlakozás felhőszervereken keresztül</string>
- <string name="bridges_get_new">Új hidak kérése... (ha más nem segített)</string>
- <string name="trouble_connecting">Probléma a csatlakozással?</string>
+ <string name="trouble_connecting">Probléma a csatlakozással?</string>
<string name="full_device_vpn">Teljes Készülék VPN</string>
<string name="vpn_disabled">VPN Letiltva</string>
</resources>
diff --git a/app-mini/src/main/res/values-id/strings.xml b/app-mini/src/main/res/values-id/strings.xml
index 7dda908a..dd856477 100644
--- a/app-mini/src/main/res/values-id/strings.xml
+++ b/app-mini/src/main/res/values-id/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Tersambung ke Jaringan Tor</string>
<string name="status_disabled">Orbot telah dibatalkan</string>
<string name="status_shutting_down">TorService dimatikan</string>
- <string name="tor_process_starting">Memulai klien Tor...</string>
- <string name="tor_process_complete">selesai.</string>
- <string name="menu_settings">Pengaturan</string>
+ <string name="menu_settings">Pengaturan</string>
<string name="menu_log">Log</string>
<string name="menu_start">Mulai</string>
<string name="menu_stop">Berhenti</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Tampilkan notifikasi melebar dengan negara dan IP keluar Tor</string>
<string name="pref_use_expanded_notifications_title">Notifikasi Melebar</string>
<string name="set_locale_title">Bahasa</string>
- <string name="no_internet_connection_tor">Tidak ada koneksi internet; Tor sedang standby...</string>
- <string name="pref_disable_network_title">Auto-Tidur Tidak Ada Jaringan</string>
+ <string name="pref_disable_network_title">Auto-Tidur Tidak Ada Jaringan</string>
<string name="pref_disable_network_summary">Menempatkan Tor untuk tidur ketika tidak ada internet yang tersedia</string>
<string name="newnym">Anda telah beralih ke identitas Tor baru!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Tidak ada jaringan terhubung. Menidurkan Tor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Jaringan terhubung baik. Memanggil Tor...</string>
<string name="updating_settings_in_tor_service">memperbarui setting pada layanan Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_socks_summary">Port tempat proxy SOCKS Tor aktif (standar: 9050 atau 0 untuk mematikan)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Bridge Telah Diperbarui</string>
<string name="restart_orbot_to_use_this_bridge_">Silakan start ulang Orbot untuk mengaktifkan perubahan</string>
<string name="menu_qr">Kode QR</string>
- <string name="bridge_mode">Mode Bridge</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Laman</string>
- <string name="activate">Aktivasi</string>
+ <string name="activate">Aktivasi</string>
<string name="send_email">Kirim Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Anda bisa mendapatkan alamat bridge melalui email, halaman web atau dengan memindai kode QR bridge tersebut. Pilih \'Email\' atau \'Laman\' di bawah untuk meminta alamat bridge. Setelah anda mendapatkannya, salin lalu tempel di pilihan \"Bridges\" pada setting Orbot lalu start ulang.</string>
- <string name="save">Simpan</string>
+ <string name="save">Simpan</string>
<string name="name">Nama</string>
<string name="done">Selesai!</string>
<string name="please_restart_Orbot_to_enable_the_changes">Silakan start ulang Orbot untuk mengaktifkan perubahan</string>
diff --git a/app-mini/src/main/res/values-in-rID/strings.xml b/app-mini/src/main/res/values-in-rID/strings.xml
index 02e0ecd9..2f04fd97 100644
--- a/app-mini/src/main/res/values-in-rID/strings.xml
+++ b/app-mini/src/main/res/values-in-rID/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Tersambung ke jaringan Tor</string>
<string name="status_disabled">Orbot telah dibatalkan</string>
<string name="status_shutting_down">TorService sedang dimatikan</string>
- <string name="tor_process_starting">Memulai klien Tor...</string>
- <string name="tor_process_complete">selesai.</string>
- <string name="menu_settings">Pengaturan</string>
+ <string name="menu_settings">Pengaturan</string>
<string name="menu_log">Log</string>
<string name="menu_start">Mulai</string>
<string name="menu_stop">Berhenti</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Tampilkan notifikasi melebar dengan negara dan IP keluar Tor</string>
<string name="pref_use_expanded_notifications_title">Notifikasi Melebar</string>
<string name="set_locale_title">Bahasa</string>
- <string name="no_internet_connection_tor">Tidak ada koneksi internet; Tor sedang standby...</string>
- <string name="pref_disable_network_title">Auto-Tidur Tidak Ada Jaringan</string>
+ <string name="pref_disable_network_title">Auto-Tidur Tidak Ada Jaringan</string>
<string name="pref_disable_network_summary">Menempatkan Tor untuk tidur ketika tidak ada internet yang tersedia</string>
<string name="newnym">Anda telah beralih ke identitas Tor baru!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Tidak ada jaringan terhubung. Menidurkan Tor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Jaringan terhubung baik. Memanggil Tor...</string>
<string name="updating_settings_in_tor_service">memperbarui setting pada layanan Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_socks_summary">Port tempat proxy SOCKS Tor aktif (standar: 9050 atau 0 untuk mematikan)</string>
@@ -128,11 +123,8 @@
<string name="bridges_updated">Bridge Telah Diperbarui</string>
<string name="restart_orbot_to_use_this_bridge_">Silakan start ulang Orbot untuk mengaktifkan perubahan</string>
<string name="menu_qr">Kode QR</string>
- <string name="bridge_mode">Mode Bridge</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Laman</string>
- <string name="activate">Aktivasi</string>
+ <string name="activate">Aktivasi</string>
<string name="send_email">Kirim Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Anda bisa mendapatkan alamat bridge melalui email, halaman web atau dengan memindai kode QR bridge tersebut. Pilih \'Email\' atau \'Laman\' di bawah untuk meminta alamat bridge. Setelah anda mendapatkannya, salin lalu tempel di pilihan \"Bridges\" pada setting Orbot lalu start ulang.</string>
- <string name="please_restart_Orbot_to_enable_the_changes">Silakan start ulang Orbot untuk mengaktifkan perubahan</string>
+ <string name="please_restart_Orbot_to_enable_the_changes">Silakan start ulang Orbot untuk mengaktifkan perubahan</string>
</resources>
diff --git a/app-mini/src/main/res/values-is/strings.xml b/app-mini/src/main/res/values-is/strings.xml
index abc9b055..d95a67ca 100644
--- a/app-mini/src/main/res/values-is/strings.xml
+++ b/app-mini/src/main/res/values-is/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Tengdur við Tor netið</string>
<string name="status_disabled">Orbot er óvirkt</string>
<string name="status_shutting_down">TorService er að slökkva á sér</string>
- <string name="tor_process_starting">Kveiki á Tor notandaforriti...</string>
- <string name="tor_process_complete">lokið.</string>
- <string name="menu_settings">Stillingar</string>
+ <string name="menu_settings">Stillingar</string>
<string name="menu_log">Atvikaskráning</string>
<string name="menu_start">Ræsa</string>
<string name="menu_stop">Stöðva</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Birta útflettar tilkynningar varðandi Tor-útgangsland og IP-vistfang</string>
<string name="pref_use_expanded_notifications_title">Útflettar tilkynningar</string>
<string name="set_locale_title">Tungumál</string>
- <string name="no_internet_connection_tor">Engin tenging við netið; Tor er í biðstöðu...</string>
- <string name="pref_disable_network_title">Engin sjálfvirk svæfing netkerfis</string>
+ <string name="pref_disable_network_title">Engin sjálfvirk svæfing netkerfis</string>
<string name="pref_disable_network_summary">Svæfa Tor þegar engin internettenging er til staðar</string>
<string name="newnym">Þú ert komin með nýtt Tor-auðkenni!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Engin tenging við netið. Tor verður svæft...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Tenging við netið er góð. Tor verður vakið upp...</string>
<string name="updating_settings_in_tor_service">uppfæri stillingar í Tor þjónustu</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Gátt sem Tor býður SOCKS milliþjón á (sjálfgefið: 9050 eða 0 til að gera óvirkt)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Endurræstu Orbot til að breytingarnar taki gildi</string>
<string name="menu_qr">QR-kóðar</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Ef farsímanetið þitt er virkt í að loka á Tor, geturðu notað \'Brúarþjón\' sem varaleið inn. VELDU einn af valkostunum til að setja upp og prófa...</string>
- <string name="bridge_mode">Brúar-hamur</string>
<string name="get_bridges_email">Tölvupóstur</string>
- <string name="get_bridges_web">Vefur</string>
<string name="activate">Virkja</string>
<string name="apps_mode">VPN-hamur</string>
<string name="send_email">Senda tölvupóst</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Þú getur fengið vistfang brúar sent í gegnum tölvupóst, vefinn eða með að skanna QR-kóða fyrir brú. Veldu \'Tölvupóstur\' eða \'Vefur\' fyrir neðan til að óska eftir vistfangi brúar.\n\nÞegar þú kominn með vistfang, afritaðu & límdu það inn í stillingar fyrir \'Brýr\' í kjörstillingum Orbot og endurræstu síðan.</string>
- <string name="vpn_default_world">Víðvært (sjálfvirkt)</string>
+ <string name="vpn_default_world">Víðvært (sjálfvirkt)</string>
<string name="hidden_services">Faldar þjónustur</string>
<string name="title_activity_hidden_services">Faldar þjónustur</string>
<string name="menu_hidden_services">Faldar þjónustur</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Íhugaðu að virkja bestun fyrir rafhlöðu</string>
<string name="pref_isolate_dest">Einangra markvistfang</string>
<string name="pref_isolate_dest_summary">Nota mismunandi rás fyrir hvert markvistfang</string>
- <string name="no_transproxy_warning_short">AÐVÖRUN: Gegnsæ milliþjónabeining er ekki lengur studd.</string>
- <string name="no_transproxy_warning">AÐVÖRUN: Gegnsæ milliþjónabeining er ekki studd. Notaðu í staðinn VPN fyrir forrit í Orbot.</string>
<string name="pref_connection_padding">Bólstrun tengingar (padding)</string>
<string name="pref_connection_padding_summary">Virkjar alltaf bólstrun tengingar (padding) til varnar gegn ákveðnum gerðum umferðargreiningar. Sjálfgefið: sjálfvirkt</string>
<string name="pref_reduced_connection_padding">Minnkuð bólstrun tengingar (padding)</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Tengjast beint við Tor (best)</string>
<string name="bridge_community">Tengjast í gegnum þjóna meðlima</string>
<string name="bridge_cloud">Tengjast í gegnum þjóna í tölvuskýjum</string>
- <string name="bridges_get_new">Biðja um nýjar brýr... (ef allt annað bregst)</string>
- <string name="trouble_connecting">Vandamál við tengingu?</string>
+ <string name="trouble_connecting">Vandamál við tengingu?</string>
<string name="full_device_vpn">Fullt VPN á tækinu</string>
<string name="vpn_disabled">VPN óvirkt</string>
</resources>
diff --git a/app-mini/src/main/res/values-it/strings.xml b/app-mini/src/main/res/values-it/strings.xml
index ac115146..cc465417 100644
--- a/app-mini/src/main/res/values-it/strings.xml
+++ b/app-mini/src/main/res/values-it/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Connesso alla rete Tor</string>
<string name="status_disabled">Orbot è disattivato</string>
<string name="status_shutting_down">TorService si sta spegnendo</string>
- <string name="tor_process_starting">Avvio client Tor...</string>
- <string name="tor_process_complete">completa.</string>
- <string name="menu_settings">Impostazioni</string>
+ <string name="menu_settings">Impostazioni</string>
<string name="menu_log">Log</string>
<string name="menu_start">Avvia</string>
<string name="menu_stop">Ferma</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Visualizza notifica espansa con nazione e ip dell\'nodo d\'uscita Tor</string>
<string name="pref_use_expanded_notifications_title">Espandi notifiche</string>
<string name="set_locale_title">Lingua</string>
- <string name="no_internet_connection_tor">Nessuna connessione ad internet; Tor è in standby...</string>
- <string name="pref_disable_network_title">impedire spegnimento automatico della rete</string>
+ <string name="pref_disable_network_title">impedire spegnimento automatico della rete</string>
<string name="pref_disable_network_summary">Stand-by di Tor quando non c\'è un collegamento a internet disponibile</string>
<string name="newnym">Sei passato a una nuova identità Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nessuna connettività di rete. Mettendo Tor a riposo...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Connettività di rete buona. Svegliando Tor...</string>
<string name="updating_settings_in_tor_service">aggiornamento impostazioni nel servizio Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Porta sulla quale Tor offre il proxy SOCKS (default: 9050 o 0 per disabilitare)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Per favore riavvia Orbot per rendere effettive le modifiche</string>
<string name="menu_qr">Codici QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Se la tua rete mobile blocca attivamente Tor, puoi usare un \'Server Bridge\' come via alternativa. SELEZIONA una delle opzioni per configurare e testare...</string>
- <string name="bridge_mode">Modalità Bridge</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Attiva</string>
<string name="apps_mode">Modalità VPN</string>
<string name="send_email">Invia email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Tu poi ricevere un indirizzo bridge via email, web o scansionando un codice QR. Seleziona \'Email\' o \'Web\' per richiedere un indirizzo bridge.\n\nUna volta che hai un indirizzo, copialo & incollalo nell\'opzione \"Bridges\" delle impostazioni di Orbot e riavvialo.</string>
- <string name="vpn_default_world">Globale (Auto)</string>
+ <string name="vpn_default_world">Globale (Auto)</string>
<string name="hidden_services">Servizi nascosti</string>
<string name="title_activity_hidden_services">Servizi nascosti</string>
<string name="menu_hidden_services">Servizi nascosti</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Considera l\'attivazione dell\'ottimizzazione della batteria</string>
<string name="pref_isolate_dest">Isola gli indirizzi di destinazione</string>
<string name="pref_isolate_dest_summary">Usa un circuito diverso per ogni indirizzo di destinazione</string>
- <string name="no_transproxy_warning_short">ATTENZIONE: Transproxying non più supportato</string>
- <string name="no_transproxy_warning">ATTENZIONE: proxy trasparenti non supportati. Usa la VPN App di Orbot piuttosto.</string>
<string name="pref_connection_padding">Connessione allungata (padding)</string>
<string name="pref_connection_padding_summary">Attiva sempre la \"connessione allungata\" per difesa contro alcune forme di analisi del traffico. Predefinito: auto</string>
<string name="pref_reduced_connection_padding">Connessione allungata ridotta</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Connettiti direttamente a Tor (Migliore)</string>
<string name="bridge_community">Connettiti tramite i server comunitari</string>
<string name="bridge_cloud">Connettiti tramite i server cloud</string>
- <string name="bridges_get_new">Richiedi nuovi bridge... (se gli altri falliscono)</string>
- <string name="trouble_connecting">Problemi nel connetterti?</string>
+ <string name="trouble_connecting">Problemi nel connetterti?</string>
<string name="full_device_vpn">VPN intero dispositivo</string>
<string name="vpn_disabled">VPN Disabilitata</string>
</resources>
diff --git a/app-mini/src/main/res/values-iw/strings.xml b/app-mini/src/main/res/values-iw/strings.xml
index 5f5946ab..69da2e40 100644
--- a/app-mini/src/main/res/values-iw/strings.xml
+++ b/app-mini/src/main/res/values-iw/strings.xml
@@ -5,8 +5,6 @@
<string name="status_starting_up">Orbot מתחיל…</string>
<string name="status_activated">מחובר לרשת Tor</string>
<string name="status_disabled">Orbot כבוי</string>
- <string name="tor_process_starting">מתחיל לקוח Tor...</string>
- <string name="tor_process_complete">הושלם.</string>
<string name="menu_settings">הגדרות</string>
<string name="menu_log">רישום</string>
<string name="menu_start">התחל</string>
@@ -89,11 +87,8 @@
<string name="unable_to_start_tor">לא מסוגל להתחיל את Tor:</string>
<string name="pref_use_persistent_notifications">לשמור תמיד את האיקון בסרגל כלים כשאורבוט מחובר</string>
<string name="set_locale_title">שפה</string>
- <string name="no_internet_connection_tor">אין חיבור לאינטרנט; תור ממתין...</string>
- <string name="pref_disable_network_summary">כבה את Tor כאשר אין חיבור לאינטרנט</string>
+ <string name="pref_disable_network_summary">כבה את Tor כאשר אין חיבור לאינטרנט</string>
<string name="newnym">החלפת אל זהות Tor חדשה!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">אין חיבור לרשת. מכבה את Tor....</string>
- <string name="network_connectivity_is_good_waking_tor_up_">החיבור עובד טוב. מעיר את Tor...</string>
<string name="updating_settings_in_tor_service">מעדכן הגדרות Tor במכשיר</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_dialog">הגדרות SOCKS Port </string>
@@ -106,7 +101,6 @@
<string name="mb">MB</string>
<string name="menu_qr">קוד QR</string>
<string name="get_bridges_email">דוא\"ל</string>
- <string name="get_bridges_web">אתר</string>
- <string name="activate">הפעל</string>
+ <string name="activate">הפעל</string>
<string name="send_email">שלח דוא\"ל</string>
</resources>
diff --git a/app-mini/src/main/res/values-ja/strings.xml b/app-mini/src/main/res/values-ja/strings.xml
index 1c77cf96..20e2182c 100644
--- a/app-mini/src/main/res/values-ja/strings.xml
+++ b/app-mini/src/main/res/values-ja/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Torネットワークに接続しています</string>
<string name="status_disabled">\"Orbotが解除されました</string>
<string name="status_shutting_down">TorServiceが終了しています</string>
- <string name="tor_process_starting">Torクライエントを開始しています...</string>
- <string name="tor_process_complete">完了</string>
- <string name="menu_settings">設定</string>
+ <string name="menu_settings">設定</string>
<string name="menu_log">履歴</string>
<string name="menu_start">スタート</string>
<string name="menu_stop">停止</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">拡張通知で、Torの出口の国とIPを表示します</string>
<string name="pref_use_expanded_notifications_title">拡張通知</string>
<string name="set_locale_title">言語</string>
- <string name="no_internet_connection_tor">インターネット接続なし。Torは待機中です...</string>
- <string name="pref_disable_network_title">ネットワークなし時オートスリープ</string>
+ <string name="pref_disable_network_title">ネットワークなし時オートスリープ</string>
<string name="pref_disable_network_summary">ネット接続がない時 Tor をスリープさせる</string>
<string name="newnym">新たな Tor の身元に切り替えました。</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">ネットワーク接続がありません。Torはスリープします…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">ネットワーク接続は良好です。Torを有効にします…</string>
<string name="updating_settings_in_tor_service">Torサービスの設定を更新中</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">TorがSOCKSプロキシを提供するポート (デフォルト: 9050、0にすると無効)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">変更を有効にするにはOrbotを再起動してください</string>
<string name="menu_qr">QRコード</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">モバイルネットワークが頻繁にTorをブロックする場合、別の方法として \'ブリッジサーバー\'を使用することができます。オプションを1つ選択して、設定とテストを行ってください。</string>
- <string name="bridge_mode">ブリッジ モード</string>
<string name="get_bridges_email">メール</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">アクティブ化</string>
<string name="apps_mode">VPN モード</string>
<string name="send_email">メール送信</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">あなたは、メール、ウェブを介して、またはブリッジQRコードをスキャンしてブリッジアドレスを取得することができます。ブリッジアドレスを要求するため、下の「メール」または「ウェブ」を選択してください。\n\nアドレスを入手したら、それをOrbot設定の「ブリッジ」設定にコピー& 貼り付けして、Orbotを再起動します。</string>
- <string name="vpn_default_world">世界中 (自動)</string>
+ <string name="vpn_default_world">世界中 (自動)</string>
<string name="hidden_services">Hidden Services</string>
<string name="title_activity_hidden_services">Hidden Services</string>
<string name="menu_hidden_services">Hidden Services</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">電池最適化を有効にすることを考察する</string>
<string name="pref_isolate_dest">宛先アドレスを分離する</string>
<string name="pref_isolate_dest_summary">宛先アドレスごとに別のサーキットを利用する</string>
- <string name="no_transproxy_warning_short">警告:透過的プロキシはもはやサポートされていません。</string>
- <string name="no_transproxy_warning">警告:透過的プロキシはサポートされていません。代わりにOrbotのアプリVPNを利用して下さい。</string>
<string name="pref_connection_padding">通信難読化</string>
<string name="pref_connection_padding_summary">ある種のトラヒック分析から防衛するために、常に通信難読化を有効にします。デフォルト:自動的</string>
<string name="pref_reduced_connection_padding">減らした通信難読化</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Tor に直接接続する (ベスト)</string>
<string name="bridge_community">コミュニティーサーバーを介して接続する</string>
<string name="bridge_cloud">クラウドサーバーを介して接続する</string>
- <string name="bridges_get_new">新しいブリッジをリクエストする...(最悪の場合に)</string>
- <string name="trouble_connecting">接続に問題がありましたか?</string>
+ <string name="trouble_connecting">接続に問題がありましたか?</string>
<string name="full_device_vpn">フルデバイス VPN</string>
<string name="vpn_disabled">VPN が無効</string>
</resources>
diff --git a/app-mini/src/main/res/values-ko/strings.xml b/app-mini/src/main/res/values-ko/strings.xml
index 2e4f3848..ebe7da69 100644
--- a/app-mini/src/main/res/values-ko/strings.xml
+++ b/app-mini/src/main/res/values-ko/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Tor 네트워크에 연결됨</string>
<string name="status_disabled">Orbot이 비활성화되어 있습니다</string>
<string name="status_shutting_down">토르 서비스가 종료되는 중입니다</string>
- <string name="tor_process_starting">Tor 클라이언트 시작 중…</string>
- <string name="tor_process_complete">완료.</string>
- <string name="menu_settings">설정</string>
+ <string name="menu_settings">설정</string>
<string name="menu_log">로그</string>
<string name="menu_start">시작</string>
<string name="menu_stop">중지</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">출구 및 IP 정보알림 보이기</string>
<string name="pref_use_expanded_notifications_title">확장 알림</string>
<string name="set_locale_title">언어</string>
- <string name="no_internet_connection_tor">인터넷 연결안됨; 대기중입니다...</string>
- <string name="pref_disable_network_title">네트워크가 없을 때의 자동 슬립</string>
+ <string name="pref_disable_network_title">네트워크가 없을 때의 자동 슬립</string>
<string name="pref_disable_network_summary">인터넷이 불가능하다면 Tor를 슬립 모드로 두십시오</string>
<string name="newnym">새로운 Tor 신원으로 전환되었습니다!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">네트워크에 연결되어 있지 않습니다. 토르를 잠자기 모드로 변경합니다...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">네트워크에 연결되었습니다. 토르를 다시 깨웁니다...</string>
<string name="updating_settings_in_tor_service">토르 서비스의 설정을 업데이트 중입니다</string>
<string name="pref_socks_title">토르 SOCKS</string>
<string name="pref_socks_summary">SOCKS 프록시를 받을 포트 (기본: 9050 / 0은 비활성화)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">브릿지가 업데이트되었습니다</string>
<string name="restart_orbot_to_use_this_bridge_">변경을 완료하려면 Orbot을 재시작하세요</string>
<string name="menu_qr">QR 코드</string>
- <string name="bridge_mode">브릿지 모드</string>
<string name="get_bridges_email">이메일</string>
- <string name="get_bridges_web">웹</string>
- <string name="activate">활성화</string>
+ <string name="activate">활성화</string>
<string name="send_email">이메일 보내기</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">브릿지 주소를 이메일이나 QR코드를 통해 얻을 수 있습니다. 아래의 \"이메일\"이나 \"웹\"을 터치해 브릿지 주소를 요청하세요.\n\n주소를 얻었다면, 설정의 \"브릿지\" 항목에 복사 & 붙여넣기한 뒤 Orbot을 재시작하세요.</string>
- <string name="save">저장</string>
+ <string name="save">저장</string>
<string name="name">Name</string>
<string name="please_restart_Orbot_to_enable_the_changes">변경을 완료하려면 Orbot을 재시작하세요</string>
<string name="disable">비활성화</string>
diff --git a/app-mini/src/main/res/values-lt/strings.xml b/app-mini/src/main/res/values-lt/strings.xml
index 24ffde66..a411d355 100644
--- a/app-mini/src/main/res/values-lt/strings.xml
+++ b/app-mini/src/main/res/values-lt/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Prisijungta prie Tor tinklo</string>
<string name="status_disabled">Orbot išjungtas</string>
<string name="status_shutting_down">TorService išjungiamas</string>
- <string name="tor_process_starting">Paleidžiamas Tor klientas...</string>
- <string name="tor_process_complete">baigta.</string>
<string name="menu_settings">Nustatymai</string>
<string name="menu_log">Žurnalas</string>
<string name="menu_start">Pradėti</string>
diff --git a/app-mini/src/main/res/values-lv/strings.xml b/app-mini/src/main/res/values-lv/strings.xml
index 5196b05e..2d33f419 100644
--- a/app-mini/src/main/res/values-lv/strings.xml
+++ b/app-mini/src/main/res/values-lv/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Izveidots savienojums ar tīklu Tor</string>
<string name="status_disabled">Orbot ir deaktivēts</string>
<string name="status_shutting_down">TorService izslēdzas</string>
- <string name="tor_process_starting">Startē Tor klientu...</string>
- <string name="tor_process_complete">pabeidz.</string>
- <string name="menu_settings">Iestatījumi</string>
+ <string name="menu_settings">Iestatījumi</string>
<string name="menu_log">Žurnāls</string>
<string name="menu_start">Startēt</string>
<string name="menu_stop">Apturēt</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Rādīt paplašinātus paziņojumus, kur norādīts IP un Tor izejas valsts</string>
<string name="pref_use_expanded_notifications_title">Paplašināti paziņojumi</string>
<string name="set_locale_title">Valoda</string>
- <string name="no_internet_connection_tor">Nav interneta savienojuma; Tor ir gaidstāvē...</string>
- <string name="pref_disable_network_title">Neizmantot tīkla automātiskā miega režīmu</string>
+ <string name="pref_disable_network_title">Neizmantot tīkla automātiskā miega režīmu</string>
<string name="pref_disable_network_summary">Kad nav interneta, pārslēgt Tor\'u uz miega režīmu</string>
<string name="newnym">Jūs pārslēdzāties uz jaunu Tor\'a identitāti!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nav tīkla savienojuma. Tor\'am iestata miega režīmu...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Labs tīkla savienojums. Aktivizē Tor\'u...</string>
<string name="updating_settings_in_tor_service">atjaunina Tor pakalpojuma iestatījumus </string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Ports, uz kura Tor piedāvā savu SOCKS starpniekserveri (noklusējumvērtība: 9050 vai 0 lai atspējotu)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Tilti ir atjaunināti</string>
<string name="restart_orbot_to_use_this_bridge_">Lūdzu pārstartējiet Orbot, lai iespējotu izmaiņas</string>
<string name="menu_qr">QR kodi</string>
- <string name="bridge_mode">Tiltu režīms</string>
<string name="get_bridges_email">E-pasts</string>
- <string name="get_bridges_web">Tīmeklis</string>
- <string name="activate">Aktivizēt</string>
+ <string name="activate">Aktivizēt</string>
<string name="send_email">Nosūtīt e-pastu</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Jūs varat saņemt tiltu adreses e-pastā, tīmeklī vai skenējot tiltu QR kodu. Zemāk atlasiet „E-pasts” vai „Tīmeklis”, lai pieprasītu tiltu adreses. Kad esat saņēmis adreses, tad tās iekopējiet un ielīmējiet Orbot iestatījumu preferencēs „Tilti” un pārstartējiet.</string>
- <string name="hidden_services">Slēptie pakalpojumi</string>
+ <string name="hidden_services">Slēptie pakalpojumi</string>
<string name="title_activity_hidden_services">Slēptie pakalpojumi</string>
<string name="menu_hidden_services">Slēptie pakalpojumi</string>
<string name="save">Saglabāt</string>
diff --git a/app-mini/src/main/res/values-mk/strings.xml b/app-mini/src/main/res/values-mk/strings.xml
index 9f28c462..5e5a7db1 100644
--- a/app-mini/src/main/res/values-mk/strings.xml
+++ b/app-mini/src/main/res/values-mk/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Поврзан на мрежата на Tor</string>
<string name="status_disabled">Орбот е деактивиран</string>
<string name="status_shutting_down">Tor-Сервисот се исклучува</string>
- <string name="tor_process_starting">Стартување на Tor клиентот...</string>
- <string name="tor_process_complete">завршено.</string>
<string name="menu_settings">Поставки</string>
<string name="menu_log">Дневник</string>
<string name="menu_start">Започни</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Прикажи проширено известување со излезната држава и IP на Tor</string>
<string name="pref_use_expanded_notifications_title">Проширени известувања</string>
<string name="set_locale_title">Јазик</string>
- <string name="no_internet_connection_tor">Нема интернет врска; Tor е во мирување...</string>
<string name="pref_disable_network_title">Нема Автоматско-спиење на мрежата</string>
<string name="pref_disable_network_summary">Ставете го Тор на режим на спиење кога Интернетот не е достапен</string>
<string name="newnym">Се префрливте на нов идентитет на Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Нема мрежно поврзување. Ставете го Tor на режим на спиење...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Мрежното поврзување е добро. Tor се буди...</string>
<string name="updating_settings_in_tor_service">ажурирање на поставките во Tor сервисот </string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Порта на која Тор и го нуди својот SOCKS-прокси (стандардно: 9050 или 0 за да се исклучи)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Ве молиме повторно стартувајте го Orbot за да се овозможат промените</string>
<string name="menu_qr">QR-кодови</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Ако вашата мобилна мрежа активно го блокира Tor, можете да користите „Мост сервер“ како алтернативен пристап. ОДБЕРЕТЕ една од опциите за поставување и тестирање...</string>
- <string name="bridge_mode">Режим на работа на мостот</string>
<string name="get_bridges_email">Е-пошта</string>
- <string name="get_bridges_web">Веб</string>
<string name="activate">Активирај</string>
<string name="apps_mode">VPN мод</string>
<string name="send_email">Испратете е-пошта</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Aдреса на мостови можете да добивате преку е-пошта, веб или со скенирање на QR кодот на мостот. Изберете подолу \'Е-пошта\' или \'Web\', за да побарате адреса за мостот. \n\nОткако ќе ја добиете адресата, копирајте ја & и залепете ја во делот \"Мостови\" во подесувањето на Orbot и повторно стартувајте.</string>
- <string name="vpn_default_world">Глобално (Автоматски)</string>
+ <string name="vpn_default_world">Глобално (Автоматски)</string>
<string name="hidden_services">Скриени сервиси</string>
<string name="title_activity_hidden_services">Скриени сервиси</string>
<string name="menu_hidden_services">Скриени сервиси</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Размислете за овозможување на оптимизациите на батеријата</string>
<string name="pref_isolate_dest">Изолирај адреси на дестинација</string>
<string name="pref_isolate_dest_summary">Користи различен круг за секоја адреса на дестинација</string>
- <string name="no_transproxy_warning_short">ВНИМАНИЕ: Транспроксирањето повеќе не е поддржано</string>
- <string name="no_transproxy_warning">ВНИМАНИЕ: Транспарентното пренасочувањее не е поддржано. Наместо тоа користите Orbot Apps VPN.</string>
<string name="pref_connection_padding">Камуфлирано поврзување</string>
<string name="pref_connection_padding_summary">Секогаш овозможи поврзување со камуфлажа против некои форми на анализирање на интернет сообраќајот. Стандардно: Автоматски</string>
<string name="pref_reduced_connection_padding">Редуцирај поврзување со камуфлажа</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Поврзи директно на Tor (Најдобро)</string>
<string name="bridge_community">Поврзи преку сервери на заедницата</string>
<string name="bridge_cloud">Поврзи преку облак-сервери</string>
- <string name="bridges_get_new">Бара нови мостови... (ако сите други не успеале)</string>
- <string name="trouble_connecting">Проблеми со поврзувањето?</string>
+ <string name="trouble_connecting">Проблеми со поврзувањето?</string>
<string name="full_device_vpn">Целосен VPN уред</string>
<string name="vpn_disabled">VPN оневозможен</string>
</resources>
diff --git a/app-mini/src/main/res/values-ms-rMY/strings.xml b/app-mini/src/main/res/values-ms-rMY/strings.xml
index 8b0fff9d..c54e9654 100644
--- a/app-mini/src/main/res/values-ms-rMY/strings.xml
+++ b/app-mini/src/main/res/values-ms-rMY/strings.xml
@@ -4,8 +4,6 @@
<string name="status_starting_up">Orbot telah dimulakan..</string>
<string name="status_activated">Bersambung ke rangkaian Tor</string>
<string name="status_disabled">\"Orbot telah dinyah-aktifkan</string>
- <string name="tor_process_starting">Memulakan klien Tor..</string>
- <string name="tor_process_complete">selesai.</string>
<string name="menu_settings">Tetapan</string>
<string name="menu_log">Log</string>
<string name="menu_start">Mula</string>
diff --git a/app-mini/src/main/res/values-ms/strings.xml b/app-mini/src/main/res/values-ms/strings.xml
index f9169742..da8195c5 100644
--- a/app-mini/src/main/res/values-ms/strings.xml
+++ b/app-mini/src/main/res/values-ms/strings.xml
@@ -5,8 +5,6 @@
<string name="status_activated">Bersambung ke rangkaian Tor</string>
<string name="status_disabled">\"Orbot telah dinyah-aktifkan</string>
<string name="status_shutting_down">Orbot sedang ditutup</string>
- <string name="tor_process_starting">Memulakan klien Tor..</string>
- <string name="tor_process_complete">selesai.</string>
<string name="menu_settings">Tetapan</string>
<string name="menu_log">Log</string>
<string name="menu_start">Mula</string>
diff --git a/app-mini/src/main/res/values-nb/strings.xml b/app-mini/src/main/res/values-nb/strings.xml
index 3e6e390c..af3cbc84 100644
--- a/app-mini/src/main/res/values-nb/strings.xml
+++ b/app-mini/src/main/res/values-nb/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Koblet til Tor-nettverket</string>
<string name="status_disabled">Orbot er deaktivert</string>
<string name="status_shutting_down">Tor-tjenesten avsluttes</string>
- <string name="tor_process_starting">Starter Tor-klient…</string>
- <string name="tor_process_complete">fullført.</string>
- <string name="menu_settings">Innstillinger</string>
+ <string name="menu_settings">Innstillinger</string>
<string name="menu_log">Logg</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stopp</string>
@@ -104,12 +102,9 @@
<string name="pref_use_expanded_notifications">Vis utvidede merknader med land og IP for utgangstrafikk fra Tor</string>
<string name="pref_use_expanded_notifications_title">Utvidede varsler</string>
<string name="set_locale_title">Språk</string>
- <string name="no_internet_connection_tor">Ingen Internett-tilkobling; Tor er i ventemodus…</string>
- <string name="pref_disable_network_title">Inget automatisk hvilemodus for nettverk</string>
+ <string name="pref_disable_network_title">Inget automatisk hvilemodus for nettverk</string>
<string name="pref_disable_network_summary">Legg Tor i hvilemodus når nettilkobling til internett ikke er tilgjengelig</string>
<string name="newnym">Du har byttet til en ny Tor-identitet!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Ingen nettverkstilkobling. Tor går i dvale…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Nettverkstilkoblingen er bra. Vekker opp Tor…</string>
<string name="updating_settings_in_tor_service">Oppdaterer innstillinger i Tor service</string>
<string name="pref_socks_title">Tor-SOCKS</string>
<string name="pref_socks_summary">Port som Tor tilbyr er SOCKS proxy på (standard: 9050 eller 0 for å slå av)</string>
@@ -130,14 +125,11 @@
<string name="bridges_updated">Broer oppdatert</string>
<string name="restart_orbot_to_use_this_bridge_">Gjør omstart av Orbot før endringer trer i kraft</string>
<string name="menu_qr">QR-koder</string>
- <string name="bridge_mode">Bro-modus</string>
<string name="get_bridges_email">E-post</string>
- <string name="get_bridges_web">Vev</string>
- <string name="activate">Aktiver</string>
+ <string name="activate">Aktiver</string>
<string name="apps_mode">VPN-modus</string>
<string name="send_email">Send e-post</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Du kan få en bro-adresse på e-post, gjennom nettet eller ved å skanne en bro-QR-kode. Velg \'E-post\' eller \'Nett\' nedenfor for å forespørre en broadresse.\n\nNår du har en adresse, kopier og lim den inn i \"Broer\" i Orbots innstillinger og start på ny.</string>
- <string name="hidden_services">Hidden Services</string>
+ <string name="hidden_services">Hidden Services</string>
<string name="title_activity_hidden_services">Hidden Services</string>
<string name="menu_hidden_services">Hidden Services</string>
<string name="save">Lagre</string>
diff --git a/app-mini/src/main/res/values-nl/strings.xml b/app-mini/src/main/res/values-nl/strings.xml
index 900b6bd7..c2e7b130 100644
--- a/app-mini/src/main/res/values-nl/strings.xml
+++ b/app-mini/src/main/res/values-nl/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Verbonden met het Tor-netwerk</string>
<string name="status_disabled">Orbot is uitgeschakeld</string>
<string name="status_shutting_down">TorService wordt afgesloten</string>
- <string name="tor_process_starting">Bezig met Tor-cliënt starten…</string>
- <string name="tor_process_complete">klaar.</string>
- <string name="menu_settings">Instellingen</string>
+ <string name="menu_settings">Instellingen</string>
<string name="menu_log">Logboek</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stop</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Toon uitgebreide melding met Tor-exitland en IP</string>
<string name="pref_use_expanded_notifications_title">Uitgebreide meldingen</string>
<string name="set_locale_title">Taal</string>
- <string name="no_internet_connection_tor">Geen internetverbinding; Tor is in de slaapstand...</string>
- <string name="pref_disable_network_title">Geen netwerk automatisch slapen</string>
+ <string name="pref_disable_network_title">Geen netwerk automatisch slapen</string>
<string name="pref_disable_network_summary">Laat Tor slapen als er geen internetverbinding beschikbaar is</string>
<string name="newnym">Je bent naar een nieuwe Tor identiteit gewisseld!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Geen internetverbinding. Tor wordt te slapen gelegd…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Netwerkverbinding is in orde. Tor wordt wakker gemaakt…</string>
<string name="updating_settings_in_tor_service">instellingen in Tor-dienst worden bijgewerkt</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Poort waarop Tor de SOCKS-proxy aanbiedt (standaard: 9050 of 0 om uit te schakelen)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Herstart Orbot om de wijzigingen in te schakelen</string>
<string name="menu_qr">QR-codes</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Als je mobiele netwerk Tor actief blokkeert, kan je een \'bridge-server\' gebruiken als alternatieve toegang. SELECTEER een van de opties om te configureren en te testen..,.</string>
- <string name="bridge_mode">Bridge-modus</string>
<string name="get_bridges_email">E-mail</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activeren</string>
<string name="apps_mode">VPN-modus</string>
<string name="send_email">E-mail versturen</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Je kan een bridge-adres verkrijgen door e-mail, het web of door een bridge-QR-code te scannen. Kies \'E-mail\' of \'Web\' hieronder om een bridge-adres aan te vragen.\n\nEenmaal je een adres hebt kopieer en plak je het in de \"Bridges\"-optie in de Orbot-instellingen, waarna je Orbot herstart.</string>
- <string name="vpn_default_world">Algemeen (automatisch)</string>
+ <string name="vpn_default_world">Algemeen (automatisch)</string>
<string name="hidden_services">Verborgen diensten</string>
<string name="title_activity_hidden_services">Verborgen diensten</string>
<string name="menu_hidden_services">Verborgen diensten</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Overweeg accubesparing in te schakelen</string>
<string name="pref_isolate_dest">Geïsoleerde bestemmingsadressen</string>
<string name="pref_isolate_dest_summary">Gebruik een ander circuit voor elk bestemmingsadres</string>
- <string name="no_transproxy_warning_short">WAARSCHUWING: transproxyen wordt niet meer ondersteund</string>
- <string name="no_transproxy_warning">WAARSCHUWING: transproxyen wordt niet meer ondersteund. Gebruik de Orbot-VPN.</string>
<string name="pref_connection_padding">Verbindingsopvulling</string>
<string name="pref_connection_padding_summary">Schakelt verbindingsopvulling altijd in om te verdedigen tegen krachtiger vormen van verkeersanalyse. Standaard: automatisch</string>
<string name="pref_reduced_connection_padding">Beperkte verbindingsopvulling</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Rechtstreeks verbinden met Tor (best)</string>
<string name="bridge_community">Verbinden via gemeenschapsservers</string>
<string name="bridge_cloud">Verbinden via cloudservers</string>
- <string name="bridges_get_new">Nieuwe bridges opvragen... (als alle andere opties mislukken)</string>
- <string name="trouble_connecting">Problemen met verbinden?</string>
+ <string name="trouble_connecting">Problemen met verbinden?</string>
<string name="full_device_vpn">Volledigapparaats-VPN</string>
<string name="vpn_disabled">VPN uitgeschakeld</string>
</resources>
diff --git a/app-mini/src/main/res/values-pl/strings.xml b/app-mini/src/main/res/values-pl/strings.xml
index ae138544..ed7be6af 100644
--- a/app-mini/src/main/res/values-pl/strings.xml
+++ b/app-mini/src/main/res/values-pl/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Podłączony do sieci Tor</string>
<string name="status_disabled">Orbot wyłączony</string>
<string name="status_shutting_down">TorService wyłącza się</string>
- <string name="tor_process_starting">Uruchamianie klienta sieci Tor...</string>
- <string name="tor_process_complete">gotowe.</string>
- <string name="menu_settings">Ustawienia</string>
+ <string name="menu_settings">Ustawienia</string>
<string name="menu_log">Logi</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stop</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Pokaż rozszerzone powiadomienie z krajem Tor exit node oraz jego IP</string>
<string name="pref_use_expanded_notifications_title">Rozszerzone Powiadomienia</string>
<string name="set_locale_title">Język</string>
- <string name="no_internet_connection_tor">Brak połączenia internetowego; Tor jest w trybie oczekiwania...</string>
- <string name="pref_disable_network_title">Brak Auto-Uśpienia Sieci</string>
+ <string name="pref_disable_network_title">Brak Auto-Uśpienia Sieci</string>
<string name="pref_disable_network_summary">Ustaw Tor\'a w tryb uśpienia kiedy połączenie internetowe będzie niedostępne</string>
<string name="newnym">Nowa tożsamość Tor\'a została zmieniona!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Brak połączenia internetowego. Tor będzie w trybie snu...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Połączenie internetowe jest dobre. Trwa budzenie Tora...</string>
<string name="updating_settings_in_tor_service">aktualizowanie ustawień w serwisie Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Port który oferuje SOCKS proxy (domyślnie: 9050 lub 0, aby wyłączyć)</string>
@@ -128,14 +123,11 @@
<string name="bridges_updated">Zaktualizowane Bridges</string>
<string name="restart_orbot_to_use_this_bridge_">Proszę zrestartować Orbot, aby zmiany mogły wejść w życie</string>
<string name="menu_qr">Kody QR</string>
- <string name="bridge_mode">Tryb Bridge</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Aktywuj</string>
+ <string name="activate">Aktywuj</string>
<string name="apps_mode">Tryb VPN</string>
<string name="send_email">Wyślij Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Możesz uzyskać adres Bridge poprzez email, internet, lub poprzez zeskanowanie kodu QR. Wybierz \'Email\' lub \'Internet\' poniżej, aby poprosić o adres bridge\'a.\n\nJak już będziesz mieć ten adres to skopiuj i wklej go do \"Bridges\" we właściwościach Orbota a następnie go zrestartuj.</string>
- <string name="hidden_services">Ukryte Usługi</string>
+ <string name="hidden_services">Ukryte Usługi</string>
<string name="title_activity_hidden_services">Ukryte Usługi</string>
<string name="menu_hidden_services">Ukryte Usługi</string>
<string name="save">Zapisz</string>
diff --git a/app-mini/src/main/res/values-pt-rBR/strings.xml b/app-mini/src/main/res/values-pt-rBR/strings.xml
index 1528f42d..d9d09a2d 100644
--- a/app-mini/src/main/res/values-pt-rBR/strings.xml
+++ b/app-mini/src/main/res/values-pt-rBR/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Conectado à rede Tor</string>
<string name="status_disabled">Orbot está desativado</string>
<string name="status_shutting_down">TorService está desligando</string>
- <string name="tor_process_starting">Iniciando cliente Tor...</string>
- <string name="tor_process_complete">completo.</string>
- <string name="menu_settings">Configurações</string>
+ <string name="menu_settings">Configurações</string>
<string name="menu_log">Log</string>
<string name="menu_start">Iniciar</string>
<string name="menu_stop">Parar</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Mostrar notificação expandida com Tor país de saída e IP</string>
<string name="pref_use_expanded_notifications_title">Notificações Expandidas</string>
<string name="set_locale_title">Idioma</string>
- <string name="no_internet_connection_tor">Sem conexão na internet; Tor está na espera...</string>
- <string name="pref_disable_network_title">Modo de espera automático</string>
+ <string name="pref_disable_network_title">Modo de espera automático</string>
<string name="pref_disable_network_summary">Colocar o Tor em modo de espera quando não houver acesso Internet disponível</string>
<string name="newnym">Você trocou para uma nova identidade Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Sem conectividade na rede. Colocando o Tor para dormir...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Conectividade da rede está boa. Acordando Tor</string>
<string name="updating_settings_in_tor_service">atualizando configurações no serviço Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Porta que Tor oferece seu proxy SOCKS (padrão: 9050 ou 0 para desativar)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Por favor reinicie Orbot para habilitar as mundanças</string>
<string name="menu_qr">QR Codes</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Se sua rede de dados bloqueia o Tor, você pode utilizar um \'Servidor Bridge\' como alternativa contra o bloqueio. SELECIONE umas das opções para configurar e testar..,.</string>
- <string name="bridge_mode">Modo Ponte</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Atvar</string>
<string name="apps_mode">Modo VPN</string>
<string name="send_email">Enviar Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Você pode obter um endereço de ponte através de e-mail, web ou lendo um código QR ponte. Selecione \'E-mail\' ou \'Web\' abaixo para solicitar uma ponte endereço. \n\nUma vez que você tem um endereço, copie & colá-lo na \"Bridges\" preferência na configuração e reiniciar do Orbot.</string>
- <string name="vpn_default_world">Global (Automático)</string>
+ <string name="vpn_default_world">Global (Automático)</string>
<string name="hidden_services">Serviços Ocultos</string>
<string name="title_activity_hidden_services">Serviços Ocultos</string>
<string name="menu_hidden_services">Serviços Ocultos</string>
@@ -179,7 +171,6 @@
<string name="bridge_direct_connect">Conecte-se diretamente ao Tor (Melhor forma)</string>
<string name="bridge_community">Conecte-se através de servidores da comunidade</string>
<string name="bridge_cloud">Conecte-se através de servidores em nuvem</string>
- <string name="bridges_get_new">Solicitar nova Bridge... (Se todas falharem)</string>
- <string name="trouble_connecting">Problemas na conexão ? </string>
+ <string name="trouble_connecting">Problemas na conexão ? </string>
<string name="full_device_vpn">VPN PARA TODO O DISPOSITIVO</string>
</resources>
diff --git a/app-mini/src/main/res/values-pt-rPT/strings.xml b/app-mini/src/main/res/values-pt-rPT/strings.xml
index 94275288..2c05e1bd 100644
--- a/app-mini/src/main/res/values-pt-rPT/strings.xml
+++ b/app-mini/src/main/res/values-pt-rPT/strings.xml
@@ -8,8 +8,6 @@
<string name="status_activated">Ligado à rede Tor</string>
<string name="status_disabled">Orbot está desativado</string>
<string name="status_shutting_down">TorService está a encerrar</string>
- <string name="tor_process_starting">A iniciar o cliente Tor...</string>
- <string name="tor_process_complete">completo.</string>
<string name="menu_settings">Definições</string>
<string name="menu_log">Registo</string>
<string name="menu_start">Iniciar</string>
@@ -56,8 +54,7 @@
<string name="mb">MB</string>
<string name="menu_qr">Códigos QR</string>
<string name="get_bridges_email">E-mail</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Ativar</string>
+ <string name="activate">Ativar</string>
<string name="send_email">Enviar Mensagem</string>
<string name="save">Guardar</string>
<string name="name">Nome</string>
diff --git a/app-mini/src/main/res/values-pt/strings.xml b/app-mini/src/main/res/values-pt/strings.xml
index 78dd464c..461673a1 100644
--- a/app-mini/src/main/res/values-pt/strings.xml
+++ b/app-mini/src/main/res/values-pt/strings.xml
@@ -4,8 +4,6 @@
<string name="status_starting_up">O Orbot está a iniciar...</string>
<string name="status_activated">Conetado à rede Tor</string>
<string name="status_disabled">O Orbot está desativado</string>
- <string name="tor_process_starting">A iniciar o cliente Tor...</string>
- <string name="tor_process_complete">completo.</string>
<string name="menu_settings">Configurações</string>
<string name="menu_log">Registo</string>
<string name="menu_start">Iniciar</string>
@@ -70,8 +68,6 @@
<string name="pref_use_expanded_notifications_title">Notificações Estendidas</string>
<string name="set_locale_title">Idioma</string>
<string name="newnym">Mudou para uma nova identidade do Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nenhuma conetividade de rede. A hibernar Tor…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">A conetividade de rede é boa. A iniciar Tor…</string>
<string name="updating_settings_in_tor_service">a atualizar as definições no serviço Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_dnsport_title">Porta DNS Tor</string>
@@ -82,8 +78,7 @@
<string name="bridges_updated">Pontes Atualizadas</string>
<string name="menu_qr">Códigos QR</string>
<string name="get_bridges_email">Correio Eletrónico</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Ativar</string>
+ <string name="activate">Ativar</string>
<string name="send_email">Enviar Mensagem</string>
<string name="hidden_services">Serviços ocultos</string>
<string name="title_activity_hidden_services">Serviços ocultos</string>
diff --git a/app-mini/src/main/res/values-ro/strings.xml b/app-mini/src/main/res/values-ro/strings.xml
index c763c809..a716dd16 100644
--- a/app-mini/src/main/res/values-ro/strings.xml
+++ b/app-mini/src/main/res/values-ro/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Conectat la reţeaua Tor</string>
<string name="status_disabled">Orbot este dezactivat</string>
<string name="status_shutting_down">ServiciulTor se opreşte</string>
- <string name="tor_process_starting">Porneşte clientul Tor...</string>
- <string name="tor_process_complete">terminat.</string>
- <string name="menu_settings">Setări</string>
+ <string name="menu_settings">Setări</string>
<string name="menu_log">log</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stop</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Arată notificări extinse cu Tor exit country şi IP</string>
<string name="pref_use_expanded_notifications_title">Notificare Extinsă</string>
<string name="set_locale_title">Limbă</string>
- <string name="no_internet_connection_tor">Nu este conexiune la internet; Tor este în așteptare...</string>
- <string name="pref_disable_network_title">Fără adormirea automată a rețelei</string>
+ <string name="pref_disable_network_title">Fără adormirea automată a rețelei</string>
<string name="pref_disable_network_summary">Pune Tor să doarmă dacă nu este internet disponibil</string>
<string name="newnym">Ați comutat la o nouă identitate Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nu este conexiune la rețea. Se pune Tor în adormire...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Conexiunea la rețea este bună. Se trezește Tor...</string>
<string name="updating_settings_in_tor_service">se actualizează configurările în serviciul Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Porturi pe care Tor oferă SOCKurile proxy active (principal:9050 sau 0 pentru dezactivare)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Punţi activate</string>
<string name="restart_orbot_to_use_this_bridge_">Vă rugăm reporniţi Orbot pentru a aplica modificările</string>
<string name="menu_qr">Coduri QR</string>
- <string name="bridge_mode">Mod punte</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Activează</string>
+ <string name="activate">Activează</string>
<string name="send_email">Trimite email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Poţi primi o adresă de punte prin email,web sau prin scanarea codului de punte QR.Selectează ”Email” sau ”Web” de mai jos pentru a primi adresa de punte.\n\nCând ai primit adresa,copiaz-o şi introdu-o în preferinţele de PUNŢI din setările Orbot şi mai apoi reporniţi. </string>
- <string name="hidden_services">Servicii ascunse</string>
+ <string name="hidden_services">Servicii ascunse</string>
<string name="title_activity_hidden_services">Servicii ascunse</string>
<string name="menu_hidden_services">Servicii ascunse</string>
<string name="save">Salvează</string>
diff --git a/app-mini/src/main/res/values-rs-rAR/strings.xml b/app-mini/src/main/res/values-rs-rAR/strings.xml
index 8955187a..50543e66 100644
--- a/app-mini/src/main/res/values-rs-rAR/strings.xml
+++ b/app-mini/src/main/res/values-rs-rAR/strings.xml
@@ -5,7 +5,6 @@
<string name="status_activated">Conectado a la red Tor</string>
<string name="status_disabled">\"Orbot está Desactivado</string>
<string name="status_shutting_down">Orbot se está apagando</string>
- <string name="tor_process_complete">Completar</string>
<string name="menu_settings">Configuración</string>
<string name="menu_log">Registro</string>
<string name="menu_start">Iniciar</string>
diff --git a/app-mini/src/main/res/values-ru/strings.xml b/app-mini/src/main/res/values-ru/strings.xml
index 549387d0..df439aaa 100644
--- a/app-mini/src/main/res/values-ru/strings.xml
+++ b/app-mini/src/main/res/values-ru/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Подключён к сети Tor</string>
<string name="status_disabled">Orbot отключён</string>
<string name="status_shutting_down">Служба Tor выключается</string>
- <string name="tor_process_starting">Запускается клиент Tor...</string>
- <string name="tor_process_complete">завершено.</string>
- <string name="menu_settings">Настройки</string>
+ <string name="menu_settings">Настройки</string>
<string name="menu_log">Журнал</string>
<string name="menu_start">Запустить</string>
<string name="menu_stop">Остановить</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Показать расширенное уведомление Tor со страной выхода и IP</string>
<string name="pref_use_expanded_notifications_title">Расширенные уведомления</string>
<string name="set_locale_title">Язык</string>
- <string name="no_internet_connection_tor">Отсутствует подключение к интернету, Tor находится в режиме ожидания…</string>
- <string name="pref_disable_network_title">Автозасыпание без сети</string>
+ <string name="pref_disable_network_title">Автозасыпание без сети</string>
<string name="pref_disable_network_summary">Переводить Tor в спящий режим при отсутствии интернета</string>
<string name="newnym">Вы переключились на новый идентификатор Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Нет подключения к сети. Tor переходит в режим сна...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Подключение к сети установлено. Tor просыпается...</string>
<string name="updating_settings_in_tor_service">обновление настроек в сервисе Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Порт, на котором Tor предоставляет свой SOCKS-прокси (по умолчанию: 9050, 0 - для отключения)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Пожалуйста, перезапустите Orbot для вступления изменения в силу</string>
<string name="menu_qr">QR-коды</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Если ваша мобильная сеть активно блокирует Tor, вы можете использовать мосты Tor для доступа к сети. Выберите один из вариантов для настройки и тестирования:</string>
- <string name="bridge_mode">Режим моста</string>
<string name="get_bridges_email">Эл. почта</string>
- <string name="get_bridges_web">Сайт</string>
<string name="activate">Активация</string>
<string name="apps_mode">VPN-режим</string>
<string name="send_email">Отправить письмо</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Вы можете получить адрес моста по электронной почте, с сайта или путём сканирования QR-кода. Выберите \"Эл. почта\" или \"Сайт\" ниже, чтобы запросить адрес моста.\n\nПолученный адрес скопируйте и вставьте его в разделе настроек Orbot \"Мосты\", после чего перезапустите приложение.</string>
- <string name="vpn_default_world">Мир (авто)</string>
+ <string name="vpn_default_world">Мир (авто)</string>
<string name="hidden_services">Скрытые службы</string>
<string name="title_activity_hidden_services">Скрытые службы</string>
<string name="menu_hidden_services">Скрытые службы</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Рассмотрите возможность включения оптимизации батареи</string>
<string name="pref_isolate_dest">Изолировать адреса назначения</string>
<string name="pref_isolate_dest_summary">Использовать разные цепи для каждого адреса назначения</string>
- <string name="no_transproxy_warning_short">ПРЕДУПРЕЖДЕНИЕ: прозрачный прокси больше не поддерживается</string>
- <string name="no_transproxy_warning">ПРЕДУПРЕЖДЕНИЕ: прозрачный прокси больше не поддерживается. Вместо этого используйте VPN-режим Orbot.</string>
<string name="pref_connection_padding">Прокладка соединения</string>
<string name="pref_connection_padding_summary">Всегда включает прокладку соединения для защиты от некоторых форм анализа трафика. По умолчанию: авто</string>
<string name="pref_reduced_connection_padding">Сокращённая прокладка соединения</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Подключение непосредственно к Tor (лучше всего)</string>
<string name="bridge_community">Подключение через серверы сообщества</string>
<string name="bridge_cloud">Подключение через облачные серверы</string>
- <string name="bridges_get_new">Запросить новые мосты… (если всё остальное не удалось)</string>
- <string name="trouble_connecting">Проблема с подключением?</string>
+ <string name="trouble_connecting">Проблема с подключением?</string>
<string name="full_device_vpn">VPN для всего устройства</string>
<string name="vpn_disabled">VPN отключён</string>
</resources>
diff --git a/app-mini/src/main/res/values-si-rLK/strings.xml b/app-mini/src/main/res/values-si-rLK/strings.xml
index fa116ecb..421a7b7d 100644
--- a/app-mini/src/main/res/values-si-rLK/strings.xml
+++ b/app-mini/src/main/res/values-si-rLK/strings.xml
@@ -5,8 +5,6 @@
<string name="status_starting_up">Orbot ආරම්භ කරමින්…</string>
<string name="status_activated">Tor ජාලයට සබැදියි</string>
<string name="status_disabled">Orbot ක්රියාවිරහිත කර ඇත </string>
- <string name="tor_process_starting">Tor දායකයා ආරම්භ කරමින්...</string>
- <string name="tor_process_complete">සම්පුර්ණයි.</string>
<string name="menu_settings">සිටවුම්</string>
<string name="menu_log">ලොගය </string>
<string name="menu_start">අරඹන්න</string>
diff --git a/app-mini/src/main/res/values-sk/strings.xml b/app-mini/src/main/res/values-sk/strings.xml
index 8877c736..2d5fbb15 100644
--- a/app-mini/src/main/res/values-sk/strings.xml
+++ b/app-mini/src/main/res/values-sk/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Pripojený do siete Tor</string>
<string name="status_disabled">Orbot je deaktivovaný</string>
<string name="status_shutting_down">TorService sa vypína</string>
- <string name="tor_process_starting">Štartujem Tor klienta...</string>
- <string name="tor_process_complete">hotovo.</string>
- <string name="menu_settings">Nastavenia</string>
+ <string name="menu_settings">Nastavenia</string>
<string name="menu_log">Podrobnosti</string>
<string name="menu_start">Štart</string>
<string name="menu_stop">Stop</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Zobraziť rozšírené upozornenie s výstupnou krajinou a IP adresou siete Tor</string>
<string name="pref_use_expanded_notifications_title">Rozšírené upozornenia</string>
<string name="set_locale_title">Jazyk</string>
- <string name="no_internet_connection_tor">Žiadne pripojenie k internetu. Tor je v pohotovostnom režime...</string>
- <string name="pref_disable_network_title">Automatický spánok</string>
+ <string name="pref_disable_network_title">Automatický spánok</string>
<string name="pref_disable_network_summary">Uspať Tor, keď internet nie je dostupný</string>
<string name="newnym">Prepli ste na novú Tor identitu!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Žiadna možnosť pripojenia do siete. Uspávam Tor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Pripojenie do siete je dobré. Aktivujem Tor...</string>
<string name="updating_settings_in_tor_service">aktualizujem nastavenie v službe Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Port, na ktorom Tor poskytuje SOCKS proxy (prednastavené 9050 alebo 0 pre deaktiváciu)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Premostenia aktualizované</string>
<string name="restart_orbot_to_use_this_bridge_">Prosím reštartujte Orbot, aby sa aktivovali zmeny</string>
<string name="menu_qr">QR kódy</string>
- <string name="bridge_mode">Mod premostení</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Aktivovať</string>
+ <string name="activate">Aktivovať</string>
<string name="send_email">Poslať email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Môžete získať adresu premostenia cez email, web, alebo naskenovaním QR kódu premostenia. Vyberte \'Email\' alebo \'Web\' nižšie pre vyžiadanie adresy premostenia.\n\nAkonáhle budete mať adresu, skopírujte a vložte ju do nastavení \"Premostenia\" v nastaveniach Orbot a reštartujte ho.</string>
- <string name="save">Uložiť</string>
+ <string name="save">Uložiť</string>
<string name="name">Meno</string>
<string name="please_restart_Orbot_to_enable_the_changes">Prosím reštartujte Orbot, aby sa aktivovali zmeny</string>
<string name="disable">Zakázať</string>
diff --git a/app-mini/src/main/res/values-sl/strings.xml b/app-mini/src/main/res/values-sl/strings.xml
index dfde7d65..6d1bc7e3 100644
--- a/app-mini/src/main/res/values-sl/strings.xml
+++ b/app-mini/src/main/res/values-sl/strings.xml
@@ -4,8 +4,6 @@
<string name="status_starting_up">Orbot se zaganja...</string>
<string name="status_activated">Povezan v omrežje Tor</string>
<string name="status_disabled">Orbot ni aktiviran</string>
- <string name="tor_process_starting">Zagon Tor klijenta...</string>
- <string name="tor_process_complete">končano.</string>
<string name="menu_settings">Nastavitve</string>
<string name="menu_log">Dnevnik</string>
<string name="menu_start">Začni</string>
diff --git a/app-mini/src/main/res/values-sr/strings.xml b/app-mini/src/main/res/values-sr/strings.xml
index bc373863..34a5d0ba 100644
--- a/app-mini/src/main/res/values-sr/strings.xml
+++ b/app-mini/src/main/res/values-sr/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Повезан са Тор мрежом</string>
<string name="status_disabled">Орбот је деактивиран</string>
<string name="status_shutting_down">Гашење Тор Сервиса</string>
- <string name="tor_process_starting">Покреће се Тор клијент...</string>
- <string name="tor_process_complete">завршено.</string>
- <string name="menu_settings">Подешавања</string>
+ <string name="menu_settings">Подешавања</string>
<string name="menu_log">Логови</string>
<string name="menu_start">Крени</string>
<string name="menu_stop">Заустави</string>
@@ -105,12 +103,9 @@
<string name="pref_use_expanded_notifications">Прикажи опширно обавештење Тор излаза државе и IP-ја</string>
<string name="pref_use_expanded_notifications_title">Опширно Обавештење</string>
<string name="set_locale_title">Језик</string>
- <string name="no_internet_connection_tor">Нема интернет конекције; Тор је у мировању...</string>
- <string name="pref_disable_network_title">Без Мреже Auto-Sleep</string>
+ <string name="pref_disable_network_title">Без Мреже Auto-Sleep</string>
<string name="pref_disable_network_summary">Умири Тор када је недоступан интернет</string>
<string name="newnym">Прешли сте на нови Тор идентитет!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Нема интернет конекције. Умиривање Тор-а...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Конекција је добра. Оживљавање Тор-а...</string>
<string name="updating_settings_in_tor_service">ажурирање подешавања Тор мреже</string>
<string name="pref_socks_title">Toр SOCKS</string>
<string name="pref_socks_summary">Port који Тор нуди је SOCKS прокси укључен (уобичајено: 9050 или 0 за искључивање)</string>
@@ -132,14 +127,11 @@
<string name="restart_orbot_to_use_this_bridge_">Молимо покрените поново Орбот ради примењивања промена</string>
<string name="menu_qr">QR Кодови</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Ако ваша мобилна мрежа активно блокира Тор, можете премошћивати сервером као алтернативни начин уласка.ОДАБЕРИ једну од опција за конфигурацију и тестирање....</string>
- <string name="bridge_mode">Bridge Режим</string>
<string name="get_bridges_email">Е-пошта</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Активирати</string>
+ <string name="activate">Активирати</string>
<string name="apps_mode">VPN Мод</string>
<string name="send_email">Пошаљи Е-пошту</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Можете добити bridge адресу преко е-поште. на web-у или скенирањем bridge QR кода. Одабери \'E-пошта\' или \'Web\' испод да би сте затражили bridge адресу.\n\nЈедном када добијете адресу. копирај& налепи је у \"Bridges\" преференцији у Орбот подешавањима и поново покрените.</string>
- <string name="vpn_default_world">Глобално (Аутоматски)</string>
+ <string name="vpn_default_world">Глобално (Аутоматски)</string>
<string name="hidden_services">Скривени Сервиси</string>
<string name="title_activity_hidden_services">Скривени Сервиси</string>
<string name="menu_hidden_services">Скривени Сервиси</string>
diff --git a/app-mini/src/main/res/values-sv/strings.xml b/app-mini/src/main/res/values-sv/strings.xml
index 350da961..f997bbe3 100644
--- a/app-mini/src/main/res/values-sv/strings.xml
+++ b/app-mini/src/main/res/values-sv/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Uppkopplad till Tor-nätverket</string>
<string name="status_disabled">Orbot är inaktiverad</string>
<string name="status_shutting_down">TorService avslutas</string>
- <string name="tor_process_starting">Startar Tor-klient...</string>
- <string name="tor_process_complete">färdig.</string>
- <string name="menu_settings">Inställningar</string>
+ <string name="menu_settings">Inställningar</string>
<string name="menu_log">Logg</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stopp</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Visa utökad notis med Tors utgångsland och IP</string>
<string name="pref_use_expanded_notifications_title">Utökade notiser</string>
<string name="set_locale_title">Språk</string>
- <string name="no_internet_connection_tor">Ingen internetanslutning; Tor är i standby-läge...</string>
- <string name="pref_disable_network_title">Ingen auto-sömn för nätverket</string>
+ <string name="pref_disable_network_title">Ingen auto-sömn för nätverket</string>
<string name="pref_disable_network_summary">Låt Tor sova när inget internet finns tillgängligt</string>
<string name="newnym">Du har bytt till en ny Tor identitet!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Ingen nätverksanslutning. Försätter Tor i dvala...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Nätverksanslutningen fungerar. Väcker Tor...</string>
<string name="updating_settings_in_tor_service">uppdaterar inställningar i Tor-tjänsten</string>
<string name="pref_socks_title">Tor-SOCKS</string>
<string name="pref_socks_summary">Port som Tor erbjuder sin SOCKS-proxy på (standard: 9050 eller 0 för att inaktivera)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Vänligen starta om Orbot för att aktivera ändringarna</string>
<string name="menu_qr">QR-koder</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Om ditt mobilnät aktivt blockerar Tor kan du använda en \"Bridge Server\" som ett alternativt sätt. VÄLJ ett av alternativen att konfigurera och testa.,.</string>
- <string name="bridge_mode">Bryggläge</string>
<string name="get_bridges_email">E-post</string>
- <string name="get_bridges_web">Webb</string>
<string name="activate">Aktivera</string>
<string name="apps_mode">VPN-läge</string>
<string name="send_email">Skicka e-post</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Du kan få en brygg-adress via e-post, via webben eller genom att skanna en QR-kod för en brygga. Välj \'E-post\' eller \'Webb\' nedan för att begära en brygg-adress.\n\nNär du väl har en adress, kopiera & klistra in den i inställningen för \"Bryggor\" i Orbot och starta om.</string>
- <string name="vpn_default_world">Global (automatisk)</string>
+ <string name="vpn_default_world">Global (automatisk)</string>
<string name="hidden_services">Hidden Services</string>
<string name="title_activity_hidden_services">Hidden Services</string>
<string name="menu_hidden_services">Hidden Services</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Överväg att aktivera batterioptimeringar</string>
<string name="pref_isolate_dest">Isolera destinationsadresser</string>
<string name="pref_isolate_dest_summary">Använd en annan krets för varje destinationsadress</string>
- <string name="no_transproxy_warning_short">VARNING: Transproxy stöds inte längre</string>
- <string name="no_transproxy_warning">VARNING: Transparent proxy stöds inte. Använd Orbot Apps VPN istället.</string>
<string name="pref_connection_padding">Anslutnings-utfyllnad</string>
<string name="pref_connection_padding_summary">Aktivera alltid anslutnings-utfyllnad för att skydda mot vissa former av trafikanalys. Standard: auto</string>
<string name="pref_reduced_connection_padding">Minskad anslutnings-utfyllnad</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Anslut direkt till Tor (Bästa)</string>
<string name="bridge_community">Anslut genom gemenskaps servrar</string>
<string name="bridge_cloud">Anslut via molnservrar</string>
- <string name="bridges_get_new">Begär nya broar... (om allt annat misslyckas)</string>
- <string name="trouble_connecting">Problem med att ansluta?</string>
+ <string name="trouble_connecting">Problem med att ansluta?</string>
<string name="full_device_vpn">VPN för hela enheten</string>
<string name="vpn_disabled">VPN inaktiverad</string>
</resources>
diff --git a/app-mini/src/main/res/values-ta/strings.xml b/app-mini/src/main/res/values-ta/strings.xml
index 402e9f59..71118110 100644
--- a/app-mini/src/main/res/values-ta/strings.xml
+++ b/app-mini/src/main/res/values-ta/strings.xml
@@ -5,8 +5,6 @@
<string name="status_starting_up">ஆர்பாட் துவங்குகிறது...</string>
<string name="status_activated">தோர் நெட்வொர்க் இணைக்கப்பட்ட</string>
<string name="status_disabled">ஆர்பாட் நிறுத்தப்பட்டது</string>
- <string name="tor_process_starting">தோர் துவங்கப்படுகிறது...</string>
- <string name="tor_process_complete">முடிந்தது.</string>
<string name="menu_settings">அமைப்புகள்</string>
<string name="menu_log">பதிவுகள்</string>
<string name="menu_start">துவங்கு</string>
diff --git a/app-mini/src/main/res/values-th/strings.xml b/app-mini/src/main/res/values-th/strings.xml
index 9effbcc6..92ff3078 100644
--- a/app-mini/src/main/res/values-th/strings.xml
+++ b/app-mini/src/main/res/values-th/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">เชื่อมต่อกับเครือข่าย Tor แล้ว</string>
<string name="status_disabled">ปิดการใช้งาน Orbot</string>
<string name="status_shutting_down">กำลังปิดการทำงาน TorService </string>
- <string name="tor_process_starting">เริ่มใช้ไคลเอ็นต์ Tor </string>
- <string name="tor_process_complete">เสร็จ</string>
- <string name="menu_settings">การตั้งค่า</string>
+ <string name="menu_settings">การตั้งค่า</string>
<string name="menu_log">บันทึก</string>
<string name="menu_start">เริ่ม</string>
<string name="menu_stop">หยุด</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">แสดงการแจ้งเตือนแบบขยายที่ระบุประเทศปลายทางและ IP ของ Tor</string>
<string name="pref_use_expanded_notifications_title">การแจ้งเตือนแบบขยาย</string>
<string name="set_locale_title">ภาษา</string>
- <string name="no_internet_connection_tor">ไม่มีการเชื่อมต่ออินเทอร์เน็ต Tor พร้อมรอใช้งาน...</string>
- <string name="pref_disable_network_title">ไม่พบเครือข่าย พักการใช้งานอัตโนมัติ</string>
+ <string name="pref_disable_network_title">ไม่พบเครือข่าย พักการใช้งานอัตโนมัติ</string>
<string name="pref_disable_network_summary">พักการใช้งาน Tor เมื่อไม่มีอินเทอร์เน็ต</string>
<string name="newnym">คุณได้เปลี่ยนมาใช้ตัวตน Tor ใหม่แล้ว</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">ไม่มีการเชื่อมต่อเครือข่าย พักการใช้งาน Tor</string>
- <string name="network_connectivity_is_good_waking_tor_up_">การเชื่อมต่อเสถียร เปิดใช้งาน Tor...</string>
<string name="updating_settings_in_tor_service">ปรับปรุงการตั้งค่าในบริการ Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">พอร์ตที่ Tor ให้บริการพร็อกซี SOCKS (ค่าเริ่มต้น: 9050 หรือ 0 ไปถึงไม่เปิดใช้งาน)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">กรุณาเริ่ม Orbot ใหม่เพื่อให้การเปลี่ยนแปลงใช้งานได้</string>
<string name="menu_qr">รหัสคิวอาร์</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">หากเครือข่ายโทรศัพท์ของคุณปิดกั้น Tor คุณสามารถใช้ \'เซิร์ฟเวอร์ Bridge\' เป็นตัวเลือกในการเข้าถึงได้ เลือกตัวเลือกหนึ่งเพื่อกำหนดค่าและทดสอบ...</string>
- <string name="bridge_mode">โหมด Bridge</string>
<string name="get_bridges_email">อีเมล</string>
- <string name="get_bridges_web">เว็บ</string>
<string name="activate">เปิดใช้งาน</string>
<string name="apps_mode">โหมด VPN</string>
<string name="send_email">ส่งอีเมล</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">คุณสามารถรับที่อยู่ของ Bridge ได้โดยผ่านอีเมล เว็บ หรือการสแกนรหัสคิวอาร์ของ Bridge เลือก \'อีเมล\' หรือ \'เว็บ\' ด้านล่างเพื่อขอที่อยู่ของ Bridge\n\nเมื่อคุณได้ที่อยู่แล้ว ให้คัดลอก & วางลงในการปรับแต่งลักษณะของ \"Bridge\" ในการตั้งค่าของ Orbit และเริ่มการทำงานใหม่</string>
- <string name="vpn_default_world">ส่วนรวม (อัตโนมัติ)</string>
+ <string name="vpn_default_world">ส่วนรวม (อัตโนมัติ)</string>
<string name="hidden_services">บริการที่ซ่อน</string>
<string name="title_activity_hidden_services">บริการที่ซ่อน</string>
<string name="menu_hidden_services">บริการที่ซ่อน</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">พิจารณาเปิดใช้งานการปรับแบตเตอรี่ให้เหมาะสมที่สุด</string>
<string name="pref_isolate_dest">แยกที่อยู่ปลายทาง</string>
<string name="pref_isolate_dest_summary">ใช้วงรอบที่แตกต่างกันสำหรับแต่ละที่อยู่ปลายทาง</string>
- <string name="no_transproxy_warning_short">คำเตือน: ไม่รองรับพร็อกซีแบบ Transparent</string>
- <string name="no_transproxy_warning">คำเตือน: ไม่รองรับพร็อกซีแบบ Transparent ใช้ VPN ของแอป Orbot แทน</string>
<string name="pref_connection_padding">ช่องว่างภายในการเชื่อมต่อ</string>
<string name="pref_connection_padding_summary">เปิดใช้งานช่องว่างภายในเครือข่ายเสมอเพื่อป้องกันการวิเคราะห์การรับส่งข้อมูลบางรูปแบบ ตั้งค่าเริ่มต้นเป็น: อัตโนมัติ</string>
<string name="pref_reduced_connection_padding">ลดช่องว่างภายในเครือข่าย</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">เชื่อมต่อกับ Tor โดยตรง (ดีที่สุด)</string>
<string name="bridge_community">เชื่อมต่อผ่านเซิร์ฟเวอร์ของชุมชน</string>
<string name="bridge_cloud">เชื่อมต่อผ่านเซิร์ฟเวอร์คลาวด์</string>
- <string name="bridges_get_new">ขอ Bridge ใหม่... (หากทุกอย่างใช้การไม่ได้)</string>
- <string name="trouble_connecting">มีปัญหากับการเชื่อมต่อหรือไม่</string>
+ <string name="trouble_connecting">มีปัญหากับการเชื่อมต่อหรือไม่</string>
<string name="full_device_vpn">VPN ทั้งอุปกรณ์</string>
<string name="vpn_disabled">ปิดใช้งาน VPN</string>
</resources>
diff --git a/app-mini/src/main/res/values-tl/strings.xml b/app-mini/src/main/res/values-tl/strings.xml
index 7a8edf1c..4e6adf2b 100644
--- a/app-mini/src/main/res/values-tl/strings.xml
+++ b/app-mini/src/main/res/values-tl/strings.xml
@@ -4,8 +4,6 @@
<string name="status_starting_up">Nagsisimula na ang Orbot…</string>
<string name="status_activated">Konektado sa Tor network</string>
<string name="status_disabled">Naka-deactivate ang Orbot</string>
- <string name="tor_process_starting">Binubuksan ang Tor client…</string>
- <string name="tor_process_complete">kumpleto na.</string>
<string name="menu_settings">Settings</string>
<string name="menu_log">Tala</string>
<string name="menu_start">Simulan</string>
@@ -100,7 +98,6 @@
<string name="pref_use_expanded_notifications">Ipakita ang pinalaking notification kasama ng Tor exit country at IP</string>
<string name="pref_use_expanded_notifications_title">Pinalawak na Notifications</string>
<string name="set_locale_title">Wika</string>
- <string name="no_internet_connection_tor">Walang connection sa internet; Ang Tor ay naka-standby mode...</string>
<string name="pref_disable_network_title">Walang Auto-Sleep sa Network</string>
<string name="pref_disable_network_summary">Ilagay ang Tor sa sleep kapag walang internet na pwede</string>
<string name="newnym">Ikaw ay nagpalit ng bagong pagkakakilanlan sa Tor!</string>
@@ -109,8 +106,7 @@
<string name="kb">KB</string>
<string name="mb">MB</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Activate</string>
+ <string name="activate">Activate</string>
<string name="send_email">Send Email</string>
<string name="save">I-save</string>
<string name="name">Name</string>
diff --git a/app-mini/src/main/res/values-tr/strings.xml b/app-mini/src/main/res/values-tr/strings.xml
index e100a10b..9c1b5df2 100644
--- a/app-mini/src/main/res/values-tr/strings.xml
+++ b/app-mini/src/main/res/values-tr/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Tor ağına bağlandı</string>
<string name="status_disabled">Orbot devre dışı bırakıldı</string>
<string name="status_shutting_down">Tor hizmeti kapatılıyor</string>
- <string name="tor_process_starting">Tor istemcisi başlatılıyor...</string>
- <string name="tor_process_complete">tamamlandı.</string>
<string name="menu_settings">Ayarlar</string>
<string name="menu_log">Günlük</string>
<string name="menu_start">Başlat</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Tor çıkış ülkesi ve IP adresi ile ilgili ayrıntılı bildirim görüntülensin</string>
<string name="pref_use_expanded_notifications_title">Ayrıntılı Bildirimler</string>
<string name="set_locale_title">Dil</string>
- <string name="no_internet_connection_tor">İnternet bağlantısı yok; Tor hazırda bekliyor...</string>
<string name="pref_disable_network_title">Bağlantı Olmadığında Otomatik Uyku</string>
<string name="pref_disable_network_summary">İnternet bağlantısı olmadığında Tor uyku kipine geçsin</string>
<string name="newnym">Yeni bir Tor kimliğine geçiş yaptınız!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Herhangi bir ağ bağlantısı yok. Tor uyutuluyor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Ağ bağlantısı iyi. Tor uyandırılıyor... </string>
<string name="updating_settings_in_tor_service">Tor hizmet ayarları güncelleniyor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Tor SOCKS vekil sunucusu için kullanılacak kapı numarası (Varsayılan 9050, devre dışı bırakmak için 0)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Değişiklikleri etkinleştirmek için Orbot uygulamasını yeniden başlatın</string>
<string name="menu_qr">QR Kodları</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Tor kullanımı mobil ağınızda etkin olarak engelleniyorsa, Tor ağına erişmek için bir \'Köprü Sunucusu\' kullanabilirsiniz. Yapılandırmak ve denemek için aşağıdaki seçeneklerden birini seçin...</string>
- <string name="bridge_mode">Köprü Kipi</string>
<string name="get_bridges_email">E-posta</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Etkinleştir</string>
<string name="apps_mode">VPN Kipi</string>
<string name="send_email">E-posta Gönder</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Köprü adresini e-posta, web ya da QR kodu ile edinebilirsiniz. Köprü adresini istemek için aşağıdan \'E-posta\' ya da \'Web\' seçeneğini seçin. \n\nAdresi edindikten sonra kopyalayıp Orbot ayarlarındaki \"Köprüler\" alanına kopyalayın ve Orbot uygulamasını yeniden başlatın.</string>
- <string name="vpn_default_world">Genel (Otomatik)</string>
+ <string name="vpn_default_world">Genel (Otomatik)</string>
<string name="hidden_services">Gizli Hizmetler</string>
<string name="title_activity_hidden_services">Gizli Hizmetler</string>
<string name="menu_hidden_services">Gizli Hizmetler</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Pil kullanımı iyileştirmelerini etkinleştirmeyi düşünün</string>
<string name="pref_isolate_dest">Hedef adresleri yalıtılsın</string>
<string name="pref_isolate_dest_summary">Her ehdef adresi için farklı devre kullanılır</string>
- <string name="no_transproxy_warning_short">Uyarı: Saydam vekil sunucu özelliği artık desteklenmiyor</string>
- <string name="no_transproxy_warning">Uyarı: Saydam vekil sunucu özelliği artık desteklenmiyor. Onun yerine Orbot uygulamasının VPN özelliğini kullanın.</string>
<string name="pref_connection_padding">Bağlantı yastıklama</string>
<string name="pref_connection_padding_summary">Bazı trafik inceleme yöntemlerine karşı korunmayı sağlamak için her zaman bağlantı yastıklaması kullanılır. Varsayılan değer: Otomatik.</string>
<string name="pref_reduced_connection_padding">Azaltılmış bağlantı yastıklaması</string>
@@ -199,8 +189,7 @@
<string name="bridge_direct_connect">Doğrudan Tor ağına bağlanılsın (en iyisi)</string>
<string name="bridge_community">Topluluk sunucuları üzerinden bağlanılsın</string>
<string name="bridge_cloud">Bulut sunucular üzerinden bağlanılsın</string>
- <string name="bridges_get_new">Yeni Köprüler İsteyin... (hiçbir seçenek bağlanamıyorsa)</string>
- <string name="trouble_connecting">Bağlanmakta sorun mu yaşıyorsunuz?</string>
+ <string name="trouble_connecting">Bağlanmakta sorun mu yaşıyorsunuz?</string>
<string name="full_device_vpn">Aygıt Geneli VPN</string>
<string name="vpn_disabled">VPN Devre Dışı</string>
</resources>
diff --git a/app-mini/src/main/res/values-uk/strings.xml b/app-mini/src/main/res/values-uk/strings.xml
index a103899a..0753a423 100644
--- a/app-mini/src/main/res/values-uk/strings.xml
+++ b/app-mini/src/main/res/values-uk/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Під\'єднаний до мережі Tor</string>
<string name="status_disabled">«Orbot» від\'єднаний</string>
<string name="status_shutting_down">Сервіси Тор деактивовані</string>
- <string name="tor_process_starting">Запускається клієнт Tor...</string>
- <string name="tor_process_complete">завершено.</string>
- <string name="menu_settings">Налаштування</string>
+ <string name="menu_settings">Налаштування</string>
<string name="menu_log">Журнал</string>
<string name="menu_start">Запустити</string>
<string name="menu_stop">Зупинити</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Показати розширене сповіщення з країною виходу Tor та IP</string>
<string name="pref_use_expanded_notifications_title">Розширені сповіщення</string>
<string name="set_locale_title">Мова</string>
- <string name="no_internet_connection_tor">Немає інтернет-з\'єднання; Tor в режимі очікування…</string>
- <string name="pref_disable_network_title">Не використовувати режим сну</string>
+ <string name="pref_disable_network_title">Не використовувати режим сну</string>
<string name="pref_disable_network_summary">Переводити в режим сну при відсутності інтернет-з\'єднання</string>
<string name="newnym">Ви перемкнулись на новий ідентифікатор Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Немає доступу до мережі інтернет. Tor переходить в режим сну…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Доступ до мережі хороший. Tor виходить з режиму сну…</string>
<string name="updating_settings_in_tor_service">оновлення налаштувань у сервісі Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Порт, який Tor надає своєму SOCKS-проксі (за замовчуванням: 9050 або 0 для вимкнення)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Будь ласка, перезапустіть Orbot, щоб зміни ввійшли в силу</string>
<string name="menu_qr">QR-коди</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Якщо ваша мобільна мережа активно блокує Tor, ви можете використовувати \'Bridge Server\' як альтернативний спосіб входу. ВИБЕРИ один із параметрів для налаштування та тестування...</string>
- <string name="bridge_mode">Режим мосту</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Веб</string>
<string name="activate">Активувати</string>
<string name="apps_mode">VPN Спосіб</string>
<string name="send_email">Надіслати листа</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Ви можете отримати адресу мосту через електронну пошту, веб або відсканувавши QR-код мосту. Оберіть «Email» чи «Веб» унизу, щоб подати запит на адресу мосту.\n\nКоли у Вас буде адреса, скопіюйте і вставте її у розділі «Мости» налаштувань Orbot і перезапустіть його.</string>
- <string name="vpn_default_world">Глобальний (автоматичний)</string>
+ <string name="vpn_default_world">Глобальний (автоматичний)</string>
<string name="hidden_services">Приховані Послуги</string>
<string name="title_activity_hidden_services">Приховані Послуги</string>
<string name="menu_hidden_services">Приховані Послуги</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">Розглянути увімкнення оптимізації акумулятора</string>
<string name="pref_isolate_dest">Ізолювати адреси призначення</string>
<string name="pref_isolate_dest_summary">Використати інакшу схему для кожної адреси призначення</string>
- <string name="no_transproxy_warning_short">ПОПЕРЕДЖЕННЯ: Транспроксінг більше не підтримується</string>
- <string name="no_transproxy_warning">ПОПЕРЕДЖЕННЯ. Прозорий проксинг не підтримується. Замість цього використовуйте Orbot Apps VPN.</string>
<string name="pref_connection_padding_summary">Завжди забезпечує заповнення підключення для захисту від деяких форм аналізу трафіку. За замовчуванням: автоматично</string>
<string name="app_shortcuts">Застосунки, що працюють з Tor</string>
<string name="testing_bridges">Тестування моста з\'єднання з Tor....</string>
@@ -196,8 +186,7 @@
<string name="bridge_direct_connect">Під\'єднання безпосередньо до Tor (Найкраще)</string>
<string name="bridge_community">Під\'єднання через сервери спільноти</string>
<string name="bridge_cloud">Під\'єднання через хмарні сервери</string>
- <string name="bridges_get_new">Запит нових мостів... (Якщо все інше не вдається)</string>
- <string name="trouble_connecting">Проблеми з під\'єднанням?</string>
+ <string name="trouble_connecting">Проблеми з під\'єднанням?</string>
<string name="full_device_vpn">Цілком VPN-пристрій</string>
<string name="vpn_disabled">VPN Вимкнена</string>
</resources>
diff --git a/app-mini/src/main/res/values-vi/strings.xml b/app-mini/src/main/res/values-vi/strings.xml
index d6945b59..e2976b05 100644
--- a/app-mini/src/main/res/values-vi/strings.xml
+++ b/app-mini/src/main/res/values-vi/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Đã kết nối với mạng Tor</string>
<string name="status_disabled">Orbot đã được vô hiệu hóa</string>
<string name="status_shutting_down">Đang tắt dịch vụ Tor</string>
- <string name="tor_process_starting">Bắt đầu Tor</string>
- <string name="tor_process_complete">hoàn thành.</string>
- <string name="menu_settings">Thiết lập</string>
+ <string name="menu_settings">Thiết lập</string>
<string name="menu_log">Nhật ký</string>
<string name="menu_start">Bắt đầu</string>
<string name="menu_stop">Ngừng</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Hiển thị thông báo mở rộng với IP và quốc gia của nút cuối (Tor exit-node)</string>
<string name="pref_use_expanded_notifications_title">Thông báo mở rộng</string>
<string name="set_locale_title">Ngôn ngữ</string>
- <string name="no_internet_connection_tor">Không có kết nối Internet; Tor đang ở chế độ chờ...</string>
- <string name="pref_disable_network_title">Tự động \"ngủ\" khi không có mạng</string>
+ <string name="pref_disable_network_title">Tự động \"ngủ\" khi không có mạng</string>
<string name="pref_disable_network_summary">Chuyển Tor sang chế độ ngủ nếu không có Internet</string>
<string name="newnym">Bạn đã chuyển sang một mạch Tor mới!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Không có mạng. Đang chuyển Tor sang chế độ ngủ...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Kết nối mạng tốt. Đang \"đánh thức\" Tor...</string>
<string name="updating_settings_in_tor_service">đang cập nhật cài đặt dịch vụ Tor</string>
<string name="pref_socks_title">Cổng SOCKS</string>
<string name="pref_socks_summary">Cổng để Tor đặt proxy SOCKS lên (mặc định: 9050 hoặc 0 để vô hiệu hóa)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Bridge được cập nhật</string>
<string name="restart_orbot_to_use_this_bridge_">Vui lòng khởi động lại Orbot để áp dụng thay đổi</string>
<string name="menu_qr">Mã QR</string>
- <string name="bridge_mode">Chế độ bridge</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
- <string name="activate">Kích hoạt</string>
+ <string name="activate">Kích hoạt</string>
<string name="send_email">Gửi email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Bạn có thể lấy một địa chỉ bridge qua email, web hoặc quét mã QR. Chọn \"Email\" hoặc \"Web\" bên dưới để yêu cầu một địa chỉ bridge.\n\nMột khi đã có địa chỉ, hãy sao chép nó vào thiết đặt \"Bridge\" trong cài đặt Orbot rồi khởi động lại phần mềm.</string>
- <string name="save">Lưu</string>
+ <string name="save">Lưu</string>
<string name="name">Tên</string>
<string name="please_restart_Orbot_to_enable_the_changes">Vui lòng khởi động lại Orbot để áp dụng thay đổi</string>
<string name="disable">Tắt</string>
diff --git a/app-mini/src/main/res/values-zh-rCN/strings.xml b/app-mini/src/main/res/values-zh-rCN/strings.xml
index 33fb0153..30555dd5 100644
--- a/app-mini/src/main/res/values-zh-rCN/strings.xml
+++ b/app-mini/src/main/res/values-zh-rCN/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">已连接到 Tor 网络</string>
<string name="status_disabled">Orbot 已停用</string>
<string name="status_shutting_down">Tor服务 正在关闭</string>
- <string name="tor_process_starting">正在启动 Tor 客户端...</string>
- <string name="tor_process_complete">完成。</string>
- <string name="menu_settings">设置</string>
+ <string name="menu_settings">设置</string>
<string name="menu_log">日志</string>
<string name="menu_start">启动</string>
<string name="menu_stop">停止</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">显示扩展的通知,有关 Tor 出口的国家和 IP</string>
<string name="pref_use_expanded_notifications_title">扩展的通知</string>
<string name="set_locale_title">语言</string>
- <string name="no_internet_connection_tor">没有互联网连接;Tor 处于待机状态…</string>
- <string name="pref_disable_network_title">无网络自动休眠</string>
+ <string name="pref_disable_network_title">无网络自动休眠</string>
<string name="pref_disable_network_summary">没有网络连接时,暂时停用 Tor</string>
<string name="newnym">已切换为新的 Tor 标识!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">没有网络连接;让 Tor 进入睡眠…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">网络连接良好。正在唤醒 Tor...</string>
<string name="updating_settings_in_tor_service">正在更新 Tor 服务中的设置</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Tor 提供其 SOCKS 代理的端口 (默认: 9050, 0 禁用)</string>
@@ -128,15 +123,11 @@
<string name="bridges_updated">网桥已更新</string>
<string name="restart_orbot_to_use_this_bridge_">请重启 Orbot 以使变更生效</string>
<string name="menu_qr">QR码</string>
- <string name="bridge_mode">网桥模式</string>
<string name="get_bridges_email">电子邮件</string>
- <string name="get_bridges_web">网页</string>
- <string name="activate">激活</string>
+ <string name="activate">激活</string>
<string name="apps_mode">VPN 模式</string>
<string name="send_email">发送电子邮件</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">您可以通过电子邮件、网页或扫描网桥QR码来获取网桥地址。点击下方的“电子邮件”或“网页”按钮来获取网桥地址。
-当您获取到网桥地址后,请将其复制并粘贴到Orbot设置中的“网桥”一项并重新启动</string>
- <string name="save">保存</string>
+ <string name="save">保存</string>
<string name="name">名称</string>
<string name="please_restart_Orbot_to_enable_the_changes">请重启 Orbot 以使变更生效</string>
</resources>
diff --git a/app-mini/src/main/res/values-zh-rTW/strings.xml b/app-mini/src/main/res/values-zh-rTW/strings.xml
index 7d39bccf..946859a9 100644
--- a/app-mini/src/main/res/values-zh-rTW/strings.xml
+++ b/app-mini/src/main/res/values-zh-rTW/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">已連線至 Tor 網路</string>
<string name="status_disabled">Orbot 已停用</string>
<string name="status_shutting_down">Tor服務 正在關閉</string>
- <string name="tor_process_starting">啟動Tor 用戶端...</string>
- <string name="tor_process_complete">完成。</string>
- <string name="menu_settings">設定</string>
+ <string name="menu_settings">設定</string>
<string name="menu_log">記錄檔</string>
<string name="menu_start">開始</string>
<string name="menu_stop">停止</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">在通知中顯示 Tor 出口點的國家和 IP</string>
<string name="pref_use_expanded_notifications_title">詳細的通知</string>
<string name="set_locale_title">語言</string>
- <string name="no_internet_connection_tor">沒有網路連線;Tor 待機中 ...</string>
- <string name="pref_disable_network_title">無網路時自動休眠</string>
+ <string name="pref_disable_network_title">無網路時自動休眠</string>
<string name="pref_disable_network_summary">當沒有網路可用時,讓 Tor 休眠</string>
<string name="newnym">您已切換到新的 Tor 身分!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">沒有網路連線。正在叫 Tor 休眠 ...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">網路連線良好,正在喚醒 Tor ...</string>
<string name="updating_settings_in_tor_service">更新 Tor 的設定</string>
<string name="pref_socks_title">Tor SOCKS 代理</string>
<string name="pref_socks_summary">Tor 提供 SOCKS 代理的連接埠 (預設:9050,若設為 0 則關閉)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">請重新啟動 Orbot 來讓設定生效。</string>
<string name="menu_qr">QR 碼</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">如果行動網路主動地封鎖 Tor 可以使用\"橋接伺服器\"作為替代方式.選擇一個選項作設定和測試</string>
- <string name="bridge_mode">網橋模式</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">啟用</string>
<string name="apps_mode">VPN 模式</string>
<string name="send_email">寄送電子信件</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">您可以透過 email 取得網橋位址,或者在網際網路上搜尋,或者掃描網橋的 QR 碼。在下面選擇 \'Email\' 或者 \'Web\' 來取得網橋位址。\n\n取得網橋位址後,將它複製貼上到「網橋」的設定項中,然後重新啟動 Orbot。</string>
- <string name="vpn_default_world">全域(自動)</string>
+ <string name="vpn_default_world">全域(自動)</string>
<string name="hidden_services">隱藏服務</string>
<string name="title_activity_hidden_services">隱藏服務</string>
<string name="menu_hidden_services">隱藏服務</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">考慮開啟電池的最適化</string>
<string name="pref_isolate_dest">孤立目的地地址</string>
<string name="pref_isolate_dest_summary">每個目的地使用不同的電路</string>
- <string name="no_transproxy_warning_short">警告: 不再支援 Transproxying </string>
- <string name="no_transproxy_warning">警告: 不支援透明的代理, 請用 Orbot Apps VPN 替代</string>
<string name="pref_connection_padding">連接保護</string>
<string name="pref_connection_padding_summary">全部啟用連接保護以防止一些流量分析手段
默認: auto</string>
@@ -200,8 +190,7 @@
<string name="bridge_direct_connect">直接連上洋蔥路由網路(最佳)</string>
<string name="bridge_community">透過社區伺服器連接</string>
<string name="bridge_cloud">透過雲端伺服器連接</string>
- <string name="bridges_get_new">請求新的橋接... (如果其它都失敗)</string>
- <string name="trouble_connecting">連線遇上問題?</string>
+ <string name="trouble_connecting">連線遇上問題?</string>
<string name="full_device_vpn">全設備 VPN</string>
<string name="vpn_disabled">VPN 關閉</string>
</resources>
diff --git a/app-mini/src/main/res/values/strings.xml b/app-mini/src/main/res/values/strings.xml
index 78723c10..382dee6f 100644
--- a/app-mini/src/main/res/values/strings.xml
+++ b/app-mini/src/main/res/values/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Connected to the Tor network</string>
<string name="status_disabled">Orbot is deactivated</string>
<string name="status_shutting_down">TorService is shutting down</string>
- <string name="tor_process_starting">Starting Tor client…</string>
- <string name="tor_process_complete">complete.</string>
<string name="menu_settings">Settings</string>
<string name="menu_log">Log</string>
<string name="menu_start">Start</string>
@@ -118,7 +116,6 @@
<string name="pref_use_expanded_notifications_title">Expanded Notifications</string>
<string name="set_locale_title">Language</string>
- <string name="no_internet_connection_tor">No internet connection; Tor is on standby…</string>
<string name="pref_disable_network_title">No Network Auto-Sleep</string>
<string name="pref_disable_network_summary">Put Tor to sleep when there is no internet available</string>
<string name="newnym">You\'ve switched to a new Tor identity!</string>
@@ -126,8 +123,6 @@
<string name="pref_open_proxy_on_all_interfaces_title">Open Proxy on All Interfaces</string>
<string name="pref_open_proxy_on_all_interfaces_summary">Allow Wi-Fi peers, tethered devices and anyone else who can connect to your IP, to access Tor</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">No network connectivity. Putting Tor to sleep…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Network connectivity is good. Waking Tor up…</string>
<string name="updating_settings_in_tor_service">updating settings in Tor service</string>
<string name="pref_socks_title">Tor SOCKS</string>
@@ -169,10 +164,7 @@
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">If your mobile network actively blocks Tor, you can use a \'Bridge Server\' as an alternate way in. SELECT one of the options to configure and test...</string>
- <string name="bridge_mode">Request New Bridge</string>
-
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activate</string>
@@ -180,8 +172,6 @@
<string name="send_email">Send Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">You can get a bridge address through email, the web or by scanning a bridge QR code. Select \'Email\' or \'Web\' below to request a bridge address.\n\nOnce you have an address, copy & paste it into the \"Bridges\" preference in Orbot\'s settings and restart.</string>
-
<string name="vpn_default_world">Global (Auto)</string>
<string name="hidden_services">Onion Services</string>
<string name="title_activity_hidden_services">Onion Services</string>
@@ -227,8 +217,6 @@
<string name="consider_enable_battery_optimizations">Consider enable battery optimizations</string>
<string name="pref_isolate_dest">Isolate destination addresses</string>
<string name="pref_isolate_dest_summary">Use a different circuit for each destination address</string>
- <string name="no_transproxy_warning_short">WARNING: Transproxying no longer supported</string>
- <string name="no_transproxy_warning">WARNING: Transparent proxying not supported. Use Orbot Apps VPN instead.</string>
<string name="pref_connection_padding">Connection padding</string>
<string name="pref_connection_padding_summary">Always enables connection padding to defend against some forms of traffic analysis. Default: auto</string>
<string name="pref_reduced_connection_padding">Reduced connection padding</string>
@@ -248,7 +236,6 @@
<string name="bridge_direct_connect">Connect directly to Tor (Best)</string>
<string name="bridge_community">Connect through community servers</string>
<string name="bridge_cloud">Connect through cloud servers</string>
- <string name="bridges_get_new">Request New Bridges... (If all else fails)</string>
<string name="trouble_connecting">Trouble connecting?</string>
<string name="full_device_vpn">Full Device VPN</string>
<string name="vpn_disabled">VPN Disabled</string>
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 9cf80ec8..98ebdc60 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">متصل بشبكة تور</string>
<string name="status_disabled">تم إيقاف اوربوت</string>
<string name="status_shutting_down">جاري ايقاف خدمة تور</string>
- <string name="tor_process_starting">جاري تشغيل تور...</string>
- <string name="tor_process_complete">كامل.</string>
<string name="menu_settings">إعدادات</string>
<string name="menu_log">السجل</string>
<string name="menu_start">بدء</string>
@@ -104,12 +102,9 @@
<string name="pref_use_expanded_notifications">قم بأظهار التنبيه بشكل موسع بأستخدام تور. أخرج من البلد ورقم الآي بي رقم العنوان على الشبكة</string>
<string name="pref_use_expanded_notifications_title">تنبيه موسّع</string>
<string name="set_locale_title">اللغة</string>
- <string name="no_internet_connection_tor">لا يوجد ارتباط بألانترنيت: تور في وضع الوقف المؤقت</string>
<string name="pref_disable_network_title">لاتوجد شبكة نوم-آلي</string>
<string name="pref_disable_network_summary">ضع تور في وضعية النوم عند عدم وجود الأنترنت</string>
<string name="newnym">لقد تحولت الى هوية تور جديدة</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">لا يوجد اتصال بألشبكة. سينتقل تور الى وضعية النوم</string>
- <string name="network_connectivity_is_good_waking_tor_up_">حال الإتصال بالشبكة جيد. يتم إيقاذ تور...</string>
<string name="updating_settings_in_tor_service">تحديث الاعدادات في خدمات تور</string>
<string name="pref_socks_title">تور سوكس</string>
<string name="pref_socks_summary">منفذ الشبكات الحاسوبية او بورت الذي يقدمه تور الى وحدة الخدمة النائبة البروكسي في سوكس. (الوضعية الأصلية: 9050 او 0 للتعطيل)</string>
@@ -130,17 +125,11 @@
<string name="bridges_updated">تم تحديث الجسور</string>
<string name="restart_orbot_to_use_this_bridge_">الرجاء إعادة تشغيل أوربوت لتفعيل التعديلات</string>
<string name="menu_qr">رمز كيو آر</string>
- <string name="bridge_mode">نمط الجسر</string>
<string name="get_bridges_email">البريد الإلكتروني</string>
- <string name="get_bridges_web">الويب</string>
<string name="activate">تفعيل</string>
<string name="apps_mode">وضع الـ VPN</string>
<string name="send_email">أرسل بريد الكتروني</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">تستطيع الحصول على عنوان جسر عبر البريد الإلكتروني، عبر الويب، أو بعمل مسح لكيوآر كود خاص بجسر.
-إختر \"بريد إلكتروني\" أو \"ويب\" بالأسفل لطلب عنوان جسر.
-
-ما أن تحصل على جسر، أنسخه وألصقه في خانة \"الجسور\" في إعدادات أوربوت وأعد التشغيل.</string>
- <string name="vpn_default_world">شامل (تلقائي)</string>
+ <string name="vpn_default_world">شامل (تلقائي)</string>
<string name="hidden_services">خدمات خفية</string>
<string name="title_activity_hidden_services">خدمات خفية</string>
<string name="menu_hidden_services">خدمات خفية</string>
diff --git a/app/src/main/res/values-ay/strings.xml b/app/src/main/res/values-ay/strings.xml
index c9284d63..1b9ebeea 100644
--- a/app/src/main/res/values-ay/strings.xml
+++ b/app/src/main/res/values-ay/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Tor llikatuqir waythapitawa</string>
<string name="status_disabled">Orbotax jiwt\'atawa</string>
<string name="status_shutting_down">Tor wakichawix jist\'antasiskiwa</string>
- <string name="tor_process_starting">Tor apnaqirix qalltayaskiwa...</string>
- <string name="tor_process_complete">tukuyata.</string>
<string name="menu_settings">Mayjt\'ayaña</string>
<string name="menu_log">Imata</string>
<string name="menu_start">Qalltaña</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Kawkja markans IP ukamp Toramp uñstani uka yatiyäw juk\'amp uñacht\'ayaña</string>
<string name="pref_use_expanded_notifications_title">Phuqhat yatiyäwinaka</string>
<string name="set_locale_title">Aru</string>
- <string name="no_internet_connection_tor">Llikax janiw utjkiti; Tor ukax suyt\'atawa...</string>
<string name="pref_disable_network_title">Jan jiwt\'ayas suyt\'aña</string>
<string name="pref_disable_network_summary">Llika jan uktjki ukjax Tor suyt\'ayam</string>
<string name="newnym">¡Jichhax Tor sutimax yaqhäxiwa!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Janiw llikax utjkiti. Torax suyt\'ayatawa...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Llikax khus uñstaniski. Torax aqtaskiwa...</string>
<string name="updating_settings_in_tor_service">Toran wakichäwinakax mayjt\'ayaskiwa</string>
<string name="pref_socks_title">Toran SOCKS ukapa</string>
<string name="pref_socks_summary">Toran proxy SOCKS apayañ thakhipa: (nayra utt\'atatakix 9050, jiwt\'ayañatakix 0)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Mayjt\'ayatanak aqtayañatak Orbot mayamp qhant\'ayam, amp suma</string>
<string name="menu_qr">QR chimpunaka</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Jawsañ apnaqirinakax Tor jark\'antañ yatipk ukjax \'Jalakipañ yanapiri\' mantañatak apnaqarakismawa. Yant\'añataki, mayjt\'ayañatakix AJLLT\'AM...</string>
- <string name="bridge_mode">Jalakipaña</string>
<string name="get_bridges_email">Imaylu (Email)</string>
- <string name="get_bridges_web">Llika janja</string>
<string name="activate">Qhantayaña</string>
<string name="apps_mode">VPN</string>
<string name="send_email">Qillqat apayaña</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Jalakipañan QR waruqasa, jan ukax llikatuqi, imailtuqis jalakipañ utjirinakx jikxatarakismawa. Jalakipañ thakh jikxatañatakix \'Imail\' jan ukax \'llika\' ajllt\'am.\n\n Orbotan majt\'ayañawjapan \"Jalakipañ Thakhi\" limt\'añar apkatam, ukat mayamp qalltam.</string>
- <string name="vpn_default_world">Uraqpacha (justupaki)</string>
+ <string name="vpn_default_world">Uraqpacha (justupaki)</string>
<string name="hidden_services">Imantat lurañanaka</string>
<string name="title_activity_hidden_services">Imantat lurañanaka</string>
<string name="menu_hidden_services">Imantat lurañanaka</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Ch\'amanchir pist\'k ukjax jiwt\'añkam jan aqañapatak amuyt\'am</string>
<string name="pref_isolate_dest">Apayañ chiqanak jark\'aqaña</string>
<string name="pref_isolate_dest_summary">Sapa apayañ chiqatak kunayman thakhinak apnaqaña</string>
- <string name="no_transproxy_warning_short">UKATARAKI: Transproxy luräwix janiw mayampis iyaw jisxiti</string>
- <string name="no_transproxy_warning">UKATARAKI: Qhan apnaqat proxyx janiw iyaw satäkiti. Uka lantix Orbot wakichäw VPN apnaqam.</string>
<string name="pref_connection_padding">Waythapiñ ch\'amachiri</string>
<string name="pref_connection_padding_summary">Yaqhip apayat uñsusirinakat jark\'aqasiñataki, waythapiñ ch\'amachir aqtayapunim. Utt\'ayata: justupacha</string>
<string name="pref_reduced_connection_padding">Juk\'aptayat waythapiñ ch\'amañchiri</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Tor ukar chiqak waykattaña (juk\'amp khusa)</string>
<string name="bridge_community">Yanapirinakan atamirinakapamp waythapiña</string>
<string name="bridge_cloud">Llikan imirinakamp waythapiña</string>
- <string name="bridges_get_new">Machaq jalakipañanak mayiña... (yaqhanak jan walt\'kasp ukja)</string>
<string name="trouble_connecting">¿Waythapiykasat jan walt\'xï?</string>
<string name="full_device_vpn">Taqpach wakichäwinakaw VPN ukamp apnaqatäni</string>
<string name="vpn_disabled">VPN jiwt\'ayatawa</string>
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
index 46601193..19ca1d86 100644
--- a/app/src/main/res/values-az/strings.xml
+++ b/app/src/main/res/values-az/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Tor şəbəkəsinə bağlandı</string>
<string name="status_disabled">Orbot deaktivasiya edildi</string>
<string name="status_shutting_down">Tor xidməti işini başa vurur</string>
- <string name="tor_process_starting">Tor xidməti başlayır...</string>
- <string name="tor_process_complete">tamamla.</string>
- <string name="menu_settings">Quraşdırmalar</string>
+ <string name="menu_settings">Quraşdırmalar</string>
<string name="menu_log">Jurnal</string>
<string name="menu_start">Başla</string>
<string name="menu_stop">Dur</string>
@@ -104,12 +102,9 @@ LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="pref_use_expanded_notifications">Torla birlikdə ətraflı bildirişi göstərib ölkə və IP-dən çıxın. </string>
<string name="pref_use_expanded_notifications_title">Ətraflı bildirişlər</string>
<string name="set_locale_title">Dil</string>
- <string name="no_internet_connection_tor">İnternet yoxdur; Tor gözləyir</string>
- <string name="pref_disable_network_title">Avto-Yuxu Şəbəkəsi Yoxdur</string>
+ <string name="pref_disable_network_title">Avto-Yuxu Şəbəkəsi Yoxdur</string>
<string name="pref_disable_network_summary">İnternet olmadıqda icazə ver Tor yatsın</string>
<string name="newnym">Yeni Tor oxşarına qoşuldun!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">İnternetlə əlaqə yoxdur. Tor gözləmə rejiminə keçir...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">İnternetlə əlaqə yaxşıdır. Tor iş rejiminə keçir...</string>
<string name="updating_settings_in_tor_service">Tor xidmətində quraşdırmalar yüklənir</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Torun təklif etdiyi Port SOCKS proksi işləyir (standart: 9050, yaxud söndürmək üçün 0) </string>
@@ -130,13 +125,10 @@ LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
<string name="bridges_updated">Körpülər yeniləndi</string>
<string name="restart_orbot_to_use_this_bridge_">Lütfən, Orbotu söndürün və yenidən yandırın ki, dəyişikliklər tətbiq edilsin.</string>
<string name="menu_qr">QR kodlar</string>
- <string name="bridge_mode">Körpü rejimi</string>
<string name="get_bridges_email">Emeyl</string>
- <string name="get_bridges_web">Veb</string>
<string name="activate">Aktivləşdir</string>
<string name="send_email">Emeyl göndərin</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Körpü ünvanını siz emeyl və veb vasitəsiylə, ya da körpünün QR kodunu skan etməklə əldə edə bilərsiniz. Körpü ünvanı haqda sorğunun altında \'Email\'i, yaxud \'Web\'i seçin.\n\nÜnvanı əldə edəndən sonra &amp-i nüsxələyin və onu Orbot quraşdırmasındakı \"Bridges\" parametrinə qoyun və cihazı yenidən yükləyin.</string>
- <string name="save">Saxla</string>
+ <string name="save">Saxla</string>
<string name="name">Ad</string>
<string name="please_restart_Orbot_to_enable_the_changes">Lütfən, Orbotu söndürün və yenidən yandırın ki, dəyişikliklər tətbiq edilsin.</string>
<string name="disable">Söndür</string>
diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml
index bc9d86de..69011f94 100644
--- a/app/src/main/res/values-be/strings.xml
+++ b/app/src/main/res/values-be/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Падлучаны да сеткі Tor</string>
<string name="status_disabled">Orbot адключаны</string>
<string name="status_shutting_down">Служба Tor выключаецца</string>
- <string name="tor_process_starting">Запускаецца кліент Tor...</string>
- <string name="tor_process_complete">завершана.</string>
<string name="menu_settings">Налады</string>
<string name="menu_log">Журнал</string>
<string name="menu_start">Пуск</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Паказаць пашыранае апавяшчэнне Tor з краінай выхаду і IP</string>
<string name="pref_use_expanded_notifications_title">Пашыраныя апавяшчэнні</string>
<string name="set_locale_title">Мова</string>
- <string name="no_internet_connection_tor">Адсутнічае падключэнне да інтэрнэту, Tor знаходзіцца ў рэжыме чакання…</string>
<string name="pref_disable_network_title">Аўтазасынанне без сеткі</string>
<string name="pref_disable_network_summary">Пераводзіць Tor у спячы рэжым пры немені інтэрнэту</string>
<string name="newnym">Вы перамкнуліся на новы ідэнтыфікатар Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Няма падключэння да сеткі. Tor пераходзіць у рэжым сну...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Падключэнне да сеткі ўсталявана. Tor прачынаецца...</string>
<string name="updating_settings_in_tor_service">абнаўленне налад у сэрвісе Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Порт, на якім Tor прапануе свой SOCKS-проксі (па змаўчанні: 9050, 0 - для адключэння)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Калі ласка, перазапусціце Orbot для ўступу змены ў сілу</string>
<string name="menu_qr">QR-коды</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Калі ваша мабільная сетка актыўна блакуе Tor, вы можаце выкарыстоўваць масты Tor для доступу да сеткі. Абярыце адзін з варыянтаў для налады і тэставання:</string>
- <string name="bridge_mode">Рэжым моста</string>
<string name="get_bridges_email">Эл. пошта</string>
- <string name="get_bridges_web">Сайт</string>
<string name="activate">Актывацыя</string>
<string name="apps_mode">VPN-рэжым</string>
<string name="send_email">Адправіць ліст</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Вы можаце атрымаць адрас моста па электроннай пошце, з сайта ці шляхам сканавання QR-кода. Абярыце \"Эл. пошта\" ці \"Сайт\" ніжэй, каб запытаць адрас моста.\n\nАтрыманы адрас скапіюйце і ўстаўце яго ў падзеле налад Orbot \"Масты\", пасля чаго перазапусціце дадатак.</string>
- <string name="vpn_default_world">Свет (аўта)</string>
+ <string name="vpn_default_world">Свет (аўта)</string>
<string name="hidden_services">Схаваныя службы</string>
<string name="title_activity_hidden_services">Схаваныя службы</string>
<string name="menu_hidden_services">Схаваныя службы</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Разгледзьце магчымасць уключэння аптымізацыі батарэі</string>
<string name="pref_isolate_dest">Ізаляваць адрасы прызначэння</string>
<string name="pref_isolate_dest_summary">Ужываць розныя ланцугі для кожнага адраса прызначэння</string>
- <string name="no_transproxy_warning_short">ПАПЯРЭДЖАННЕ: празрысты проксі больш не падтрымліваецца</string>
- <string name="no_transproxy_warning">ПАПЯРЭДЖАННЕ: празрысты проксі больш не падтрымліваецца. Замест гэтага выкарыстоўвайце VPN-рэжым Orbot.</string>
<string name="pref_connection_padding">Пракладка злучэння</string>
<string name="pref_connection_padding_summary">Заўсёды ўключае пракладку злучэння для абароны ад некаторых формаў аналізу трафіка. Звычайна: аўта</string>
<string name="pref_reduced_connection_padding">Сокращённая прокладка соединения</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Падключэнне непасрэдна да Tor (найлепей)</string>
<string name="bridge_community">Падключэнне праз серверы супольнасці</string>
<string name="bridge_cloud">Падключэнне праз воблачныя серверы</string>
- <string name="bridges_get_new">Запытаць новыя масты… (калі ўсе іншыя не атрымалася)</string>
<string name="trouble_connecting">Праблема з падключэннем?</string>
<string name="full_device_vpn">VPN для ўсёй прылады</string>
<string name="vpn_disabled">VPN адключаны</string>
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index c7de4e8f..c6e991cc 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Свързан към Тор мрежата</string>
<string name="status_disabled">Орбот е деактивиран</string>
<string name="status_shutting_down">TorService спира</string>
- <string name="tor_process_starting">Стартиране на Тор клиент...</string>
- <string name="tor_process_complete">завършено.</string>
- <string name="menu_settings">Настройки</string>
+ <string name="menu_settings">Настройки</string>
<string name="menu_log">Лог</string>
<string name="menu_start">Старт</string>
<string name="menu_stop">Стоп</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Покажи разширена информация за Tor изходната държава и IP в лентата за известия</string>
<string name="pref_use_expanded_notifications_title">Разширени известия</string>
<string name="set_locale_title">Език</string>
- <string name="no_internet_connection_tor">Няма интернет връзка; Tor е в режим на изчакване...</string>
- <string name="pref_disable_network_title">Лиспва Автоматичен Режим на Изчакване</string>
+ <string name="pref_disable_network_title">Лиспва Автоматичен Режим на Изчакване</string>
<string name="pref_disable_network_summary">Сложи Tor в режим на изчакване, когато няма интернет</string>
<string name="newnym">Сменихте своята Тор идентичност!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Няма интернет връзка. Преминаване в режим на изчкаване...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Добра интернет връзка. Събуждане на Tor...</string>
<string name="updating_settings_in_tor_service">обновяване на настройките в Tor услугата</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Порт, на който Tor предлага своето SOCKS прокси(подразбиране: 9050 или 0, за да забраниш)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Мостове включени!</string>
<string name="restart_orbot_to_use_this_bridge_">Моля, рестартирай Orbot, за да влязат в действие промените</string>
<string name="menu_qr">QR Кодове</string>
- <string name="bridge_mode">Режим мост</string>
<string name="get_bridges_email">Имейл</string>
- <string name="get_bridges_web">Уеб</string>
<string name="activate">Активирай</string>
<string name="send_email">Изпрати имейл</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Можеш да получиш адреса на мост по имейл, интернет или като сканираш QR kod. Избери \'Имейл\' или \'Интернет\' по-долу, за да поискаш адрес на мост.\n\nВеднъж щом получиш адреса го копирай в \"Мостове\", в настройките на Orbot и рестартирай приложението.</string>
- <string name="hidden_services">Скрити услуги</string>
+ <string name="hidden_services">Скрити услуги</string>
<string name="title_activity_hidden_services">Скрити услуги</string>
<string name="menu_hidden_services">Скрити услуги</string>
<string name="save">Запази</string>
diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml
index e8c7ab54..1da67237 100644
--- a/app/src/main/res/values-bn-rBD/strings.xml
+++ b/app/src/main/res/values-bn-rBD/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">টর নেটওয়ার্কের সাথে সংযুক্ত হয়েছে</string>
<string name="status_disabled">অরবট নিষ্ক্রিয় করা হয়েছে</string>
<string name="status_shutting_down">টর সার্ভিস বন্ধ করা হচ্ছে</string>
- <string name="tor_process_starting">টর ক্লায়েন্ট চালু করা হচ্ছে</string>
- <string name="tor_process_complete">সম্পূর্ণ</string>
- <string name="menu_settings">নিয়ম বিন্যাস</string>
+ <string name="menu_settings">নিয়ম বিন্যাস</string>
<string name="menu_log">লগ</string>
<string name="menu_start">শুরু</string>
<string name="menu_stop">শেষ</string>
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index 8bdf8f4a..14c6965a 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Esteu connectat a la xarxa Tor</string>
<string name="status_disabled">L\'Orbot està desactivat</string>
<string name="status_shutting_down">El servei Tor s\'està desactivant</string>
- <string name="tor_process_starting">S\'està iniciant el client Tor...</string>
- <string name="tor_process_complete">fet.</string>
- <string name="menu_settings">Preferències</string>
+ <string name="menu_settings">Preferències</string>
<string name="menu_log">Registre</string>
<string name="menu_start">Inicia</string>
<string name="menu_stop">Atura</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Mostra la informació de sortida addicional del Tor amb el país i la IP</string>
<string name="pref_use_expanded_notifications_title">Notificacions addicionals</string>
<string name="set_locale_title">Llengua</string>
- <string name="no_internet_connection_tor">No s\'ha trobat cap connexió a Internet; el Tor és a l\'espera</string>
- <string name="pref_disable_network_title">No hi ha autodesconnexió de xarxa</string>
+ <string name="pref_disable_network_title">No hi ha autodesconnexió de xarxa</string>
<string name="pref_disable_network_summary">Posa el Tor en pausa mentre no hi ha connexió a internet</string>
<string name="newnym">Heu canviat a una nova identitat Tor.</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">No s\'ha trobat connectivitat a la xarxa. El Tor entra en suspensió...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">La connectivitat de la xarxa és bona. S\'està despertant el Tor...</string>
<string name="updating_settings_in_tor_service">S\'està actualitzant la configuració als serveis del Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_socks_summary">Port que ofereix el servidor intermediari SOCKS al Tor (per defecte: 9050 or 0 per inhabilitar)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Reinicieu l\'Orbot per aplicar els canvis</string>
<string name="menu_qr">Codis QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Si la teva xarxa mòbil boqueja activament Tor, pots utilitzar un \'Servidor pont\' com a via alternativa. SELECCIONA una de les opcions per configurar i provar.</string>
- <string name="bridge_mode">Mode pont</string>
<string name="get_bridges_email">Correu-e</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activa</string>
<string name="apps_mode">Mode VPN</string>
<string name="send_email">Envia correu-e</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Podeu obtenir un enllaç pont mitjançant el correu electrònic, el web o escanejant un codi QR. Trieu Correu-e o Web a sota per demanar una adreça.\n\nQuan tingueu un enllaç d\'aquest tipus, copieu-ho i enganxeu-ho a l\'apartat «Ponts» de la configuració de l\'Orbot i reinicieu.</string>
- <string name="vpn_default_world">Global (auto)</string>
+ <string name="vpn_default_world">Global (auto)</string>
<string name="hidden_services">Serveis ocults</string>
<string name="title_activity_hidden_services">Serveis ocults</string>
<string name="menu_hidden_services">Serveis ocults</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Penseu a habilitar les optimitzacions de la bateria</string>
<string name="pref_isolate_dest">Aïllar adreces de destinació</string>
<string name="pref_isolate_dest_summary">Utilitzeu un circuit diferent per a cada adreça de destinació</string>
- <string name="no_transproxy_warning_short">ATENCIÓ: Transproxying ja no és compatible</string>
- <string name="no_transproxy_warning">ATENCIÓ: no s\'admet Transparent proxying. Utilitzeu les aplicacions Orbot VPN.</string>
<string name="pref_connection_padding">Farciment de connexió</string>
<string name="pref_connection_padding_summary">Activeu sempre el farciment de connexió per defensar-vos d\'algunes formes d\'anàlisi de trànsit. Per defecte: automàtic</string>
<string name="pref_reduced_connection_padding">Farciment de connexió reduit</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Connecta directament a Tor (Lo millor)</string>
<string name="bridge_community">Connecta mitjançant servidors de comunitat</string>
<string name="bridge_cloud">Connecta mitjançant servidors núvol</string>
- <string name="bridges_get_new">Demana nous ponts (Si tot lo altra falla)</string>
<string name="trouble_connecting">Problemes connectant?</string>
<string name="full_device_vpn">Dispositiu completament VPN</string>
<string name="vpn_disabled">VPN desactivat</string>
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml
index c333b4c7..f2c7fcdd 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/app/src/main/res/values-cs-rCZ/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Připojen k síti Tor</string>
<string name="status_disabled">Orbot je deaktivován</string>
<string name="status_shutting_down">TorService se vypíná...</string>
- <string name="tor_process_starting">Startuji Tor klienta...</string>
- <string name="tor_process_complete">hotovo.</string>
- <string name="menu_settings">Nastavení</string>
+ <string name="menu_settings">Nastavení</string>
<string name="menu_log">Log</string>
<string name="menu_start">Zapnout</string>
<string name="menu_stop">Vypnout</string>
@@ -101,12 +99,9 @@
<string name="pref_use_expanded_notifications">Zobrazit rozšířené oznánemí s Tor výstupní zemí a IP</string>
<string name="pref_use_expanded_notifications_title">Rozšířené oznámení</string>
<string name="set_locale_title">Jazyk</string>
- <string name="no_internet_connection_tor">Žádné připojení k internetu; Tor je standby...</string>
- <string name="pref_disable_network_title">Vypnout uspávání sítě</string>
+ <string name="pref_disable_network_title">Vypnout uspávání sítě</string>
<string name="pref_disable_network_summary">Uspat Tor když není k dispozici přístup k Internetu</string>
<string name="newnym">Vaše identita na Toru byla změněna!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Žádný síťový provoz. Ukládám Tor k spánku…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Síťový provoz v pořádku. Probouzím Tor…</string>
<string name="updating_settings_in_tor_service">aktualizuji nastavení služby Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Port, na kterém Tor nabízí SOCKS proxy (default: 9050, 0 pro zakázání)</string>
@@ -127,13 +122,10 @@
<string name="bridges_updated">Bridge aktualizovány</string>
<string name="restart_orbot_to_use_this_bridge_">Pro projevení změn restartujte Orbot</string>
<string name="menu_qr">QR kódy</string>
- <string name="bridge_mode">Bridge mód</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Aktivovat</string>
<string name="send_email">Pošli email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Abresu bridge můžete získat emailem, na webu, nebo naskenováním bridge QR kódu. Zvolte níže \'Email\', nebo \'Web\' pro vyžádání adresy bridge.\n\nJakmile máte adresu, zkopírujte & vložte ji do položky \"Bridge\" v nastavení Orbot a restartujte aplikaci.</string>
- <string name="save">Uložit</string>
+ <string name="save">Uložit</string>
<string name="name">Jméno</string>
<string name="please_restart_Orbot_to_enable_the_changes">Pro projevení změn restartujte Orbot</string>
</resources>
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 5fe50ed5..7f330416 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Připojen k síti Tor</string>
<string name="status_disabled">\"Orbot je deaktivován</string>
<string name="status_shutting_down">Orbot se vypíná</string>
- <string name="tor_process_starting">Startuji Tor klienta…</string>
- <string name="tor_process_complete">hotovo.</string>
- <string name="menu_settings">Nastavení</string>
+ <string name="menu_settings">Nastavení</string>
<string name="menu_log">Log</string>
<string name="menu_start">Zapnout</string>
<string name="menu_stop">Vypnout</string>
diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml
index 9bd3852d..ac04320b 100644
--- a/app/src/main/res/values-cy/strings.xml
+++ b/app/src/main/res/values-cy/strings.xml
@@ -3,9 +3,7 @@
<string name="app_name">Orbot</string>
<string name="status_starting_up">Mae Orbot yn cychwyn...</string>
<string name="status_activated">Wedi cysylltu â rhwydwaith Tor</string>
- <string name="tor_process_starting">Yn cychwyn cleient Tor</string>
- <string name="tor_process_complete">Wedi ei gwblhau.</string>
- <string name="menu_settings">Gosodiadau</string>
+ <string name="menu_settings">Gosodiadau</string>
<string name="menu_log">Log</string>
<string name="menu_start">Cychwyn</string>
<string name="menu_stop">Stop</string>
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index d212aac5..e164bab3 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Der er forbindelse til Tor-netværket</string>
<string name="status_disabled">Orbot er slået fra</string>
<string name="status_shutting_down">TorServe lukker ned</string>
- <string name="tor_process_starting">Starter Tor klienten...</string>
- <string name="tor_process_complete">udført.</string>
- <string name="menu_settings">Indstillinger</string>
+ <string name="menu_settings">Indstillinger</string>
<string name="menu_log">Log</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stop</string>
@@ -96,8 +94,7 @@
<string name="pref_use_persistent_notifications">Vis altid ikonet i statuslinien når Orbot er forbundet til netværket</string>
<string name="pref_use_persistent_notifications_title">Vis altid notifikationer</string>
<string name="set_locale_title">Sprog</string>
- <string name="no_internet_connection_tor">Ingen internetforbindelse; Tor er på standby...</string>
- <string name="kb">KB</string>
+ <string name="kb">KB</string>
<string name="mb">MB</string>
<string name="get_bridges_email">Mail</string>
<string name="activate">Aktiver</string>
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 71b43159..9cfc6763 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Verbunden mit dem Tor-Netzwerk</string>
<string name="status_disabled">Orbot ist Deaktiviert</string>
<string name="status_shutting_down">TorService wird heruntergefahren</string>
- <string name="tor_process_starting">Tor-Programm wird gestartet …</string>
- <string name="tor_process_complete">abgeschlossen.</string>
- <string name="menu_settings">Einstellungen</string>
+ <string name="menu_settings">Einstellungen</string>
<string name="menu_log">Protokoll</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stopp</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Zeige erweiterte Benachrichtigung mit Tor-Ausgangsland und IP an</string>
<string name="pref_use_expanded_notifications_title">Erweiterte Benachrichtigungen</string>
<string name="set_locale_title">Sprache</string>
- <string name="no_internet_connection_tor">Keine Internetverbindung; Tor ist in Bereitschaft...</string>
- <string name="pref_disable_network_title">Kein Automatischer Netzwerk Ruhezustand</string>
+ <string name="pref_disable_network_title">Kein Automatischer Netzwerk Ruhezustand</string>
<string name="pref_disable_network_summary">Versetze Tor in den Ruhezustand wenn kein Internet verfügbar ist</string>
<string name="newnym">Sie haben zu einer Neuen Tor-Identität gewechselt!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Keine Netzwerk-Verbindung. Tor wird in den Ruhezustand versetzt…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Netzwerk-Verbindung ist Gut. Tor wird aktiviert …</string>
<string name="updating_settings_in_tor_service">Aktualisiere Einstellungen für den Tor-Dienst</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Anschluss auf dem der SOCKS-Proxy von Tor bereitgestellt wird (Standard: 9050 oder 0 zum deaktivieren)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Bitte Tor Erneut Starten um die Änderungen wirksam werden zu lassen</string>
<string name="menu_qr">QR Codes</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Wenn Ihr mobiles Netzwerk Tor blockiert, können Sie einen \"Brücken-Server\" als alternativen Weg verwenden. Wählen Sie eine der Optionen zum Konfigurieren und Testen ..,.</string>
- <string name="bridge_mode">Brücken-Modus</string>
<string name="get_bridges_email">E-Mail</string>
- <string name="get_bridges_web">Netz</string>
<string name="activate">Aktivieren</string>
<string name="apps_mode">VPN Modus</string>
<string name="send_email">E-Mail senden</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Sie können eine Brücken-Adresse per E-Mail, im Web oder per Scan eines BrückenQR-Codes erhalten. Wählen Sie unten \'E-Mail\' oder \'Web\', um eine Brückenadresse anzufordern.\n\nSobald Sie eine Adresse haben, fügen Sie diese bei den Einstellungen für Brücken ein und starten Sie Orbot neu.</string>
- <string name="vpn_default_world">Global (Automatisch)</string>
+ <string name="vpn_default_world">Global (Automatisch)</string>
<string name="hidden_services">Versteckte Dienste</string>
<string name="title_activity_hidden_services">Versteckte Dienste</string>
<string name="menu_hidden_services">Versteckte Dienste</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Aktivieren Sie die Akku-Optimierung</string>
<string name="pref_isolate_dest">Isolierte Zieladressen</string>
<string name="pref_isolate_dest_summary">Verwenden Sie für jeden Netzwerk-Kreislauf eine andere Zieladresse</string>
- <string name="no_transproxy_warning_short">ACHTUNG: Transproxying wird nicht mehr unterstützt</string>
- <string name="no_transproxy_warning">ACHTUNG: Transparente Proxy-Unterstützung wird nicht mehr unterstützt. Verwenden Sie stattdessen Orbot Apps VPN.</string>
<string name="pref_connection_padding">Verbindungsauffüllung</string>
<string name="pref_connection_padding_summary">Aktiviert immer die Verbindungsauffüllung, um einige Formen der Verkehrsanalyse zu verhindern. Standard: Automatisch</string>
<string name="pref_reduced_connection_padding">Reduzierte Verbindungsauffüllung</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Direkt mit Tor verbinden (am Besten)</string>
<string name="bridge_community">Verbinden Sie sich über Community-Server</string>
<string name="bridge_cloud">Verbinden Sie sich über Cloud-Server</string>
- <string name="bridges_get_new">Fordere Neue Brücken an... (Wenn alles andere fehlschlägt)</string>
<string name="trouble_connecting">Probleme beim Verbinden?</string>
<string name="full_device_vpn">Vollständiger Geräte-VPN</string>
<string name="vpn_disabled">VPN Deaktiviert</string>
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index 77468736..fc34cf83 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Συνδέθηκε στο δίκτυο Tor</string>
<string name="status_disabled">\"Το Orbot είναι Απενεργοποιημένο</string>
<string name="status_shutting_down">Η υπηρεσία Tor τερματίζεται</string>
- <string name="tor_process_starting">Εκκίνηση του πελάτη Tor...</string>
- <string name="tor_process_complete">ολοκληρώθηκε...</string>
- <string name="menu_settings">Ρυθμίσεις</string>
+ <string name="menu_settings">Ρυθμίσεις</string>
<string name="menu_log">Καταγραφή</string>
<string name="menu_start">Εκκίνηση</string>
<string name="menu_stop">Διακοπή</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Εμφάνιση εκτεταμένης ειδοποίησης με τη χώρα εξόδου του Tor και τη διεύθυνση IP</string>
<string name="pref_use_expanded_notifications_title">Επεκταμένες Ειδοποιήσεις</string>
<string name="set_locale_title">Γλώσσα </string>
- <string name="no_internet_connection_tor">Δεν υπάρχει σύνδεση στο διαδίκτυο. Ο Tor είναι σε αναμονή...</string>
- <string name="pref_disable_network_title">Χωρίς Αυτόματη Αναστολή Δικτύου</string>
+ <string name="pref_disable_network_title">Χωρίς Αυτόματη Αναστολή Δικτύου</string>
<string name="pref_disable_network_summary">Θέσε το Tor σε λειτουργία sleep όταν δεν υπάρχει διαθέσιμη σύνδεση Ιnternet</string>
<string name="newnym">Έχετε αλλάξει επιτυχώς την ταυτότητα σας στο Tor! </string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Δεν υπάρχει σύνδεση με δίκτυο. Ο Tor μπαίνει σε κατάσταση αναμονής...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Η σύνδεση δικτύου είναι καλή. Γίνεται αφύπνιση του Tor...</string>
<string name="updating_settings_in_tor_service">ενημέρωση ρυθμίσεων στην υπηρεσία Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Θύρα που προσφέρει ο Tor στο SOCKS proxy του (προεπιλογή: 9050 ή 0 για απενεργοποίηση)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Παρακαλούμε επανεκκινήστε το Orbot για να ενεργοποιήσετε τις αλλαγές</string>
<string name="menu_qr">Κώδικες QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Αν το δίκτυο κινητής τηλεφωνίας σας μπλοκάρει ενεργά το Tor, μπορείτε να χρησιμοποιήσετε μια γέφυρα για να έχετε πρόσβαση στο δίκτυο. ΕΠΙΛΕΞΤΕ έναν από τους παραπάνω τύπους γέφυρας για να ενεργοποιήσετε τις γέφυρες.</string>
- <string name="bridge_mode">Λειτουργία Γέφυρας</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Ενεργοποίηση</string>
<string name="apps_mode">Λειτουργία VPN</string>
<string name="send_email">Στείλτε Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Μπορείτε να πάρετε μια διεύθυνση γέφυρας μέσω ηλεκτρονικού ταχυδρομείου, στον ιστό ή με τη σάρωση κώδικα QR γέφυρας. Επιλέξτε \'Email\' ή \'Web\' παρακάτω για να ζητήσετε μια διεύθυνση γέφυρας.\n\nΌταν έχετε μια διεύθυνση, αντιγράψτε το & επικολλήστε το στην προτίμηση \"Bridges\" στη ρύθμιση του Orbot και επανεκκινήστε.</string>
- <string name="vpn_default_world">Παγκόσμια (Auto)</string>
+ <string name="vpn_default_world">Παγκόσμια (Auto)</string>
<string name="hidden_services">Αποκρυφες υπηρεσιες</string>
<string name="title_activity_hidden_services">Αποκρυφες υπηρεσιες</string>
<string name="menu_hidden_services">Αποκρυφες υπηρεσιες</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Σκέψη ενεργοποίησης βελτιστοποιήσεων μπαταρίας</string>
<string name="pref_isolate_dest">Μη έγκυρος προορισμός διευθύνσεων</string>
<string name="pref_isolate_dest_summary">Χρησιμοποιήστε ένα διαφορετικό κύκλωμα για κάθε διεύθυνση προορισμού</string>
- <string name="no_transproxy_warning_short">ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Το Transproxying δεν υποστηρίζεται πλέον</string>
- <string name="no_transproxy_warning">ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Το Transparent proxying δεν υποστηρίζεται. Χρήση Orbot Εφαρμογών VPN αντ \' αυτού.</string>
<string name="pref_connection_padding">Σύνδεση αναπλήρωσης</string>
<string name="pref_connection_padding_summary">Πάντα δίνετε η δυνατότητα σύνδεσης padding για υπεράσπιση ενάντια σε ορισμένες μορφές ανάλυση της κυκλοφορίας. Προεπιλογή: auto</string>
<string name="pref_reduced_connection_padding">Σύνδεση αναπλήρωσης</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Απευθείας σύνδεση με το δίκτυο Tor (προεπιλογή)</string>
<string name="bridge_community">Σύνδεση μέσω κοινοτικών διακομιστών</string>
<string name="bridge_cloud">Σύνδεση μέσω cloud server</string>
- <string name="bridges_get_new">Αίτημα νέων γεφυρών... (Αν όλα τα άλλα αποτύχουν)</string>
<string name="trouble_connecting">Πρόβλημα σύνδεσης;</string>
<string name="full_device_vpn">Πλήρης Συσκευή VPN</string>
<string name="vpn_disabled">Το VPN απενεργοποιήθηκε</string>
diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml
index 75531ff4..eca34294 100644
--- a/app/src/main/res/values-en-rGB/strings.xml
+++ b/app/src/main/res/values-en-rGB/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Connected to the Tor network</string>
<string name="status_disabled">Orbot is deactivated</string>
<string name="status_shutting_down">TorService is shutting down</string>
- <string name="tor_process_starting">Starting Tor client…</string>
- <string name="tor_process_complete">complete.</string>
- <string name="menu_settings">Settings</string>
+ <string name="menu_settings">Settings</string>
<string name="menu_log">Log</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stop</string>
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index c00f5234..efbdbb27 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -4,9 +4,7 @@
<string name="status_starting_up">Orbot ŝaltiĝas...</string>
<string name="status_activated">Konektita al Tor-reto</string>
<string name="status_disabled">Orbot estas malaktivigita</string>
- <string name="tor_process_starting">Ŝaltiĝas Tor-kliento...</string>
- <string name="tor_process_complete">kompleta.</string>
- <string name="menu_settings">Agordoj</string>
+ <string name="menu_settings">Agordoj</string>
<string name="menu_log">Protokolo</string>
<string name="menu_start">Starti</string>
<string name="menu_stop">Halti</string>
diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml
index f8af8019..b1cd7cb2 100644
--- a/app/src/main/res/values-es-rAR/strings.xml
+++ b/app/src/main/res/values-es-rAR/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Conectado a la red Tor</string>
<string name="status_disabled">Orbot está desactivado</string>
<string name="status_shutting_down">El servicio de Tor se esta cerrando</string>
- <string name="tor_process_starting">Iniciando el cliente Tor...</string>
- <string name="tor_process_complete">completo.</string>
- <string name="menu_settings">Configuración</string>
+ <string name="menu_settings">Configuración</string>
<string name="menu_log">Registro</string>
<string name="menu_start">Iniciar</string>
<string name="menu_stop">Detener</string>
@@ -110,7 +108,6 @@
<string name="kb">KB</string>
<string name="mb">MB</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activar</string>
<string name="save">Guardar</string>
<string name="name">Nombre</string>
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index ffa447be..46bff414 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Conectado a la red Tor</string>
<string name="status_disabled">Orbot está desactivado</string>
<string name="status_shutting_down">TorService se está cerrando</string>
- <string name="tor_process_starting">Iniciando cliente Tor...</string>
- <string name="tor_process_complete">completado.</string>
- <string name="menu_settings">Configuración</string>
+ <string name="menu_settings">Configuración</string>
<string name="menu_log">Registro (log)</string>
<string name="menu_start">Iniciar</string>
<string name="menu_stop">Detener</string>
@@ -108,12 +106,9 @@ direcciones (o rangos). No prevalecen sobre las configuraciones de exclusión de
<string name="pref_use_expanded_notifications">Mostrar notificación expandida con el país de salida de Tor y la IP</string>
<string name="pref_use_expanded_notifications_title">Notificaciones expandidas</string>
<string name="set_locale_title">Idioma</string>
- <string name="no_internet_connection_tor">Sin conexión a Internet; Tor está en suspensión...</string>
- <string name="pref_disable_network_title">Sin suspensión-automática de la red</string>
+ <string name="pref_disable_network_title">Sin suspensión-automática de la red</string>
<string name="pref_disable_network_summary">Ponga Tor en suspensión cuando no haya Internet disponible</string>
<string name="newnym">¡Ha cambiado a una nueva identidad de Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">No hay conectividad de red. Poniendo a Tor a dormir...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">La conectividad de red es buena. Despertando a Tor...</string>
<string name="updating_settings_in_tor_service">actualizando la configuración en el servicio Tor</string>
<string name="pref_socks_title">SOCKS de Tor</string>
<string name="pref_socks_summary">Puerto sobre el que Tor ofrece su proxy SOCKS (por defecto: 9050 o 0 para deshabilitarlo)</string>
@@ -135,14 +130,11 @@ direcciones (o rangos). No prevalecen sobre las configuraciones de exclusión de
<string name="restart_orbot_to_use_this_bridge_">Por favor, reinicie Orbot para habilitar los cambios</string>
<string name="menu_qr">Códigos QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Si su red móvil bloquea Tor activamente, puede usar un \'Servidor Puente\' como alternativa para acceder. SELECCIONE una de las opciones a configurar y probar...</string>
- <string name="bridge_mode">Modo bridge</string>
<string name="get_bridges_email">Correo electrónico</string>
- <string name="get_bridges_web">Página web</string>
<string name="activate">Activar</string>
<string name="apps_mode">Modo VPN</string>
<string name="send_email">Enviar correo</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Puede obtener una dirección de bridge (repetidor puente) a través de correo electrónico, la web, o escaneando un código QR de bridge. Seleccione \'Correo\' o \'Web\' debajo para solicitar una dirección de bridge.\n\nUna vez tenga una dirección, copie y péguela en la opción \"Bridges\" de la configuración de Orbot, y reinicie.</string>
- <string name="vpn_default_world">Global (Automático)</string>
+ <string name="vpn_default_world">Global (Automático)</string>
<string name="hidden_services">Servicios ocultos</string>
<string name="title_activity_hidden_services">Servicios ocultos</string>
<string name="menu_hidden_services">Servicios ocultos</string>
@@ -186,8 +178,6 @@ direcciones (o rangos). No prevalecen sobre las configuraciones de exclusión de
<string name="consider_enable_battery_optimizations">Considere habilitar las optimizaciones de batería</string>
<string name="pref_isolate_dest">Aislar direcciones de destino</string>
<string name="pref_isolate_dest_summary">Usar un circuito diferente para cada dirección de destino</string>
- <string name="no_transproxy_warning_short">ADVERTENCIA: El proxyficado transparente ya no está soportado</string>
- <string name="no_transproxy_warning">ADVERTENCIA: El proxyficado transparente no está soportado. Use la VPN de aplicaciones de Orbot en su lugar.</string>
<string name="pref_connection_padding">Relleno de la conexión</string>
<string name="pref_connection_padding_summary">Habilita siempre el relleno de la conexión como defensa contra algunas formas de análisis de tráfico. Predeterminado: Automático</string>
<string name="pref_reduced_connection_padding">Relleno de la conexión reducido</string>
@@ -199,7 +189,6 @@ direcciones (o rangos). No prevalecen sobre las configuraciones de exclusión de
<string name="bridge_direct_connect">Conectar directamente a Tor (lo mejor)</string>
<string name="bridge_community">Conectar a través de servidores de la comunidad</string>
<string name="bridge_cloud">Conectar a través de servidores de la nube</string>
- <string name="bridges_get_new">Solicitar nuevos puentes... (si todo lo demás falla)</string>
<string name="trouble_connecting">¿Problemas al conectar?</string>
<string name="full_device_vpn">VPN de dispositivo completo</string>
<string name="vpn_disabled">VPN deshabilitada</string>
diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml
index d986129a..532fca3c 100644
--- a/app/src/main/res/values-et/strings.xml
+++ b/app/src/main/res/values-et/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Ühendatud Tor võrgustikku</string>
<string name="status_disabled">Orbot deaktiveeritud</string>
<string name="status_shutting_down">Orbot lülitub välja</string>
- <string name="tor_process_starting">Tor kliendi käivitamine...</string>
- <string name="tor_process_complete">valmis.</string>
- <string name="menu_settings">Seaded</string>
+ <string name="menu_settings">Seaded</string>
<string name="menu_log">Logi</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stopp</string>
@@ -94,9 +92,7 @@
<string name="pref_disable_network_title">Pole võrgu auto-und</string>
<string name="pref_disable_network_summary">Pane Tor magama kui Internetiühendus puudub</string>
<string name="newnym">Lülitusite uuele Tor identiteedile!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Interneti ühendus puudub. Panen Tori magama...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Interneti ühendus hea. Äratan Tori üles...</string>
- <string name="save">Salvesta</string>
+ <string name="save">Salvesta</string>
<string name="name">Name</string>
<string name="disable">Keela</string>
<string name="enable">Luba</string>
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index d4387fc2..b02d1cd2 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Tor sarera konektatuta</string>
<string name="status_disabled">Orbot desaktibatuta dago</string>
<string name="status_shutting_down">TorService itzaltzen ari da</string>
- <string name="tor_process_starting">Tor bezeroa hasten...</string>
- <string name="tor_process_complete">eginda.</string>
- <string name="menu_settings">Ezarpenak</string>
+ <string name="menu_settings">Ezarpenak</string>
<string name="menu_log">Egunkaria</string>
<string name="menu_start">Abiarazi</string>
<string name="menu_stop">Gelditu</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Erakutsi hedatutako jakinarazpenak Tor irteera herrialde eta IP-arekin</string>
<string name="pref_use_expanded_notifications_title">Hedatutako jakinarazpenak</string>
<string name="set_locale_title">Hizkuntza</string>
- <string name="no_internet_connection_tor">Ez dago Interneterako konexiorik; Tor egonean dago...</string>
- <string name="pref_disable_network_title">Sareko lokartze automatikorik ez</string>
+ <string name="pref_disable_network_title">Sareko lokartze automatikorik ez</string>
<string name="pref_disable_network_summary">Jarri Tor lotan internet atzigarri ez dagoenean</string>
<string name="newnym">Tor identitate berri batera aldatu duzu!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Sare konexiorik ez. Tor lotan jartzen...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Sare konexioa berreskuratu da. Tor esnatzen...</string>
<string name="updating_settings_in_tor_service">Tor zerbitzuaren ezarpenak eguneratzen</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Tor-ek bere SOCKS proxya eskaintzeko ataka (Lehenetsia: 9050 edo 0 desgaitzeko)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Berrabiarazi Orbot aldaketak aplikatzeko</string>
<string name="menu_qr">QR Kodeak</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Zure sare mugikorrak Tor nahita blokeatzen badu, \'Zubi zerbitzaria\' erabili dezakezu ordezko sarbide gisa. HAUTATU konfiguratzeko aukera bat eta probatu...</string>
- <string name="bridge_mode">Zubi modua</string>
<string name="get_bridges_email">E-mail</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Aktibatu</string>
<string name="apps_mode">VPN modua</string>
<string name="send_email">Bidali E-maila</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Zubi helbide bat lortu dezakezu e-mail eta web bidez edo QR kode bat eskaneatuz. Hautatu \'E-mail\' edo \'Web\' behean zubi helbide bat eskatzeko.\n\nBehin helbide bat duzula, kopiatu eta itsatsi ezazu Orbot ezarpenetako \"Zubiak\" atalean eta berrabiarazi.</string>
- <string name="vpn_default_world">Orokorra (Automatikoa)</string>
+ <string name="vpn_default_world">Orokorra (Automatikoa)</string>
<string name="hidden_services">Ezkutuko zerbitzuak</string>
<string name="title_activity_hidden_services">Ezkutuko zerbitzuak</string>
<string name="menu_hidden_services">Ezkutuko zerbitzuak</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Aztertu bateria optimizazioak gaitzea</string>
<string name="pref_isolate_dest">Isolatu helbide helburuak</string>
<string name="pref_isolate_dest_summary">Erabili zirkuitu desberdin bat helbide helburu bakoitzeko</string>
- <string name="no_transproxy_warning_short">ABISUA: Proxy gardenak ez du euskarria jada</string>
- <string name="no_transproxy_warning">ABISUA: Proxy gardenak ez du euskarria jada. Erabili Orbot aplikazioen VPN-a ordez.</string>
<string name="pref_connection_padding">Konexioaren betegarria</string>
<string name="pref_connection_padding_summary">Beti gaitzen du konexioaren betegarria trafikoaren azterketa motza batzuetaz babesteko. Lehenetsita: automatikoa</string>
<string name="pref_reduced_connection_padding">Konexioaren betegarria gutxitua</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Konektatu zuzenean Tor sarera (Onena)</string>
<string name="bridge_community">Konektatu komunitatearen zerbitzarietatik</string>
<string name="bridge_cloud">Konektatu hodeiko zerbitzarietatik</string>
- <string name="bridges_get_new">Eskatu zubi berriak... (Beste guztiak huts egiten badu)</string>
<string name="trouble_connecting">Arazoak konektatzeko?</string>
<string name="full_device_vpn">Gailu osoaren VPN-a</string>
<string name="vpn_disabled">VPN-a desgaituta</string>
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index 38f73587..be3a6e26 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">متصل به شبکه تور</string>
<string name="status_disabled">اربوت غیرفعال شده است.</string>
<string name="status_shutting_down">سرویس تور در حال خاموش شدن است</string>
- <string name="tor_process_starting">شروع کلاینت تور...</string>
- <string name="tor_process_complete">تمام.</string>
- <string name="menu_settings">تنظیمات</string>
+ <string name="menu_settings">تنظیمات</string>
<string name="menu_log">ورود</string>
<string name="menu_start">آغاز</string>
<string name="menu_stop">ایست</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">نمایش اطلاع رسانی گسترده با کشور خروجی Tor و IP</string>
<string name="pref_use_expanded_notifications_title">اطلاعیه گسترده</string>
<string name="set_locale_title">زبان</string>
- <string name="no_internet_connection_tor">ارتباط اینترنتی وجود ندارد; تور آماده کار است... </string>
- <string name="pref_disable_network_title">خاموش کردن در صورت عدم وجود شبکه</string>
+ <string name="pref_disable_network_title">خاموش کردن در صورت عدم وجود شبکه</string>
<string name="pref_disable_network_summary">در صورتی که شبکه وجود نداشته باشد خاموش شود</string>
<string name="newnym">شما به شناسه جدید تور منتقل شدید</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">ارتباط شبکه ای وجود ندارد. تور به حالت خواب می رود</string>
- <string name="network_connectivity_is_good_waking_tor_up_">ارتباط شبکه ای خوب است. تور را بیدار نمایید...</string>
<string name="updating_settings_in_tor_service">به روز رسانی تنظیمات در سرویس Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">پورتی که تور ارائه می دهد SOCKS proxy روی (پیش فرض: 9050 یا 0 برای غیرفعال کردن)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">برای فعال کردن تغییرات لطفا Orbot را راه اندازی مجدد کنید</string>
<string name="menu_qr">کدهای QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">اگر شبکه همراهتان به صورت مرتب تور را مسدود میکند، میتوانید از یک «کارساز پل» به عنوان راهی جایگزین برای ورود استفاده کنید. برای پیکربندی و تست، یکی از گزینهها را انتخاب کنید…</string>
- <string name="bridge_mode">حالت Bridges</string>
<string name="get_bridges_email">ایمیل</string>
- <string name="get_bridges_web">وب</string>
<string name="activate">فعال</string>
<string name="apps_mode">حالت VPN</string>
<string name="send_email">ایمیل بفرست</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">می توانید آدرس bridge را از طریق ایمیل٬ وب یا با اسکن کردن bridge QR code بدست آورید. ایمیل یا وب پایین را برای درخواست آدرس bridge انتخاب کنید.\n\n وقتی آدرس را دارید آن را کپی کنید و برگردانید در اولویت های Bridges در تنظیمات اربت و آن را دوباره راه اندازی کنید.</string>
- <string name="vpn_default_world">جهانی (خودکار)</string>
+ <string name="vpn_default_world">جهانی (خودکار)</string>
<string name="hidden_services">سرویسهای مخفی</string>
<string name="title_activity_hidden_services">سرویسهای مخفی</string>
<string name="menu_hidden_services">سرویسهای مخفی</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">فعال کردن بهینهسازی باتری را مدنظر قرار دهید</string>
<string name="pref_isolate_dest">آدرسهای مقصد را مجزا کن</string>
<string name="pref_isolate_dest_summary">برای هر آدرس مقصد از مداری متفاوت استفاده کن</string>
- <string name="no_transproxy_warning_short">هشدار: پراکسی کردن شفاف دیگر پشتیبانی نمیشود</string>
- <string name="no_transproxy_warning">هشدار: پراکسی کردن شفاف پشتیبانی نمیشود. از Orbot Apps VPN استفاده کنید.</string>
<string name="pref_connection_padding">پهنای ارتباط</string>
<string name="pref_connection_padding_summary">همیشه لایهگذاری ارتباط را فعال میکند تا با برخی از حالتهای تحلیل ترافیک مقابله کند. پیشفرض: خودکار</string>
<string name="pref_reduced_connection_padding">پنهای ارتباط کاهش پیدا کرد</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">اتصال مستقیم به تور (بهترین عملکرد)</string>
<string name="bridge_community">اتصال از طریق سرورهای جامعه</string>
<string name="bridge_cloud">اتصال از طریق سرورهای ابری</string>
- <string name="bridges_get_new">درخواست پلهای ارتباطی جدید... (اگر تمامی روشهای دیگر کار نکردند)</string>
<string name="trouble_connecting">در اتصال مشکل دارید؟</string>
<string name="full_device_vpn">VPN برای تمام دستگاه</string>
<string name="vpn_disabled">VPN غیر فعال شد</string>
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 53c47265..5138ff60 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Yhdistetty Tor-verkkoon</string>
<string name="status_disabled">Orbot on poistettu käytöstä</string>
<string name="status_shutting_down">Tor-palvelua sammutetaan</string>
- <string name="tor_process_starting">Käynnistetään Tor-ohjelmaa...</string>
- <string name="tor_process_complete">valmis.</string>
<string name="menu_settings">Asetukset</string>
<string name="menu_log">Loki</string>
<string name="menu_start">Aloita</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Näytä laajennettu ilmoitus (Torin ulostulon maa ja IP)</string>
<string name="pref_use_expanded_notifications_title">Laajennetut ilmoitukset</string>
<string name="set_locale_title">Kieli</string>
- <string name="no_internet_connection_tor">Ei internet-yhteyttä; Tor on valmiustilassa...</string>
<string name="pref_disable_network_title">Ei verkon automaattilepotilaa</string>
<string name="pref_disable_network_summary">Laita Tor nukkumaan, kun internet-yhteyttä ei ole saatavilla</string>
<string name="newnym">Vaihdoit Tor-identiteettisi uuteen!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Ei verkkoyhteyttä. Tor siirtyy valmiustilaan...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Verkkoyhteys toimii. Herätetään Tor...</string>
<string name="updating_settings_in_tor_service">päivitetään Tor-palvelun asetuksia</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Portti, jossa Torin SOCKS-välityspalvelin on (oletus: 9050, 0 = poista käytöstä)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Sillat päivitetty</string>
<string name="restart_orbot_to_use_this_bridge_">Käynnistä Orbot uudelleen ottaaksesi muutokset käyttöön</string>
<string name="menu_qr">QR-koodit</string>
- <string name="bridge_mode">Siltatila</string>
<string name="get_bridges_email">Sähköposti</string>
- <string name="get_bridges_web">Verkkosivu</string>
<string name="activate">Ota käyttöön</string>
<string name="send_email">Lähetä sähköpostia</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Voit saada sillan osoitteen sähköpostin kautta, verkkosivulta tai skannaamalla sillan QR-koodin. Valitse \'Sähköposti\' tai \'Verkkosivu\' alta pyytääksesi sillan osoitetta.\n\nKun sinulla on osoite, kopioi & liitä se \"Sillat\" -kohtaan Orbotin asetuksissa ja käynnistä uudelleen.</string>
- <string name="hidden_services">Piilopalvelut</string>
+ <string name="hidden_services">Piilopalvelut</string>
<string name="title_activity_hidden_services">Piilopalvelut</string>
<string name="menu_hidden_services">Piilopalvelut</string>
<string name="save">Tallenna</string>
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index ec082972..f454d840 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Connecté au réseau Tor</string>
<string name="status_disabled">Orbot est désactivé</string>
<string name="status_shutting_down">TorService est en cours d’extinction</string>
- <string name="tor_process_starting">Démarrage du client Tor...</string>
- <string name="tor_process_complete">terminé.</string>
- <string name="menu_settings">Paramètres</string>
+ <string name="menu_settings">Paramètres</string>
<string name="menu_log">Journal</string>
<string name="menu_start">Démarrer</string>
<string name="menu_stop">Arrêter</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Montrer des notifications étendues avec le pays de sortie de Tor et l’IP</string>
<string name="pref_use_expanded_notifications_title">Notifications étendues</string>
<string name="set_locale_title">Langue</string>
- <string name="no_internet_connection_tor">Pas de connexion Internet ; Tor est en attente...</string>
- <string name="pref_disable_network_title">Pas de mise en veille automatique du réseau</string>
+ <string name="pref_disable_network_title">Pas de mise en veille automatique du réseau</string>
<string name="pref_disable_network_summary">Mettre Tor en veille quand aucune connexion Internet n’est disponible</string>
<string name="newnym">Vous avez basculé vers une nouvelle identité Tor !</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Pas de connectivité réseau. Mise au repos de Tor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">La connectivité réseau est bonne. Réveil de Tor...</string>
<string name="updating_settings_in_tor_service">mise à jour des paramètres dans le service Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_socks_summary">Port sur lequel Tor offre son mandataire SOCKS (par défaut : 9050 ou 0 pour le désactiver)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Ponts mis à jour</string>
<string name="restart_orbot_to_use_this_bridge_">Veuillez redémarrer Orbot pour activer les changements</string>
<string name="menu_qr">Codes QR</string>
- <string name="bridge_mode">Mode pont</string>
<string name="get_bridges_email">Courriel</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activer</string>
<string name="send_email">Envoyer un courriel</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Vous pouvez obtenir une adresse de pont par courriel, par le Web ou en balayant le code QR d’un pont. Choisissez *Courriel* ou *Web* ci-dessous pour demander une adresse de pont.\n\nUne fois que vous avez une adresse, copiez & collez-la dans le champ « Ponts » des paramètres d’Orbot et redémarrez.</string>
- <string name="save">Enregistrer</string>
+ <string name="save">Enregistrer</string>
<string name="name">Name</string>
<string name="please_restart_Orbot_to_enable_the_changes">Veuillez redémarrer Orbot pour activer les changements</string>
</resources>
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 1ce6f027..6af6bd4f 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Connecté au réseau Tor</string>
<string name="status_disabled">Orbot est désactivé</string>
<string name="status_shutting_down">TorService est en cours d’extinction</string>
- <string name="tor_process_starting">Démarrage du client Tor...</string>
- <string name="tor_process_complete">terminé.</string>
- <string name="menu_settings">Paramètres</string>
+ <string name="menu_settings">Paramètres</string>
<string name="menu_log">Journal</string>
<string name="menu_start">Démarrer</string>
<string name="menu_stop">Arrêter</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Montrer des notifications étendues avec le pays de sortie de Tor et l’IP</string>
<string name="pref_use_expanded_notifications_title">Notifications étendues</string>
<string name="set_locale_title">Langue</string>
- <string name="no_internet_connection_tor">Pas de connexion Internet ; Tor est en attente...</string>
- <string name="pref_disable_network_title">Pas de mise en veille automatique du réseau</string>
+ <string name="pref_disable_network_title">Pas de mise en veille automatique du réseau</string>
<string name="pref_disable_network_summary">Mettre Tor en veille quand aucune connexion Internet n’est disponible</string>
<string name="newnym">Vous avez basculé vers une nouvelle identité Tor !</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Pas de connectivité réseau. Mise au repos de Tor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">La connectivité réseau est bonne. Réveil de Tor...</string>
<string name="updating_settings_in_tor_service">mise à jour des paramètres dans le service Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_socks_summary">Port sur lequel Tor offre son mandataire SOCKS (par défaut : 9050 ou 0 pour le désactiver)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Veuillez redémarrer Orbot pour activer les changements</string>
<string name="menu_qr">Codes QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Si votre réseau mobile bloque Tor activement, vous pouvez utiliser un serveur-pont comme moyen de remplacement. CHOISIR une des options pour configurer et tester…</string>
- <string name="bridge_mode">Mode pont</string>
<string name="get_bridges_email">Courriel</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activer</string>
<string name="apps_mode">Mode RPV</string>
<string name="send_email">Envoyer un courriel</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Vous pouvez obtenir une adresse de pont par courriel, par le Web ou en balayant le code QR d’un pont. Choisissez *Courriel* ou *Web* ci-dessous pour demander une adresse de pont.\n\nUne fois que vous avez une adresse, copiez & collez-la dans le champ « Ponts » des paramètres d’Orbot et redémarrez.</string>
- <string name="vpn_default_world">Mondial (Auto)</string>
+ <string name="vpn_default_world">Mondial (Auto)</string>
<string name="hidden_services">Services cachés</string>
<string name="title_activity_hidden_services">Services cachés</string>
<string name="menu_hidden_services">Services cachés</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Envisagez d’activer les optimisations de la pile</string>
<string name="pref_isolate_dest">Isoler les adresses de destination</string>
<string name="pref_isolate_dest_summary">Utiliser un circuit différent pour chaque adresse de destination</string>
- <string name="no_transproxy_warning_short">AVERTISSEMENT : le transrelais n’est plus pris en charge</string>
- <string name="no_transproxy_warning">AVERTISSEMENT : le relais transparent n’est plus pris en charge. Utiliser plutôt le RPV pour applis d’Orbot.</string>
<string name="pref_connection_padding">Bourrage de la connexion</string>
<string name="pref_connection_padding_summary">Toujours activer le bourrage de la connexion pour se défendre contre certaines formes d’analyse du trafic. Par défaut de : auto</string>
<string name="pref_reduced_connection_padding">Bourrage réduit de la connexion</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Se connecter directement à Tor (le mieux)</string>
<string name="bridge_community">Se connecter par des serveurs communautaires</string>
<string name="bridge_cloud">Se connecter par des serveurs nuagiques</string>
- <string name="bridges_get_new">Demander de nouveaux ponts… (si tout échoue)</string>
<string name="trouble_connecting">Des problèmes de connexion ?</string>
<string name="full_device_vpn">RPV de l’appareil entier</string>
<string name="vpn_disabled">Le RPV est désactivé</string>
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index 05117f1c..327a9c50 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Conectado á rede Tor</string>
<string name="status_disabled">Orbot está desactivado</string>
<string name="status_shutting_down">O ServizoTor estase pechando</string>
- <string name="tor_process_starting">Iniciando cliente Tor...</string>
- <string name="tor_process_complete">completado.</string>
- <string name="menu_settings">Axustes</string>
+ <string name="menu_settings">Axustes</string>
<string name="menu_log">Rexistro (log)</string>
<string name="menu_start">Iniciar</string>
<string name="menu_stop">Deter</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Mostar notificación extendida co país de saída de Tor e IP</string>
<string name="pref_use_expanded_notifications_title">Notificacións extendidas</string>
<string name="set_locale_title">Idioma</string>
- <string name="no_internet_connection_tor">Sen conexión a internet; Tor está a espera...</string>
- <string name="pref_disable_network_title">Auto-Parado Sen Rede</string>
+ <string name="pref_disable_network_title">Auto-Parado Sen Rede</string>
<string name="pref_disable_network_summary">Parar Tor cando non hai conexión a internet</string>
<string name="newnym">Cambiou a unha nova identidade Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Sen conexión a rede. Tor agardando...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">A conexión a rede é boa. Espertando a Tor...</string>
<string name="updating_settings_in_tor_service">actualizando axustes no servizo Tor</string>
<string name="pref_socks_title">SOCKS de Tor</string>
<string name="pref_socks_summary">Porto no que Tor ofrece o seu proxy SOCKS (por omisión: 9050 ou 0 para desactivar)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Por favor, reinicie Orbot para activar os cambios</string>
<string name="menu_qr">Códigod QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Si a súa rede móbil bloquea Tor de xeito activo, pode utilizar un \'Servidor Ponte\' como modo alternativo. ESCOLL unha das opcións para configurar e probar...</string>
- <string name="bridge_mode">Modo Ponte</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activar</string>
<string name="apps_mode">Modo VPN</string>
<string name="send_email">Enviar correo</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Pode obter un enderezo de ponte a través de correo electrónico, na web ou escaneando o código QR de unha ponte. Escolla abaixo \'Correo-e\' ou \'Web\' para solicitar un enderezo de ponte.\n\nUnha vez teña un enderezo, cópieo e pégueo no axuste \"Pontes\" na configuración de Orbot e reinicie.</string>
- <string name="vpn_default_world">Global (Auto)</string>
+ <string name="vpn_default_world">Global (Auto)</string>
<string name="hidden_services">Servizos agochados</string>
<string name="title_activity_hidden_services">Servizos agochados</string>
<string name="menu_hidden_services">Servizos agochados</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Considere activar as optimizacións da batería</string>
<string name="pref_isolate_dest">Illar enderezos de destino</string>
<string name="pref_isolate_dest_summary">Utilizar un circuito diferente para cada enderezo de destino</string>
- <string name="no_transproxy_warning_short">AVISO: xa non está soportado o Proxy Transparente</string>
- <string name="no_transproxy_warning">AVISO: o Proxy Transparente non está soportado. Utilice Orbot VPN Apps no seu lugar.</string>
<string name="pref_connection_padding">Espazado da conexión</string>
<string name="pref_connection_padding_summary">Activar sempre un espazado na conexión para defenderse contra algúns tipos de análise de tráfico. Por omisión: auto</string>
<string name="pref_reduced_connection_padding">Espazado limitado da conexión</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Conectar directamente con Tor (preferido)</string>
<string name="bridge_community">Conectar a través de servidores da comunidade</string>
<string name="bridge_cloud">Conectar a través de servidores na nube</string>
- <string name="bridges_get_new">Solicitar Novas Pontes... (si todo o anterior falla)</string>
<string name="trouble_connecting">Problemas ao conectar?</string>
<string name="full_device_vpn">VPN para todo o dispositivo</string>
<string name="vpn_disabled">VPN desactivada</string>
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 6a1bf666..9ea570c6 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">מחובר לרשת Tor</string>
<string name="status_disabled">Orbot כבוי</string>
<string name="status_shutting_down">שירות Tor מתכבה</string>
- <string name="tor_process_starting">מתחיל לקוח Tor...</string>
- <string name="tor_process_complete">הושלם.</string>
- <string name="menu_settings">הגדרות</string>
+ <string name="menu_settings">הגדרות</string>
<string name="menu_log">יומן</string>
<string name="menu_start">התחל</string>
<string name="menu_stop">עצור</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">הראה התראה מורחבת עם מדינת יציאה ו-IP יציאה של Tor</string>
<string name="pref_use_expanded_notifications_title">התראות מורחבות</string>
<string name="set_locale_title">שפה</string>
- <string name="no_internet_connection_tor">אין חיבור לאינטרנט; תור ממתין...</string>
- <string name="pref_disable_network_title">אין שינה אוטומטית של רשת</string>
+ <string name="pref_disable_network_title">אין שינה אוטומטית של רשת</string>
<string name="pref_disable_network_summary">כבה את Tor כאשר אין חיבור לאינטרנט</string>
<string name="newnym">החלפת אל זהות Tor חדשה!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">אין חיבור לרשת. מכבה את Tor....</string>
- <string name="network_connectivity_is_good_waking_tor_up_">החיבור עובד טוב. מעיר את Tor...</string>
<string name="updating_settings_in_tor_service">מעדכן הגדרות Tor במכשיר</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">פתחה אשר Tor מציע את יפוי־הכוח SOCKS שלו עליה (ברירת מחדל: 9050 או 0 כדי להשבית)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">אנא הפעל מחדש את Orbot כדי לאפשר את השינויים</string>
<string name="menu_qr">קודי QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">אם פעילות הרשת הניידת שלך חוסמת את Tor, אתה יכול להשתמש ב\'שרת גשר\' כדרך חלופית להיכנס. בחר אחת מאפשרויות כדי להגדיר ולבחון...</string>
- <string name="bridge_mode">מצב גשר</string>
<string name="get_bridges_email">דוא\"ל</string>
- <string name="get_bridges_web">אתר</string>
<string name="activate">הפעל</string>
<string name="apps_mode">מצב VPN</string>
<string name="send_email">שלח דוא\"ל</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">אתה יכול להשיג כתובת גשר באמצעות דוא\"ל, הרשת או ע\"י סריקת קוד QR של גשר. בחר \'דוא\"ל\' או \'רשת\' למטה כדי לבקש כתובת גשר.\n\nברגע שיש לך כתובת, העתק והדבק אותה לתוך ההעדפה \"גשרים\" בהגדרות Orbot והפעל מחדש.</string>
- <string name="vpn_default_world">עולמי (אוטומטי)</string>
+ <string name="vpn_default_world">עולמי (אוטומטי)</string>
<string name="hidden_services">שירותים נסתרים</string>
<string name="title_activity_hidden_services">שירותים נסתרים</string>
<string name="menu_hidden_services">שירותים נסתרים</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">שקול לאפשר מיטובי סוללה</string>
<string name="pref_isolate_dest">בודד כתובות יעד</string>
<string name="pref_isolate_dest_summary">השתמש במעגל שונה לכל כתובת יעד</string>
- <string name="no_transproxy_warning_short">אזהרה: יפוי־כוח שקוף אינו נתמך יותר</string>
- <string name="no_transproxy_warning">אזהרה: יפוי־כוח שקוף אינו נתמך. השתמש ב-VPN של Orbot במקום.</string>
<string name="pref_connection_padding">ריפוד חיבור</string>
<string name="pref_connection_padding_summary">אפשר תמיד ריפוד חיבור כדי להגן מפני צורות מסוימות של ניתוח תעבורה. ברירת מחדל: אוטומטי</string>
<string name="pref_reduced_connection_padding">הופחת ריפוד חיבור</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">התחבר ישירות אל Tor (הכי טוב)</string>
<string name="bridge_community">התחבר באמצעות שרתי קהילה</string>
<string name="bridge_cloud">התחבר באמצעות שרתי ענן</string>
- <string name="bridges_get_new">בקש גשרים חדשים... (אם כל השאר נכשל)</string>
<string name="trouble_connecting">בעית התחברות?</string>
<string name="full_device_vpn">VPN מכשיר מלא</string>
<string name="vpn_disabled">VPN מושבת</string>
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index 33b4890b..4070859f 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -7,9 +7,7 @@
<string name="status_activated">तोर नेटवर्क से जुड़ा </string>
<string name="status_disabled">औरबोट निष्क्रिय है</string>
<string name="status_shutting_down">तोर सर्विस बंध हो रहा हे </string>
- <string name="tor_process_starting">तोर क्लाइंट शुरू हो रहा हे </string>
- <string name="tor_process_complete">पूर्ण</string>
- <string name="menu_settings">सेटिंग्स</string>
+ <string name="menu_settings">सेटिंग्स</string>
<string name="menu_log">यात्रा दैनिकी</string>
<string name="menu_start">प्रारंभ</string>
<string name="menu_stop">विराम</string>
@@ -108,12 +106,9 @@
<string name="pref_use_expanded_notifications">तोर एग्जिट देश और आईपी के साथ विस्तारित सूचना दिखाएं</string>
<string name="pref_use_expanded_notifications_title">विस्तारित सूचनाएं</string>
<string name="set_locale_title">भाषा</string>
- <string name="no_internet_connection_tor">कोई इंटरनेट कनेक्शन नहीं; तोर स्टैंडबाय पर है ...</string>
- <string name="pref_disable_network_title">कोई नेटवर्क ऑटो-स्लीप नहीं</string>
+ <string name="pref_disable_network_title">कोई नेटवर्क ऑटो-स्लीप नहीं</string>
<string name="pref_disable_network_summary">जब कोई इंटरनेट उपलब्ध नहीं है तो तोर को सोएं</string>
<string name="newnym">आपने एक नई टोरी पहचान को बदल दिया है!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">कोई नेटवर्क कनेक्टिविटी नहीं टो को सोने के लिए डालना ...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">नेटवर्क कनेक्टिविटी अच्छा है जागो टॉर अप ...</string>
<string name="updating_settings_in_tor_service">टॉर सेवा में सेटिंग अपडेट करना</string>
<string name="pref_socks_title">टॉर सॉक्स</string>
<string name="pref_socks_summary">पोर्ट उस टो पर अपनी सॉक्स प्रॉक्सी प्रदान करता है (डिफ़ॉल्ट: 9050 या अक्षम करने के लिए 0)</string>
@@ -135,14 +130,11 @@
<string name="restart_orbot_to_use_this_bridge_">परिवर्तन सक्षम करने के लिए Orbot पुनः प्रारंभ करें</string>
<string name="menu_qr">QR कोड</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">यदि आपका मोबाइल नेटवर्क सक्रिय रूप से टो को ब्लॉक करता है, तो आप \'पुल सर्वर\' को एक वैकल्पिक तरीके से उपयोग कर सकते हैं। कॉन्फ़िगर और परीक्षण करने के लिए विकल्पों में से एक का चयन करें ..,।</string>
- <string name="bridge_mode">ब्रिज मोड</string>
<string name="get_bridges_email">ईमेल</string>
- <string name="get_bridges_web">वेब</string>
<string name="activate">सक्रिय</string>
<string name="apps_mode">वीपीएन मोड</string>
<string name="send_email">ईमेल भेजें</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">आप ईमेल, वेब के माध्यम से या एक पुल क्यूआर कोड को स्कैन करके एक पुल का पता मिल सकती है। एक पुल का पता अनुरोध करने के लिए \'ईमेल\' या \'वेब\' नीचे का चयन करें। एक बार जब आप एक पता है, कॉपी और यह Orbot की सेटिंग और पुनः आरंभ में \"पुल\" वरीयता में पेस्ट करें।</string>
- <string name="vpn_default_world">ग्लोबल (ऑटो)</string>
+ <string name="vpn_default_world">ग्लोबल (ऑटो)</string>
<string name="hidden_services">हिडन सेवाएं</string>
<string name="title_activity_hidden_services">हिडन सेवाएं</string>
<string name="menu_hidden_services">हिडन सेवाएं</string>
@@ -186,8 +178,6 @@
<string name="consider_enable_battery_optimizations">बैटरी ऑप्टिमाइज़ेशन को सक्षम करने पर विचार करें</string>
<string name="pref_isolate_dest">गंतव्य पते अलग करें</string>
<string name="pref_isolate_dest_summary">प्रत्येक गंतव्य पते के लिए एक अलग सर्किट का उपयोग करें</string>
- <string name="no_transproxy_warning_short">चेतावनी: ट्रांसप्रॉक्सिंग अब समर्थित नहीं है</string>
- <string name="no_transproxy_warning">चेतावनी: पारदर्शी प्रॉक्सीिंग समर्थित नहीं है। Orbot Apps VPN का उपयोग इसके बजाय</string>
<string name="pref_connection_padding">कनेक्शन पैडिंग</string>
<string name="pref_connection_padding_summary">ट्रैफिक विश्लेषण के कुछ रूपों से बचाव के लिए हमेशा कनेक्शन पैडिंग सक्षम करता है। डिफ़ॉल्ट: ऑटो</string>
<string name="pref_reduced_connection_padding">कम कनेक्शन पैडिंग</string>
@@ -199,7 +189,6 @@
<string name="bridge_direct_connect">सीधे टॉर से कनेक्ट करें (सर्वश्रेष्ठ)</string>
<string name="bridge_community">सामुदायिक सर्वर के माध्यम से कनेक्ट करें</string>
<string name="bridge_cloud">क्लाउड सर्वर से जुड़ें</string>
- <string name="bridges_get_new">नई ब्रिज का अनुरोध ... (यदि सब कुछ विफल रहता है)</string>
<string name="trouble_connecting">कनेक्ट करने में समस्या?</string>
<string name="full_device_vpn">पूर्ण डिवाइस VPN</string>
<string name="vpn_disabled">वीपीएन अक्षम किया गया</string>
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index deb23402..74041b1f 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Spojen na Tor mrežu</string>
<string name="status_disabled">Orbot je deaktiviran</string>
<string name="status_shutting_down">TorService se gasi</string>
- <string name="tor_process_starting">Pokrećem Tor klijent...</string>
- <string name="tor_process_complete">gotovo.</string>
<string name="menu_settings">Postavke</string>
<string name="menu_log">Dnevnik</string>
<string name="menu_start">Početak</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Prikaži proširene obavijesti s Tor izlaznom državom i IP-em</string>
<string name="pref_use_expanded_notifications_title">Proširene obavijesti</string>
<string name="set_locale_title">Jezik</string>
- <string name="no_internet_connection_tor">Nema internet veze; Tor je u stanju pripravnosti...</string>
<string name="pref_disable_network_title">Nema mrežnog auto-spavanja</string>
<string name="pref_disable_network_summary">Stavi Tor na spavanje kad internet nije dostupan</string>
<string name="newnym">Prebacili ste se na nov Tor identitet!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nema mrežne povezivosti. Stavljam Tor na spavanje...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Mrežan povezanost je dobra. Budim Tor...</string>
<string name="updating_settings_in_tor_service">ažuriram postavke u Tor usluzi</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Port na kojem Tor pruža svoj SOCKS proxy (zadano: 9050, 0 za onemogućavanje)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Mostova ažurirano</string>
<string name="restart_orbot_to_use_this_bridge_">Ponovno pokrenite Orbot da bi omogućili promjene</string>
<string name="menu_qr">QR kodovi</string>
- <string name="bridge_mode">Način rada Most</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Aktiviraj</string>
<string name="send_email">Pošalji email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Možete dobiti adrese mostova kroz email, web ili skeniranjem QR koda. Odaberite \'Email\' ili \'Web\' niže da zatražite adresu mosta.\n\nJednom kad imate adresu, kopirajte i zalijepite ju u \"Mostovi\" postavku Orbot-a i ponovno ga pokrenite.</string>
- <string name="save">Spremi</string>
+ <string name="save">Spremi</string>
<string name="name">Ime</string>
<string name="please_restart_Orbot_to_enable_the_changes">Ponovno pokrenite Orbot da bi omogućili promjene</string>
</resources>
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 81810e42..1f187b2e 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Csatlakozva a Tor hálózathoz</string>
<string name="status_disabled">Az Orbot deaktiválva</string>
<string name="status_shutting_down">A TorService leáll</string>
- <string name="tor_process_starting">A Tor kliens indítása...</string>
- <string name="tor_process_complete">kész.</string>
- <string name="menu_settings">Beállítások</string>
+ <string name="menu_settings">Beállítások</string>
<string name="menu_log">Log</string>
<string name="menu_start">Indítás</string>
<string name="menu_stop">Leállítás</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Mutassa a bővített értesítést a Tor kilépő országgal és IP-vel</string>
<string name="pref_use_expanded_notifications_title">Bővített értesítések</string>
<string name="set_locale_title">Nyelv</string>
- <string name="no_internet_connection_tor">Nincs internetkapcsolat; Tor készenlétben...</string>
- <string name="pref_disable_network_title">Nincs hálózati auto-alvás</string>
+ <string name="pref_disable_network_title">Nincs hálózati auto-alvás</string>
<string name="pref_disable_network_summary">A Tor alvó módba helyezése, ha internet nem elérhető</string>
<string name="newnym">Új Tor identitásra váltottál!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nincs hálózati kapcsolat. Tor alvó állapotba helyezése...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">A hálózati kapcsolat jó. Tor felébresztése...</string>
<string name="updating_settings_in_tor_service">a Tor szolgáltatás beállításainak frissítése</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Port amelyen a Tor a SOCKS proxyt biztosítja (alapértelmezett: 9050 vagy 0 a tiltáshoz)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Kérlek indítsd újra az Orbot-ot a változások engedélyezéséhez</string>
<string name="menu_qr">QR kódok</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Ha a mobil hálózata aktívan blokkolja a Tor-t, akkor választhatja a \'Híd szerver\'-t, mint alternatív utat. VÁLASSZON egyet a lehetőségek közül és tesztelje....</string>
- <string name="bridge_mode">Híd mód</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Aktiválás</string>
<string name="apps_mode">VPN Mód</string>
<string name="send_email">Email küldése</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Kaphatsz egy híd-címet emailen, weben keresztül vagy a híd QR kódjának beszkennelésével. Válaszd az \'Email\'-t vagy a \'Web\'-et alább a híd-cím kéréséhez.\n\nAmikor már van egy címed, másold & illeszd be \"Hidak\" preferenciákba az Orbot beállításaiban és indítsd újra.</string>
- <string name="vpn_default_world">Globális (Auto)</string>
+ <string name="vpn_default_world">Globális (Auto)</string>
<string name="hidden_services">Rejtett szolgáltatások</string>
<string name="title_activity_hidden_services">Rejtett szolgáltatások</string>
<string name="menu_hidden_services">Rejtett szolgáltatások</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Vegye fontolóra az akkumulátor optimalizálás engedélyezését</string>
<string name="pref_isolate_dest">Célcím elszigetelése</string>
<string name="pref_isolate_dest_summary">Másik áramkör használata minden célcímhez</string>
- <string name="no_transproxy_warning_short">FIGYELEM: A Transproxying már nem támogatott</string>
- <string name="no_transproxy_warning">FIGYELEM: A transzparens proxyzásmár nem támogatott. Használja az Orbot App VPN-t helyette.</string>
<string name="pref_connection_padding">Kapcsolat kitöltés</string>
<string name="pref_connection_padding_summary">Mindig engedélyezi a kapcsolat kitöltést, hogy megvédjen a hálózati analízistől. Alapértelmezés: auto </string>
<string name="pref_reduced_connection_padding">Csökkentett kapcsolat kitöltés</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Csatlakozás közvetlenül a Tor-hoz (Legjobb)</string>
<string name="bridge_community">Csatlakozás közösségi szervereken keresztül</string>
<string name="bridge_cloud">Csatlakozás felhőszervereken keresztül</string>
- <string name="bridges_get_new">Új hidak kérése... (ha más nem segített)</string>
<string name="trouble_connecting">Probléma a csatlakozással?</string>
<string name="full_device_vpn">Teljes Készülék VPN</string>
<string name="vpn_disabled">VPN Letiltva</string>
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml
index 7dda908a..4768ecd5 100644
--- a/app/src/main/res/values-id/strings.xml
+++ b/app/src/main/res/values-id/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Tersambung ke Jaringan Tor</string>
<string name="status_disabled">Orbot telah dibatalkan</string>
<string name="status_shutting_down">TorService dimatikan</string>
- <string name="tor_process_starting">Memulai klien Tor...</string>
- <string name="tor_process_complete">selesai.</string>
- <string name="menu_settings">Pengaturan</string>
+ <string name="menu_settings">Pengaturan</string>
<string name="menu_log">Log</string>
<string name="menu_start">Mulai</string>
<string name="menu_stop">Berhenti</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Tampilkan notifikasi melebar dengan negara dan IP keluar Tor</string>
<string name="pref_use_expanded_notifications_title">Notifikasi Melebar</string>
<string name="set_locale_title">Bahasa</string>
- <string name="no_internet_connection_tor">Tidak ada koneksi internet; Tor sedang standby...</string>
- <string name="pref_disable_network_title">Auto-Tidur Tidak Ada Jaringan</string>
+ <string name="pref_disable_network_title">Auto-Tidur Tidak Ada Jaringan</string>
<string name="pref_disable_network_summary">Menempatkan Tor untuk tidur ketika tidak ada internet yang tersedia</string>
<string name="newnym">Anda telah beralih ke identitas Tor baru!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Tidak ada jaringan terhubung. Menidurkan Tor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Jaringan terhubung baik. Memanggil Tor...</string>
<string name="updating_settings_in_tor_service">memperbarui setting pada layanan Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_socks_summary">Port tempat proxy SOCKS Tor aktif (standar: 9050 atau 0 untuk mematikan)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Bridge Telah Diperbarui</string>
<string name="restart_orbot_to_use_this_bridge_">Silakan start ulang Orbot untuk mengaktifkan perubahan</string>
<string name="menu_qr">Kode QR</string>
- <string name="bridge_mode">Mode Bridge</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Laman</string>
<string name="activate">Aktivasi</string>
<string name="send_email">Kirim Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Anda bisa mendapatkan alamat bridge melalui email, halaman web atau dengan memindai kode QR bridge tersebut. Pilih \'Email\' atau \'Laman\' di bawah untuk meminta alamat bridge. Setelah anda mendapatkannya, salin lalu tempel di pilihan \"Bridges\" pada setting Orbot lalu start ulang.</string>
- <string name="save">Simpan</string>
+ <string name="save">Simpan</string>
<string name="name">Nama</string>
<string name="done">Selesai!</string>
<string name="please_restart_Orbot_to_enable_the_changes">Silakan start ulang Orbot untuk mengaktifkan perubahan</string>
diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml
index 02e0ecd9..b9d02d2d 100644
--- a/app/src/main/res/values-in-rID/strings.xml
+++ b/app/src/main/res/values-in-rID/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Tersambung ke jaringan Tor</string>
<string name="status_disabled">Orbot telah dibatalkan</string>
<string name="status_shutting_down">TorService sedang dimatikan</string>
- <string name="tor_process_starting">Memulai klien Tor...</string>
- <string name="tor_process_complete">selesai.</string>
- <string name="menu_settings">Pengaturan</string>
+ <string name="menu_settings">Pengaturan</string>
<string name="menu_log">Log</string>
<string name="menu_start">Mulai</string>
<string name="menu_stop">Berhenti</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Tampilkan notifikasi melebar dengan negara dan IP keluar Tor</string>
<string name="pref_use_expanded_notifications_title">Notifikasi Melebar</string>
<string name="set_locale_title">Bahasa</string>
- <string name="no_internet_connection_tor">Tidak ada koneksi internet; Tor sedang standby...</string>
- <string name="pref_disable_network_title">Auto-Tidur Tidak Ada Jaringan</string>
+ <string name="pref_disable_network_title">Auto-Tidur Tidak Ada Jaringan</string>
<string name="pref_disable_network_summary">Menempatkan Tor untuk tidur ketika tidak ada internet yang tersedia</string>
<string name="newnym">Anda telah beralih ke identitas Tor baru!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Tidak ada jaringan terhubung. Menidurkan Tor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Jaringan terhubung baik. Memanggil Tor...</string>
<string name="updating_settings_in_tor_service">memperbarui setting pada layanan Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_socks_summary">Port tempat proxy SOCKS Tor aktif (standar: 9050 atau 0 untuk mematikan)</string>
@@ -128,11 +123,8 @@
<string name="bridges_updated">Bridge Telah Diperbarui</string>
<string name="restart_orbot_to_use_this_bridge_">Silakan start ulang Orbot untuk mengaktifkan perubahan</string>
<string name="menu_qr">Kode QR</string>
- <string name="bridge_mode">Mode Bridge</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Laman</string>
<string name="activate">Aktivasi</string>
<string name="send_email">Kirim Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Anda bisa mendapatkan alamat bridge melalui email, halaman web atau dengan memindai kode QR bridge tersebut. Pilih \'Email\' atau \'Laman\' di bawah untuk meminta alamat bridge. Setelah anda mendapatkannya, salin lalu tempel di pilihan \"Bridges\" pada setting Orbot lalu start ulang.</string>
- <string name="please_restart_Orbot_to_enable_the_changes">Silakan start ulang Orbot untuk mengaktifkan perubahan</string>
+ <string name="please_restart_Orbot_to_enable_the_changes">Silakan start ulang Orbot untuk mengaktifkan perubahan</string>
</resources>
diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml
index f208ee0d..f8889d45 100644
--- a/app/src/main/res/values-is/strings.xml
+++ b/app/src/main/res/values-is/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Tengdur við Tor netið</string>
<string name="status_disabled">Orbot er óvirkt</string>
<string name="status_shutting_down">TorService er að slökkva á sér</string>
- <string name="tor_process_starting">Kveiki á Tor notandaforriti...</string>
- <string name="tor_process_complete">lokið.</string>
- <string name="menu_settings">Stillingar</string>
+ <string name="menu_settings">Stillingar</string>
<string name="menu_log">Atvikaskráning</string>
<string name="menu_start">Ræsa</string>
<string name="menu_stop">Stöðva</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Birta útflettar tilkynningar varðandi Tor-útgangsland og IP-vistfang</string>
<string name="pref_use_expanded_notifications_title">Útflettar tilkynningar</string>
<string name="set_locale_title">Tungumál</string>
- <string name="no_internet_connection_tor">Engin tenging við netið; Tor er í biðstöðu...</string>
- <string name="pref_disable_network_title">Engin sjálfvirk svæfing netkerfis</string>
+ <string name="pref_disable_network_title">Engin sjálfvirk svæfing netkerfis</string>
<string name="pref_disable_network_summary">Svæfa Tor þegar engin internettenging er til staðar</string>
<string name="newnym">Þú ert komin með nýtt Tor-auðkenni!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Engin tenging við netið. Tor verður svæft...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Tenging við netið er góð. Tor verður vakið upp...</string>
<string name="updating_settings_in_tor_service">uppfæri stillingar í Tor þjónustu</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Gátt sem Tor býður SOCKS milliþjón á (sjálfgefið: 9050 eða 0 til að gera óvirkt)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Endurræstu Orbot til að breytingarnar taki gildi</string>
<string name="menu_qr">QR-kóðar</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Ef farsímanetið þitt er virkt í að loka á Tor, geturðu notað \'Brúarþjón\' sem varaleið inn. VELDU einn af valkostunum til að setja upp og prófa...</string>
- <string name="bridge_mode">Brúar-hamur</string>
<string name="get_bridges_email">Tölvupóstur</string>
- <string name="get_bridges_web">Vefur</string>
<string name="activate">Virkja</string>
<string name="apps_mode">VPN-hamur</string>
<string name="send_email">Senda tölvupóst</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Þú getur fengið vistfang brúar sent í gegnum tölvupóst, vefinn eða með að skanna QR-kóða fyrir brú. Veldu \'Tölvupóstur\' eða \'Vefur\' fyrir neðan til að óska eftir vistfangi brúar.\n\nÞegar þú kominn með vistfang, afritaðu & límdu það inn í stillingar fyrir \'Brýr\' í kjörstillingum Orbot og endurræstu síðan.</string>
- <string name="vpn_default_world">Víðvært (sjálfvirkt)</string>
+ <string name="vpn_default_world">Víðvært (sjálfvirkt)</string>
<string name="hidden_services">Faldar þjónustur</string>
<string name="title_activity_hidden_services">Faldar þjónustur</string>
<string name="menu_hidden_services">Faldar þjónustur</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Íhugaðu að virkja bestun fyrir rafhlöðu</string>
<string name="pref_isolate_dest">Einangra markvistfang</string>
<string name="pref_isolate_dest_summary">Nota mismunandi rás fyrir hvert markvistfang</string>
- <string name="no_transproxy_warning_short">AÐVÖRUN: Gegnsæ milliþjónabeining er ekki lengur studd.</string>
- <string name="no_transproxy_warning">AÐVÖRUN: Gegnsæ milliþjónabeining er ekki studd. Notaðu í staðinn VPN fyrir forrit í Orbot.</string>
<string name="pref_connection_padding">Bólstrun tengingar (padding)</string>
<string name="pref_connection_padding_summary">Virkjar alltaf bólstrun tengingar (padding) til varnar gegn ákveðnum gerðum umferðargreiningar. Sjálfgefið: sjálfvirkt</string>
<string name="pref_reduced_connection_padding">Minnkuð bólstrun tengingar (padding)</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Tengjast beint við Tor (best)</string>
<string name="bridge_community">Tengjast í gegnum þjóna meðlima</string>
<string name="bridge_cloud">Tengjast í gegnum þjóna í tölvuskýjum</string>
- <string name="bridges_get_new">Biðja um nýjar brýr... (ef allt annað bregst)</string>
<string name="trouble_connecting">Vandamál við tengingu?</string>
<string name="full_device_vpn">Fullt VPN á tækinu</string>
<string name="vpn_disabled">VPN óvirkt</string>
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 8e32851e..aedd1376 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Connesso alla rete Tor</string>
<string name="status_disabled">Orbot è disattivato</string>
<string name="status_shutting_down">TorService si sta spegnendo</string>
- <string name="tor_process_starting">Avvio client Tor...</string>
- <string name="tor_process_complete">completa.</string>
- <string name="menu_settings">Impostazioni</string>
+ <string name="menu_settings">Impostazioni</string>
<string name="menu_log">Log</string>
<string name="menu_start">Avvia</string>
<string name="menu_stop">Ferma</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Visualizza notifica espansa con nazione e ip dell\'nodo d\'uscita Tor</string>
<string name="pref_use_expanded_notifications_title">Espandi notifiche</string>
<string name="set_locale_title">Lingua</string>
- <string name="no_internet_connection_tor">Nessuna connessione ad internet; Tor è in standby...</string>
- <string name="pref_disable_network_title">impedire spegnimento automatico della rete</string>
+ <string name="pref_disable_network_title">impedire spegnimento automatico della rete</string>
<string name="pref_disable_network_summary">Stand-by di Tor quando non c\'è un collegamento a internet disponibile</string>
<string name="newnym">Sei passato a una nuova identità Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nessuna connettività di rete. Mettendo Tor a riposo...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Connettività di rete buona. Svegliando Tor...</string>
<string name="updating_settings_in_tor_service">aggiornamento impostazioni nel servizio Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Porta sulla quale Tor offre il proxy SOCKS (default: 9050 o 0 per disabilitare)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Per favore riavvia Orbot per rendere effettive le modifiche</string>
<string name="menu_qr">Codici QR</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Se la tua rete mobile blocca attivamente Tor, puoi usare un \'Server Bridge\' come via alternativa. SELEZIONA una delle opzioni per configurare e testare...</string>
- <string name="bridge_mode">Modalità Bridge</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Attiva</string>
<string name="apps_mode">Modalità VPN</string>
<string name="send_email">Invia email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Tu poi ricevere un indirizzo bridge via email, web o scansionando un codice QR. Seleziona \'Email\' o \'Web\' per richiedere un indirizzo bridge.\n\nUna volta che hai un indirizzo, copialo & incollalo nell\'opzione \"Bridges\" delle impostazioni di Orbot e riavvialo.</string>
- <string name="vpn_default_world">Globale (Auto)</string>
+ <string name="vpn_default_world">Globale (Auto)</string>
<string name="hidden_services">Servizi nascosti</string>
<string name="title_activity_hidden_services">Servizi nascosti</string>
<string name="menu_hidden_services">Servizi nascosti</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Considera l\'attivazione dell\'ottimizzazione della batteria</string>
<string name="pref_isolate_dest">Isola gli indirizzi di destinazione</string>
<string name="pref_isolate_dest_summary">Usa un circuito diverso per ogni indirizzo di destinazione</string>
- <string name="no_transproxy_warning_short">ATTENZIONE: Transproxying non più supportato</string>
- <string name="no_transproxy_warning">ATTENZIONE: proxy trasparenti non supportati. Usa la VPN App di Orbot piuttosto.</string>
<string name="pref_connection_padding">Connessione allungata (padding)</string>
<string name="pref_connection_padding_summary">Attiva sempre la \"connessione allungata\" per difesa contro alcune forme di analisi del traffico. Predefinito: auto</string>
<string name="pref_reduced_connection_padding">Connessione allungata ridotta</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Connettiti direttamente a Tor (Migliore)</string>
<string name="bridge_community">Connettiti tramite i server comunitari</string>
<string name="bridge_cloud">Connettiti tramite i server cloud</string>
- <string name="bridges_get_new">Richiedi nuovi bridge... (se gli altri falliscono)</string>
<string name="trouble_connecting">Problemi nel connetterti?</string>
<string name="full_device_vpn">VPN intero dispositivo</string>
<string name="vpn_disabled">VPN Disabilitata</string>
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index 5f5946ab..e8aa0c8b 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -5,9 +5,7 @@
<string name="status_starting_up">Orbot מתחיל…</string>
<string name="status_activated">מחובר לרשת Tor</string>
<string name="status_disabled">Orbot כבוי</string>
- <string name="tor_process_starting">מתחיל לקוח Tor...</string>
- <string name="tor_process_complete">הושלם.</string>
- <string name="menu_settings">הגדרות</string>
+ <string name="menu_settings">הגדרות</string>
<string name="menu_log">רישום</string>
<string name="menu_start">התחל</string>
<string name="menu_stop">עצור</string>
@@ -89,11 +87,8 @@
<string name="unable_to_start_tor">לא מסוגל להתחיל את Tor:</string>
<string name="pref_use_persistent_notifications">לשמור תמיד את האיקון בסרגל כלים כשאורבוט מחובר</string>
<string name="set_locale_title">שפה</string>
- <string name="no_internet_connection_tor">אין חיבור לאינטרנט; תור ממתין...</string>
- <string name="pref_disable_network_summary">כבה את Tor כאשר אין חיבור לאינטרנט</string>
+ <string name="pref_disable_network_summary">כבה את Tor כאשר אין חיבור לאינטרנט</string>
<string name="newnym">החלפת אל זהות Tor חדשה!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">אין חיבור לרשת. מכבה את Tor....</string>
- <string name="network_connectivity_is_good_waking_tor_up_">החיבור עובד טוב. מעיר את Tor...</string>
<string name="updating_settings_in_tor_service">מעדכן הגדרות Tor במכשיר</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_dialog">הגדרות SOCKS Port </string>
@@ -106,7 +101,6 @@
<string name="mb">MB</string>
<string name="menu_qr">קוד QR</string>
<string name="get_bridges_email">דוא\"ל</string>
- <string name="get_bridges_web">אתר</string>
<string name="activate">הפעל</string>
<string name="send_email">שלח דוא\"ל</string>
</resources>
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 6a2af47a..70f8a063 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Torネットワークに接続しています</string>
<string name="status_disabled">\"Orbotが解除されました</string>
<string name="status_shutting_down">TorServiceが終了しています</string>
- <string name="tor_process_starting">Torクライエントを開始しています...</string>
- <string name="tor_process_complete">完了</string>
- <string name="menu_settings">設定</string>
+ <string name="menu_settings">設定</string>
<string name="menu_log">履歴</string>
<string name="menu_start">スタート</string>
<string name="menu_stop">停止</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">拡張通知で、Torの出口の国とIPを表示します</string>
<string name="pref_use_expanded_notifications_title">拡張通知</string>
<string name="set_locale_title">言語</string>
- <string name="no_internet_connection_tor">インターネット接続なし。Torは待機中です...</string>
- <string name="pref_disable_network_title">ネットワークなし時オートスリープ</string>
+ <string name="pref_disable_network_title">ネットワークなし時オートスリープ</string>
<string name="pref_disable_network_summary">ネット接続がない時 Tor をスリープさせる</string>
<string name="newnym">新たな Tor の身元に切り替えました。</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">ネットワーク接続がありません。Torはスリープします…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">ネットワーク接続は良好です。Torを有効にします…</string>
<string name="updating_settings_in_tor_service">Torサービスの設定を更新中</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">TorがSOCKSプロキシを提供するポート (デフォルト: 9050、0にすると無効)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">変更を有効にするにはOrbotを再起動してください</string>
<string name="menu_qr">QRコード</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">モバイルネットワークが頻繁にTorをブロックする場合、別の方法として \'ブリッジサーバー\'を使用することができます。オプションを1つ選択して、設定とテストを行ってください。</string>
- <string name="bridge_mode">ブリッジ モード</string>
<string name="get_bridges_email">メール</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">アクティブ化</string>
<string name="apps_mode">VPN モード</string>
<string name="send_email">メール送信</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">あなたは、メール、ウェブを介して、またはブリッジQRコードをスキャンしてブリッジアドレスを取得することができます。ブリッジアドレスを要求するため、下の「メール」または「ウェブ」を選択してください。\n\nアドレスを入手したら、それをOrbot設定の「ブリッジ」設定にコピー& 貼り付けして、Orbotを再起動します。</string>
- <string name="vpn_default_world">世界中 (自動)</string>
+ <string name="vpn_default_world">世界中 (自動)</string>
<string name="hidden_services">Hidden Services</string>
<string name="title_activity_hidden_services">Hidden Services</string>
<string name="menu_hidden_services">Hidden Services</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">電池最適化を有効にすることを考察する</string>
<string name="pref_isolate_dest">宛先アドレスを分離する</string>
<string name="pref_isolate_dest_summary">宛先アドレスごとに別のサーキットを利用する</string>
- <string name="no_transproxy_warning_short">警告:透過的プロキシはもはやサポートされていません。</string>
- <string name="no_transproxy_warning">警告:透過的プロキシはサポートされていません。代わりにOrbotのアプリVPNを利用して下さい。</string>
<string name="pref_connection_padding">通信難読化</string>
<string name="pref_connection_padding_summary">ある種のトラヒック分析から防衛するために、常に通信難読化を有効にします。デフォルト:自動的</string>
<string name="pref_reduced_connection_padding">減らした通信難読化</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Tor に直接接続する (ベスト)</string>
<string name="bridge_community">コミュニティーサーバーを介して接続する</string>
<string name="bridge_cloud">クラウドサーバーを介して接続する</string>
- <string name="bridges_get_new">新しいブリッジをリクエストする...(最悪の場合に)</string>
<string name="trouble_connecting">接続に問題がありましたか?</string>
<string name="full_device_vpn">フルデバイス VPN</string>
<string name="vpn_disabled">VPN が無効</string>
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 2e4f3848..db9e43cf 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Tor 네트워크에 연결됨</string>
<string name="status_disabled">Orbot이 비활성화되어 있습니다</string>
<string name="status_shutting_down">토르 서비스가 종료되는 중입니다</string>
- <string name="tor_process_starting">Tor 클라이언트 시작 중…</string>
- <string name="tor_process_complete">완료.</string>
- <string name="menu_settings">설정</string>
+ <string name="menu_settings">설정</string>
<string name="menu_log">로그</string>
<string name="menu_start">시작</string>
<string name="menu_stop">중지</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">출구 및 IP 정보알림 보이기</string>
<string name="pref_use_expanded_notifications_title">확장 알림</string>
<string name="set_locale_title">언어</string>
- <string name="no_internet_connection_tor">인터넷 연결안됨; 대기중입니다...</string>
- <string name="pref_disable_network_title">네트워크가 없을 때의 자동 슬립</string>
+ <string name="pref_disable_network_title">네트워크가 없을 때의 자동 슬립</string>
<string name="pref_disable_network_summary">인터넷이 불가능하다면 Tor를 슬립 모드로 두십시오</string>
<string name="newnym">새로운 Tor 신원으로 전환되었습니다!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">네트워크에 연결되어 있지 않습니다. 토르를 잠자기 모드로 변경합니다...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">네트워크에 연결되었습니다. 토르를 다시 깨웁니다...</string>
<string name="updating_settings_in_tor_service">토르 서비스의 설정을 업데이트 중입니다</string>
<string name="pref_socks_title">토르 SOCKS</string>
<string name="pref_socks_summary">SOCKS 프록시를 받을 포트 (기본: 9050 / 0은 비활성화)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">브릿지가 업데이트되었습니다</string>
<string name="restart_orbot_to_use_this_bridge_">변경을 완료하려면 Orbot을 재시작하세요</string>
<string name="menu_qr">QR 코드</string>
- <string name="bridge_mode">브릿지 모드</string>
<string name="get_bridges_email">이메일</string>
- <string name="get_bridges_web">웹</string>
<string name="activate">활성화</string>
<string name="send_email">이메일 보내기</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">브릿지 주소를 이메일이나 QR코드를 통해 얻을 수 있습니다. 아래의 \"이메일\"이나 \"웹\"을 터치해 브릿지 주소를 요청하세요.\n\n주소를 얻었다면, 설정의 \"브릿지\" 항목에 복사 & 붙여넣기한 뒤 Orbot을 재시작하세요.</string>
- <string name="save">저장</string>
+ <string name="save">저장</string>
<string name="name">Name</string>
<string name="please_restart_Orbot_to_enable_the_changes">변경을 완료하려면 Orbot을 재시작하세요</string>
<string name="disable">비활성화</string>
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 24ffde66..fbd7a5fc 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Prisijungta prie Tor tinklo</string>
<string name="status_disabled">Orbot išjungtas</string>
<string name="status_shutting_down">TorService išjungiamas</string>
- <string name="tor_process_starting">Paleidžiamas Tor klientas...</string>
- <string name="tor_process_complete">baigta.</string>
- <string name="menu_settings">Nustatymai</string>
+ <string name="menu_settings">Nustatymai</string>
<string name="menu_log">Žurnalas</string>
<string name="menu_start">Pradėti</string>
<string name="menu_stop">Baigti</string>
diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml
index 5196b05e..37062994 100644
--- a/app/src/main/res/values-lv/strings.xml
+++ b/app/src/main/res/values-lv/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Izveidots savienojums ar tīklu Tor</string>
<string name="status_disabled">Orbot ir deaktivēts</string>
<string name="status_shutting_down">TorService izslēdzas</string>
- <string name="tor_process_starting">Startē Tor klientu...</string>
- <string name="tor_process_complete">pabeidz.</string>
- <string name="menu_settings">Iestatījumi</string>
+ <string name="menu_settings">Iestatījumi</string>
<string name="menu_log">Žurnāls</string>
<string name="menu_start">Startēt</string>
<string name="menu_stop">Apturēt</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Rādīt paplašinātus paziņojumus, kur norādīts IP un Tor izejas valsts</string>
<string name="pref_use_expanded_notifications_title">Paplašināti paziņojumi</string>
<string name="set_locale_title">Valoda</string>
- <string name="no_internet_connection_tor">Nav interneta savienojuma; Tor ir gaidstāvē...</string>
- <string name="pref_disable_network_title">Neizmantot tīkla automātiskā miega režīmu</string>
+ <string name="pref_disable_network_title">Neizmantot tīkla automātiskā miega režīmu</string>
<string name="pref_disable_network_summary">Kad nav interneta, pārslēgt Tor\'u uz miega režīmu</string>
<string name="newnym">Jūs pārslēdzāties uz jaunu Tor\'a identitāti!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nav tīkla savienojuma. Tor\'am iestata miega režīmu...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Labs tīkla savienojums. Aktivizē Tor\'u...</string>
<string name="updating_settings_in_tor_service">atjaunina Tor pakalpojuma iestatījumus </string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Ports, uz kura Tor piedāvā savu SOCKS starpniekserveri (noklusējumvērtība: 9050 vai 0 lai atspējotu)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Tilti ir atjaunināti</string>
<string name="restart_orbot_to_use_this_bridge_">Lūdzu pārstartējiet Orbot, lai iespējotu izmaiņas</string>
<string name="menu_qr">QR kodi</string>
- <string name="bridge_mode">Tiltu režīms</string>
<string name="get_bridges_email">E-pasts</string>
- <string name="get_bridges_web">Tīmeklis</string>
<string name="activate">Aktivizēt</string>
<string name="send_email">Nosūtīt e-pastu</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Jūs varat saņemt tiltu adreses e-pastā, tīmeklī vai skenējot tiltu QR kodu. Zemāk atlasiet „E-pasts” vai „Tīmeklis”, lai pieprasītu tiltu adreses. Kad esat saņēmis adreses, tad tās iekopējiet un ielīmējiet Orbot iestatījumu preferencēs „Tilti” un pārstartējiet.</string>
- <string name="hidden_services">Slēptie pakalpojumi</string>
+ <string name="hidden_services">Slēptie pakalpojumi</string>
<string name="title_activity_hidden_services">Slēptie pakalpojumi</string>
<string name="menu_hidden_services">Slēptie pakalpojumi</string>
<string name="save">Saglabāt</string>
diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml
index a63ffab3..907df60e 100644
--- a/app/src/main/res/values-mk/strings.xml
+++ b/app/src/main/res/values-mk/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Поврзан на мрежата на Tor</string>
<string name="status_disabled">Орбот е деактивиран</string>
<string name="status_shutting_down">Tor-Сервисот се исклучува</string>
- <string name="tor_process_starting">Стартување на Tor клиентот...</string>
- <string name="tor_process_complete">завршено.</string>
<string name="menu_settings">Поставки</string>
<string name="menu_log">Дневник</string>
<string name="menu_start">Започни</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Прикажи проширено известување со излезната држава и IP на Tor</string>
<string name="pref_use_expanded_notifications_title">Проширени известувања</string>
<string name="set_locale_title">Јазик</string>
- <string name="no_internet_connection_tor">Нема интернет врска; Tor е во мирување...</string>
<string name="pref_disable_network_title">Нема Автоматско-спиење на мрежата</string>
<string name="pref_disable_network_summary">Ставете го Тор на режим на спиење кога Интернетот не е достапен</string>
<string name="newnym">Се префрливте на нов идентитет на Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Нема мрежно поврзување. Ставете го Tor на режим на спиење...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Мрежното поврзување е добро. Tor се буди...</string>
<string name="updating_settings_in_tor_service">ажурирање на поставките во Tor сервисот </string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Порта на која Тор и го нуди својот SOCKS-прокси (стандардно: 9050 или 0 за да се исклучи)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Ве молиме повторно стартувајте го Orbot за да се овозможат промените</string>
<string name="menu_qr">QR-кодови</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Ако вашата мобилна мрежа активно го блокира Tor, можете да користите „Мост сервер“ како алтернативен пристап. ОДБЕРЕТЕ една од опциите за поставување и тестирање...</string>
- <string name="bridge_mode">Режим на работа на мостот</string>
<string name="get_bridges_email">Е-пошта</string>
- <string name="get_bridges_web">Веб</string>
<string name="activate">Активирај</string>
<string name="apps_mode">VPN мод</string>
<string name="send_email">Испратете е-пошта</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Aдреса на мостови можете да добивате преку е-пошта, веб или со скенирање на QR кодот на мостот. Изберете подолу \'Е-пошта\' или \'Web\', за да побарате адреса за мостот. \n\nОткако ќе ја добиете адресата, копирајте ја & и залепете ја во делот \"Мостови\" во подесувањето на Orbot и повторно стартувајте.</string>
- <string name="vpn_default_world">Глобално (Автоматски)</string>
+ <string name="vpn_default_world">Глобално (Автоматски)</string>
<string name="hidden_services">Скриени сервиси</string>
<string name="title_activity_hidden_services">Скриени сервиси</string>
<string name="menu_hidden_services">Скриени сервиси</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Размислете за овозможување на оптимизациите на батеријата</string>
<string name="pref_isolate_dest">Изолирај адреси на дестинација</string>
<string name="pref_isolate_dest_summary">Користи различен круг за секоја адреса на дестинација</string>
- <string name="no_transproxy_warning_short">ВНИМАНИЕ: Транспроксирањето повеќе не е поддржано</string>
- <string name="no_transproxy_warning">ВНИМАНИЕ: Транспарентното пренасочувањее не е поддржано. Наместо тоа користите Orbot Apps VPN.</string>
<string name="pref_connection_padding">Камуфлирано поврзување</string>
<string name="pref_connection_padding_summary">Секогаш овозможи поврзување со камуфлажа против некои форми на анализирање на интернет сообраќајот. Стандардно: Автоматски</string>
<string name="pref_reduced_connection_padding">Редуцирај поврзување со камуфлажа</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Поврзи директно на Tor (Најдобро)</string>
<string name="bridge_community">Поврзи преку сервери на заедницата</string>
<string name="bridge_cloud">Поврзи преку облак-сервери</string>
- <string name="bridges_get_new">Бара нови мостови... (ако сите други не успеале)</string>
<string name="trouble_connecting">Проблеми со поврзувањето?</string>
<string name="full_device_vpn">Целосен VPN уред</string>
<string name="vpn_disabled">VPN оневозможен</string>
diff --git a/app/src/main/res/values-ms-rMY/strings.xml b/app/src/main/res/values-ms-rMY/strings.xml
index 8b0fff9d..b1fa7de0 100644
--- a/app/src/main/res/values-ms-rMY/strings.xml
+++ b/app/src/main/res/values-ms-rMY/strings.xml
@@ -4,9 +4,7 @@
<string name="status_starting_up">Orbot telah dimulakan..</string>
<string name="status_activated">Bersambung ke rangkaian Tor</string>
<string name="status_disabled">\"Orbot telah dinyah-aktifkan</string>
- <string name="tor_process_starting">Memulakan klien Tor..</string>
- <string name="tor_process_complete">selesai.</string>
- <string name="menu_settings">Tetapan</string>
+ <string name="menu_settings">Tetapan</string>
<string name="menu_log">Log</string>
<string name="menu_start">Mula</string>
<string name="menu_stop">Henti</string>
diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml
index f9169742..dc6edad7 100644
--- a/app/src/main/res/values-ms/strings.xml
+++ b/app/src/main/res/values-ms/strings.xml
@@ -5,9 +5,7 @@
<string name="status_activated">Bersambung ke rangkaian Tor</string>
<string name="status_disabled">\"Orbot telah dinyah-aktifkan</string>
<string name="status_shutting_down">Orbot sedang ditutup</string>
- <string name="tor_process_starting">Memulakan klien Tor..</string>
- <string name="tor_process_complete">selesai.</string>
- <string name="menu_settings">Tetapan</string>
+ <string name="menu_settings">Tetapan</string>
<string name="menu_log">Log</string>
<string name="menu_start">Mula</string>
<string name="menu_stop">Henti</string>
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 3f426266..5e689ce3 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Koblet til Tor-nettverket</string>
<string name="status_disabled">Orbot er deaktivert</string>
<string name="status_shutting_down">Tor-tjenesten avsluttes</string>
- <string name="tor_process_starting">Starter Tor-klient…</string>
- <string name="tor_process_complete">fullført.</string>
- <string name="menu_settings">Innstillinger</string>
+ <string name="menu_settings">Innstillinger</string>
<string name="menu_log">Logg</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stopp</string>
@@ -104,12 +102,9 @@
<string name="pref_use_expanded_notifications">Vis utvidede merknader med land og IP for utgangstrafikk fra Tor</string>
<string name="pref_use_expanded_notifications_title">Utvidede varsler</string>
<string name="set_locale_title">Språk</string>
- <string name="no_internet_connection_tor">Ingen Internett-tilkobling; Tor er i ventemodus…</string>
- <string name="pref_disable_network_title">Inget automatisk hvilemodus for nettverk</string>
+ <string name="pref_disable_network_title">Inget automatisk hvilemodus for nettverk</string>
<string name="pref_disable_network_summary">Legg Tor i hvilemodus når nettilkobling til internett ikke er tilgjengelig</string>
<string name="newnym">Du har byttet til en ny Tor-identitet!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Ingen nettverkstilkobling. Tor går i dvale…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Nettverkstilkoblingen er bra. Vekker opp Tor…</string>
<string name="updating_settings_in_tor_service">Oppdaterer innstillinger i Tor service</string>
<string name="pref_socks_title">Tor-SOCKS</string>
<string name="pref_socks_summary">Port som Tor tilbyr er SOCKS proxy på (standard: 9050 eller 0 for å slå av)</string>
@@ -130,14 +125,11 @@
<string name="bridges_updated">Broer oppdatert</string>
<string name="restart_orbot_to_use_this_bridge_">Gjør omstart av Orbot før endringer trer i kraft</string>
<string name="menu_qr">QR-koder</string>
- <string name="bridge_mode">Bro-modus</string>
<string name="get_bridges_email">E-post</string>
- <string name="get_bridges_web">Vev</string>
- <string name="activate">Aktiver</string>
+ <string name="activate">Aktiver</string>
<string name="apps_mode">VPN-modus</string>
<string name="send_email">Send e-post</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Du kan få en bro-adresse på e-post, gjennom nettet eller ved å skanne en bro-QR-kode. Velg \'E-post\' eller \'Nett\' nedenfor for å forespørre en broadresse.\n\nNår du har en adresse, kopier og lim den inn i \"Broer\" i Orbots innstillinger og start på ny.</string>
- <string name="hidden_services">Hidden Services</string>
+ <string name="hidden_services">Hidden Services</string>
<string name="title_activity_hidden_services">Hidden Services</string>
<string name="menu_hidden_services">Hidden Services</string>
<string name="save">Lagre</string>
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 8f5c7572..7d90b698 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Verbonden met het Tor-netwerk</string>
<string name="status_disabled">Orbot is uitgeschakeld</string>
<string name="status_shutting_down">TorService wordt afgesloten</string>
- <string name="tor_process_starting">Bezig met Tor-cliënt starten…</string>
- <string name="tor_process_complete">klaar.</string>
- <string name="menu_settings">Instellingen</string>
+ <string name="menu_settings">Instellingen</string>
<string name="menu_log">Logboek</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stop</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Toon uitgebreide melding met Tor-exitland en IP</string>
<string name="pref_use_expanded_notifications_title">Uitgebreide meldingen</string>
<string name="set_locale_title">Taal</string>
- <string name="no_internet_connection_tor">Geen internetverbinding; Tor is in de slaapstand...</string>
- <string name="pref_disable_network_title">Geen netwerk automatisch slapen</string>
+ <string name="pref_disable_network_title">Geen netwerk automatisch slapen</string>
<string name="pref_disable_network_summary">Laat Tor slapen als er geen internetverbinding beschikbaar is</string>
<string name="newnym">Je bent naar een nieuwe Tor identiteit gewisseld!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Geen internetverbinding. Tor wordt te slapen gelegd…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Netwerkverbinding is in orde. Tor wordt wakker gemaakt…</string>
<string name="updating_settings_in_tor_service">instellingen in Tor-dienst worden bijgewerkt</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Poort waarop Tor de SOCKS-proxy aanbiedt (standaard: 9050 of 0 om uit te schakelen)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Herstart Orbot om de wijzigingen in te schakelen</string>
<string name="menu_qr">QR-codes</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Als je mobiele netwerk Tor actief blokkeert, kan je een \'bridge-server\' gebruiken als alternatieve toegang. SELECTEER een van de opties om te configureren en te testen..,.</string>
- <string name="bridge_mode">Bridge-modus</string>
<string name="get_bridges_email">E-mail</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activeren</string>
<string name="apps_mode">VPN-modus</string>
<string name="send_email">E-mail versturen</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Je kan een bridge-adres verkrijgen door e-mail, het web of door een bridge-QR-code te scannen. Kies \'E-mail\' of \'Web\' hieronder om een bridge-adres aan te vragen.\n\nEenmaal je een adres hebt kopieer en plak je het in de \"Bridges\"-optie in de Orbot-instellingen, waarna je Orbot herstart.</string>
- <string name="vpn_default_world">Algemeen (automatisch)</string>
+ <string name="vpn_default_world">Algemeen (automatisch)</string>
<string name="hidden_services">Verborgen diensten</string>
<string name="title_activity_hidden_services">Verborgen diensten</string>
<string name="menu_hidden_services">Verborgen diensten</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Overweeg accubesparing in te schakelen</string>
<string name="pref_isolate_dest">Geïsoleerde bestemmingsadressen</string>
<string name="pref_isolate_dest_summary">Gebruik een ander circuit voor elk bestemmingsadres</string>
- <string name="no_transproxy_warning_short">WAARSCHUWING: transproxyen wordt niet meer ondersteund</string>
- <string name="no_transproxy_warning">WAARSCHUWING: transproxyen wordt niet meer ondersteund. Gebruik de Orbot-VPN.</string>
<string name="pref_connection_padding">Verbindingsopvulling</string>
<string name="pref_connection_padding_summary">Schakelt verbindingsopvulling altijd in om te verdedigen tegen krachtiger vormen van verkeersanalyse. Standaard: automatisch</string>
<string name="pref_reduced_connection_padding">Beperkte verbindingsopvulling</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Rechtstreeks verbinden met Tor (best)</string>
<string name="bridge_community">Verbinden via gemeenschapsservers</string>
<string name="bridge_cloud">Verbinden via cloudservers</string>
- <string name="bridges_get_new">Nieuwe bridges opvragen... (als alle andere opties mislukken)</string>
<string name="trouble_connecting">Problemen met verbinden?</string>
<string name="full_device_vpn">Volledigapparaats-VPN</string>
<string name="vpn_disabled">VPN uitgeschakeld</string>
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index ae138544..df454dd1 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Podłączony do sieci Tor</string>
<string name="status_disabled">Orbot wyłączony</string>
<string name="status_shutting_down">TorService wyłącza się</string>
- <string name="tor_process_starting">Uruchamianie klienta sieci Tor...</string>
- <string name="tor_process_complete">gotowe.</string>
- <string name="menu_settings">Ustawienia</string>
+ <string name="menu_settings">Ustawienia</string>
<string name="menu_log">Logi</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stop</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Pokaż rozszerzone powiadomienie z krajem Tor exit node oraz jego IP</string>
<string name="pref_use_expanded_notifications_title">Rozszerzone Powiadomienia</string>
<string name="set_locale_title">Język</string>
- <string name="no_internet_connection_tor">Brak połączenia internetowego; Tor jest w trybie oczekiwania...</string>
- <string name="pref_disable_network_title">Brak Auto-Uśpienia Sieci</string>
+ <string name="pref_disable_network_title">Brak Auto-Uśpienia Sieci</string>
<string name="pref_disable_network_summary">Ustaw Tor\'a w tryb uśpienia kiedy połączenie internetowe będzie niedostępne</string>
<string name="newnym">Nowa tożsamość Tor\'a została zmieniona!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Brak połączenia internetowego. Tor będzie w trybie snu...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Połączenie internetowe jest dobre. Trwa budzenie Tora...</string>
<string name="updating_settings_in_tor_service">aktualizowanie ustawień w serwisie Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Port który oferuje SOCKS proxy (domyślnie: 9050 lub 0, aby wyłączyć)</string>
@@ -128,14 +123,11 @@
<string name="bridges_updated">Zaktualizowane Bridges</string>
<string name="restart_orbot_to_use_this_bridge_">Proszę zrestartować Orbot, aby zmiany mogły wejść w życie</string>
<string name="menu_qr">Kody QR</string>
- <string name="bridge_mode">Tryb Bridge</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Aktywuj</string>
<string name="apps_mode">Tryb VPN</string>
<string name="send_email">Wyślij Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Możesz uzyskać adres Bridge poprzez email, internet, lub poprzez zeskanowanie kodu QR. Wybierz \'Email\' lub \'Internet\' poniżej, aby poprosić o adres bridge\'a.\n\nJak już będziesz mieć ten adres to skopiuj i wklej go do \"Bridges\" we właściwościach Orbota a następnie go zrestartuj.</string>
- <string name="hidden_services">Ukryte Usługi</string>
+ <string name="hidden_services">Ukryte Usługi</string>
<string name="title_activity_hidden_services">Ukryte Usługi</string>
<string name="menu_hidden_services">Ukryte Usługi</string>
<string name="save">Zapisz</string>
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 3f20ebdc..c86a2f02 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Conectado à rede Tor</string>
<string name="status_disabled">Orbot está desativado</string>
<string name="status_shutting_down">TorService está desligando</string>
- <string name="tor_process_starting">Iniciando cliente Tor...</string>
- <string name="tor_process_complete">completo.</string>
- <string name="menu_settings">Configurações</string>
+ <string name="menu_settings">Configurações</string>
<string name="menu_log">Log</string>
<string name="menu_start">Iniciar</string>
<string name="menu_stop">Parar</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Mostrar notificação expandida com Tor país de saída e IP</string>
<string name="pref_use_expanded_notifications_title">Notificações Expandidas</string>
<string name="set_locale_title">Idioma</string>
- <string name="no_internet_connection_tor">Sem conexão na internet; Tor está na espera...</string>
- <string name="pref_disable_network_title">Modo de espera automático</string>
+ <string name="pref_disable_network_title">Modo de espera automático</string>
<string name="pref_disable_network_summary">Colocar o Tor em modo de espera quando não houver acesso Internet disponível</string>
<string name="newnym">Você trocou para uma nova identidade Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Sem conectividade na rede. Colocando o Tor para dormir...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Conectividade da rede está boa. Acordando Tor</string>
<string name="updating_settings_in_tor_service">atualizando configurações no serviço Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Porta que Tor oferece seu proxy SOCKS (padrão: 9050 ou 0 para desativar)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Por favor reinicie Orbot para habilitar as mundanças</string>
<string name="menu_qr">QR Codes</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Se sua rede de dados bloqueia o Tor, você pode utilizar um \'Servidor Bridge\' como alternativa contra o bloqueio. SELECIONE umas das opções para configurar e testar..,.</string>
- <string name="bridge_mode">Modo Ponte</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Atvar</string>
<string name="apps_mode">Modo VPN</string>
<string name="send_email">Enviar Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Você pode obter um endereço de ponte através de e-mail, web ou lendo um código QR ponte. Selecione \'E-mail\' ou \'Web\' abaixo para solicitar uma ponte endereço. \n\nUma vez que você tem um endereço, copie & colá-lo na \"Bridges\" preferência na configuração e reiniciar do Orbot.</string>
- <string name="vpn_default_world">Global (Automático)</string>
+ <string name="vpn_default_world">Global (Automático)</string>
<string name="hidden_services">Serviços Ocultos</string>
<string name="title_activity_hidden_services">Serviços Ocultos</string>
<string name="menu_hidden_services">Serviços Ocultos</string>
@@ -178,7 +170,6 @@
<string name="bridge_direct_connect">Conecte-se diretamente ao Tor (Melhor forma)</string>
<string name="bridge_community">Conecte-se através de servidores da comunidade</string>
<string name="bridge_cloud">Conecte-se através de servidores em nuvem</string>
- <string name="bridges_get_new">Solicitar nova Bridge... (Se todas falharem)</string>
<string name="trouble_connecting">Problemas na conexão ? </string>
<string name="full_device_vpn">VPN PARA TODO O DISPOSITIVO</string>
</resources>
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 94275288..a66ca5a7 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -8,9 +8,7 @@
<string name="status_activated">Ligado à rede Tor</string>
<string name="status_disabled">Orbot está desativado</string>
<string name="status_shutting_down">TorService está a encerrar</string>
- <string name="tor_process_starting">A iniciar o cliente Tor...</string>
- <string name="tor_process_complete">completo.</string>
- <string name="menu_settings">Definições</string>
+ <string name="menu_settings">Definições</string>
<string name="menu_log">Registo</string>
<string name="menu_start">Iniciar</string>
<string name="menu_stop">Parar</string>
@@ -56,7 +54,6 @@
<string name="mb">MB</string>
<string name="menu_qr">Códigos QR</string>
<string name="get_bridges_email">E-mail</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Ativar</string>
<string name="send_email">Enviar Mensagem</string>
<string name="save">Guardar</string>
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 78dd464c..cbe439aa 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -4,9 +4,7 @@
<string name="status_starting_up">O Orbot está a iniciar...</string>
<string name="status_activated">Conetado à rede Tor</string>
<string name="status_disabled">O Orbot está desativado</string>
- <string name="tor_process_starting">A iniciar o cliente Tor...</string>
- <string name="tor_process_complete">completo.</string>
- <string name="menu_settings">Configurações</string>
+ <string name="menu_settings">Configurações</string>
<string name="menu_log">Registo</string>
<string name="menu_start">Iniciar</string>
<string name="menu_stop">Parar</string>
@@ -70,8 +68,6 @@
<string name="pref_use_expanded_notifications_title">Notificações Estendidas</string>
<string name="set_locale_title">Idioma</string>
<string name="newnym">Mudou para uma nova identidade do Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nenhuma conetividade de rede. A hibernar Tor…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">A conetividade de rede é boa. A iniciar Tor…</string>
<string name="updating_settings_in_tor_service">a atualizar as definições no serviço Tor</string>
<string name="pref_socks_title">SOCKS Tor</string>
<string name="pref_dnsport_title">Porta DNS Tor</string>
@@ -82,7 +78,6 @@
<string name="bridges_updated">Pontes Atualizadas</string>
<string name="menu_qr">Códigos QR</string>
<string name="get_bridges_email">Correio Eletrónico</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Ativar</string>
<string name="send_email">Enviar Mensagem</string>
<string name="hidden_services">Serviços ocultos</string>
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index c763c809..42d6bf86 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Conectat la reţeaua Tor</string>
<string name="status_disabled">Orbot este dezactivat</string>
<string name="status_shutting_down">ServiciulTor se opreşte</string>
- <string name="tor_process_starting">Porneşte clientul Tor...</string>
- <string name="tor_process_complete">terminat.</string>
- <string name="menu_settings">Setări</string>
+ <string name="menu_settings">Setări</string>
<string name="menu_log">log</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stop</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Arată notificări extinse cu Tor exit country şi IP</string>
<string name="pref_use_expanded_notifications_title">Notificare Extinsă</string>
<string name="set_locale_title">Limbă</string>
- <string name="no_internet_connection_tor">Nu este conexiune la internet; Tor este în așteptare...</string>
- <string name="pref_disable_network_title">Fără adormirea automată a rețelei</string>
+ <string name="pref_disable_network_title">Fără adormirea automată a rețelei</string>
<string name="pref_disable_network_summary">Pune Tor să doarmă dacă nu este internet disponibil</string>
<string name="newnym">Ați comutat la o nouă identitate Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Nu este conexiune la rețea. Se pune Tor în adormire...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Conexiunea la rețea este bună. Se trezește Tor...</string>
<string name="updating_settings_in_tor_service">se actualizează configurările în serviciul Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Porturi pe care Tor oferă SOCKurile proxy active (principal:9050 sau 0 pentru dezactivare)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Punţi activate</string>
<string name="restart_orbot_to_use_this_bridge_">Vă rugăm reporniţi Orbot pentru a aplica modificările</string>
<string name="menu_qr">Coduri QR</string>
- <string name="bridge_mode">Mod punte</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activează</string>
<string name="send_email">Trimite email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Poţi primi o adresă de punte prin email,web sau prin scanarea codului de punte QR.Selectează ”Email” sau ”Web” de mai jos pentru a primi adresa de punte.\n\nCând ai primit adresa,copiaz-o şi introdu-o în preferinţele de PUNŢI din setările Orbot şi mai apoi reporniţi. </string>
- <string name="hidden_services">Servicii ascunse</string>
+ <string name="hidden_services">Servicii ascunse</string>
<string name="title_activity_hidden_services">Servicii ascunse</string>
<string name="menu_hidden_services">Servicii ascunse</string>
<string name="save">Salvează</string>
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 988fad36..9b0fa54b 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Подключён к сети Tor</string>
<string name="status_disabled">Orbot отключён</string>
<string name="status_shutting_down">Служба Tor выключается</string>
- <string name="tor_process_starting">Запускается клиент Tor...</string>
- <string name="tor_process_complete">завершено.</string>
- <string name="menu_settings">Настройки</string>
+ <string name="menu_settings">Настройки</string>
<string name="menu_log">Журнал</string>
<string name="menu_start">Запустить</string>
<string name="menu_stop">Остановить</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Показать расширенное уведомление Tor со страной выхода и IP</string>
<string name="pref_use_expanded_notifications_title">Расширенные уведомления</string>
<string name="set_locale_title">Язык</string>
- <string name="no_internet_connection_tor">Отсутствует подключение к интернету, Tor находится в режиме ожидания…</string>
- <string name="pref_disable_network_title">Автозасыпание без сети</string>
+ <string name="pref_disable_network_title">Автозасыпание без сети</string>
<string name="pref_disable_network_summary">Переводить Tor в спящий режим при отсутствии интернета</string>
<string name="newnym">Вы переключились на новый идентификатор Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Нет подключения к сети. Tor переходит в режим сна...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Подключение к сети установлено. Tor просыпается...</string>
<string name="updating_settings_in_tor_service">обновление настроек в сервисе Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Порт, на котором Tor предоставляет свой SOCKS-прокси (по умолчанию: 9050, 0 - для отключения)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Пожалуйста, перезапустите Orbot для вступления изменения в силу</string>
<string name="menu_qr">QR-коды</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Если ваша мобильная сеть активно блокирует Tor, вы можете использовать мосты Tor для доступа к сети. Выберите один из вариантов для настройки и тестирования:</string>
- <string name="bridge_mode">Режим моста</string>
<string name="get_bridges_email">Эл. почта</string>
- <string name="get_bridges_web">Сайт</string>
<string name="activate">Активация</string>
<string name="apps_mode">VPN-режим</string>
<string name="send_email">Отправить письмо</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Вы можете получить адрес моста по электронной почте, с сайта или путём сканирования QR-кода. Выберите \"Эл. почта\" или \"Сайт\" ниже, чтобы запросить адрес моста.\n\nПолученный адрес скопируйте и вставьте его в разделе настроек Orbot \"Мосты\", после чего перезапустите приложение.</string>
- <string name="vpn_default_world">Мир (авто)</string>
+ <string name="vpn_default_world">Мир (авто)</string>
<string name="hidden_services">Скрытые службы</string>
<string name="title_activity_hidden_services">Скрытые службы</string>
<string name="menu_hidden_services">Скрытые службы</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Рассмотрите возможность включения оптимизации батареи</string>
<string name="pref_isolate_dest">Изолировать адреса назначения</string>
<string name="pref_isolate_dest_summary">Использовать разные цепи для каждого адреса назначения</string>
- <string name="no_transproxy_warning_short">ПРЕДУПРЕЖДЕНИЕ: прозрачный прокси больше не поддерживается</string>
- <string name="no_transproxy_warning">ПРЕДУПРЕЖДЕНИЕ: прозрачный прокси больше не поддерживается. Вместо этого используйте VPN-режим Orbot.</string>
<string name="pref_connection_padding">Прокладка соединения</string>
<string name="pref_connection_padding_summary">Всегда включает прокладку соединения для защиты от некоторых форм анализа трафика. По умолчанию: авто</string>
<string name="pref_reduced_connection_padding">Сокращённая прокладка соединения</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Подключение непосредственно к Tor (лучше всего)</string>
<string name="bridge_community">Подключение через серверы сообщества</string>
<string name="bridge_cloud">Подключение через облачные серверы</string>
- <string name="bridges_get_new">Запросить новые мосты… (если всё остальное не удалось)</string>
<string name="trouble_connecting">Проблема с подключением?</string>
<string name="full_device_vpn">VPN для всего устройства</string>
<string name="vpn_disabled">VPN отключён</string>
diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml
index fa116ecb..e533ac70 100644
--- a/app/src/main/res/values-si-rLK/strings.xml
+++ b/app/src/main/res/values-si-rLK/strings.xml
@@ -5,9 +5,7 @@
<string name="status_starting_up">Orbot ආරම්භ කරමින්…</string>
<string name="status_activated">Tor ජාලයට සබැදියි</string>
<string name="status_disabled">Orbot ක්රියාවිරහිත කර ඇත </string>
- <string name="tor_process_starting">Tor දායකයා ආරම්භ කරමින්...</string>
- <string name="tor_process_complete">සම්පුර්ණයි.</string>
- <string name="menu_settings">සිටවුම්</string>
+ <string name="menu_settings">සිටවුම්</string>
<string name="menu_log">ලොගය </string>
<string name="menu_start">අරඹන්න</string>
<string name="menu_stop">නවත්වන්න</string>
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 8877c736..8a11909a 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Pripojený do siete Tor</string>
<string name="status_disabled">Orbot je deaktivovaný</string>
<string name="status_shutting_down">TorService sa vypína</string>
- <string name="tor_process_starting">Štartujem Tor klienta...</string>
- <string name="tor_process_complete">hotovo.</string>
- <string name="menu_settings">Nastavenia</string>
+ <string name="menu_settings">Nastavenia</string>
<string name="menu_log">Podrobnosti</string>
<string name="menu_start">Štart</string>
<string name="menu_stop">Stop</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Zobraziť rozšírené upozornenie s výstupnou krajinou a IP adresou siete Tor</string>
<string name="pref_use_expanded_notifications_title">Rozšírené upozornenia</string>
<string name="set_locale_title">Jazyk</string>
- <string name="no_internet_connection_tor">Žiadne pripojenie k internetu. Tor je v pohotovostnom režime...</string>
- <string name="pref_disable_network_title">Automatický spánok</string>
+ <string name="pref_disable_network_title">Automatický spánok</string>
<string name="pref_disable_network_summary">Uspať Tor, keď internet nie je dostupný</string>
<string name="newnym">Prepli ste na novú Tor identitu!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Žiadna možnosť pripojenia do siete. Uspávam Tor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Pripojenie do siete je dobré. Aktivujem Tor...</string>
<string name="updating_settings_in_tor_service">aktualizujem nastavenie v službe Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Port, na ktorom Tor poskytuje SOCKS proxy (prednastavené 9050 alebo 0 pre deaktiváciu)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Premostenia aktualizované</string>
<string name="restart_orbot_to_use_this_bridge_">Prosím reštartujte Orbot, aby sa aktivovali zmeny</string>
<string name="menu_qr">QR kódy</string>
- <string name="bridge_mode">Mod premostení</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Aktivovať</string>
<string name="send_email">Poslať email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Môžete získať adresu premostenia cez email, web, alebo naskenovaním QR kódu premostenia. Vyberte \'Email\' alebo \'Web\' nižšie pre vyžiadanie adresy premostenia.\n\nAkonáhle budete mať adresu, skopírujte a vložte ju do nastavení \"Premostenia\" v nastaveniach Orbot a reštartujte ho.</string>
- <string name="save">Uložiť</string>
+ <string name="save">Uložiť</string>
<string name="name">Meno</string>
<string name="please_restart_Orbot_to_enable_the_changes">Prosím reštartujte Orbot, aby sa aktivovali zmeny</string>
<string name="disable">Zakázať</string>
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index dfde7d65..795934f7 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -4,9 +4,7 @@
<string name="status_starting_up">Orbot se zaganja...</string>
<string name="status_activated">Povezan v omrežje Tor</string>
<string name="status_disabled">Orbot ni aktiviran</string>
- <string name="tor_process_starting">Zagon Tor klijenta...</string>
- <string name="tor_process_complete">končano.</string>
- <string name="menu_settings">Nastavitve</string>
+ <string name="menu_settings">Nastavitve</string>
<string name="menu_log">Dnevnik</string>
<string name="menu_start">Začni</string>
<string name="menu_stop">Ustavi</string>
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index f2959c03..4305c63e 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Повезан са Тор мрежом</string>
<string name="status_disabled">Орбот је деактивиран</string>
<string name="status_shutting_down">Гашење Тор Сервиса</string>
- <string name="tor_process_starting">Покреће се Тор клијент...</string>
- <string name="tor_process_complete">завршено.</string>
- <string name="menu_settings">Подешавања</string>
+ <string name="menu_settings">Подешавања</string>
<string name="menu_log">Логови</string>
<string name="menu_start">Крени</string>
<string name="menu_stop">Заустави</string>
@@ -105,12 +103,9 @@
<string name="pref_use_expanded_notifications">Прикажи опширно обавештење Тор излаза државе и IP-ја</string>
<string name="pref_use_expanded_notifications_title">Опширно Обавештење</string>
<string name="set_locale_title">Језик</string>
- <string name="no_internet_connection_tor">Нема интернет конекције; Тор је у мировању...</string>
- <string name="pref_disable_network_title">Без Мреже Auto-Sleep</string>
+ <string name="pref_disable_network_title">Без Мреже Auto-Sleep</string>
<string name="pref_disable_network_summary">Умири Тор када је недоступан интернет</string>
<string name="newnym">Прешли сте на нови Тор идентитет!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Нема интернет конекције. Умиривање Тор-а...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Конекција је добра. Оживљавање Тор-а...</string>
<string name="updating_settings_in_tor_service">ажурирање подешавања Тор мреже</string>
<string name="pref_socks_title">Toр SOCKS</string>
<string name="pref_socks_summary">Port који Тор нуди је SOCKS прокси укључен (уобичајено: 9050 или 0 за искључивање)</string>
@@ -132,14 +127,11 @@
<string name="restart_orbot_to_use_this_bridge_">Молимо покрените поново Орбот ради примењивања промена</string>
<string name="menu_qr">QR Кодови</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Ако ваша мобилна мрежа активно блокира Тор, можете премошћивати сервером као алтернативни начин уласка.ОДАБЕРИ једну од опција за конфигурацију и тестирање....</string>
- <string name="bridge_mode">Bridge Режим</string>
<string name="get_bridges_email">Е-пошта</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Активирати</string>
<string name="apps_mode">VPN Мод</string>
<string name="send_email">Пошаљи Е-пошту</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Можете добити bridge адресу преко е-поште. на web-у или скенирањем bridge QR кода. Одабери \'E-пошта\' или \'Web\' испод да би сте затражили bridge адресу.\n\nЈедном када добијете адресу. копирај& налепи је у \"Bridges\" преференцији у Орбот подешавањима и поново покрените.</string>
- <string name="vpn_default_world">Глобално (Аутоматски)</string>
+ <string name="vpn_default_world">Глобално (Аутоматски)</string>
<string name="hidden_services">Скривени Сервиси</string>
<string name="title_activity_hidden_services">Скривени Сервиси</string>
<string name="menu_hidden_services">Скривени Сервиси</string>
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 5a1f730e..3ede3994 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Uppkopplad till Tor-nätverket</string>
<string name="status_disabled">Orbot är inaktiverad</string>
<string name="status_shutting_down">TorService avslutas</string>
- <string name="tor_process_starting">Startar Tor-klient...</string>
- <string name="tor_process_complete">färdig.</string>
- <string name="menu_settings">Inställningar</string>
+ <string name="menu_settings">Inställningar</string>
<string name="menu_log">Logg</string>
<string name="menu_start">Start</string>
<string name="menu_stop">Stopp</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Visa utökad notis med Tors utgångsland och IP</string>
<string name="pref_use_expanded_notifications_title">Utökade notiser</string>
<string name="set_locale_title">Språk</string>
- <string name="no_internet_connection_tor">Ingen internetanslutning; Tor är i standby-läge...</string>
- <string name="pref_disable_network_title">Ingen auto-sömn för nätverket</string>
+ <string name="pref_disable_network_title">Ingen auto-sömn för nätverket</string>
<string name="pref_disable_network_summary">Låt Tor sova när inget internet finns tillgängligt</string>
<string name="newnym">Du har bytt till en ny Tor identitet!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Ingen nätverksanslutning. Försätter Tor i dvala...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Nätverksanslutningen fungerar. Väcker Tor...</string>
<string name="updating_settings_in_tor_service">uppdaterar inställningar i Tor-tjänsten</string>
<string name="pref_socks_title">Tor-SOCKS</string>
<string name="pref_socks_summary">Port som Tor erbjuder sin SOCKS-proxy på (standard: 9050 eller 0 för att inaktivera)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Vänligen starta om Orbot för att aktivera ändringarna</string>
<string name="menu_qr">QR-koder</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Om ditt mobilnät aktivt blockerar Tor kan du använda en \"Bridge Server\" som ett alternativt sätt. VÄLJ ett av alternativen att konfigurera och testa.,.</string>
- <string name="bridge_mode">Bryggläge</string>
<string name="get_bridges_email">E-post</string>
- <string name="get_bridges_web">Webb</string>
<string name="activate">Aktivera</string>
<string name="apps_mode">VPN-läge</string>
<string name="send_email">Skicka e-post</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Du kan få en brygg-adress via e-post, via webben eller genom att skanna en QR-kod för en brygga. Välj \'E-post\' eller \'Webb\' nedan för att begära en brygg-adress.\n\nNär du väl har en adress, kopiera & klistra in den i inställningen för \"Bryggor\" i Orbot och starta om.</string>
- <string name="vpn_default_world">Global (automatisk)</string>
+ <string name="vpn_default_world">Global (automatisk)</string>
<string name="hidden_services">Hidden Services</string>
<string name="title_activity_hidden_services">Hidden Services</string>
<string name="menu_hidden_services">Hidden Services</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Överväg att aktivera batterioptimeringar</string>
<string name="pref_isolate_dest">Isolera destinationsadresser</string>
<string name="pref_isolate_dest_summary">Använd en annan krets för varje destinationsadress</string>
- <string name="no_transproxy_warning_short">VARNING: Transproxy stöds inte längre</string>
- <string name="no_transproxy_warning">VARNING: Transparent proxy stöds inte. Använd Orbot Apps VPN istället.</string>
<string name="pref_connection_padding">Anslutnings-utfyllnad</string>
<string name="pref_connection_padding_summary">Aktivera alltid anslutnings-utfyllnad för att skydda mot vissa former av trafikanalys. Standard: auto</string>
<string name="pref_reduced_connection_padding">Minskad anslutnings-utfyllnad</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Anslut direkt till Tor (Bästa)</string>
<string name="bridge_community">Anslut genom gemenskaps servrar</string>
<string name="bridge_cloud">Anslut via molnservrar</string>
- <string name="bridges_get_new">Begär nya broar... (om allt annat misslyckas)</string>
<string name="trouble_connecting">Problem med att ansluta?</string>
<string name="full_device_vpn">VPN för hela enheten</string>
<string name="vpn_disabled">VPN inaktiverad</string>
diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml
index 402e9f59..f5dbc3ff 100644
--- a/app/src/main/res/values-ta/strings.xml
+++ b/app/src/main/res/values-ta/strings.xml
@@ -5,9 +5,7 @@
<string name="status_starting_up">ஆர்பாட் துவங்குகிறது...</string>
<string name="status_activated">தோர் நெட்வொர்க் இணைக்கப்பட்ட</string>
<string name="status_disabled">ஆர்பாட் நிறுத்தப்பட்டது</string>
- <string name="tor_process_starting">தோர் துவங்கப்படுகிறது...</string>
- <string name="tor_process_complete">முடிந்தது.</string>
- <string name="menu_settings">அமைப்புகள்</string>
+ <string name="menu_settings">அமைப்புகள்</string>
<string name="menu_log">பதிவுகள்</string>
<string name="menu_start">துவங்கு</string>
<string name="menu_stop">நிறுத்து</string>
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index 1e66492b..58e2782a 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">เชื่อมต่อกับเครือข่าย Tor แล้ว</string>
<string name="status_disabled">ปิดการใช้งาน Orbot</string>
<string name="status_shutting_down">กำลังปิดการทำงาน TorService </string>
- <string name="tor_process_starting">เริ่มใช้ไคลเอ็นต์ Tor </string>
- <string name="tor_process_complete">เสร็จ</string>
- <string name="menu_settings">การตั้งค่า</string>
+ <string name="menu_settings">การตั้งค่า</string>
<string name="menu_log">บันทึก</string>
<string name="menu_start">เริ่ม</string>
<string name="menu_stop">หยุด</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">แสดงการแจ้งเตือนแบบขยายที่ระบุประเทศปลายทางและ IP ของ Tor</string>
<string name="pref_use_expanded_notifications_title">การแจ้งเตือนแบบขยาย</string>
<string name="set_locale_title">ภาษา</string>
- <string name="no_internet_connection_tor">ไม่มีการเชื่อมต่ออินเทอร์เน็ต Tor พร้อมรอใช้งาน...</string>
- <string name="pref_disable_network_title">ไม่พบเครือข่าย พักการใช้งานอัตโนมัติ</string>
+ <string name="pref_disable_network_title">ไม่พบเครือข่าย พักการใช้งานอัตโนมัติ</string>
<string name="pref_disable_network_summary">พักการใช้งาน Tor เมื่อไม่มีอินเทอร์เน็ต</string>
<string name="newnym">คุณได้เปลี่ยนมาใช้ตัวตน Tor ใหม่แล้ว</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">ไม่มีการเชื่อมต่อเครือข่าย พักการใช้งาน Tor</string>
- <string name="network_connectivity_is_good_waking_tor_up_">การเชื่อมต่อเสถียร เปิดใช้งาน Tor...</string>
<string name="updating_settings_in_tor_service">ปรับปรุงการตั้งค่าในบริการ Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">พอร์ตที่ Tor ให้บริการพร็อกซี SOCKS (ค่าเริ่มต้น: 9050 หรือ 0 ไปถึงไม่เปิดใช้งาน)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">กรุณาเริ่ม Orbot ใหม่เพื่อให้การเปลี่ยนแปลงใช้งานได้</string>
<string name="menu_qr">รหัสคิวอาร์</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">หากเครือข่ายโทรศัพท์ของคุณปิดกั้น Tor คุณสามารถใช้ \'เซิร์ฟเวอร์ Bridge\' เป็นตัวเลือกในการเข้าถึงได้ เลือกตัวเลือกหนึ่งเพื่อกำหนดค่าและทดสอบ...</string>
- <string name="bridge_mode">โหมด Bridge</string>
<string name="get_bridges_email">อีเมล</string>
- <string name="get_bridges_web">เว็บ</string>
<string name="activate">เปิดใช้งาน</string>
<string name="apps_mode">โหมด VPN</string>
<string name="send_email">ส่งอีเมล</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">คุณสามารถรับที่อยู่ของ Bridge ได้โดยผ่านอีเมล เว็บ หรือการสแกนรหัสคิวอาร์ของ Bridge เลือก \'อีเมล\' หรือ \'เว็บ\' ด้านล่างเพื่อขอที่อยู่ของ Bridge\n\nเมื่อคุณได้ที่อยู่แล้ว ให้คัดลอก & วางลงในการปรับแต่งลักษณะของ \"Bridge\" ในการตั้งค่าของ Orbit และเริ่มการทำงานใหม่</string>
- <string name="vpn_default_world">ส่วนรวม (อัตโนมัติ)</string>
+ <string name="vpn_default_world">ส่วนรวม (อัตโนมัติ)</string>
<string name="hidden_services">บริการที่ซ่อน</string>
<string name="title_activity_hidden_services">บริการที่ซ่อน</string>
<string name="menu_hidden_services">บริการที่ซ่อน</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">พิจารณาเปิดใช้งานการปรับแบตเตอรี่ให้เหมาะสมที่สุด</string>
<string name="pref_isolate_dest">แยกที่อยู่ปลายทาง</string>
<string name="pref_isolate_dest_summary">ใช้วงรอบที่แตกต่างกันสำหรับแต่ละที่อยู่ปลายทาง</string>
- <string name="no_transproxy_warning_short">คำเตือน: ไม่รองรับพร็อกซีแบบ Transparent</string>
- <string name="no_transproxy_warning">คำเตือน: ไม่รองรับพร็อกซีแบบ Transparent ใช้ VPN ของแอป Orbot แทน</string>
<string name="pref_connection_padding">ช่องว่างภายในการเชื่อมต่อ</string>
<string name="pref_connection_padding_summary">เปิดใช้งานช่องว่างภายในเครือข่ายเสมอเพื่อป้องกันการวิเคราะห์การรับส่งข้อมูลบางรูปแบบ ตั้งค่าเริ่มต้นเป็น: อัตโนมัติ</string>
<string name="pref_reduced_connection_padding">ลดช่องว่างภายในเครือข่าย</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">เชื่อมต่อกับ Tor โดยตรง (ดีที่สุด)</string>
<string name="bridge_community">เชื่อมต่อผ่านเซิร์ฟเวอร์ของชุมชน</string>
<string name="bridge_cloud">เชื่อมต่อผ่านเซิร์ฟเวอร์คลาวด์</string>
- <string name="bridges_get_new">ขอ Bridge ใหม่... (หากทุกอย่างใช้การไม่ได้)</string>
<string name="trouble_connecting">มีปัญหากับการเชื่อมต่อหรือไม่</string>
<string name="full_device_vpn">VPN ทั้งอุปกรณ์</string>
<string name="vpn_disabled">ปิดใช้งาน VPN</string>
diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml
index 7a8edf1c..3f46744c 100644
--- a/app/src/main/res/values-tl/strings.xml
+++ b/app/src/main/res/values-tl/strings.xml
@@ -4,9 +4,7 @@
<string name="status_starting_up">Nagsisimula na ang Orbot…</string>
<string name="status_activated">Konektado sa Tor network</string>
<string name="status_disabled">Naka-deactivate ang Orbot</string>
- <string name="tor_process_starting">Binubuksan ang Tor client…</string>
- <string name="tor_process_complete">kumpleto na.</string>
- <string name="menu_settings">Settings</string>
+ <string name="menu_settings">Settings</string>
<string name="menu_log">Tala</string>
<string name="menu_start">Simulan</string>
<string name="menu_stop">Ihinto</string>
@@ -100,8 +98,7 @@
<string name="pref_use_expanded_notifications">Ipakita ang pinalaking notification kasama ng Tor exit country at IP</string>
<string name="pref_use_expanded_notifications_title">Pinalawak na Notifications</string>
<string name="set_locale_title">Wika</string>
- <string name="no_internet_connection_tor">Walang connection sa internet; Ang Tor ay naka-standby mode...</string>
- <string name="pref_disable_network_title">Walang Auto-Sleep sa Network</string>
+ <string name="pref_disable_network_title">Walang Auto-Sleep sa Network</string>
<string name="pref_disable_network_summary">Ilagay ang Tor sa sleep kapag walang internet na pwede</string>
<string name="newnym">Ikaw ay nagpalit ng bagong pagkakakilanlan sa Tor!</string>
<string name="kbps">kbps</string>
@@ -109,7 +106,6 @@
<string name="kb">KB</string>
<string name="mb">MB</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activate</string>
<string name="send_email">Send Email</string>
<string name="save">I-save</string>
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index aacfe85d..b21dee26 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Tor ağına bağlandı</string>
<string name="status_disabled">Orbot devre dışı bırakıldı</string>
<string name="status_shutting_down">Tor hizmeti kapatılıyor</string>
- <string name="tor_process_starting">Tor istemcisi başlatılıyor...</string>
- <string name="tor_process_complete">tamamlandı.</string>
<string name="menu_settings">Ayarlar</string>
<string name="menu_log">Günlük</string>
<string name="menu_start">Başlat</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Tor çıkış ülkesi ve IP adresi ile ilgili ayrıntılı bildirim görüntülensin</string>
<string name="pref_use_expanded_notifications_title">Ayrıntılı Bildirimler</string>
<string name="set_locale_title">Dil</string>
- <string name="no_internet_connection_tor">İnternet bağlantısı yok; Tor hazırda bekliyor...</string>
<string name="pref_disable_network_title">Bağlantı Olmadığında Otomatik Uyku</string>
<string name="pref_disable_network_summary">İnternet bağlantısı olmadığında Tor uyku kipine geçsin</string>
<string name="newnym">Yeni bir Tor kimliğine geçiş yaptınız!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Herhangi bir ağ bağlantısı yok. Tor uyutuluyor...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Ağ bağlantısı iyi. Tor uyandırılıyor... </string>
<string name="updating_settings_in_tor_service">Tor hizmet ayarları güncelleniyor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Tor SOCKS vekil sunucusu için kullanılacak kapı numarası (Varsayılan 9050, devre dışı bırakmak için 0)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Değişiklikleri etkinleştirmek için Orbot uygulamasını yeniden başlatın</string>
<string name="menu_qr">QR Kodları</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Tor kullanımı mobil ağınızda etkin olarak engelleniyorsa, Tor ağına erişmek için bir \'Köprü Sunucusu\' kullanabilirsiniz. Yapılandırmak ve denemek için aşağıdaki seçeneklerden birini seçin...</string>
- <string name="bridge_mode">Köprü Kipi</string>
<string name="get_bridges_email">E-posta</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Etkinleştir</string>
<string name="apps_mode">VPN Kipi</string>
<string name="send_email">E-posta Gönder</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Köprü adresini e-posta, web ya da QR kodu ile edinebilirsiniz. Köprü adresini istemek için aşağıdan \'E-posta\' ya da \'Web\' seçeneğini seçin. \n\nAdresi edindikten sonra kopyalayıp Orbot ayarlarındaki \"Köprüler\" alanına kopyalayın ve Orbot uygulamasını yeniden başlatın.</string>
- <string name="vpn_default_world">Genel (Otomatik)</string>
+ <string name="vpn_default_world">Genel (Otomatik)</string>
<string name="hidden_services">Gizli Hizmetler</string>
<string name="title_activity_hidden_services">Gizli Hizmetler</string>
<string name="menu_hidden_services">Gizli Hizmetler</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Pil kullanımı iyileştirmelerini etkinleştirmeyi düşünün</string>
<string name="pref_isolate_dest">Hedef adresleri yalıtılsın</string>
<string name="pref_isolate_dest_summary">Her ehdef adresi için farklı devre kullanılır</string>
- <string name="no_transproxy_warning_short">Uyarı: Saydam vekil sunucu özelliği artık desteklenmiyor</string>
- <string name="no_transproxy_warning">Uyarı: Saydam vekil sunucu özelliği artık desteklenmiyor. Onun yerine Orbot uygulamasının VPN özelliğini kullanın.</string>
<string name="pref_connection_padding">Bağlantı yastıklama</string>
<string name="pref_connection_padding_summary">Bazı trafik inceleme yöntemlerine karşı korunmayı sağlamak için her zaman bağlantı yastıklaması kullanılır. Varsayılan değer: Otomatik.</string>
<string name="pref_reduced_connection_padding">Azaltılmış bağlantı yastıklaması</string>
@@ -198,7 +188,6 @@
<string name="bridge_direct_connect">Doğrudan Tor ağına bağlanılsın (en iyisi)</string>
<string name="bridge_community">Topluluk sunucuları üzerinden bağlanılsın</string>
<string name="bridge_cloud">Bulut sunucular üzerinden bağlanılsın</string>
- <string name="bridges_get_new">Yeni Köprüler İsteyin... (hiçbir seçenek bağlanamıyorsa)</string>
<string name="trouble_connecting">Bağlanmakta sorun mu yaşıyorsunuz?</string>
<string name="full_device_vpn">Aygıt Geneli VPN</string>
<string name="vpn_disabled">VPN Devre Dışı</string>
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 8b2a4161..8f78937b 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Під\'єднаний до мережі Tor</string>
<string name="status_disabled">«Orbot» від\'єднаний</string>
<string name="status_shutting_down">Сервіси Тор деактивовані</string>
- <string name="tor_process_starting">Запускається клієнт Tor...</string>
- <string name="tor_process_complete">завершено.</string>
- <string name="menu_settings">Налаштування</string>
+ <string name="menu_settings">Налаштування</string>
<string name="menu_log">Журнал</string>
<string name="menu_start">Запустити</string>
<string name="menu_stop">Зупинити</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">Показати розширене сповіщення з країною виходу Tor та IP</string>
<string name="pref_use_expanded_notifications_title">Розширені сповіщення</string>
<string name="set_locale_title">Мова</string>
- <string name="no_internet_connection_tor">Немає інтернет-з\'єднання; Tor в режимі очікування…</string>
- <string name="pref_disable_network_title">Не використовувати режим сну</string>
+ <string name="pref_disable_network_title">Не використовувати режим сну</string>
<string name="pref_disable_network_summary">Переводити в режим сну при відсутності інтернет-з\'єднання</string>
<string name="newnym">Ви перемкнулись на новий ідентифікатор Tor!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Немає доступу до мережі інтернет. Tor переходить в режим сну…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Доступ до мережі хороший. Tor виходить з режиму сну…</string>
<string name="updating_settings_in_tor_service">оновлення налаштувань у сервісі Tor</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Порт, який Tor надає своєму SOCKS-проксі (за замовчуванням: 9050 або 0 для вимкнення)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">Будь ласка, перезапустіть Orbot, щоб зміни ввійшли в силу</string>
<string name="menu_qr">QR-коди</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Якщо ваша мобільна мережа активно блокує Tor, ви можете використовувати \'Bridge Server\' як альтернативний спосіб входу. ВИБЕРИ один із параметрів для налаштування та тестування...</string>
- <string name="bridge_mode">Режим мосту</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Веб</string>
<string name="activate">Активувати</string>
<string name="apps_mode">VPN Спосіб</string>
<string name="send_email">Надіслати листа</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Ви можете отримати адресу мосту через електронну пошту, веб або відсканувавши QR-код мосту. Оберіть «Email» чи «Веб» унизу, щоб подати запит на адресу мосту.\n\nКоли у Вас буде адреса, скопіюйте і вставте її у розділі «Мости» налаштувань Orbot і перезапустіть його.</string>
- <string name="vpn_default_world">Глобальний (автоматичний)</string>
+ <string name="vpn_default_world">Глобальний (автоматичний)</string>
<string name="hidden_services">Приховані Послуги</string>
<string name="title_activity_hidden_services">Приховані Послуги</string>
<string name="menu_hidden_services">Приховані Послуги</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">Розглянути увімкнення оптимізації акумулятора</string>
<string name="pref_isolate_dest">Ізолювати адреси призначення</string>
<string name="pref_isolate_dest_summary">Використати інакшу схему для кожної адреси призначення</string>
- <string name="no_transproxy_warning_short">ПОПЕРЕДЖЕННЯ: Транспроксінг більше не підтримується</string>
- <string name="no_transproxy_warning">ПОПЕРЕДЖЕННЯ. Прозорий проксинг не підтримується. Замість цього використовуйте Orbot Apps VPN.</string>
<string name="pref_connection_padding_summary">Завжди забезпечує заповнення підключення для захисту від деяких форм аналізу трафіку. За замовчуванням: автоматично</string>
<string name="app_shortcuts">Застосунки, що працюють з Tor</string>
<string name="testing_bridges">Тестування моста з\'єднання з Tor....</string>
@@ -195,7 +185,6 @@
<string name="bridge_direct_connect">Під\'єднання безпосередньо до Tor (Найкраще)</string>
<string name="bridge_community">Під\'єднання через сервери спільноти</string>
<string name="bridge_cloud">Під\'єднання через хмарні сервери</string>
- <string name="bridges_get_new">Запит нових мостів... (Якщо все інше не вдається)</string>
<string name="trouble_connecting">Проблеми з під\'єднанням?</string>
<string name="full_device_vpn">Цілком VPN-пристрій</string>
<string name="vpn_disabled">VPN Вимкнена</string>
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index d6945b59..cf4f5b03 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">Đã kết nối với mạng Tor</string>
<string name="status_disabled">Orbot đã được vô hiệu hóa</string>
<string name="status_shutting_down">Đang tắt dịch vụ Tor</string>
- <string name="tor_process_starting">Bắt đầu Tor</string>
- <string name="tor_process_complete">hoàn thành.</string>
- <string name="menu_settings">Thiết lập</string>
+ <string name="menu_settings">Thiết lập</string>
<string name="menu_log">Nhật ký</string>
<string name="menu_start">Bắt đầu</string>
<string name="menu_stop">Ngừng</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">Hiển thị thông báo mở rộng với IP và quốc gia của nút cuối (Tor exit-node)</string>
<string name="pref_use_expanded_notifications_title">Thông báo mở rộng</string>
<string name="set_locale_title">Ngôn ngữ</string>
- <string name="no_internet_connection_tor">Không có kết nối Internet; Tor đang ở chế độ chờ...</string>
- <string name="pref_disable_network_title">Tự động \"ngủ\" khi không có mạng</string>
+ <string name="pref_disable_network_title">Tự động \"ngủ\" khi không có mạng</string>
<string name="pref_disable_network_summary">Chuyển Tor sang chế độ ngủ nếu không có Internet</string>
<string name="newnym">Bạn đã chuyển sang một mạch Tor mới!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">Không có mạng. Đang chuyển Tor sang chế độ ngủ...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Kết nối mạng tốt. Đang \"đánh thức\" Tor...</string>
<string name="updating_settings_in_tor_service">đang cập nhật cài đặt dịch vụ Tor</string>
<string name="pref_socks_title">Cổng SOCKS</string>
<string name="pref_socks_summary">Cổng để Tor đặt proxy SOCKS lên (mặc định: 9050 hoặc 0 để vô hiệu hóa)</string>
@@ -128,13 +123,10 @@
<string name="bridges_updated">Bridge được cập nhật</string>
<string name="restart_orbot_to_use_this_bridge_">Vui lòng khởi động lại Orbot để áp dụng thay đổi</string>
<string name="menu_qr">Mã QR</string>
- <string name="bridge_mode">Chế độ bridge</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Kích hoạt</string>
<string name="send_email">Gửi email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Bạn có thể lấy một địa chỉ bridge qua email, web hoặc quét mã QR. Chọn \"Email\" hoặc \"Web\" bên dưới để yêu cầu một địa chỉ bridge.\n\nMột khi đã có địa chỉ, hãy sao chép nó vào thiết đặt \"Bridge\" trong cài đặt Orbot rồi khởi động lại phần mềm.</string>
- <string name="save">Lưu</string>
+ <string name="save">Lưu</string>
<string name="name">Tên</string>
<string name="please_restart_Orbot_to_enable_the_changes">Vui lòng khởi động lại Orbot để áp dụng thay đổi</string>
<string name="disable">Tắt</string>
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 33fb0153..82eeaeda 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">已连接到 Tor 网络</string>
<string name="status_disabled">Orbot 已停用</string>
<string name="status_shutting_down">Tor服务 正在关闭</string>
- <string name="tor_process_starting">正在启动 Tor 客户端...</string>
- <string name="tor_process_complete">完成。</string>
- <string name="menu_settings">设置</string>
+ <string name="menu_settings">设置</string>
<string name="menu_log">日志</string>
<string name="menu_start">启动</string>
<string name="menu_stop">停止</string>
@@ -102,12 +100,9 @@
<string name="pref_use_expanded_notifications">显示扩展的通知,有关 Tor 出口的国家和 IP</string>
<string name="pref_use_expanded_notifications_title">扩展的通知</string>
<string name="set_locale_title">语言</string>
- <string name="no_internet_connection_tor">没有互联网连接;Tor 处于待机状态…</string>
- <string name="pref_disable_network_title">无网络自动休眠</string>
+ <string name="pref_disable_network_title">无网络自动休眠</string>
<string name="pref_disable_network_summary">没有网络连接时,暂时停用 Tor</string>
<string name="newnym">已切换为新的 Tor 标识!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">没有网络连接;让 Tor 进入睡眠…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">网络连接良好。正在唤醒 Tor...</string>
<string name="updating_settings_in_tor_service">正在更新 Tor 服务中的设置</string>
<string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Tor 提供其 SOCKS 代理的端口 (默认: 9050, 0 禁用)</string>
@@ -128,15 +123,11 @@
<string name="bridges_updated">网桥已更新</string>
<string name="restart_orbot_to_use_this_bridge_">请重启 Orbot 以使变更生效</string>
<string name="menu_qr">QR码</string>
- <string name="bridge_mode">网桥模式</string>
<string name="get_bridges_email">电子邮件</string>
- <string name="get_bridges_web">网页</string>
<string name="activate">激活</string>
<string name="apps_mode">VPN 模式</string>
<string name="send_email">发送电子邮件</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">您可以通过电子邮件、网页或扫描网桥QR码来获取网桥地址。点击下方的“电子邮件”或“网页”按钮来获取网桥地址。
-当您获取到网桥地址后,请将其复制并粘贴到Orbot设置中的“网桥”一项并重新启动</string>
- <string name="save">保存</string>
+ <string name="save">保存</string>
<string name="name">名称</string>
<string name="please_restart_Orbot_to_enable_the_changes">请重启 Orbot 以使变更生效</string>
</resources>
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 0d7480b8..c48052c1 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -6,9 +6,7 @@
<string name="status_activated">已連線至 Tor 網路</string>
<string name="status_disabled">Orbot 已停用</string>
<string name="status_shutting_down">Tor服務 正在關閉</string>
- <string name="tor_process_starting">啟動Tor 用戶端...</string>
- <string name="tor_process_complete">完成。</string>
- <string name="menu_settings">設定</string>
+ <string name="menu_settings">設定</string>
<string name="menu_log">記錄檔</string>
<string name="menu_start">開始</string>
<string name="menu_stop">停止</string>
@@ -107,12 +105,9 @@
<string name="pref_use_expanded_notifications">在通知中顯示 Tor 出口點的國家和 IP</string>
<string name="pref_use_expanded_notifications_title">詳細的通知</string>
<string name="set_locale_title">語言</string>
- <string name="no_internet_connection_tor">沒有網路連線;Tor 待機中 ...</string>
- <string name="pref_disable_network_title">無網路時自動休眠</string>
+ <string name="pref_disable_network_title">無網路時自動休眠</string>
<string name="pref_disable_network_summary">當沒有網路可用時,讓 Tor 休眠</string>
<string name="newnym">您已切換到新的 Tor 身分!</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">沒有網路連線。正在叫 Tor 休眠 ...</string>
- <string name="network_connectivity_is_good_waking_tor_up_">網路連線良好,正在喚醒 Tor ...</string>
<string name="updating_settings_in_tor_service">更新 Tor 的設定</string>
<string name="pref_socks_title">Tor SOCKS 代理</string>
<string name="pref_socks_summary">Tor 提供 SOCKS 代理的連接埠 (預設:9050,若設為 0 則關閉)</string>
@@ -134,14 +129,11 @@
<string name="restart_orbot_to_use_this_bridge_">請重新啟動 Orbot 來讓設定生效。</string>
<string name="menu_qr">QR 碼</string>
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">如果行動網路主動地封鎖 Tor 可以使用\"橋接伺服器\"作為替代方式.選擇一個選項作設定和測試</string>
- <string name="bridge_mode">網橋模式</string>
<string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">啟用</string>
<string name="apps_mode">VPN 模式</string>
<string name="send_email">寄送電子信件</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">您可以透過 email 取得網橋位址,或者在網際網路上搜尋,或者掃描網橋的 QR 碼。在下面選擇 \'Email\' 或者 \'Web\' 來取得網橋位址。\n\n取得網橋位址後,將它複製貼上到「網橋」的設定項中,然後重新啟動 Orbot。</string>
- <string name="vpn_default_world">全域(自動)</string>
+ <string name="vpn_default_world">全域(自動)</string>
<string name="hidden_services">隱藏服務</string>
<string name="title_activity_hidden_services">隱藏服務</string>
<string name="menu_hidden_services">隱藏服務</string>
@@ -185,8 +177,6 @@
<string name="consider_enable_battery_optimizations">考慮開啟電池的最適化</string>
<string name="pref_isolate_dest">孤立目的地地址</string>
<string name="pref_isolate_dest_summary">每個目的地使用不同的電路</string>
- <string name="no_transproxy_warning_short">警告: 不再支援 Transproxying </string>
- <string name="no_transproxy_warning">警告: 不支援透明的代理, 請用 Orbot Apps VPN 替代</string>
<string name="pref_connection_padding">連接保護</string>
<string name="pref_connection_padding_summary">全部啟用連接保護以防止一些流量分析手段
默認: auto</string>
@@ -199,7 +189,6 @@
<string name="bridge_direct_connect">直接連上洋蔥路由網路(最佳)</string>
<string name="bridge_community">透過社區伺服器連接</string>
<string name="bridge_cloud">透過雲端伺服器連接</string>
- <string name="bridges_get_new">請求新的橋接... (如果其它都失敗)</string>
<string name="trouble_connecting">連線遇上問題?</string>
<string name="full_device_vpn">全設備 VPN</string>
<string name="vpn_disabled">VPN 關閉</string>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f3a8cbe6..8575b390 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -6,8 +6,6 @@
<string name="status_activated">Connected to the Tor network</string>
<string name="status_disabled">Orbot is deactivated</string>
<string name="status_shutting_down">TorService is shutting down</string>
- <string name="tor_process_starting">Starting Tor client…</string>
- <string name="tor_process_complete">complete.</string>
<string name="menu_settings">Settings</string>
<string name="menu_log">Log</string>
<string name="menu_start">Start</string>
@@ -118,7 +116,6 @@
<string name="pref_use_expanded_notifications_title">Expanded Notifications</string>
<string name="set_locale_title">Language</string>
- <string name="no_internet_connection_tor">No internet connection; Tor is on standby…</string>
<string name="pref_disable_network_title">No Network Auto-Sleep</string>
<string name="pref_disable_network_summary">Put Tor to sleep when there is no internet available</string>
<string name="newnym">You\'ve switched to a new Tor identity!</string>
@@ -126,8 +123,6 @@
<string name="pref_open_proxy_on_all_interfaces_title">Open Proxy on All Interfaces</string>
<string name="pref_open_proxy_on_all_interfaces_summary">Allow Wi-Fi peers, tethered devices and anyone else who can connect to your IP, to access Tor</string>
- <string name="no_network_connectivity_putting_tor_to_sleep_">No network connectivity. Putting Tor to sleep…</string>
- <string name="network_connectivity_is_good_waking_tor_up_">Network connectivity is good. Waking Tor up…</string>
<string name="updating_settings_in_tor_service">updating settings in Tor service</string>
<string name="pref_socks_title">Tor SOCKS</string>
@@ -169,11 +164,8 @@
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">If your mobile network actively blocks Tor, you can use a \'Bridge Server\' as an alternate way in. SELECT one of the options to configure and test...</string>
- <string name="bridge_mode">Request New Bridge</string>
-
<string name="get_bridges_email">Email</string>
<string name="get_bridges_email_request">Request Bridges via Email</string>
- <string name="get_bridges_web">Web</string>
<string name="activate">Activate</string>
@@ -181,8 +173,6 @@
<string name="send_email">Send Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">You can get a bridge address through email, the web or by scanning a bridge QR code. Select \'Email\' or \'Web\' below to request a bridge address.\n\nOnce you have an address, copy & paste it into the \"Bridges\" preference in Orbot\'s settings and restart.</string>
-
<string name="vpn_default_world">Global (Auto)</string>
<string name="hidden_services">Onion Services</string>
<string name="title_activity_hidden_services">Onion Services</string>
@@ -227,8 +217,6 @@
<string name="consider_enable_battery_optimizations">Consider enable battery optimizations</string>
<string name="pref_isolate_dest">Isolate destination addresses</string>
<string name="pref_isolate_dest_summary">Use a different circuit for each destination address</string>
- <string name="no_transproxy_warning_short">WARNING: Transproxying no longer supported</string>
- <string name="no_transproxy_warning">WARNING: Transparent proxying not supported. Use Orbot Apps VPN instead.</string>
<string name="pref_connection_padding">Connection padding</string>
<string name="pref_connection_padding_summary">Always enables connection padding to defend against some forms of traffic analysis. Default: auto</string>
<string name="pref_reduced_connection_padding">Reduced connection padding</string>
@@ -250,7 +238,6 @@
<string name="bridge_direct_connect">Connect directly to Tor (Best)</string>
<string name="bridge_community">Connect through community servers</string>
<string name="bridge_cloud">Connect through cloud servers</string>
- <string name="bridges_get_new">Request New Bridges via Email...</string>
<string name="trouble_connecting">Trouble connecting?</string>
<string name="full_device_vpn">Full Device VPN</string>
1
0
[orbot/master] set baselineAligned = false on main layout for better performance
by n8fr8@torproject.org 07 Oct '20
by n8fr8@torproject.org 07 Oct '20
07 Oct '20
commit 5dad571ed22b21c2a3dc430271fe3632754f80db
Author: bim <dsnake(a)protonmail.com>
Date: Wed Sep 23 12:21:30 2020 -0400
set baselineAligned = false on main layout for better performance
---
app/src/main/res/layout/layout_main.xml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/layout/layout_main.xml b/app/src/main/res/layout/layout_main.xml
index 7ff57108..1a76eb12 100644
--- a/app/src/main/res/layout/layout_main.xml
+++ b/app/src/main/res/layout/layout_main.xml
@@ -107,7 +107,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/lblPorts"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:baselineAligned="false">
<LinearLayout
android:layout_width="170dp"
@@ -156,7 +157,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/controls"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:baselineAligned="false">
<LinearLayout
android:layout_width="170dp"
1
0
07 Oct '20
commit 462f7dacd5c8058a6c74bc9566d2bc9848dd67e9
Author: bim <dsnake(a)protonmail.com>
Date: Thu Sep 24 00:44:07 2020 -0400
OrbotService does NOT need WRITE_EXTERNAL_STORAGE
(this sets us up to fully remove the permission on APIs 19+ after #395
is merged
---
orbotservice/src/main/AndroidManifest.xml | 2 --
1 file changed, 2 deletions(-)
diff --git a/orbotservice/src/main/AndroidManifest.xml b/orbotservice/src/main/AndroidManifest.xml
index 962fe09c..801a9c18 100644
--- a/orbotservice/src/main/AndroidManifest.xml
+++ b/orbotservice/src/main/AndroidManifest.xml
@@ -1,6 +1,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.torproject.android.service">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-
</manifest>
1
0
commit b12efdb779fe26c4b6d4c0d500b55d1fdced9d07
Author: bim <dsnake(a)protonmail.com>
Date: Tue Sep 15 20:35:00 2020 -0400
ran android studio IDE code formatter
---
.../java/org/torproject/android/MainConstants.java | 2 +-
.../main/java/org/torproject/android/OrbotApp.java | 2 +-
.../org/torproject/android/OrbotMainActivity.java | 307 ++--
.../torproject/android/ui/AppManagerActivity.java | 94 +-
.../android/ui/dialog/AboutDialogFragment.java | 33 +-
.../ui/onboarding/BridgeWizardActivity.java | 151 +-
.../ui/onboarding/CustomBridgesActivity.java | 32 +-
.../android/ui/onboarding/CustomSlideBigText.java | 7 +-
.../android/ui/onboarding/MoatActivity.java | 24 +-
.../torproject/android/service/OrbotConstants.java | 32 +-
.../torproject/android/service/OrbotService.java | 1552 +++++++++-----------
.../android/service/StartTorReceiver.java | 2 +-
.../android/service/TorEventHandler.java | 86 +-
.../android/service/TorServiceConstants.java | 1 -
.../android/service/util/CustomNativeLoader.java | 10 +-
.../android/service/util/CustomShell.java | 25 +-
.../service/util/CustomTorResourceInstaller.java | 164 +--
.../android/service/util/DummyActivity.java | 10 +-
.../android/service/util/ExternalIPFetcher.java | 26 +-
.../android/service/util/NativeLoader.java | 17 +-
.../android/service/util/PortForwarder.java | 20 +-
.../org/torproject/android/service/util/Prefs.java | 1 -
.../android/service/util/TCPSourceApp.java | 135 +-
.../android/service/util/TorServiceUtils.java | 8 +-
.../org/torproject/android/service/util/Utils.java | 326 ++--
.../android/service/vpn/OrbotVpnManager.java | 532 ++++---
.../android/service/vpn/TorifiedApp.java | 465 +++---
.../torproject/android/service/vpn/Tun2Socks.java | 88 +-
.../torproject/android/service/vpn/VpnUtils.java | 29 +-
29 files changed, 1917 insertions(+), 2264 deletions(-)
diff --git a/app/src/main/java/org/torproject/android/MainConstants.java b/app/src/main/java/org/torproject/android/MainConstants.java
index 06e99861..d3188308 100644
--- a/app/src/main/java/org/torproject/android/MainConstants.java
+++ b/app/src/main/java/org/torproject/android/MainConstants.java
@@ -3,7 +3,7 @@ package org.torproject.android;
public interface MainConstants {
//EXIT COUNTRY CODES
- String[] COUNTRY_CODES = {"DE","AT","SE","CH","IS","CA","US","ES","FR","BG","PL","AU","BR","CZ","DK","FI","GB","HU","NL","JP","RO","RU","SG","SK"};
+ String[] COUNTRY_CODES = {"DE", "AT", "SE", "CH", "IS", "CA", "US", "ES", "FR", "BG", "PL", "AU", "BR", "CZ", "DK", "FI", "GB", "HU", "NL", "JP", "RO", "RU", "SG", "SK"};
//path to check Tor against
String URL_TOR_CHECK = "https://check.torproject.org";
diff --git a/app/src/main/java/org/torproject/android/OrbotApp.java b/app/src/main/java/org/torproject/android/OrbotApp.java
index d037efa9..ca6459d0 100644
--- a/app/src/main/java/org/torproject/android/OrbotApp.java
+++ b/app/src/main/java/org/torproject/android/OrbotApp.java
@@ -4,10 +4,10 @@ import android.app.Application;
import android.content.Context;
import android.content.res.Configuration;
+import org.torproject.android.core.Languages;
import org.torproject.android.core.LocaleHelper;
import org.torproject.android.service.OrbotConstants;
import org.torproject.android.service.util.Prefs;
-import org.torproject.android.core.Languages;
import java.util.Locale;
diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index 61b6333d..2e7809f1 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -4,7 +4,6 @@
package org.torproject.android;
import android.app.AlertDialog;
-
import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
@@ -54,17 +53,17 @@ import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import org.json.JSONArray;
+import org.torproject.android.core.Languages;
import org.torproject.android.core.LocaleHelper;
+import org.torproject.android.core.ui.Rotate3dAnimation;
+import org.torproject.android.core.ui.SettingsPreferencesActivity;
import org.torproject.android.service.OrbotConstants;
import org.torproject.android.service.OrbotService;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.Prefs;
import org.torproject.android.service.util.Utils;
import org.torproject.android.service.vpn.VpnPrefs;
-import org.torproject.android.core.Languages;
-import org.torproject.android.core.ui.SettingsPreferencesActivity;
import org.torproject.android.ui.AppManagerActivity;
-import org.torproject.android.core.ui.Rotate3dAnimation;
import org.torproject.android.ui.dialog.AboutDialogFragment;
import org.torproject.android.ui.hiddenservices.ClientCookiesActivity;
import org.torproject.android.ui.hiddenservices.HiddenServicesActivity;
@@ -98,49 +97,149 @@ import static org.torproject.android.service.vpn.VpnPrefs.PREFS_KEY_TORIFIED;
public class OrbotMainActivity extends AppCompatActivity implements OrbotConstants {
+ public final static String INTENT_ACTION_REQUEST_HIDDEN_SERVICE = "org.torproject.android.REQUEST_HS_PORT";
+ public final static String INTENT_ACTION_REQUEST_START_TOR = "org.torproject.android.START_TOR";
+ private final static int REQUEST_VPN = 8888;
+ private final static int REQUEST_SETTINGS = 0x9874;
+ private final static int REQUEST_VPN_APPS_SELECT = 8889;
+ private final static int LOG_DRAWER_GRAVITY = GravityCompat.END;
+ // message types for mStatusUpdateHandler
+ private final static int STATUS_UPDATE = 1;
+ private static final int MESSAGE_TRAFFIC_COUNT = 2;
+ private static final int MESSAGE_PORTS = 3;
+ private static final float ROTATE_FROM = 0.0f;
+ private static final float ROTATE_TO = 360.0f * 4f;// 3.141592654f * 32.0f;
+ PulsatorLayout mPulsator;
+ AlertDialog aDialog = null;
/* Useful UI bits */
private TextView lblStatus = null; //the main text display widget
private TextView lblPorts = null;
private ImageView imgStatus = null; //the main touchable image for activating Orbot
-
private TextView downloadText = null;
private TextView uploadText = null;
private TextView mTxtOrbotLog = null;
-
private Button mBtnStart = null;
-
private SwitchCompat mBtnVPN = null;
private SwitchCompat mBtnBridges = null;
-
private Spinner spnCountries = null;
-
private DrawerLayout mDrawer;
-
/* Some tracking bits */
private String torStatus = null; //latest status reported from the tor service
private Intent lastStatusIntent; // the last ACTION_STATUS Intent received
-
private SharedPreferences mPrefs = null;
-
private boolean autoStartFromIntent = false;
+ // this is what takes messages or values from the callback threads or other non-mainUI threads
+//and passes them back into the main UI thread for display to the user
+ private Handler mStatusUpdateHandler = new Handler() {
- private final static int REQUEST_VPN = 8888;
- private final static int REQUEST_SETTINGS = 0x9874;
- private final static int REQUEST_VPN_APPS_SELECT = 8889;
+ @Override
+ public void handleMessage(final Message msg) {
- private final static int LOG_DRAWER_GRAVITY = GravityCompat.END;
- // message types for mStatusUpdateHandler
- private final static int STATUS_UPDATE = 1;
- private static final int MESSAGE_TRAFFIC_COUNT = 2;
- private static final int MESSAGE_PORTS = 3;
+ Bundle data = msg.getData();
+ switch (msg.what) {
+ case MESSAGE_TRAFFIC_COUNT:
- public final static String INTENT_ACTION_REQUEST_HIDDEN_SERVICE = "org.torproject.android.REQUEST_HS_PORT";
- public final static String INTENT_ACTION_REQUEST_START_TOR = "org.torproject.android.START_TOR";
+ DataCount datacount = new DataCount(data.getLong("upload"), data.getLong("download"));
+ long totalRead = data.getLong("readTotal");
+ long totalWrite = data.getLong("writeTotal");
- PulsatorLayout mPulsator;
+ downloadText.setText(String.format("%s / %s", formatCount(datacount.Download), formatTotal(totalRead)));
+ uploadText.setText(String.format("%s / %s", formatCount(datacount.Upload), formatTotal(totalWrite)));
+
+ break;
+ case MESSAGE_PORTS:
+
+ int socksPort = data.getInt("socks");
+ int httpPort = data.getInt("http");
+
+ lblPorts.setText(String.format(Locale.getDefault(), "SOCKS: %d | HTTP: %d", socksPort, httpPort));
+
+ break;
+ default:
+ String newTorStatus = msg.getData().getString("status");
+ String log = (String) msg.obj;
+
+ if (torStatus == null && newTorStatus != null) //first time status
+ {
+ findViewById(R.id.frameMain).setVisibility(View.VISIBLE);
+ updateStatus(log, newTorStatus);
+
+ } else
+ updateStatus(log, newTorStatus);
+ super.handleMessage(msg);
+ break;
+ }
+ }
+ };
+ /**
+ * The state and log info from {@link OrbotService} are sent to the UI here in
+ * the form of a local broadcast. Regular broadcasts can be sent by any app,
+ * so local ones are used here so other apps cannot interfere with Orbot's
+ * operation.
+ */
+ private BroadcastReceiver mLocalBroadcastReceiver = new BroadcastReceiver() {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (action == null)
+ return;
+
+ switch (action) {
+ case TorServiceConstants.LOCAL_ACTION_LOG: {
+ Message msg = mStatusUpdateHandler.obtainMessage(STATUS_UPDATE);
+ msg.obj = intent.getStringExtra(TorServiceConstants.LOCAL_EXTRA_LOG);
+ msg.getData().putString("status", intent.getStringExtra(TorServiceConstants.EXTRA_STATUS));
+ mStatusUpdateHandler.sendMessage(msg);
+
+ break;
+ }
+ case TorServiceConstants.LOCAL_ACTION_BANDWIDTH: {
+ long upload = intent.getLongExtra("up", 0);
+ long download = intent.getLongExtra("down", 0);
+ long written = intent.getLongExtra("written", 0);
+ long read = intent.getLongExtra("read", 0);
+
+ Message msg = mStatusUpdateHandler.obtainMessage(MESSAGE_TRAFFIC_COUNT);
+ msg.getData().putLong("download", download);
+ msg.getData().putLong("upload", upload);
+ msg.getData().putLong("readTotal", read);
+ msg.getData().putLong("writeTotal", written);
+ msg.getData().putString("status", intent.getStringExtra(TorServiceConstants.EXTRA_STATUS));
+
+ mStatusUpdateHandler.sendMessage(msg);
+
+ break;
+ }
+ case TorServiceConstants.ACTION_STATUS: {
+ lastStatusIntent = intent;
+
+ Message msg = mStatusUpdateHandler.obtainMessage(STATUS_UPDATE);
+ msg.getData().putString("status", intent.getStringExtra(TorServiceConstants.EXTRA_STATUS));
+
+ mStatusUpdateHandler.sendMessage(msg);
+ break;
+ }
+ case TorServiceConstants.LOCAL_ACTION_PORTS: {
+
+ Message msg = mStatusUpdateHandler.obtainMessage(MESSAGE_PORTS);
+ msg.getData().putInt("socks", intent.getIntExtra(OrbotService.EXTRA_SOCKS_PROXY_PORT, -1));
+ msg.getData().putInt("http", intent.getIntExtra(OrbotService.EXTRA_HTTP_PROXY_PORT, -1));
+
+ mStatusUpdateHandler.sendMessage(msg);
+
+ break;
+ }
+ case ACTION_STOP_VPN: {
+ mBtnVPN.setChecked(false);
+ break;
+ }
+ }
+ }
+ };
private void migratePreferences() {
String hsPortString = mPrefs.getString("pref_hs_ports", "");
@@ -225,73 +324,6 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
}
- /**
- * The state and log info from {@link OrbotService} are sent to the UI here in
- * the form of a local broadcast. Regular broadcasts can be sent by any app,
- * so local ones are used here so other apps cannot interfere with Orbot's
- * operation.
- */
- private BroadcastReceiver mLocalBroadcastReceiver = new BroadcastReceiver() {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action == null)
- return;
-
- switch (action) {
- case TorServiceConstants.LOCAL_ACTION_LOG: {
- Message msg = mStatusUpdateHandler.obtainMessage(STATUS_UPDATE);
- msg.obj = intent.getStringExtra(TorServiceConstants.LOCAL_EXTRA_LOG);
- msg.getData().putString("status", intent.getStringExtra(TorServiceConstants.EXTRA_STATUS));
- mStatusUpdateHandler.sendMessage(msg);
-
- break;
- }
- case TorServiceConstants.LOCAL_ACTION_BANDWIDTH: {
- long upload = intent.getLongExtra("up", 0);
- long download = intent.getLongExtra("down", 0);
- long written = intent.getLongExtra("written", 0);
- long read = intent.getLongExtra("read", 0);
-
- Message msg = mStatusUpdateHandler.obtainMessage(MESSAGE_TRAFFIC_COUNT);
- msg.getData().putLong("download", download);
- msg.getData().putLong("upload", upload);
- msg.getData().putLong("readTotal", read);
- msg.getData().putLong("writeTotal", written);
- msg.getData().putString("status", intent.getStringExtra(TorServiceConstants.EXTRA_STATUS));
-
- mStatusUpdateHandler.sendMessage(msg);
-
- break;
- }
- case TorServiceConstants.ACTION_STATUS: {
- lastStatusIntent = intent;
-
- Message msg = mStatusUpdateHandler.obtainMessage(STATUS_UPDATE);
- msg.getData().putString("status", intent.getStringExtra(TorServiceConstants.EXTRA_STATUS));
-
- mStatusUpdateHandler.sendMessage(msg);
- break;
- }
- case TorServiceConstants.LOCAL_ACTION_PORTS: {
-
- Message msg = mStatusUpdateHandler.obtainMessage(MESSAGE_PORTS);
- msg.getData().putInt("socks", intent.getIntExtra(OrbotService.EXTRA_SOCKS_PROXY_PORT, -1));
- msg.getData().putInt("http", intent.getIntExtra(OrbotService.EXTRA_HTTP_PROXY_PORT, -1));
-
- mStatusUpdateHandler.sendMessage(msg);
-
- break;
- }
- case ACTION_STOP_VPN: {
- mBtnVPN.setChecked(false);
- break;
- }
- }
- }
- };
-
private void doLayout() {
setContentView(R.layout.layout_main);
@@ -443,7 +475,6 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
return true;
}
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.menu_newnym) {
@@ -508,7 +539,6 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
}
}
-
@Override
public void onBackPressed() {
// check to see if the log is open, if so close it
@@ -875,7 +905,6 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
}
-
private void enableBridges(boolean enable) {
Prefs.putBridgesEnabled(enable);
@@ -932,8 +961,6 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
mBtnVPN.setChecked(Prefs.useVpn());
}
- AlertDialog aDialog = null;
-
//general alert dialog for mostly Tor warning messages
//sometimes this can go haywire or crazy with too many error
//messages from Tor, and the user cannot stop or exit Orbot
@@ -1075,54 +1102,6 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
sendIntentToService(TorServiceConstants.ACTION_STATUS);
}
-
- // this is what takes messages or values from the callback threads or other non-mainUI threads
-//and passes them back into the main UI thread for display to the user
- private Handler mStatusUpdateHandler = new Handler() {
-
- @Override
- public void handleMessage(final Message msg) {
-
-
- Bundle data = msg.getData();
-
- switch (msg.what) {
- case MESSAGE_TRAFFIC_COUNT:
-
- DataCount datacount = new DataCount(data.getLong("upload"), data.getLong("download"));
-
- long totalRead = data.getLong("readTotal");
- long totalWrite = data.getLong("writeTotal");
-
- downloadText.setText(String.format("%s / %s", formatCount(datacount.Download), formatTotal(totalRead)));
- uploadText.setText(String.format("%s / %s", formatCount(datacount.Upload), formatTotal(totalWrite)));
-
- break;
- case MESSAGE_PORTS:
-
- int socksPort = data.getInt("socks");
- int httpPort = data.getInt("http");
-
- lblPorts.setText(String.format(Locale.getDefault(), "SOCKS: %d | HTTP: %d", socksPort, httpPort));
-
- break;
- default:
- String newTorStatus = msg.getData().getString("status");
- String log = (String) msg.obj;
-
- if (torStatus == null && newTorStatus != null) //first time status
- {
- findViewById(R.id.frameMain).setVisibility(View.VISIBLE);
- updateStatus(log, newTorStatus);
-
- } else
- updateStatus(log, newTorStatus);
- super.handleMessage(msg);
- break;
- }
- }
- };
-
@Override
protected void onDestroy() {
super.onDestroy();
@@ -1130,18 +1109,6 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
LocalBroadcastManager.getInstance(this).unregisterReceiver(mLocalBroadcastReceiver);
}
- public static class DataCount {
- // data uploaded
- long Upload;
- // data downloaded
- long Download;
-
- DataCount(long Upload, long Download) {
- this.Upload = Upload;
- this.Download = Download;
- }
- }
-
private String formatCount(long count) {
NumberFormat numberFormat = NumberFormat.getInstance(Locale.getDefault());
// Converts the supplied argument into a string.
@@ -1170,9 +1137,6 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
+ getString(R.string.mb);
}
- private static final float ROTATE_FROM = 0.0f;
- private static final float ROTATE_TO = 360.0f * 4f;// 3.141592654f * 32.0f;
-
private void requestNewTorIdentity() {
sendIntentToService(TorServiceConstants.CMD_NEWNYM);
@@ -1251,7 +1215,6 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
iv.setOnClickListener(v -> startActivityForResult(new Intent(OrbotMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT));
}
-
private void addFullDeviceVpnView(LinearLayout llBoxShortcuts) {
TextView tv = new TextView(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
@@ -1262,20 +1225,30 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
- private void exportTorData ()
- {
+ private void exportTorData() {
File fileTorData = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
- fileTorData = new File(getDataDir(),DIRECTORY_TOR_DATA);
- }
- else {
+ fileTorData = new File(getDataDir(), DIRECTORY_TOR_DATA);
+ } else {
fileTorData = getDir(DIRECTORY_TOR_DATA, Application.MODE_PRIVATE);
}
- File fileZip = new File(getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS),"orbotdata" + new Date().getTime() + ".zip");
+ File fileZip = new File(getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), "orbotdata" + new Date().getTime() + ".zip");
Utils.zipFileAtPath(fileTorData.getAbsolutePath(), fileZip.getAbsolutePath());
- fileZip.setReadable(true,false);
- Log.d (TAG,"debugdata: " + fileZip.getAbsolutePath());
+ fileZip.setReadable(true, false);
+ Log.d(TAG, "debugdata: " + fileZip.getAbsolutePath());
+
+ }
+
+ public static class DataCount {
+ // data uploaded
+ long Upload;
+ // data downloaded
+ long Download;
+ DataCount(long Upload, long Download) {
+ this.Upload = Upload;
+ this.Download = Download;
+ }
}
}
diff --git a/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java b/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
index 07c36ac7..1871a061 100644
--- a/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
@@ -12,7 +12,6 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Bundle;
-import androidx.appcompat.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -28,6 +27,8 @@ import android.widget.ListAdapter;
import android.widget.ProgressBar;
import android.widget.TextView;
+import androidx.appcompat.app.AppCompatActivity;
+
import org.torproject.android.BuildConfig;
import org.torproject.android.R;
import org.torproject.android.service.OrbotConstants;
@@ -45,10 +46,19 @@ import static org.torproject.android.service.vpn.VpnPrefs.PREFS_KEY_TORIFIED;
public class AppManagerActivity extends AppCompatActivity implements OnClickListener, OrbotConstants {
+ static ArrayList<TorifiedApp> mApps = null;
+ PackageManager pMgr = null;
+ SharedPreferences mPrefs = null;
private GridView listApps;
private ListAdapter adapterApps;
private ProgressBar progressBar;
- PackageManager pMgr = null;
+
+ // returns true if the given app is enabled and not orbot
+ public static boolean includeAppInUi(ApplicationInfo applicationInfo) {
+ if (!applicationInfo.enabled) return false;
+ if (BuildConfig.APPLICATION_ID.equals(applicationInfo.packageName)) return false;
+ return true;
+ }
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -62,7 +72,6 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
progressBar = findViewById(R.id.progressBar);
}
-
@Override
protected void onResume() {
super.onResume();
@@ -70,7 +79,6 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
reloadApps();
}
-
/*
* Create the UI Options Menu (non-Javadoc)
* @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
@@ -83,16 +91,13 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
return true;
}
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == R.id.menu_refresh_apps)
- {
+ if (item.getItemId() == R.id.menu_refresh_apps) {
mApps = null;
reloadApps();
- }
- else if (item.getItemId() == android.R.id.home) {
+ } else if (item.getItemId() == android.R.id.home) {
finish();
return true;
}
@@ -100,16 +105,18 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
return super.onOptionsItemSelected(item);
}
- private void reloadApps () {
+ private void reloadApps() {
new AsyncTask<Void, Void, Void>() {
protected void onPreExecute() {
// Pre Code
progressBar.setVisibility(View.VISIBLE);
}
+
protected Void doInBackground(Void... unused) {
loadApps(mPrefs);
return null;
}
+
protected void onPostExecute(Void unused) {
listApps.setAdapter(adapterApps);
progressBar.setVisibility(View.GONE);
@@ -119,10 +126,7 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
}
- SharedPreferences mPrefs = null;
- static ArrayList<TorifiedApp> mApps = null;
-
- private void loadApps (SharedPreferences prefs) {
+ private void loadApps(SharedPreferences prefs) {
if (mApps == null)
mApps = getApps(prefs);
@@ -139,7 +143,7 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
final LayoutInflater inflater = getLayoutInflater();
- adapterApps = new ArrayAdapter<TorifiedApp>(this, R.layout.layout_apps_item, R.id.itemtext,mApps) {
+ adapterApps = new ArrayAdapter<TorifiedApp>(this, R.layout.layout_apps_item, R.id.itemtext, mApps) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
@@ -194,23 +198,16 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
}
- private static class ListEntry {
- private CheckBox box;
- private TextView text;
- private ImageView icon;
- }
-
public ArrayList<TorifiedApp> getApps(SharedPreferences prefs) {
String tordAppString = prefs.getString(PREFS_KEY_TORIFIED, "");
String[] tordApps;
- StringTokenizer st = new StringTokenizer(tordAppString,"|");
+ StringTokenizer st = new StringTokenizer(tordAppString, "|");
tordApps = new String[st.countTokens()];
int tordIdx = 0;
- while (st.hasMoreTokens())
- {
+ while (st.hasMoreTokens()) {
tordApps[tordIdx++] = st.nextToken();
}
Arrays.sort(tordApps);
@@ -225,8 +222,7 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
TorifiedApp app;
- while (itAppInfo.hasNext())
- {
+ while (itAppInfo.hasNext()) {
aInfo = itAppInfo.next();
if (!includeAppInUi(aInfo)) continue;
app = new TorifiedApp();
@@ -235,12 +231,9 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
try {
PackageInfo pInfo = pMgr.getPackageInfo(aInfo.packageName, PackageManager.GET_PERMISSIONS);
- if (pInfo != null && pInfo.requestedPermissions != null)
- {
- for (String permInfo:pInfo.requestedPermissions)
- {
- if (permInfo.equals(Manifest.permission.INTERNET))
- {
+ if (pInfo != null && pInfo.requestedPermissions != null) {
+ for (String permInfo : pInfo.requestedPermissions) {
+ if (permInfo.equals(Manifest.permission.INTERNET)) {
app.setUsesInternet(true);
}
}
@@ -252,12 +245,9 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
e.printStackTrace();
}
- try
- {
+ try {
app.setName(pMgr.getApplicationLabel(aInfo).toString());
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
// no name
continue; //we only show apps with names
}
@@ -265,8 +255,7 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
if (!app.usesInternet())
continue;
- else
- {
+ else {
apps.add(app);
}
@@ -280,9 +269,7 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
// check if this application is allowed
if (Arrays.binarySearch(tordApps, app.getUsername()) >= 0) {
app.setTorified(true);
- }
- else
- {
+ } else {
app.setTorified(false);
}
@@ -299,13 +286,11 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
StringBuilder tordApps = new StringBuilder();
Intent response = new Intent();
- for (TorifiedApp tApp:mApps)
- {
- if (tApp.isTorified())
- {
+ for (TorifiedApp tApp : mApps) {
+ if (tApp.isTorified()) {
tordApps.append(tApp.getUsername());
tordApps.append("|");
- response.putExtra(tApp.getUsername(),true);
+ response.putExtra(tApp.getUsername(), true);
}
}
@@ -313,7 +298,7 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
edit.putString(PREFS_KEY_TORIFIED, tordApps.toString());
edit.commit();
- setResult(RESULT_OK,response);
+ setResult(RESULT_OK, response);
}
@@ -322,9 +307,9 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
CheckBox cbox = null;
if (v instanceof CheckBox)
- cbox = (CheckBox)v;
+ cbox = (CheckBox) v;
else if (v.getTag() instanceof CheckBox)
- cbox = (CheckBox)v.getTag();
+ cbox = (CheckBox) v.getTag();
if (cbox != null) {
final TorifiedApp app = (TorifiedApp) cbox.getTag();
@@ -337,11 +322,10 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
}
}
- // returns true if the given app is enabled and not orbot
- public static boolean includeAppInUi(ApplicationInfo applicationInfo) {
- if (!applicationInfo.enabled) return false;
- if (BuildConfig.APPLICATION_ID.equals(applicationInfo.packageName)) return false;
- return true;
+ private static class ListEntry {
+ private CheckBox box;
+ private TextView text;
+ private ImageView icon;
}
}
diff --git a/app/src/main/java/org/torproject/android/ui/dialog/AboutDialogFragment.java b/app/src/main/java/org/torproject/android/ui/dialog/AboutDialogFragment.java
index 10ad06b6..d83b556e 100644
--- a/app/src/main/java/org/torproject/android/ui/dialog/AboutDialogFragment.java
+++ b/app/src/main/java/org/torproject/android/ui/dialog/AboutDialogFragment.java
@@ -21,9 +21,23 @@ import java.io.InputStreamReader;
public class AboutDialogFragment extends DialogFragment {
public static final String TAG = AboutDialogFragment.class.getSimpleName();
-
- private TextView tvAbout;
private static final String BUNDLE_KEY_TV_ABOUT_TEXT = "about_tv_txt";
+ private TextView tvAbout;
+
+ @SuppressWarnings("SameParameterValue")
+ private static String readFromAssets(Context context, String filename) throws IOException {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(context.getAssets().open(filename)));
+
+ // do reading, usually loop until end of file reading
+ StringBuilder sb = new StringBuilder();
+ String mLine = reader.readLine();
+ while (mLine != null) {
+ sb.append(mLine).append('\n'); // process line
+ mLine = reader.readLine();
+ }
+ reader.close();
+ return sb.toString();
+ }
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
@@ -67,21 +81,6 @@ public class AboutDialogFragment extends DialogFragment {
.create();
}
- @SuppressWarnings("SameParameterValue")
- private static String readFromAssets(Context context, String filename) throws IOException {
- BufferedReader reader = new BufferedReader(new InputStreamReader(context.getAssets().open(filename)));
-
- // do reading, usually loop until end of file reading
- StringBuilder sb = new StringBuilder();
- String mLine = reader.readLine();
- while (mLine != null) {
- sb.append(mLine).append('\n'); // process line
- mLine = reader.readLine();
- }
- reader.close();
- return sb.toString();
- }
-
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
index d8f35f86..4ffb7d36 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
@@ -33,19 +33,45 @@ public class BridgeWizardActivity extends AppCompatActivity {
private static final int MOAT_REQUEST_CODE = 666;
private static final int CUSTOM_BRIDGES_REQUEST_CODE = 1312;
-
+ private static final String BUNDLE_KEY_TV_STATUS_VISIBILITY = "visibility";
+ private static final String BUNDLE_KEY_TV_STATUS_TEXT = "text";
private static TextView mTvStatus;
private static HostTester runningHostTest;
-
private RadioButton mBtDirect;
private RadioButton mBtObfs4;
private RadioButton mBtMeek;
private RadioButton mBtCustom;
-
private View mBtnConfgiureCustomBridges;
- private static final String BUNDLE_KEY_TV_STATUS_VISIBILITY = "visibility";
- private static final String BUNDLE_KEY_TV_STATUS_TEXT = "text";
+ @SuppressWarnings("SameParameterValue")
+ private static boolean isHostReachable(String serverAddress, int serverTCPport, int timeoutMS) {
+ boolean connected = false;
+
+ try {
+ Socket socket = new Socket();
+ SocketAddress socketAddress = new InetSocketAddress(serverAddress, serverTCPport);
+ socket.connect(socketAddress, timeoutMS);
+ if (socket.isConnected()) {
+ connected = true;
+ socket.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return connected;
+ }
+
+ private static void cancelHostTestIfRunning() {
+ if (runningHostTest != null) {
+ runningHostTest.cancel(true);
+ runningHostTest = null;
+ }
+ }
+
+ private static boolean noBridgesSet() {
+ return !Prefs.bridgesEnabled() || Prefs.getBridgesList().trim().equals("");
+ }
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -166,34 +192,30 @@ public class BridgeWizardActivity extends AppCompatActivity {
ArrayList alBridges = new ArrayList<String>();
- try
- {
- BufferedReader in=
+ try {
+ BufferedReader in =
new BufferedReader(new InputStreamReader(getResources().openRawResource(org.torproject.android.service.R.raw.bridges), "UTF-8"));
String str;
- while ((str=in.readLine()) != null) {
+ while ((str = in.readLine()) != null) {
- StringTokenizer st = new StringTokenizer (str," ");
+ StringTokenizer st = new StringTokenizer(str, " ");
String type = st.nextToken();
if (type.equals("obfs4")) {
String[] hostport = st.nextToken().split(":");
- hostTester.execute(hostport[0],hostport[1]);
+ hostTester.execute(hostport[0], hostport[1]);
break;
}
}
in.close();
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
e.printStackTrace();
}
-
} else {
hostTester = null;
mTvStatus.setText("");
@@ -201,6 +223,39 @@ public class BridgeWizardActivity extends AppCompatActivity {
if (hostTester != null) runningHostTest = hostTester;
}
+ @Override
+ public void onSaveInstanceState(Bundle savedInstanceState) {
+
+ if (mTvStatus != null) {
+ savedInstanceState.putInt(BUNDLE_KEY_TV_STATUS_VISIBILITY, mTvStatus.getVisibility());
+
+ if (!TextUtils.isEmpty(mTvStatus.getText()))
+ savedInstanceState.putString(BUNDLE_KEY_TV_STATUS_TEXT, mTvStatus.getText().toString());
+ }
+
+ super.onSaveInstanceState(savedInstanceState);
+ }
+
+ @Override
+ public void onDestroy() {
+ cancelHostTestIfRunning();
+ mTvStatus = null;
+ super.onDestroy();
+ }
+
+ private void evaluateBridgeListState() {
+ Log.d(getClass().getSimpleName(), String.format("bridgesEnabled=%b, bridgesList=%s", Prefs.bridgesEnabled(), Prefs.getBridgesList()));
+ if (noBridgesSet()) {
+ mBtDirect.setChecked(true);
+ } else if (Prefs.getBridgesList().equals("meek")) {
+ mBtMeek.setChecked(true);
+ } else if (Prefs.getBridgesList().equals("obfs4")) {
+ mBtObfs4.setChecked(true);
+ } else {
+ mBtCustom.setChecked(true);
+ }
+ }
+
private class HostTester extends AsyncTask<String, Void, Boolean> {
@Override
protected void onPreExecute() {
@@ -231,8 +286,7 @@ public class BridgeWizardActivity extends AppCompatActivity {
@Override
protected void onPostExecute(Boolean result) {
// Post Code
- if (mTvStatus != null)
- {
+ if (mTvStatus != null) {
runningHostTest = null;
if (result) {
int stringRes = mBtDirect.isChecked() ? R.string.testing_tor_direct_success : R.string.testing_bridges_success;
@@ -243,67 +297,4 @@ public class BridgeWizardActivity extends AppCompatActivity {
}
}
}
-
- @Override
- public void onSaveInstanceState(Bundle savedInstanceState) {
-
- if (mTvStatus != null) {
- savedInstanceState.putInt(BUNDLE_KEY_TV_STATUS_VISIBILITY, mTvStatus.getVisibility());
-
- if (!TextUtils.isEmpty(mTvStatus.getText()))
- savedInstanceState.putString(BUNDLE_KEY_TV_STATUS_TEXT, mTvStatus.getText().toString());
- }
-
- super.onSaveInstanceState(savedInstanceState);
- }
-
- @Override
- public void onDestroy() {
- cancelHostTestIfRunning();
- mTvStatus = null;
- super.onDestroy();
- }
-
- @SuppressWarnings("SameParameterValue")
- private static boolean isHostReachable(String serverAddress, int serverTCPport, int timeoutMS) {
- boolean connected = false;
-
- try {
- Socket socket = new Socket();
- SocketAddress socketAddress = new InetSocketAddress(serverAddress, serverTCPport);
- socket.connect(socketAddress, timeoutMS);
- if (socket.isConnected()) {
- connected = true;
- socket.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- return connected;
- }
-
- private void evaluateBridgeListState() {
- Log.d(getClass().getSimpleName(), String.format("bridgesEnabled=%b, bridgesList=%s", Prefs.bridgesEnabled(), Prefs.getBridgesList()));
- if (noBridgesSet()) {
- mBtDirect.setChecked(true);
- } else if (Prefs.getBridgesList().equals("meek")) {
- mBtMeek.setChecked(true);
- } else if (Prefs.getBridgesList().equals("obfs4")) {
- mBtObfs4.setChecked(true);
- } else {
- mBtCustom.setChecked(true);
- }
- }
-
- private static void cancelHostTestIfRunning() {
- if (runningHostTest != null) {
- runningHostTest.cancel(true);
- runningHostTest = null;
- }
- }
-
- private static boolean noBridgesSet() {
- return !Prefs.bridgesEnabled() || Prefs.getBridgesList().trim().equals("");
- }
}
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java
index c581fd53..6d8ec842 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java
@@ -46,6 +46,22 @@ public class CustomBridgesActivity extends AppCompatActivity implements View.OnC
private EditText mEtPastedBridges;
+ // configures an EditText we assume to be multiline and nested in a ScrollView to be independently scrollable
+ @SuppressLint("ClickableViewAccessibility")
+ private static void configureMultilineEditTextInScrollView(EditText et) {
+ et.setVerticalScrollBarEnabled(true);
+ et.setOverScrollMode(View.OVER_SCROLL_ALWAYS);
+ et.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
+ et.setMovementMethod(ScrollingMovementMethod.getInstance());
+ et.setOnTouchListener((v, event) -> {
+ v.getParent().requestDisallowInterceptTouchEvent(true);
+ if ((event.getAction() & MotionEvent.ACTION_UP) != 0 && (event.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
+ v.getParent().requestDisallowInterceptTouchEvent(false);
+ }
+ return false;
+ });
+ }
+
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -218,20 +234,4 @@ public class CustomBridgesActivity extends AppCompatActivity implements View.OnC
intent.setAction(TorServiceConstants.CMD_SIGNAL_HUP);
startService(intent);
}
-
- // configures an EditText we assume to be multiline and nested in a ScrollView to be independently scrollable
- @SuppressLint("ClickableViewAccessibility")
- private static void configureMultilineEditTextInScrollView(EditText et) {
- et.setVerticalScrollBarEnabled(true);
- et.setOverScrollMode(View.OVER_SCROLL_ALWAYS);
- et.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
- et.setMovementMethod(ScrollingMovementMethod.getInstance());
- et.setOnTouchListener((v, event) -> {
- v.getParent().requestDisallowInterceptTouchEvent(true);
- if ((event.getAction() & MotionEvent.ACTION_UP) != 0 && (event.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
- v.getParent().requestDisallowInterceptTouchEvent(false);
- }
- return false;
- });
- }
}
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/CustomSlideBigText.java b/app/src/main/java/org/torproject/android/ui/onboarding/CustomSlideBigText.java
index c5d21efa..0b4ec931 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/CustomSlideBigText.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/CustomSlideBigText.java
@@ -15,16 +15,15 @@ import org.torproject.android.R;
public class CustomSlideBigText extends Fragment {
+ private static final String BUNDLE_KEY_LAYOUT_RES_ID = "layoutResId";
+ private static final String BUNDLE_KEY_TITLE = "Title";
+ private static final String BUNDLE_KEY_SUBTITLE = "Subtitle";
private int layoutResId;
private String mTitle;
private String mButtonText;
private String mSubTitle;
private View.OnClickListener mButtonListener;
- private static final String BUNDLE_KEY_LAYOUT_RES_ID = "layoutResId";
- private static final String BUNDLE_KEY_TITLE = "Title";
- private static final String BUNDLE_KEY_SUBTITLE = "Subtitle";
-
public static CustomSlideBigText newInstance(int layoutResId, String title) {
return newInstance(layoutResId, title, null);
}
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java
index 588c6952..8525659c 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java
@@ -47,14 +47,14 @@ import org.torproject.android.service.util.Prefs;
import org.torproject.android.ui.dialog.MoatErrorDialogFragment;
/**
- Implements the MOAT protocol: Fetches OBFS4 bridges via Meek Azure.
-
- The bare minimum of the communication is implemented. E.g. no check, if OBFS4 is possible or which
- protocol version the server wants to speak. The first should be always good, as OBFS4 is the most widely
- supported bridge type, the latter should be the same as we requested (0.1.0) anyway.
-
- API description:
- https://github.com/NullHypothesis/bridgedb#accessing-the-moat-interface
+ * Implements the MOAT protocol: Fetches OBFS4 bridges via Meek Azure.
+ * <p>
+ * The bare minimum of the communication is implemented. E.g. no check, if OBFS4 is possible or which
+ * protocol version the server wants to speak. The first should be always good, as OBFS4 is the most widely
+ * supported bridge type, the latter should be the same as we requested (0.1.0) anyway.
+ * <p>
+ * API description:
+ * https://github.com/NullHypothesis/bridgedb#accessing-the-moat-interface
*/
public class MoatActivity extends AppCompatActivity implements View.OnClickListener, TextView.OnEditorActionListener {
@@ -81,7 +81,7 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe
@Override
public void onReceive(Context context, Intent intent) {
String host = intent.getStringExtra(OrbotService.EXTRA_SOCKS_PROXY_HOST);
- int port = intent.getIntExtra(OrbotService.EXTRA_SOCKS_PROXY_PORT,-1);
+ int port = intent.getIntExtra(OrbotService.EXTRA_SOCKS_PROXY_PORT, -1);
String status = intent.getStringExtra(TorServiceConstants.EXTRA_STATUS);
if (TextUtils.isEmpty(host)) {
@@ -136,8 +136,7 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe
mRequestInProgress = false;
mEtSolution.setEnabled(true);
}
- }
- else {
+ } else {
mIvCaptcha.setVisibility(View.GONE);
mEtSolution.setEnabled(false);
mBtRequest.setEnabled(false);
@@ -308,8 +307,7 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe
mSuccess = true;
setResult(RESULT_OK);
finish();
- }
- catch (JSONException e) {
+ } catch (JSONException e) {
Log.d(MoatActivity.class.getSimpleName(), "Error decoding answer: " + response.toString());
displayError(e, response);
diff --git a/orbotservice/src/main/java/org/torproject/android/service/OrbotConstants.java b/orbotservice/src/main/java/org/torproject/android/service/OrbotConstants.java
index 6d8ff1ea..3960fb6c 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/OrbotConstants.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/OrbotConstants.java
@@ -5,7 +5,7 @@ package org.torproject.android.service;
public interface OrbotConstants {
- String TAG = "Orbot";
+ String TAG = "Orbot";
String PREF_OR = "pref_or";
String PREF_OR_PORT = "pref_or_port";
@@ -13,28 +13,26 @@ public interface OrbotConstants {
String PREF_REACHABLE_ADDRESSES = "pref_reachable_addresses";
String PREF_REACHABLE_ADDRESSES_PORTS = "pref_reachable_addresses_ports";
- String PREF_DISABLE_NETWORK = "pref_disable_network";
+ String PREF_DISABLE_NETWORK = "pref_disable_network";
- String PREF_TOR_SHARED_PREFS = "org.torproject.android_preferences";
+ String PREF_TOR_SHARED_PREFS = "org.torproject.android_preferences";
- String PREF_SOCKS = "pref_socks";
+ String PREF_SOCKS = "pref_socks";
- String PREF_HTTP = "pref_http";
+ String PREF_HTTP = "pref_http";
- String PREF_ISOLATE_DEST = "pref_isolate_dest";
+ String PREF_ISOLATE_DEST = "pref_isolate_dest";
- String PREF_CONNECTION_PADDING = "pref_connection_padding";
- String PREF_REDUCED_CONNECTION_PADDING = "pref_reduced_connection_padding";
- String PREF_CIRCUIT_PADDING = "pref_circuit_padding";
- String PREF_REDUCED_CIRCUIT_PADDING = "pref_reduced_circuit_padding";
+ String PREF_CONNECTION_PADDING = "pref_connection_padding";
+ String PREF_REDUCED_CONNECTION_PADDING = "pref_reduced_connection_padding";
+ String PREF_CIRCUIT_PADDING = "pref_circuit_padding";
+ String PREF_REDUCED_CIRCUIT_PADDING = "pref_reduced_circuit_padding";
- String PREF_PREFER_IPV6 = "pref_prefer_ipv6";
- String PREF_DISABLE_IPV4 = "pref_disable_ipv4";
-
-
- String APP_TOR_KEY = "_app_tor";
- String APP_DATA_KEY = "_app_data";
- String APP_WIFI_KEY = "_app_wifi";
+ String PREF_PREFER_IPV6 = "pref_prefer_ipv6";
+ String PREF_DISABLE_IPV4 = "pref_disable_ipv4";
+ String APP_TOR_KEY = "_app_tor";
+ String APP_DATA_KEY = "_app_data";
+ String APP_WIFI_KEY = "_app_wifi";
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
index 5f816815..c2a51326 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
@@ -30,11 +30,12 @@ import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.provider.BaseColumns;
+import android.text.TextUtils;
+import android.util.Log;
+
import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
-import android.text.TextUtils;
-import android.util.Log;
import com.jaredrummler.android.shell.CommandResult;
@@ -51,9 +52,6 @@ import org.torproject.android.service.util.Utils;
import org.torproject.android.service.vpn.OrbotVpnManager;
import org.torproject.android.service.vpn.VpnPrefs;
-import info.pluggabletransports.dispatch.util.TransportListener;
-import info.pluggabletransports.dispatch.util.TransportManager;
-
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
@@ -80,128 +78,98 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeoutException;
+import info.pluggabletransports.dispatch.util.TransportListener;
+import info.pluggabletransports.dispatch.util.TransportManager;
+
public class OrbotService extends VpnService implements TorServiceConstants, OrbotConstants {
public final static String BINARY_TOR_VERSION = org.torproject.android.binary.TorServiceConstants.BINARY_TOR_VERSION;
- private String mCurrentStatus = STATUS_OFF;
-
private final static int CONTROL_SOCKET_TIMEOUT = 60000;
-
- private TorControlConnection conn = null;
- private int mLastProcessId = -1;
-
+ private static final int NOTIFY_ID = 1;
+ private static final int ERROR_NOTIFY_ID = 3;
+ private static final int HS_NOTIFY_ID = 4;
+ private static final Uri HS_CONTENT_URI = Uri.parse("content://org.torproject.android.ui.hiddenservices.providers/hs");
+ private static final Uri COOKIE_CONTENT_URI = Uri.parse("content://org.torproject.android.ui.hiddenservices.providers.cookie/cookie");
+ private final static String NOTIFICATION_CHANNEL_ID = "orbot_channel_1";
+ private final static String RESET_STRING = "=\"\"";
public static int mPortSOCKS = -1;
public static int mPortHTTP = -1;
public static int mPortDns = TOR_DNS_PORT_DEFAULT;
public static int mPortTrans = TOR_TRANSPROXY_PORT_DEFAULT;
-
- private static final int NOTIFY_ID = 1;
- private static final int ERROR_NOTIFY_ID = 3;
- private static final int HS_NOTIFY_ID = 4;
-
+ public static File appBinHome;
+ public static File appCacheHome;
+ public static File fileTor;
+ public static File fileObfsclient;
+ public static File fileTorRc;
+ boolean mIsLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
+ TorEventHandler mEventHandler;
+ OrbotVpnManager mVpnManager;
+ Handler mHandler;
+ //we should randomly sort alBridges so we don't have the same bridge order each time
+ Random bridgeSelectRandom = new Random(System.nanoTime());
+ ActionBroadcastReceiver mActionBroadcastReceiver;
+ private String mCurrentStatus = STATUS_OFF;
+ private TorControlConnection conn = null;
+ private int mLastProcessId = -1;
private ArrayList<String> configBuffer = null;
private ArrayList<String> resetBuffer = null;
-
private File fileControlPort, filePid;
-
private boolean mConnectivity = true;
-
private NotificationManager mNotificationManager = null;
private NotificationCompat.Builder mNotifyBuilder;
private Notification mNotification;
private boolean mNotificationShowing = false;
-
- boolean mIsLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
-
private ExecutorService mExecutor = Executors.newFixedThreadPool(3);
-
- TorEventHandler mEventHandler;
-
- public static File appBinHome;
- public static File appCacheHome;
-
- public static File fileTor;
- public static File fileObfsclient;
- public static File fileTorRc;
private File mHSBasePath;
-
private ArrayList<Bridge> alBridges = null;
-
- private static final Uri HS_CONTENT_URI = Uri.parse("content://org.torproject.android.ui.hiddenservices.providers/hs");
- private static final Uri COOKIE_CONTENT_URI = Uri.parse("content://org.torproject.android.ui.hiddenservices.providers.cookie/cookie");
-
- OrbotVpnManager mVpnManager;
-
- Handler mHandler;
-
- public static final class HiddenService implements BaseColumns {
- public static final String NAME = "name";
- public static final String PORT = "port";
- public static final String ONION_PORT = "onion_port";
- public static final String DOMAIN = "domain";
- public static final String AUTH_COOKIE = "auth_cookie";
- public static final String AUTH_COOKIE_VALUE = "auth_cookie_value";
- public static final String CREATED_BY_USER = "created_by_user";
- public static final String ENABLED = "enabled";
-
- private HiddenService() {
- }
- }
-
- public static final class ClientCookie implements BaseColumns {
- public static final String DOMAIN = "domain";
- public static final String AUTH_COOKIE_VALUE = "auth_cookie_value";
- public static final String ENABLED = "enabled";
-
- private ClientCookie() {
- }
- }
-
private String[] hsProjection = new String[]{
- HiddenService._ID,
- HiddenService.NAME,
- HiddenService.DOMAIN,
- HiddenService.PORT,
- HiddenService.AUTH_COOKIE,
- HiddenService.AUTH_COOKIE_VALUE,
- HiddenService.ONION_PORT,
+ HiddenService._ID,
+ HiddenService.NAME,
+ HiddenService.DOMAIN,
+ HiddenService.PORT,
+ HiddenService.AUTH_COOKIE,
+ HiddenService.AUTH_COOKIE_VALUE,
+ HiddenService.ONION_PORT,
HiddenService.ENABLED};
-
private String[] cookieProjection = new String[]{
ClientCookie._ID,
ClientCookie.DOMAIN,
ClientCookie.AUTH_COOKIE_VALUE,
ClientCookie.ENABLED};
- public void debug(String msg)
- {
+ /**
+ * @param bridgeList bridges that were manually entered into Orbot settings
+ * @return Array with each bridge as an element, no whitespace entries see issue #289...
+ */
+ private static String[] parseBridgesFromSettings(String bridgeList) {
+ // this regex replaces lines that only contain whitespace with an empty String
+ bridgeList = bridgeList.trim().replaceAll("(?m)^[ \t]*\r?\n", "");
+ return bridgeList.split("\\n");
+ }
+
+ public void debug(String msg) {
- Log.d(OrbotConstants.TAG,msg);
+ Log.d(OrbotConstants.TAG, msg);
- if (Prefs.useDebugLogging())
- {
- sendCallbackLogMessage(msg);
+ if (Prefs.useDebugLogging()) {
+ sendCallbackLogMessage(msg);
}
}
- public void logException(String msg, Exception e)
- {
- if (Prefs.useDebugLogging())
- {
- Log.e(OrbotConstants.TAG,msg,e);
+ public void logException(String msg, Exception e) {
+ if (Prefs.useDebugLogging()) {
+ Log.e(OrbotConstants.TAG, msg, e);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(baos));
- sendCallbackLogMessage(msg + '\n'+ new String(baos.toByteArray()));
+ sendCallbackLogMessage(msg + '\n' + new String(baos.toByteArray()));
- }
- else
+ } else
sendCallbackLogMessage(msg);
}
-
private boolean findExistingTorDaemon() {
try {
mLastProcessId = initControlConnection(3, true);
@@ -209,7 +177,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
if (mLastProcessId != -1 && conn != null) {
sendCallbackLogMessage(getString(R.string.found_existing_tor_process));
sendCallbackStatus(STATUS_ON);
- showToolbarNotification(getString(R.string.status_activated),NOTIFY_ID,R.drawable.ic_stat_tor);
+ showToolbarNotification(getString(R.string.status_activated), NOTIFY_ID, R.drawable.ic_stat_tor);
return true;
}
@@ -225,12 +193,11 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
public void onLowMemory() {
super.onLowMemory();
- logNotice( "Low Memory Warning!");
+ logNotice("Low Memory Warning!");
}
- private void clearNotifications ()
- {
+ private void clearNotifications() {
if (mNotificationManager != null)
mNotificationManager.cancelAll();
@@ -240,11 +207,8 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
mNotificationShowing = false;
}
- private final static String NOTIFICATION_CHANNEL_ID = "orbot_channel_1";
-
@RequiresApi(api = Build.VERSION_CODES.O)
- private void createNotificationChannel ()
- {
+ private void createNotificationChannel() {
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
@@ -265,31 +229,27 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
}
@SuppressLint("NewApi")
- protected void showToolbarNotification (String notifyMsg, int notifyType, int icon)
- {
+ protected void showToolbarNotification(String notifyMsg, int notifyType, int icon) {
- //Reusable code.
- PackageManager pm = getPackageManager();
- Intent intent = pm.getLaunchIntentForPackage(getPackageName());
- PendingIntent pendIntent = PendingIntent.getActivity(OrbotService.this, 0, intent, 0);
+ //Reusable code.
+ PackageManager pm = getPackageManager();
+ Intent intent = pm.getLaunchIntentForPackage(getPackageName());
+ PendingIntent pendIntent = PendingIntent.getActivity(OrbotService.this, 0, intent, 0);
- if (mNotifyBuilder == null)
- {
+ if (mNotifyBuilder == null) {
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- if (mNotifyBuilder == null)
- {
+ if (mNotifyBuilder == null) {
mNotifyBuilder = new NotificationCompat.Builder(this)
- .setContentTitle(getString(R.string.app_name))
- .setSmallIcon(R.drawable.ic_stat_tor);
+ .setContentTitle(getString(R.string.app_name))
+ .setSmallIcon(R.drawable.ic_stat_tor);
mNotifyBuilder.setContentIntent(pendIntent);
}
-
mNotifyBuilder.setCategory(Notification.CATEGORY_SERVICE);
mNotifyBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
@@ -308,147 +268,58 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
mNotifyBuilder.setContentText(notifyMsg);
mNotifyBuilder.setSmallIcon(icon);
- if (notifyType != NOTIFY_ID)
- {
+ if (notifyType != NOTIFY_ID) {
mNotifyBuilder.setTicker(notifyMsg);
- }
- else
- {
+ } else {
mNotifyBuilder.setTicker(null);
}
- if (!Prefs.persistNotifications())
- mNotifyBuilder.setPriority(Notification.PRIORITY_LOW);
+ if (!Prefs.persistNotifications())
+ mNotifyBuilder.setPriority(Notification.PRIORITY_LOW);
- mNotification = mNotifyBuilder.build();
+ mNotification = mNotifyBuilder.build();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- startForeground(NOTIFY_ID, mNotification);
- }
- else if (Prefs.persistNotifications() && (!mNotificationShowing))
- {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ startForeground(NOTIFY_ID, mNotification);
+ } else if (Prefs.persistNotifications() && (!mNotificationShowing)) {
startForeground(NOTIFY_ID, mNotification);
logNotice("Set background service to FOREGROUND");
- }
- else
- {
+ } else {
mNotificationManager.notify(NOTIFY_ID, mNotification);
}
mNotificationShowing = true;
- }
-
+ }
/* (non-Javadoc)
* @see android.app.Service#onStart(android.content.Intent, int)
*/
public int onStartCommand(Intent intent, int flags, int startId) {
- showToolbarNotification("",NOTIFY_ID,R.drawable.ic_stat_tor);
+ showToolbarNotification("", NOTIFY_ID, R.drawable.ic_stat_tor);
if (intent != null)
- exec (new IncomingIntentRouter(intent));
+ exec(new IncomingIntentRouter(intent));
else
Log.d(OrbotConstants.TAG, "Got null onStartCommand() intent");
return Service.START_STICKY;
}
- private class IncomingIntentRouter implements Runnable
- {
- Intent mIntent;
-
- public IncomingIntentRouter (Intent intent)
- {
- mIntent = intent;
- }
-
- public void run() {
-
- String action = mIntent.getAction();
-
- if (!TextUtils.isEmpty(action)) {
- if (action.equals(ACTION_START) || action.equals(ACTION_START_ON_BOOT)) {
- startTor();
- replyWithStatus(mIntent);
-
- if (Prefs.useVpn())
- {
- if (mVpnManager != null
- && (!mVpnManager.isStarted())) {
- //start VPN here
- Intent vpnIntent = VpnService.prepare(OrbotService.this);
- if (vpnIntent == null) //then we can run the VPN
- {
- mVpnManager.handleIntent(new Builder(), mIntent);
-
- }
- }
-
- if (mPortSOCKS != -1 && mPortHTTP != -1)
- sendCallbackPorts(mPortSOCKS, mPortHTTP, mPortDns, mPortTrans);
- }
-
- }
- else if (action.equals(ACTION_START_VPN)) {
- if (mVpnManager != null && (!mVpnManager.isStarted())) {
- //start VPN here
- Intent vpnIntent = VpnService.prepare(OrbotService.this);
- if (vpnIntent == null) //then we can run the VPN
- {
- mVpnManager.handleIntent(new Builder(), mIntent);
-
-
- }
- }
-
- if (mPortSOCKS != -1 && mPortHTTP != -1)
- sendCallbackPorts(mPortSOCKS, mPortHTTP, mPortDns, mPortTrans);
-
-
- }
- else if (action.equals(ACTION_STOP_VPN)) {
- if (mVpnManager != null)
- mVpnManager.handleIntent(new Builder(),mIntent);
- }
- else if (action.equals(ACTION_STATUS)) {
- replyWithStatus(mIntent);
- }
- else if (action.equals(CMD_SIGNAL_HUP)) {
- requestTorRereadConfig();
- } else if (action.equals(CMD_NEWNYM)) {
- newIdentity();
- }
- else if (action.equals(CMD_ACTIVE)) {
- sendSignalActive();
- }
- else if (action.equals(CMD_SET_EXIT)) {
-
- setExitNode(mIntent.getStringExtra("exit"));
-
- } else {
- Log.w(OrbotConstants.TAG, "unhandled OrbotService Intent: " + action);
- }
- }
- }
- }
-
@Override
- public void onTaskRemoved(Intent rootIntent){
- Log.d(OrbotConstants.TAG,"task removed");
- Intent intent = new Intent( this, DummyActivity.class );
- intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
- startActivity( intent );
+ public void onTaskRemoved(Intent rootIntent) {
+ Log.d(OrbotConstants.TAG, "task removed");
+ Intent intent = new Intent(this, DummyActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
}
@Override
public void onDestroy() {
try {
- // unregisterReceiver(mNetworkStateReceiver);
+ // unregisterReceiver(mNetworkStateReceiver);
unregisterReceiver(mActionBroadcastReceiver);
- }
- catch (IllegalArgumentException iae)
- {
+ } catch (IllegalArgumentException iae) {
//not registered yet
}
@@ -461,7 +332,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
new Thread(this::stopTorAsync).start();
}
- private void stopTorAsync () {
+ private void stopTorAsync() {
Log.i("OrbotService", "stopTor");
try {
sendCallbackStatus(STATUS_STOPPING);
@@ -473,9 +344,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
stopForeground(true);
sendCallbackLogMessage(getString(R.string.status_disabled));
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
logNotice("An error occured stopping Tor: " + e.getMessage());
sendCallbackLogMessage(getString(R.string.something_bad_happened));
}
@@ -485,7 +354,6 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
}
-
private void killAllDaemons() throws Exception {
if (conn != null) {
@@ -515,18 +383,16 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
e.printStackTrace();
}
/**
- // if that fails, try again using native utils
- try {
- killProcess(fileTor, "-1"); // this is -HUP
- } catch (Exception e) {
- e.printStackTrace();
- }**/
+ // if that fails, try again using native utils
+ try {
+ killProcess(fileTor, "-1"); // this is -HUP
+ } catch (Exception e) {
+ e.printStackTrace();
+ }**/
}
- protected void logNotice (String msg)
- {
- if (msg != null && msg.trim().length() > 0)
- {
+ protected void logNotice(String msg) {
+ if (msg != null && msg.trim().length() > 0) {
if (Prefs.useDebugLogging())
Log.d(OrbotConstants.TAG, msg);
@@ -538,8 +404,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
public void onCreate() {
super.onCreate();
- try
- {
+ try {
mHandler = new Handler();
appBinHome = getFilesDir();//getDir(TorServiceConstants.DIRECTORY_TOR_BINARY, Application.MODE_PRIVATE);
@@ -547,9 +412,8 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
appBinHome.mkdirs();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- appCacheHome = new File(getDataDir(),DIRECTORY_TOR_DATA);
- }
- else {
+ appCacheHome = new File(getDataDir(), DIRECTORY_TOR_DATA);
+ } else {
appCacheHome = getDir(DIRECTORY_TOR_DATA, Application.MODE_PRIVATE);
}
@@ -558,9 +422,8 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
debug("listing files in DataDirectory: " + appCacheHome.getAbsolutePath());
- Iterator<File> files = FileUtils.iterateFiles(appCacheHome,null,true);
- while (files.hasNext())
- {
+ Iterator<File> files = FileUtils.iterateFiles(appCacheHome, null, true);
+ while (files.hasNext()) {
File fileNext = files.next();
debug(fileNext.getAbsolutePath()
+ " length=" + fileNext.length()
@@ -584,13 +447,12 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
mEventHandler = new TorEventHandler(this);
- if (mNotificationManager == null)
- {
+ if (mNotificationManager == null) {
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
- // IntentFilter mNetworkStateFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
- // registerReceiver(mNetworkStateReceiver , mNetworkStateFilter);
+ // IntentFilter mNetworkStateFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
+ // registerReceiver(mNetworkStateReceiver , mNetworkStateFilter);
IntentFilter filter = new IntentFilter();
filter.addAction(CMD_NEWNYM);
@@ -606,13 +468,10 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
pluggableTransportInstall();
new Thread(() -> {
- try
- {
+ try {
findExistingTorDaemon();
- }
- catch (Exception e)
- {
- Log.e(OrbotConstants.TAG,"error onBind",e);
+ } catch (Exception e) {
+ Log.e(OrbotConstants.TAG, "error onBind", e);
logNotice("error finding exiting process: " + e.toString());
}
@@ -625,23 +484,20 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
} catch (TimeoutException e) {
e.printStackTrace();
}
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
//what error here
- Log.e(OrbotConstants.TAG, "Error installing Orbot binaries",e);
+ Log.e(OrbotConstants.TAG, "Error installing Orbot binaries", e);
logNotice("There was an error installing Orbot binaries");
}
Log.i("OrbotService", "onCreate end");
}
- protected String getCurrentStatus ()
- {
+ protected String getCurrentStatus() {
return mCurrentStatus;
}
- private boolean pluggableTransportInstall () {
+ private boolean pluggableTransportInstall() {
fileObfsclient = new TransportManager() {
@Override
@@ -666,7 +522,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
private boolean torUpgradeAndConfig() throws IOException, TimeoutException {
SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
- String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED,null);
+ String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED, null);
logNotice("checking binary version: " + version);
@@ -678,7 +534,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
if (fileTor != null && fileTor.canExecute()) {
prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED, BINARY_TOR_VERSION).apply();
- fileTorRc = new File(appBinHome,"torrc");//installer.getTorrcFile();
+ fileTorRc = new File(appBinHome, "torrc");//installer.getTorrcFile();
if (!fileTorRc.exists())
return false;
@@ -688,8 +544,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
return false;
}
- private File updateTorrcCustomFile () throws IOException, TimeoutException
- {
+ private File updateTorrcCustomFile() throws IOException, TimeoutException {
SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
StringBuffer extraLines = new StringBuffer();
@@ -702,35 +557,32 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
extraLines.append("RunAsDaemon 1").append('\n');
extraLines.append("AvoidDiskWrites 1").append('\n');
- String socksPortPref = prefs.getString(OrbotConstants.PREF_SOCKS, (TorServiceConstants.SOCKS_PROXY_PORT_DEFAULT));
+ String socksPortPref = prefs.getString(OrbotConstants.PREF_SOCKS, (TorServiceConstants.SOCKS_PROXY_PORT_DEFAULT));
- if (socksPortPref.indexOf(':')!=-1)
- socksPortPref = socksPortPref.split(":")[1];
+ if (socksPortPref.indexOf(':') != -1)
+ socksPortPref = socksPortPref.split(":")[1];
socksPortPref = checkPortOrAuto(socksPortPref);
String httpPortPref = prefs.getString(OrbotConstants.PREF_HTTP, (TorServiceConstants.HTTP_PROXY_PORT_DEFAULT));
- if (httpPortPref.indexOf(':')!=-1)
+ if (httpPortPref.indexOf(':') != -1)
httpPortPref = httpPortPref.split(":")[1];
httpPortPref = checkPortOrAuto(httpPortPref);
String isolate = "";
- if(prefs.getBoolean(OrbotConstants.PREF_ISOLATE_DEST, false))
- {
+ if (prefs.getBoolean(OrbotConstants.PREF_ISOLATE_DEST, false)) {
isolate += " IsolateDestAddr ";
}
String ipv6Pref = "";
- if(prefs.getBoolean(OrbotConstants.PREF_PREFER_IPV6, true))
- {
+ if (prefs.getBoolean(OrbotConstants.PREF_PREFER_IPV6, true)) {
ipv6Pref += " IPv6Traffic PreferIPv6 ";
}
- if(prefs.getBoolean(OrbotConstants.PREF_DISABLE_IPV4, false))
- {
+ if (prefs.getBoolean(OrbotConstants.PREF_DISABLE_IPV4, false)) {
ipv6Pref += " IPv6Traffic NoIPv4Traffic ";
}
@@ -738,52 +590,48 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
extraLines.append("SafeSocks 0").append('\n');
extraLines.append("TestSocks 0").append('\n');
- if (Prefs.openProxyOnAllInterfaces())
- extraLines.append("SocksListenAddress 0.0.0.0").append('\n');
+ if (Prefs.openProxyOnAllInterfaces())
+ extraLines.append("SocksListenAddress 0.0.0.0").append('\n');
extraLines.append("HTTPTunnelPort ").append(httpPortPref).append('\n');
- if(prefs.getBoolean(OrbotConstants.PREF_CONNECTION_PADDING, false))
- {
+ if (prefs.getBoolean(OrbotConstants.PREF_CONNECTION_PADDING, false)) {
extraLines.append("ConnectionPadding 1").append('\n');
}
- if(prefs.getBoolean(OrbotConstants.PREF_REDUCED_CONNECTION_PADDING, true))
- {
+ if (prefs.getBoolean(OrbotConstants.PREF_REDUCED_CONNECTION_PADDING, true)) {
extraLines.append("ReducedConnectionPadding 1").append('\n');
}
- if(prefs.getBoolean(OrbotConstants.PREF_CIRCUIT_PADDING, true))
- {
+ if (prefs.getBoolean(OrbotConstants.PREF_CIRCUIT_PADDING, true)) {
extraLines.append("CircuitPadding 1").append('\n');
} else {
extraLines.append("CircuitPadding 0").append('\n');
}
- if(prefs.getBoolean(OrbotConstants.PREF_REDUCED_CIRCUIT_PADDING, true))
- {
+ if (prefs.getBoolean(OrbotConstants.PREF_REDUCED_CIRCUIT_PADDING, true)) {
extraLines.append("ReducedCircuitPadding 1").append('\n');
}
- String transPort = prefs.getString("pref_transport", TorServiceConstants.TOR_TRANSPROXY_PORT_DEFAULT+"");
- String dnsPort = prefs.getString("pref_dnsport", TorServiceConstants.TOR_DNS_PORT_DEFAULT+"");
+ String transPort = prefs.getString("pref_transport", TorServiceConstants.TOR_TRANSPROXY_PORT_DEFAULT + "");
+ String dnsPort = prefs.getString("pref_dnsport", TorServiceConstants.TOR_DNS_PORT_DEFAULT + "");
extraLines.append("TransPort ").append(checkPortOrAuto(transPort)).append('\n');
- extraLines.append("DNSPort ").append(checkPortOrAuto(dnsPort)).append('\n');
+ extraLines.append("DNSPort ").append(checkPortOrAuto(dnsPort)).append('\n');
extraLines.append("VirtualAddrNetwork 10.192.0.0/10").append('\n');
extraLines.append("AutomapHostsOnResolve 1").append('\n');
extraLines.append("DormantClientTimeout 10 minutes").append('\n');
- // extraLines.append("DormantOnFirstStartup 0").append('\n');
+ // extraLines.append("DormantOnFirstStartup 0").append('\n');
extraLines.append("DormantCanceledByStartup 1").append('\n');
extraLines.append("DisableNetwork 0").append('\n');
if (Prefs.useDebugLogging()) {
- extraLines.append("Log debug syslog").append('\n');
- extraLines.append("SafeLogging 0").append('\n');
+ extraLines.append("Log debug syslog").append('\n');
+ extraLines.append("SafeLogging 0").append('\n');
}
extraLines = processSettingsImpl(extraLines);
@@ -801,20 +649,16 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
File fileTorRcCustom = new File(fileTorRc.getAbsolutePath() + ".custom");
boolean success = updateTorConfigCustom(fileTorRcCustom, extraLines.toString());
- if (success && fileTorRcCustom.exists())
- {
- logNotice ("success.");
+ if (success && fileTorRcCustom.exists()) {
+ logNotice("success.");
return fileTorRcCustom;
- }
- else
+ } else
return null;
}
- private String checkPortOrAuto (String portString)
- {
- if (!portString.equalsIgnoreCase("auto"))
- {
+ private String checkPortOrAuto(String portString) {
+ if (!portString.equalsIgnoreCase("auto")) {
boolean isPortUsed = true;
int port = Integer.parseInt(portString);
@@ -861,10 +705,9 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
reply.putExtra(EXTRA_HTTP_PROXY_HOST, "127.0.0.1");
reply.putExtra(EXTRA_HTTP_PROXY_PORT, mPortHTTP);
- if (packageName != null)
- {
- reply.setPackage(packageName);
- sendBroadcast(reply);
+ if (packageName != null) {
+ reply.setPackage(packageName);
+ sendBroadcast(reply);
}
LocalBroadcastManager.getInstance(this).sendBroadcast(reply);
@@ -881,8 +724,10 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
String torProcId = null;
- try { if (conn != null) torProcId = conn.getInfo("process/pid"); }
- catch (Exception e){}
+ try {
+ if (conn != null) torProcId = conn.getInfo("process/pid");
+ } catch (Exception e) {
+ }
try {
@@ -894,39 +739,37 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
} else if (mCurrentStatus == STATUS_ON && (torProcId != null)) {
sendCallbackLogMessage("Ignoring start request, already started.");
- // setTorNetworkEnabled (true);
+ // setTorNetworkEnabled (true);
return;
}
- // make sure there are no stray daemons running
- killAllDaemons();
+ // make sure there are no stray daemons running
+ killAllDaemons();
SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
- String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED,null);
+ String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED, null);
logNotice("checking binary version: " + version);
sendCallbackStatus(STATUS_STARTING);
- showToolbarNotification(getString(R.string.status_starting_up),NOTIFY_ID,R.drawable.ic_stat_tor);
- //sendCallbackLogMessage(getString(R.string.status_starting_up));
- //logNotice(getString(R.string.status_starting_up));
+ showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.ic_stat_tor);
+ //sendCallbackLogMessage(getString(R.string.status_starting_up));
+ //logNotice(getString(R.string.status_starting_up));
- ArrayList<String> customEnv = new ArrayList<String>();
+ ArrayList<String> customEnv = new ArrayList<String>();
- if (Prefs.bridgesEnabled())
- if (Prefs.useVpn() && !mIsLollipop)
- {
- customEnv.add("TOR_PT_PROXY=socks5://" + OrbotVpnManager.sSocksProxyLocalhost + ":" + OrbotVpnManager.sSocksProxyServerPort);
- }
+ if (Prefs.bridgesEnabled())
+ if (Prefs.useVpn() && !mIsLollipop) {
+ customEnv.add("TOR_PT_PROXY=socks5://" + OrbotVpnManager.sSocksProxyLocalhost + ":" + OrbotVpnManager.sSocksProxyServerPort);
+ }
- boolean success = runTorShellCmd();
+ boolean success = runTorShellCmd();
- if (success)
- {
- try { updateOnionNames (); }
- catch (SecurityException se)
- {
+ if (success) {
+ try {
+ updateOnionNames();
+ } catch (SecurityException se) {
logNotice("unable to upload onion names");
}
}
@@ -941,12 +784,11 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
}
}
- private void updateOnionNames () throws SecurityException
- {
+ private void updateOnionNames() throws SecurityException {
// Tor is running, update new .onion names at db
ContentResolver mCR = getApplicationContext().getContentResolver();
Cursor hidden_services = mCR.query(HS_CONTENT_URI, hsProjection, null, null, null);
- if(hidden_services != null) {
+ if (hidden_services != null) {
try {
while (hidden_services.moveToNext()) {
String HSDomain = hidden_services.getString(hidden_services.getColumnIndex(HiddenService.DOMAIN));
@@ -992,8 +834,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
}
}
- private boolean runTorShellCmd() throws Exception
- {
+ private boolean runTorShellCmd() throws Exception {
boolean result = true;
File fileTorrcCustom = updateTorrcCustomFile();
@@ -1002,10 +843,10 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
if (fileTor == null || (!fileTor.exists()) || (!fileTor.canExecute()))
return false;
- if ((!fileTorRc.exists()) || (!fileTorRc.canRead()) )
+ if ((!fileTorRc.exists()) || (!fileTorRc.canRead()))
return false;
- if ((!fileTorrcCustom.exists()) || (!fileTorrcCustom.canRead()) )
+ if ((!fileTorrcCustom.exists()) || (!fileTorrcCustom.canRead()))
return false;
sendCallbackLogMessage(getString(R.string.status_starting_up));
@@ -1019,9 +860,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
try {
exitCode = exec(torCmdString + " --verify-config", true);
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
logNotice("Tor configuration did not verify: " + e.getMessage());
return false;
}
@@ -1060,162 +899,149 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
return result;
}
- protected void exec (Runnable runn)
- {
+ protected void exec(Runnable runn) {
mExecutor.execute(runn);
}
- private int exec (String cmd, boolean wait) throws Exception
- {
- HashMap<String,String> mapEnv = new HashMap();
- mapEnv.put("HOME",appBinHome.getAbsolutePath());
+ private int exec(String cmd, boolean wait) throws Exception {
+ HashMap<String, String> mapEnv = new HashMap();
+ mapEnv.put("HOME", appBinHome.getAbsolutePath());
- CommandResult result = CustomShell.run("sh",wait, mapEnv, cmd);
- debug("executing: " + cmd);
- debug("stdout: " + result.getStdout());
- debug("stderr: " + result.getStderr());
+ CommandResult result = CustomShell.run("sh", wait, mapEnv, cmd);
+ debug("executing: " + cmd);
+ debug("stdout: " + result.getStdout());
+ debug("stderr: " + result.getStderr());
- return result.exitCode;
+ return result.exitCode;
}
- private int initControlConnection (int maxTries, boolean isReconnect) throws Exception
- {
- int controlPort = -1;
- int attempt = 0;
-
- logNotice( "Waiting for control port...");
-
- while (conn == null && attempt++ < maxTries && (mCurrentStatus != STATUS_OFF))
- {
- try
- {
+ private int initControlConnection(int maxTries, boolean isReconnect) throws Exception {
+ int controlPort = -1;
+ int attempt = 0;
- controlPort = getControlPort();
+ logNotice("Waiting for control port...");
- if (controlPort != -1)
- {
- logNotice( "Connecting to control port: " + controlPort);
+ while (conn == null && attempt++ < maxTries && (mCurrentStatus != STATUS_OFF)) {
+ try {
+ controlPort = getControlPort();
+ if (controlPort != -1) {
+ logNotice("Connecting to control port: " + controlPort);
- break;
- }
+ break;
}
- catch (Exception ce)
- {
- conn = null;
+
+ } catch (Exception ce) {
+ conn = null;
// logException( "Error connecting to Tor local control port: " + ce.getMessage(),ce);
- }
+ }
- try {
+ try {
// logNotice("waiting...");
- Thread.sleep(2000); }
- catch (Exception e){}
+ Thread.sleep(2000);
+ } catch (Exception e) {
}
+ }
- if (controlPort != -1)
- {
- Socket torConnSocket = new Socket(IP_LOCALHOST, controlPort);
- torConnSocket.setSoTimeout(CONTROL_SOCKET_TIMEOUT);
+ if (controlPort != -1) {
+ Socket torConnSocket = new Socket(IP_LOCALHOST, controlPort);
+ torConnSocket.setSoTimeout(CONTROL_SOCKET_TIMEOUT);
- conn = new TorControlConnection(torConnSocket);
+ conn = new TorControlConnection(torConnSocket);
- conn.launchThread(true);//is daemon
+ conn.launchThread(true);//is daemon
- }
+ }
- if (conn != null)
- {
+ if (conn != null) {
- logNotice( "SUCCESS connected to Tor control port.");
+ logNotice("SUCCESS connected to Tor control port.");
- File fileCookie = new File(appCacheHome, TOR_CONTROL_COOKIE);
+ File fileCookie = new File(appCacheHome, TOR_CONTROL_COOKIE);
- if (fileCookie.exists())
- {
+ if (fileCookie.exists()) {
- // We extend NullEventHandler so that we don't need to provide empty
- // implementations for all the events we don't care about.
- logNotice( "adding control port event handler");
+ // We extend NullEventHandler so that we don't need to provide empty
+ // implementations for all the events we don't care about.
+ logNotice("adding control port event handler");
- conn.setEventHandler(mEventHandler);
+ conn.setEventHandler(mEventHandler);
- logNotice( "SUCCESS added control port event handler");
- byte[] cookie = new byte[(int)fileCookie.length()];
- DataInputStream fis = new DataInputStream(new FileInputStream(fileCookie));
- fis.read(cookie);
- fis.close();
- conn.authenticate(cookie);
+ logNotice("SUCCESS added control port event handler");
+ byte[] cookie = new byte[(int) fileCookie.length()];
+ DataInputStream fis = new DataInputStream(new FileInputStream(fileCookie));
+ fis.read(cookie);
+ fis.close();
+ conn.authenticate(cookie);
- logNotice( "SUCCESS - authenticated to control port.");
+ logNotice("SUCCESS - authenticated to control port.");
- // conn.setEvents(Arrays.asList(new String[]{"DEBUG","STATUS_CLIENT","STATUS_GENERAL","BW"}));
+ // conn.setEvents(Arrays.asList(new String[]{"DEBUG","STATUS_CLIENT","STATUS_GENERAL","BW"}));
- if (Prefs.useDebugLogging())
- conn.setEvents(Arrays.asList(new String[]{
- "CIRC","STREAM", "ORCONN" , "BW" , "INFO" ,"NOTICE" , "WARN" , "DEBUG","ERR" , "NEWDESC" , "ADDRMAP"}));
- else
- conn.setEvents(Arrays.asList(new String[]{
- "CIRC","STREAM", "ORCONN" , "BW" , "NOTICE" ,"ERR" , "NEWDESC" , "ADDRMAP"}));
+ if (Prefs.useDebugLogging())
+ conn.setEvents(Arrays.asList(new String[]{
+ "CIRC", "STREAM", "ORCONN", "BW", "INFO", "NOTICE", "WARN", "DEBUG", "ERR", "NEWDESC", "ADDRMAP"}));
+ else
+ conn.setEvents(Arrays.asList(new String[]{
+ "CIRC", "STREAM", "ORCONN", "BW", "NOTICE", "ERR", "NEWDESC", "ADDRMAP"}));
- // sendCallbackLogMessage(getString(R.string.tor_process_starting) + ' ' + getString(R.string.tor_process_complete));
+ // sendCallbackLogMessage(getString(R.string.tor_process_starting) + ' ' + getString(R.string.tor_process_complete));
- String torProcId = conn.getInfo("process/pid");
+ String torProcId = conn.getInfo("process/pid");
- String confSocks = conn.getInfo("net/listeners/socks");
- StringTokenizer st = new StringTokenizer(confSocks," ");
+ String confSocks = conn.getInfo("net/listeners/socks");
+ StringTokenizer st = new StringTokenizer(confSocks, " ");
- confSocks = st.nextToken().split(":")[1];
- confSocks = confSocks.substring(0,confSocks.length()-1);
- mPortSOCKS = Integer.parseInt(confSocks);
+ confSocks = st.nextToken().split(":")[1];
+ confSocks = confSocks.substring(0, confSocks.length() - 1);
+ mPortSOCKS = Integer.parseInt(confSocks);
- String confHttp = conn.getInfo("net/listeners/httptunnel");
- st = new StringTokenizer(confHttp," ");
+ String confHttp = conn.getInfo("net/listeners/httptunnel");
+ st = new StringTokenizer(confHttp, " ");
- confHttp = st.nextToken().split(":")[1];
- confHttp = confHttp.substring(0,confHttp.length()-1);
- mPortHTTP = Integer.parseInt(confHttp);
+ confHttp = st.nextToken().split(":")[1];
+ confHttp = confHttp.substring(0, confHttp.length() - 1);
+ mPortHTTP = Integer.parseInt(confHttp);
- String confDns = conn.getInfo("net/listeners/dns");
- st = new StringTokenizer(confDns," ");
- if (st.hasMoreTokens()) {
- confDns = st.nextToken().split(":")[1];
- confDns = confDns.substring(0, confDns.length() - 1);
- mPortDns = Integer.parseInt(confDns);
- Prefs.getSharedPrefs(getApplicationContext()).edit().putInt(VpnPrefs.PREFS_DNS_PORT, mPortDns).apply();
- }
+ String confDns = conn.getInfo("net/listeners/dns");
+ st = new StringTokenizer(confDns, " ");
+ if (st.hasMoreTokens()) {
+ confDns = st.nextToken().split(":")[1];
+ confDns = confDns.substring(0, confDns.length() - 1);
+ mPortDns = Integer.parseInt(confDns);
+ Prefs.getSharedPrefs(getApplicationContext()).edit().putInt(VpnPrefs.PREFS_DNS_PORT, mPortDns).apply();
+ }
- String confTrans = conn.getInfo("net/listeners/trans");
- st = new StringTokenizer(confTrans," ");
- if (st.hasMoreTokens()) {
- confTrans = st.nextToken().split(":")[1];
- confTrans = confTrans.substring(0, confTrans.length() - 1);
- mPortTrans = Integer.parseInt(confTrans);
- }
+ String confTrans = conn.getInfo("net/listeners/trans");
+ st = new StringTokenizer(confTrans, " ");
+ if (st.hasMoreTokens()) {
+ confTrans = st.nextToken().split(":")[1];
+ confTrans = confTrans.substring(0, confTrans.length() - 1);
+ mPortTrans = Integer.parseInt(confTrans);
+ }
- sendCallbackPorts(mPortSOCKS, mPortHTTP, mPortDns, mPortTrans);
+ sendCallbackPorts(mPortSOCKS, mPortHTTP, mPortDns, mPortTrans);
- setTorNetworkEnabled(true);
+ setTorNetworkEnabled(true);
- return Integer.parseInt(torProcId);
+ return Integer.parseInt(torProcId);
- }
- else
- {
- logNotice ("Tor authentication cookie does not exist yet");
- conn = null;
+ } else {
+ logNotice("Tor authentication cookie does not exist yet");
+ conn = null;
- }
- }
+ }
+ }
- throw new Exception("Tor control port could not be found");
+ throw new Exception("Tor control port could not be found");
}
- private int getControlPort () {
+ private int getControlPort() {
int result = -1;
try {
@@ -1235,252 +1061,213 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
//store last valid control port
SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
prefs.edit().putInt("controlport", result).commit();
- }
- else {
+ } else {
debug("Control Port config file does not yet exist (waiting for tor): " + fileControlPort.getCanonicalPath());
}
- }
- catch (FileNotFoundException e) {
+ } catch (FileNotFoundException e) {
debug("unable to get control port; file not found");
- }
- catch (Exception e) {
+ } catch (Exception e) {
debug("unable to read control port config file");
}
return result;
}
+ /**
+ * Returns the port number that the HTTP proxy is running on
+ */
+ public int getHTTPPort() {
+ return mPortHTTP;
+ }
- /**
- * Returns the port number that the HTTP proxy is running on
- */
- public int getHTTPPort() {
- return mPortHTTP;
- }
-
-
- /**
- * Returns the port number that the HTTP proxy is running on
- */
- public int getSOCKSPort() {
- return mPortSOCKS;
- }
+ /**
+ * Returns the port number that the HTTP proxy is running on
+ */
+ public int getSOCKSPort() {
+ return mPortSOCKS;
+ }
- public String getInfo (String key) {
- try {
- if(conn !=null){
- String m = conn.getInfo(key);
- return m;
- }
+ public String getInfo(String key) {
+ try {
+ if (conn != null) {
+ String m = conn.getInfo(key);
+ return m;
}
- catch(Exception ioe){
+ } catch (Exception ioe) {
// Log.e(TAG,"Unable to get Tor information",ioe);
- logNotice("Unable to get Tor information"+ioe.getMessage());
- }
- return null;
+ logNotice("Unable to get Tor information" + ioe.getMessage());
}
+ return null;
+ }
- public String getConfiguration (String name)
- {
- try
- {
- if (conn != null)
- {
- StringBuffer result = new StringBuffer();
-
- List<ConfigEntry> listCe = conn.getConf(name);
-
- Iterator<ConfigEntry> itCe = listCe.iterator();
- ConfigEntry ce = null;
+ public String getConfiguration(String name) {
+ try {
+ if (conn != null) {
+ StringBuffer result = new StringBuffer();
+ List<ConfigEntry> listCe = conn.getConf(name);
+ Iterator<ConfigEntry> itCe = listCe.iterator();
+ ConfigEntry ce = null;
- while (itCe.hasNext())
- {
- ce = itCe.next();
- result.append(ce.key);
- result.append(' ');
- result.append(ce.value);
- result.append('\n');
- }
+ while (itCe.hasNext()) {
+ ce = itCe.next();
- return result.toString();
+ result.append(ce.key);
+ result.append(' ');
+ result.append(ce.value);
+ result.append('\n');
}
- }
- catch (Exception ioe)
- {
- logException("Unable to get Tor configuration: " + ioe.getMessage(),ioe);
+ return result.toString();
}
+ } catch (Exception ioe) {
- return null;
+ logException("Unable to get Tor configuration: " + ioe.getMessage(), ioe);
}
- private final static String RESET_STRING = "=\"\"";
- /**
- * Set configuration
- **/
- public boolean updateConfiguration (String name, String value, boolean saveToDisk)
- {
+ return null;
+ }
+ /**
+ * Set configuration
+ **/
+ public boolean updateConfiguration(String name, String value, boolean saveToDisk) {
- if (configBuffer == null)
- configBuffer = new ArrayList<String>();
- if (resetBuffer == null)
- resetBuffer = new ArrayList<String>();
+ if (configBuffer == null)
+ configBuffer = new ArrayList<String>();
- if (value == null || value.length() == 0)
- {
- resetBuffer.add(name + RESET_STRING);
+ if (resetBuffer == null)
+ resetBuffer = new ArrayList<String>();
- }
- else
- {
- StringBuffer sbConf = new StringBuffer();
- sbConf.append(name);
- sbConf.append(' ');
- sbConf.append(value);
+ if (value == null || value.length() == 0) {
+ resetBuffer.add(name + RESET_STRING);
- configBuffer.add(sbConf.toString());
- }
+ } else {
+ StringBuffer sbConf = new StringBuffer();
+ sbConf.append(name);
+ sbConf.append(' ');
+ sbConf.append(value);
- return false;
+ configBuffer.add(sbConf.toString());
}
+ return false;
+ }
- public void setTorNetworkEnabled (final boolean isEnabled) throws IOException
- {
- //it is possible to not have a connection yet, and someone might try to newnym
- if (conn != null)
- {
- new Thread ()
- {
- public void run ()
- {
- try {
+ public void setTorNetworkEnabled(final boolean isEnabled) throws IOException {
- final String newValue =isEnabled ? "0" : "1";
- conn.setConf("DisableNetwork", newValue);
- }
- catch (Exception ioe){
- debug("error requesting newnym: " + ioe.getLocalizedMessage());
- }
+ //it is possible to not have a connection yet, and someone might try to newnym
+ if (conn != null) {
+ new Thread() {
+ public void run() {
+ try {
+
+ final String newValue = isEnabled ? "0" : "1";
+ conn.setConf("DisableNetwork", newValue);
+ } catch (Exception ioe) {
+ debug("error requesting newnym: " + ioe.getLocalizedMessage());
}
- }.start();
- }
-
+ }
+ }.start();
}
- public void sendSignalActive ()
- {
- if (conn != null && mCurrentStatus == STATUS_ON) {
- try {
- conn.signal("ACTIVE");
- } catch (IOException e) {
- debug("error send active: " + e.getLocalizedMessage());
- }
+ }
+
+ public void sendSignalActive() {
+ if (conn != null && mCurrentStatus == STATUS_ON) {
+ try {
+ conn.signal("ACTIVE");
+ } catch (IOException e) {
+ debug("error send active: " + e.getLocalizedMessage());
}
}
+ }
- public void newIdentity ()
- {
- //it is possible to not have a connection yet, and someone might try to newnym
- if (conn != null)
- {
- new Thread ()
- {
- public void run ()
- {
- try {
+ public void newIdentity() {
+ //it is possible to not have a connection yet, and someone might try to newnym
+ if (conn != null) {
+ new Thread() {
+ public void run() {
+ try {
- int iconId = R.drawable.ic_stat_tor;
+ int iconId = R.drawable.ic_stat_tor;
- if (hasConnectivity() && Prefs.expandedNotifications())
- showToolbarNotification(getString(R.string.newnym), getNotifyId(), iconId);
+ if (hasConnectivity() && Prefs.expandedNotifications())
+ showToolbarNotification(getString(R.string.newnym), getNotifyId(), iconId);
- conn.signal("NEWNYM");
+ conn.signal("NEWNYM");
- }
- catch (Exception ioe){
+ } catch (Exception ioe) {
- debug("error requesting newnym: " + ioe.getLocalizedMessage());
+ debug("error requesting newnym: " + ioe.getLocalizedMessage());
- }
}
- }.start();
- }
+ }
+ }.start();
}
+ }
- public boolean saveConfiguration ()
- {
- try
- {
- if (conn != null)
- {
+ public boolean saveConfiguration() {
+ try {
+ if (conn != null) {
- if (resetBuffer != null && resetBuffer.size() > 0)
- {
- for (String value : configBuffer)
- {
+ if (resetBuffer != null && resetBuffer.size() > 0) {
+ for (String value : configBuffer) {
- // debug("removing torrc conf: " + value);
+ // debug("removing torrc conf: " + value);
- }
+ }
- // conn.resetConf(resetBuffer);
- resetBuffer = null;
- }
+ // conn.resetConf(resetBuffer);
+ resetBuffer = null;
+ }
- if (configBuffer != null && configBuffer.size() > 0)
- {
+ if (configBuffer != null && configBuffer.size() > 0) {
- for (String value : configBuffer)
- {
+ for (String value : configBuffer) {
- debug("Setting torrc conf: " + value);
+ debug("Setting torrc conf: " + value);
- }
+ }
- conn.setConf(configBuffer);
+ conn.setConf(configBuffer);
- configBuffer = null;
- }
+ configBuffer = null;
+ }
- // Flush the configuration to disk.
- //this is doing bad things right now NF 22/07/10
- //conn.saveConf();
+ // Flush the configuration to disk.
+ //this is doing bad things right now NF 22/07/10
+ //conn.saveConf();
- return true;
- }
- }
- catch (Exception ioe)
- {
- logException("Unable to update Tor configuration: " + ioe.getMessage(),ioe);
+ return true;
}
-
- return false;
+ } catch (Exception ioe) {
+ logException("Unable to update Tor configuration: " + ioe.getMessage(), ioe);
}
- protected void sendCallbackBandwidth(long upload, long download, long written, long read) {
+ return false;
+ }
+
+ protected void sendCallbackBandwidth(long upload, long download, long written, long read) {
Intent intent = new Intent(LOCAL_ACTION_BANDWIDTH);
- intent.putExtra("up",upload);
- intent.putExtra("down",download);
- intent.putExtra("written",written);
- intent.putExtra("read",read);
- intent.putExtra(EXTRA_STATUS, mCurrentStatus);
+ intent.putExtra("up", upload);
+ intent.putExtra("down", download);
+ intent.putExtra("written", written);
+ intent.putExtra("read", read);
+ intent.putExtra(EXTRA_STATUS, mCurrentStatus);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
- private void sendCallbackLogMessage (final String logMessage)
- {
+ private void sendCallbackLogMessage(final String logMessage) {
mHandler.post(() -> {
@@ -1494,20 +1281,19 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
}
- private void sendCallbackPorts (int socksPort, int httpPort, int dnsPort, int transPort)
- {
+ private void sendCallbackPorts(int socksPort, int httpPort, int dnsPort, int transPort) {
Intent intent = new Intent(LOCAL_ACTION_PORTS);
// You can also include some extra data.
- intent.putExtra(EXTRA_SOCKS_PROXY_PORT,socksPort);
- intent.putExtra(EXTRA_HTTP_PROXY_PORT,httpPort);
- intent.putExtra(EXTRA_DNS_PORT,dnsPort);
- intent.putExtra(EXTRA_TRANS_PORT,transPort);
+ intent.putExtra(EXTRA_SOCKS_PROXY_PORT, socksPort);
+ intent.putExtra(EXTRA_HTTP_PROXY_PORT, httpPort);
+ intent.putExtra(EXTRA_DNS_PORT, dnsPort);
+ intent.putExtra(EXTRA_TRANS_PORT, transPort);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
if (Prefs.useVpn())
- mVpnManager.handleIntent(new Builder(),intent);
+ mVpnManager.handleIntent(new Builder(), intent);
}
@@ -1522,6 +1308,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
/**
* Send a secure broadcast only to Orbot itself
+ *
* @see {@link ContextWrapper#sendBroadcast(Intent)}
* @see {@link LocalBroadcastManager}
*/
@@ -1541,47 +1328,47 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
*/
/**
- private final BroadcastReceiver mNetworkStateReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
-
- if (mCurrentStatus == STATUS_OFF)
- return;
-
- SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
-
- boolean doNetworKSleep = prefs.getBoolean(OrbotConstants.PREF_DISABLE_NETWORK, true);
-
- final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
- final NetworkInfo netInfo = cm.getActiveNetworkInfo();
-
- boolean newConnectivityState = false;
- int newNetType = -1;
-
- if (netInfo!=null)
- newNetType = netInfo.getType();
-
- if(netInfo != null && netInfo.isConnected()) {
- // WE ARE CONNECTED: DO SOMETHING
- newConnectivityState = true;
- }
- else {
- // WE ARE NOT: DO SOMETHING ELSE
- newConnectivityState = false;
- }
-
- if (newConnectivityState != mConnectivity) {
- mConnectivity = newConnectivityState;
-
- //if (mConnectivity)
- // newIdentity();
- }
-
- }
- };**/
-
- private StringBuffer processSettingsImpl (StringBuffer extraLines) throws IOException
- {
+ * private final BroadcastReceiver mNetworkStateReceiver = new BroadcastReceiver() {
+ *
+ * @Override public void onReceive(Context context, Intent intent) {
+ * <p>
+ * if (mCurrentStatus == STATUS_OFF)
+ * return;
+ * <p>
+ * SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
+ * <p>
+ * boolean doNetworKSleep = prefs.getBoolean(OrbotConstants.PREF_DISABLE_NETWORK, true);
+ * <p>
+ * final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
+ * final NetworkInfo netInfo = cm.getActiveNetworkInfo();
+ * <p>
+ * boolean newConnectivityState = false;
+ * int newNetType = -1;
+ * <p>
+ * if (netInfo!=null)
+ * newNetType = netInfo.getType();
+ * <p>
+ * if(netInfo != null && netInfo.isConnected()) {
+ * // WE ARE CONNECTED: DO SOMETHING
+ * newConnectivityState = true;
+ * }
+ * else {
+ * // WE ARE NOT: DO SOMETHING ELSE
+ * newConnectivityState = false;
+ * }
+ * <p>
+ * if (newConnectivityState != mConnectivity) {
+ * mConnectivity = newConnectivityState;
+ * <p>
+ * //if (mConnectivity)
+ * // newIdentity();
+ * }
+ * <p>
+ * }
+ * };
+ **/
+
+ private StringBuffer processSettingsImpl(StringBuffer extraLines) throws IOException {
logNotice(getString(R.string.updating_settings_in_tor_service));
SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
@@ -1589,64 +1376,52 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
boolean useBridges = Prefs.bridgesEnabled();
boolean becomeRelay = prefs.getBoolean(OrbotConstants.PREF_OR, false);
- boolean ReachableAddresses = prefs.getBoolean(OrbotConstants.PREF_REACHABLE_ADDRESSES,false);
+ boolean ReachableAddresses = prefs.getBoolean(OrbotConstants.PREF_REACHABLE_ADDRESSES, false);
boolean enableStrictNodes = prefs.getBoolean("pref_strict_nodes", false);
String entranceNodes = prefs.getString("pref_entrance_nodes", "");
String exitNodes = prefs.getString("pref_exit_nodes", "");
String excludeNodes = prefs.getString("pref_exclude_nodes", "");
- if (!useBridges)
- {
+ if (!useBridges) {
extraLines.append("UseBridges 0").append('\n');
- if (Prefs.useVpn()) //set the proxy here if we aren't using a bridge
- {
-
- if (!mIsLollipop)
- {
- String proxyType = "socks5";
- extraLines.append(proxyType + "Proxy" + ' ' + OrbotVpnManager.sSocksProxyLocalhost + ':' + OrbotVpnManager.sSocksProxyServerPort).append('\n');
- };
-
- }
- else
- {
- String proxyType = prefs.getString("pref_proxy_type", null);
- if (proxyType != null && proxyType.length() > 0)
- {
- String proxyHost = prefs.getString("pref_proxy_host", null);
- String proxyPort = prefs.getString("pref_proxy_port", null);
- String proxyUser = prefs.getString("pref_proxy_username", null);
- String proxyPass = prefs.getString("pref_proxy_password", null);
-
- if ((proxyHost != null && proxyHost.length()>0) && (proxyPort != null && proxyPort.length() > 0))
- {
- extraLines.append(proxyType + "Proxy" + ' ' + proxyHost + ':' + proxyPort).append('\n');
-
- if (proxyUser != null && proxyPass != null)
- {
- if (proxyType.equalsIgnoreCase("socks5"))
- {
- extraLines.append("Socks5ProxyUsername" + ' ' + proxyUser).append('\n');
- extraLines.append("Socks5ProxyPassword" + ' ' + proxyPass).append('\n');
- }
- else
- extraLines.append(proxyType + "ProxyAuthenticator" + ' ' + proxyUser + ':' + proxyPort).append('\n');
-
- }
- else if (proxyPass != null)
- extraLines.append(proxyType + "ProxyAuthenticator" + ' ' + proxyUser + ':' + proxyPort).append('\n');
-
-
-
- }
- }
- }
- }
- else
- {
+ if (Prefs.useVpn()) //set the proxy here if we aren't using a bridge
+ {
+
+ if (!mIsLollipop) {
+ String proxyType = "socks5";
+ extraLines.append(proxyType + "Proxy" + ' ' + OrbotVpnManager.sSocksProxyLocalhost + ':' + OrbotVpnManager.sSocksProxyServerPort).append('\n');
+ }
+ ;
+
+ } else {
+ String proxyType = prefs.getString("pref_proxy_type", null);
+ if (proxyType != null && proxyType.length() > 0) {
+ String proxyHost = prefs.getString("pref_proxy_host", null);
+ String proxyPort = prefs.getString("pref_proxy_port", null);
+ String proxyUser = prefs.getString("pref_proxy_username", null);
+ String proxyPass = prefs.getString("pref_proxy_password", null);
+
+ if ((proxyHost != null && proxyHost.length() > 0) && (proxyPort != null && proxyPort.length() > 0)) {
+ extraLines.append(proxyType + "Proxy" + ' ' + proxyHost + ':' + proxyPort).append('\n');
+
+ if (proxyUser != null && proxyPass != null) {
+ if (proxyType.equalsIgnoreCase("socks5")) {
+ extraLines.append("Socks5ProxyUsername" + ' ' + proxyUser).append('\n');
+ extraLines.append("Socks5ProxyPassword" + ' ' + proxyPass).append('\n');
+ } else
+ extraLines.append(proxyType + "ProxyAuthenticator" + ' ' + proxyUser + ':' + proxyPort).append('\n');
+
+ } else if (proxyPass != null)
+ extraLines.append(proxyType + "ProxyAuthenticator" + ' ' + proxyUser + ':' + proxyPort).append('\n');
+
+
+ }
+ }
+ }
+ } else {
if (fileObfsclient != null
&& fileObfsclient.exists()
&& fileObfsclient.canExecute()) {
@@ -1654,11 +1429,11 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
loadBridgeDefaults();
extraLines.append("UseBridges 1").append('\n');
- // extraLines.append("UpdateBridgesFromAuthority 1").append('\n');
+ // extraLines.append("UpdateBridgesFromAuthority 1").append('\n');
String bridgeList = Prefs.getBridgesList();
boolean obfs3Bridges = bridgeList.contains("obfs3");
- boolean obfs4Bridges = bridgeList.contains("obfs4");
+ boolean obfs4Bridges = bridgeList.contains("obfs4");
boolean meekBridges = bridgeList.contains("meek");
//check if any PT bridges are needed
@@ -1676,20 +1451,20 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
if (bridgeList != null && bridgeList.length() > 5) //longer then 1 = some real values here
{
String[] bridgeListLines = parseBridgesFromSettings(bridgeList);
- int bridgeIdx = (int)Math.floor(Math.random()*((double)bridgeListLines.length));
+ int bridgeIdx = (int) Math.floor(Math.random() * ((double) bridgeListLines.length));
String bridgeLine = bridgeListLines[bridgeIdx];
extraLines.append("Bridge ");
extraLines.append(bridgeLine);
extraLines.append("\n");
/**
- for (String bridgeConfigLine : bridgeListLines) {
- if (!TextUtils.isEmpty(bridgeConfigLine)) {
- extraLines.append("Bridge ");
- extraLines.append(bridgeConfigLine.trim());
- extraLines.append("\n");
- }
-
- }**/
+ for (String bridgeConfigLine : bridgeListLines) {
+ if (!TextUtils.isEmpty(bridgeConfigLine)) {
+ extraLines.append("Bridge ");
+ extraLines.append(bridgeConfigLine.trim());
+ extraLines.append("\n");
+ }
+
+ }**/
} else {
String type = "obfs4";
@@ -1700,9 +1475,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
getBridges(type, extraLines);
}
- }
- else
- {
+ } else {
throw new IOException("Bridge binary does not exist: " + fileObfsclient.getCanonicalPath());
}
}
@@ -1712,50 +1485,43 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
File fileGeoIP = new File(appBinHome, GEOIP_ASSET_KEY);
File fileGeoIP6 = new File(appBinHome, GEOIP6_ASSET_KEY);
- if (fileGeoIP.exists())
- {
- extraLines.append("GeoIPFile" + ' ' + fileGeoIP.getCanonicalPath()).append('\n');
- extraLines.append("GeoIPv6File" + ' ' + fileGeoIP6.getCanonicalPath()).append('\n');
+ if (fileGeoIP.exists()) {
+ extraLines.append("GeoIPFile" + ' ' + fileGeoIP.getCanonicalPath()).append('\n');
+ extraLines.append("GeoIPv6File" + ' ' + fileGeoIP6.getCanonicalPath()).append('\n');
}
if (!TextUtils.isEmpty(entranceNodes))
- extraLines.append("EntryNodes" + ' ' + entranceNodes).append('\n');
+ extraLines.append("EntryNodes" + ' ' + entranceNodes).append('\n');
if (!TextUtils.isEmpty(exitNodes))
- extraLines.append("ExitNodes" + ' ' + exitNodes).append('\n');
+ extraLines.append("ExitNodes" + ' ' + exitNodes).append('\n');
if (!TextUtils.isEmpty(excludeNodes))
- extraLines.append("ExcludeNodes" + ' ' + excludeNodes).append('\n');
+ extraLines.append("ExcludeNodes" + ' ' + excludeNodes).append('\n');
extraLines.append("StrictNodes" + ' ' + (enableStrictNodes ? "1" : "0")).append('\n');
- try
- {
- if (ReachableAddresses)
- {
+ try {
+ if (ReachableAddresses) {
String ReachableAddressesPorts =
- prefs.getString(OrbotConstants.PREF_REACHABLE_ADDRESSES_PORTS, "*:80,*:443");
+ prefs.getString(OrbotConstants.PREF_REACHABLE_ADDRESSES_PORTS, "*:80,*:443");
extraLines.append("ReachableAddresses" + ' ' + ReachableAddressesPorts).append('\n');
}
- }
- catch (Exception e)
- {
- showToolbarNotification (getString(R.string.your_reachableaddresses_settings_caused_an_exception_),ERROR_NOTIFY_ID,R.drawable.ic_stat_notifyerr);
+ } catch (Exception e) {
+ showToolbarNotification(getString(R.string.your_reachableaddresses_settings_caused_an_exception_), ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
- return null;
+ return null;
}
- try
- {
- if (becomeRelay && (!useBridges) && (!ReachableAddresses))
- {
- int ORPort = Integer.parseInt(prefs.getString(OrbotConstants.PREF_OR_PORT, "9001"));
+ try {
+ if (becomeRelay && (!useBridges) && (!ReachableAddresses)) {
+ int ORPort = Integer.parseInt(prefs.getString(OrbotConstants.PREF_OR_PORT, "9001"));
String nickname = prefs.getString(OrbotConstants.PREF_OR_NICKNAME, "Orbot");
- String dnsFile = writeDNSFile ();
+ String dnsFile = writeDNSFile();
extraLines.append("ServerDNSResolvConfFile" + ' ' + dnsFile).append('\n');
extraLines.append("ORPort" + ' ' + ORPort).append('\n');
@@ -1763,10 +1529,8 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
extraLines.append("ExitPolicy" + ' ' + "reject *:*").append('\n');
}
- }
- catch (Exception e)
- {
- showToolbarNotification (getString(R.string.your_relay_settings_caused_an_exception_),ERROR_NOTIFY_ID,R.drawable.ic_stat_notifyerr);
+ } catch (Exception e) {
+ showToolbarNotification(getString(R.string.your_relay_settings_caused_an_exception_), ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
return null;
@@ -1790,7 +1554,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
extraLines.append("HiddenServiceDir" + ' ' + hsDirPath).append('\n');
extraLines.append("HiddenServicePort" + ' ' + HSOnionPort + " 127.0.0.1:" + HSLocalPort).append('\n');
- extraLines.append("HiddenServiceVersion 2").append('\n');
+ extraLines.append("HiddenServiceVersion 2").append('\n');
if (HSAuthCookie == 1)
extraLines.append("HiddenServiceAuthorizeClient stealth " + HSname).append('\n');
@@ -1803,15 +1567,14 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
hidden_services.close();
}
+ } catch (SecurityException se) {
}
- catch (SecurityException se) {}
- try
- {
+ try {
/* ---- Client Cookies ---- */
Cursor client_cookies = mCR.query(COOKIE_CONTENT_URI, cookieProjection, ClientCookie.ENABLED + "=1", null, null);
- if(client_cookies != null) {
+ if (client_cookies != null) {
try {
while (client_cookies.moveToNext()) {
String domain = client_cookies.getString(client_cookies.getColumnIndex(ClientCookie.DOMAIN));
@@ -1819,30 +1582,19 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
extraLines.append("HidServAuth" + ' ' + domain + ' ' + cookie).append('\n');
}
} catch (Exception e) {
- Log.e(OrbotConstants.TAG,"error starting share server",e);
+ Log.e(OrbotConstants.TAG, "error starting share server", e);
}
client_cookies.close();
}
+ } catch (SecurityException se) {
}
- catch (SecurityException se) {}
return extraLines;
}
- /**
- * @param bridgeList bridges that were manually entered into Orbot settings
- * @return Array with each bridge as an element, no whitespace entries see issue #289...
- */
- private static String[] parseBridgesFromSettings(String bridgeList) {
- // this regex replaces lines that only contain whitespace with an empty String
- bridgeList = bridgeList.trim().replaceAll("(?m)^[ \t]*\r?\n", "");
- return bridgeList.split("\\n");
- }
-
//using Google DNS for now as the public DNS server
- private String writeDNSFile () throws IOException
- {
+ private String writeDNSFile() throws IOException {
File file = new File(appBinHome, "resolv.conf");
PrintWriter bw = new PrintWriter(new FileWriter(file));
@@ -1859,32 +1611,39 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
super.onTrimMemory(level);
switch (level) {
- case TRIM_MEMORY_BACKGROUND: debug("trim memory requested: app in the background");
- return;
+ case TRIM_MEMORY_BACKGROUND:
+ debug("trim memory requested: app in the background");
+ return;
- case TRIM_MEMORY_COMPLETE: debug("trim memory requested: cleanup all memory");
- return;
+ case TRIM_MEMORY_COMPLETE:
+ debug("trim memory requested: cleanup all memory");
+ return;
- case TRIM_MEMORY_MODERATE: debug("trim memory requested: clean up some memory");
- return;
+ case TRIM_MEMORY_MODERATE:
+ debug("trim memory requested: clean up some memory");
+ return;
- case TRIM_MEMORY_RUNNING_CRITICAL: debug("trim memory requested: memory on device is very low and critical");
- return;
+ case TRIM_MEMORY_RUNNING_CRITICAL:
+ debug("trim memory requested: memory on device is very low and critical");
+ return;
- case TRIM_MEMORY_RUNNING_LOW: debug("trim memory requested: memory on device is running low");
- return;
+ case TRIM_MEMORY_RUNNING_LOW:
+ debug("trim memory requested: memory on device is running low");
+ return;
- case TRIM_MEMORY_RUNNING_MODERATE: debug("trim memory requested: memory on device is moderate");
- return;
+ case TRIM_MEMORY_RUNNING_MODERATE:
+ debug("trim memory requested: memory on device is moderate");
+ return;
- case TRIM_MEMORY_UI_HIDDEN: debug("trim memory requested: app is not showing UI anymore");
- return;
+ case TRIM_MEMORY_UI_HIDDEN:
+ debug("trim memory requested: app is not showing UI anymore");
+ return;
}
}
@Override
public IBinder onBind(Intent intent) {
- Log.e( TAG, "onBind" );
+ Log.e(TAG, "onBind");
//do nothing here
return super.onBind(intent); // invoking super class will call onRevoke() when appropriate
}
@@ -1898,101 +1657,76 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(ACTION_STOP_VPN));
}
- private void setExitNode (String newExits)
- {
- SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
-
- if (TextUtils.isEmpty(newExits))
- {
- prefs.edit().remove("pref_exit_nodes").apply();
-
- if (conn != null)
- {
- try
- {
- ArrayList<String> resetBuffer = new ArrayList<String>();
- resetBuffer.add("ExitNodes");
- resetBuffer.add("StrictNodes");
- conn.resetConf(resetBuffer);
- conn.setConf("DisableNetwork","1");
- conn.setConf("DisableNetwork","0");
-
- }
- catch (Exception ioe)
- {
- Log.e(OrbotConstants.TAG, "Connection exception occured resetting exits",ioe);
- }
- }
- }
- else
- {
- prefs.edit().putString("pref_exit_nodes", newExits).apply();
-
- if (conn != null)
- {
- try
- {
+ private void setExitNode(String newExits) {
+ SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
+
+ if (TextUtils.isEmpty(newExits)) {
+ prefs.edit().remove("pref_exit_nodes").apply();
+
+ if (conn != null) {
+ try {
+ ArrayList<String> resetBuffer = new ArrayList<String>();
+ resetBuffer.add("ExitNodes");
+ resetBuffer.add("StrictNodes");
+ conn.resetConf(resetBuffer);
+ conn.setConf("DisableNetwork", "1");
+ conn.setConf("DisableNetwork", "0");
+
+ } catch (Exception ioe) {
+ Log.e(OrbotConstants.TAG, "Connection exception occured resetting exits", ioe);
+ }
+ }
+ } else {
+ prefs.edit().putString("pref_exit_nodes", newExits).apply();
+
+ if (conn != null) {
+ try {
File fileGeoIP = new File(appBinHome, GEOIP_ASSET_KEY);
File fileGeoIP6 = new File(appBinHome, GEOIP6_ASSET_KEY);
- conn.setConf("GeoIPFile",fileGeoIP.getCanonicalPath());
- conn.setConf("GeoIPv6File",fileGeoIP6.getCanonicalPath());
+ conn.setConf("GeoIPFile", fileGeoIP.getCanonicalPath());
+ conn.setConf("GeoIPv6File", fileGeoIP6.getCanonicalPath());
- conn.setConf("ExitNodes", newExits);
- conn.setConf("StrictNodes","1");
+ conn.setConf("ExitNodes", newExits);
+ conn.setConf("StrictNodes", "1");
- conn.setConf("DisableNetwork","1");
- conn.setConf("DisableNetwork","0");
+ conn.setConf("DisableNetwork", "1");
+ conn.setConf("DisableNetwork", "0");
- }
- catch (Exception ioe)
- {
- Log.e(OrbotConstants.TAG, "Connection exception occured resetting exits",ioe);
- }
- }
- }
+ } catch (Exception ioe) {
+ Log.e(OrbotConstants.TAG, "Connection exception occured resetting exits", ioe);
+ }
+ }
+ }
}
- public boolean hasConnectivity ()
- {
+ public boolean hasConnectivity() {
return mConnectivity;
}
- public int getNotifyId ()
- {
+ public int getNotifyId() {
return NOTIFY_ID;
}
- // for bridge loading from the assets default bridges.txt file
- class Bridge
- {
- String type;
- String config;
- }
-
-
- private void loadBridgeDefaults ()
- {
- if (alBridges == null)
- {
+ private void loadBridgeDefaults() {
+ if (alBridges == null) {
alBridges = new ArrayList<>();
- try
- {
- BufferedReader in=
+ try {
+ BufferedReader in =
new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.bridges), "UTF-8"));
String str;
- while ((str=in.readLine()) != null) {
+ while ((str = in.readLine()) != null) {
- StringTokenizer st = new StringTokenizer (str," ");
+ StringTokenizer st = new StringTokenizer(str, " ");
Bridge b = new Bridge();
b.type = st.nextToken();
StringBuffer sbConfig = new StringBuffer();
- while(st.hasMoreTokens())
+ while (st.hasMoreTokens())
sbConfig.append(st.nextToken()).append(' ');
b.config = sbConfig.toString().trim();
@@ -2002,20 +1736,14 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
}
in.close();
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
e.printStackTrace();
}
}
}
- //we should randomly sort alBridges so we don't have the same bridge order each time
- Random bridgeSelectRandom = new Random(System.nanoTime());
-
- private void getBridges (String type, StringBuffer extraLines)
- {
+ private void getBridges(String type, StringBuffer extraLines) {
Collections.shuffle(alBridges, bridgeSelectRandom);
@@ -2024,10 +1752,8 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
int bridgeCount = 0;
//now go through the list to find the bridges we want
- for (Bridge b : alBridges)
- {
- if (b.type.equals(type))
- {
+ for (Bridge b : alBridges) {
+ if (b.type.equals(type)) {
extraLines.append("Bridge ");
extraLines.append(b.type);
extraLines.append(' ');
@@ -2043,21 +1769,113 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
}
- ActionBroadcastReceiver mActionBroadcastReceiver;
+ public static final class HiddenService implements BaseColumns {
+ public static final String NAME = "name";
+ public static final String PORT = "port";
+ public static final String ONION_PORT = "onion_port";
+ public static final String DOMAIN = "domain";
+ public static final String AUTH_COOKIE = "auth_cookie";
+ public static final String AUTH_COOKIE_VALUE = "auth_cookie_value";
+ public static final String CREATED_BY_USER = "created_by_user";
+ public static final String ENABLED = "enabled";
- private class ActionBroadcastReceiver extends BroadcastReceiver
- {
- public void onReceive(Context context, Intent intent)
- {
- switch (intent.getAction())
- {
- case CMD_NEWNYM:
- {
+ private HiddenService() {
+ }
+ }
+
+ public static final class ClientCookie implements BaseColumns {
+ public static final String DOMAIN = "domain";
+ public static final String AUTH_COOKIE_VALUE = "auth_cookie_value";
+ public static final String ENABLED = "enabled";
+
+ private ClientCookie() {
+ }
+ }
+
+ private class IncomingIntentRouter implements Runnable {
+ Intent mIntent;
+
+ public IncomingIntentRouter(Intent intent) {
+ mIntent = intent;
+ }
+
+ public void run() {
+
+ String action = mIntent.getAction();
+
+ if (!TextUtils.isEmpty(action)) {
+ if (action.equals(ACTION_START) || action.equals(ACTION_START_ON_BOOT)) {
+ startTor();
+ replyWithStatus(mIntent);
+
+ if (Prefs.useVpn()) {
+ if (mVpnManager != null
+ && (!mVpnManager.isStarted())) {
+ //start VPN here
+ Intent vpnIntent = VpnService.prepare(OrbotService.this);
+ if (vpnIntent == null) //then we can run the VPN
+ {
+ mVpnManager.handleIntent(new Builder(), mIntent);
+
+ }
+ }
+
+ if (mPortSOCKS != -1 && mPortHTTP != -1)
+ sendCallbackPorts(mPortSOCKS, mPortHTTP, mPortDns, mPortTrans);
+ }
+
+ } else if (action.equals(ACTION_START_VPN)) {
+ if (mVpnManager != null && (!mVpnManager.isStarted())) {
+ //start VPN here
+ Intent vpnIntent = VpnService.prepare(OrbotService.this);
+ if (vpnIntent == null) //then we can run the VPN
+ {
+ mVpnManager.handleIntent(new Builder(), mIntent);
+
+
+ }
+ }
+
+ if (mPortSOCKS != -1 && mPortHTTP != -1)
+ sendCallbackPorts(mPortSOCKS, mPortHTTP, mPortDns, mPortTrans);
+
+
+ } else if (action.equals(ACTION_STOP_VPN)) {
+ if (mVpnManager != null)
+ mVpnManager.handleIntent(new Builder(), mIntent);
+ } else if (action.equals(ACTION_STATUS)) {
+ replyWithStatus(mIntent);
+ } else if (action.equals(CMD_SIGNAL_HUP)) {
+ requestTorRereadConfig();
+ } else if (action.equals(CMD_NEWNYM)) {
+ newIdentity();
+ } else if (action.equals(CMD_ACTIVE)) {
+ sendSignalActive();
+ } else if (action.equals(CMD_SET_EXIT)) {
+
+ setExitNode(mIntent.getStringExtra("exit"));
+
+ } else {
+ Log.w(OrbotConstants.TAG, "unhandled OrbotService Intent: " + action);
+ }
+ }
+ }
+ }
+
+ // for bridge loading from the assets default bridges.txt file
+ class Bridge {
+ String type;
+ String config;
+ }
+
+ private class ActionBroadcastReceiver extends BroadcastReceiver {
+ public void onReceive(Context context, Intent intent) {
+ switch (intent.getAction()) {
+ case CMD_NEWNYM: {
newIdentity();
break;
}
- case CMD_ACTIVE:
- {
+ case CMD_ACTIVE: {
sendSignalActive();
break;
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/StartTorReceiver.java b/orbotservice/src/main/java/org/torproject/android/service/StartTorReceiver.java
index 008caa1e..3fb77e91 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/StartTorReceiver.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/StartTorReceiver.java
@@ -1,4 +1,3 @@
-
package org.torproject.android.service;
import android.content.BroadcastReceiver;
@@ -6,6 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.text.TextUtils;
+
import org.torproject.android.service.util.Prefs;
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java b/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java
index 7cebd794..f473f51a 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java
@@ -18,43 +18,25 @@ import java.util.StringTokenizer;
*/
public class TorEventHandler implements EventHandler, TorServiceConstants {
+ private final static int BW_THRESDHOLD = 10000;
private OrbotService mService;
-
-
private long lastRead = -1;
private long lastWritten = -1;
private long mTotalTrafficWritten = 0;
private long mTotalTrafficRead = 0;
-
private NumberFormat mNumberFormat = null;
+ private HashMap<String, Node> hmBuiltNodes = new HashMap<String, Node>();
+ public TorEventHandler(OrbotService service) {
+ mService = service;
+ mNumberFormat = NumberFormat.getInstance(Locale.getDefault()); //localized numbers!
- private HashMap<String,Node> hmBuiltNodes = new HashMap<String,Node>();
-
- public class Node
- {
- public String status;
- public String id;
- public String name;
- public String ipAddress;
- public String country;
- public String organization;
-
- public boolean isFetchingInfo = false;
}
- public HashMap<String,Node> getNodes ()
- {
+ public HashMap<String, Node> getNodes() {
return hmBuiltNodes;
}
- public TorEventHandler (OrbotService service)
- {
- mService = service;
- mNumberFormat = NumberFormat.getInstance(Locale.getDefault()); //localized numbers!
-
- }
-
@Override
public void message(String severity, String msg) {
@@ -77,7 +59,7 @@ public class TorEventHandler implements EventHandler, TorServiceConstants {
StringBuilder sb = new StringBuilder();
sb.append("orConnStatus (");
- sb.append(parseNodeName(orName) );
+ sb.append(parseNodeName(orName));
sb.append("): ");
sb.append(status);
@@ -108,13 +90,10 @@ public class TorEventHandler implements EventHandler, TorServiceConstants {
mService.logNotice(sb.toString());
}
- private final static int BW_THRESDHOLD = 10000;
-
@Override
public void bandwidthUsed(long read, long written) {
- if (lastWritten > BW_THRESDHOLD || lastRead > BW_THRESDHOLD)
- {
+ if (lastWritten > BW_THRESDHOLD || lastRead > BW_THRESDHOLD) {
StringBuilder sb = new StringBuilder();
sb.append(formatCount(read));
sb.append(" \u2193");
@@ -150,9 +129,9 @@ public class TorEventHandler implements EventHandler, TorServiceConstants {
// Over 2Mb, returns "xxx.xxMb"
if (mNumberFormat != null)
if (count < 1e6)
- return mNumberFormat.format(Math.round((float)((int)(count*10/1024))/10)) + "kbps";
+ return mNumberFormat.format(Math.round((float) ((int) (count * 10 / 1024)) / 10)) + "kbps";
else
- return mNumberFormat.format(Math.round((float)((int)(count*100/1024/1024))/100)) + "mbps";
+ return mNumberFormat.format(Math.round((float) ((int) (count * 100 / 1024 / 1024)) / 100)) + "mbps";
else
return "";
@@ -203,8 +182,7 @@ public class TorEventHandler implements EventHandler, TorServiceConstants {
node = hmBuiltNodes.get(nodeId);
- if (node == null)
- {
+ if (node == null) {
node = new Node();
node.id = nodeId;
node.name = nodeName;
@@ -220,11 +198,9 @@ public class TorEventHandler implements EventHandler, TorServiceConstants {
if (st.hasMoreTokens())
sb.append(" > ");
- if (status.equals("EXTENDED"))
- {
+ if (status.equals("EXTENDED")) {
- if (isFirstNode)
- {
+ if (isFirstNode) {
hmBuiltNodes.put(node.id, node);
if (node.ipAddress == null && (!node.isFetchingInfo) && Prefs.useDebugLogging()) {
@@ -234,14 +210,12 @@ public class TorEventHandler implements EventHandler, TorServiceConstants {
isFirstNode = false;
}
- }
- else if (status.equals("BUILT")) {
- // mService.logNotice(sb.toString());
+ } else if (status.equals("BUILT")) {
+ // mService.logNotice(sb.toString());
if (Prefs.useDebugLogging() && nodeCount > 3)
mService.debug(sb.toString());
- }
- else if (status.equals("CLOSED")) {
+ } else if (status.equals("CLOSED")) {
// mService.logNotice(sb.toString());
hmBuiltNodes.remove(node.id);
}
@@ -252,21 +226,25 @@ public class TorEventHandler implements EventHandler, TorServiceConstants {
}
+ }
+ private String parseNodeName(String node) {
+ if (node.indexOf('=') != -1) {
+ return (node.substring(node.indexOf("=") + 1));
+ } else if (node.indexOf('~') != -1) {
+ return (node.substring(node.indexOf("~") + 1));
+ } else
+ return node;
}
+ public class Node {
+ public String status;
+ public String id;
+ public String name;
+ public String ipAddress;
+ public String country;
+ public String organization;
- private String parseNodeName(String node)
- {
- if (node.indexOf('=')!=-1)
- {
- return (node.substring(node.indexOf("=")+1));
- }
- else if (node.indexOf('~')!=-1)
- {
- return (node.substring(node.indexOf("~")+1));
- }
- else
- return node;
+ public boolean isFetchingInfo = false;
}
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java b/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
index dfd5a5f0..f1769687 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
@@ -7,7 +7,6 @@ import android.content.Intent;
public interface TorServiceConstants {
-
String DIRECTORY_TOR_DATA = "tordata";
String TOR_CONTROL_PORT_FILE = "control.txt";
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/CustomNativeLoader.java b/orbotservice/src/main/java/org/torproject/android/service/util/CustomNativeLoader.java
index 50dc2825..6504b8c7 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/CustomNativeLoader.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/CustomNativeLoader.java
@@ -74,16 +74,14 @@ public class CustomNativeLoader {
try {
- File fileNativeBin = new File(getNativeLibraryDir(context),libname + ".so");
+ File fileNativeBin = new File(getNativeLibraryDir(context), libname + ".so");
if (!fileNativeBin.exists())
- fileNativeBin = new File(getNativeLibraryDir(context),"lib" + libname + ".so");
+ fileNativeBin = new File(getNativeLibraryDir(context), "lib" + libname + ".so");
- if (fileNativeBin.exists())
- {
+ if (fileNativeBin.exists()) {
if (fileNativeBin.canExecute())
return fileNativeBin;
- else
- {
+ else {
setExecutable(fileNativeBin);
if (fileNativeBin.canExecute())
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/CustomShell.java b/orbotservice/src/main/java/org/torproject/android/service/util/CustomShell.java
index 8007d047..bddfab2c 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/CustomShell.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/CustomShell.java
@@ -3,6 +3,7 @@ package org.torproject.android.service.util;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.WorkerThread;
+
import com.jaredrummler.android.shell.CommandResult;
import com.jaredrummler.android.shell.Shell;
import com.jaredrummler.android.shell.ShellExitCode;
@@ -18,7 +19,7 @@ public class CustomShell extends Shell {
@WorkerThread
- public static CommandResult run(@NonNull String shell, boolean waitFor, @Nullable Map<String,String> env, @NonNull String command) {
+ public static CommandResult run(@NonNull String shell, boolean waitFor, @Nullable Map<String, String> env, @NonNull String command) {
List<String> stdout = Collections.synchronizedList(new ArrayList<String>());
List<String> stderr = Collections.synchronizedList(new ArrayList<String>());
int exitCode = -1;
@@ -56,17 +57,17 @@ public class CustomShell extends Shell {
// make sure our threads are done gobbling, our streams are closed, and the process is destroyed - while the
// latter two shouldn't be needed in theory, and may even produce warnings, in "normal" Java they are required
// for guaranteed cleanup of resources, so lets be safe and do this on Android as well
- /**
- try {
- stdin.close();
- } catch (IOException e) {
- // might be closed already
- }**/
-
- if (waitFor) {
- stdoutGobbler.join();
- stderrGobbler.join();
- }
+ /**
+ try {
+ stdin.close();
+ } catch (IOException e) {
+ // might be closed already
+ }**/
+
+ if (waitFor) {
+ stdoutGobbler.join();
+ stderrGobbler.join();
+ }
} catch (InterruptedException e) {
exitCode = ShellExitCode.WATCHDOG_EXIT;
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
index 3c4c1fc3..8bec9ccc 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
@@ -3,6 +3,7 @@ package org.torproject.android.service.util;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.util.Log;
+
import org.torproject.android.binary.TorServiceConstants;
import java.io.File;
@@ -24,20 +25,86 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
private File fileTorrc;
private File fileTor;
- public CustomTorResourceInstaller (Context context, File installFolder)
- {
+ public CustomTorResourceInstaller(Context context, File installFolder) {
this.installFolder = installFolder;
this.context = context;
}
+ // Return Full path to the directory where native JNI libraries are stored.
+ private static String getNativeLibraryDir(Context context) {
+ ApplicationInfo appInfo = context.getApplicationInfo();
+ return appInfo.nativeLibraryDir;
+ }
+
+ /*
+ * Write the inputstream contents to the file
+ */
+ private static boolean streamToFile(InputStream stm, File outFile, boolean append, boolean zip) throws IOException {
+ byte[] buffer = new byte[FILE_WRITE_BUFFER_SIZE];
+
+ int bytecount;
+
+ OutputStream stmOut = new FileOutputStream(outFile.getAbsolutePath(), append);
+ ZipInputStream zis = null;
+
+ if (zip) {
+ zis = new ZipInputStream(stm);
+ ZipEntry ze = zis.getNextEntry();
+ stm = zis;
+
+ }
+
+ while ((bytecount = stm.read(buffer)) > 0) {
+
+ stmOut.write(buffer, 0, bytecount);
+
+ }
+
+ stmOut.close();
+ stm.close();
+
+ if (zis != null)
+ zis.close();
+
+
+ return true;
+
+ }
+
+
+
+
+ /*
+ * Extract the Tor binary from the APK file using ZIP
+ */
+
+ private static File[] listf(String directoryName) {
+
+ // .............list file
+ File directory = new File(directoryName);
+
+ // get all the files from a directory
+ File[] fList = directory.listFiles();
+
+ if (fList != null)
+ for (File file : fList) {
+ if (file.isFile()) {
+ Log.d(TAG, file.getAbsolutePath());
+ } else if (file.isDirectory()) {
+ listf(file.getAbsolutePath());
+ }
+ }
+
+ return fList;
+ }
+
//
/*
* Extract the Tor resources from the APK file using ZIP
*
* @File path to the Tor executable
*/
- public File installResources () throws IOException, TimeoutException
- {
+ public File installResources() throws IOException, TimeoutException {
fileTor = new File(installFolder, TOR_ASSET_KEY);
@@ -48,14 +115,12 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
fileTorrc = assetToFile(COMMON_ASSET_KEY + TORRC_ASSET_KEY, TORRC_ASSET_KEY, false, false);
File fileNativeDir = new File(getNativeLibraryDir(context));
- fileTor = new File(fileNativeDir,TOR_ASSET_KEY + ".so");
+ fileTor = new File(fileNativeDir, TOR_ASSET_KEY + ".so");
- if (fileTor.exists())
- {
+ if (fileTor.exists()) {
if (fileTor.canExecute())
return fileTor;
- else
- {
+ else {
setExecutable(fileTor);
if (fileTor.canExecute())
@@ -76,7 +141,7 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
}
//let's try another approach
- fileTor = CustomNativeLoader.loadNativeBinary(context,TOR_ASSET_KEY,fileTorBin);
+ fileTor = CustomNativeLoader.loadNativeBinary(context, TOR_ASSET_KEY, fileTorBin);
if (fileTor != null && fileTor.exists())
setExecutable(fileTor);
@@ -87,22 +152,7 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
return null;
}
-
- // Return Full path to the directory where native JNI libraries are stored.
- private static String getNativeLibraryDir(Context context) {
- ApplicationInfo appInfo = context.getApplicationInfo();
- return appInfo.nativeLibraryDir;
- }
-
-
-
-
- /*
- * Extract the Tor binary from the APK file using ZIP
- */
-
- private boolean installGeoIP () throws IOException
- {
+ private boolean installGeoIP() throws IOException {
assetToFile(COMMON_ASSET_KEY + GEOIP_ASSET_KEY, GEOIP_ASSET_KEY, false, false);
@@ -124,73 +174,11 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
return outFile;
}
-
- /*
- * Write the inputstream contents to the file
- */
- private static boolean streamToFile(InputStream stm, File outFile, boolean append, boolean zip) throws IOException
-
- {
- byte[] buffer = new byte[FILE_WRITE_BUFFER_SIZE];
-
- int bytecount;
-
- OutputStream stmOut = new FileOutputStream(outFile.getAbsolutePath(), append);
- ZipInputStream zis = null;
-
- if (zip)
- {
- zis = new ZipInputStream(stm);
- ZipEntry ze = zis.getNextEntry();
- stm = zis;
-
- }
-
- while ((bytecount = stm.read(buffer)) > 0)
- {
-
- stmOut.write(buffer, 0, bytecount);
-
- }
-
- stmOut.close();
- stm.close();
-
- if (zis != null)
- zis.close();
-
-
- return true;
-
- }
-
-
-
private void setExecutable(File fileBin) {
fileBin.setReadable(true);
fileBin.setExecutable(true);
fileBin.setWritable(false);
fileBin.setWritable(true, true);
}
-
- private static File[] listf(String directoryName) {
-
- // .............list file
- File directory = new File(directoryName);
-
- // get all the files from a directory
- File[] fList = directory.listFiles();
-
- if (fList != null)
- for (File file : fList) {
- if (file.isFile()) {
- Log.d(TAG,file.getAbsolutePath());
- } else if (file.isDirectory()) {
- listf(file.getAbsolutePath());
- }
- }
-
- return fList;
- }
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/DummyActivity.java b/orbotservice/src/main/java/org/torproject/android/service/util/DummyActivity.java
index 20804b95..c818c96f 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/DummyActivity.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/DummyActivity.java
@@ -7,9 +7,9 @@ import android.os.Bundle;
* To combat background service being stopped/swiped
*/
public class DummyActivity extends Activity {
- @Override
- public void onCreate( Bundle icicle ) {
- super.onCreate( icicle );
- finish();
- }
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ finish();
+ }
}
\ No newline at end of file
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/ExternalIPFetcher.java b/orbotservice/src/main/java/org/torproject/android/service/util/ExternalIPFetcher.java
index aa176b2c..745307d9 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/ExternalIPFetcher.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/ExternalIPFetcher.java
@@ -2,8 +2,8 @@ package org.torproject.android.service.util;
import org.json.JSONArray;
import org.json.JSONObject;
-import org.torproject.android.service.TorEventHandler;
import org.torproject.android.service.OrbotService;
+import org.torproject.android.service.TorEventHandler;
import java.io.BufferedReader;
import java.io.InputStream;
@@ -15,20 +15,18 @@ import java.net.URLConnection;
public class ExternalIPFetcher implements Runnable {
+ private final static String ONIONOO_BASE_URL = "https://onionoo.torproject.org/details?fields=country_name,as_name,or_addre…";
private OrbotService mService;
private TorEventHandler.Node mNode;
- private final static String ONIONOO_BASE_URL = "https://onionoo.torproject.org/details?fields=country_name,as_name,or_addre…";
private int mLocalHttpProxyPort = 8118;
- public ExternalIPFetcher (OrbotService service, TorEventHandler.Node node, int localProxyPort )
- {
+ public ExternalIPFetcher(OrbotService service, TorEventHandler.Node node, int localProxyPort) {
mService = service;
mNode = node;
mLocalHttpProxyPort = localProxyPort;
}
- public void run ()
- {
+ public void run() {
try {
URLConnection conn = null;
@@ -36,7 +34,7 @@ public class ExternalIPFetcher implements Runnable {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", mLocalHttpProxyPort));
conn = new URL(ONIONOO_BASE_URL + mNode.id).openConnection(proxy);
- conn.setRequestProperty("Connection","Close");
+ conn.setRequestProperty("Connection", "Close");
conn.setConnectTimeout(60000);
conn.setReadTimeout(60000);
@@ -49,15 +47,14 @@ public class ExternalIPFetcher implements Runnable {
StringBuffer json = new StringBuffer();
String line = null;
- while ((line = reader.readLine())!=null)
+ while ((line = reader.readLine()) != null)
json.append(line);
JSONObject jsonNodeInfo = new org.json.JSONObject(json.toString());
JSONArray jsonRelays = jsonNodeInfo.getJSONArray("relays");
- if (jsonRelays.length() > 0)
- {
+ if (jsonRelays.length() > 0) {
mNode.ipAddress = jsonRelays.getJSONObject(0).getJSONArray("or_addresses").getString(0).split(":")[0];
mNode.country = jsonRelays.getJSONObject(0).getString("country_name");
mNode.organization = jsonRelays.getJSONObject(0).getString("as_name");
@@ -80,16 +77,9 @@ public class ExternalIPFetcher implements Runnable {
is.close();
-
} catch (Exception e) {
- // mService.debug ("Error getting node details from onionoo: " + e.getMessage());
-
-
+ // mService.debug ("Error getting node details from onionoo: " + e.getMessage());
}
-
-
}
-
-
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/NativeLoader.java b/orbotservice/src/main/java/org/torproject/android/service/util/NativeLoader.java
index e79d4457..f97f68e0 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/NativeLoader.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/NativeLoader.java
@@ -1,4 +1,3 @@
-
package org.torproject.android.service.util;
import android.content.Context;
@@ -25,19 +24,19 @@ public class NativeLoader {
zipFile = new ZipFile(context.getApplicationInfo().sourceDir);
/**
- Enumeration<? extends ZipEntry> entries = zipFile.entries();
- while (entries.hasMoreElements())
- {
- ZipEntry entry = entries.nextElement();
- Log.d("Zip","entry: " + entry.getName());
- }
- **/
+ Enumeration<? extends ZipEntry> entries = zipFile.entries();
+ while (entries.hasMoreElements())
+ {
+ ZipEntry entry = entries.nextElement();
+ Log.d("Zip","entry: " + entry.getName());
+ }
+ **/
ZipEntry entry = zipFile.getEntry("lib/" + folder + "/" + libName + ".so");
if (entry == null) {
entry = zipFile.getEntry("lib/" + folder + "/" + libName);
if (entry == null)
- throw new Exception("Unable to find file in apk:" + "lib/" + folder + "/" + libName);
+ throw new Exception("Unable to find file in apk:" + "lib/" + folder + "/" + libName);
}
stream = zipFile.getInputStream(entry);
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/PortForwarder.java b/orbotservice/src/main/java/org/torproject/android/service/util/PortForwarder.java
index 052aeed0..26c3a3ff 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/PortForwarder.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/PortForwarder.java
@@ -1,6 +1,7 @@
package org.torproject.android.service.util;
import android.util.Log;
+
import com.offbynull.portmapper.PortMapperFactory;
import com.offbynull.portmapper.gateway.Bus;
import com.offbynull.portmapper.gateway.Gateway;
@@ -19,17 +20,14 @@ public class PortForwarder {
private boolean shutdown = false;
private Thread mThread = null;
- public void shutdown ()
- {
+ public void shutdown() {
shutdown = true;
}
- public void forward (final int internalPort, final int externalPort, final long lifetime) throws InterruptedException {
+ public void forward(final int internalPort, final int externalPort, final long lifetime) throws InterruptedException {
- mThread = new Thread ()
- {
- public void run ()
- {
+ mThread = new Thread() {
+ public void run() {
try {
forwardSync(internalPort, externalPort, lifetime);
} catch (InterruptedException e) {
@@ -42,7 +40,7 @@ public class PortForwarder {
}
- public void forwardSync (int internalPort, int externalPort, long lifetime) throws InterruptedException {
+ public void forwardSync(int internalPort, int externalPort, long lifetime) throws InterruptedException {
// Start gateways
Gateway network = NetworkGateway.create();
Gateway process = ProcessGateway.create();
@@ -59,13 +57,13 @@ public class PortForwarder {
// (both internal and external ports). Be mindful of this when choosing which
// ports you want to map.
MappedPort mappedPort = mapper.mapPort(PortType.TCP, internalPort, externalPort, lifetime);
- Log.d(getClass().getName(),"Port mapping added: " + mappedPort);
+ Log.d(getClass().getName(), "Port mapping added: " + mappedPort);
// Refresh mapping half-way through the lifetime of the mapping (for example,
// if the mapping is available for 40 seconds, refresh it every 20 seconds)
- while(!shutdown) {
+ while (!shutdown) {
mappedPort = mapper.refreshPort(mappedPort, mappedPort.getLifetime() / 2L);
- Log.d(getClass().getName(),"Port mapping refreshed: " + mappedPort);
+ Log.d(getClass().getName(), "Port mapping refreshed: " + mappedPort);
Thread.sleep(mappedPort.getLifetime() * 1000L);
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java b/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java
index 099e2677..cc4c9b98 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java
@@ -1,4 +1,3 @@
-
package org.torproject.android.service.util;
import android.content.Context;
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/TCPSourceApp.java b/orbotservice/src/main/java/org/torproject/android/service/util/TCPSourceApp.java
index 2985ae3d..1aa6445a 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/TCPSourceApp.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/TCPSourceApp.java
@@ -49,71 +49,19 @@ import java.util.regex.Pattern;
/**
* Main class for the TCPSourceApp library.
- * @author Sebastiano Gottardo
*
+ * @author Sebastiano Gottardo
*/
public class TCPSourceApp {
- /*
- * This class represents an Android application. Each application is
- * uniquely identified by its package name (e.g. com.megadevs.tcpsourceapp)
- * and its version (e.g. 1.0).
- */
- public static class AppDescriptor {
-
- private String packageName;
- private String version;
- private int uid;
-
- public AppDescriptor(int uid, String pName, String ver) {
- this.uid = uid;
- packageName = pName;
- version = ver;
- }
-
- public int getUid () {
- return uid;
- }
-
- public String getPackageName() {
- return packageName;
- }
-
- public String getVersion() {
- return version;
- }
-
- /*
- * Override of the 'equals' method, in order to have a proper
- * comparison between two AppDescriptor objects.
- *
- * (non-Javadoc)
- * @see java.lang.Object#equals(java.lang.Object)
- */
- @Override
- public boolean equals(Object o) {
-
- if (o instanceof AppDescriptor) {
- boolean c1 = ((AppDescriptor) o).packageName.compareTo(this.packageName) == 0;
- boolean c2 = ((AppDescriptor) o).version.compareTo(this.version) == 0;
-
- return c1 && c2;
- }
-
- return false;
- }
-
- }
-
/*
* In a Linux-based OS, each active TCP socket is mapped in the following
* two files. A socket may be mapped in the '/proc/net/tcp' file in case
* of a simple IPv4 address, or in the '/proc/net/tcp6' if an IPv6 address
* is available.
*/
- private static final String TCP_4_FILE_PATH = "/proc/net/tcp";
- private static final String TCP_6_FILE_PATH = "/proc/net/tcp6";
-
+ private static final String TCP_4_FILE_PATH = "/proc/net/tcp";
+ private static final String TCP_6_FILE_PATH = "/proc/net/tcp6";
/*
* Two regular expressions that are able to extract valuable informations
* from the two /proc/net/tcp* files. More specifically, there are three
@@ -122,24 +70,20 @@ public class TCPSourceApp {
* - port
* - PID
*/
- private static final String TCP_6_PATTERN = "\\d+:\\s([0-9A-F]{32}):([0-9A-F]{4})\\s[0-9A-F]{32}:[0-9A-F]{4}\\s[0-9A-F]{2}\\s[0-9]{8}:[0-9]{8}\\s[0-9]{2}:[0-9]{8}\\s[0-9]{8}\\s+([0-9]+)";
+ private static final String TCP_6_PATTERN = "\\d+:\\s([0-9A-F]{32}):([0-9A-F]{4})\\s[0-9A-F]{32}:[0-9A-F]{4}\\s[0-9A-F]{2}\\s[0-9]{8}:[0-9]{8}\\s[0-9]{2}:[0-9]{8}\\s[0-9]{8}\\s+([0-9]+)";
+ private static final String TCP_4_PATTERN = "\\d+:\\s([0-9A-F]{8}):([0-9A-F]{4})\\s[0-9A-F]{8}:[0-9A-F]{4}\\s[0-9A-F]{2}\\s[0-9A-F]{8}:[0-9A-F]{8}\\s[0-9]{2}:[0-9]{8}\\s[0-9A-F]{8}\\s+([0-9]+)";
//sargo:/ $ cat /proc/net/tcp6
// sl local_address remote_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
// 0: 00000000000000000000000000000000:C36A 00000000000000000000000000000000:0000 8A 00000000:00000000 00:00000000 00000000 1001 0 35059 1 0000000000000000 99 0 0 10 0
// 1: 00000000000000000000000000000000:A64B 00000000000000000000000000000000:0000 8A 00000000:00000000 00:00000000 00000000 1001 0 910009 1 0000000000000000 99 0 0 10 0
-
-
- private static final String TCP_4_PATTERN = "\\d+:\\s([0-9A-F]{8}):([0-9A-F]{4})\\s[0-9A-F]{8}:[0-9A-F]{4}\\s[0-9A-F]{2}\\s[0-9A-F]{8}:[0-9A-F]{8}\\s[0-9]{2}:[0-9]{8}\\s[0-9A-F]{8}\\s+([0-9]+)";
-// sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
-// 0: 00000000:C368 00000000:0000 8A 00000000:00000000 00:00000000 00000000 1001 0 34999 1 0000000000000000 99 0 0 10 0
-
/*
* Optimises the socket lookup by checking if the connected network
* interface has a 'valid' IPv6 address (a global address, not a link-local
* one).
*/
- private static boolean checkConnectedIfaces = true;
-
+ private static boolean checkConnectedIfaces = true;
+// sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
+// 0: 00000000:C368 00000000:0000 8A 00000000:00000000 00:00000000 00000000 1001 0 34999 1 0000000000000000 99 0 0 10 0
/**
* The main method of the TCPSourceApp library. This method receives an
@@ -150,8 +94,8 @@ public class TCPSourceApp {
* find the originating application.
*
* @param context a valid Android Context instance
- * @param daddr the (logical) address of the destination
- * @param dport the (logical) port of the destination
+ * @param daddr the (logical) address of the destination
+ * @param dport the (logical) port of the destination
* @return an AppDescriptor object, representing the found application; null
* if no application could be found
*/
@@ -192,8 +136,8 @@ public class TCPSourceApp {
if (hasIPv6)
while (m6.find()) {
String addressEntry = m6.group(1);
- String portEntry = m6.group(2);
- int pidEntry = Integer.valueOf(m6.group(3));
+ String portEntry = m6.group(2);
+ int pidEntry = Integer.valueOf(m6.group(3));
if (Integer.parseInt(portEntry, 16) == dport) {
PackageManager manager = context.getPackageManager();
@@ -240,8 +184,8 @@ public class TCPSourceApp {
while (m4.find()) {
String addressEntry = m4.group(1);
- String portEntry = m4.group(2);
- int pidEntry = Integer.valueOf(m4.group(3));
+ String portEntry = m4.group(2);
+ int pidEntry = Integer.valueOf(m4.group(3));
if (Integer.parseInt(portEntry, 16) == dport) {
PackageManager manager = context.getPackageManager();
@@ -312,4 +256,55 @@ public class TCPSourceApp {
checkConnectedIfaces = value;
}
+ /*
+ * This class represents an Android application. Each application is
+ * uniquely identified by its package name (e.g. com.megadevs.tcpsourceapp)
+ * and its version (e.g. 1.0).
+ */
+ public static class AppDescriptor {
+
+ private String packageName;
+ private String version;
+ private int uid;
+
+ public AppDescriptor(int uid, String pName, String ver) {
+ this.uid = uid;
+ packageName = pName;
+ version = ver;
+ }
+
+ public int getUid() {
+ return uid;
+ }
+
+ public String getPackageName() {
+ return packageName;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ /*
+ * Override of the 'equals' method, in order to have a proper
+ * comparison between two AppDescriptor objects.
+ *
+ * (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object o) {
+
+ if (o instanceof AppDescriptor) {
+ boolean c1 = ((AppDescriptor) o).packageName.compareTo(this.packageName) == 0;
+ boolean c2 = ((AppDescriptor) o).version.compareTo(this.version) == 0;
+
+ return c1 && c2;
+ }
+
+ return false;
+ }
+
+ }
+
}
\ No newline at end of file
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/TorServiceUtils.java b/orbotservice/src/main/java/org/torproject/android/service/util/TorServiceUtils.java
index 2efe5a9f..ebc829a0 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/TorServiceUtils.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/TorServiceUtils.java
@@ -16,14 +16,10 @@ public class TorServiceUtils implements TorServiceConstants {
socket.connect(new InetSocketAddress(ip, port), timeout);
socket.close();
return true;
- }
-
- catch(ConnectException ce){
+ } catch (ConnectException ce) {
//ce.printStackTrace();
return false;
- }
-
- catch (Exception ex) {
+ } catch (Exception ex) {
//ex.printStackTrace();
return false;
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/Utils.java b/orbotservice/src/main/java/org/torproject/android/service/util/Utils.java
index e6e203e3..64d912c1 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/Utils.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/Utils.java
@@ -21,170 +21,164 @@ import java.util.zip.ZipOutputStream;
public class Utils {
- public static String readString (InputStream stream)
- {
- String line = null;
-
- StringBuffer out = new StringBuffer();
-
- try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
-
- while ((line = reader.readLine()) != null)
- {
- out.append(line);
- out.append('\n');
-
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- return out.toString();
-
- }
- /*
- * Load the log file text
- */
- public static String loadTextFile (String path)
- {
- String line = null;
-
- StringBuffer out = new StringBuffer();
-
- try {
- BufferedReader reader = new BufferedReader((new FileReader(new File(path))));
-
- while ((line = reader.readLine()) != null)
- {
- out.append(line);
- out.append('\n');
-
- }
-
- reader.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- return out.toString();
-
- }
-
-
- /*
- * Load the log file text
- */
- public static boolean saveTextFile (String path, String contents)
- {
-
- try {
-
- FileWriter writer = new FileWriter( path, false );
- writer.write( contents );
-
- writer.close();
-
-
-
- return true;
-
- } catch (IOException e) {
- // Log.d(TAG, "error writing file: " + path, e);
- e.printStackTrace();
- return false;
- }
-
-
-
- }
-
-
- /*
- *
- * Zips a file at a location and places the resulting zip file at the toLocation
- * Example: zipFileAtPath("downloads/myfolder", "downloads/myFolder.zip");
- */
-
- public static boolean zipFileAtPath(String sourcePath, String toLocation) {
- final int BUFFER = 2048;
-
- File sourceFile = new File(sourcePath);
- try {
- BufferedInputStream origin = null;
- FileOutputStream dest = new FileOutputStream(toLocation);
- ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
- dest));
- if (sourceFile.isDirectory()) {
- zipSubFolder(out, sourceFile, sourceFile.getParent().length());
- } else {
- byte data[] = new byte[BUFFER];
- FileInputStream fi = new FileInputStream(sourcePath);
- origin = new BufferedInputStream(fi, BUFFER);
- ZipEntry entry = new ZipEntry(getLastPathComponent(sourcePath));
- entry.setTime(sourceFile.lastModified()); // to keep modification time after unzipping
- out.putNextEntry(entry);
- int count;
- while ((count = origin.read(data, 0, BUFFER)) != -1) {
- out.write(data, 0, count);
- }
- }
- out.close();
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }
-
- /*
- *
- * Zips a subfolder
- *
- */
-
- private static void zipSubFolder(ZipOutputStream out, File folder,
- int basePathLength) throws IOException {
-
- final int BUFFER = 2048;
-
- File[] fileList = folder.listFiles();
- BufferedInputStream origin = null;
- for (File file : fileList) {
- if (file.isDirectory()) {
- zipSubFolder(out, file, basePathLength);
- } else {
- byte data[] = new byte[BUFFER];
- String unmodifiedFilePath = file.getPath();
- String relativePath = unmodifiedFilePath
- .substring(basePathLength);
- FileInputStream fi = new FileInputStream(unmodifiedFilePath);
- origin = new BufferedInputStream(fi, BUFFER);
- ZipEntry entry = new ZipEntry(relativePath);
- entry.setTime(file.lastModified()); // to keep modification time after unzipping
- out.putNextEntry(entry);
- int count;
- while ((count = origin.read(data, 0, BUFFER)) != -1) {
- out.write(data, 0, count);
- }
- origin.close();
- }
- }
- }
-
- /*
- * gets the last path component
- *
- * Example: getLastPathComponent("downloads/example/fileToZip");
- * Result: "fileToZip"
- */
- public static String getLastPathComponent(String filePath) {
- String[] segments = filePath.split("/");
- if (segments.length == 0)
- return "";
- String lastPathComponent = segments[segments.length - 1];
- return lastPathComponent;
- }
+ public static String readString(InputStream stream) {
+ String line;
+
+ StringBuffer out = new StringBuffer();
+
+ try {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
+
+ while ((line = reader.readLine()) != null) {
+ out.append(line);
+ out.append('\n');
+
+ }
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return out.toString();
+
+ }
+
+ /*
+ * Load the log file text
+ */
+ public static String loadTextFile(String path) {
+ String line = null;
+
+ StringBuffer out = new StringBuffer();
+
+ try {
+ BufferedReader reader = new BufferedReader((new FileReader(new File(path))));
+
+ while ((line = reader.readLine()) != null) {
+ out.append(line);
+ out.append('\n');
+
+ }
+
+ reader.close();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return out.toString();
+
+ }
+
+
+ /*
+ * Load the log file text
+ */
+ public static boolean saveTextFile(String path, String contents) {
+
+ try {
+
+ FileWriter writer = new FileWriter(path, false);
+ writer.write(contents);
+
+ writer.close();
+
+
+ return true;
+
+ } catch (IOException e) {
+ // Log.d(TAG, "error writing file: " + path, e);
+ e.printStackTrace();
+ return false;
+ }
+
+
+ }
+
+
+ /*
+ *
+ * Zips a file at a location and places the resulting zip file at the toLocation
+ * Example: zipFileAtPath("downloads/myfolder", "downloads/myFolder.zip");
+ */
+
+ public static boolean zipFileAtPath(String sourcePath, String toLocation) {
+ final int BUFFER = 2048;
+
+ File sourceFile = new File(sourcePath);
+ try {
+ BufferedInputStream origin = null;
+ FileOutputStream dest = new FileOutputStream(toLocation);
+ ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
+ dest));
+ if (sourceFile.isDirectory()) {
+ zipSubFolder(out, sourceFile, sourceFile.getParent().length());
+ } else {
+ byte data[] = new byte[BUFFER];
+ FileInputStream fi = new FileInputStream(sourcePath);
+ origin = new BufferedInputStream(fi, BUFFER);
+ ZipEntry entry = new ZipEntry(getLastPathComponent(sourcePath));
+ entry.setTime(sourceFile.lastModified()); // to keep modification time after unzipping
+ out.putNextEntry(entry);
+ int count;
+ while ((count = origin.read(data, 0, BUFFER)) != -1) {
+ out.write(data, 0, count);
+ }
+ }
+ out.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ *
+ * Zips a subfolder
+ *
+ */
+
+ private static void zipSubFolder(ZipOutputStream out, File folder,
+ int basePathLength) throws IOException {
+
+ final int BUFFER = 2048;
+
+ File[] fileList = folder.listFiles();
+ BufferedInputStream origin;
+ for (File file : fileList) {
+ if (file.isDirectory()) {
+ zipSubFolder(out, file, basePathLength);
+ } else {
+ byte data[] = new byte[BUFFER];
+ String unmodifiedFilePath = file.getPath();
+ String relativePath = unmodifiedFilePath
+ .substring(basePathLength);
+ FileInputStream fi = new FileInputStream(unmodifiedFilePath);
+ origin = new BufferedInputStream(fi, BUFFER);
+ ZipEntry entry = new ZipEntry(relativePath);
+ entry.setTime(file.lastModified()); // to keep modification time after unzipping
+ out.putNextEntry(entry);
+ int count;
+ while ((count = origin.read(data, 0, BUFFER)) != -1) {
+ out.write(data, 0, count);
+ }
+ origin.close();
+ }
+ }
+ }
+
+ /*
+ * gets the last path component
+ *
+ * Example: getLastPathComponent("downloads/example/fileToZip");
+ * Result: "fileToZip"
+ */
+ public static String getLastPathComponent(String filePath) {
+ String[] segments = filePath.split("/");
+ if (segments.length == 0)
+ return "";
+ String lastPathComponent = segments[segments.length - 1];
+ return lastPathComponent;
+ }
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
index ea27af99..12c4162f 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
@@ -30,6 +30,7 @@ import android.os.ParcelFileDescriptor;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
+
import com.runjva.sourceforge.jsocks.protocol.ProxyServer;
import com.runjva.sourceforge.jsocks.server.ServerAuthenticatorNone;
@@ -60,167 +61,174 @@ import static org.torproject.android.service.TorServiceConstants.ACTION_STOP_VPN
public class OrbotVpnManager implements Handler.Callback {
private static final String TAG = "OrbotVpnService";
-
+ private final static int VPN_MTU = 1500;
+ private final static boolean mIsLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
+ private final static String PDNSD_BIN = "pdnsd";
+ public static int sSocksProxyServerPort = -1;
+ public static String sSocksProxyLocalhost = null;
+ boolean isStarted = false;
+ File filePdnsPid;
private Thread mThreadVPN;
-
private String mSessionName = "OrbotVPN";
private ParcelFileDescriptor mInterface;
-
private int mTorSocks = -1;
- private int mTorDns = -1;
- private int pdnsdPort = 8091;
-
- public static int sSocksProxyServerPort = -1;
- public static String sSocksProxyLocalhost = null;
+ private int mTorDns = -1;
+ private int pdnsdPort = 8091;
private ProxyServer mSocksProxyServer;
+ private File filePdnsd;
+ private boolean isRestart = false;
+ private VpnService mService;
- private final static int VPN_MTU = 1500;
-
- private final static boolean mIsLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
+ public OrbotVpnManager(VpnService service) throws IOException, TimeoutException {
+ mService = service;
+ filePdnsd = CustomNativeLoader.loadNativeBinary(service.getApplicationContext(), PDNSD_BIN, new File(service.getFilesDir(), PDNSD_BIN));
+ Tun2Socks.init();
+ }
- private File filePdnsd;
+ public static File makePdnsdConf(Context context, File fileDir, String torDnsHost, int torDnsPort, String pdnsdHost, int pdnsdPort) throws FileNotFoundException, IOException {
+ String conf = String.format(context.getString(R.string.pdnsd_conf), torDnsHost, torDnsPort, fileDir.getCanonicalPath(), pdnsdHost, pdnsdPort);
- private final static String PDNSD_BIN = "pdnsd";
+ Log.d(TAG, "pdsnd conf:" + conf);
+
+ File fPid = new File(fileDir, pdnsdPort + "pdnsd.conf");
+
+ if (fPid.exists()) {
+ fPid.delete();
+ }
+
+ FileOutputStream fos = new FileOutputStream(fPid, false);
+ PrintStream ps = new PrintStream(fos);
+ ps.print(conf);
+ ps.close();
+
+ File cache = new File(fileDir, "pdnsd.cache");
+
+ if (!cache.exists()) {
+ try {
+ cache.createNewFile();
+ } catch (Exception e) {
+ }
+ }
+ return fPid;
+ }
- private boolean isRestart = false;
-
- private VpnService mService;
-
- public OrbotVpnManager (VpnService service) throws IOException, TimeoutException {
- mService = service;
- filePdnsd = CustomNativeLoader.loadNativeBinary(service.getApplicationContext(),PDNSD_BIN,new File(service.getFilesDir(),PDNSD_BIN));
- Tun2Socks.init();
- }
-
- boolean isStarted = false;
-
public int handleIntent(VpnService.Builder builder, Intent intent) {
- if (intent != null) {
- String action = intent.getAction();
+ if (intent != null) {
+ String action = intent.getAction();
- if (!TextUtils.isEmpty(action)) {
- if (action.equals(ACTION_START_VPN) || action.equals(ACTION_START)) {
- Log.d(TAG, "starting VPN");
+ if (!TextUtils.isEmpty(action)) {
+ if (action.equals(ACTION_START_VPN) || action.equals(ACTION_START)) {
+ Log.d(TAG, "starting VPN");
- isStarted = true;
+ isStarted = true;
- // Stop the previous session by interrupting the thread.
- if (mThreadVPN != null && mThreadVPN.isAlive())
- stopVPN();
+ // Stop the previous session by interrupting the thread.
+ if (mThreadVPN != null && mThreadVPN.isAlive())
+ stopVPN();
- if (mTorSocks != -1) {
- if (!mIsLollipop) {
- startSocksBypass();
- }
+ if (mTorSocks != -1) {
+ if (!mIsLollipop) {
+ startSocksBypass();
+ }
- setupTun2Socks(builder);
- }
+ setupTun2Socks(builder);
+ }
- } else if (action.equals(ACTION_STOP_VPN)) {
- isStarted = false;
+ } else if (action.equals(ACTION_STOP_VPN)) {
+ isStarted = false;
- Log.d(TAG, "stopping VPN");
+ Log.d(TAG, "stopping VPN");
- stopVPN();
- } else if (action.equals(TorServiceConstants.LOCAL_ACTION_PORTS)) {
- Log.d(TAG, "setting VPN ports");
+ stopVPN();
+ } else if (action.equals(TorServiceConstants.LOCAL_ACTION_PORTS)) {
+ Log.d(TAG, "setting VPN ports");
- int torSocks = intent.getIntExtra(OrbotService.EXTRA_SOCKS_PROXY_PORT, -1);
- int torDns = intent.getIntExtra(OrbotService.EXTRA_DNS_PORT, -1);
+ int torSocks = intent.getIntExtra(OrbotService.EXTRA_SOCKS_PROXY_PORT, -1);
+ int torDns = intent.getIntExtra(OrbotService.EXTRA_DNS_PORT, -1);
- //if running, we need to restart
- if ((torSocks != mTorSocks || torDns != mTorDns)) {
+ //if running, we need to restart
+ if ((torSocks != mTorSocks || torDns != mTorDns)) {
- mTorSocks = torSocks;
- mTorDns = torDns;
+ mTorSocks = torSocks;
+ mTorDns = torDns;
- if (!mIsLollipop) {
- stopSocksBypass();
- startSocksBypass();
- }
+ if (!mIsLollipop) {
+ stopSocksBypass();
+ startSocksBypass();
+ }
+
+ setupTun2Socks(builder);
+ }
+ }
+ }
+
+ }
- setupTun2Socks(builder);
- }
- }
- }
- }
-
-
return Service.START_STICKY;
}
-
+
private void startSocksBypass() {
- new Thread () {
- public void run () {
-
- //generate the proxy port that the
- if (sSocksProxyServerPort == -1)
- {
- try {
-
- sSocksProxyLocalhost = "127.0.0.1";// InetAddress.getLocalHost().getHostAddress();
- sSocksProxyServerPort = (int)((Math.random()*1000)+10000);
-
- } catch (Exception e) {
- Log.e(TAG,"Unable to access localhost",e);
- throw new RuntimeException("Unable to access localhost: " + e);
-
- }
-
+ new Thread() {
+ public void run() {
+
+ //generate the proxy port that the
+ if (sSocksProxyServerPort == -1) {
+ try {
+
+ sSocksProxyLocalhost = "127.0.0.1";// InetAddress.getLocalHost().getHostAddress();
+ sSocksProxyServerPort = (int) ((Math.random() * 1000) + 10000);
+
+ } catch (Exception e) {
+ Log.e(TAG, "Unable to access localhost", e);
+ throw new RuntimeException("Unable to access localhost: " + e);
+
+ }
+
}
-
-
- if (mSocksProxyServer != null)
- {
- stopSocksBypass ();
- }
-
- try
- {
- mSocksProxyServer = new ProxyServer(new ServerAuthenticatorNone(null, null));
- ProxyServer.setVpnService(mService);
- mSocksProxyServer.start(sSocksProxyServerPort, 5, InetAddress.getLocalHost());
-
- }
- catch (Exception e)
- {
- Log.e(TAG,"error getting host",e);
- }
- }
- }.start();
+
+
+ if (mSocksProxyServer != null) {
+ stopSocksBypass();
+ }
+
+ try {
+ mSocksProxyServer = new ProxyServer(new ServerAuthenticatorNone(null, null));
+ ProxyServer.setVpnService(mService);
+ mSocksProxyServer.start(sSocksProxyServerPort, 5, InetAddress.getLocalHost());
+
+ } catch (Exception e) {
+ Log.e(TAG, "error getting host", e);
+ }
+ }
+ }.start();
}
- private synchronized void stopSocksBypass () {
+ private synchronized void stopSocksBypass() {
if (mSocksProxyServer != null) {
mSocksProxyServer.stop();
mSocksProxyServer = null;
}
}
- private void stopVPN () {
- if (mIsLollipop)
- stopSocksBypass ();
+ private void stopVPN() {
+ if (mIsLollipop)
+ stopSocksBypass();
- Tun2Socks.Stop();
+ Tun2Socks.Stop();
- if (mInterface != null){
- try
- {
- Log.d(TAG,"closing interface, destroying VPN interface");
-
- mInterface.close();
- mInterface = null;
-
- }
- catch (Exception e)
- {
- Log.d(TAG,"error stopping tun2socks",e);
+ if (mInterface != null) {
+ try {
+ Log.d(TAG, "closing interface, destroying VPN interface");
+
+ mInterface.close();
+ mInterface = null;
+
+ } catch (Exception e) {
+ Log.d(TAG, "error stopping tun2socks", e);
+ } catch (Error e) {
+ Log.d(TAG, "error stopping tun2socks", e);
}
- catch (Error e)
- {
- Log.d(TAG,"error stopping tun2socks",e);
- }
}
stopDns();
mThreadVPN = null;
@@ -234,195 +242,161 @@ public class OrbotVpnManager implements Handler.Callback {
return true;
}
-
- private synchronized void setupTun2Socks(final VpnService.Builder builder) {
+ private synchronized void setupTun2Socks(final VpnService.Builder builder) {
if (mInterface != null) //stop tun2socks now to give it time to clean up
{
- isRestart = true;
- Tun2Socks.Stop();
+ isRestart = true;
+ Tun2Socks.Stop();
- stopDns();
+ stopDns();
}
- mThreadVPN = new Thread ()
- {
-
- public void run () {
- try {
-
- if (isRestart) {
- Log.d(TAG,"is a restart... let's wait for a few seconds");
- Thread.sleep(3000);
- }
-
- final String vpnName = "OrbotVPN";
- final String localhost = "127.0.0.1";
-
- final String virtualGateway = "192.168.200.1";
- final String virtualIP = "192.168.200.2";
- final String virtualNetMask = "255.255.255.0";
- final String dummyDNS = "1.1.1.1"; //this is intercepted by the tun2socks library, but we must put in a valid DNS to start
- final String defaultRoute = "0.0.0.0";
-
- final String localSocks = localhost + ':' + mTorSocks;
-
- builder.setMtu(VPN_MTU);
- builder.addAddress(virtualGateway,32);
-
- builder.setSession(vpnName);
-
- //route all traffic through VPN (we might offer country specific exclude lists in the future)
- builder.addRoute(defaultRoute,0);
-
- builder.addDnsServer(dummyDNS);
- builder.addRoute(dummyDNS,32);
-
- //handle ipv6
- //builder.addAddress("fdfe:dcba:9876::1", 126);
- //builder.addRoute("::", 0);
-
- if (mIsLollipop)
- doLollipopAppRouting(builder);
-
- // Create a new interface using the builder and save the parameters.
- ParcelFileDescriptor newInterface = builder.setSession(mSessionName)
- .setConfigureIntent(null) // previously this was set to a null member variable
- .establish();
-
- if (mInterface != null)
- {
- Log.d(TAG,"Stopping existing VPN interface");
- mInterface.close();
- mInterface = null;
- }
-
- mInterface = newInterface;
-
- isRestart = false;
-
- //start PDNSD daemon pointing to actual DNS
- if (filePdnsd != null) {
-
- pdnsdPort++;
- startDNS(filePdnsd.getCanonicalPath(), localhost, mTorDns, virtualGateway, pdnsdPort);
- final boolean localDnsTransparentProxy = true;
-
- Tun2Socks.Start(mService, mInterface, VPN_MTU, virtualIP, virtualNetMask, localSocks, virtualGateway + ":" + pdnsdPort, localDnsTransparentProxy);
- }
-
- }
- catch (Exception e)
- {
- Log.d(TAG,"tun2Socks has stopped",e);
- }
- }
-
- };
-
- mThreadVPN.start();
-
+ mThreadVPN = new Thread() {
+
+ public void run() {
+ try {
+
+ if (isRestart) {
+ Log.d(TAG, "is a restart... let's wait for a few seconds");
+ Thread.sleep(3000);
+ }
+
+ final String vpnName = "OrbotVPN";
+ final String localhost = "127.0.0.1";
+
+ final String virtualGateway = "192.168.200.1";
+ final String virtualIP = "192.168.200.2";
+ final String virtualNetMask = "255.255.255.0";
+ final String dummyDNS = "1.1.1.1"; //this is intercepted by the tun2socks library, but we must put in a valid DNS to start
+ final String defaultRoute = "0.0.0.0";
+
+ final String localSocks = localhost + ':' + mTorSocks;
+
+ builder.setMtu(VPN_MTU);
+ builder.addAddress(virtualGateway, 32);
+
+ builder.setSession(vpnName);
+
+ //route all traffic through VPN (we might offer country specific exclude lists in the future)
+ builder.addRoute(defaultRoute, 0);
+
+ builder.addDnsServer(dummyDNS);
+ builder.addRoute(dummyDNS, 32);
+
+ //handle ipv6
+ //builder.addAddress("fdfe:dcba:9876::1", 126);
+ //builder.addRoute("::", 0);
+
+ if (mIsLollipop)
+ doLollipopAppRouting(builder);
+
+ // Create a new interface using the builder and save the parameters.
+ ParcelFileDescriptor newInterface = builder.setSession(mSessionName)
+ .setConfigureIntent(null) // previously this was set to a null member variable
+ .establish();
+
+ if (mInterface != null) {
+ Log.d(TAG, "Stopping existing VPN interface");
+ mInterface.close();
+ mInterface = null;
+ }
+
+ mInterface = newInterface;
+
+ isRestart = false;
+
+ //start PDNSD daemon pointing to actual DNS
+ if (filePdnsd != null) {
+
+ pdnsdPort++;
+ startDNS(filePdnsd.getCanonicalPath(), localhost, mTorDns, virtualGateway, pdnsdPort);
+ final boolean localDnsTransparentProxy = true;
+
+ Tun2Socks.Start(mService, mInterface, VPN_MTU, virtualIP, virtualNetMask, localSocks, virtualGateway + ":" + pdnsdPort, localDnsTransparentProxy);
+ }
+
+ } catch (Exception e) {
+ Log.d(TAG, "tun2Socks has stopped", e);
+ }
+ }
+
+ };
+
+ mThreadVPN.start();
+
}
-
-
+
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
- private void doLollipopAppRouting (VpnService.Builder builder) throws NameNotFoundException {
- SharedPreferences prefs = Prefs.getSharedPrefs(mService.getApplicationContext());
+ private void doLollipopAppRouting(VpnService.Builder builder) throws NameNotFoundException {
+ SharedPreferences prefs = Prefs.getSharedPrefs(mService.getApplicationContext());
ArrayList<TorifiedApp> apps = TorifiedApp.getApps(mService, prefs);
- boolean perAppEnabled = false;
-
- for (TorifiedApp app : apps)
- {
- if (app.isTorified() && (!app.getPackageName().equals(mService.getPackageName())))
- {
- if (prefs.getBoolean(app.getPackageName() + OrbotConstants.APP_TOR_KEY,true)) {
+ boolean perAppEnabled = false;
- builder.addAllowedApplication(app.getPackageName());
+ for (TorifiedApp app : apps) {
+ if (app.isTorified() && (!app.getPackageName().equals(mService.getPackageName()))) {
+ if (prefs.getBoolean(app.getPackageName() + OrbotConstants.APP_TOR_KEY, true)) {
- }
+ builder.addAllowedApplication(app.getPackageName());
- perAppEnabled = true;
+ }
+
+ perAppEnabled = true;
- }
+ }
}
-
+
if (!perAppEnabled)
- builder.addDisallowedApplication(mService.getPackageName());
-
+ builder.addDisallowedApplication(mService.getPackageName());
+
}
-
- private void startDNS (String pdnsPath, String torDnsHost, int torDnsPort, String pdnsdHost, int pdnsdPort) throws IOException, TimeoutException {
- File fileConf = makePdnsdConf(mService, mService.getFilesDir(), torDnsHost, torDnsPort, pdnsdHost, pdnsdPort);
+ private void startDNS(String pdnsPath, String torDnsHost, int torDnsPort, String pdnsdHost, int pdnsdPort) throws IOException, TimeoutException {
+
+ File fileConf = makePdnsdConf(mService, mService.getFilesDir(), torDnsHost, torDnsPort, pdnsdHost, pdnsdPort);
- String[] cmdString = {pdnsPath,"-c",fileConf.toString(),"-g","-v2"};
+ String[] cmdString = {pdnsPath, "-c", fileConf.toString(), "-g", "-v2"};
ProcessBuilder pb = new ProcessBuilder(cmdString);
pb.redirectErrorStream(true);
- Process proc = pb.start();
- try { proc.waitFor();} catch (Exception e){}
+ Process proc = pb.start();
+ try {
+ proc.waitFor();
+ } catch (Exception e) {
+ }
- Log.i(TAG,"PDNSD: " + proc.exitValue());
+ Log.i(TAG, "PDNSD: " + proc.exitValue());
- if (proc.exitValue() != 0)
- {
+ if (proc.exitValue() != 0) {
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = null;
- while ((line = br.readLine ()) != null) {
- Log.d(TAG,"pdnsd: " + line);
+ while ((line = br.readLine()) != null) {
+ Log.d(TAG, "pdnsd: " + line);
}
}
-
- }
-
- File filePdnsPid;
-
- private boolean stopDns () {
- if (filePdnsPid != null && filePdnsPid.exists()) {
- List<String> lines = null;
- try {
- lines = IOUtils.readLines(new FileReader(filePdnsPid));
- String dnsPid = lines.get(0);
- VpnUtils.killProcess(dnsPid, "");
- filePdnsPid.delete();
- filePdnsPid = null;
- } catch (Exception e) {
- Log.e("OrbotVPN", "error killing dns process", e);
- }
- }
- return false;
- }
-
- public static File makePdnsdConf(Context context, File fileDir, String torDnsHost, int torDnsPort, String pdnsdHost, int pdnsdPort) throws FileNotFoundException, IOException {
- String conf = String.format(context.getString(R.string.pdnsd_conf), torDnsHost, torDnsPort, fileDir.getCanonicalPath(), pdnsdHost, pdnsdPort);
-
- Log.d(TAG,"pdsnd conf:" + conf);
-
- File fPid = new File(fileDir,pdnsdPort + "pdnsd.conf");
- if (fPid.exists()) {
- fPid.delete();
- }
-
- FileOutputStream fos = new FileOutputStream(fPid, false);
- PrintStream ps = new PrintStream(fos);
- ps.print(conf);
- ps.close();
-
- File cache = new File(fileDir,"pdnsd.cache");
+ }
- if (!cache.exists()) {
- try {
- cache.createNewFile();
- } catch (Exception e) { }
+ private boolean stopDns() {
+ if (filePdnsPid != null && filePdnsPid.exists()) {
+ List<String> lines = null;
+ try {
+ lines = IOUtils.readLines(new FileReader(filePdnsPid));
+ String dnsPid = lines.get(0);
+ VpnUtils.killProcess(dnsPid, "");
+ filePdnsPid.delete();
+ filePdnsPid = null;
+ } catch (Exception e) {
+ Log.e("OrbotVPN", "error killing dns process", e);
+ }
}
- return fPid;
- }
+ return false;
+ }
- public boolean isStarted () {
- return isStarted;
- }
+ public boolean isStarted() {
+ return isStarted;
+ }
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/TorifiedApp.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/TorifiedApp.java
index db25fd00..11171831 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/TorifiedApp.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/TorifiedApp.java
@@ -19,243 +19,242 @@ import static org.torproject.android.service.vpn.VpnPrefs.PREFS_KEY_TORIFIED;
public class TorifiedApp implements Comparable {
- private boolean enabled;
- private int uid;
- private String username;
- private String procname;
- private String name;
- private Drawable icon;
- private String packageName;
-
- private boolean torified = false;
- private boolean usesInternet = false;
-
- public boolean usesInternet() {
- return usesInternet;
- }
- public void setUsesInternet(boolean usesInternet) {
- this.usesInternet = usesInternet;
- }
- /**
- * @return the torified
- */
- public boolean isTorified() {
- return torified;
- }
- /**
- * @param torified the torified to set
- */
- public void setTorified(boolean torified) {
- this.torified = torified;
- }
- private int[] enabledPorts;
-
- /**
- * @return the enabledPorts
- */
- public int[] getEnabledPorts() {
- return enabledPorts;
- }
- /**
- * @param enabledPorts the enabledPorts to set
- */
- public void setEnabledPorts(int[] enabledPorts) {
- this.enabledPorts = enabledPorts;
- }
- /**
- * @return the enabled
- */
- public boolean isEnabled() {
- return enabled;
- }
- /**
- * @param enabled the enabled to set
- */
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
- /**
- * @return the uid
- */
- public int getUid() {
- return uid;
- }
- /**
- * @param uid the uid to set
- */
- public void setUid(int uid) {
- this.uid = uid;
- }
- /**
- * @return the username
- */
- public String getUsername() {
- return username;
- }
- /**
- * @param username the username to set
- */
- public void setUsername(String username) {
- this.username = username;
- }
- /**
- * @return the procname
- */
- public String getProcname() {
- return procname;
- }
- /**
- * @param procname the procname to set
- */
- public void setProcname(String procname) {
- this.procname = procname;
- }
- /**
- * @return the name
- */
- public String getName() {
- return name;
- }
- /**
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
-
-
- public Drawable getIcon() {
- return icon;
- }
-
- public void setIcon(Drawable icon) {
- this.icon = icon;
- }
-
- @Override
- public int compareTo(Object another) {
- return this.toString().compareToIgnoreCase(another.toString());
- }
-
- @Override
- public String toString ()
- {
- return getName();
- }
-
-
- public String getPackageName() {
- return packageName;
- }
- public void setPackageName(String packageName) {
- this.packageName = packageName;
- }
-
- public static ArrayList<TorifiedApp> getApps (Context context, SharedPreferences prefs)
- {
-
- String tordAppString = prefs.getString(PREFS_KEY_TORIFIED, "");
- String[] tordApps;
-
- StringTokenizer st = new StringTokenizer(tordAppString,"|");
- tordApps = new String[st.countTokens()];
- int tordIdx = 0;
- while (st.hasMoreTokens())
- {
- tordApps[tordIdx++] = st.nextToken();
- }
-
- Arrays.sort(tordApps);
-
- //else load the apps up
- PackageManager pMgr = context.getPackageManager();
-
- List<ApplicationInfo> lAppInfo = pMgr.getInstalledApplications(0);
-
- Iterator<ApplicationInfo> itAppInfo = lAppInfo.iterator();
-
- ArrayList<TorifiedApp> apps = new ArrayList<TorifiedApp>();
-
- ApplicationInfo aInfo = null;
-
- int appIdx = 0;
- TorifiedApp app = null;
-
- while (itAppInfo.hasNext())
- {
- aInfo = itAppInfo.next();
-
- app = new TorifiedApp();
-
- try {
- PackageInfo pInfo = pMgr.getPackageInfo(aInfo.packageName, PackageManager.GET_PERMISSIONS);
-
- if (pInfo != null && pInfo.requestedPermissions != null)
- {
- for (String permInfo:pInfo.requestedPermissions)
- {
- if (permInfo.equals(Manifest.permission.INTERNET))
- {
- app.setUsesInternet(true);
-
- }
- }
-
- }
-
-
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- if ((aInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)
- {
- //System app
- app.setUsesInternet(true);
- }
-
-
- if (!app.usesInternet())
- continue;
- else
- {
- apps.add(app);
- }
-
-
- app.setEnabled(aInfo.enabled);
- app.setUid(aInfo.uid);
- app.setUsername(pMgr.getNameForUid(app.getUid()));
- app.setProcname(aInfo.processName);
- app.setPackageName(aInfo.packageName);
-
- try
- {
- app.setName(pMgr.getApplicationLabel(aInfo).toString());
- }
- catch (Exception e)
- {
- app.setName(aInfo.packageName);
- }
+ private boolean enabled;
+ private int uid;
+ private String username;
+ private String procname;
+ private String name;
+ private Drawable icon;
+ private String packageName;
+ private boolean torified = false;
+ private boolean usesInternet = false;
+ private int[] enabledPorts;
- //app.setIcon(pMgr.getApplicationIcon(aInfo));
+ public static ArrayList<TorifiedApp> getApps(Context context, SharedPreferences prefs) {
- // check if this application is allowed
- if (Arrays.binarySearch(tordApps, app.getUsername()) >= 0) {
- app.setTorified(true);
- }
- else
- {
- app.setTorified(false);
- }
+ String tordAppString = prefs.getString(PREFS_KEY_TORIFIED, "");
+ String[] tordApps;
- appIdx++;
- }
+ StringTokenizer st = new StringTokenizer(tordAppString, "|");
+ tordApps = new String[st.countTokens()];
+ int tordIdx = 0;
+ while (st.hasMoreTokens()) {
+ tordApps[tordIdx++] = st.nextToken();
+ }
- Collections.sort(apps);
+ Arrays.sort(tordApps);
- return apps;
- }
+ //else load the apps up
+ PackageManager pMgr = context.getPackageManager();
+
+ List<ApplicationInfo> lAppInfo = pMgr.getInstalledApplications(0);
+
+ Iterator<ApplicationInfo> itAppInfo = lAppInfo.iterator();
+
+ ArrayList<TorifiedApp> apps = new ArrayList<TorifiedApp>();
+
+ ApplicationInfo aInfo = null;
+
+ int appIdx = 0;
+ TorifiedApp app = null;
+
+ while (itAppInfo.hasNext()) {
+ aInfo = itAppInfo.next();
+
+ app = new TorifiedApp();
+
+ try {
+ PackageInfo pInfo = pMgr.getPackageInfo(aInfo.packageName, PackageManager.GET_PERMISSIONS);
+
+ if (pInfo != null && pInfo.requestedPermissions != null) {
+ for (String permInfo : pInfo.requestedPermissions) {
+ if (permInfo.equals(Manifest.permission.INTERNET)) {
+ app.setUsesInternet(true);
+
+ }
+ }
+
+ }
+
+
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ if ((aInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
+ //System app
+ app.setUsesInternet(true);
+ }
+
+
+ if (!app.usesInternet())
+ continue;
+ else {
+ apps.add(app);
+ }
+
+
+ app.setEnabled(aInfo.enabled);
+ app.setUid(aInfo.uid);
+ app.setUsername(pMgr.getNameForUid(app.getUid()));
+ app.setProcname(aInfo.processName);
+ app.setPackageName(aInfo.packageName);
+
+ try {
+ app.setName(pMgr.getApplicationLabel(aInfo).toString());
+ } catch (Exception e) {
+ app.setName(aInfo.packageName);
+ }
+
+
+ //app.setIcon(pMgr.getApplicationIcon(aInfo));
+
+ // check if this application is allowed
+ if (Arrays.binarySearch(tordApps, app.getUsername()) >= 0) {
+ app.setTorified(true);
+ } else {
+ app.setTorified(false);
+ }
+
+ appIdx++;
+ }
+
+ Collections.sort(apps);
+
+ return apps;
+ }
+
+ public boolean usesInternet() {
+ return usesInternet;
+ }
+
+ public void setUsesInternet(boolean usesInternet) {
+ this.usesInternet = usesInternet;
+ }
+
+ /**
+ * @return the torified
+ */
+ public boolean isTorified() {
+ return torified;
+ }
+
+ /**
+ * @param torified the torified to set
+ */
+ public void setTorified(boolean torified) {
+ this.torified = torified;
+ }
+
+ /**
+ * @return the enabledPorts
+ */
+ public int[] getEnabledPorts() {
+ return enabledPorts;
+ }
+
+ /**
+ * @param enabledPorts the enabledPorts to set
+ */
+ public void setEnabledPorts(int[] enabledPorts) {
+ this.enabledPorts = enabledPorts;
+ }
+
+ /**
+ * @return the enabled
+ */
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ /**
+ * @param enabled the enabled to set
+ */
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ /**
+ * @return the uid
+ */
+ public int getUid() {
+ return uid;
+ }
+
+ /**
+ * @param uid the uid to set
+ */
+ public void setUid(int uid) {
+ this.uid = uid;
+ }
+
+ /**
+ * @return the username
+ */
+ public String getUsername() {
+ return username;
+ }
+
+ /**
+ * @param username the username to set
+ */
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ /**
+ * @return the procname
+ */
+ public String getProcname() {
+ return procname;
+ }
+
+ /**
+ * @param procname the procname to set
+ */
+ public void setProcname(String procname) {
+ this.procname = procname;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Drawable getIcon() {
+ return icon;
+ }
+
+ public void setIcon(Drawable icon) {
+ this.icon = icon;
+ }
+
+ @Override
+ public int compareTo(Object another) {
+ return this.toString().compareToIgnoreCase(another.toString());
+ }
+
+ @Override
+ public String toString() {
+ return getName();
+ }
+
+ public String getPackageName() {
+ return packageName;
+ }
+
+ public void setPackageName(String packageName) {
+ this.packageName = packageName;
+ }
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java
index 11c6203e..d6910138 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java
@@ -8,12 +8,12 @@ package org.torproject.android.service.vpn;
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
@@ -25,6 +25,7 @@ import android.net.ConnectivityManager;
import android.os.Build;
import android.os.ParcelFileDescriptor;
import android.util.Log;
+
import org.torproject.android.service.util.TCPSourceApp;
import java.net.DatagramSocket;
@@ -34,22 +35,12 @@ import java.util.HashMap;
import static android.content.Context.CONNECTIVITY_SERVICE;
-public class Tun2Socks
-{
-
- static{
- System.loadLibrary("tun2socks");
- }
-
- public static interface IProtectSocket
- {
- boolean doVpnProtect(Socket socket);
- boolean doVpnProtect(DatagramSocket socket);
- };
+public class Tun2Socks {
private static final String TAG = Tun2Socks.class.getSimpleName();
private static final boolean LOGD = true;
+ ;
private static Thread mThread;
private static ParcelFileDescriptor mVpnInterfaceFileDescriptor;
private static int mVpnInterfaceMTU;
@@ -58,15 +49,19 @@ public class Tun2Socks
private static String mSocksServerAddress;
private static String mUdpgwServerAddress;
private static boolean mUdpgwTransparentDNS;
-
- private static HashMap<Integer,String> mAppUidBlacklist = new HashMap<>();
+ private static HashMap<Integer, String> mAppUidBlacklist = new HashMap<>();
private static Context mContext;
+
+ static {
+ System.loadLibrary("tun2socks");
+ }
+
+ public static void init() {
+ }
// Note: this class isn't a singleton, but you can't run more
// than one instance due to the use of global state (the lwip
// module, etc.) in the native code.
- public static void init () {}
-
public static void Start(
Context context,
ParcelFileDescriptor vpnInterfaceFileDescriptor,
@@ -75,8 +70,7 @@ public class Tun2Socks
String vpnNetMask,
String socksServerAddress,
String udpgwServerAddress,
- boolean udpgwTransparentDNS)
- {
+ boolean udpgwTransparentDNS) {
mContext = context;
mVpnInterfaceFileDescriptor = vpnInterfaceFileDescriptor;
@@ -97,26 +91,21 @@ public class Tun2Socks
mUdpgwServerAddress,
mUdpgwTransparentDNS ? 1 : 0);
}
-
- public static void Stop()
- {
-
+
+ public static void Stop() {
+
terminateTun2Socks();
-
+
}
public static void logTun2Socks(
String level,
String channel,
- String msg)
- {
+ String msg) {
String logMsg = level + "(" + channel + "): " + msg;
- if (0 == level.compareTo("ERROR"))
- {
+ if (0 == level.compareTo("ERROR")) {
Log.e(TAG, logMsg);
- }
- else
- {
+ } else {
if (LOGD) Log.d(TAG, logMsg);
}
}
@@ -132,30 +121,27 @@ public class Tun2Socks
private native static void terminateTun2Socks();
- public static boolean checkIsAllowed (int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
+ public static boolean checkIsAllowed(int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
- {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
return isAllowedQ(protocol, sourceAddr, sourcePort, destAddr, destPort);
- }
- else
+ } else
return isAllowed(protocol, sourceAddr, sourcePort, destAddr, destPort);
}
- public static boolean isAllowed (int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
+ public static boolean isAllowed(int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
TCPSourceApp.AppDescriptor aInfo = TCPSourceApp.getApplicationInfo(mContext, sourceAddr, sourcePort, destAddr, destPort);
if (aInfo != null) {
int uid = aInfo.getUid();
return mAppUidBlacklist.containsKey(uid);
- }
- else
+ } else
return true;
}
@TargetApi(Build.VERSION_CODES.Q)
- public static boolean isAllowedQ (int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
+ public static boolean isAllowedQ(int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(CONNECTIVITY_SERVICE);
if (cm == null)
return false;
@@ -167,24 +153,26 @@ public class Tun2Socks
return mAppUidBlacklist.containsKey(uid);
}
- public static void setBlacklist(HashMap<Integer,String> appUidBlacklist)
- {
+ public static void setBlacklist(HashMap<Integer, String> appUidBlacklist) {
mAppUidBlacklist = appUidBlacklist;
}
- public static void clearBlacklist()
- {
+ public static void clearBlacklist() {
mAppUidBlacklist.clear();
}
- public static void addToBlacklist (int uid, String pkgId)
- {
- mAppUidBlacklist.put(uid,pkgId);
+ public static void addToBlacklist(int uid, String pkgId) {
+ mAppUidBlacklist.put(uid, pkgId);
}
- public static void removeFromBlacklist (int uid)
- {
+ public static void removeFromBlacklist(int uid) {
mAppUidBlacklist.remove(uid);
}
+ public static interface IProtectSocket {
+ boolean doVpnProtect(Socket socket);
+
+ boolean doVpnProtect(DatagramSocket socket);
+ }
+
}
\ No newline at end of file
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/VpnUtils.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/VpnUtils.java
index e1cdd375..604b1c44 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/VpnUtils.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/VpnUtils.java
@@ -16,9 +16,9 @@ public class VpnUtils {
public static int findProcessId(String command) throws IOException {
- String[] cmds = {"ps -ef","ps -A","toolbox ps"};
+ String[] cmds = {"ps -ef", "ps -A", "toolbox ps"};
- for (int i = 0; i < cmds.length;i++) {
+ for (int i = 0; i < cmds.length; i++) {
Process procPs = getRuntime().exec(cmds[i]);
BufferedReader reader = new BufferedReader(new InputStreamReader(procPs.getInputStream()));
@@ -92,7 +92,7 @@ public class VpnUtils {
// ignored
}
- }
+ }
if (killAttempts > 4)
throw new Exception("Cannot kill: " + fileProcBin.getAbsolutePath());
@@ -103,34 +103,31 @@ public class VpnUtils {
public static boolean killProcess(String pidString, String signal) throws Exception {
- String[] cmds = {"","toolbox ","busybox "};
+ String[] cmds = {"", "toolbox ", "busybox "};
- for (int i = 0; i < cmds.length;i++) {
+ for (int i = 0; i < cmds.length; i++) {
try {
Process proc = getRuntime().exec(cmds[i] + "kill " + signal + " " + pidString);
int exitVal = proc.waitFor();
List<String> lineErrors = IOUtils.readLines(proc.getErrorStream());
List<String> lineInputs = IOUtils.readLines(proc.getInputStream());
- if (exitVal != 0)
- {
- Log.d("Orbot.killProcess","exit=" + exitVal);
- for (String line: lineErrors)
- Log.d("Orbot.killProcess",line);
+ if (exitVal != 0) {
+ Log.d("Orbot.killProcess", "exit=" + exitVal);
+ for (String line : lineErrors)
+ Log.d("Orbot.killProcess", line);
- for (String line: lineInputs)
- Log.d("Orbot.killProcess",line);
+ for (String line : lineInputs)
+ Log.d("Orbot.killProcess", line);
- }
- else
- {
+ } else {
//it worked, let's exit
return true;
}
} catch (IOException ioe) {
- Log.e("Orbot.killprcess","error killing process: " + pidString,ioe);
+ Log.e("Orbot.killprcess", "error killing process: " + pidString, ioe);
}
}
1
0
[orbot/master] removed Context memory leak from OrbotService (Tun2Socks)
by n8fr8@torproject.org 07 Oct '20
by n8fr8@torproject.org 07 Oct '20
07 Oct '20
commit 7a097561f7efc084a9a49bbd3d9aa62a8383d5f4
Author: bim <dsnake(a)protonmail.com>
Date: Thu Sep 24 00:21:21 2020 -0400
removed Context memory leak from OrbotService (Tun2Socks)
---
.../org/torproject/android/service/vpn/Tun2Socks.java | 18 +++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java
index 05d84da4..461a5a8d 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java
@@ -40,7 +40,6 @@ public class Tun2Socks {
private static final String TAG = Tun2Socks.class.getSimpleName();
private static final boolean LOGD = true;
- private static Thread mThread;
private static ParcelFileDescriptor mVpnInterfaceFileDescriptor;
private static int mVpnInterfaceMTU;
private static String mVpnIpAddress;
@@ -49,7 +48,6 @@ public class Tun2Socks {
private static String mUdpgwServerAddress;
private static boolean mUdpgwTransparentDNS;
private static HashMap<Integer, String> mAppUidBlacklist = new HashMap<>();
- private static Context mContext;
static {
System.loadLibrary("tun2socks");
@@ -70,7 +68,6 @@ public class Tun2Socks {
String socksServerAddress,
String udpgwServerAddress,
boolean udpgwTransparentDNS) {
- mContext = context;
mVpnInterfaceFileDescriptor = vpnInterfaceFileDescriptor;
mVpnInterfaceMTU = vpnInterfaceMTU;
@@ -120,17 +117,16 @@ public class Tun2Socks {
private native static void terminateTun2Socks();
- public static boolean checkIsAllowed(int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
-
+ public static boolean checkIsAllowed(Context context, int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- return isAllowedQ(protocol, sourceAddr, sourcePort, destAddr, destPort);
+ return isAllowedQ(context, protocol, sourceAddr, sourcePort, destAddr, destPort);
} else
- return isAllowed(protocol, sourceAddr, sourcePort, destAddr, destPort);
+ return isAllowed(context, protocol, sourceAddr, sourcePort, destAddr, destPort);
}
- public static boolean isAllowed(int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
+ public static boolean isAllowed(Context context, int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
- TCPSourceApp.AppDescriptor aInfo = TCPSourceApp.getApplicationInfo(mContext, sourceAddr, sourcePort, destAddr, destPort);
+ TCPSourceApp.AppDescriptor aInfo = TCPSourceApp.getApplicationInfo(context, sourceAddr, sourcePort, destAddr, destPort);
if (aInfo != null) {
int uid = aInfo.getUid();
@@ -140,8 +136,8 @@ public class Tun2Socks {
}
@TargetApi(Build.VERSION_CODES.Q)
- public static boolean isAllowedQ(int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
- ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(CONNECTIVITY_SERVICE);
+ public static boolean isAllowedQ(Context context, int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
+ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
if (cm == null)
return false;
1
0
commit 0a391f03d12bb77736e265ae156a4354c264045c
Author: bim <dsnake(a)protonmail.com>
Date: Thu Sep 24 00:35:53 2020 -0400
update LICENSE
---
LICENSE | 20 +-------------------
1 file changed, 1 insertion(+), 19 deletions(-)
diff --git a/LICENSE b/LICENSE
index 81852dd0..b857146b 100644
--- a/LICENSE
+++ b/LICENSE
@@ -2,7 +2,7 @@ This file contains the license for Orbot, a free software project to
provide anonymity on the Internet from a Google Android smartphone.
It also lists the licenses for other components used by Orbot, including
-Tor, Privoxy, and iptables.
+Tor, and iptables.
For more information about Orbot, see https://guardianproject.info/apps/orbot
@@ -75,24 +75,6 @@ POSSIBILITY OF SUCH DAMAGE.
*****
-
-*****
-Orbot contains a binary distribution of Privoxy (http://www.privoxy.org/)
-Copyright © 2001-2010 by Privoxy Developers <ijbswa-developers(a)lists.sourceforge.net>
-http://www.privoxy.org/user-manual/copyright.html
-
-Some source code is based on code Copyright © 1997 by Anonymous Coders and Junkbusters, Inc.
-and licensed under the GNU General Public License.
-
-Privoxy is free software; you can redistribute it and/or modify it under the terms of the
-GNU General Public License, version 2, as published by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-See the GNU General Public License for details.
-http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-
-******
Orbot contains a binary distribution of Tor:
This file contains the license for Tor,
1
0
[orbot/master] Used static inner classes for AsyncTasks in OrbotMainActivity, BridgeWizardActivity
by n8fr8@torproject.org 07 Oct '20
by n8fr8@torproject.org 07 Oct '20
07 Oct '20
commit 4d5341e3de6465eba5ced69efde96673ff6de2d6
Author: bim <dsnake(a)protonmail.com>
Date: Wed Sep 23 23:25:28 2020 -0400
Used static inner classes for AsyncTasks in OrbotMainActivity, BridgeWizardActivity
+ AppManagerActivity. Removes huge warnings from code. Anonymous AsyncTask
implementations (such as Handler) implicitly hold a reference to the outer
Activity, this could cause a memory leak where the AsyncTask is still running
after the Activity has terminated
---
.../org/torproject/android/OrbotMainActivity.java | 93 ++++++++++------------
.../torproject/android/ui/AppManagerActivity.java | 63 ++++++++++-----
.../ui/onboarding/BridgeWizardActivity.java | 43 ++++++----
3 files changed, 112 insertions(+), 87 deletions(-)
diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index 8c898fce..25e0748e 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -76,6 +76,7 @@ import org.torproject.android.ui.onboarding.OnboardingActivity;
import java.io.File;
import java.io.UnsupportedEncodingException;
+import java.lang.ref.WeakReference;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.NumberFormat;
@@ -130,47 +131,8 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
private SharedPreferences mPrefs = null;
private boolean autoStartFromIntent = false;
// this is what takes messages or values from the callback threads or other non-mainUI threads
-//and passes them back into the main UI thread for display to the user
- private Handler mStatusUpdateHandler = new Handler() {
-
- @Override
- public void handleMessage(final Message msg) {
-
-
- Bundle data = msg.getData();
-
- switch (msg.what) {
- case MESSAGE_TRAFFIC_COUNT:
-
- DataCount datacount = new DataCount(data.getLong("upload"), data.getLong("download"));
-
- long totalRead = data.getLong("readTotal");
- long totalWrite = data.getLong("writeTotal");
-
- downloadText.setText(String.format("%s / %s", formatCount(datacount.Download), formatTotal(totalRead)));
- uploadText.setText(String.format("%s / %s", formatCount(datacount.Upload), formatTotal(totalWrite)));
-
- break;
- case MESSAGE_PORTS:
-
- int socksPort = data.getInt("socks");
- int httpPort = data.getInt("http");
-
- lblPorts.setText(String.format(Locale.getDefault(), "SOCKS: %d | HTTP: %d", socksPort, httpPort));
-
- break;
- default:
- String newTorStatus = msg.getData().getString("status");
- String log = (String) msg.obj;
-
- if (torStatus == null && newTorStatus != null) //first time status
- findViewById(R.id.frameMain).setVisibility(View.VISIBLE);
- updateStatus(log, newTorStatus);
- super.handleMessage(msg);
- break;
- }
- }
- };
+ // and passes them back into the main UI thread for display to the user
+ private Handler mStatusUpdateHandler = new MainActivityStatusUpdateHandler(this);
/**
* The state and log info from {@link OrbotService} are sent to the UI here in
* the form of a local broadcast. Regular broadcasts can be sent by any app,
@@ -1233,15 +1195,48 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
}
- public static class DataCount {
- // data uploaded
- final long Upload;
- // data downloaded
- final long Download;
+ private static class MainActivityStatusUpdateHandler extends Handler {
+ private WeakReference<OrbotMainActivity> ref;
+
+ MainActivityStatusUpdateHandler(OrbotMainActivity oma) {
+ ref = new WeakReference<>(oma);
+ }
+
+ private boolean shouldStop() {
+ return ref.get() == null || ref.get().isFinishing();
+ }
+
+ @Override
+ public void handleMessage(final Message msg) {
+ if (shouldStop()) return;
+ OrbotMainActivity oma = ref.get();
+ Bundle data = msg.getData();
+
+ switch (msg.what) {
+ case MESSAGE_TRAFFIC_COUNT:
+ long upload = data.getLong("upload");
+ long download = data.getLong("download");
+ long totalRead = data.getLong("readTotal");
+ long totalWrite = data.getLong("writeTotal");
+ oma.downloadText.setText(String.format("%s / %s", oma.formatCount(download), oma.formatTotal(totalRead)));
+ oma.uploadText.setText(String.format("%s / %s", oma.formatCount(upload), oma.formatTotal(totalWrite)));
+ break;
+
+ case MESSAGE_PORTS:
+ int socksPort = data.getInt("socks");
+ int httpPort = data.getInt("http");
+ oma.lblPorts.setText(String.format(Locale.getDefault(), "SOCKS: %d | HTTP: %d", socksPort, httpPort));
+ break;
+
+ default:
+ String newTorStatus = msg.getData().getString("status");
+ String log = (String) msg.obj;
- DataCount(long Upload, long Download) {
- this.Upload = Upload;
- this.Download = Download;
+ if (oma.torStatus == null && newTorStatus != null) //first time status
+ oma.findViewById(R.id.frameMain).setVisibility(View.VISIBLE);
+ oma.updateStatus(log, newTorStatus);
+ super.handleMessage(msg);
+ }
}
}
}
diff --git a/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java b/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
index aae3d72a..5d2493a4 100644
--- a/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
@@ -35,6 +35,7 @@ import org.torproject.android.service.OrbotConstants;
import org.torproject.android.service.util.Prefs;
import org.torproject.android.service.vpn.TorifiedApp;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -105,29 +106,13 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
}
private void reloadApps() {
- new AsyncTask<Void, Void, Void>() {
- protected void onPreExecute() {
- // Pre Code
- progressBar.setVisibility(View.VISIBLE);
- }
-
- protected Void doInBackground(Void... unused) {
- loadApps(mPrefs);
- return null;
- }
-
- protected void onPostExecute(Void unused) {
- listApps.setAdapter(adapterApps);
- progressBar.setVisibility(View.GONE);
- }
- }.execute();
-
-
+ new ReloadAppsAsyncTask(this).execute();
}
- private void loadApps(SharedPreferences prefs) {
+ private void loadApps() {
+
if (mApps == null)
- mApps = getApps(prefs);
+ mApps = getApps(mPrefs);
Collections.sort(mApps, (o1, o2) -> {
/* Some apps start with lowercase letters and without the sorting being case
@@ -279,7 +264,6 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
return apps;
}
-
public void saveAppSettings() {
StringBuilder tordApps = new StringBuilder();
@@ -300,7 +284,6 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
setResult(RESULT_OK, response);
}
-
public void onClick(View v) {
CheckBox cbox = null;
@@ -321,6 +304,42 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
}
}
+ private static class ReloadAppsAsyncTask extends AsyncTask<Void, Void, Void> {
+
+ private WeakReference<AppManagerActivity> activity;
+
+ ReloadAppsAsyncTask(AppManagerActivity activity) {
+ this.activity = new WeakReference<>(activity);
+ }
+
+ @Override
+ protected void onPreExecute() {
+ if (shouldStop()) return;
+ activity.get().progressBar.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ protected Void doInBackground(Void... voids) {
+ if (shouldStop()) return null;
+ activity.get().loadApps();
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void unused) {
+ if (shouldStop()) return;
+ AppManagerActivity ama = activity.get();
+ ama.listApps.setAdapter(ama.adapterApps);
+ ama.progressBar.setVisibility(View.GONE);
+ }
+
+ private boolean shouldStop() {
+ AppManagerActivity ama = activity.get();
+ return ama == null || ama.isFinishing();
+ }
+
+ }
+
private static class ListEntry {
private CheckBox box;
private TextView text;
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
index abc89ff2..8a359b1b 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
@@ -23,6 +23,7 @@ import org.torproject.android.service.util.Prefs;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.lang.ref.WeakReference;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
@@ -34,7 +35,7 @@ public class BridgeWizardActivity extends AppCompatActivity {
private static final int CUSTOM_BRIDGES_REQUEST_CODE = 1312;
private static final String BUNDLE_KEY_TV_STATUS_VISIBILITY = "visibility";
private static final String BUNDLE_KEY_TV_STATUS_TEXT = "text";
- private static TextView mTvStatus;
+ private TextView mTvStatus;
private static HostTester runningHostTest;
private RadioButton mBtDirect;
private RadioButton mBtObfs4;
@@ -182,7 +183,7 @@ public class BridgeWizardActivity extends AppCompatActivity {
private void testBridgeConnection() {
cancelHostTestIfRunning();
- HostTester hostTester = new HostTester();
+ HostTester hostTester = new HostTester(this);
if (TextUtils.isEmpty(Prefs.getBridgesList()) || (!Prefs.bridgesEnabled())) {
hostTester.execute("check.torproject.org", "443");
} else if (Prefs.getBridgesList().equals("meek")) {
@@ -253,22 +254,32 @@ public class BridgeWizardActivity extends AppCompatActivity {
}
}
- private class HostTester extends AsyncTask<String, Void, Boolean> {
+ private static class HostTester extends AsyncTask<String, Void, Boolean> {
+
+ private WeakReference<BridgeWizardActivity> ref;
+
+ HostTester(BridgeWizardActivity activity) {
+ ref = new WeakReference<>(activity);
+ }
+
+ private boolean shouldStop() {
+ return ref.get() == null || ref.get().isFinishing();
+ }
+
@Override
protected void onPreExecute() {
-
- if (mTvStatus != null) {
- // Pre Code
- mTvStatus.setVisibility(View.VISIBLE);
- mTvStatus.setText(mBtDirect.isChecked() ? R.string.testing_tor_direct : R.string.testing_bridges);
+ if (shouldStop()) return;
+ BridgeWizardActivity bwa = ref.get();
+ if (bwa.mTvStatus != null) {
+ bwa.mTvStatus.setVisibility(View.VISIBLE);
+ bwa.mTvStatus.setText(bwa.mBtDirect.isChecked() ? R.string.testing_tor_direct : R.string.testing_bridges);
}
}
@Override
protected Boolean doInBackground(String... host) {
- // Background Code
for (int i = 0; i < host.length; i++) {
- if (isCancelled()) return null;
+ if (shouldStop() || isCancelled()) return null;
String testHost = host[i];
i++; //move to the port
int testPort = Integer.parseInt(host[i]);
@@ -276,20 +287,20 @@ public class BridgeWizardActivity extends AppCompatActivity {
return true;
}
}
-
return false;
}
@Override
protected void onPostExecute(Boolean result) {
- // Post Code
- if (mTvStatus != null) {
+ if (shouldStop()) return;
+ BridgeWizardActivity bwa = ref.get();
+ if (bwa.mTvStatus != null) {
runningHostTest = null;
if (result) {
- int stringRes = mBtDirect.isChecked() ? R.string.testing_tor_direct_success : R.string.testing_bridges_success;
- mTvStatus.setText(stringRes);
+ int stringRes = bwa.mBtDirect.isChecked() ? R.string.testing_tor_direct_success : R.string.testing_bridges_success;
+ bwa.mTvStatus.setText(stringRes);
} else {
- mTvStatus.setText(R.string.testing_bridges_fail);
+ bwa.mTvStatus.setText(R.string.testing_bridges_fail);
}
}
}
1
0