tor-commits
Threads by month
- ----- 2026 -----
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- 1 participants
- 215212 discussions
28 Apr '20
commit bbf5fcb3fb346e9bba712d12bf4934cf925cb2bd
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Wed Aug 7 13:33:30 2019 -0400
update service for VPN mode and startup fixes
---
orbotservice/build.gradle | 4 +-
.../java/org/torproject/android/control/.cvsignore | 1 -
.../java/org/torproject/android/control/README | 4 -
.../android/control/TorControlConnection.java | 12 +-
.../torproject/android/control/examples/.cvsignore | 1 -
.../control/examples/DebuggingEventHandler.java | 44 -------
.../torproject/android/control/examples/Main.java | 146 ---------------------
.../org/torproject/android/service/TorService.java | 16 ++-
.../service/util/CustomTorResourceInstaller.java | 4 +-
.../android/service/vpn/OrbotVpnManager.java | 28 ++--
.../android/service/vpn/TorVpnService.java | 19 ++-
11 files changed, 50 insertions(+), 229 deletions(-)
diff --git a/orbotservice/build.gradle b/orbotservice/build.gradle
index 7e933c7f..f8e96bf5 100644
--- a/orbotservice/build.gradle
+++ b/orbotservice/build.gradle
@@ -13,8 +13,8 @@ android {
defaultConfig {
minSdkVersion 16
targetSdkVersion 28
- versionCode 16060001
- versionName '16.0.6-BETA-1-tor-0.3.5.8-orbotservice'
+ versionCode 16111000
+ versionName '16.1.1-BETA-2-tor-0.4.0.4-rc-orbotservice'
archivesBaseName = "OrbotService-$versionName"
}
diff --git a/orbotservice/src/main/java/org/torproject/android/control/.cvsignore b/orbotservice/src/main/java/org/torproject/android/control/.cvsignore
deleted file mode 100644
index 6b468b62..00000000
--- a/orbotservice/src/main/java/org/torproject/android/control/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.class
diff --git a/orbotservice/src/main/java/org/torproject/android/control/README b/orbotservice/src/main/java/org/torproject/android/control/README
deleted file mode 100644
index b310c7d5..00000000
--- a/orbotservice/src/main/java/org/torproject/android/control/README
+++ /dev/null
@@ -1,4 +0,0 @@
-We broke the version detection stuff in Tor 0.1.2.16 / 0.2.0.4-alpha.
-Somebody should rip out the v0 control protocol stuff from here, and
-it should start working again. -RD
-
diff --git a/orbotservice/src/main/java/org/torproject/android/control/TorControlConnection.java b/orbotservice/src/main/java/org/torproject/android/control/TorControlConnection.java
index 05ed8c3c..4f1fe95b 100644
--- a/orbotservice/src/main/java/org/torproject/android/control/TorControlConnection.java
+++ b/orbotservice/src/main/java/org/torproject/android/control/TorControlConnection.java
@@ -312,12 +312,12 @@ public class TorControlConnection implements TorControlCommands {
handleEvent(lst);
else {
synchronized (waiters) {
- if (!waiters.isEmpty())
- {
- Waiter w;
- w = waiters.removeFirst();
- w.setResponse(lst);
- }
+ if (!waiters.isEmpty())
+ {
+ Waiter w;
+ w = waiters.removeFirst();
+ w.setResponse(lst);
+ }
}
}
diff --git a/orbotservice/src/main/java/org/torproject/android/control/examples/.cvsignore b/orbotservice/src/main/java/org/torproject/android/control/examples/.cvsignore
deleted file mode 100644
index 6b468b62..00000000
--- a/orbotservice/src/main/java/org/torproject/android/control/examples/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.class
diff --git a/orbotservice/src/main/java/org/torproject/android/control/examples/DebuggingEventHandler.java b/orbotservice/src/main/java/org/torproject/android/control/examples/DebuggingEventHandler.java
deleted file mode 100644
index 48c49a28..00000000
--- a/orbotservice/src/main/java/org/torproject/android/control/examples/DebuggingEventHandler.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control.examples;
-
-import java.io.PrintWriter;
-import java.util.Iterator;
-import org.torproject.android.control.EventHandler;
-
-public class DebuggingEventHandler implements EventHandler {
-
- private final PrintWriter out;
-
- public DebuggingEventHandler(PrintWriter p) {
- out = p;
- }
-
- public void circuitStatus(String status, String circID, String path) {
- out.println("Circuit "+circID+" is now "+status+" (path="+path+")");
- }
- public void streamStatus(String status, String streamID, String target) {
- out.println("Stream "+streamID+" is now "+status+" (target="+target+")");
- }
- public void orConnStatus(String status, String orName) {
- out.println("OR connection to "+orName+" is now "+status);
- }
- public void bandwidthUsed(long read, long written) {
- out.println("Bandwidth usage: "+read+" bytes read; "+
- written+" bytes written.");
- }
- public void newDescriptors(java.util.List<String> orList) {
- out.println("New descriptors for routers:");
- for (Iterator<String> i = orList.iterator(); i.hasNext(); )
- out.println(" "+i.next());
- }
- public void message(String type, String msg) {
- out.println("["+type+"] "+msg.trim());
- }
-
- public void unrecognized(String type, String msg) {
- out.println("unrecognized event ["+type+"] "+msg.trim());
- }
-
-}
-
diff --git a/orbotservice/src/main/java/org/torproject/android/control/examples/Main.java b/orbotservice/src/main/java/org/torproject/android/control/examples/Main.java
deleted file mode 100644
index b0e0a3c0..00000000
--- a/orbotservice/src/main/java/org/torproject/android/control/examples/Main.java
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control.examples;
-
-import org.torproject.android.control.*;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Iterator;
-
-public class Main implements TorControlCommands {
-
- public static void main(String args[]) {
- if (args.length < 1) {
- System.err.println("No command given.");
- return;
- }
- try {
- if (args[0].equals("set-config")) {
- setConfig(args);
- } else if (args[0].equals("get-config")) {
- getConfig(args);
- } else if (args[0].equals("get-info")) {
- getInfo(args);
- } else if (args[0].equals("listen")) {
- listenForEvents(args);
- } else if (args[0].equals("signal")) {
- signal(args);
- } else if (args[0].equals("auth")) {
- authDemo(args);
- } else {
- System.err.println("Unrecognized command: "+args[0]);
- }
- } catch (EOFException ex) {
- System.out.println("Control socket closed by Tor.");
- } catch (TorControlError ex) {
- System.err.println("Error from Tor process: "+
- ex+" ["+ex.getErrorMsg()+"]");
- } catch (IOException ex) {
- System.err.println("IO exception when talking to Tor process: "+
- ex);
- ex.printStackTrace(System.err);
- }
- }
-
- private static TorControlConnection getConnection(String[] args,
- boolean daemon) throws IOException {
- Socket s = new Socket("127.0.0.1", 9100);
- TorControlConnection conn = new TorControlConnection(s);
- conn.launchThread(daemon);
- conn.authenticate(new byte[0]);
- return conn;
- }
-
- private static TorControlConnection getConnection(String[] args)
- throws IOException {
- return getConnection(args, true);
- }
-
- public static void setConfig(String[] args) throws IOException {
- // Usage: "set-config [-save] key value key value key value"
- TorControlConnection conn = getConnection(args);
- ArrayList<String> lst = new ArrayList<String>();
- int i = 1;
- boolean save = false;
- if (args[i].equals("-save")) {
- save = true;
- ++i;
- }
- for (; i < args.length; i +=2) {
- lst.add(args[i]+" "+args[i+1]);
- }
- conn.setConf(lst);
- if (save) {
- conn.saveConf();
- }
- }
-
- public static void getConfig(String[] args) throws IOException {
- // Usage: get-config key key key
- TorControlConnection conn = getConnection(args);
- List<ConfigEntry> lst = conn.getConf(Arrays.asList(args).subList(1,args.length));
- for (Iterator<ConfigEntry> i = lst.iterator(); i.hasNext(); ) {
- ConfigEntry e = i.next();
- System.out.println("KEY: "+e.key);
- System.out.println("VAL: "+e.value);
- }
- }
-
- public static void getInfo(String[] args) throws IOException {
- TorControlConnection conn = getConnection(args);
- Map<String,String> m = conn.getInfo(Arrays.asList(args).subList(1,args.length));
- for (Iterator<Map.Entry<String, String>> i = m.entrySet().iterator(); i.hasNext(); ) {
- Map.Entry<String,String> e = i.next();
- System.out.println("KEY: "+e.getKey());
- System.out.println("VAL: "+e.getValue());
- }
- }
-
- public static void listenForEvents(String[] args) throws IOException {
- // Usage: listen [circ|stream|orconn|bw|newdesc|info|notice|warn|error]*
- TorControlConnection conn = getConnection(args, false);
- ArrayList<String> lst = new ArrayList<String>();
- for (int i = 1; i < args.length; ++i) {
- lst.add(args[i]);
- }
- conn.setEventHandler(
- new DebuggingEventHandler(new PrintWriter(System.out, true)));
- conn.setEvents(lst);
- }
-
- public static void signal(String[] args) throws IOException {
- // Usage signal [reload|shutdown|dump|debug|halt]
- TorControlConnection conn = getConnection(args, false);
- // distinguish shutdown signal from other signals
- if ("SHUTDOWN".equalsIgnoreCase(args[1])
- || "HALT".equalsIgnoreCase(args[1])) {
- conn.shutdownTor(args[1].toUpperCase());
- } else {
- conn.signal(args[1].toUpperCase());
- }
- }
-
- public static void authDemo(String[] args) throws IOException {
-
- PasswordDigest pwd = PasswordDigest.generateDigest();
- Socket s = new Socket("127.0.0.1", 9100);
- TorControlConnection conn = new TorControlConnection(s);
- conn.launchThread(true);
- conn.authenticate(new byte[0]);
-
- conn.setConf("HashedControlPassword", pwd.getHashedPassword());
-
- s = new Socket("127.0.0.1", 9100);
- conn = new TorControlConnection(s);
- conn.launchThread(true);
- conn.authenticate(pwd.getSecret());
- }
-
-}
-
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 65f0d179..fc518024 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
@@ -723,9 +723,10 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
extraLines.append("VirtualAddrNetwork 10.192.0.0/10").append('\n');
extraLines.append("AutomapHostsOnResolve 1").append('\n');
- extraLines.append("DisableNetwork 0").append('\n');
extraLines.append("DormantClientTimeout 10 minutes").append('\n');
- extraLines.append("DormantOnFirstStartup 1").append('\n');
+ extraLines.append("DormantOnFirstStartup 0").append('\n');
+
+ extraLines.append("DisableNetwork 0").append('\n');
if (Prefs.useDebugLogging())
{
@@ -1051,7 +1052,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
torConnSocket.setSoTimeout(CONTROL_SOCKET_TIMEOUT);
conn = new TorControlConnection(torConnSocket);
- conn.launchThread(true);//is daemon
+ conn.launchThread(false);//is daemon
break;
}
@@ -1197,7 +1198,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
conn.setEventHandler(mEventHandler);
-
conn.setEvents(Arrays.asList(new String[]{
"ORCONN", "CIRC", "NOTICE", "WARN", "ERR","BW"}));
// conn.setEvents(Arrays.asList(new String[]{
@@ -1509,11 +1509,13 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
mNetworkType = newNetType;
- mConnectivity = newConnectivityState;
- if (mConnectivity)
- newIdentity();
+ if (newConnectivityState != mConnectivity) {
+ mConnectivity = newConnectivityState;
+ if (mConnectivity)
+ newIdentity();
+ }
/**
if (doNetworKSleep && mCurrentStatus != STATUS_OFF)
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
index a2561238..cb4f5c6a 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
@@ -64,6 +64,7 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
}
}
+ //it exists but we can't execute it, so copy it to a new path
if (fileTor.exists()) {
InputStream is = new FileInputStream(fileTor);
streamToFile(is, fileTor, false, true);
@@ -76,7 +77,8 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
//let's try another approach
fileTor = CustomNativeLoader.loadNativeBinary(context,TOR_ASSET_KEY,new File(installFolder, TOR_ASSET_KEY));
- setExecutable(fileTor);
+ if (fileTor != null && fileTor.exists())
+ setExecutable(fileTor);
if (fileTor != null && fileTor.exists() && fileTor.canExecute())
return fileTor;
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
index 65db4659..0af6dcff 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
@@ -95,9 +95,8 @@ public class OrbotVpnManager implements Handler.Callback {
filePdnsd = CustomNativeLoader.loadNativeBinary(service.getApplicationContext(),PDNSD_BIN,new File(service.getFilesDir(),PDNSD_BIN));
- // if that fails, try again using native utils
try {
- killProcess(filePdnsd, "-1"); // this is -HUP
+ killProcess(filePdnsd, "-1");
} catch (Exception e) {
e.printStackTrace();
}
@@ -144,14 +143,17 @@ public class OrbotVpnManager implements Handler.Callback {
{
Log.d(TAG,"starting OrbotVPNService service!");
- int newTorSocks = intent.getIntExtra(TorService.EXTRA_SOCKS_PROXY_PORT,-1);
- int newTorDns = intent.getIntExtra(TorService.EXTRA_DNS_PORT,-1);
+ int torSocks = intent.getIntExtra(TorService.EXTRA_SOCKS_PROXY_PORT,-1);
+ int torDns = intent.getIntExtra(TorService.EXTRA_DNS_PORT,-1);
+
+ //if running, we need to restart
+ if ((torSocks != mTorSocks || torDns != mTorDns)) {
- if ((mTorSocks != newTorSocks || mTorDns != newTorDns)) {
- mTorSocks = newTorSocks;
- mTorDns = newTorDns;
+ mTorSocks = torSocks;
+ mTorDns = torDns;
if (!mIsLollipop) {
+ stopSocksBypass();
startSocksBypass();
}
@@ -444,12 +446,14 @@ public class OrbotVpnManager implements Handler.Callback {
try {
BufferedReader reader = new BufferedReader(new FileReader(filePid));
- pid = reader.readLine().trim();
-
- VpnUtils.killProcess(pid,"-9");
- filePid.delete();
- return true;
+ String line = reader.readLine();
+ if (line != null) {
+ pid = reader.readLine().trim();
+ VpnUtils.killProcess(pid, "-9");
+ filePid.delete();
+ return true;
+ }
} catch (Exception e) {
Log.e(TAG,"error killing DNS Process: " + pid,e);
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/TorVpnService.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/TorVpnService.java
index e70753f6..78c405f4 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/TorVpnService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/TorVpnService.java
@@ -31,9 +31,7 @@ public class TorVpnService extends VpnService {
e.printStackTrace();
}
- LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
- lbm.registerReceiver(mLocalBroadcastReceiver,
- new IntentFilter(TorServiceConstants.LOCAL_ACTION_PORTS));
+
}
/* (non-Javadoc)
@@ -41,6 +39,18 @@ public class TorVpnService extends VpnService {
*/
public int onStartCommand(Intent intent, int flags, int startId) {
+ if (intent.getAction().equals("start"))
+ {
+ LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
+ lbm.registerReceiver(mLocalBroadcastReceiver,
+ new IntentFilter(TorServiceConstants.LOCAL_ACTION_PORTS));
+ }
+ else if (intent.getAction().equals("stop"))
+ {
+ LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
+ lbm.unregisterReceiver(mLocalBroadcastReceiver);
+ }
+
mVpnManager.handleIntent(new Builder(), intent);
return Service.START_STICKY;
@@ -50,8 +60,7 @@ public class TorVpnService extends VpnService {
public void onDestroy() {
super.onDestroy();
- LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
- lbm.unregisterReceiver(mLocalBroadcastReceiver);
+
}
/**
1
0
commit 711ab4fa975fa0a8ced13d822ed6bffd4f651d51
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Wed Sep 4 17:08:09 2019 -0400
update SDK to 29
---
app/build.gradle | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 188b4150..a6b56a43 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,12 +24,12 @@ android {
}
}
- compileSdkVersion 28
+ compileSdkVersion 29
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "org.torproject.android"
minSdkVersion 16
- targetSdkVersion 28
+ targetSdkVersion 29
}
lintOptions {
checkReleaseBuilds false
1
0
28 Apr '20
commit 749ad781d56fd2a122e5c846e5ae05089ae6b811
Merge: 6ae0ca1e 8c4de5e9
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Mon Sep 2 22:47:58 2019 -0400
Merge branch 'master' of github.com:n8fr8/orbot
app/build.gradle | 14 +++++++++-----
fastlane/metadata/android/af/full_description.txt | 4 ++--
fastlane/metadata/android/de-DE/full_description.txt | 8 ++++----
fastlane/metadata/android/es-ES/full_description.txt | 8 ++++----
fastlane/metadata/android/fr-FR/full_description.txt | 8 ++++----
fastlane/metadata/android/pt-BR/full_description.txt | 8 ++++----
fastlane/metadata/android/pt-PT/full_description.txt | 8 ++++----
fastlane/metadata/android/tr-TR/full_description.txt | 8 ++++----
fastlane/metadata/android/vi/full_description.txt | 8 ++++----
9 files changed, 39 insertions(+), 35 deletions(-)
1
0
commit ea7f3f10321a7015818f1a8ebda8419b15c365eb
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Wed Aug 7 13:33:21 2019 -0400
update gitignore
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index a6294876..16e53c25 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@ releases
docs
doc
.directory
+keystore.properties
#built application files
*.apk
1
0
28 Apr '20
commit 673372c3849ed974485138dc960089010cdf497e
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Wed Sep 4 17:06:54 2019 -0400
set base orbotservice notification icon
---
.../src/main/res/drawable-hdpi/ic_stat_tor.png | Bin 606 -> 1136 bytes
.../src/main/res/drawable-mdpi/ic_stat_tor.png | Bin 389 -> 622 bytes
.../src/main/res/drawable-xhdpi/ic_stat_tor.png | Bin 773 -> 1774 bytes
.../src/main/res/drawable-xxhdpi/ic_stat_tor.png | Bin 1131 -> 3241 bytes
.../src/main/res/drawable-xxxhdpi/ic_stat_tor.png | Bin 1564 -> 3188 bytes
5 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/orbotservice/src/main/res/drawable-hdpi/ic_stat_tor.png b/orbotservice/src/main/res/drawable-hdpi/ic_stat_tor.png
index 3091474e..af616fc9 100644
Binary files a/orbotservice/src/main/res/drawable-hdpi/ic_stat_tor.png and b/orbotservice/src/main/res/drawable-hdpi/ic_stat_tor.png differ
diff --git a/orbotservice/src/main/res/drawable-mdpi/ic_stat_tor.png b/orbotservice/src/main/res/drawable-mdpi/ic_stat_tor.png
index a10c654d..a2da32e6 100644
Binary files a/orbotservice/src/main/res/drawable-mdpi/ic_stat_tor.png and b/orbotservice/src/main/res/drawable-mdpi/ic_stat_tor.png differ
diff --git a/orbotservice/src/main/res/drawable-xhdpi/ic_stat_tor.png b/orbotservice/src/main/res/drawable-xhdpi/ic_stat_tor.png
index 25bf4549..3f64c293 100644
Binary files a/orbotservice/src/main/res/drawable-xhdpi/ic_stat_tor.png and b/orbotservice/src/main/res/drawable-xhdpi/ic_stat_tor.png differ
diff --git a/orbotservice/src/main/res/drawable-xxhdpi/ic_stat_tor.png b/orbotservice/src/main/res/drawable-xxhdpi/ic_stat_tor.png
index fb7bce8a..b006186a 100644
Binary files a/orbotservice/src/main/res/drawable-xxhdpi/ic_stat_tor.png and b/orbotservice/src/main/res/drawable-xxhdpi/ic_stat_tor.png differ
diff --git a/orbotservice/src/main/res/drawable-xxxhdpi/ic_stat_tor.png b/orbotservice/src/main/res/drawable-xxxhdpi/ic_stat_tor.png
index 32595644..4127c36b 100644
Binary files a/orbotservice/src/main/res/drawable-xxxhdpi/ic_stat_tor.png and b/orbotservice/src/main/res/drawable-xxxhdpi/ic_stat_tor.png differ
1
0
[orbot/master] metadata: replace all goo.gl links with actual URLs
by n8fr8@torproject.org 28 Apr '20
by n8fr8@torproject.org 28 Apr '20
28 Apr '20
commit 8c4de5e900528366e8de700f21194d76e8753f3e
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Fri Aug 23 15:54:46 2019 +0200
metadata: replace all goo.gl links with actual URLs
https://twitter.com/3albers/status/1105476763923238912
sed -i 's,http://goo.gl,https://goo.gl,g'
sed -i 's,https://goo.gl/2OA1y,https://guardianproject.info/apps/orbot/,g'
sed -i 's,https://goo.gl/6hni4,https://www.transifex.com/otf/orbot/,g'
sed -i 's,https://goo.gl/8U8BQG,https://play.google.com/store/apps/details?id=info.…'
sed -i 's,https://goo.gl/lgh1p,https://play.google.com/store/apps/details?id=com.du…'
sed -i 's,https://goo.gl/O3FfS,https://play.google.com/store/apps/details?id=info.g…'
sed -i 's,https://goo.gl/PH3T91,https://play.google.com/store/apps/details?id=info.…'
sed -i 's,https://goo.gl/s3mLa,https://play.google.com/store/apps/details?id=info.g…'
---
fastlane/metadata/android/af/full_description.txt | 4 ++--
fastlane/metadata/android/de-DE/full_description.txt | 8 ++++----
fastlane/metadata/android/es-ES/full_description.txt | 8 ++++----
fastlane/metadata/android/fr-FR/full_description.txt | 8 ++++----
fastlane/metadata/android/pt-BR/full_description.txt | 8 ++++----
fastlane/metadata/android/pt-PT/full_description.txt | 8 ++++----
fastlane/metadata/android/tr-TR/full_description.txt | 8 ++++----
fastlane/metadata/android/vi/full_description.txt | 8 ++++----
8 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/fastlane/metadata/android/af/full_description.txt b/fastlane/metadata/android/af/full_description.txt
index bdfb3703..7a657701 100644
--- a/fastlane/metadata/android/af/full_description.txt
+++ b/fastlane/metadata/android/af/full_description.txt
@@ -10,8 +10,8 @@ Orbot is the only app that creates a truly private internet connection. As the N
★ ACCEPT NO SUBSTITUTES: Orbot is the safest way to use the Internet on Android. Period. Orbot bounces your encrypted traffic several times through computers around the world, instead of connecting you directly like VPNs and proxies. This process takes a little longer, but the strongest privacy and identity protection available is worth the wait.
★ PRIVATE WEB SURFING: Use with Orfox, the most anonymous way to access any website, even if it’s normally blocked, monitored, or on the hidden web. Get Orfox: https://play.google.com/store/apps/details?id=info.guardianproject.orfox
-★ PRIVATE CHAT MESSAGING: Use ChatSecure with Orbot to chat confidentially with anyone, anywhere for free. Get ChatSecure: https://goo.gl/O3FfS
-★ PRIVACY FOR APPS: Any installed app can use Tor if it has a proxy feature, using the settings found here: https://goo.gl/2OA1y Use Orbot with Twitter, or try private web searching with DuckDuckGo: https://goo.gl/lgh1p
+★ PRIVATE CHAT MESSAGING: Use ChatSecure with Orbot to chat confidentially with anyone, anywhere for free. Get ChatSecure: https://play.google.com/store/apps/details?id=info.guardianproject.otr.app.…
+★ PRIVACY FOR APPS: Any installed app can use Tor if it has a proxy feature, using the settings found here: https://guardianproject.info/apps/orbot/ Use Orbot with Twitter, or try private web searching with DuckDuckGo: https://play.google.com/store/apps/details?id=com.duckduckgo.mobile.android
★ PRIVACY FOR EVERYONE: Tor can help you confidentially research a competitor, get around the Facebook block at school, or circumvent a firewall to watch sports at work.
★ PRIVACY MADE EASY: Check out our fun, interactive walkthrough: https://guardianproject.info/howto/browsefreely
★ IT’S OFFICIAL: This is the official version of the Tor onion routing service for Android.
diff --git a/fastlane/metadata/android/de-DE/full_description.txt b/fastlane/metadata/android/de-DE/full_description.txt
index e0970d3c..3d52a746 100644
--- a/fastlane/metadata/android/de-DE/full_description.txt
+++ b/fastlane/metadata/android/de-DE/full_description.txt
@@ -5,9 +5,9 @@ Orbot ist eine freie Vermittlungsanwendung, welche es anderen Programmen ermögl
Orbot ist die einzige Anwendung, die eine wirklich vertrauliche Internetverbindung herstellt. Wie die New York Times schreibt, »wenn Verbindungen über Tor eintreffen, weiß man nie von wem oder woher sie kommt.« Tor bekam 2012 den Electronic Frontier Foundation (EFF) Pioneer Award.
AKZEPTIEREN SIE KEINE SCHNÜFFLER: Orbot ist der sicherste Weg, um das Internet mit Android zu nutzen. Orbot leitet den verschlüsselten Verkehr mehrmals durch Rechner auf der ganzen Welt, anstatt Sie direkt zu verbinden wie z.B. VPNs und Proxys. Dieser Vorgang dauert ein wenig länger, aber der stärkste Privatsphären- und Identitätsschutz ist das Warten wert.
-PRIVATES INTERNETSURFEN: Nutzen Sie es mit Orweb, der anonymsten Art, eine Webseite zu besuchen, egal ob sie normalerweise geblockt, überwacht, oder versteckt ist. Hier bekommen Sie Orweb: https://goo.gl/s3mLa
-PRIVATE SOFORTNACHRICHTEN: Gibberbot mit Orbot nutzen, um sich vertraulich mit jedem, überall und kostenlos zu unterhalten. Hier bekommen Sie Gibberbot: https://goo.gl/O3FfS
-PRIVATSPHÄRE FÜR ANWENDUNGEN: Jede installierte Anwendung kann Tor benutzen, wenn es eine Vermittlungsfunktion hat und folgende Einstellungen nutzt: https://goo.gl/2OA1y Orbot mit Twitter benutzen, oder die anonyme Internetsuche mit DuckDuckGo: https://goo.gl/lgh1p
+PRIVATES INTERNETSURFEN: Nutzen Sie es mit Orweb, der anonymsten Art, eine Webseite zu besuchen, egal ob sie normalerweise geblockt, überwacht, oder versteckt ist. Hier bekommen Sie Orweb: https://play.google.com/store/apps/details?id=info.guardianproject.browser
+PRIVATE SOFORTNACHRICHTEN: Gibberbot mit Orbot nutzen, um sich vertraulich mit jedem, überall und kostenlos zu unterhalten. Hier bekommen Sie Gibberbot: https://play.google.com/store/apps/details?id=info.guardianproject.otr.app.…
+PRIVATSPHÄRE FÜR ANWENDUNGEN: Jede installierte Anwendung kann Tor benutzen, wenn es eine Vermittlungsfunktion hat und folgende Einstellungen nutzt: https://guardianproject.info/apps/orbot/ Orbot mit Twitter benutzen, oder die anonyme Internetsuche mit DuckDuckGo: https://play.google.com/store/apps/details?id=com.duckduckgo.mobile.android
PRIVATSPHÄRE FÜR JEDEN: Tor kann dabei helfen einen vertraulich über einen Wettbewerber zu recherchieren, die Facebook-Blockade an der Schule oder die Firewall am Arbeitsplatz zu umgehen, um Sport zu gucken.
PRIVATSPHÄRE EINFACH GEMACHT: Unsere witzige und interaktive Führung ansehen: https://guardianproject.info/howto/browsefreely
ES IST OFFIZIELL: Das ist die offizielle Version des Tor-Onion-Routing-Dienstes für Android
@@ -23,4 +23,4 @@ QUELLOFFEN: Orbot ist freie Software. Werfen Sie einen blick auf den Quellcode,
ÜBER TOR: https://TorProject.org
UNS SCHREIBEN: Haben wir eine Funktion vergessen? Haben Sie einen Fehler gefunden? Wir würden uns freuen, von Ihnen zu hören! Senden Sie uns eine E-Mail an: root(a)guardianproject.info
HELFEN SIE UNS ORBOT IN IHR LAND ZU BRINGEN: Wir versuchen Orbot in so viele Sprachen wie möglich zu bringen. Derzeit gibt es folgende Sprachen: Arabic (العربية), Basque (Euskara), Bulgarian (български език), Chinese (中文简体), Czech (Čeština), Danish (Dansk), Dutch (Nederlands), English, Farsi (فارسی), French (Français), French (Français), German (Deutsch), Greek (Ελληνικά), Hebrew (עברית), Hungarian (Magyar Nyelv), Italian (Italiano), Japanese (日本語) Korean (조선말), Latvian (Latviešu), Malaysian (بهاس ملايو ), Polish (Polski), Portuguese (Português), Russian (Русский), Spanish (Español), Swedish (Svensk), and Vietnamese (Tiếng Việt).
-Falls Orbot derzeit nicht in ihrer Sprache verfügbar ist, freuen wir uns, wenn Sie sich unserer Übersetzergruppe anschließen: https://goo.gl/6hni4
+Falls Orbot derzeit nicht in ihrer Sprache verfügbar ist, freuen wir uns, wenn Sie sich unserer Übersetzergruppe anschließen: https://www.transifex.com/otf/orbot/
diff --git a/fastlane/metadata/android/es-ES/full_description.txt b/fastlane/metadata/android/es-ES/full_description.txt
index 845cee80..b07891ff 100644
--- a/fastlane/metadata/android/es-ES/full_description.txt
+++ b/fastlane/metadata/android/es-ES/full_description.txt
@@ -5,9 +5,9 @@ Orbot es una aplicación de proxy libre que da la posibilidad a otras aplicacion
Orbot es la única aplicación que crea una conexión verdaderamente privada a Internet. Como el New York Times escribe, "cuando una comunicación llega desde Tor, nunca puedes saber de dónde o de quién proviene". Tor ganó el Pioneer Award (Premio al Pionero) de 2012 de la Electronic Frontier Foundation (EEF, Fundación para las Fronteras Electrónicas).
NO ACEPTE SUSTITUTOS: Orbot es la manera más segura de usar Internet sobre Android. Punto. Orbot rebota su tráfico cifrado varias veces a través de ordenadores alrededor del mundo, en lugar de conectarlo a usted directamente, como hacen VPNs y proxys. Este proceso es un poco más largo, pero vale la pena la espera para obtener la privacidad y protección de identidad más fuertes disponibles.
-NAVEGACIÓN WEB PRIVADA: Úselo con Orweb, la forma más anónima de acceder a cualquier sitio web, incluso si normalmente está bloqueado, monitorizado, o en la web oculta. Consiga Orweb: http://goo.gl/PH3T91
-MENSAJERIA DE CHAT PRIVADO: Use Gibberbot con Orbot para chatear confidencialmente con cualquiera y en cualquier lugar, gratis. Consiga Gibberbot: http://goo.gl/8U8BQG
-PRIVACIDAD PARA APLICACIONES: Cualquier aplicación instalada puede usar Tor si tiene funciones de proxy, usando las opciones encontradas aquí: https://goo.gl/2OA1y Use Orbot con Twitter, o pruebe la búsqueda web privada con DuckDuckGo: https://goo.gl/lgh1p
+NAVEGACIÓN WEB PRIVADA: Úselo con Orweb, la forma más anónima de acceder a cualquier sitio web, incluso si normalmente está bloqueado, monitorizado, o en la web oculta. Consiga Orweb: https://play.google.com/store/apps/details?id=info.guardianproject.browser
+MENSAJERIA DE CHAT PRIVADO: Use Gibberbot con Orbot para chatear confidencialmente con cualquiera y en cualquier lugar, gratis. Consiga Gibberbot: https://play.google.com/store/apps/details?id=info.guardianproject.otr.app.…
+PRIVACIDAD PARA APLICACIONES: Cualquier aplicación instalada puede usar Tor si tiene funciones de proxy, usando las opciones encontradas aquí: https://guardianproject.info/apps/orbot/ Use Orbot con Twitter, o pruebe la búsqueda web privada con DuckDuckGo: https://play.google.com/store/apps/details?id=com.duckduckgo.mobile.android
PRIVACIDAD PARA TODOS: Tor puede ayudarle a investigar confidencialmente a un competidor, eludir el bloqueo de Facebook en la escuela, o evitar un cortafuegos (`firewall`) para ver deportes en el trabajo.
PRIVACIDAD HECHA FÁCIL: Pruébelo por diversión, paseo interactivo: https://guardianproject.info/howto/browsefreely
@@ -24,4 +24,4 @@ CÓDIGO ABIERTO: Orweb es software libre. Puedes mirar el código fuente o ser p
ACERCA DE TOR: https://TorProject.org
CONTÁCTENOS: ¿Cree que deberíamos añadir una nueva función? ¿Encontró un error? ¡Por favor contáctenos! Envíenos un e-mail a support(a)guardianproject.info
AYÚDENOS A LLEVAR ORBOT A SU PAÍS: Estamos tratando de conseguir Orbot en tantos idiomas como sea posible. En este momento está en: Árabe (العربية), Vasco (Euskara), Búlgaro (български език), Chino (中文简体), Checo (Čeština), Danés (Dansk), Holandés (Nederlands), Inglés (English), Persa (فارسی), Francés (Français), Alemán (Deutsch), Griego (Ελληνικά), Hebreo (עברית), Húngaro (Magyar Nyelv), Italiano, Japonés (日本語) Koreano (조선말), Letón (Latviešu), Malayo (بهاس ملايو ), Polaco (Polski), Portugués (Português), Ruso (Русский), Español, Sueco (Svensk), y Vietnamita (Tiếng Việt).
-Si Orbot no está aún en su idioma, nos encantaría que usted se uniera a nuestro equipo de traducción: https://goo.gl/6hni4
+Si Orbot no está aún en su idioma, nos encantaría que usted se uniera a nuestro equipo de traducción: https://www.transifex.com/otf/orbot/
diff --git a/fastlane/metadata/android/fr-FR/full_description.txt b/fastlane/metadata/android/fr-FR/full_description.txt
index 27ee92da..fddd74e7 100644
--- a/fastlane/metadata/android/fr-FR/full_description.txt
+++ b/fastlane/metadata/android/fr-FR/full_description.txt
@@ -5,9 +5,9 @@ Orbot est un proxy libre et gratuit qui permet à d'autres applications d'accéd
Orbot est la seule application qui crée une connexion à Internet réellement privée. Pour citer le New York Times : « quand une communication arrive par Tor, on ne peut jamais savoir d'où, ou de qui elle vient. ». Tor a gagné le Pioneer Award 2012 de l'Electronic Frontier Foundation (EFF).
REFUSEZ LES PÂLES COPIES : Orbot est la manière la plus sûre d'utiliser Internet sur Android, point à la ligne. Orbot fait rebondir votre trafic chiffré plusieurs fois au travers de différents ordinateurs répartis de par le monde, au lieu de vous connecter directement comme le font les VPN et proxies. Le processus est un peu plus long, mais attendre un peu pour la meilleure protection possible de la vie privée et de votre identité en valent la peine.
-NAVIGATION INTERNET PRIVÉE : Utilisé avec Orweb, Orbot est la manière la plus anonyme d'accéder à n'importe quel site web, même si celui-ci est habituellement bloqué, surveillé ou fait partie du web caché. Téléchargez Orweb : https://goo.gl/s3mLa
-MESSAGERIE INSTANTANÉE PRIVÉE : Utilisez Gibberbot avec Orbot pour discuter en toute confidentialité avec qui que ce soit, où que ce soit, librement et gratuitement. Téléchargez Gibberbot : https://goo.gl/O3FfS
-RENDEZ VOS APPLICATIONS PRIVÉES : Toute application installée peut utiliser Tor si elle est capable d'utiliser un proxy, en utilisant les réglages fournis ici : https://goo.gl/2OA1y Utilisez Orbot avec Twitter ou essayez un moteur de recherche privé comme DuckDuckGo : https://goo.gl/lgh1p
+NAVIGATION INTERNET PRIVÉE : Utilisé avec Orweb, Orbot est la manière la plus anonyme d'accéder à n'importe quel site web, même si celui-ci est habituellement bloqué, surveillé ou fait partie du web caché. Téléchargez Orweb : https://play.google.com/store/apps/details?id=info.guardianproject.browser
+MESSAGERIE INSTANTANÉE PRIVÉE : Utilisez Gibberbot avec Orbot pour discuter en toute confidentialité avec qui que ce soit, où que ce soit, librement et gratuitement. Téléchargez Gibberbot : https://play.google.com/store/apps/details?id=info.guardianproject.otr.app.…
+RENDEZ VOS APPLICATIONS PRIVÉES : Toute application installée peut utiliser Tor si elle est capable d'utiliser un proxy, en utilisant les réglages fournis ici : https://guardianproject.info/apps/orbot/ Utilisez Orbot avec Twitter ou essayez un moteur de recherche privé comme DuckDuckGo : https://play.google.com/store/apps/details?id=com.duckduckgo.mobile.android
LA VIE PRIVÉE POUR TOUS : Tor peut vous aider à vous renseigner confidentiellement sur un concurrent, contourner le blocage de Facebook à l'école ou éviter un parre-feu en entreprise pour regarder les diffusions sportives.
LA VIE PRIVÉE FACILE : Besoin d'aide ? Regardez notre sympathique tutoriel interactif : https://guardianproject.info/howto/browsefreely
OFFICIEL : Orbot est la version officielle du réseau Tor pour Android.
@@ -23,4 +23,4 @@ OPEN-SOURCE : Orbot est un logiciel libre. Jeter un œil à notre code source o
À PROPOS DE TOR: https://TorProject.org
NOUS JOINDRE : Il manque votre fonction préférée ? Vous avez trouvé un bug énervant ? Nous serions ravi d'entendre ce que vous avez à dire ! Envoyez-nous un mail : root(a)guardianproject.info
AIDEZ-NOUS À TRADUIRE ORBOT DANS VOTRE LANGUE : Nous voulons rendre Orbot accessible à autant de pays que possibles.
-Si Orbot n'existe pas encore dans votre langue nous serions ravi de vous voir rejoindre notre équipe de traduction : https://goo.gl/6hni4
+Si Orbot n'existe pas encore dans votre langue nous serions ravi de vous voir rejoindre notre équipe de traduction : https://www.transifex.com/otf/orbot/
diff --git a/fastlane/metadata/android/pt-BR/full_description.txt b/fastlane/metadata/android/pt-BR/full_description.txt
index 81a66df9..7f161446 100644
--- a/fastlane/metadata/android/pt-BR/full_description.txt
+++ b/fastlane/metadata/android/pt-BR/full_description.txt
@@ -5,9 +5,9 @@ Orbot é um aplicativo de proxy livre que permite outras aplicações usarem a i
Orbot é o único aplicativo que cria uma conexão verdadeiramente privada com a internet. Como o New York Times descreveu: "Quando uma comunicação chega a partir da rede Tor, você pode nunca saber de onde ou de quem veio." Tor ganhou em 2012 o prêmio Electronic Frontier Foundation (EFF) Pioneer Award.
NÃO ACEITE NENHUM SUBSTITUTO: Orbot é a forma mais segura de usar a Internet em dispositivos com o sistema operacional Android (Tvs, tablets, celulares e etc ). Anonimato. Orbot permuta seu tráfego criptografado várias vezes entre computadores espalhados geográfica em todo o mundo, em vez de conectá-lo diretamente ao seu destino, assim como fazem as VPNs e proxies. Esse processo demora um pouco mais, mas para ter privacidade e proteção de identidade vale a pena esperar.
-NAVEGAÇÃO WEB PRIVADA: Utilize o Orweb, a maneira mais anônima para acessar qualquer site, mesmo que seja normalmente bloqueado, monitorado, ou um serviço oculto na rede tor. Obtenha o Orweb na seguinte URL: https://goo.gl/s3mLa
-CHAT COM MENSAGENS PRIVADAS: Use o Gibberbot com Orbot para conversar confidencialmente com qualquer um, em qualquer lugar gratuitamente. Obter Gibberbot: https://goo.gl/O3FfS
-PRIVACIDADE PARA APLICATIVOS: Qualquer aplicativo instalado pode usar o Tor se ele tiver a possibilidade de sair por um proxy, usando as configurações encontradas aqui: https://goo.gl/2OA1y Use o Orbot com o Twitter, ou tente pesquisas privadas com DuckDuckGo: https://goo.gl/lgh1p
+NAVEGAÇÃO WEB PRIVADA: Utilize o Orweb, a maneira mais anônima para acessar qualquer site, mesmo que seja normalmente bloqueado, monitorado, ou um serviço oculto na rede tor. Obtenha o Orweb na seguinte URL: https://play.google.com/store/apps/details?id=info.guardianproject.browser
+CHAT COM MENSAGENS PRIVADAS: Use o Gibberbot com Orbot para conversar confidencialmente com qualquer um, em qualquer lugar gratuitamente. Obter Gibberbot: https://play.google.com/store/apps/details?id=info.guardianproject.otr.app.…
+PRIVACIDADE PARA APLICATIVOS: Qualquer aplicativo instalado pode usar o Tor se ele tiver a possibilidade de sair por um proxy, usando as configurações encontradas aqui: https://guardianproject.info/apps/orbot/ Use o Orbot com o Twitter, ou tente pesquisas privadas com DuckDuckGo: https://play.google.com/store/apps/details?id=com.duckduckgo.mobile.android
PRIVACIDADE PARA TODOS: Tor pode ajudá-lo a pesquisar confidencialmente um concorrente, contornar o bloqueio do Facebook na escola, ou contornar um firewall para assistir esportes no trabalho.
UMA FORMA FÁCIL DE TER PRIVACIDADE: Confira a nossa diversão, passo a passo de modo interativo: https://guardianproject.info/howto/browsefreely
É OFICIAL: Esta é uma versão oficial do serviço de roteamento cebola Tor para o Android.
@@ -23,4 +23,4 @@ CÓDIGO ABERTO: Orbot é software livre. Dê uma olhada em nosso código fonte,
SOBRE O PROJETO Tor: https://TorProject.org
MANDE-NOS UMA MENSAGEM: Será que estamos desprezando o seu recurso favorito? Encontrou algum bug chato? Gostaríamos muito de ouvir de você! Envie-nos um e-mail: root(a)guardianproject.info
AJUDE-NO
-Se Orbot ainda não está na sua língua, nós adoraríamos que você participasse da nossa equipe de tradução: https://goo.gl/6hni4
+Se Orbot ainda não está na sua língua, nós adoraríamos que você participasse da nossa equipe de tradução: https://www.transifex.com/otf/orbot/
diff --git a/fastlane/metadata/android/pt-PT/full_description.txt b/fastlane/metadata/android/pt-PT/full_description.txt
index 81a66df9..7f161446 100644
--- a/fastlane/metadata/android/pt-PT/full_description.txt
+++ b/fastlane/metadata/android/pt-PT/full_description.txt
@@ -5,9 +5,9 @@ Orbot é um aplicativo de proxy livre que permite outras aplicações usarem a i
Orbot é o único aplicativo que cria uma conexão verdadeiramente privada com a internet. Como o New York Times descreveu: "Quando uma comunicação chega a partir da rede Tor, você pode nunca saber de onde ou de quem veio." Tor ganhou em 2012 o prêmio Electronic Frontier Foundation (EFF) Pioneer Award.
NÃO ACEITE NENHUM SUBSTITUTO: Orbot é a forma mais segura de usar a Internet em dispositivos com o sistema operacional Android (Tvs, tablets, celulares e etc ). Anonimato. Orbot permuta seu tráfego criptografado várias vezes entre computadores espalhados geográfica em todo o mundo, em vez de conectá-lo diretamente ao seu destino, assim como fazem as VPNs e proxies. Esse processo demora um pouco mais, mas para ter privacidade e proteção de identidade vale a pena esperar.
-NAVEGAÇÃO WEB PRIVADA: Utilize o Orweb, a maneira mais anônima para acessar qualquer site, mesmo que seja normalmente bloqueado, monitorado, ou um serviço oculto na rede tor. Obtenha o Orweb na seguinte URL: https://goo.gl/s3mLa
-CHAT COM MENSAGENS PRIVADAS: Use o Gibberbot com Orbot para conversar confidencialmente com qualquer um, em qualquer lugar gratuitamente. Obter Gibberbot: https://goo.gl/O3FfS
-PRIVACIDADE PARA APLICATIVOS: Qualquer aplicativo instalado pode usar o Tor se ele tiver a possibilidade de sair por um proxy, usando as configurações encontradas aqui: https://goo.gl/2OA1y Use o Orbot com o Twitter, ou tente pesquisas privadas com DuckDuckGo: https://goo.gl/lgh1p
+NAVEGAÇÃO WEB PRIVADA: Utilize o Orweb, a maneira mais anônima para acessar qualquer site, mesmo que seja normalmente bloqueado, monitorado, ou um serviço oculto na rede tor. Obtenha o Orweb na seguinte URL: https://play.google.com/store/apps/details?id=info.guardianproject.browser
+CHAT COM MENSAGENS PRIVADAS: Use o Gibberbot com Orbot para conversar confidencialmente com qualquer um, em qualquer lugar gratuitamente. Obter Gibberbot: https://play.google.com/store/apps/details?id=info.guardianproject.otr.app.…
+PRIVACIDADE PARA APLICATIVOS: Qualquer aplicativo instalado pode usar o Tor se ele tiver a possibilidade de sair por um proxy, usando as configurações encontradas aqui: https://guardianproject.info/apps/orbot/ Use o Orbot com o Twitter, ou tente pesquisas privadas com DuckDuckGo: https://play.google.com/store/apps/details?id=com.duckduckgo.mobile.android
PRIVACIDADE PARA TODOS: Tor pode ajudá-lo a pesquisar confidencialmente um concorrente, contornar o bloqueio do Facebook na escola, ou contornar um firewall para assistir esportes no trabalho.
UMA FORMA FÁCIL DE TER PRIVACIDADE: Confira a nossa diversão, passo a passo de modo interativo: https://guardianproject.info/howto/browsefreely
É OFICIAL: Esta é uma versão oficial do serviço de roteamento cebola Tor para o Android.
@@ -23,4 +23,4 @@ CÓDIGO ABERTO: Orbot é software livre. Dê uma olhada em nosso código fonte,
SOBRE O PROJETO Tor: https://TorProject.org
MANDE-NOS UMA MENSAGEM: Será que estamos desprezando o seu recurso favorito? Encontrou algum bug chato? Gostaríamos muito de ouvir de você! Envie-nos um e-mail: root(a)guardianproject.info
AJUDE-NO
-Se Orbot ainda não está na sua língua, nós adoraríamos que você participasse da nossa equipe de tradução: https://goo.gl/6hni4
+Se Orbot ainda não está na sua língua, nós adoraríamos que você participasse da nossa equipe de tradução: https://www.transifex.com/otf/orbot/
diff --git a/fastlane/metadata/android/tr-TR/full_description.txt b/fastlane/metadata/android/tr-TR/full_description.txt
index c67400e0..d7d29bd7 100644
--- a/fastlane/metadata/android/tr-TR/full_description.txt
+++ b/fastlane/metadata/android/tr-TR/full_description.txt
@@ -5,9 +5,9 @@ Orbot başka uygulamaların interneti daha güvenli olarak kullanmasını sağla
Orbot gerçekten gizli internet bağlantısı kuran tek uygulamadır. New York Times'ın yazdığı gibi “eğer bir mesaj Tor Ağı üzerinden ulaşıyorsa kimden veya nereden geldiğini bilmek mümkün değil”. Tor 2012'de Electronic Frontier Foundation (EFF) Pioneer Award ile ödüllendirilmiştir.
ALTERNATİF KABUL ETMEYİN: Orbot Android sisteminde interneti kullanmanın en güvenli yoludur. Nokta. Orbot doğrudan VPN veya Proxy sunucularına bağlanmaktan farklı olarak şifrelenmiş internet trafiğinizi dünya üzerindeki pek çok başka bilgisayarlardan geçirerek izlenmenizi ve sansürü engeller. Bu yöntem biraz daha zaman alır, ancak en güçlü güvenlik ve gizliliğinizin korunması biraz beklemeye değer.
-İNTERNETTE GİZLİCE DOLAŞIN: Orweb ile birlikte kullanıldığında herhangi bir web sitesi sansürlenmiş, gözetim altında veya gizli internette olsa dahi ulaşmanızı sağlar. Orweb'i şuradan indirebilirsiniz: https://goo.gl/s3mLa
-GİZLİ MESAJLAŞIN: Gibberbot ile birlikte kullanıldığında istediğiniz kişiyle istediğiniz yerde ücretsiz mesajlaşın. Gibberbot'u şuradan indirebilirsiniz: https://goo.gl/O3FfS
-DİĞER UYGULAMAR İÇİN GİZLİLİK: Kullandığınız bütün uygulamalar proxy özellikleri varsa Tor ağını kullanabilir, şuradaki önerileri takip edin: https://goo.gl/2OA1y Orbot'u Twitter uygulaması ile kullanın, ya da gizli web araması yapmak için DuckDuckGo kullanın: https://goo.gl/lgh1p
+İNTERNETTE GİZLİCE DOLAŞIN: Orweb ile birlikte kullanıldığında herhangi bir web sitesi sansürlenmiş, gözetim altında veya gizli internette olsa dahi ulaşmanızı sağlar. Orweb'i şuradan indirebilirsiniz: https://play.google.com/store/apps/details?id=info.guardianproject.browser
+GİZLİ MESAJLAŞIN: Gibberbot ile birlikte kullanıldığında istediğiniz kişiyle istediğiniz yerde ücretsiz mesajlaşın. Gibberbot'u şuradan indirebilirsiniz: https://play.google.com/store/apps/details?id=info.guardianproject.otr.app.…
+DİĞER UYGULAMAR İÇİN GİZLİLİK: Kullandığınız bütün uygulamalar proxy özellikleri varsa Tor ağını kullanabilir, şuradaki önerileri takip edin: https://guardianproject.info/apps/orbot/ Orbot'u Twitter uygulaması ile kullanın, ya da gizli web araması yapmak için DuckDuckGo kullanın: https://play.google.com/store/apps/details?id=com.duckduckgo.mobile.android
HERKES İÇİN GİZLİLİK: Tor rakip şirket hakkında fark edilmeden araştırma yapmanıza, okuldaki Facebook engellemesini aşmanıza, ya da iş yerinizde spor maçlarını izlemek istediğinizde güvenlik duvarını aşmanıza yardımcı olur.
GİZLİLİK HİÇ BU KADAR KOLAY OLMAMIŞTI: Eğlenceli ve interaktif kullanım kılavuzumuza şu adresten ulaşabilirsiniz: https://guardianproject.info/howto/browsefreely
RESMİ UYGULAMA: Orbot Tor onion routing service'in Android'deki resmi uygulamasıdır.
@@ -23,4 +23,4 @@ AÇIK KAYNAK KODU: Orbot ücretsiz bir uygulamadır. Kaynak kodumuza bakabilir,
TOR HAKKINDA: https://TorProject.org
BİZE YAZIN: İstediğiniz bir özellik eksik mi? Uygulamada bir hata mı buldunuz? Lütfen bize bildirin! Sizden geri bildirim almak bizi çok mutlu eder. Bize e-posta gönderebilirsiniz: root(a)guardianproject.info
ORBOT'U SİZİN ÜLKENİZE ULAŞTIRMAMIZA YARDIM EDİN: Orbot uygulamasını mümkün olan tüm dillere çevirmeye çalışıyoruz. Şimdilik bu dillere çevrildi: Arabic (العربية), Basque (Euskara), Bulgarian (български език), Chinese (中文简体), Czech (Čeština), Danish (Dansk), Dutch (Nederlands), English, Farsi (فارسی), French (Français), French (Français), German (Deutsch), Greek (Ελληνικά), Hebrew (עברית), Hungarian (Magyar Nyelv), Italian (Italiano), Japanese (日本語) Korean (조선말), Latvian (Latviešu), Malaysian (بهاس ملايو ), Polish (Polski), Portuguese (Português), Turkish (Türkçe), Russian (Русский), Spanish (Español), Swedish (Svensk), and Vietnamese (Tiếng Việt).
-Eğer Orbot sizin dilinizde yoksa, çeviri ekibimize katılmanız bizi çok mutlu eder: https://goo.gl/6hni4
+Eğer Orbot sizin dilinizde yoksa, çeviri ekibimize katılmanız bizi çok mutlu eder: https://www.transifex.com/otf/orbot/
diff --git a/fastlane/metadata/android/vi/full_description.txt b/fastlane/metadata/android/vi/full_description.txt
index 3a809355..61d63817 100644
--- a/fastlane/metadata/android/vi/full_description.txt
+++ b/fastlane/metadata/android/vi/full_description.txt
@@ -5,9 +5,9 @@ Orbot là một ứng dụng proxy miễn phí nó trao quyền cho các ứng d
Orbot là ứng dụng duy nhất tạo ra một kết nối internet thực sự. Như tờ New York Times viết, "khi một thông tin liên lạc đến từ Tor, bạn có thể không bao giờ biết ở đâu hoặc ai đó từ đâu." Tor giành Electronic Frontier 2012 Foundation (EFF) giải Tiên phong.
CHẤP NHẬN KHÔNG THAY THẾ: Orbot là cách an toàn nhất để sử dụng Internet trên Android. Giai đoạn. Orbot bị trả lại mã hóa giao thông của bạn nhiều lần thông qua các máy tính trên toàn thế giới, thay vì kết nối bạn trực tiếp như VPN và proxy. Quá trình này mất lâu hơn một chút, nhưng sự riêng tư mạnh mẽ và bảo vệ danh tính có sẵn là đáng để chờ đợi.
-CÁ NHÂN LƯỚT WEB: Sử dụng với Orweb, cách vô danh nhất để truy cập bất kỳ trang web, ngay cả khi nó thường bị chặn, theo dõi, hoặc trên các trang web ẩn. Vào Orweb: https://goo.gl/s3mLa
-thông báo chat cá nhân: Sử dụng Gibberbot với Orbot để trò chuyện bí mật với bất cứ ai, bất cứ nơi nào miễn phí. vào Gibberbot: https://goo.gl/O3FfS
-BẢO MẬT cho các ứng dụng: Bất kỳ ứng dụng được cài đặt có thể sử dụng Tor nếu nó có một tính năng proxy, sử dụng các thiết lập tìm thấy ở đây: https://goo.gl/2OA1y Sử dụng Orbot với Twitter, hoặc cố gắng web tin tìm kiếm với DuckDuckGo: https://goo.gl/lgh1p
+CÁ NHÂN LƯỚT WEB: Sử dụng với Orweb, cách vô danh nhất để truy cập bất kỳ trang web, ngay cả khi nó thường bị chặn, theo dõi, hoặc trên các trang web ẩn. Vào Orweb: https://play.google.com/store/apps/details?id=info.guardianproject.browser
+thông báo chat cá nhân: Sử dụng Gibberbot với Orbot để trò chuyện bí mật với bất cứ ai, bất cứ nơi nào miễn phí. vào Gibberbot: https://play.google.com/store/apps/details?id=info.guardianproject.otr.app.…
+BẢO MẬT cho các ứng dụng: Bất kỳ ứng dụng được cài đặt có thể sử dụng Tor nếu nó có một tính năng proxy, sử dụng các thiết lập tìm thấy ở đây: https://guardianproject.info/apps/orbot/ Sử dụng Orbot với Twitter, hoặc cố gắng web tin tìm kiếm với DuckDuckGo: https://play.google.com/store/apps/details?id=com.duckduckgo.mobile.android
BẢO MẬT CHO MỌI NGƯỜI: Tor có thể giúp bạn bảo mật nghiên cứu đối thủ cạnh tranh, có được xung quanh khối Facebook tại trường học, hoặc phá vỡ một bức tường lửa để xem thể thao tại nơi làm việc.
BẢO MẬT MADE EASY: Kiểm tra niềm vui của chúng tôi, thông qua: https://guardianproject.info/howto/browsefreely
Đó là chính thức: Đây là phiên bản chính thức của dịch vụ định tuyến hành Tor cho Android.
@@ -23,4 +23,4 @@ Mở mã nguồn: Orbot là phần mềm miễn phí. Hãy xem mã nguồn của
VỀ DỰ ÁN TOR: https://TorProject.org
THÔNG ĐIỆP : Có phải chúng ta thiếu tính năng yêu thích của bạn? Tìm thấy một lỗi gây phiền nhiễu? Chúng tôi muốn nghe từ bạn! Gửi email cho chúng tôi: root(a)guardianproject.info
Trợ giúp của chúng tôi MANG ORBOT quốc gia của bạn: Chúng tôi đang cố gắng để có được Orbot thành nhiều ngôn ngữ càng tốt. Ngay bây giờ nó trong
-Nếu Orbot không có trong ngôn ngữ của bạn nhưng, chúng tôi rất muốn có bạn tham gia đội ngũ dịch thuật của chúng tôi: https://goo.gl/6hni4
+Nếu Orbot không có trong ngôn ngữ của bạn nhưng, chúng tôi rất muốn có bạn tham gia đội ngũ dịch thuật của chúng tôi: https://www.transifex.com/otf/orbot/
1
0
commit e6ff669828c95a1f645f06e20c88fadfec60ea44
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Wed Sep 4 08:24:02 2019 -0400
improve app-mini onboarding
---
app-mini/build.gradle | 1 +
app-mini/src/debug/AndroidManifest.xml | 4 +-
app-mini/src/main/AndroidManifest.xml | 2 +-
.../torproject/android/mini/MiniMainActivity.java | 356 +++++++++++----------
.../android/mini/ui/AppManagerActivity.java | 50 ++-
.../mini/ui/onboarding/OnboardingActivity.java | 39 +--
.../src/main/res/layout/custom_slide_big_text.xml | 32 +-
app-mini/src/main/res/layout/layout_apps_item.xml | 14 +-
.../src/main/res/layout/layout_apps_listing.xml | 56 ++++
app-mini/src/main/res/layout/layout_main.xml | 19 +-
app-mini/src/main/res/values/colors.xml | 1 +
11 files changed, 309 insertions(+), 265 deletions(-)
diff --git a/app-mini/build.gradle b/app-mini/build.gradle
index 8f071b98..0ffb405d 100644
--- a/app-mini/build.gradle
+++ b/app-mini/build.gradle
@@ -98,6 +98,7 @@ android {
dependencies {
implementation project(':orbotservice')
implementation 'com.github.apl-devs:appintro:v4.2.2'
+ implementation 'com.android.support:palette-v7:28.0.0'
implementation 'com.github.javiersantos:AppUpdater:2.7'
androidTestImplementation "tools.fastlane:screengrab:1.2.0"
}
diff --git a/app-mini/src/debug/AndroidManifest.xml b/app-mini/src/debug/AndroidManifest.xml
index cd6d8b66..b3444211 100644
--- a/app-mini/src/debug/AndroidManifest.xml
+++ b/app-mini/src/debug/AndroidManifest.xml
@@ -77,7 +77,9 @@
<activity
android:name=".ui.AppManagerActivity"
android:label="@string/app_name"
- android:theme="@style/Theme.AppCompat" />
+
+ android:theme="@style/Theme.AppCompat.Light"
+ />
<service
android:name="org.torproject.android.service.TorService"
diff --git a/app-mini/src/main/AndroidManifest.xml b/app-mini/src/main/AndroidManifest.xml
index 94f3f119..18b8a6f2 100644
--- a/app-mini/src/main/AndroidManifest.xml
+++ b/app-mini/src/main/AndroidManifest.xml
@@ -69,7 +69,7 @@
<activity
android:name=".ui.AppManagerActivity"
android:label="@string/app_name"
- android:theme="@style/Theme.AppCompat" />
+ android:theme="@style/Theme.AppCompat.Light" />
<service
android:name="org.torproject.android.service.TorService"
diff --git a/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java b/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
index 4ab9939a..c495a6a5 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
@@ -3,6 +3,7 @@
package org.torproject.android.mini;
+import android.Manifest;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.app.AlertDialog;
@@ -13,8 +14,15 @@ import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.drawable.AdaptiveIconDrawable;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -22,6 +30,9 @@ import android.os.Message;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
+import android.support.v7.graphics.Palette;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SwitchCompat;
import android.support.v7.widget.Toolbar;
import android.text.Html;
@@ -34,6 +45,7 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnLongClickListener;
+import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.widget.Button;
import android.widget.CompoundButton;
@@ -57,6 +69,7 @@ import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.Prefs;
import org.torproject.android.service.util.TorServiceUtils;
+import org.torproject.android.service.vpn.TorifiedApp;
import org.torproject.android.service.vpn.VpnConstants;
import org.torproject.android.service.vpn.VpnPrefs;
@@ -68,6 +81,9 @@ import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.NumberFormat;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Locale;
import java.util.StringTokenizer;
@@ -111,11 +127,9 @@ public class MiniMainActivity extends AppCompatActivity
private static final int MESSAGE_PORTS = 3;
- public final static String INTENT_ACTION_REQUEST_HIDDEN_SERVICE = "org.torproject.android.REQUEST_HS_PORT";
- public final static String INTENT_ACTION_REQUEST_START_TOR = "org.torproject.android.START_TOR";
-
-
+ private RecyclerView rv;
+ ArrayList<String> pkgIds = new ArrayList<>();
/**
* Called when the activity is first created.
@@ -269,23 +283,6 @@ public class MiniMainActivity extends AppCompatActivity
uploadText.setText(formatTotal(0) + " \u2191");
- /**
- mBtnStart =(Button)findViewById(R.id.btnStart);
- mBtnStart.setOnClickListener(new View.OnClickListener()
- {
- @Override
- public void onClick(View v) {
-
- if (torStatus == TorServiceConstants.STATUS_OFF) {
-// lblStatus.setText(getString(R.string.status_starting_up));
- startTor();
- } else {
-// lblStatus.setText(getString(R.string.status_shutting_down));
- stopTor();
- }
- }
- });**/
-
mBtnVPN = (SwitchCompat)findViewById(R.id.btnVPN);
boolean useVPN = Prefs.useVpn();
@@ -304,76 +301,20 @@ public class MiniMainActivity extends AppCompatActivity
});
- }
-
- /**
- private void setCountrySpinner ()
- {
- String currentExit = Prefs.getExitNodes();
- if (currentExit.length() > 4)
- {
- //someone put a complex value in, so let's disable
- ArrayList<String> cList = new ArrayList<String>();
- cList.add(0, currentExit);
- ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, cList);
- spnCountries.setAdapter(adapter);
- spnCountries.setEnabled(false);
- }
- else {
- int selIdx = -1;
-
- ArrayList<String> cList = new ArrayList<String>();
- cList.add(0, getString(R.string.vpn_default_world));
-
- for (int i = 0; i < COUNTRY_CODES.length; i++) {
- Locale locale = new Locale("", COUNTRY_CODES[i]);
- cList.add(locale.getDisplayCountry());
+ rv = findViewById(R.id.rv);
+ LinearLayoutManager llm = new LinearLayoutManager(this);
+ llm.setOrientation(LinearLayoutManager.VERTICAL);
+ rv.setLayoutManager(llm);
- if (currentExit.contains(COUNTRY_CODES[i]))
- selIdx = i + 1;
+ /**
+ findViewById(R.id.btnAdd).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivityForResult(new Intent(MiniMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
}
+ });**/
+ }
- ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, cList);
- spnCountries.setAdapter(adapter);
-
- if (selIdx > 0)
- spnCountries.setSelection(selIdx,true);
-
- spnCountries.setOnItemSelectedListener(new OnItemSelectedListener() {
-
- int mOldPosition = spnCountries.getSelectedItemPosition();
-
- @Override
- public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
- // your code here
-
- if (mOldPosition == position)
- return;
-
- mOldPosition = position; //new position!
-
- String country = null;
-
- if (position == 0)
- country = "";
- else
- country = '{' + COUNTRY_CODES[position - 1] + '}';
-
- Intent torService = new Intent(MiniMainActivity.this, TorService.class);
- torService.setAction(TorServiceConstants.CMD_SET_EXIT);
- torService.putExtra("exit", country);
- startService(torService);
-
- }
-
- @Override
- public void onNothingSelected(AdapterView<?> parentView) {
- // your code here
- }
-
- });
- }
- }**/
@Override
protected void attachBaseContext(Context base) {
@@ -552,7 +493,6 @@ public class MiniMainActivity extends AppCompatActivity
} else
stopVpnService();
- addAppShortcuts();
}
@@ -688,9 +628,14 @@ public class MiniMainActivity extends AppCompatActivity
else if (request == REQUEST_VPN_APPS_SELECT)
{
if (response == RESULT_OK &&
- torStatus == TorServiceConstants.STATUS_ON)
+ torStatus == TorServiceConstants.STATUS_ON) {
refreshVPNApps();
+ String newPkgId = data.getStringExtra("package");
+ //add new entry
+
+ }
+
}
IntentResult scanResult = IntentIntegrator.parseActivityResult(request, response, data);
@@ -794,12 +739,19 @@ public class MiniMainActivity extends AppCompatActivity
else
updateStatus(null, torStatus);
- addAppShortcuts();
-
//now you can handle the intents properly
handleIntents();
- }
+ pkgIds.clear();
+ String tordAppString = mPrefs.getString(PREFS_KEY_TORIFIED, "");
+ StringTokenizer st = new StringTokenizer(tordAppString, "|");
+ while (st.hasMoreTokens())
+ pkgIds.add(st.nextToken());
+
+ RVAdapter adapter = new RVAdapter();
+ rv.setAdapter(adapter);
+
+ }
AlertDialog aDialog = null;
@@ -841,7 +793,7 @@ public class MiniMainActivity extends AppCompatActivity
* Update the layout_main UI based on the status of {@link TorService}.
* {@code torServiceMsg} must never be {@code null}
*/
- private synchronized void updateStatus(String torServiceMsg, String newTorStatus) {
+ private void updateStatus(String torServiceMsg, String newTorStatus) {
if (!TextUtils.isEmpty(torServiceMsg))
{
@@ -998,7 +950,6 @@ public class MiniMainActivity extends AppCompatActivity
if (torStatus == null && newTorStatus != null) //first time status
{
- findViewById(R.id.frameMain).setVisibility(View.VISIBLE);
updateStatus(log, newTorStatus);
}
@@ -1077,91 +1028,162 @@ public class MiniMainActivity extends AppCompatActivity
// lblStatus.setText(getString(R.string.newnym));
}
- private void addAppShortcuts() {
-
- LinearLayout llBoxShortcuts = findViewById(R.id.frameMain);
-
- PackageManager pMgr = getPackageManager();
-
- llBoxShortcuts.removeAllViews();
-
-
- if (Prefs.useVpn()) {
- ArrayList<String> pkgIds = new ArrayList<>();
- String tordAppString = mPrefs.getString(PREFS_KEY_TORIFIED, "");
-
- if (TextUtils.isEmpty(tordAppString)) {
- addFullDeviceVpnView(llBoxShortcuts);
- } else {
- StringTokenizer st = new StringTokenizer(tordAppString, "|");
- while (st.hasMoreTokens() && pkgIds.size() < 4)
- pkgIds.add(st.nextToken());
- int appsAdded = 0;
- for (final String pkgId : pkgIds) {
- try {
- ApplicationInfo aInfo = getPackageManager().getApplicationInfo(pkgId, 0);
- // skip disabled packages
- if (!aInfo.enabled) continue;
- 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);
- }
- });
-
- llBoxShortcuts.addView(iv);
- appsAdded++;
- } catch (Exception e) {
- //package not installed?
+
+ public class RVAdapter extends RecyclerView.Adapter<RVAdapter.AppViewHolder>{
+
+
+ public class AppViewHolder extends RecyclerView.ViewHolder {
+
+ ImageView iv;
+ TextView tv;
+ View parent;
+
+ AppViewHolder(View itemView) {
+ super(itemView);
+ parent = itemView;
+ iv = itemView.findViewById(R.id.itemicon);
+ tv = itemView.findViewById(R.id.itemtext);
+
+ }
+
+ }
+
+ @Override
+ public int getItemCount() {
+
+ return pkgIds.size()+1;
+ }
+
+ @Override
+ public AppViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
+
+ View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_apps_listing, viewGroup, false);
+ final AppViewHolder avh = new AppViewHolder(v);
+
+
+
+ return avh;
+ }
+
+ @Override
+ public void onBindViewHolder(final AppViewHolder avh, int i) {
+
+
+ if (i < getItemCount()-1) {
+ String pkgId = pkgIds.get(i);
+
+ ApplicationInfo aInfo = null;
+ try {
+ aInfo = getPackageManager().getApplicationInfo(pkgId, 0);
+ TorifiedApp app = getApp(aInfo);
+
+ avh.tv.setText(app.getName());
+ avh.iv.setImageDrawable(app.getIcon());
+
+ Palette.generateAsync(drawableToBitmap(app.getIcon()), new Palette.PaletteAsyncListener() {
+ public void onGenerated(Palette palette) {
+ // Do something with colors...
+
+ int color = palette.getVibrantColor(0x000000);
+ avh.parent.setBackgroundColor(color);
+
}
- }
- if (appsAdded == 0) {
+ });
- addFullDeviceVpnView(llBoxShortcuts);
- }
+ avh.iv.setVisibility(View.VISIBLE);
+
+ avh.parent.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+
+ }
+ });
+ } catch (NameNotFoundException e) {
+ e.printStackTrace();
}
}
else
{
- 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(R.string.vpn_disabled);
- llBoxShortcuts.addView(tv);
+ avh.iv.setVisibility(View.INVISIBLE);
+ avh.tv.setText("+ ADD APP");
+ avh.parent.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ showAppPicker();
+
+ }
+ });
}
+ }
+
+ private TorifiedApp getApp (ApplicationInfo aInfo)
+ {
+ TorifiedApp app = new TorifiedApp();
- //now add app edit/add shortcut
- 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(getResources().getDrawable(R.drawable.ic_settings_white_24dp));
- llBoxShortcuts.addView(iv);
- iv.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivityForResult(new Intent(MiniMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
- }
- });
+ try
+ {
+ app.setName(getPackageManager().getApplicationLabel(aInfo).toString());
+ }
+ catch (Exception e)
+ {
+ return null;
+ }
+
+
+ app.setEnabled(aInfo.enabled);
+ app.setUid(aInfo.uid);
+ app.setUsername(getPackageManager().getNameForUid(app.getUid()));
+ app.setProcname(aInfo.processName);
+ app.setPackageName(aInfo.packageName);
+
+ app.setTorified(true);
+
+ try {
+ app.setIcon(getPackageManager().getApplicationIcon(app.getPackageName()));
+
+
+ } catch (NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ return app;
+ }
+
}
- private void addFullDeviceVpnView(LinearLayout llBoxShortcuts) {
- 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(R.string.full_device_vpn);
- llBoxShortcuts.addView(tv);
+ public void showAppPicker ()
+ {
+ startActivityForResult(new Intent(MiniMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
+
+ }
+
+
+
+ public static Bitmap drawableToBitmap (Drawable drawable) {
+ Bitmap bitmap = null;
+
+ if (drawable instanceof BitmapDrawable) {
+ BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
+ if(bitmapDrawable.getBitmap() != null) {
+ return bitmapDrawable.getBitmap();
+ }
+ }
+
+ if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
+ bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
+ } else {
+ bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+ }
+
+ Canvas canvas = new Canvas(bitmap);
+ drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+ drawable.draw(canvas);
+ return bitmap;
}
+
}
diff --git a/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java b/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java
index 5c61db99..30a43779 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java
@@ -56,7 +56,7 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
pMgr = getPackageManager();
this.setContentView(R.layout.layout_apps);
- setTitle(R.string.apps_mode);
+ setTitle("");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
listApps = findViewById(R.id.applistview);
progressBar = findViewById(R.id.progressBar);
@@ -126,18 +126,15 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
if (mApps == null)
mApps = getApps(prefs);
+ /**
Collections.sort(mApps,new Comparator<TorifiedApp>() {
public int compare(TorifiedApp o1, TorifiedApp o2) {
- /* Some apps start with lowercase letters and without the sorting being case
- insensitive they'd appear at the end of the grid of apps, a position where users
- would likely not expect to find them.
- */
if (o1.isTorified() == o2.isTorified())
return o1.getName().compareToIgnoreCase(o2.getName());
if (o1.isTorified()) return -1;
return 1;
}
- });
+ });**/
final LayoutInflater inflater = getLayoutInflater();
@@ -157,7 +154,6 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
// Inflate a new view
entry = new ListEntry();
entry.icon = convertView.findViewById(R.id.itemicon);
- entry.box = convertView.findViewById(R.id.itemcheck);
entry.text = convertView.findViewById(R.id.itemtext);
convertView.setTag(entry);
}
@@ -169,7 +165,7 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
try {
entry.icon.setImageDrawable(pMgr.getApplicationIcon(app.getPackageName()));
entry.icon.setOnClickListener(AppManagerActivity.this);
- entry.icon.setTag(entry.box);
+ entry.icon.setTag(app);
}
catch (Exception e)
{
@@ -179,14 +175,17 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
if (entry.text != null) {
entry.text.setText(app.getName());
- entry.text.setOnClickListener(AppManagerActivity.this);
- entry.text.setTag(entry.box);
}
- if (entry.box != null) {
- entry.box.setOnClickListener(AppManagerActivity.this);
- entry.box.setChecked(app.isTorified());
- entry.box.setTag(app);
+ if (app.isTorified())
+ {
+ convertView.setBackgroundColor(getResources().getColor(R.color.dark_purple));
+
+ }
+ else
+ {
+ convertView.setBackgroundColor(getResources().getColor(android.R.color.transparent));
+
}
return convertView;
@@ -197,7 +196,6 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
}
private static class ListEntry {
- private CheckBox box;
private TextView text;
private ImageView icon;
}
@@ -323,21 +321,19 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
public void onClick(View v) {
- CheckBox cbox = null;
+ final TorifiedApp app = (TorifiedApp) v.getTag();
+ if (app != null) {
+ app.setTorified(!app.isTorified());
- if (v instanceof CheckBox)
- cbox = (CheckBox)v;
- else if (v.getTag() instanceof CheckBox)
- cbox = (CheckBox)v.getTag();
-
- if (cbox != null) {
- final TorifiedApp app = (TorifiedApp) cbox.getTag();
- if (app != null) {
- app.setTorified(!app.isTorified());
- cbox.setChecked(app.isTorified());
- }
+ Intent data = new Intent();
+ data.putExtra("package",app.getPackageName());
+ setResult(RESULT_OK,data);
saveAppSettings();
+
+ finish();
}
+
+
}
}
diff --git a/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java b/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
index 7a2f6d25..1c1b9927 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
@@ -1,18 +1,14 @@
package org.torproject.android.mini.ui.onboarding;
import android.content.Context;
-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.mini.R;
import org.torproject.android.mini.settings.LocaleHelper;
-import org.torproject.android.mini.ui.AppManagerActivity;
-import org.torproject.android.mini.vpn.VPNEnableActivity;
public class OnboardingActivity extends AppIntro {
@@ -23,43 +19,18 @@ public class OnboardingActivity extends AppIntro {
// 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));
+ welcome.setTitle("The power of tor made simple for your life");
+ welcome.setSubTitle("orbot mini");
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));
+ intro2.setTitle("unblock any app with a few taps");
+ intro2.setSubTitle("so easy");
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));
+ setBarColor(getResources().getColor(R.color.dark_green));
setSeparatorColor(getResources().getColor(R.color.panel_background_main));
// Hide Skip/Done button.
diff --git a/app-mini/src/main/res/layout/custom_slide_big_text.xml b/app-mini/src/main/res/layout/custom_slide_big_text.xml
index 100392e6..39f5486a 100644
--- a/app-mini/src/main/res/layout/custom_slide_big_text.xml
+++ b/app-mini/src/main/res/layout/custom_slide_big_text.xml
@@ -2,33 +2,34 @@
<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"
+ android:gravity="center_vertical"
+ android:background="@color/dark_green"
>
<TextView
- android:id="@+id/custom_slide_big_text"
+ android:id="@+id/custom_slide_big_text_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text=""
+ android:text="okay cool"
android:textColor="@color/panel_background_main"
- android:gravity="center"
- android:layout_margin="12dp"
+ android:layout_gravity="start"
+ android:layout_marginLeft="36dp"
android:textStyle="bold"
- android:textSize="28sp"/>
+ android:textSize="16sp"
+ android:visibility="gone"
+ />
<TextView
- android:id="@+id/custom_slide_big_text_sub"
+ android:id="@+id/custom_slide_big_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text=""
+ android:text="This is the big text"
android:textColor="@color/panel_background_main"
- android:gravity="center"
- android:layout_margin="12dp"
+ android:gravity="start"
+ android:layout_margin="36dp"
android:textStyle="bold"
- android:textSize="16sp"
- android:visibility="gone"
- />
+ android:textSize="52sp"/>
+
<Button
android:id="@+id/custom_slide_button"
@@ -37,7 +38,8 @@
android:layout_margin="10dp"
android:background="@drawable/round_drawable"
android:textColor="@color/panel_background_main"
+ android:text="button"
+ android:layout_gravity="end"
android:visibility="gone"
-
/>
</LinearLayout>
\ No newline at end of file
diff --git a/app-mini/src/main/res/layout/layout_apps_item.xml b/app-mini/src/main/res/layout/layout_apps_item.xml
index ef188b3e..b9fac8c4 100644
--- a/app-mini/src/main/res/layout/layout_apps_item.xml
+++ b/app-mini/src/main/res/layout/layout_apps_item.xml
@@ -1,10 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="90dp"
- android:layout_height="90dp"
+ android:layout_width="80dp"
+ android:layout_height="70dp"
android:gravity="center_horizontal"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:layout_marginTop="10dp"
+ >
<ImageView
android:id="@+id/itemicon"
@@ -22,12 +24,8 @@
android:scrollHorizontally="false"
android:text="uid:packages"
android:textAlignment="center"
- android:textSize="12sp" />
+ android:textSize="10sp" />
- <CheckBox
- android:id="@+id/itemcheck"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
</LinearLayout>
diff --git a/app-mini/src/main/res/layout/layout_apps_listing.xml b/app-mini/src/main/res/layout/layout_apps_listing.xml
new file mode 100644
index 00000000..d47126b4
--- /dev/null
+++ b/app-mini/src/main/res/layout/layout_apps_listing.xml
@@ -0,0 +1,56 @@
+<?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="80dp"
+ android:orientation="horizontal"
+ android:layout_marginLeft="20dp"
+ android:layout_marginRight="20dp"
+
+ android:layout_marginTop="20dp"
+
+ android:background="@color/med_gray"
+ android:padding="10dp"
+ android:gravity="center_vertical"
+ >
+
+ <ImageView
+ android:id="@+id/itemicon"
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:src="@mipmap/ic_launcher"
+ />
+
+ <TextView
+ android:id="@+id/itemtext"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:ellipsize="end"
+ android:gravity="center_horizontal|center_vertical"
+ android:maxLines="2"
+ android:minLines="2"
+ android:scrollHorizontally="false"
+ android:text="app name"
+ android:textAlignment="center"
+ android:layout_marginLeft="18dp"
+ android:textSize="18sp"
+ android:textColor="@color/light_gray"
+ android:textStyle="bold"
+ />
+
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:ellipsize="end"
+ android:gravity="center_horizontal|center_vertical|right"
+ android:maxLines="2"
+ android:minLines="2"
+ android:scrollHorizontally="false"
+ android:text=">"
+ android:textAlignment="center"
+ android:layout_marginLeft="18dp"
+ android:textSize="24sp" />
+
+</LinearLayout>
+
diff --git a/app-mini/src/main/res/layout/layout_main.xml b/app-mini/src/main/res/layout/layout_main.xml
index d4422fa2..d8fbfce6 100644
--- a/app-mini/src/main/res/layout/layout_main.xml
+++ b/app-mini/src/main/res/layout/layout_main.xml
@@ -22,19 +22,13 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="250dp"
- android:id="@+id/frameMain"any
- android:visibility="visible"
- android:orientation="vertical"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_margin="3dp"
- android:weightSum="1">
-
- </LinearLayout>
+<android.support.v7.widget.RecyclerView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/rv"
+ android:layout_marginBottom="60dp"
+ />
@@ -46,6 +40,7 @@
android:orientation="vertical"
android:id="@+id/controls"
android:layout_alignParentBottom="true"
+ android:background="@color/light_gray"
>
diff --git a/app-mini/src/main/res/values/colors.xml b/app-mini/src/main/res/values/colors.xml
index dcbbcd60..4a7a1e37 100644
--- a/app-mini/src/main/res/values/colors.xml
+++ b/app-mini/src/main/res/values/colors.xml
@@ -7,5 +7,6 @@
<color name="light_purple">#E6CCFF</color>
<color name="light_green">#E1FFC0</color>
<color name="light_gray">#EFEFEF</color>
+ <color name="med_gray">#BCBCBC</color>
</resources>
1
0
commit 285d77e9e337e2ea5a53421411b5f989a3768fda
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Wed Sep 4 11:45:39 2019 -0400
implement app configuration screens
---
app-mini/build.gradle | 6 +-
app-mini/src/main/AndroidManifest.xml | 92 +++++++++--------
.../torproject/android/mini/MiniMainActivity.java | 64 +++++++-----
.../android/mini/ui/AppConfigActivity.java | 102 +++++++++++++++++++
.../android/mini/ui/AppManagerActivity.java | 21 +---
.../mini/ui/onboarding/OnboardingActivity.java | 8 +-
.../src/main/res/layout/activity_app_config.xml | 26 +++++
.../src/main/res/layout/content_app_config.xml | 111 +++++++++++++++++++++
app-mini/src/main/res/menu/app_config.xml | 32 ++++++
app-mini/src/main/res/values/strings.xml | 15 ++-
app-mini/src/main/res/values/styles.xml | 5 +
11 files changed, 380 insertions(+), 102 deletions(-)
diff --git a/app-mini/build.gradle b/app-mini/build.gradle
index 0ffb405d..ea8a8d22 100644
--- a/app-mini/build.gradle
+++ b/app-mini/build.gradle
@@ -11,7 +11,7 @@ def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
- signingConfigs {
+ signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
@@ -100,11 +100,12 @@ dependencies {
implementation 'com.github.apl-devs:appintro:v4.2.2'
implementation 'com.android.support:palette-v7:28.0.0'
implementation 'com.github.javiersantos:AppUpdater:2.7'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.3'
androidTestImplementation "tools.fastlane:screengrab:1.2.0"
}
// Map for the version code that gives each ABI a value.
-ext.abiCodes = ['armeabi-v7a':'1', 'arm64-v8a':'2', 'mips':'3', 'x86':'4', 'x86_64':'5']
+ext.abiCodes = ['armeabi-v7a': '1', 'arm64-v8a': '2', 'mips': '3', 'x86': '4', 'x86_64': '5']
import com.android.build.OutputFile
@@ -119,4 +120,3 @@ android.applicationVariants.all { variant ->
}
}
}
-
diff --git a/app-mini/src/main/AndroidManifest.xml b/app-mini/src/main/AndroidManifest.xml
index 18b8a6f2..23db19d7 100644
--- a/app-mini/src/main/AndroidManifest.xml
+++ b/app-mini/src/main/AndroidManifest.xml
@@ -4,16 +4,6 @@
package="org.torproject.android.mini"
android:installLocation="internalOnly">
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
- <!-- 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=".OrbotMiniApp"
android:allowBackup="false"
@@ -24,8 +14,10 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/DefaultTheme"
- tools:replace="android:allowBackup"
- >
+ tools:replace="android:allowBackup">
+ <activity
+ android:name=".ui.AppConfigActivity"
+ android:label="@string/title_activity_app_config"></activity>
<activity
android:name=".MiniMainActivity"
android:excludeFromRecents="false"
@@ -43,11 +35,10 @@
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="bridge" />
- </intent-filter>-->
-
- </activity>
+ </intent-filter>
+ -->
- <!-- This is for ensuring the background service still runs when/if the app is swiped away -->
+ </activity> <!-- This is for ensuring the background service still runs when/if the app is swiped away -->
<activity
android:name="org.torproject.android.service.util.DummyActivity"
android:allowTaskReparenting="true"
@@ -71,20 +62,18 @@
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light" />
- <service
- android:name="org.torproject.android.service.TorService"
- android:enabled="true"
- android:permission="android.permission.BIND_VPN_SERVICE"
- android:stopWithTask="false"></service>
- <service
- android:name="org.torproject.android.service.vpn.TorVpnService"
- android:enabled="true"
- android:permission="android.permission.BIND_VPN_SERVICE">
- <intent-filter>
- <action android:name="android.net.VpnService" />
- </intent-filter>
- </service>
+ <activity android:name=".ui.onboarding.OnboardingActivity" />
+ <activity android:name=".ui.onboarding.BridgeWizardActivity" />
+ <provider
+ android:name="android.support.v4.content.FileProvider"
+ android:authorities="org.torproject.android.mini.ui.hiddenservices.storage"
+ android:exported="false"
+ android:grantUriPermissions="true">
+ <meta-data
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/hidden_services_paths" />
+ </provider>
<receiver
android:name="org.torproject.android.service.StartTorReceiver"
android:exported="true">
@@ -92,6 +81,7 @@
<action android:name="org.torproject.android.intent.action.START" />
</intent-filter>
</receiver>
+
<receiver
android:name=".OnBootReceiver"
android:enabled="true"
@@ -113,25 +103,33 @@
</intent-filter>
</receiver>
+ <service
+ android:name="org.torproject.android.service.TorService"
+ android:enabled="true"
+ android:permission="android.permission.BIND_VPN_SERVICE"
+ android:stopWithTask="false" />
+ <service
+ android:name="org.torproject.android.service.vpn.TorVpnService"
+ android:enabled="true"
+ android:permission="android.permission.BIND_VPN_SERVICE">
+ <intent-filter>
+ <action android:name="android.net.VpnService" />
+ </intent-filter>
+ </service>
+ </application>
+ <uses-feature
+ android:name="android.hardware.touchscreen"
+ android:required="false" />
+ <!--
+ Some Chromebooks don't support touch. Although not essential,
+ it's a good idea to explicitly include this declaration.
+ -->
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+ <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
+ <uses-permission android:name="android.permission.INTERNET" />
-
- <provider
- android:name="android.support.v4.content.FileProvider"
- android:authorities="org.torproject.android.mini.ui.hiddenservices.storage"
- android:exported="false"
- android:grantUriPermissions="true">
- <meta-data
- android:name="android.support.FILE_PROVIDER_PATHS"
- android:resource="@xml/hidden_services_paths" />
- </provider>
-
-
-
- <activity android:name=".ui.onboarding.OnboardingActivity"/>
- <activity android:name=".ui.onboarding.BridgeWizardActivity"/>
-
-
- </application>
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
</manifest>
\ No newline at end of file
diff --git a/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java b/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
index c495a6a5..e6f33ba0 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
@@ -60,6 +60,7 @@ import org.json.JSONArray;
import org.torproject.android.mini.settings.Languages;
import org.torproject.android.mini.settings.LocaleHelper;
import org.torproject.android.mini.settings.SettingsPreferences;
+import org.torproject.android.mini.ui.AppConfigActivity;
import org.torproject.android.mini.ui.AppManagerActivity;
import org.torproject.android.mini.ui.Rotate3dAnimation;
import org.torproject.android.mini.ui.onboarding.OnboardingActivity;
@@ -631,7 +632,7 @@ public class MiniMainActivity extends AppCompatActivity
torStatus == TorServiceConstants.STATUS_ON) {
refreshVPNApps();
- String newPkgId = data.getStringExtra("package");
+ String newPkgId = data.getStringExtra(Intent.EXTRA_PACKAGE_NAME);
//add new entry
}
@@ -1070,12 +1071,12 @@ public class MiniMainActivity extends AppCompatActivity
if (i < getItemCount()-1) {
- String pkgId = pkgIds.get(i);
+ final String pkgId = pkgIds.get(i);
ApplicationInfo aInfo = null;
try {
aInfo = getPackageManager().getApplicationInfo(pkgId, 0);
- TorifiedApp app = getApp(aInfo);
+ TorifiedApp app = getApp(MiniMainActivity.this, aInfo);
avh.tv.setText(app.getName());
avh.iv.setImageDrawable(app.getIcon());
@@ -1096,6 +1097,7 @@ public class MiniMainActivity extends AppCompatActivity
@Override
public void onClick(View v) {
+ showAppConfig(pkgId);
}
});
@@ -1118,49 +1120,57 @@ public class MiniMainActivity extends AppCompatActivity
}
}
- private TorifiedApp getApp (ApplicationInfo aInfo)
- {
- TorifiedApp app = new TorifiedApp();
+ }
+ public static TorifiedApp getApp (Context context, ApplicationInfo aInfo)
+ {
+ TorifiedApp app = new TorifiedApp();
+ PackageManager pMgr = context.getPackageManager();
- try
- {
- app.setName(getPackageManager().getApplicationLabel(aInfo).toString());
- }
- catch (Exception e)
- {
- return null;
- }
+ try
+ {
+ app.setName(pMgr.getApplicationLabel(aInfo).toString());
+ }
+ catch (Exception e)
+ {
+ return null;
+ }
- app.setEnabled(aInfo.enabled);
- app.setUid(aInfo.uid);
- app.setUsername(getPackageManager().getNameForUid(app.getUid()));
- app.setProcname(aInfo.processName);
- app.setPackageName(aInfo.packageName);
- app.setTorified(true);
+ app.setEnabled(aInfo.enabled);
+ app.setUid(aInfo.uid);
+ app.setUsername(pMgr.getNameForUid(app.getUid()));
+ app.setProcname(aInfo.processName);
+ app.setPackageName(aInfo.packageName);
- try {
- app.setIcon(getPackageManager().getApplicationIcon(app.getPackageName()));
+ app.setTorified(true);
+ try {
+ app.setIcon(pMgr.getApplicationIcon(app.getPackageName()));
- } catch (NameNotFoundException e) {
- e.printStackTrace();
- }
- return app;
- }
+ } catch (NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ return app;
}
+
public void showAppPicker ()
{
startActivityForResult(new Intent(MiniMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
}
+ public void showAppConfig (String pkgId)
+ {
+ Intent data = new Intent(this, AppConfigActivity.class);
+ data.putExtra(Intent.EXTRA_PACKAGE_NAME,pkgId);
+ startActivity(data);
+ }
public static Bitmap drawableToBitmap (Drawable drawable) {
diff --git a/app-mini/src/main/java/org/torproject/android/mini/ui/AppConfigActivity.java b/app-mini/src/main/java/org/torproject/android/mini/ui/AppConfigActivity.java
new file mode 100644
index 00000000..f4dcc6c6
--- /dev/null
+++ b/app-mini/src/main/java/org/torproject/android/mini/ui/AppConfigActivity.java
@@ -0,0 +1,102 @@
+package org.torproject.android.mini.ui;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.ApplicationInfo;
+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.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+
+import org.torproject.android.mini.MiniMainActivity;
+import org.torproject.android.mini.R;
+import org.torproject.android.service.util.TorServiceUtils;
+import org.torproject.android.service.vpn.TorifiedApp;
+
+import static org.torproject.android.mini.MiniMainActivity.getApp;
+import static org.torproject.android.service.vpn.VpnPrefs.PREFS_KEY_TORIFIED;
+
+public class AppConfigActivity extends AppCompatActivity {
+
+ TorifiedApp mApp;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_app_config);
+ Toolbar toolbar = findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ String pkgId = getIntent().getStringExtra(Intent.EXTRA_PACKAGE_NAME);
+
+ ApplicationInfo aInfo = null;
+ try {
+ aInfo = getPackageManager().getApplicationInfo(pkgId, 0);
+ mApp = getApp(this, aInfo);
+
+ getSupportActionBar().setIcon(mApp.getIcon());
+
+ setTitle(mApp.getName());
+ }
+ catch (Exception e){}
+
+ }
+
+
+ private void removeApp ()
+ {
+ mApp.setTorified(false);
+
+ SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
+
+ String tordAppString = prefs.getString(PREFS_KEY_TORIFIED, "");
+
+ tordAppString = tordAppString.replace(mApp.getPackageName()+"|","");
+
+ SharedPreferences.Editor edit = prefs.edit();
+ edit.putString(PREFS_KEY_TORIFIED, tordAppString);
+ edit.commit();
+
+ Intent response = new Intent();
+ setResult(RESULT_OK,response);
+
+ finish();
+ }
+
+ /*
+ * Create the UI Options Menu (non-Javadoc)
+ * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
+ */
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.app_config, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ }
+ else if (item.getItemId() == R.id.menu_remove_app) {
+ removeApp();
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+
+
+
+}
diff --git a/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java b/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java
index 30a43779..ea66d7f2 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java
@@ -126,15 +126,6 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
if (mApps == null)
mApps = getApps(prefs);
- /**
- Collections.sort(mApps,new Comparator<TorifiedApp>() {
- public int compare(TorifiedApp o1, TorifiedApp o2) {
- if (o1.isTorified() == o2.isTorified())
- return o1.getName().compareToIgnoreCase(o2.getName());
- if (o1.isTorified()) return -1;
- return 1;
- }
- });**/
final LayoutInflater inflater = getLayoutInflater();
@@ -177,16 +168,6 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
entry.text.setText(app.getName());
}
- if (app.isTorified())
- {
- convertView.setBackgroundColor(getResources().getColor(R.color.dark_purple));
-
- }
- else
- {
- convertView.setBackgroundColor(getResources().getColor(android.R.color.transparent));
-
- }
return convertView;
}
@@ -327,7 +308,7 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
Intent data = new Intent();
- data.putExtra("package",app.getPackageName());
+ data.putExtra(Intent.EXTRA_PACKAGE_NAME,app.getPackageName());
setResult(RESULT_OK,data);
saveAppSettings();
diff --git a/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java b/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
index 1c1b9927..f6531a7d 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
@@ -19,13 +19,13 @@ public class OnboardingActivity extends AppIntro {
// 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("The power of tor made simple for your life");
- welcome.setSubTitle("orbot mini");
+ welcome.setTitle(getString(R.string.mini_onboarding_1));
+ welcome.setSubTitle(getString(R.string.app_name));
addSlide(welcome);
CustomSlideBigText intro2 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
- intro2.setTitle("unblock any app with a few taps");
- intro2.setSubTitle("so easy");
+ intro2.setTitle(getString(R.string.mini_onboarding_2));
+ intro2.setSubTitle(getString(R.string.mini_onboarding_2_title));
addSlide(intro2);
// OPTIONAL METHODS
diff --git a/app-mini/src/main/res/layout/activity_app_config.xml b/app-mini/src/main/res/layout/activity_app_config.xml
new file mode 100644
index 00000000..accb290b
--- /dev/null
+++ b/app-mini/src/main/res/layout/activity_app_config.xml
@@ -0,0 +1,26 @@
+<?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=".ui.AppConfigActivity">
+
+ <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="@color/dark_green"
+ app:popupTheme="@style/DefaultTheme.PopupOverlay" />
+
+ </android.support.design.widget.AppBarLayout>
+
+
+ <include layout="@layout/content_app_config" />
+
+</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app-mini/src/main/res/layout/content_app_config.xml b/app-mini/src/main/res/layout/content_app_config.xml
new file mode 100644
index 00000000..8e7b727e
--- /dev/null
+++ b/app-mini/src/main/res/layout/content_app_config.xml
@@ -0,0 +1,111 @@
+<?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=".ui.AppConfigActivity"
+ android:orientation="vertical"
+ tools:showIn="@layout/activity_app_config"
+ android:padding="20dp"
+ >
+
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/title_boost_your_privacy"
+ android:textStyle="bold"
+ android:textSize="20dp"
+ android:id="@+id/privacy_title"
+ />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/send_your_app_traffic_over_tor"
+ android:textSize="16dp"
+ android:layout_below="@+id/privacy_title"
+ />
+
+ <Switch
+ android:layout_alignParentEnd="true"
+ android:layout_alignParentRight="true"
+
+ android:layout_toRightOf="@+id/privacy_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="20dp"
+ >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/turn_off_apps"
+ android:textStyle="bold"
+ android:textSize="20dp"
+ android:id="@+id/off_apps_title"
+ />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/stop_apps_from_using_the_network"
+ android:textSize="16dp"
+ android:layout_below="@+id/off_apps_title"
+ />
+ <Switch
+ android:layout_alignParentEnd="true"
+ android:layout_alignParentRight="true"
+
+ android:layout_toRightOf="@+id/off_apps_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="20dp"
+ >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/wifi_only"
+ android:textStyle="bold"
+ android:textSize="20dp"
+ android:id="@+id/wifi_title"
+ />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/keep_your_apps_from_using_mobile_data"
+ android:textSize="16dp"
+ android:layout_below="@+id/wifi_title"
+ />
+
+ <Switch
+ android:layout_alignParentEnd="true"
+ android:layout_alignParentRight="true"
+
+ android:layout_toRightOf="@+id/wifi_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+
+ </RelativeLayout>
+
+
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app-mini/src/main/res/menu/app_config.xml b/app-mini/src/main/res/menu/app_config.xml
new file mode 100644
index 00000000..d0a75569
--- /dev/null
+++ b/app-mini/src/main/res/menu/app_config.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2008 Esmertec AG.
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:yourapp="http://schemas.android.com/apk/res-auto"
+ >
+
+
+ <item android:id="@+id/menu_remove_app"
+ android:title="@string/remove"
+ yourapp:showAsAction="never"
+ />
+
+
+
+</menu>
diff --git a/app-mini/src/main/res/values/strings.xml b/app-mini/src/main/res/values/strings.xml
index 42bc1674..c7ae3edd 100644
--- a/app-mini/src/main/res/values/strings.xml
+++ b/app-mini/src/main/res/values/strings.xml
@@ -124,7 +124,7 @@
<string name="newnym">You\'ve switched to a new Tor identity!</string>
<string name="pref_open_proxy_on_all_interfaces_title">Open Proxy on All Interfaces</string>
- <string name="pref_open_proxy_on_all_interfaces_summary">Allow Wi-Fi peers, tethered devices and anyone else who can connect to your IP, to access Tor</string>
+ <string name="pref_open_proxy_on_all_interfaces_summary">Allow Wi-Fi peers, tethered devices and anyone else who can connect to your IP, to access Tor</string>
<string name="no_network_connectivity_putting_tor_to_sleep_">No network connectivity. Putting Tor to sleep…</string>
<string name="network_connectivity_is_good_waking_tor_up_">Network connectivity is good. Waking Tor up…</string>
@@ -255,4 +255,17 @@
<string name="app_services">App services</string>
<string name="default_socks_http">SOCKS: - HTTP: -</string>
<string name="refresh_apps">Refresh Apps</string>
+
+ <!-- Orbot Mini Strings -->
+ <string name="mini_onboarding_1">The power of tor made mini to fit your life</string>
+ <string name="mini_onboarding_2">unblock any app with a few taps</string>
+ <string name="mini_onboarding_2_title">so easy!</string>
+ <string name="title_activity_app_config">AppConfigActivity</string>
+ <string name="title_boost_your_privacy">Boost Your Privacy</string>
+ <string name="send_your_app_traffic_over_tor">Send app data over Tor</string>
+ <string name="turn_off_apps">Turn off app data</string>
+ <string name="stop_apps_from_using_the_network">Stop app from using the network</string>
+ <string name="wifi_only">Wifi only</string>
+ <string name="keep_your_apps_from_using_mobile_data">Only allow connection over wifi</string>
+ <string name="remove">Remove</string>
</resources>
diff --git a/app-mini/src/main/res/values/styles.xml b/app-mini/src/main/res/values/styles.xml
index b2e69a53..428c097c 100644
--- a/app-mini/src/main/res/values/styles.xml
+++ b/app-mini/src/main/res/values/styles.xml
@@ -4,4 +4,9 @@
<style name="DefaultTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="DefaultTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
+
+ <style name="DefaultTheme.NoActionBar">
+ <item name="windowActionBar">false</item>
+ <item name="windowNoTitle">true</item>
+ </style>
</resources>
1
0
[orbot/master] add new functionality to allow for checking connections against app blacklist
by n8fr8@torproject.org 28 Apr '20
by n8fr8@torproject.org 28 Apr '20
28 Apr '20
commit a266c65d772cffb3d42a803ebb1231bdbea467aa
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Thu Sep 5 12:01:36 2019 -0400
add new functionality to allow for checking connections against app blacklist
---
.../java/org/torproject/android/service/vpn/Tun2Socks.java | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java
index e7f0591b..a0ded90e 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/Tun2Socks.java
@@ -134,6 +134,16 @@ public class Tun2Socks
private native static void terminateTun2Socks();
+ public static boolean checkIsAllowed (int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
+ {
+ return isAllowedQ(protocol, sourceAddr, sourcePort, destAddr, destPort);
+ }
+ else
+ return isAllowed(protocol, sourceAddr, sourcePort, destAddr, destPort);
+ }
+
public static boolean isAllowed (int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
TCPSourceApp.AppDescriptor aInfo = TCPSourceApp.getApplicationInfo(mContext, sourceAddr, sourcePort, destAddr, destPort);
1
0
[orbot/master] update changelog for 16.1.1-BETA-2-tor-0.4.0.4-rc-orbotservice
by n8fr8@torproject.org 28 Apr '20
by n8fr8@torproject.org 28 Apr '20
28 Apr '20
commit d98e5fbf4c9a6423373e1a85288f0de6ca036610
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Thu Sep 5 11:45:30 2019 -0400
update changelog for 16.1.1-BETA-2-tor-0.4.0.4-rc-orbotservice
---
CHANGELOG | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/CHANGELOG b/CHANGELOG
index 3bc14676..bdfebb3a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,36 @@
NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
+/** 16.1.1-BETA-2-tor-0.4.0.4-rc / Wed Aug 7 13:33:30 2019 -0400 / bbf5fcb3fb346e9bba712d12bf4934cf925cb2bd **/
+
+bbf5fcb3 (tag: 16.1.1-BETA-2-tor-0.4.0.4-rc) update service for VPN mode and startup fixes
+ea7f3f10 update gitignore
+cf19750d update fastlane and gradle to support split apks builds, CI and more
+cd80e850 (tag: 16.1.1-BETA-1-tor-0.4.0.4-rc) update to 16.1.1-BETA-1-tor-0.4.0.4-rc
+bfb5eab1 Merge branch 'master' of github.com:n8fr8/orbot
+d02fb582 instead of DisableNetwork, let's try NEWNYM when the network returns - we've had issues of losing connectivity setting DisableNetwork, so we are trying a new approach - now using DormantClientTimeout settings, to have client go to sleep when it is not used - when we receive a network connectivity notification, we call NEWNYM to refresh circuits
+d5e570a5 Merge pull request #247 from bitmold/low_dpi_launcher_icon
+767a8596 Launcher icon was out of date on low resolution devices.
+7d11984b (tag: 16.1.0-RC-3-tor-0.4.0.4-rc) update to 16.1.0-RC-3-tor-0.4.0.4-rc
+e146f703 make sure to kill existing pdnsd, and set the new ports properly
+c6bfc491 send ports on start request, even if tor is already running
+d3963516 keep apps around as static variable, enable user to refresh
+be5b8d88 make sure we don't have any orphaned pdnsd processes
+72ff7dd2 Merge branch 'ejo4041-mergeDebugJniLibFolders_issue'
+07e34239 (ejo4041-mergeDebugJniLibFolders_issue) Merge branch 'mergeDebugJniLibFolders_issue' of https://github.com/ejo4041/orbot into ejo4041-mergeDebugJniLibFolders_issue
+be6feea8 Merge branch 'master' of github.com:n8fr8/orbot
+d2005234 update gradle
+929cb6b6 pdnsd must be named with a .so extension to be included
+c0afffeb don't build plain armeabi anymore
+4321ae49 update native libs
+c7e9b01f Merge pull request #244 from bitmold/vpn_app_ui_glitch
+fc0b035a After following the BUILD file, could not build the apk because of a issue mentioned in #217: Execution failed for task :orbotservice:mergeDebugJniLibFolders. This change fixes that.
+7b832f19 Fixed VPN App UI for apps that were disabled or uninstalled
+d084aa6c (tag: 16.1.0-RC-2-tor-0.4.0.4-rc) update to 16.1.0-RC-2-tor-0.4.0.4-rc
+79afbe05 bind pdnsd to virtual address within VPN
+9ff0b00c fix VPN code to support dynamic DNS port for Tor
+f1e572e8 use standard string keys for intent values
+361ea26d ports can be set to "auto" so allow letters as well
+
/** 16.1.0-RC-1-tor-0.4.0.4-rc / 8 July 2019 / e60c07ed0ffc8360db4dfcdeffd8578945b38d0b **/
Thanks to @bitmold @sisbell @pgerber and @eighthave for all the great work, not to mention the core Tor dev team making all things mobile better every day!
1
0