tor-commits
Threads by month
- ----- 2025 -----
- 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
January 2018
- 18 participants
- 1738 discussions

[translation/mat-gui_completed] Update translations for mat-gui_completed
by translation@torproject.org 04 Jan '18
by translation@torproject.org 04 Jan '18
04 Jan '18
commit 6a9317099b3209947e4a9c8279e26ff44496f329
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Jan 4 07:16:31 2018 +0000
Update translations for mat-gui_completed
---
tr.po | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tr.po b/tr.po
index 14e25012e..814756fce 100644
--- a/tr.po
+++ b/tr.po
@@ -13,7 +13,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-02-10 23:06+0100\n"
-"PO-Revision-Date: 2017-09-23 18:55+0000\n"
+"PO-Revision-Date: 2018-01-04 07:16+0000\n"
"Last-Translator: Kaya Zeren <kayazeren(a)gmail.com>\n"
"Language-Team: Turkish (http://www.transifex.com/otf/torproject/language/tr/)\n"
"MIME-Version: 1.0\n"
1
0
commit 5bd5a5648e995845f8876994b36bc7976417f179
Author: n8fr8 <nathan(a)freitas.net>
Date: Wed Jan 3 08:47:10 2018 -0500
VPN should be off by default
---
.../src/main/java/org/torproject/android/service/util/Prefs.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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 bd5c3d6f..5bfaf7c4 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
@@ -109,7 +109,7 @@ public class Prefs {
}
public static boolean useVpn() {
- return prefs.getBoolean(PREF_USE_VPN, true);
+ return prefs.getBoolean(PREF_USE_VPN, false);
}
public static void putUseVpn(boolean value) {
1
0
commit e46404448bcee17eaf6c4f990376c01f1f95a3da
Author: n8fr8 <nathan(a)freitas.net>
Date: Wed Jan 3 08:46:56 2018 -0500
connection might be null
---
.../src/main/java/org/torproject/android/service/TorService.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorService.java b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
index 77fa1cdf..520bbe5f 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
@@ -492,7 +492,9 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private void requestTorRereadConfig() {
try {
- conn.signal("HUP");
+ if (conn != null)
+ conn.signal("HUP");
+
return;
} catch (IOException e) {
e.printStackTrace();
1
0
commit ba358a402d00f8fad88afab50c764aa00bdc4aed
Author: n8fr8 <nathan(a)freitas.net>
Date: Wed Jan 3 09:12:07 2018 -0500
add new orfox and settings icon
---
.../main/res/drawable-hdpi/ic_settings_white_24dp.png | Bin 0 -> 460 bytes
.../main/res/drawable-mdpi/ic_settings_white_24dp.png | Bin 0 -> 326 bytes
.../main/res/drawable-xhdpi/ic_settings_white_24dp.png | Bin 0 -> 562 bytes
.../main/res/drawable-xxhdpi/ic_settings_white_24dp.png | Bin 0 -> 843 bytes
.../main/res/drawable-xxxhdpi/ic_settings_white_24dp.png | Bin 0 -> 1074 bytes
app/src/main/res/drawable/orfox64.png | Bin 0 -> 4142 bytes
6 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png
new file mode 100644
index 00000000..97ded33b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png
new file mode 100644
index 00000000..8909c355
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png
new file mode 100644
index 00000000..5caedc8e
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png
new file mode 100644
index 00000000..eabb0a2b
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png
new file mode 100644
index 00000000..507c5edd
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png differ
diff --git a/app/src/main/res/drawable/orfox64.png b/app/src/main/res/drawable/orfox64.png
new file mode 100644
index 00000000..cd23e66d
Binary files /dev/null and b/app/src/main/res/drawable/orfox64.png differ
1
0

03 Jan '18
commit 938a7403c36ceed42b2d3917a8e5fd16a3020676
Author: n8fr8 <nathan(a)freitas.net>
Date: Wed Jan 3 09:12:34 2018 -0500
improve vpn app enable view on main activity
---
.../org/torproject/android/OrbotMainActivity.java | 142 ++++++++++-----------
1 file changed, 69 insertions(+), 73 deletions(-)
diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index 12718feb..5ae497f5 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -1135,7 +1135,6 @@ public class OrbotMainActivity extends AppCompatActivity
addAppShortcuts();
-
//now you can handle the intents properly
handleIntents();
@@ -1407,6 +1406,7 @@ public class OrbotMainActivity extends AppCompatActivity
+ 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;
@@ -1426,96 +1426,92 @@ public class OrbotMainActivity extends AppCompatActivity
imgStatus.startAnimation(rotation);
- }
+ }**/
private void addAppShortcuts ()
{
LinearLayout llBoxShortcuts = (LinearLayout)findViewById(R.id.boxAppShortcuts);
- findViewById(R.id.row_apps).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivityForResult(new Intent(OrbotMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
- }
- });
+ PackageManager pMgr = getPackageManager();
+
+ llBoxShortcuts.removeAllViews();
+
+ //first add Orfox shortcut
+ try {
- if (!PermissionManager.isLollipopOrHigher()) {
- llBoxShortcuts.setVisibility(View.GONE);
+ ImageView iv = new ImageView(this);
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+ params.setMargins(3, 3, 3, 3);
+ iv.setLayoutParams(params);
+ iv.setImageResource(R.drawable.orfox64);
+ llBoxShortcuts.addView(iv);
+ iv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (!appInstalledOrNot(TorServiceConstants.BROWSER_APP_USERNAME))
+ promptInstallOrfox();
+ else
+ openBrowser(URL_TOR_CHECK,false, TorServiceConstants.BROWSER_APP_USERNAME);
+
+ }
+ });
}
- else
+ catch (Exception e)
{
- PackageManager pMgr = getPackageManager();
+ //package not installed?
+ }
- llBoxShortcuts.removeAllViews();
+ if (PermissionManager.isLollipopOrHigher()) {
+
+ if (Prefs.useVpn()) {
+ ArrayList<String> pkgIds = new ArrayList<>();
+ String tordAppString = mPrefs.getString(PREFS_KEY_TORIFIED, "");
+
+ if (TextUtils.isEmpty(tordAppString)) {
+ TextView tv = new TextView(this);
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+ params.setMargins(12, 3, 3, 3);
+ tv.setLayoutParams(params);
+ tv.setText("Full Device Mode");
+ llBoxShortcuts.addView(tv);
+ } else {
+ StringTokenizer st = new StringTokenizer(tordAppString, "|");
+ while (st.hasMoreTokens() && pkgIds.size() < 4)
+ pkgIds.add(st.nextToken());
+
+ for (final String pkgId : pkgIds) {
+ try {
+ ImageView iv = new ImageView(this);
+ 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(pMgr.getApplicationIcon(pkgId));
+
+ iv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ openBrowser(URL_TOR_CHECK, false, pkgId);
+ }
+ });
- //first add Orfox shortcut
- try {
- String pkgId = "info.guardianproject.orfox";
-
- ImageView iv = new ImageView(this);
- 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(pMgr.getApplicationIcon(pkgId));
- llBoxShortcuts.addView(iv);
- iv.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (!appInstalledOrNot(TorServiceConstants.BROWSER_APP_USERNAME))
- promptInstallOrfox();
- else
- openBrowser(URL_TOR_CHECK,false, TorServiceConstants.BROWSER_APP_USERNAME);
+ llBoxShortcuts.addView(iv);
+ } catch (Exception e) {
+ //package not installed?
+ }
}
- });
- }
- catch (Exception e)
- {
- //package not installed?
- }
- ArrayList<String> pkgIds = new ArrayList<>();
- String tordAppString = mPrefs.getString(PREFS_KEY_TORIFIED, "");
- if (TextUtils.isEmpty(tordAppString))
+ }
+ }
+ else
{
- /**
TextView tv = new TextView(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
- params.setMargins(3, 3, 3, 3);
+ params.setMargins(12, 3, 3, 3);
tv.setLayoutParams(params);
- tv.setText("Full Device Mode");
+ tv.setText("VPN Disabled");
llBoxShortcuts.addView(tv);
- **/
- }
- else {
- StringTokenizer st = new StringTokenizer(tordAppString, "|");
- while (st.hasMoreTokens() && pkgIds.size() < 4)
- pkgIds.add(st.nextToken());
-
- for (final String pkgId : pkgIds) {
- try {
- ImageView iv = new ImageView(this);
- 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(pMgr.getApplicationIcon(pkgId));
- llBoxShortcuts.addView(iv);
- iv.setEnabled(Prefs.useVpn());
-
- iv.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- openBrowser(URL_TOR_CHECK, false, pkgId);
-
- }
- });
- } catch (Exception e) {
- //package not installed?
- }
- }
-
-
}
//now add app edit/add shortcut
@@ -1523,7 +1519,7 @@ public class OrbotMainActivity extends AppCompatActivity
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(android.R.drawable.ic_input_add));
+ iv.setImageDrawable(getResources().getDrawable(R.drawable.ic_settings_white_24dp));
llBoxShortcuts.addView(iv);
iv.setOnClickListener(new View.OnClickListener() {
@Override
1
0
commit 2ceacf689213267cae779512ce0c44781f679f2c
Author: n8fr8 <nathan(a)freitas.net>
Date: Wed Jan 3 09:17:32 2018 -0500
move bridges to raw resources
---
.../src/main/java/org/torproject/android/service/TorService.java | 2 +-
orbotservice/src/main/{assets => res/raw}/bridges.txt | 0
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorService.java b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
index 520bbe5f..7e12f37e 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
@@ -1912,7 +1912,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
try
{
BufferedReader in=
- new BufferedReader(new InputStreamReader(getAssets().open("bridges.txt"), "UTF-8"));
+ new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.bridges), "UTF-8"));
String str;
while ((str=in.readLine()) != null) {
diff --git a/orbotservice/src/main/assets/bridges.txt b/orbotservice/src/main/res/raw/bridges.txt
similarity index 100%
rename from orbotservice/src/main/assets/bridges.txt
rename to orbotservice/src/main/res/raw/bridges.txt
1
0

03 Jan '18
commit 14ce4f6bf9da3ba0152495c5c556cc894b0fdfe4
Author: n8fr8 <nathan(a)freitas.net>
Date: Wed Jan 3 11:48:08 2018 -0500
big update for new onboarding, bridge wizard
---
app/build.gradle | 13 +-
app/src/main/AndroidManifest.xml | 13 +-
.../org/torproject/android/OrbotMainActivity.java | 137 ++---
.../ui/onboarding/BridgeWizardActivity.java | 216 ++++++++
.../android/ui/onboarding/CustomSlideBigText.java | 81 +++
.../android/ui/onboarding/OnboardingActivity.java | 87 +++
.../torproject/android/vpn/VPNEnableActivity.java | 45 +-
app/src/main/res/drawable/round_drawable.xml | 16 +
app/src/main/res/layout/activity_bridge_wizard.xml | 25 +
app/src/main/res/layout/content_bridge_wizard.xml | 62 +++
app/src/main/res/layout/custom_slide_big_text.xml | 43 ++
app/src/main/res/values/poestrings.xml | 39 ++
app/src/main/res/values/strings.xml | 593 +++++++++++----------
build.gradle | 3 +-
14 files changed, 920 insertions(+), 453 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 10dcb765..44218658 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -30,24 +30,25 @@ android {
applicationId 'org.torproject.android'
targetSdkVersion 23
maxSdkVersion 23
- versionCode 16000001
- versionName '16.0.0-ALPHA-1-multi-SDK16'
+ versionCode 16000003
+ versionName '16.0.0-BETA-1-multi-SDK16'
}
fullperm {
dimension "free"
minSdkVersion 23
applicationId 'org.torproject.android'
targetSdkVersion 25
- versionCode 16000002
- versionName '16.0.0-ALPHA-1-multi-SDK23'
+ versionCode 16000004
+ versionName '16.0.0-BETA-1-multi-SDK23'
}
}
}
dependencies {
+ implementation 'com.android.support.constraint:constraint-layout:1.0.2'
compile project(':orbotservice')
- compile 'com.android.support:support-v4:25.4.0'
- compile 'com.android.support:appcompat-v7:25.4.0'
compile 'com.android.support:design:25.4.0'
compile 'pl.bclogic:pulsator4droid:1.0.3'
+ compile 'com.github.apl-devs:appintro:v4.2.2'
+
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b72e4eae..93b0c389 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -19,8 +19,7 @@
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/DefaultTheme"
- tools:replace="android:allowBackup"
- >
+ tools:replace="android:allowBackup">
<activity
android:name=".OrbotMainActivity"
android:excludeFromRecents="true"
@@ -50,7 +49,7 @@
</intent-filter>
</activity>
- <!-- This is for ensuring the background service still runs when/if the app is swiped away -->
+ <!-- This is for ensuring the background service still runs when/if the app is swiped away -->
<activity
android:name=".service.util.DummyActivity"
android:allowTaskReparenting="true"
@@ -81,7 +80,7 @@
android:name=".service.TorService"
android:enabled="true"
android:permission="android.permission.BIND_VPN_SERVICE"
- android:stopWithTask="false"></service>
+ android:stopWithTask="false" />
<service
android:name=".service.vpn.TorVpnService"
android:enabled="true"
@@ -155,6 +154,12 @@
android:name=".ui.hiddenservices.providers.CookieContentProvider"
android:authorities="org.torproject.android.ui.hiddenservices.providers.cookie"
android:exported="false" />
+
+ <activity android:name=".ui.onboarding.OnboardingActivity" />
+ <activity
+ android:name=".ui.onboarding.BridgeWizardActivity"
+ android:label="@string/title_activity_bridge_wizard"
+ android:theme="@style/DefaultTheme"></activity>
</application>
</manifest>
\ No newline at end of file
diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index 5ae497f5..efe34620 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -23,7 +23,7 @@ import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.TorServiceUtils;
import org.torproject.android.settings.SettingsPreferences;
import org.torproject.android.ui.AppManagerActivity;
-import org.torproject.android.ui.Rotate3dAnimation;
+import org.torproject.android.ui.onboarding.OnboardingActivity;
import org.torproject.android.ui.hiddenservices.ClientCookiesActivity;
import org.torproject.android.ui.hiddenservices.HiddenServicesActivity;
import org.torproject.android.ui.hiddenservices.backup.BackupUtils;
@@ -32,7 +32,6 @@ import org.torproject.android.ui.hiddenservices.providers.HSContentProvider;
import org.torproject.android.vpn.VPNEnableActivity;
import android.annotation.SuppressLint;
-import android.app.ActionBar;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.app.AlertDialog;
@@ -65,18 +64,13 @@ import android.text.Html;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
-import android.view.GestureDetector;
-import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
-import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnLongClickListener;
-import android.view.View.OnTouchListener;
-import android.view.animation.AccelerateInterpolator;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
@@ -188,7 +182,19 @@ public class OrbotMainActivity extends AppCompatActivity
new IntentFilter(TorServiceConstants.LOCAL_ACTION_BANDWIDTH));
lbm.registerReceiver(mLocalBroadcastReceiver,
new IntentFilter(TorServiceConstants.LOCAL_ACTION_LOG));
- }
+
+ 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));
+ }
+
+
+ }
private void sendIntentToService(final String action) {
@@ -337,15 +343,7 @@ public class OrbotMainActivity extends AppCompatActivity
@Override
public void onClick(View v) {
- if (Build.CPU_ABI.contains("arm"))
- {
- promptSetupBridges (); //if ARM processor, show all bridge options
-
- }
- else
- {
- showGetBridgePrompt(""); //if other chip ar, only stock bridges are supported
- }
+ promptSetupBridges (); //if ARM processor, show all bridge options
}
@@ -968,15 +966,20 @@ public class OrbotMainActivity extends AppCompatActivity
public void promptSetupBridges ()
{
- LayoutInflater li = LayoutInflater.from(this);
- View view = li.inflate(R.layout.layout_diag, null);
-
- TextView versionName = (TextView)view.findViewById(R.id.diaglog);
- versionName.setText(R.string.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 (mBtnBridges.isChecked())
{
- new AlertDialog.Builder(this)
+
+ startActivity(new Intent(this, OnboardingActivity.class));
+
+ /**
+ LayoutInflater li = LayoutInflater.from(this);
+ View view = li.inflate(R.layout.layout_diag, null);
+
+ TextView versionName = (TextView)view.findViewById(R.id.diaglog);
+ versionName.setText(R.string.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_);
+
+ new AlertDialog.Builder(this)
.setTitle(R.string.bridge_mode)
.setView(view)
.setItems(R.array.bridge_options, new DialogInterface.OnClickListener() {
@@ -1012,10 +1015,10 @@ public class OrbotMainActivity extends AppCompatActivity
//mBtnBridges.setChecked(false);
}
- })
+ })
.show();
-
-
+ **/
+
}
else
{
@@ -1024,73 +1027,7 @@ public class OrbotMainActivity extends AppCompatActivity
}
- private void showGetBridgePrompt (final String type)
- {
- LayoutInflater li = LayoutInflater.from(this);
- View view = li.inflate(R.layout.layout_diag, null);
-
- TextView versionName = (TextView)view.findViewById(R.id.diaglog);
- versionName.setText(R.string.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_);
-
- new AlertDialog.Builder(this)
- .setTitle(R.string.bridge_mode)
- .setView(view)
- .setNegativeButton(R.string.btn_cancel, new Dialog.OnClickListener()
- {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //do nothing
- }
- })
- .setNeutralButton(R.string.get_bridges_email, new Dialog.OnClickListener ()
- {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
-
- sendGetBridgeEmail(type);
-
- }
-
-
- })
- .setPositiveButton(R.string.get_bridges_web, new Dialog.OnClickListener ()
- {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
-
- openBrowser(URL_TOR_BRIDGES + type,true, null);
-
- }
-
-
- }).show();
- }
-
- private void sendGetBridgeEmail (String type)
- {
- Intent intent = new Intent(Intent.ACTION_SEND);
- intent.setType("message/rfc822");
- intent.putExtra(Intent.EXTRA_EMAIL , new String[]{"bridges(a)torproject.org"});
-
- if (type != null)
- {
- intent.putExtra(Intent.EXTRA_SUBJECT, "get transport " + type);
- intent.putExtra(Intent.EXTRA_TEXT, "get transport " + type);
-
- }
- else
- {
- intent.putExtra(Intent.EXTRA_SUBJECT, "get bridges");
- intent.putExtra(Intent.EXTRA_TEXT, "get bridges");
-
- }
-
- startActivity(Intent.createChooser(intent, getString(R.string.send_email)));
- }
-
private void enableBridges (boolean enable)
{
Prefs.putBridgesEnabled(enable);
@@ -1119,6 +1056,7 @@ public class OrbotMainActivity extends AppCompatActivity
super.onResume();
mBtnBridges.setChecked(Prefs.bridgesEnabled());
+ mBtnVPN.setChecked(Prefs.useVpn());
requestTorStatus();
@@ -1208,18 +1146,6 @@ public class OrbotMainActivity extends AppCompatActivity
lblStatus.setText(getString(R.string.status_activated));
- boolean showFirstTime = mPrefs.getBoolean("connect_first_time", true);
-
- if (showFirstTime)
- {
- Editor pEdit = mPrefs.edit();
- pEdit.putBoolean("connect_first_time", false);
- pEdit.commit();
- showAlert(getString(R.string.status_activated),
- getString(R.string.connect_first_time), true);
- }
-
-
if (autoStartFromIntent)
{
autoStartFromIntent = false;
@@ -1526,7 +1452,6 @@ public class OrbotMainActivity extends AppCompatActivity
public void onClick(View v) {
startActivityForResult(new Intent(OrbotMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
-
}
});
}
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
new file mode 100644
index 00000000..63a7e072
--- /dev/null
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
@@ -0,0 +1,216 @@
+package org.torproject.android.ui.onboarding;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.Snackbar;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import org.torproject.android.R;
+import org.torproject.android.service.OrbotConstants;
+import org.torproject.android.service.TorServiceConstants;
+import org.torproject.android.service.util.Prefs;
+
+public class BridgeWizardActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_bridge_wizard);
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ setTitle(getString(R.string.bridges));
+
+ findViewById(R.id.btnBridgesDirect).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Prefs.setBridgesList("");
+ Prefs.putBridgesEnabled(false);
+ }
+ });
+
+ findViewById(R.id.btnBridgesObfs4).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Prefs.setBridgesList("obfs4");
+ Prefs.putBridgesEnabled(true);
+ }
+ });
+
+
+ findViewById(R.id.btnBridgesMeek).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Prefs.setBridgesList("meek");
+ Prefs.putBridgesEnabled(true);
+ }
+ });
+
+
+ findViewById(R.id.btnBridgesNew).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showGetBridgePrompt("");
+ }
+ });
+ }
+
+
+
+ private void showGetBridgePrompt (final String type)
+ {
+ LayoutInflater li = LayoutInflater.from(this);
+ View view = li.inflate(R.layout.layout_diag, null);
+
+ TextView versionName = (TextView)view.findViewById(R.id.diaglog);
+ versionName.setText(R.string.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_);
+
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.bridge_mode)
+ .setView(view)
+ .setNegativeButton(R.string.btn_cancel, new Dialog.OnClickListener()
+ {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ //do nothing
+ }
+ })
+ .setNeutralButton(R.string.get_bridges_email, new Dialog.OnClickListener ()
+ {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+
+
+ sendGetBridgeEmail(type);
+
+ }
+
+
+ })
+ .setPositiveButton(R.string.get_bridges_web, new Dialog.OnClickListener ()
+ {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+
+ openBrowser(OrbotConstants.URL_TOR_BRIDGES + type,true, null);
+
+ }
+
+
+ }).show();
+ }
+
+ private void sendGetBridgeEmail (String type)
+ {
+ Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.setType("message/rfc822");
+ intent.putExtra(Intent.EXTRA_EMAIL , new String[]{"bridges(a)torproject.org"});
+
+ if (type != null)
+ {
+ intent.putExtra(Intent.EXTRA_SUBJECT, "get transport " + type);
+ intent.putExtra(Intent.EXTRA_TEXT, "get transport " + type);
+
+ }
+ else
+ {
+ intent.putExtra(Intent.EXTRA_SUBJECT, "get bridges");
+ intent.putExtra(Intent.EXTRA_TEXT, "get bridges");
+
+ }
+
+ startActivity(Intent.createChooser(intent, getString(R.string.send_email)));
+ }
+
+
+ /*
+ * Launch the system activity for Uri viewing with the provided url
+ */
+ private void openBrowser(final String browserLaunchUrl,boolean forceExternal, String pkgId)
+ {
+ boolean isBrowserInstalled = appInstalledOrNot(TorServiceConstants.BROWSER_APP_USERNAME);
+
+ if (pkgId != null)
+ {
+ if (pkgId.equals(TorServiceConstants.BROWSER_APP_USERNAME))
+ startIntent(pkgId,Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
+ else
+ {
+ if (!Prefs.useVpn())
+ {
+ Toast.makeText(this, R.string.please_enable_vpn, Toast.LENGTH_LONG).show();
+ }
+ else
+ {
+ startIntent(pkgId,Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));
+ }
+ }
+ }
+ else if (isBrowserInstalled)
+ {
+ startIntent(TorServiceConstants.BROWSER_APP_USERNAME,Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));
+ }
+ else
+ {
+ startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl)));
+ }
+ }
+
+
+ private void startIntent (String pkg, String action, Uri data)
+ {
+ Intent i;
+ PackageManager pm = getPackageManager();
+
+ try {
+ 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);
+
+ } catch (PackageManager.NameNotFoundException e) {
+
+ }
+ }
+
+ private boolean appInstalledOrNot(String uri)
+ {
+ PackageManager pm = getPackageManager();
+ try
+ {
+ PackageInfo pi = pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
+ return pi.applicationInfo.enabled;
+ }
+ catch (PackageManager.NameNotFoundException e)
+ {
+ 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
new file mode 100644
index 00000000..35f5a55a
--- /dev/null
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/CustomSlideBigText.java
@@ -0,0 +1,81 @@
+package org.torproject.android.ui.onboarding;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.TextView;
+
+import org.torproject.android.R;
+
+public class CustomSlideBigText extends Fragment {
+
+ private static final String ARG_LAYOUT_RES_ID = "layoutResId";
+ private int layoutResId;
+ private String mTitle;
+ private String mButtonText;
+ private String mSubTitle;
+ private View.OnClickListener mButtonListener;
+
+ public static CustomSlideBigText newInstance(int layoutResId) {
+ CustomSlideBigText sampleSlide = new CustomSlideBigText();
+
+ Bundle args = new Bundle();
+ args.putInt(ARG_LAYOUT_RES_ID, layoutResId);
+ sampleSlide.setArguments(args);
+
+ return sampleSlide;
+ }
+
+ public void setTitle (String title)
+ {
+ mTitle = title;
+ }
+
+ public void setSubTitle(String subTitle) { mSubTitle = subTitle; }
+
+ public void showButton (String buttonText, View.OnClickListener buttonListener)
+ {
+ mButtonText = buttonText;
+ mButtonListener = buttonListener;
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (getArguments() != null && getArguments().containsKey(ARG_LAYOUT_RES_ID)) {
+ layoutResId = getArguments().getInt(ARG_LAYOUT_RES_ID);
+ }
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ View view = inflater.inflate(layoutResId, container, false);
+ ((TextView)view.findViewById(R.id.custom_slide_big_text)).setText(mTitle);
+
+ if (!TextUtils.isEmpty(mSubTitle)) {
+
+ TextView tv =
+ (TextView)view.findViewById(R.id.custom_slide_big_text_sub);
+ tv.setText(mSubTitle);
+ tv.setVisibility(View.VISIBLE);
+ }
+
+ if (mButtonText != null)
+ {
+ Button button = (Button)view.findViewById(R.id.custom_slide_button);
+ button.setVisibility(View.VISIBLE);
+ button.setText(mButtonText);
+ button.setOnClickListener(mButtonListener);
+ }
+ return view;
+
+ }
+}
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
new file mode 100644
index 00000000..6d91f55d
--- /dev/null
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java
@@ -0,0 +1,87 @@
+package org.torproject.android.ui.onboarding;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.View;
+
+import com.github.paolorotolo.appintro.AppIntro;
+
+import org.torproject.android.R;
+import org.torproject.android.ui.AppManagerActivity;
+import org.torproject.android.vpn.VPNEnableActivity;
+
+public class OnboardingActivity extends AppIntro {
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Instead of fragments, you can also use our default slide
+ // Just set a title, description, background and image. AppIntro will do the rest.
+ CustomSlideBigText welcome = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
+ welcome.setTitle(getString(R.string.hello));
+ welcome.setSubTitle(getString(R.string.welcome));
+ addSlide(welcome);
+
+ CustomSlideBigText intro2 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
+ intro2.setTitle(getString(R.string.browser_the_internet));
+ intro2.setSubTitle(getString(R.string.no_tracking));
+ addSlide(intro2);
+
+ CustomSlideBigText cs2 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
+ cs2.setTitle(getString(R.string.bridges_sometimes));
+ cs2.showButton(getString(R.string.action_more), new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(new Intent(OnboardingActivity.this,BridgeWizardActivity.class));
+ }
+ });
+ addSlide(cs2);
+
+ CustomSlideBigText cs3 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
+ cs3.setTitle(getString(R.string.vpn_setup));
+ cs3.setSubTitle(getString(R.string.vpn_setup_sub));
+ cs3.showButton(getString(R.string.action_vpn_choose), new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(new Intent(OnboardingActivity.this, VPNEnableActivity.class));
+ startActivityForResult(new Intent(OnboardingActivity.this, AppManagerActivity.class), 9999);
+
+ }
+ });
+ addSlide(cs3);
+
+
+
+
+ // OPTIONAL METHODS
+ // Override bar/separator color.
+ setBarColor(getResources().getColor(R.color.dark_purple));
+ setSeparatorColor(getResources().getColor(R.color.panel_background_main));
+
+ // Hide Skip/Done button.
+ showSkipButton(false);
+ setProgressButtonEnabled(true);
+ }
+
+ @Override
+ public void onSkipPressed(Fragment currentFragment) {
+ super.onSkipPressed(currentFragment);
+ // Do something when users tap on Skip button.
+ }
+
+ @Override
+ public void onDonePressed(Fragment currentFragment) {
+ super.onDonePressed(currentFragment);
+ // Do something when users tap on Done button.
+ finish();
+ }
+
+ @Override
+ public void onSlideChanged(@Nullable Fragment oldFragment, @Nullable Fragment newFragment) {
+ super.onSlideChanged(oldFragment, newFragment);
+ // Do something when the slide changes.
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/torproject/android/vpn/VPNEnableActivity.java b/app/src/main/java/org/torproject/android/vpn/VPNEnableActivity.java
index 7f24dabf..c6de072e 100644
--- a/app/src/main/java/org/torproject/android/vpn/VPNEnableActivity.java
+++ b/app/src/main/java/org/torproject/android/vpn/VPNEnableActivity.java
@@ -62,44 +62,7 @@ public class VPNEnableActivity extends AppCompatActivity {
public void promptStartVpnService ()
{
- Prefs.putUseVpn(true);
startVpnService();
- /**
-
- AlertDialog dialog = new AlertDialog.Builder(this)
- .setTitle(getString(R.string.app_name) + ' ' + getString(R.string.apps_mode))
- .setMessage(getString(R.string.you_can_enable_all_apps_on_your_device_to_run_through_the_tor_network_using_the_vpn_feature_of_android_))
- .setPositiveButton(R.string.activate, new Dialog.OnClickListener ()
- {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
-
-
- }
-
-
- })
- .setNegativeButton(R.string.btn_cancel, new Dialog.OnClickListener ()
- {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
-
- h.postDelayed(new Runnable () {
-
- public void run ()
- {
- VPNEnableActivity.this.finish();
-
- }
- }, 100);
- }
-
- }).create();
-
- dialog.show();
- **/
}
@@ -107,7 +70,9 @@ public class VPNEnableActivity extends AppCompatActivity {
{
if (intent == null)
{
- Log.d("VPNEnableActivity","VPN enabled, starting Tor...");
+ Prefs.putUseVpn(true);
+
+ Log.d("VPNEnableActivity","VPN enabled, starting Tor...");
sendIntentToService(TorServiceConstants.CMD_VPN);
Handler h = new Handler();
@@ -119,8 +84,8 @@ public class VPNEnableActivity extends AppCompatActivity {
finish();
}
}, 100);
-
-
+
+
}
else
{
diff --git a/app/src/main/res/drawable/round_drawable.xml b/app/src/main/res/drawable/round_drawable.xml
new file mode 100644
index 00000000..134c36e7
--- /dev/null
+++ b/app/src/main/res/drawable/round_drawable.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <stroke
+ android:width="3dp"
+ android:color="#ffffff" />
+
+ <padding
+ android:left="5dp"
+ android:right="5dp"/>
+
+ <corners
+ android:bottomLeftRadius="7dp"
+ android:bottomRightRadius="7dp"
+ android:topLeftRadius="7dp"
+ android:topRightRadius="7dp" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_bridge_wizard.xml b/app/src/main/res/layout/activity_bridge_wizard.xml
new file mode 100644
index 00000000..e44276cb
--- /dev/null
+++ b/app/src/main/res/layout/activity_bridge_wizard.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context="org.torproject.android.ui.onboarding.BridgeWizardActivity">
+
+ <android.support.design.widget.AppBarLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:theme="@style/DefaultTheme.AppBarOverlay">
+
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="?attr/actionBarSize"
+ android:background="?attr/colorPrimary"
+ app:popupTheme="@style/DefaultTheme.PopupOverlay" />
+
+ </android.support.design.widget.AppBarLayout>
+
+ <include layout="@layout/content_bridge_wizard" />
+
+</android.support.design.widget.CoordinatorLayout>
diff --git a/app/src/main/res/layout/content_bridge_wizard.xml b/app/src/main/res/layout/content_bridge_wizard.xml
new file mode 100644
index 00000000..fb1473ff
--- /dev/null
+++ b/app/src/main/res/layout/content_bridge_wizard.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ 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="org.torproject.android.ui.onboarding.BridgeWizardActivity"
+ tools:showIn="@layout/activity_bridge_wizard"
+ android:orientation="vertical"
+ >
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/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_"
+
+ android:layout_margin="12dp"
+ android:textStyle="bold"
+ android:textSize="16sp"
+ />
+ <RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <RadioButton
+ android:id="@+id/btnBridgesDirect"
+ android:layout_width="315dp"
+ android:layout_height="29dp"
+ android:text="Direct connection to Tor"
+ android:layout_margin="12dp"
+ />
+
+ <RadioButton
+ android:id="@+id/btnBridgesObfs4"
+ android:layout_width="315dp"
+ android:layout_height="29dp"
+ android:text="Connect through community bridges (Obfs4)"
+ android:layout_margin="12dp"
+
+ />
+
+ <RadioButton
+ android:id="@+id/btnBridgesMeek"
+ android:layout_width="315dp"
+ android:layout_height="29dp"
+ android:text="Hide traffic through Cloud Services"
+ android:layout_margin="12dp"
+
+ />
+
+ <RadioButton
+ android:id="@+id/btnBridgesNew"
+ android:layout_width="315dp"
+ android:layout_height="29dp"
+ android:text="Request New Bridges..."
+ android:layout_margin="12dp"
+
+ />
+ </RadioGroup>
+</LinearLayout>
diff --git a/app/src/main/res/layout/custom_slide_big_text.xml b/app/src/main/res/layout/custom_slide_big_text.xml
new file mode 100644
index 00000000..100392e6
--- /dev/null
+++ b/app/src/main/res/layout/custom_slide_big_text.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:background="@color/dark_purple"
+ >
+
+ <TextView
+ android:id="@+id/custom_slide_big_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text=""
+ android:textColor="@color/panel_background_main"
+ android:gravity="center"
+ android:layout_margin="12dp"
+ android:textStyle="bold"
+ android:textSize="28sp"/>
+ <TextView
+ android:id="@+id/custom_slide_big_text_sub"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text=""
+ android:textColor="@color/panel_background_main"
+ android:gravity="center"
+ android:layout_margin="12dp"
+ android:textStyle="bold"
+ android:textSize="16sp"
+ android:visibility="gone"
+ />
+
+ <Button
+ android:id="@+id/custom_slide_button"
+ android:layout_width="120dp"
+ android:layout_height="40dp"
+ android:layout_margin="10dp"
+ android:background="@drawable/round_drawable"
+ android:textColor="@color/panel_background_main"
+ android:visibility="gone"
+
+ />
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/poestrings.xml b/app/src/main/res/values/poestrings.xml
new file mode 100644
index 00000000..a899df70
--- /dev/null
+++ b/app/src/main/res/values/poestrings.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="bridges_desc">"Bridges are Tor relays that help circumvent censorship. You can try bridges if Tor is blocked by your ISP; each type of bridge uses a different method
+ to avoid censorship: if one type does not work, try using a different one.</string>
+
+ <string name="bridges_no">"No Bridges: Directly Connect to Tor"</string>
+ <string name="bridges_provided">"Provided Bridges: "</string>
+ <string name="bridges_custom">"Custom Bridges"</string>
+
+ <string name="bridges_config">"Bridge Configuration"</string>
+ <string name="action_done">"Done"</string>
+
+ <string name="bridges_sometimes">"Sometimes you need a bridge to get to Tor."</string>
+ <string name="action_more">"TELL ME MORE"</string>
+
+ <string name="vpn_setup">"You can enable any app to go through Tor using our built-in VPN."</string>
+ <string name="vpn_setup_sub">"This won\'t make you anonymous, but it will help get through firewalls."</string>
+ <string name="action_vpn_choose">"CHOOSE APPS"</string>
+
+ <string name="status_connected">"Connected!"</string>
+
+ <string name="loading_claim_1">"Our diverse community is what makes Tor great!"</string>
+ <string name="loading_claim_2">"Everyday people use Tor to avoid being followed by marketing ads."</string>
+ <string name="loading_claim_3">"When Facebook is blocked, people use Tor to connect to their friends and family."</string>
+ <string name="loading_claim_4">"Activists use Tor to freely tweet their opinions and beliefs."</string>
+ <string name="loading_claim_5">"Bloggers use Tor to rally people toward social reform."</string>
+ <string name="loading_claim_6">"Journalists use Tor to securely investigate stories they are reporting on."</string>
+ <string name="loading_claim_7">"Business people use Tor to keep their company strategies private."</string>
+ <string name="loading_claim_8">"Workers use Tor to fight for justice without fear of losing their job."</string>
+
+ <string name="status_connecting">"We're connecting you." = "We're connecting you."</string>
+
+ <string name="hello">"Hello"</string>
+ <string name="welcome">"Welcome to Tor on mobile."</string>
+
+ <string name="browser_the_internet">"Browse the internet how you expect you should."</string>
+ <string name="no_tracking">"No tracking. No censorship."</string>
+
+</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f8e55528..cb1a4366 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,257 +1,257 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
- <string name="app_name">Orbot</string>
- <string name="app_description">Orbot is a free proxy app that empowers other apps to use the internet more securely. Orbot uses Tor to encrypt your Internet traffic and then hides it by bouncing through a series of computers around the world. Tor is free software and an open network that helps you defend against a form of network surveillance that threatens personal freedom and privacy, confidential business activities and relationships, and state security known as traffic analysis.</string>
- <string name="internal_web_url">http://orbot/</string>
- <string name="default_web_url">http://check.torproject.org</string>
- <string name="secure_default_web_url">https://check.torproject.org</string>
- <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
- <string name="control_permission_label">start and stop Tor</string>
- <string name="tor_proxy_service_process">torproxyservice</string>
- <string name="status_starting_up">Orbot is starting…</string>
- <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="tor_process_waiting">waiting.</string>
- <string name="not_anonymous_yet">WARNING: Your traffic is not anonymous yet! Please configure your applications to use HTTP proxy 127.0.0.1:8118 or SOCKS4A or SOCKS5 proxy 127.0.0.1:9050</string>
- <string name="menu_home">Home</string>
- <string name="menu_browse">Browse</string>
- <string name="menu_settings">Settings</string>
- <string name="menu_log">Log</string>
- <string name="menu_info">Help</string>
- <string name="menu_apps">Apps...</string>
- <string name="menu_start">Start</string>
- <string name="menu_stop">Stop</string>
- <string name="menu_about">About</string>
- <string name="menu_promo_apps">Get apps…</string>
- <string name="main_layout_download">Download</string>
- <string name="main_layout_upload">Upload</string>
- <string name="button_help">Help</string>
- <string name="button_close">Close</string>
- <string name="button_about">About</string>
- <string name="button_clear_log">Clear Log</string>
- <string name="menu_verify">Check</string>
- <string name="menu_exit">Exit</string>
- <string name="menu_scan">Scan BridgeQR</string>
- <string name="menu_share_bridge">Share BridgeQR</string>
- <string name="press_to_start">- long press to start -</string>
- <string name="pref_trans_proxy_group">Transparent Proxying (Requires Root)</string>
- <string name="pref_trans_proxy_title">Transparent Proxying</string>
- <string name="pref_trans_proxy_summary">Automatic Torifying of Apps</string>
- <string name="pref_transparent_all_title">Tor Everything</string>
- <string name="pref_transparent_all_summary">Proxy traffic for all apps through Tor</string>
- <string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
- <string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
- <string name="pref_transparent_port_title">Port List</string>
- <string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
- <string name="pref_transparent_port_dialog">Enter ports to proxy</string>
- <string name="pref_has_root">Request Root Access</string>
- <string name="pref_has_root_summary">Request root access for transparent proxying</string>
- <string name="status_install_success">Tor binaries successfully installed!</string>
- <string name="status_install_fail">The Tor binary files were unable to be installed. Please check the log and notify tor-assistants(a)torproject.org</string>
- <string name="title_error">Application Error</string>
- <string name="wizard_title">Orbot</string>
- <string name="wizard_btn_tell_me_more">About Orbot</string>
- <string name="btn_next">Next</string>
- <string name="btn_back">Back</string>
- <string name="btn_finish">Finish</string>
- <string name="btn_okay">Okay</string>
- <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_permissions_root">Permission Granted</string>
- <string name="wizard_permissions_stock">Orbot Permissions</string>
- <string name="wizard_premissions_msg_root">Excellent! We\'ve detected that you have root permissions enabled for Orbot. We will use this power wisely.</string>
- <string name="wizard_permissions_msg_stock"> While it is not required, Orbot can become a more powerful tool if your device has root access. Use the button below to grant Orbot superpowers! </string>
- <string name="wizard_permissions_no_root">If you don\'t have root access or have no idea what we\'re talking about, just be sure to use apps made to work with Orbot.</string>
- <string name="wizard_permissions_consent">I understand and would like to continue without Superuser</string>
- <string name="wizard_permission_enable_root">Grant Root for Orbot</string>
- <string name="wizard_configure">Configure Torification</string>
- <string name="wizard_configure_msg">Orbot gives you the option to route all application traffic through Tor OR to choose your applications individually.</string>
- <string name="wizard_configure_all">Proxy All Apps Through Tor</string>
- <string name="wizard_configure_select_apps">Select Individual Apps for Tor</string>
- <string name="wizard_tips_tricks">Orbot-enabled Apps</string>
- <string name="wizard_tips_msg">The apps below were developed to work with Orbot. Click each button to install now, or you can find them later on Google Play, at GuardianProject.info website or via F-Droid.org.</string>
- <string name="wizard_tips_otrchat">ChatSecure - Secure instant messaging client for Android</string>
- <string name="wizard_tips_proxy">Proxy Settings - Learn how to configure apps to work with Orbot</string>
- <string name="wizard_tips_duckgo">DuckDuckGo Search Engine app</string>
- <string name="wizard_tips_twitter">Set Twitter proxy to host \"localhost\" and port 8118</string>
- <string name="wizard_tips_story_maker">StoryMaker - Make a story and leave it to tor for security!</string>
- <string name="twitter_setup_url">https://guardianproject.info/2012/05/02/orbot-your-twitter/</string>
- <string name="wizard_proxy_help_info">Proxy Settings</string>
- <string name="wizard_proxy_help_msg">If the Android app you are using can support the use of an HTTP or SOCKS proxy, then you can configure it to connect to Orbot and use Tor.\n\n\n The host settings is 127.0.0.1 or \"localhost\". For HTTP, the port setting is 8118. For SOCKS, the proxy is 9050. You should use SOCKS4A or SOCKS5 if possible.\n \n\n\n You can learn more about proxying on Android via the FAQ at: http://tinyurl.com/proxyandroid\n </string>
- <string name="wizard_final">Orbot is ready!</string>
- <string name="wizard_final_msg">Millions of people around the world use Tor for a wide variety of reasons.\n\nJournalists and bloggers, human rights defenders, law enforcement officers, soldiers, corporations, citizens of repressive regimes, and just ordinary citizens… and now you are ready to, as well!</string>
- <string name="wizard_exit_at_first_screen_toast">Please configure Orbot before you can start using it!</string>
- <!--END Welcome Wizard strings (DJH)-->
- <string name="connect_first_time">You\'ve successfully connected to the Tor network - but this does NOT mean your device is secure. You can use the \'Browser\' button to test your connection. \n\nVisit us at https://guardianproject.info/apps/orbot or send an email to help(a)guardianproject.info to learn more.</string>
- <string name="tor_check">This will open your web browser to https://check.torproject.org in order to see if Orbot is probably configured and you are connected to Tor.</string>
- <string name="pref_hs_group">Hidden Service Hosting</string>
- <string name="pref_general_group">General</string>
- <string name="pref_start_boot_title">Start Orbot on Boot</string>
- <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
- <!--New Wizard Strings-->
- <!--Title Screen-->
- <string name="wizard_title_msg">Orbot brings Tor to Android!\n\nTor helps you defend against content filtering, traffic analysis and network surveillance that threatens privacy, confidential information and personal relationships.\n\nThis wizard will help you configure Orbot and Tor on your device.</string>
- <!--Warning screen-->
- <string name="wizard_warning_title">Warning</string>
- <string name="wizard_warning_msg">Simply installing Orbot will not automatically anonymize your mobile traffic.\n\nYou must properly configure Orbot, your device and other apps to successfully use Tor.</string>
- <!--Permissions screen-->
- <string name="wizard_permissions_title">Permissions</string>
- <string name="wizard_permissions_root_msg1">You can optionally grant Orbot \'Superuser\' access to enable advanced features, such as Transparent Proxying.</string>
- <string name="wizard_permissions_root_msg2">If you do not want to do this, please make sure to use apps made to work with Orbot</string>
- <string name="wizard_permissions_no_root_msg">Your device does not appear to be rooted or provide root or \'Superuser\' access.\n\nPlease try the \'Apps\' mode on the main screen instead.</string>
- <!--TipsAndTricks screen-->
- <string name="wizard_tips_title">Orbot-Enabled Apps</string>
- <string name="wizard_tips_gibberbot">ChatSecure: Secure chat app with Off-the-Record Encryption</string>
- <string name="wizard_tips_orweb">Orfox: Privacy-enhanced browser that works through Tor</string>
- <string name="wizard_tips_play">Find all Guardian Project apps on Google Play</string>
- <string name="wizard_tips_fdroid">Find all Guardian Project apps on F-Droid</string>
- <string name="wizard_tips_fdroid_org">Find all Guardian Project apps on https://f-droid.org</string>
- <!--Transparent Proxy screen-->
- <string name="wizard_transproxy_title">Transparent Proxying</string>
- <string name="wizard_transproxy_msg">This allows your apps to automatically run through the Tor network without any configuration.</string>
- <string name="wizard_transproxy_hint">(Check this box if you have no idea what we are talking about)</string>
- <string name="wizard_transproxy_none">None</string>
- <string name="pref_transparent_tethering_title">Tor Tethering</string>
- <string name="pref_transparent_tethering_summary">Enable Tor Transparent Proxying for Wifi and USB Tethered Devices (requires restart)</string>
- <string name="button_grant_superuser">Request Superuser Access</string>
- <string name="pref_select_apps">Select Apps</string>
- <string name="pref_select_apps_summary">Choose Apps to Route Through Tor</string>
- <string name="pref_node_configuration">Node Configuration</string>
- <string name="pref_node_configuration_summary">These are advanced settings that can reduce your anonymity</string>
- <string name="pref_entrance_node">Entrance Nodes</string>
- <string name="pref_entrance_node_summary">Fingerprints, nicks, countries and addresses for the first hop</string>
- <string name="pref_entrance_node_dialog">Enter Entrance Nodes</string>
- <string name="pref_allow_background_starts_title">Allow Background Starts</string>
- <string name="pref_allow_background_starts_summary">Let any app tell Orbot to start Tor and related services</string>
-
- <string name="button_proxy_all">Proxy All</string>
- <string name="button_proxy_none">Proxy None</string>
- <string name="button_invert_selection">Invert Selection</string>
-
- <string name="pref_proxy_title">Outbound Network Proxy (Optional)</string>
-
- <string name="pref_proxy_type_title">Outbound Proxy Type</string>
- <string name="pref_proxy_type_summary">Protocol to use for proxy server: HTTP, HTTPS, Socks4, Socks5</string>
- <string name="pref_proxy_type_dialog">Enter Proxy Type</string>
-
- <string name="pref_proxy_host_title">Outbound Proxy Host</string>
- <string name="pref_proxy_host_summary">Proxy Server hostname</string>
- <string name="pref_proxy_host_dialog">Enter Proxy Host</string>
-
- <string name="pref_proxy_port_title">Outbound Proxy Port</string>
- <string name="pref_proxy_port_summary">Proxy Server port</string>
- <string name="pref_proxy_port_dialog">Enter Proxy port</string>
-
- <string name="pref_proxy_username_title">Outbound Proxy Username</string>
- <string name="pref_proxy_username_summary">Proxy Username (Optional)</string>
- <string name="pref_proxy_username_dialog">Enter Proxy Username</string>
-
- <string name="pref_proxy_password_title">Outbound Proxy Password</string>
- <string name="pref_proxy_password_summary">Proxy Password (Optional)</string>
- <string name="pref_proxy_password_dialog">Enter Proxy Password</string>
-
-
- <string name="status">Status</string>
- <string name="setting_up_full_transparent_proxying_">Setting up full transparent proxying…</string>
- <string name="setting_up_app_based_transparent_proxying_">Setting up app-based transparent proxying…</string>
- <string name="transparent_proxying_enabled">Transparent proxying ENABLED</string>
- <string name="transproxy_enabled_for_tethering_">TransProxy enabled for Tethering!</string>
- <string name="warning_error_starting_transparent_proxying_">WARNING: error starting transparent proxying!</string>
- <string name="transproxy_rules_cleared">TransProxy rules cleared</string>
- <string name="couldn_t_start_tor_process_">Couldn\'t start Tor process: </string>
- <string name="privoxy_is_running_on_port_">Polipo is running on port: </string>
- <string name="setting_up_port_based_transparent_proxying_">Setting up port-based transparent proxying…</string>
- <string name="bridge_error">Bridge Error</string>
- <string name="bridge_requires_ip">In order to use the bridge feature, you must enter at least one bridge IP address.</string>
- <string name="send_email_for_bridges">Send an email to bridges(a)torproject.org with the line \"get bridges\" by itself in the body of the mail from a gmail account.</string>
- <string name="error">Error</string>
- <string name="your_reachableaddresses_settings_caused_an_exception_">Your ReachableAddresses settings caused an exception!</string>
- <string name="your_relay_settings_caused_an_exception_">Your relay settings caused an exception!</string>
- <string name="exit_nodes">Exit Nodes</string>
- <string name="fingerprints_nicks_countries_and_addresses_for_the_last_hop">Fingerprints, nicks, countries and addresses for the last hop</string>
- <string name="enter_exit_nodes">Enter Exit Nodes</string>
- <string name="exclude_nodes">Exclude Nodes</string>
- <string name="fingerprints_nicks_countries_and_addresses_to_exclude">Fingerprints, nicks, countries and addresses to exclude</string>
- <string name="enter_exclude_nodes">Enter Exclude Nodes</string>
- <string name="strict_nodes">Strict Nodes</string>
- <string name="use_only_these_specified_nodes">Use *only* these specified nodes</string>
- <string name="bridges">Bridges</string>
- <string name="use_bridges">Use Bridges</string>
- <string name="bridges_obfuscated">Obfuscated Bridges</string>
- <string name="enable_alternate_entrance_nodes_into_the_tor_network">Enable alternate entrance nodes into the Tor Network</string>
- <string name="enable_if_configured_bridges_are_obfuscated_bridges">Enable if configured bridges are obfuscated bridges</string>
- <string name="ip_address_and_port_of_bridges">IP address and port of bridges</string>
- <string name="enter_bridge_addresses">Enter Bridge Addresses</string>
- <string name="relays">Relays</string>
- <string name="relaying">Relaying</string>
- <string name="enable_your_device_to_be_a_non_exit_relay">Enable your device to be a non-exit relay</string>
- <string name="relay_port">Relay Port</string>
- <string name="listening_port_for_your_tor_relay">Listening port for your Tor relay</string>
- <string name="enter_or_port">Enter OR port</string>
- <string name="relay_nickname">Relay nickname</string>
- <string name="the_nickname_for_your_tor_relay">The nickname for your Tor relay</string>
- <string name="enter_a_custom_relay_nickname">Enter a custom relay nickname</string>
- <string name="reachable_addresses">Reachable Addresses</string>
- <string name="run_as_a_client_behind_a_firewall_with_restrictive_policies">Run as a client behind a firewall with restrictive policies</string>
- <string name="reachable_ports">Reachable ports</string>
- <string name="ports_reachable_behind_a_restrictive_firewall">Ports reachable behind a restrictive firewall</string>
- <string name="enter_ports">Enter ports</string>
- <string name="enable_hidden_services">Hidden Service Hosting</string>
- <string name="run_servers_accessible_via_the_tor_network">allow on-device server to be accessible via the Tor network</string>
- <string name="enter_localhost_ports_for_hidden_services">enter localhost ports for hidden services</string>
- <string name="hidden_service_ports">Hidden Service Ports</string>
- <string name="the_addressable_name_for_your_hidden_service_generated_automatically_">the addressable name for your hidden service (generated automatically)</string>
- <string name="enable_debug_log_to_output_must_use_adb_or_alogcat_to_view_">enable debug log to output (must use adb or aLogCat to view)</string>
- <string name="project_home">Project Home(s): </string>
- <string name="project_urls">https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/…</string>
- <string name="the_tor_license">The Tor License</string>
- <string name="https_torproject_org">https://torproject.org</string>
- <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 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">An app wants to open hidden server port %1$s to the Tor network. This is safe if you trust the app.</string>
- <string name="found_existing_tor_process">found existing Tor process…</string>
- <string name="something_bad_happened">Something bad happened. Check the log</string>
- <string name="hidden_service_on">hidden service on:</string>
- <string name="unable_to_read_hidden_service_name">unable to read hidden service name</string>
- <string name="unable_to_start_tor">Unable to start Tor:</string>
- <string name="unable_to_reset_tor">Reboot your device, unable to reset Tor!</string>
- <string name="pref_use_sys_iptables_title">Use Default Iptables</string>
- <string name="pref_use_sys_iptables_summary">use the built-in iptables binary instead of the one bundled with Orbot</string>
-
- <string name="error_installing_binares">The Tor binaries were not able to be installed or upgraded.</string>
-
- <string name="pref_use_persistent_notifications">Always keep the icon in toolbar when Orbot is connected</string>
- <string name="pref_use_persistent_notifications_title">Always-On Notifications</string>
-
- <string name="pref_use_expanded_notifications">Show expanded notification with Tor exit country and IP</string>
- <string name="pref_use_expanded_notifications_title">Expanded Notifications</string>
-
- <string name="notification_using_bridges">Bridges enabled!</string>
- <string name="default_bridges" />
- <string name="set_locale_title">Language</string>
- <string name="set_locale_summary">Choose the locale and language for Orbot</string>
- <string name="wizard_locale_title">Choose Language</string>
- <string name="wizard_locale_msg">Leave default or switch the current language</string>
- <string name="powered_by">powered by Tor</string>
- <string name="btn_save_settings">Save Settings</string>
- <string name="no_internet_connection_tor">No internet connection; Tor is on standby…</string>
- <string name="bandwidth_">Bandwidth:</string>
- <string name="down">down</string>
- <string name="up">up</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>
-
- <string name="menu_verify_browser">Browser</string>
+ <string name="app_name">Orbot</string>
+ <string name="app_description">Orbot is a free proxy app that empowers other apps to use the internet more securely. Orbot uses Tor to encrypt your Internet traffic and then hides it by bouncing through a series of computers around the world. Tor is free software and an open network that helps you defend against a form of network surveillance that threatens personal freedom and privacy, confidential business activities and relationships, and state security known as traffic analysis.</string>
+ <string name="internal_web_url">http://orbot/</string>
+ <string name="default_web_url">http://check.torproject.org</string>
+ <string name="secure_default_web_url">https://check.torproject.org</string>
+ <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+ <string name="control_permission_label">start and stop Tor</string>
+ <string name="tor_proxy_service_process">torproxyservice</string>
+ <string name="status_starting_up">Orbot is starting…</string>
+ <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="tor_process_waiting">waiting.</string>
+ <string name="not_anonymous_yet">WARNING: Your traffic is not anonymous yet! Please configure your applications to use HTTP proxy 127.0.0.1:8118 or SOCKS4A or SOCKS5 proxy 127.0.0.1:9050</string>
+ <string name="menu_home">Home</string>
+ <string name="menu_browse">Browse</string>
+ <string name="menu_settings">Settings</string>
+ <string name="menu_log">Log</string>
+ <string name="menu_info">Help</string>
+ <string name="menu_apps">Apps...</string>
+ <string name="menu_start">Start</string>
+ <string name="menu_stop">Stop</string>
+ <string name="menu_about">About</string>
+ <string name="menu_promo_apps">Get apps…</string>
+ <string name="main_layout_download">Download</string>
+ <string name="main_layout_upload">Upload</string>
+ <string name="button_help">Help</string>
+ <string name="button_close">Close</string>
+ <string name="button_about">About</string>
+ <string name="button_clear_log">Clear Log</string>
+ <string name="menu_verify">Check</string>
+ <string name="menu_exit">Exit</string>
+ <string name="menu_scan">Scan BridgeQR</string>
+ <string name="menu_share_bridge">Share BridgeQR</string>
+ <string name="press_to_start">- long press to start -</string>
+ <string name="pref_trans_proxy_group">Transparent Proxying (Requires Root)</string>
+ <string name="pref_trans_proxy_title">Transparent Proxying</string>
+ <string name="pref_trans_proxy_summary">Automatic Torifying of Apps</string>
+ <string name="pref_transparent_all_title">Tor Everything</string>
+ <string name="pref_transparent_all_summary">Proxy traffic for all apps through Tor</string>
+ <string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+ <string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+ <string name="pref_transparent_port_title">Port List</string>
+ <string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+ <string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+ <string name="pref_has_root">Request Root Access</string>
+ <string name="pref_has_root_summary">Request root access for transparent proxying</string>
+ <string name="status_install_success">Tor binaries successfully installed!</string>
+ <string name="status_install_fail">The Tor binary files were unable to be installed. Please check the log and notify tor-assistants(a)torproject.org</string>
+ <string name="title_error">Application Error</string>
+ <string name="wizard_title">Orbot</string>
+ <string name="wizard_btn_tell_me_more">About Orbot</string>
+ <string name="btn_next">Next</string>
+ <string name="btn_back">Back</string>
+ <string name="btn_finish">Finish</string>
+ <string name="btn_okay">Okay</string>
+ <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_permissions_root">Permission Granted</string>
+ <string name="wizard_permissions_stock">Orbot Permissions</string>
+ <string name="wizard_premissions_msg_root">Excellent! We\'ve detected that you have root permissions enabled for Orbot. We will use this power wisely.</string>
+ <string name="wizard_permissions_msg_stock"> While it is not required, Orbot can become a more powerful tool if your device has root access. Use the button below to grant Orbot superpowers! </string>
+ <string name="wizard_permissions_no_root">If you don\'t have root access or have no idea what we\'re talking about, just be sure to use apps made to work with Orbot.</string>
+ <string name="wizard_permissions_consent">I understand and would like to continue without Superuser</string>
+ <string name="wizard_permission_enable_root">Grant Root for Orbot</string>
+ <string name="wizard_configure">Configure Torification</string>
+ <string name="wizard_configure_msg">Orbot gives you the option to route all application traffic through Tor OR to choose your applications individually.</string>
+ <string name="wizard_configure_all">Proxy All Apps Through Tor</string>
+ <string name="wizard_configure_select_apps">Select Individual Apps for Tor</string>
+ <string name="wizard_tips_tricks">Orbot-enabled Apps</string>
+ <string name="wizard_tips_msg">The apps below were developed to work with Orbot. Click each button to install now, or you can find them later on Google Play, at GuardianProject.info website or via F-Droid.org.</string>
+ <string name="wizard_tips_otrchat">ChatSecure - Secure instant messaging client for Android</string>
+ <string name="wizard_tips_proxy">Proxy Settings - Learn how to configure apps to work with Orbot</string>
+ <string name="wizard_tips_duckgo">DuckDuckGo Search Engine app</string>
+ <string name="wizard_tips_twitter">Set Twitter proxy to host \"localhost\" and port 8118</string>
+ <string name="wizard_tips_story_maker">StoryMaker - Make a story and leave it to tor for security!</string>
+ <string name="twitter_setup_url">https://guardianproject.info/2012/05/02/orbot-your-twitter/</string>
+ <string name="wizard_proxy_help_info">Proxy Settings</string>
+ <string name="wizard_proxy_help_msg">If the Android app you are using can support the use of an HTTP or SOCKS proxy, then you can configure it to connect to Orbot and use Tor.\n\n\n The host settings is 127.0.0.1 or \"localhost\". For HTTP, the port setting is 8118. For SOCKS, the proxy is 9050. You should use SOCKS4A or SOCKS5 if possible.\n \n\n\n You can learn more about proxying on Android via the FAQ at: http://tinyurl.com/proxyandroid\n </string>
+ <string name="wizard_final">Orbot is ready!</string>
+ <string name="wizard_final_msg">Millions of people around the world use Tor for a wide variety of reasons.\n\nJournalists and bloggers, human rights defenders, law enforcement officers, soldiers, corporations, citizens of repressive regimes, and just ordinary citizens… and now you are ready to, as well!</string>
+ <string name="wizard_exit_at_first_screen_toast">Please configure Orbot before you can start using it!</string>
+ <!--END Welcome Wizard strings (DJH)-->
+ <string name="connect_first_time">You\'ve successfully connected to the Tor network - but this does NOT mean your device is secure. You can use the \'Browser\' button to test your connection. \n\nVisit us at https://guardianproject.info/apps/orbot or send an email to help(a)guardianproject.info to learn more.</string>
+ <string name="tor_check">This will open your web browser to https://check.torproject.org in order to see if Orbot is probably configured and you are connected to Tor.</string>
+ <string name="pref_hs_group">Hidden Service Hosting</string>
+ <string name="pref_general_group">General</string>
+ <string name="pref_start_boot_title">Start Orbot on Boot</string>
+ <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+ <!--New Wizard Strings-->
+ <!--Title Screen-->
+ <string name="wizard_title_msg">Orbot brings Tor to Android!\n\nTor helps you defend against content filtering, traffic analysis and network surveillance that threatens privacy, confidential information and personal relationships.\n\nThis wizard will help you configure Orbot and Tor on your device.</string>
+ <!--Warning screen-->
+ <string name="wizard_warning_title">Warning</string>
+ <string name="wizard_warning_msg">Simply installing Orbot will not automatically anonymize your mobile traffic.\n\nYou must properly configure Orbot, your device and other apps to successfully use Tor.</string>
+ <!--Permissions screen-->
+ <string name="wizard_permissions_title">Permissions</string>
+ <string name="wizard_permissions_root_msg1">You can optionally grant Orbot \'Superuser\' access to enable advanced features, such as Transparent Proxying.</string>
+ <string name="wizard_permissions_root_msg2">If you do not want to do this, please make sure to use apps made to work with Orbot</string>
+ <string name="wizard_permissions_no_root_msg">Your device does not appear to be rooted or provide root or \'Superuser\' access.\n\nPlease try the \'Apps\' mode on the main screen instead.</string>
+ <!--TipsAndTricks screen-->
+ <string name="wizard_tips_title">Orbot-Enabled Apps</string>
+ <string name="wizard_tips_gibberbot">ChatSecure: Secure chat app with Off-the-Record Encryption</string>
+ <string name="wizard_tips_orweb">Orfox: Privacy-enhanced browser that works through Tor</string>
+ <string name="wizard_tips_play">Find all Guardian Project apps on Google Play</string>
+ <string name="wizard_tips_fdroid">Find all Guardian Project apps on F-Droid</string>
+ <string name="wizard_tips_fdroid_org">Find all Guardian Project apps on https://f-droid.org</string>
+ <!--Transparent Proxy screen-->
+ <string name="wizard_transproxy_title">Transparent Proxying</string>
+ <string name="wizard_transproxy_msg">This allows your apps to automatically run through the Tor network without any configuration.</string>
+ <string name="wizard_transproxy_hint">(Check this box if you have no idea what we are talking about)</string>
+ <string name="wizard_transproxy_none">None</string>
+ <string name="pref_transparent_tethering_title">Tor Tethering</string>
+ <string name="pref_transparent_tethering_summary">Enable Tor Transparent Proxying for Wifi and USB Tethered Devices (requires restart)</string>
+ <string name="button_grant_superuser">Request Superuser Access</string>
+ <string name="pref_select_apps">Select Apps</string>
+ <string name="pref_select_apps_summary">Choose Apps to Route Through Tor</string>
+ <string name="pref_node_configuration">Node Configuration</string>
+ <string name="pref_node_configuration_summary">These are advanced settings that can reduce your anonymity</string>
+ <string name="pref_entrance_node">Entrance Nodes</string>
+ <string name="pref_entrance_node_summary">Fingerprints, nicks, countries and addresses for the first hop</string>
+ <string name="pref_entrance_node_dialog">Enter Entrance Nodes</string>
+ <string name="pref_allow_background_starts_title">Allow Background Starts</string>
+ <string name="pref_allow_background_starts_summary">Let any app tell Orbot to start Tor and related services</string>
+
+ <string name="button_proxy_all">Proxy All</string>
+ <string name="button_proxy_none">Proxy None</string>
+ <string name="button_invert_selection">Invert Selection</string>
+
+ <string name="pref_proxy_title">Outbound Network Proxy (Optional)</string>
+
+ <string name="pref_proxy_type_title">Outbound Proxy Type</string>
+ <string name="pref_proxy_type_summary">Protocol to use for proxy server: HTTP, HTTPS, Socks4, Socks5</string>
+ <string name="pref_proxy_type_dialog">Enter Proxy Type</string>
+
+ <string name="pref_proxy_host_title">Outbound Proxy Host</string>
+ <string name="pref_proxy_host_summary">Proxy Server hostname</string>
+ <string name="pref_proxy_host_dialog">Enter Proxy Host</string>
+
+ <string name="pref_proxy_port_title">Outbound Proxy Port</string>
+ <string name="pref_proxy_port_summary">Proxy Server port</string>
+ <string name="pref_proxy_port_dialog">Enter Proxy port</string>
+
+ <string name="pref_proxy_username_title">Outbound Proxy Username</string>
+ <string name="pref_proxy_username_summary">Proxy Username (Optional)</string>
+ <string name="pref_proxy_username_dialog">Enter Proxy Username</string>
+
+ <string name="pref_proxy_password_title">Outbound Proxy Password</string>
+ <string name="pref_proxy_password_summary">Proxy Password (Optional)</string>
+ <string name="pref_proxy_password_dialog">Enter Proxy Password</string>
+
+
+ <string name="status">Status</string>
+ <string name="setting_up_full_transparent_proxying_">Setting up full transparent proxying…</string>
+ <string name="setting_up_app_based_transparent_proxying_">Setting up app-based transparent proxying…</string>
+ <string name="transparent_proxying_enabled">Transparent proxying ENABLED</string>
+ <string name="transproxy_enabled_for_tethering_">TransProxy enabled for Tethering!</string>
+ <string name="warning_error_starting_transparent_proxying_">WARNING: error starting transparent proxying!</string>
+ <string name="transproxy_rules_cleared">TransProxy rules cleared</string>
+ <string name="couldn_t_start_tor_process_">Couldn\'t start Tor process: </string>
+ <string name="privoxy_is_running_on_port_">Polipo is running on port: </string>
+ <string name="setting_up_port_based_transparent_proxying_">Setting up port-based transparent proxying…</string>
+ <string name="bridge_error">Bridge Error</string>
+ <string name="bridge_requires_ip">In order to use the bridge feature, you must enter at least one bridge IP address.</string>
+ <string name="send_email_for_bridges">Send an email to bridges(a)torproject.org with the line \"get bridges\" by itself in the body of the mail from a gmail account.</string>
+ <string name="error">Error</string>
+ <string name="your_reachableaddresses_settings_caused_an_exception_">Your ReachableAddresses settings caused an exception!</string>
+ <string name="your_relay_settings_caused_an_exception_">Your relay settings caused an exception!</string>
+ <string name="exit_nodes">Exit Nodes</string>
+ <string name="fingerprints_nicks_countries_and_addresses_for_the_last_hop">Fingerprints, nicks, countries and addresses for the last hop</string>
+ <string name="enter_exit_nodes">Enter Exit Nodes</string>
+ <string name="exclude_nodes">Exclude Nodes</string>
+ <string name="fingerprints_nicks_countries_and_addresses_to_exclude">Fingerprints, nicks, countries and addresses to exclude</string>
+ <string name="enter_exclude_nodes">Enter Exclude Nodes</string>
+ <string name="strict_nodes">Strict Nodes</string>
+ <string name="use_only_these_specified_nodes">Use *only* these specified nodes</string>
+ <string name="bridges">Bridges</string>
+ <string name="use_bridges">Use Bridges</string>
+ <string name="bridges_obfuscated">Obfuscated Bridges</string>
+ <string name="enable_alternate_entrance_nodes_into_the_tor_network">Enable alternate entrances into the Tor Network</string>
+ <string name="enable_if_configured_bridges_are_obfuscated_bridges">Enable if configured bridges are obfuscated bridges</string>
+ <string name="ip_address_and_port_of_bridges">IP address and port of bridges</string>
+ <string name="enter_bridge_addresses">Enter Bridge Addresses</string>
+ <string name="relays">Relays</string>
+ <string name="relaying">Relaying</string>
+ <string name="enable_your_device_to_be_a_non_exit_relay">Enable your device to be a non-exit relay</string>
+ <string name="relay_port">Relay Port</string>
+ <string name="listening_port_for_your_tor_relay">Listening port for your Tor relay</string>
+ <string name="enter_or_port">Enter OR port</string>
+ <string name="relay_nickname">Relay nickname</string>
+ <string name="the_nickname_for_your_tor_relay">The nickname for your Tor relay</string>
+ <string name="enter_a_custom_relay_nickname">Enter a custom relay nickname</string>
+ <string name="reachable_addresses">Reachable Addresses</string>
+ <string name="run_as_a_client_behind_a_firewall_with_restrictive_policies">Run as a client behind a firewall with restrictive policies</string>
+ <string name="reachable_ports">Reachable ports</string>
+ <string name="ports_reachable_behind_a_restrictive_firewall">Ports reachable behind a restrictive firewall</string>
+ <string name="enter_ports">Enter ports</string>
+ <string name="enable_hidden_services">Hidden Service Hosting</string>
+ <string name="run_servers_accessible_via_the_tor_network">allow on-device server to be accessible via the Tor network</string>
+ <string name="enter_localhost_ports_for_hidden_services">enter localhost ports for hidden services</string>
+ <string name="hidden_service_ports">Hidden Service Ports</string>
+ <string name="the_addressable_name_for_your_hidden_service_generated_automatically_">the addressable name for your hidden service (generated automatically)</string>
+ <string name="enable_debug_log_to_output_must_use_adb_or_alogcat_to_view_">enable debug log to output (must use adb or aLogCat to view)</string>
+ <string name="project_home">Project Home(s): </string>
+ <string name="project_urls">https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/…</string>
+ <string name="the_tor_license">The Tor License</string>
+ <string name="https_torproject_org">https://torproject.org</string>
+ <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 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">An app wants to open hidden server port %1$s to the Tor network. This is safe if you trust the app.</string>
+ <string name="found_existing_tor_process">found existing Tor process…</string>
+ <string name="something_bad_happened">Something bad happened. Check the log</string>
+ <string name="hidden_service_on">hidden service on:</string>
+ <string name="unable_to_read_hidden_service_name">unable to read hidden service name</string>
+ <string name="unable_to_start_tor">Unable to start Tor:</string>
+ <string name="unable_to_reset_tor">Reboot your device, unable to reset Tor!</string>
+ <string name="pref_use_sys_iptables_title">Use Default Iptables</string>
+ <string name="pref_use_sys_iptables_summary">use the built-in iptables binary instead of the one bundled with Orbot</string>
+
+ <string name="error_installing_binares">The Tor binaries were not able to be installed or upgraded.</string>
+
+ <string name="pref_use_persistent_notifications">Always keep the icon in toolbar when Orbot is connected</string>
+ <string name="pref_use_persistent_notifications_title">Always-On Notifications</string>
+
+ <string name="pref_use_expanded_notifications">Show expanded notification with Tor exit country and IP</string>
+ <string name="pref_use_expanded_notifications_title">Expanded Notifications</string>
+
+ <string name="notification_using_bridges">Bridges enabled!</string>
+ <string name="default_bridges" />
+ <string name="set_locale_title">Language</string>
+ <string name="set_locale_summary">Choose the locale and language for Orbot</string>
+ <string name="wizard_locale_title">Choose Language</string>
+ <string name="wizard_locale_msg">Leave default or switch the current language</string>
+ <string name="powered_by">powered by Tor</string>
+ <string name="btn_save_settings">Save Settings</string>
+ <string name="no_internet_connection_tor">No internet connection; Tor is on standby…</string>
+ <string name="bandwidth_">Bandwidth:</string>
+ <string name="down">down</string>
+ <string name="up">up</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>
+
+ <string name="menu_verify_browser">Browser</string>
<string name="menu_use_chatsecure">Use ChatSecure</string>
<string name="permission_manage_tor_label">Manage Tor</string>
@@ -262,77 +262,77 @@
<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>
+ <string name="pref_socks_title">Tor SOCKS</string>
<string name="pref_socks_summary">Port that Tor offers its SOCKS proxy on (default: 9050 or 0 to disable)</string>
<string name="pref_socks_dialog">SOCKS Port Config</string>
- <string name="pref_transport_title">Tor TransProxy Port</string>
+ <string name="pref_transport_title">Tor TransProxy Port</string>
<string name="pref_transport_summary">Port that Tor offers its Transparent Proxy on (default: 9040 or 0 to disable)</string>
<string name="pref_transport_dialog">TransProxy Port Config</string>
- <string name="pref_dnsport_title">Tor DNS Port</string>
+ <string name="pref_dnsport_title">Tor DNS Port</string>
<string name="pref_dnsport_summary">Port that Tor offers its DNS on (default: 5400 or 0 to disable)</string>
<string name="pref_dnsport_dialog">DNS Port Config</string>
- <string name="pref_torrc_title">Torrc Custom Config</string>
+ <string name="pref_torrc_title">Torrc Custom Config</string>
<string name="pref_torrc_summary">EXPERTS ONLY: enter direct torrc config lines</string>
<string name="pref_torrc_dialog">Custom Torrc</string>
- <string name="wizard_tips_martus">Mobile Martus - Benetech Human Rights Documentation App</string>
- <string name="your_tor_public_ips_">Your Tor Public IPs:</string>
- <string name="please_disable_this_app_in_android_settings_apps_if_you_are_having_problems_with_orbot_">"Please disable this app in Android->Settings->Apps if you are having problems with Orbot: "</string>
- <string name="app_conflict">App Conflict</string>
+ <string name="wizard_tips_martus">Mobile Martus - Benetech Human Rights Documentation App</string>
+ <string name="your_tor_public_ips_">Your Tor Public IPs:</string>
+ <string name="please_disable_this_app_in_android_settings_apps_if_you_are_having_problems_with_orbot_">"Please disable this app in Android->Settings->Apps if you are having problems with Orbot: "</string>
+ <string name="app_conflict">App Conflict</string>
- <string name="pref_transproxy_refresh_title">Transproxy Auto-Refresh</string>
- <string name="pref_transproxy_refresh_summary">Re-apply Transproxy rules when the network state changes</string>
+ <string name="pref_transproxy_refresh_title">Transproxy Auto-Refresh</string>
+ <string name="pref_transproxy_refresh_summary">Re-apply Transproxy rules when the network state changes</string>
- <string name="pref_transproxy_flush_title">Transproxy FORCE REMOVE</string>
- <string name="pref_transproxy_flush_summary">Tap here to flush all transproxy network rules NOW</string>
- <string name="transparent_proxy_rules_flushed_">Transparent proxy rules flushed!</string>
- <string name="you_do_not_have_root_access_enabled">You do not have ROOT access enabled</string>
- <string name="you_may_need_to_stop_and_start_orbot_for_settings_change_to_be_enabled_">You may need to stop and start Orbot for settings change to be enabled.</string>
+ <string name="pref_transproxy_flush_title">Transproxy FORCE REMOVE</string>
+ <string name="pref_transproxy_flush_summary">Tap here to flush all transproxy network rules NOW</string>
+ <string name="transparent_proxy_rules_flushed_">Transparent proxy rules flushed!</string>
+ <string name="you_do_not_have_root_access_enabled">You do not have ROOT access enabled</string>
+ <string name="you_may_need_to_stop_and_start_orbot_for_settings_change_to_be_enabled_">You may need to stop and start Orbot for settings change to be enabled.</string>
- <string name="menu_vpn">Apps</string>
+ <string name="menu_vpn">Apps</string>
- <string name="kbps">kbps</string>
+ <string name="kbps">kbps</string>
- <string name="mbps">mbps</string>
+ <string name="mbps">mbps</string>
- <string name="kb">KB</string>
+ <string name="kb">KB</string>
- <string name="mb">MB</string>
+ <string name="mb">MB</string>
- <string name="bridges_updated">Bridges Updated</string>
+ <string name="bridges_updated">Bridges Updated</string>
- <string name="restart_orbot_to_use_this_bridge_">Please restart Orbot to enable the changes</string>
+ <string name="restart_orbot_to_use_this_bridge_">Please restart Orbot to enable the changes</string>
- <string name="menu_qr">QR Codes</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_">If your mobile network actively blocks Tor, you can use a Bridge to access the network. SELECT one of the bridge types above to enable bridges.</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_">If your mobile network actively blocks Tor, you can use a Bridge to access the network. SELECT one of the bridge types above to enable bridges.</string>
- <string name="bridge_mode">Bridge Mode</string>
+ <string name="bridge_mode">Bridge Mode</string>
- <string name="get_bridges_email">Email</string>
- <string name="get_bridges_web">Web</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="apps_mode">VPN Mode</string>
+ <string name="apps_mode">VPN Mode</string>
- <string name="you_can_enable_all_apps_on_your_device_to_run_through_the_tor_network_using_the_vpn_feature_of_android_">You can enable all apps on your device to run through the Tor network using the VPN feature of Android.\n\n*WARNING* This is a new, experimental feature and in some cases may not start automatically, or may stop. It should NOT be used for anonymity, and ONLY used for getting through firewalls and filters.</string>
+ <string name="you_can_enable_all_apps_on_your_device_to_run_through_the_tor_network_using_the_vpn_feature_of_android_">You can enable apps to go through Tor using the built-in Orbot VPN.\n\nThis won\'t make you anonymous, but it will help get through firewalls.</string>
- <string name="send_email">Send Email</string>
+ <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 setting and restart.</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 setting and restart.</string>
- <string name="install_orweb">Install Orfox</string>
+ <string name="install_orweb">Install Orfox</string>
- <string name="standard_browser">Standard Browser</string>
+ <string name="standard_browser">Standard Browser</string>
- <string name="note_only_standard_tor_bridges_work_on_intel_x86_atom_devices">NOTE: Only standard Tor bridges work on Intel X86/ATOM devices</string>
+ <string name="note_only_standard_tor_bridges_work_on_intel_x86_atom_devices">NOTE: Only standard Tor bridges work on Intel X86/ATOM devices</string>
<string name="vpn_default_world">Global (Auto)</string>
<string name="hidden_services">Hidden Services</string>
@@ -380,14 +380,15 @@
<string name="enable">Enable</string>
<string name="consider_disable_battery_optimizations">Consider disable battery optimizations</string>
<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>
- <string name="pref_reduced_connection_padding_summary">Closes relay connections sooner and sends less padding packets to reduce data and battery usage</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>
+ <string name="pref_reduced_connection_padding_summary">Closes relay connections sooner and sends less padding packets to reduce data and battery usage</string>
<string name="please_enable_vpn">Please activate the VPN mode to enable apps to use Tor</string>
- <string name="app_shortcuts">Tor-Enabled Apps</string>
+ <string name="app_shortcuts">Tor-Enabled Apps</string>
+ <string name="title_activity_bridge_wizard">BridgeWizardActivity</string>
</resources>
diff --git a/build.gradle b/build.gradle
index 42b17638..ea835f91 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.0.0'
+ classpath 'com.android.tools.build:gradle:3.0.1'
}
}
@@ -14,5 +14,6 @@ allprojects {
jcenter()
maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master" }
google()
+ maven { url 'https://jitpack.io' }
}
}
1
0

[orbot/master] manifest updates: remove superuser, enable chromebooks
by n8fr8@torproject.org 03 Jan '18
by n8fr8@torproject.org 03 Jan '18
03 Jan '18
commit 5c22de2ef35dd2bc62f5574ac5a40d621038dd97
Author: n8fr8 <nathan(a)freitas.net>
Date: Wed Jan 3 12:59:34 2018 -0500
manifest updates: remove superuser, enable chromebooks
---
app/src/fullperm/AndroidManifest.xml | 5 ++++-
app/src/main/AndroidManifest.xml | 6 ++++--
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/app/src/fullperm/AndroidManifest.xml b/app/src/fullperm/AndroidManifest.xml
index a4d678c0..fc7e7ef7 100644
--- a/app/src/fullperm/AndroidManifest.xml
+++ b/app/src/fullperm/AndroidManifest.xml
@@ -11,11 +11,14 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- <uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
+ <!-- Some Chromebooks don't support touch. Although not essential,
+ it's a good idea to explicitly include this declaration. -->
+ <uses-feature android:name="android.hardware.touchscreen"
+ android:required="false" />
<application
android:name=".OrbotApp"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 93b0c389..52ec1421 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,8 +7,10 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- <uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
-
+ <!-- Some Chromebooks don't support touch. Although not essential,
+ it's a good idea to explicitly include this declaration. -->
+ <uses-feature android:name="android.hardware.touchscreen"
+ android:required="false" />
<application
android:name=".OrbotApp"
android:allowBackup="false"
1
0
commit b4aa9d83f0819d2214935d6b22b4f36b2357de65
Author: n8fr8 <nathan(a)freitas.net>
Date: Wed Jan 3 12:57:21 2018 -0500
more improvements for bridge wizard
---
.../org/torproject/android/OrbotMainActivity.java | 52 +---------------------
.../ui/onboarding/BridgeWizardActivity.java | 29 +-----------
2 files changed, 4 insertions(+), 77 deletions(-)
diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index efe34620..baeb1ad6 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -23,6 +23,7 @@ import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.TorServiceUtils;
import org.torproject.android.settings.SettingsPreferences;
import org.torproject.android.ui.AppManagerActivity;
+import org.torproject.android.ui.onboarding.BridgeWizardActivity;
import org.torproject.android.ui.onboarding.OnboardingActivity;
import org.torproject.android.ui.hiddenservices.ClientCookiesActivity;
import org.torproject.android.ui.hiddenservices.HiddenServicesActivity;
@@ -969,56 +970,7 @@ public class OrbotMainActivity extends AppCompatActivity
if (mBtnBridges.isChecked())
{
-
- startActivity(new Intent(this, OnboardingActivity.class));
-
- /**
- LayoutInflater li = LayoutInflater.from(this);
- View view = li.inflate(R.layout.layout_diag, null);
-
- TextView versionName = (TextView)view.findViewById(R.id.diaglog);
- versionName.setText(R.string.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_);
-
- new AlertDialog.Builder(this)
- .setTitle(R.string.bridge_mode)
- .setView(view)
- .setItems(R.array.bridge_options, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- // The 'which' argument contains the index position
- // of the selected item
-
- switch (which)
- {
- case 0: //obfs 4;
- Prefs.setBridgesList("obfs4");
- enableBridges(true);
-
- break;
- case 1: //amazon & azure
- Prefs.setBridgesList("meek");
- enableBridges(true);
-
- break;
- case 2:
- showGetBridgePrompt("obfs4");
-
- break;
-
- }
-
- }
- }).setNegativeButton(R.string.btn_cancel, new Dialog.OnClickListener()
- {
- @Override
- public void onClick(DialogInterface dialog, int which) {
-
- //mBtnBridges.setChecked(false);
-
- }
- })
- .show();
- **/
-
+ startActivity(new Intent(this, BridgeWizardActivity.class));
}
else
{
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 40b7177c..b26ab6ba 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
@@ -161,32 +161,7 @@ public class BridgeWizardActivity extends AppCompatActivity {
*/
private void openBrowser(final String browserLaunchUrl,boolean forceExternal, String pkgId)
{
- boolean isBrowserInstalled = appInstalledOrNot(TorServiceConstants.BROWSER_APP_USERNAME);
-
- if (pkgId != null)
- {
- if (pkgId.equals(TorServiceConstants.BROWSER_APP_USERNAME))
- startIntent(pkgId,Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
- else
- {
- if (!Prefs.useVpn())
- {
- Toast.makeText(this, R.string.please_enable_vpn, Toast.LENGTH_LONG).show();
- }
- else
- {
- startIntent(pkgId,Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));
- }
- }
- }
- else if (isBrowserInstalled)
- {
- startIntent(TorServiceConstants.BROWSER_APP_USERNAME,Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));
- }
- else
- {
- startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl)));
- }
+ startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl)));
}
@@ -265,7 +240,7 @@ public class BridgeWizardActivity extends AppCompatActivity {
String testHost = host[i];
i++; //move to the port
int testPort = Integer.parseInt(host[i]);
- result = isHostReachable(testHost, testPort, 5000);
+ result = isHostReachable(testHost, testPort, 10000);
if (result)
return result;
}
1
0
commit df37b8c4a98455c4ac42fb52a6089997fdaa6c0d
Author: n8fr8 <nathan(a)freitas.net>
Date: Wed Jan 3 12:49:11 2018 -0500
add bridge wizard testing code
---
.../ui/onboarding/BridgeWizardActivity.java | 91 ++++++++++++++++++++++
app/src/main/res/layout/content_bridge_wizard.xml | 34 +++++---
app/src/main/res/values/strings.xml | 5 +-
3 files changed, 117 insertions(+), 13 deletions(-)
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 63a7e072..40b7177c 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
@@ -7,11 +7,13 @@ import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
+import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
@@ -22,8 +24,15 @@ import org.torproject.android.service.OrbotConstants;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.Prefs;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
+
public class BridgeWizardActivity extends AppCompatActivity {
+ private TextView tvStatus;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -32,6 +41,9 @@ public class BridgeWizardActivity extends AppCompatActivity {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ tvStatus = (TextView)findViewById(R.id.lbl_bridge_test_status);
+ tvStatus.setVisibility(View.GONE);
+
setTitle(getString(R.string.bridges));
findViewById(R.id.btnBridgesDirect).setOnClickListener(new View.OnClickListener() {
@@ -39,6 +51,8 @@ public class BridgeWizardActivity extends AppCompatActivity {
public void onClick(View v) {
Prefs.setBridgesList("");
Prefs.putBridgesEnabled(false);
+ testBridgeConnection();
+
}
});
@@ -47,6 +61,8 @@ public class BridgeWizardActivity extends AppCompatActivity {
public void onClick(View v) {
Prefs.setBridgesList("obfs4");
Prefs.putBridgesEnabled(true);
+ testBridgeConnection();
+
}
});
@@ -56,6 +72,8 @@ public class BridgeWizardActivity extends AppCompatActivity {
public void onClick(View v) {
Prefs.setBridgesList("meek");
Prefs.putBridgesEnabled(true);
+ testBridgeConnection();
+
}
});
@@ -213,4 +231,77 @@ public class BridgeWizardActivity extends AppCompatActivity {
}
}
+ private void testBridgeConnection ()
+ {
+ if (TextUtils.isEmpty(Prefs.getBridgesList()) || (!Prefs.bridgesEnabled()))
+ {
+ new HostTester().execute("check.torproject.org","443");
+ }
+ else if (Prefs.getBridgesList().equals("meek"))
+ {
+ new HostTester().execute("meek.azureedge.net","443","d2cly7j4zqgua7.cloudfront.net","443");
+ }
+ else if (Prefs.getBridgesList().equals("obfs4"))
+ {
+ new HostTester().execute("85.17.30.79","443","154.35.22.9","443","192.99.11.54","443");
+ }
+ else
+ {
+ tvStatus.setText("");
+ }
+ }
+
+ private class HostTester extends AsyncTask<String, Void, Boolean> {
+ protected void onPreExecute() {
+ // Pre Code
+ tvStatus.setVisibility(View.VISIBLE);
+ tvStatus.setText(R.string.testing_bridges);
+ }
+ protected Boolean doInBackground(String... host) {
+ // Background Code
+ boolean result = false;
+
+ for (int i = 0; i < host.length; i++) {
+ String testHost = host[i];
+ i++; //move to the port
+ int testPort = Integer.parseInt(host[i]);
+ result = isHostReachable(testHost, testPort, 5000);
+ if (result)
+ return result;
+ }
+
+ return result;
+ }
+ protected void onPostExecute(Boolean result) {
+ // Post Code
+ if (result)
+ {
+ tvStatus.setText(R.string.testing_bridges_success);
+
+ }
+ else
+ {
+ tvStatus.setText(R.string.testing_bridges_fail);
+
+ }
+ }};
+
+ private static boolean isHostReachable(String serverAddress, int serverTCPport, int timeoutMS){
+ boolean connected = false;
+ Socket socket;
+ try {
+ 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();
+ } finally {
+ socket = null;
+ }
+ return connected;
+ }
}
diff --git a/app/src/main/res/layout/content_bridge_wizard.xml b/app/src/main/res/layout/content_bridge_wizard.xml
index fb1473ff..609bcdf4 100644
--- a/app/src/main/res/layout/content_bridge_wizard.xml
+++ b/app/src/main/res/layout/content_bridge_wizard.xml
@@ -26,37 +26,47 @@
<RadioButton
android:id="@+id/btnBridgesDirect"
- android:layout_width="315dp"
- android:layout_height="29dp"
- android:text="Direct connection to Tor"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Connect directly to Tor\n(Best, if you can!)"
android:layout_margin="12dp"
/>
<RadioButton
android:id="@+id/btnBridgesObfs4"
- android:layout_width="315dp"
- android:layout_height="29dp"
- android:text="Connect through community bridges (Obfs4)"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Connect through community bridges\n(Second best option, if it works)"
android:layout_margin="12dp"
/>
<RadioButton
android:id="@+id/btnBridgesMeek"
- android:layout_width="315dp"
- android:layout_height="29dp"
- android:text="Hide traffic through Cloud Services"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Hide traffic through cloud services\n(Slower, but harder to block)"
android:layout_margin="12dp"
/>
<RadioButton
android:id="@+id/btnBridgesNew"
- android:layout_width="315dp"
- android:layout_height="29dp"
- android:text="Request New Bridges..."
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Request New Bridges...\n(If all the other options fail...)"
android:layout_margin="12dp"
/>
</RadioGroup>
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="testing..."
+ android:gravity="center"
+ android:id="@+id/lbl_bridge_test_status"
+ android:layout_margin="12dp"
+ android:textStyle="bold"
+ android:textSize="16sp"
+ />
</LinearLayout>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cb1a4366..72a226a3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -311,7 +311,7 @@
<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_">If your mobile network actively blocks Tor, you can use a Bridge to access the network. SELECT one of the bridge types above to enable bridges.</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_">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">Bridge Mode</string>
@@ -391,4 +391,7 @@
<string name="please_enable_vpn">Please activate the VPN mode to enable apps to use Tor</string>
<string name="app_shortcuts">Tor-Enabled Apps</string>
<string name="title_activity_bridge_wizard">BridgeWizardActivity</string>
+ <string name="testing_bridges">Testing bridge connection to Tor....</string>
+ <string name="testing_bridges_success">Success. Bridge configuration is good!</string>
+ <string name="testing_bridges_fail">FAILED. Try another option</string>
</resources>
1
0