[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] r24756: {projects} Release 1.0.5 (in projects/android/tags: . 0.2.2.14-alpha-orbot-1.0.4/Orbot 0.2.2.25-alpha-orbot-1.0.5 0.2.2.25-alpha-orbot-1.0.5/Orbot 0.2.2.25-alpha-orbot-1.0.5/Orbot/libs 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/drawable 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh 0 .2.2.25-alpha-orbot-1.0.5/Orbot/res/xml 0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android 0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service 0.2.2.25-alpha-orbot-1.0.5-RC1 0.2.2.25-alpha-orbot-1.0.5-RC1/res/drawable 0.2.2.25-alpha-orbot-1.0.5-RC1/res/layout 0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ar 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ca 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-de 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-es 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-fa 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-mk 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nb 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nl 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pl 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pt 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ru 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-sv 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-zh 0.2.2.25-alpha-orbot-1.0.5-RC1/src/org /torproject/android 0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service)



Author: n8fr8
Date: 2011-05-16 03:55:02 +0000 (Mon, 16 May 2011)
New Revision: 24756

Added:
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/drawable/torerror.png
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/libs/jtorctrl.jar
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/drawable/torerror.png
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java
Removed:
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java
Modified:
   projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/AndroidManifest.xml
   projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/build.xml
   projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/default.properties
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.debug
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.production
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/layout/layout_about.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ar/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ca/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-de/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-es/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-fa/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-mk/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nb/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pt/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ru/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-sv/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-zh/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values/strings.xml
Log:
Release 1.0.5


Modified: projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/AndroidManifest.xml
===================================================================
--- projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/AndroidManifest.xml	2011-05-16 03:52:10 UTC (rev 24755)
+++ projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/AndroidManifest.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android";
-      package="org.torproject.android" android:versionName="1.0.4" android:versionCode="11">
+      package="org.torproject.android" android:versionName="1.0.4.1" android:versionCode="12">
        
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

Modified: projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/build.xml
===================================================================
--- projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/build.xml	2011-05-16 03:52:10 UTC (rev 24755)
+++ projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/build.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,66 +1,78 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project name="Orbot">
+<project name="Orbot" default="help">
 
-    <!-- The local.properties file is created and updated by the 'android' tool.
-         It contains the path to the SDK. It should *NOT* be checked in in Version
-         Control Systems. -->
+<!-- The local.properties file is created and updated by the 'android'
+     tool.
+     It contains the path to the SDK. It should *NOT* be checked into
+     Version Control Systems. -->
     <property file="local.properties" />
 
     <!-- The build.properties file can be created by you and is never touched
-         by the 'android' tool. This is the place to change some of the default property values
-         used by the Ant rules.
+         by the 'android' tool. This is the place to change some of the
+         default property values used by the Ant rules.
          Here are some properties you may want to change/update:
 
-         application.package
-             the name of your application package as defined in the manifest. Used by the
-             'uninstall' rule.
          source.dir
-             the name of the source directory. Default is 'src'.
+             The name of the source directory. Default is 'src'.
          out.dir
-             the name of the output directory. Default is 'bin'.
+             The name of the output directory. Default is 'bin'.
 
-         Properties related to the SDK location or the project target should be updated
-          using the 'android' tool with the 'update' action.
+         Properties related to the SDK location or the project target should
+         be updated using the 'android' tool with the 'update' action.
 
-         This file is an integral part of the build system for your application and
-         should be checked in in Version Control Systems.
+         This file is an integral part of the build system for your
+         application and should be checked into Version Control Systems.
 
          -->
     <property file="build.properties" />
 
-    <!-- The default.properties file is created and updated by the 'android' tool, as well
-         as ADT.
-         This file is an integral part of the build system for your application and
-         should be checked in in Version Control Systems. -->
+    <!-- The default.properties file is created and updated by the 'android'
+         tool, as well as ADT.
+         This file is an integral part of the build system for your
+         application and should be checked into Version Control Systems. -->
     <property file="default.properties" />
 
-    <!-- Custom Android task to deal with the project target, and import the proper rules.
-         This requires ant 1.6.0 or above. -->
-    <path id="android.antlibs">
-        <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
-    </path>
 
-    <taskdef name="setup"
-        classname="com.android.ant.SetupTask"
-        classpathref="android.antlibs" />
+    <!-- Required pre-setup import -->
+    <import file="${sdk.dir}/tools/ant/pre_setup.xml" />
 
-    <!-- Execute the Android Setup task that will setup some properties specific to the target,
-         and import the build rules files.
 
+<!-- extension targets. Uncomment the ones where you want to do custom work
+     in between standard targets -->
+<!--
+    <target name="-pre-build">
+    </target>
+    <target name="-pre-compile">
+    </target>
+
+    [This is typically used for code obfuscation.
+     Compiled code location: ${out.classes.absolute.dir}
+     If this is not done in place, override ${out.dex.input.absolute.dir}]
+    <target name="-post-compile">
+    </target>
+-->
+
+    <!-- Execute the Android Setup task that will setup some properties
+         specific to the target, and import the build rules files.
+
          The rules file is imported from
-            <SDK>/platforms/<target_platform>/templates/android_rules.xml
+            <SDK>/tools/ant/
+         Depending on the project type it can be either:
+         - main_rules.xml
+         - lib_rules.xml
+         - test_rules.xml
 
-         To customize some build steps for your project:
-         - copy the content of the main node <project> from android_rules.xml
-         - paste it in this build.xml below the <setup /> task.
-         - disable the import by changing the setup task below to <setup import="false" />
-
-         This will ensure that the properties are setup correctly but that your customized
-         build steps are used.
+         To customize existing targets, there are two options:
+         - Customize only one target:
+             - copy/paste the target into this file, *before* the
+               <setup> task.
+             - customize it to your needs.
+         - Customize the whole script.
+             - copy/paste the content of the rules files (minus the top node)
+               into this file, *after* the <setup> task
+             - disable the import of the rules by changing the setup task
+               below to <setup import="false" />.
+             - customize to your needs.
     -->
     <setup />
 

Modified: projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/default.properties
===================================================================
--- projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/default.properties	2011-05-16 03:52:10 UTC (rev 24755)
+++ projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/default.properties	2011-05-16 03:55:02 UTC (rev 24756)
@@ -10,5 +10,5 @@
 # Indicates whether an apk should be generated for each density.
 split.density=false
 # Project target.
-target=android-4
+target=android-7
 apk-configurations=

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS
===================================================================
--- projects/android/trunk/Orbot/AUTHORS	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,33 +0,0 @@
-This file lists the authors for Orbot, a free software project to provide
-anonymity on the Internet on Android smartphones.
-
-For more information about Orbot, see https://guardianproject.info/apps/orbot
-
-If you got this file as a part of a larger bundle, there are probably
-other authors that you should be aware of.
-
-Main Authors:
--------------
-Nathan Freitas <nathan@xxxxxxxxxxx> developed the primary Android
-application and managed the porting of Tor to Android.
-
-Jake Appelbaum <jacob@xxxxxxxxxxxxx> regularly gave Nathan a swift kick
-in the rear to get this done. He has also provided extensive guidance
-and review. Most recently he has been promoted to Chief Application
-Resource Editor.
-
-Derek Halliday <derek@xxxxxxxxxxxxxxxxxxxx> has designed and implemented
-new user interface components and layouts since the 1.0.4 release. 
-
-Contributors:
--------------
-Nick Mathewson <nickm@xxxxxxxxxxxxx> wrote some of the patch code to
-support the compiling of Tor and Libevent on Android, and generally
-provided guidance in the entire effort.
-
-Adam Langley made the original valiant effort to port Tor to Android.
-
-Sathyanarayanan <gsathya.ceg@xxxxxxxxx> created a patch for the wizard
-which updated the icon and link for the secure chat app info to point
-to Gibberbot, and hopefully will continue to contribute useful patches.
- 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS (from rev 24719, projects/android/trunk/Orbot/AUTHORS)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,38 @@
+This file lists the authors for Orbot, a free software project to provide
+anonymity on the Internet on Android smartphones.
+
+For more information about Orbot, see https://guardianproject.info/apps/orbot
+
+If you got this file as a part of a larger bundle, there are probably
+other authors that you should be aware of.
+
+Main Authors:
+-------------
+Nathan Freitas <nathan@xxxxxxxxxxx> developed the primary Android
+application and managed the porting of Tor to Android.
+
+Jake Appelbaum <jacob@xxxxxxxxxxxxx> regularly gave Nathan a swift kick
+in the rear to get this done. He has also provided extensive guidance
+and review. Most recently he has been promoted to Chief Application
+Resource Editor.
+
+Derek Halliday <derek@xxxxxxxxxxxxxxxxxxxx> has designed and implemented
+new user interface components and layouts since the 1.0.4 release. 
+
+Contributors:
+-------------
+Nick Mathewson <nickm@xxxxxxxxxxxxx> wrote some of the patch code to
+support the compiling of Tor and Libevent on Android, and generally
+provided guidance in the entire effort.
+
+Adam Langley made the original valiant effort to port Tor to Android.
+
+Sathyanarayanan <gsathya.ceg@xxxxxxxxx> created a patch for the wizard
+which updated the icon and link for the secure chat app info to point
+to Gibberbot, and hopefully will continue to contribute useful patches.
+
+__sporkbomb <manuel@xxxxxxxxxxxxxxxx> implemented an updated set of logic
+in TorTransProxy for handling the "transproxy all" mode of operation. Before
+certain system processes were leaking traffic, and this was also detected
+by his excellent auditing.
+ 

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android";
-      package="org.torproject.android" android:versionName="0.2.2.22-orbot-alpha-1.0.5.20110503a-dev" android:versionCode="11">
-       
-       <uses-permission android:name="android.permission.INTERNET" />
- 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- 
-    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
-      
-        <activity android:name=".Orbot"
-                  android:theme="@android:style/Theme.NoTitleBar">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-          </intent-filter>
-            <intent-filter>
-            <action android:name="android.intent.action.VIEW" />
-            <category android:name="android.intent.category.DEFAULT" />
-            <category android:name="android.intent.category.BROWSABLE" />
-        </intent-filter>
-        
-         <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
-            </intent-filter>
-             <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.START_TOR" />
-            </intent-filter>
-        </activity>
-      
-        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
-        <activity android:name=".AppManager"  android:label="@string/app_name"/>
-        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
-      
-    	<service android:enabled="true"
-    		android:name=".service.TorService" 
-    		android:exported="false"
-    		>
-	            <intent-filter>
-	                <action android:name="org.torproject.android.service.ITorService" />
-	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
-            </intent-filter>
-    	</service>
-    	
-    	
-    	<receiver android:name=".OnBootReceiver">
-			<intent-filter>
-			<action
-			android:name="android.intent.action.BOOT_COMPLETED" />
-			<category android:name="android.intent.category.HOME" />
-			</intent-filter>
-		</receiver>
-    	
-    </application>
-    
-    <uses-sdk android:minSdkVersion="4"/>
-
-
-
-</manifest> 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml (from rev 24737, projects/android/trunk/Orbot/AndroidManifest.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android";
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5" android:versionCode="11">
+       
+       <uses-permission android:name="android.permission.INTERNET" />
+ 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+ 
+    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
+      
+        <activity android:name=".Orbot"
+                  android:theme="@android:style/Theme.NoTitleBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+          </intent-filter>
+            <intent-filter>
+            <action android:name="android.intent.action.VIEW" />
+            <category android:name="android.intent.category.DEFAULT" />
+            <category android:name="android.intent.category.BROWSABLE" />
+        </intent-filter>
+        
+         <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
+            </intent-filter>
+             <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.START_TOR" />
+            </intent-filter>
+        </activity>
+      
+        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
+        <activity android:name=".AppManager"  android:label="@string/app_name"/>
+        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
+      
+    	<service android:enabled="true"
+    		android:name=".service.TorService" 
+    		android:exported="false"
+    		>
+	            <intent-filter>
+	                <action android:name="org.torproject.android.service.ITorService" />
+	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
+            </intent-filter>
+    	</service>
+    	
+    	
+    	<receiver android:name=".OnBootReceiver">
+			<intent-filter>
+				<action	android:name="android.intent.action.BOOT_COMPLETED" />
+				<category android:name="android.intent.category.HOME" />
+			</intent-filter>
+		</receiver>
+    	
+    </application>
+    
+    <uses-sdk android:minSdkVersion="4"/>
+
+
+
+</manifest> 

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml.debug	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android";
-      package="org.torproject.android" android:versionName="1.0.4" android:versionCode="10">
-       
-       <uses-permission android:name="android.permission.INTERNET" />
-
- 
-    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
-      
-        <activity android:name=".Orbot"
-                  android:theme="@android:style/Theme.NoTitleBar">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-          </intent-filter>
-            <intent-filter>
-            <action android:name="android.intent.action.VIEW" />
-            <category android:name="android.intent.category.DEFAULT" />
-            <category android:name="android.intent.category.BROWSABLE" />
-        </intent-filter>
-        
-         <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
-            </intent-filter>
-             <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.START_TOR" />
-            </intent-filter>
-        </activity>
-      
-        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
-        <activity android:name=".AppManager"  android:label="@string/app_name"/>
-        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
-      
-    	<!-- <service android:name=".service.TorService" android:process=":remote"> -->
-    	<service android:name=".service.TorService">
-	            <intent-filter>
-	                <action android:name="org.torproject.android.service.ITorService" />
-	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
-            </intent-filter>
-    	</service>
-    	
-    	<!--
-    	<receiver android:name=".OnBootReceiver">
-			<intent-filter>
-			<action
-			android:name="android.intent.action.BOOT_COMPLETED" />
-			<category android:name="android.intent.category.HOME" />
-			</intent-filter>
-		</receiver>
-    	-->
-    	
-    </application>
-    
-    <uses-sdk android:minSdkVersion="4"/>
-
-
-
-</manifest> 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug (from rev 24752, projects/android/trunk/Orbot/AndroidManifest.xml.debug)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android";
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5.20110503a-dev-debug" android:versionCode="10">
+       
+       <uses-permission android:name="android.permission.INTERNET" />
+
+ 
+    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
+      
+        <activity android:name=".Orbot"
+                  android:theme="@android:style/Theme.NoTitleBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+          </intent-filter>
+            <intent-filter>
+            <action android:name="android.intent.action.VIEW" />
+            <category android:name="android.intent.category.DEFAULT" />
+            <category android:name="android.intent.category.BROWSABLE" />
+        </intent-filter>
+        
+         <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
+            </intent-filter>
+             <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.START_TOR" />
+            </intent-filter>
+        </activity>
+      
+        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
+        <activity android:name=".AppManager"  android:label="@string/app_name"/>
+        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
+      
+    	<!-- <service android:name=".service.TorService" android:process=":remote"> -->
+    	<service android:name=".service.TorService">
+	            <intent-filter>
+	                <action android:name="org.torproject.android.service.ITorService" />
+	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
+            </intent-filter>
+    	</service>
+    	
+    	<!--
+    	<receiver android:name=".OnBootReceiver">
+			<intent-filter>
+			<action
+			android:name="android.intent.action.BOOT_COMPLETED" />
+			<category android:name="android.intent.category.HOME" />
+			</intent-filter>
+		</receiver>
+    	-->
+    	
+    </application>
+    
+    <uses-sdk android:minSdkVersion="4"/>
+
+
+
+</manifest> 

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml.production	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android";
-      package="org.torproject.android" android:versionName="0.2.2.22-orbot-alpha-1.0.5.20110416a-dev" android:versionCode="11">
-       
-       <uses-permission android:name="android.permission.INTERNET" />
- 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- 
-    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
-      
-        <activity android:name=".Orbot"
-                  android:theme="@android:style/Theme.NoTitleBar">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-          </intent-filter>
-            <intent-filter>
-            <action android:name="android.intent.action.VIEW" />
-            <category android:name="android.intent.category.DEFAULT" />
-            <category android:name="android.intent.category.BROWSABLE" />
-        </intent-filter>
-        
-         <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
-            </intent-filter>
-             <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.START_TOR" />
-            </intent-filter>
-        </activity>
-      
-        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
-        <activity android:name=".AppManager"  android:label="@string/app_name"/>
-        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
-      
-    	<service android:enabled="true"
-    		android:name=".service.TorService" 
-    		android:exported="false"
-    		>
-	            <intent-filter>
-	                <action android:name="org.torproject.android.service.ITorService" />
-	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
-            </intent-filter>
-    	</service>
-    	
-    	
-    	<receiver android:name=".OnBootReceiver">
-			<intent-filter>
-			<action
-			android:name="android.intent.action.BOOT_COMPLETED" />
-			<category android:name="android.intent.category.HOME" />
-			</intent-filter>
-		</receiver>
-    	
-    </application>
-    
-    <uses-sdk android:minSdkVersion="4"/>
-
-
-
-</manifest> 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production (from rev 24752, projects/android/trunk/Orbot/AndroidManifest.xml.production)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android";
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5.20110503a" android:versionCode="11">
+       
+       <uses-permission android:name="android.permission.INTERNET" />
+ 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+ 
+    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
+      
+        <activity android:name=".Orbot"
+                  android:theme="@android:style/Theme.NoTitleBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+          </intent-filter>
+            <intent-filter>
+            <action android:name="android.intent.action.VIEW" />
+            <category android:name="android.intent.category.DEFAULT" />
+            <category android:name="android.intent.category.BROWSABLE" />
+        </intent-filter>
+        
+         <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
+            </intent-filter>
+             <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.START_TOR" />
+            </intent-filter>
+        </activity>
+      
+        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
+        <activity android:name=".AppManager"  android:label="@string/app_name"/>
+        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
+      
+    	<service android:enabled="true"
+    		android:name=".service.TorService" 
+    		android:exported="false"
+    		>
+	            <intent-filter>
+	                <action android:name="org.torproject.android.service.ITorService" />
+	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
+            </intent-filter>
+    	</service>
+    	
+    	
+    	<receiver android:name=".OnBootReceiver">
+			<intent-filter>
+			<action
+			android:name="android.intent.action.BOOT_COMPLETED" />
+			<category android:name="android.intent.category.HOME" />
+			</intent-filter>
+		</receiver>
+    	
+    </application>
+    
+    <uses-sdk android:minSdkVersion="4"/>
+
+
+
+</manifest> 

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD
===================================================================
--- projects/android/trunk/Orbot/BUILD	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,163 +0,0 @@
-
-// 2011/04/15 this document is a bit out of date. We will be updating to use
-// the standalone cross-compiler that is offered by the Android NDK soon
-
-This document explains how to properly build an Android package of Orbot from
-source. It covers building on Debian Lenny (5.0.3).
-
-Please install the following prerequisites (instructions for each follows):
-	ant: http://ant.apache.org/
-	Android OS SDK: http://source.android.com/download
-	droid-wrapper: http://github.com/tmurakam/droid-wrapper
-	libevent source (1.4.12-stable from svn)
-	Tor source (most recent git master branch)
-	Privoxy source (http://sourceforge.net/projects/ijbswa/)
-
-Install and prepare the Android OS SDK ( http://source.android.com/download )
-on Debian Lenny:
-
-	sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf \
-		libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip \
-		curl libncurses5-dev zlib1g-dev valgrind libtool automake \
-		ruby subversion
-	update-java-alternatives -s java-1.5.0-sun
-
-	curl http://android.git.kernel.org/repo >~/bin/repo
-	chmod a+x ~/bin/repo
-
-	mkdir ~/mydroid
-	cd ~/mydroid
-
-	repo init -u git://android.git.kernel.org/platform/manifest.git
-	repo sync
-
-	# Paste in key from http://source.android.com/download next...
-	gpg --import
-
-	cd ~/mydroid
-
-	# This takes a long while...
-	make
-
-Install droid-wrapper:
-
-	cd /tmp
-	git clone git://github.com/tmurakam/droid-wrapper.git
-	cd droid-wrapper
-	sudo make install
-
-zlib and OpenSSL are included with the Android OS SDK. You'll need to build
-libevent, Privoxy and finally Tor. We'll create an externals directory for this code:
-
-	mkdir -p ~/mydroid/external/{libevent,tor,privoxy}
-
-We need to set to environment variables for droid-gcc:
-	export DROID_ROOT=~/mydroid/
-	export DROID_TARGET=generic
-
-Fetch and build Privoxy:
-	cd ~/mydroid/external/privoxy
-	wget http://sourceforge.net/projects/ijbswa/files/Sources/3.0.12%20%28stable%29/privoxy-3.0.12-stable-src.tar.gz/download
-	tar xzvf privoxy-3.0.12-stable-src.tar.gz
-	cd privoxy-3.0.12-stable
-	autoheader
-	autoconf
-	#need to disable setpgrp check in configure
-	export ac_cv_func_setpgrp_void=yes
-	#replace FOO with your actual username
-	CC=droid-gcc LD=droid-ld CPPFLAGS="-I/home/FOO/mydroid/external/zlib/" ./configure --host=arm-none-linux-gnueabi
-	#don't mind the "unrecognized option '-pthread'" error message that you'll see when you run make
-	make
-	
-Fetch and build libevent:
-
-	cd ~/mydroid/external/libevent
-	svn co https://levent.svn.sourceforge.net/svnroot/levent/tags/release-1.4.12-stable/libevent/ .
-	export LIBEVENTDIR=`pwd`
-	./autogen.sh
-	# Put the contents of http://pastebin.ca/1577207 in /tmp/libevent-patch
-	patch < /tmp/libevent-patch
-	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi
-	make
-
-Copy over the libevent library:
-	cp .libs/libevent.a ~/mydroid/out/target/product/generic/obj/lib
-
-Fetch and build Tor:
-
-	export OPENSSLDIR=`cd ~/mydroid/external/openssl/include/ && pwd`
-	export ZLIBDIR=`cd ~/mydroid/external/zlib && pwd`
-
-	cd ~/mydroid/external/tor
-	git clone git://git.torproject.org/git/tor.git
-	cd tor/
-	./autogen.sh
-	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi \
-	--with-libevent-dir=$LIBEVENTDIR --with-openssl-dir=$OPENSSLDIR \
-	--with-zlib-dir=$ZLIBDIR --disable-asciidoc
-	make
-
-At this point, you'll have a Tor binary that can be run on an Android handset.
-This isn't enough though and we'll now sew up the binary into a small package
-that will handle basic Tor controlling features.
-
-We need to build our Java SOCKS library:
-
-	# If you're in Orbot's directory already...
-	cd ../asocks/
-	ant compile
-	ant jar
-	cp bin/jar/asocks.jar ../Orbot/libs
-
-We need to get the TorControl library for Java:
-(see also https://svn.torproject.org/svn/torctl/trunk/doc/howto.txt)
-
-	git clone git://git.torproject.org/git/jtorctl
-	cd jtorctl
-	mkdir bin
-	javac net/freehaven/tor/control/TorControlConnection.java -d bin
-	cd bin
-	jar cvf jtorctrl.jar *
-	cp jtorctrl.jar {Orbot Home}/libs
-	
-Finally, we'll make a proper Android package with ant and the Android App SDK:
-
-	export APP_SDK=~/Documents/projects/android/android-sdk-linux_x86-1.5_r3/tools
-	cd ../Orbot/
-	cp ~/mydroid/external/privoxy/privoxy-3.0.12-stable/privoxy assets/privoxy
-	cp ~/mydroid/external/tor/tor/src/or/tor assets/tor
-	$APP_SDK/android update project --name Orbot --target 3 --path .
-	ant release
-
-This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk!
-
-To produce a usable package, you'll need to sign the .apk. The basics on
-signing can be found on the Android developer site:
-
-	http://developer.android.com/guide/publishing/app-signing.html
-
-The three steps are quite simple. First, you'll generate a key. Secondly,
-you'll sign the application. Thirdly, you'll verify the the apk.
-
-Generating a signing key:
-
-	keytool -genkey -v -keystore my-release-key.keystore \
-		-alias orbots_key -keyalg RSA -validity 10000
-
-Sign the apk:
-
-	jarsigner -verbose -keystore my-release-key.keystore \
-		bin/Orbot-unsigned.apk orbots_key
-
-Verify the signature for the apk:
-
-	jarsigner -verify bin/Orbot-unsigned.apk
-	mv bin/Orbot-unsigned.apk bin/Orbot-signed-alpha.apk
-
-You can also GPG sign the apk and generate an .asc:
-
-	gpg -ab Orbot-signed-alpha.apk
-
-Now you should have a fully signed and production ready alpha release of Orbot!
-Give bin/Orbot-signed-alpha.apk an install and send us bug reports!
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD (from rev 24737, projects/android/trunk/Orbot/BUILD)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,162 @@
+
+// 2011/04/15 this document is a bit out of date. We will be updating to use
+// the standalone cross-compiler that is offered by the Android NDK soon
+
+This document explains how to properly build an Android package of Orbot from
+source. It covers building on Debian Lenny (5.0.3).
+
+Please install the following prerequisites (instructions for each follows):
+	ant: http://ant.apache.org/
+	Android OS SDK: http://source.android.com/download
+	droid-wrapper: http://github.com/tmurakam/droid-wrapper
+	libevent source (1.4.12-stable from svn)
+	Tor source (most recent git master branch)
+	Privoxy source (http://sourceforge.net/projects/ijbswa/)
+
+Install and prepare the Android OS SDK ( http://source.android.com/download )
+on Debian Lenny:
+
+	sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf \
+		libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip \
+		curl libncurses5-dev zlib1g-dev valgrind libtool automake \
+		ruby subversion
+	update-java-alternatives -s java-1.5.0-sun
+
+	curl http://android.git.kernel.org/repo >~/bin/repo
+	chmod a+x ~/bin/repo
+
+	mkdir ~/mydroid
+	cd ~/mydroid
+
+	repo init -u git://android.git.kernel.org/platform/manifest.git
+	repo sync
+
+	# Paste in key from http://source.android.com/download next...
+	gpg --import
+
+	cd ~/mydroid
+
+	# This takes a long while...
+	make
+
+Install droid-wrapper:
+
+	cd /tmp
+	git clone git://github.com/tmurakam/droid-wrapper.git
+	cd droid-wrapper
+	sudo make install
+
+zlib and OpenSSL are included with the Android OS SDK. You'll need to build
+libevent, Privoxy and finally Tor. We'll create an externals directory for this code:
+
+	mkdir -p ~/mydroid/external/{libevent,tor,privoxy}
+
+We need to set to environment variables for droid-gcc:
+	export DROID_ROOT=~/mydroid/
+	export DROID_TARGET=generic
+
+Fetch and build Privoxy:
+	cd ~/mydroid/external/privoxy
+	wget http://sourceforge.net/projects/ijbswa/files/Sources/3.0.12%20%28stable%29/privoxy-3.0.12-stable-src.tar.gz/download
+	tar xzvf privoxy-3.0.12-stable-src.tar.gz
+	cd privoxy-3.0.12-stable
+	autoheader
+	autoconf
+	#need to disable setpgrp check in configure
+	export ac_cv_func_setpgrp_void=yes
+	#replace FOO with your actual username
+	CC=droid-gcc LD=droid-ld CPPFLAGS="-I/home/FOO/mydroid/external/zlib/" ./configure --host=arm-none-linux-gnueabi
+	#don't mind the "unrecognized option '-pthread'" error message that you'll see when you run make
+	make
+	
+Fetch and build libevent:
+
+	cd ~/mydroid/external/libevent
+	svn co https://levent.svn.sourceforge.net/svnroot/levent/tags/release-1.4.12-stable/libevent/ .
+	export LIBEVENTDIR=`cd $DROID_ROOT/external/libevent && pwd`
+	./autogen.sh
+	# Put the contents of http://pastebin.ca/1577207 in /tmp/libevent-patch
+	patch < /tmp/libevent-patch
+	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi
+	make
+
+Copy over the libevent library:
+	cp .libs/libevent.a $DROID_ROOT/out/target/product/generic/obj/lib
+
+Fetch and build Tor:
+
+	export OPENSSLDIR=`cd $DROID_ROOT/external/openssl/include/ && pwd`
+	export ZLIBDIR=`cd $DROID_ROOT/external/zlib && pwd`
+
+	cd $DROID_ROOT/external/tor
+	git clone git://git.torproject.org/git/tor.git
+	cd tor/
+	./autogen.sh
+	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi \
+	--with-libevent-dir=$LIBEVENTDIR --with-openssl-dir=$OPENSSLDIR \
+	--with-zlib-dir=$ZLIBDIR --disable-asciidoc
+	make
+
+At this point, you'll have a Tor binary that can be run on an Android handset.
+You can verify the ARM binary was properly built using the following command:
+
+file src/or/tor
+	
+You should see something like:
+src/or/tor: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
+
+This isn't enough though and we'll now sew up the binary into a small package
+that will handle basic Tor controlling features.
+
+We need to get the TorControl library for Java:
+(see also https://svn.torproject.org/svn/torctl/trunk/doc/howto.txt)
+
+	git clone git://git.torproject.org/git/jtorctl
+	cd jtorctl
+	mkdir bin
+	javac net/freehaven/tor/control/TorControlConnection.java -d bin
+	cd bin
+	jar cvf jtorctrl.jar *
+	cp jtorctrl.jar {Orbot Home}/libs
+	
+Finally, we'll make a proper Android package with ant and the Android App SDK:
+
+	export APP_SDK=~/Documents/projects/android/android-sdk-linux_x86-1.5_r3/tools
+	cd ../Orbot/
+	cp $DROID_ROOT/external/privoxy/privoxy-3.0.12-stable/privoxy assets/privoxy
+	cp $DROID_ROOT/external/tor/tor/src/or/tor assets/tor
+	$APP_SDK/android update project --name Orbot --target 3 --path .
+	ant release
+
+This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk!
+
+To produce a usable package, you'll need to sign the .apk. The basics on
+signing can be found on the Android developer site:
+
+	http://developer.android.com/guide/publishing/app-signing.html
+
+The three steps are quite simple. First, you'll generate a key. Secondly,
+you'll sign the application. Thirdly, you'll verify the the apk.
+
+Generating a signing key:
+
+	keytool -genkey -v -keystore my-release-key.keystore \
+		-alias orbots_key -keyalg RSA -validity 10000
+
+Sign the apk:
+
+	jarsigner -verbose -keystore my-release-key.keystore \
+		bin/Orbot-unsigned.apk orbots_key
+
+Verify the signature for the apk:
+
+	jarsigner -verify bin/Orbot-unsigned.apk
+	mv bin/Orbot-unsigned.apk bin/Orbot-signed-alpha.apk
+
+You can also GPG sign the apk and generate an .asc:
+
+	gpg -ab Orbot-signed-alpha.apk
+
+Now you should have a fully signed and production ready alpha release of Orbot!
+Give bin/Orbot-signed-alpha.apk an install and send us bug reports!
+

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG
===================================================================
--- projects/android/trunk/Orbot/CHANGELOG	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,105 +0,0 @@
-NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
-
-1.0.5
-- Added new toolbar notifications and alerts for displaying notifications and Tor messages
-- Removed unused Socks client code from android.net package
-- Updated wizard to show link to Gibberbot (formerly OTRchat) chat app
-- Bundled iptables 1.4.7 for ARM instead of relying on installed version
-- Fixed various issues related to iptables, transproxying for CyanogenMod7/Android 2.3.*
-- Changed how settings changed are processed through the control port (batched instead of one by one)
-- Stopped app by app flushing of iptables rules, in favor of complete flush of 'nat' and 'filter' type
-- removed useless log screen (logs can be viewed/retrieved using 'alogcat' 3rd party app)
-
-1.0.4
-- Added Russian, Persian, Arabic and other .po translations (see res/values-* folders)
-- Fixed incorrect try to clear iptables rules for non-root devices
-- Fixed bug that stopped wizard helper from showing first time
-- Added new green notification icon when Tor is connected
-- Fixed app selector layout in settings
-- Moved minSDK to 4 (Android 1.6); discontinued 1.5 support
-- Fixed log screen touch disable tor bug
-- Debugged issues around network status change causing FC/crash
-- Added "Start on Boot" option
-
-1.0.3
-- Fixed spanish language issues with settings screen
-- Cleaned up logging, and moved most of it to debug output only
-- Small changes to iptables, transproxy settings to handle iptables 1.3 and 1.4 variations
-- Added compile time variable/flag for turning on/off detailed control port output to Android stdout
-- Hidden services now support through option in settings
-- removed double apostrophes from value/strings.xml files
-
-1.0.2
-- Added "check" yes/no dialog prompt
-- Debugged iptables/transprox settings on Android 1.6 and 2.2
-- Added proxy settings help screen and fixed processSettings() NPE
-
-1.0.1
-- Found and fixed major bug in per-app trans proxying; list of apps was being cached and iptables rules were not properly updated as the user changed the selection in the list
- 
-1.0.0 - 2010-08-10
-- Added "Proxy Settings" help screen
-- Handle potential null pointers on process settings where service not yet active 
-
-0.0.9x - 2010-08-03
-- Revised Orbot install wizard
-- Integrated Tor 0.2.2.14 and iptables 4.x binary
-- Fixed "got root" detection method 
-- Fixed Per App Torification handling so it updates on exit from Settings screen
-
-0.0.8x - 2010-07-15
-- Updated Settings & App configuration screens
-- Changed progress dialog display
-- Significant application re-arch
-- Fixed force stop crash on install
-- Integrated Tor 0.2.2.13-alpha-dev binary
-- Fixed su shell cmd error handling & root perms issue
-- #1570: Added new setup wizard on install to clarify root / non-root capabilities 
-- #1716: Per-app traffic routing prefs not persisted
-- #1509: Help window is too big for the screen on android 1.6
-- #1513: Orbot can't be told to exit <-- added 'Exit' menu option
-- #1530: Capture sh cmd stout for debugging errors <-- updated debug log screen
-- #1531: Don't loop ad infinitum in Orbot fails <-- only retries 3 times now
-- #1272: Orbot should store Tor files in the cache
-- #1273: Info should mention anonymity problems with ProxySurf
-
-0.0.5x
-- #1388: Error parsing PID from output of "ps"
-- #1277, #1278: Enabling bridges issues
-- #1279: Misleading message when initialization is finished
-- #1292: Tor version in About screen is wrong
-
-0.0.3x - 2010-03-15
-- Added Start/Stop menu item for non-touch activation
-- Improved parsing and validation of settings screen
-- UI now compatible with landscape mode (#1276)
-- Added relay support for static/publicly accessible IP devices
-
-0.0.3a - 2010-02-07
-- Integrated iptables support for transparent proxying of outbound port
-  80 and DNS
-- Privoxy is now used as HTTP Proxy server (cross-compiled to ARM)
-- New UI layout and graphics
-- Android settings screen for generated torrc file
-- Improved performance and error handling
-
-0.0.2a - 2009-11-30
-- Update user interface layout and graphics
-- Modified service launch, shutdown and handling
-- Improved event handler on Tor Control port callbacks
-- Added Help page
-
-0.0.2 - 2009-11-27
-- Major improvement to the user interface including relative layout for
-  different screens
-- New graphics resources
-- Implemented Tor Control Port using official Java library
-- Added 'clear' button to the log screen
-- Added 'save' and editable textbox for the settings screen
-- Moved screen navigation to a pop-up menu
-
-0.0.1-alpha - 2009-10-21
-- First code release
-- Major Features: Tor binary application is fully operational, UI:
-  Start/Stop Tor, View Message Log, View Settings (torrc)
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG (from rev 24755, projects/android/trunk/Orbot/CHANGELOG)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,112 @@
+NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
+
+1.0.5
+- added exit node and "StrictExitNode" preference
+- fixed tor binary installation issue related to max resource size and compression
+- updated "start on boot" code to test for proper launch event
+- updated to Tor 0.2.2.25-alpha binary
+- moved back to single notification bar id to avoid double entries
+- cleaned up progress dialog and alert handling to avoid leaky windows
+- Merged __sporkbomb's patch for how transproxy all works; now does "everything but Tor"
+- Added new toolbar notifications and alerts for displaying notifications and Tor messages
+- Removed unused Socks client code from android.net package
+- Updated wizard to show link to Gibberbot (formerly OTRchat) chat app
+- Bundled iptables 1.4.7 for ARM instead of relying on installed version
+- Fixed various issues related to iptables, transproxying for CyanogenMod7/Android 2.3.*
+- Changed how settings changed are processed through the control port (batched instead of one by one)
+- Stopped app by app flushing of iptables rules, in favor of complete flush of 'nat' and 'filter' type
+- removed useless log screen (logs can be viewed/retrieved using 'alogcat' 3rd party app)
+
+1.0.4
+- Added Russian, Persian, Arabic and other .po translations (see res/values-* folders)
+- Fixed incorrect try to clear iptables rules for non-root devices
+- Fixed bug that stopped wizard helper from showing first time
+- Added new green notification icon when Tor is connected
+- Fixed app selector layout in settings
+- Moved minSDK to 4 (Android 1.6); discontinued 1.5 support
+- Fixed log screen touch disable tor bug
+- Debugged issues around network status change causing FC/crash
+- Added "Start on Boot" option
+
+1.0.3
+- Fixed spanish language issues with settings screen
+- Cleaned up logging, and moved most of it to debug output only
+- Small changes to iptables, transproxy settings to handle iptables 1.3 and 1.4 variations
+- Added compile time variable/flag for turning on/off detailed control port output to Android stdout
+- Hidden services now support through option in settings
+- removed double apostrophes from value/strings.xml files
+
+1.0.2
+- Added "check" yes/no dialog prompt
+- Debugged iptables/transprox settings on Android 1.6 and 2.2
+- Added proxy settings help screen and fixed processSettings() NPE
+
+1.0.1
+- Found and fixed major bug in per-app trans proxying; list of apps was being cached and iptables rules were not properly updated as the user changed the selection in the list
+ 
+1.0.0 - 2010-08-10
+- Added "Proxy Settings" help screen
+- Handle potential null pointers on process settings where service not yet active 
+
+0.0.9x - 2010-08-03
+- Revised Orbot install wizard
+- Integrated Tor 0.2.2.14 and iptables 4.x binary
+- Fixed "got root" detection method 
+- Fixed Per App Torification handling so it updates on exit from Settings screen
+
+0.0.8x - 2010-07-15
+- Updated Settings & App configuration screens
+- Changed progress dialog display
+- Significant application re-arch
+- Fixed force stop crash on install
+- Integrated Tor 0.2.2.13-alpha-dev binary
+- Fixed su shell cmd error handling & root perms issue
+- #1570: Added new setup wizard on install to clarify root / non-root capabilities 
+- #1716: Per-app traffic routing prefs not persisted
+- #1509: Help window is too big for the screen on android 1.6
+- #1513: Orbot can't be told to exit <-- added 'Exit' menu option
+- #1530: Capture sh cmd stout for debugging errors <-- updated debug log screen
+- #1531: Don't loop ad infinitum in Orbot fails <-- only retries 3 times now
+- #1272: Orbot should store Tor files in the cache
+- #1273: Info should mention anonymity problems with ProxySurf
+
+0.0.5x
+- #1388: Error parsing PID from output of "ps"
+- #1277, #1278: Enabling bridges issues
+- #1279: Misleading message when initialization is finished
+- #1292: Tor version in About screen is wrong
+
+0.0.3x - 2010-03-15
+- Added Start/Stop menu item for non-touch activation
+- Improved parsing and validation of settings screen
+- UI now compatible with landscape mode (#1276)
+- Added relay support for static/publicly accessible IP devices
+
+0.0.3a - 2010-02-07
+- Integrated iptables support for transparent proxying of outbound port
+  80 and DNS
+- Privoxy is now used as HTTP Proxy server (cross-compiled to ARM)
+- New UI layout and graphics
+- Android settings screen for generated torrc file
+- Improved performance and error handling
+
+0.0.2a - 2009-11-30
+- Update user interface layout and graphics
+- Modified service launch, shutdown and handling
+- Improved event handler on Tor Control port callbacks
+- Added Help page
+
+0.0.2 - 2009-11-27
+- Major improvement to the user interface including relative layout for
+  different screens
+- New graphics resources
+- Implemented Tor Control Port using official Java library
+- Added 'clear' button to the log screen
+- Added 'save' and editable textbox for the settings screen
+- Moved screen navigation to a pop-up menu
+
+0.0.1-alpha - 2009-10-21
+- First code release
+- Major Features: Tor binary application is fully operational, UI:
+  Start/Stop Tor, View Message Log, View Settings (torrc)
+

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/libs/jtorctrl.jar (from rev 24754, projects/android/trunk/Orbot/libs/jtorctrl.jar)
===================================================================
(Binary files differ)

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/drawable/torerror.png (from rev 24738, projects/android/trunk/Orbot/res/drawable/torerror.png)
===================================================================
(Binary files differ)

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml
===================================================================
--- projects/android/trunk/Orbot/res/layout/layout_about.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
-	<ScrollView android:id="@+id/aboutscrollview" 
-		android:orientation="vertical"
-		android:layout_width="fill_parent" 
-		android:layout_height="fill_parent">    
-		<LinearLayout
-		    android:orientation="vertical"
-		    android:layout_width="fill_parent"
-		    android:layout_height="fill_parent">
-		    <TextView android:text="@string/wizard_details"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"		
-				android:paddingTop="15px"
-				android:paddingLeft="15px"
-				android:textStyle="bold"
-				android:textColor="#00ff00" />	
-			<TextView android:text="@string/wizard_details_msg"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"		
-				android:textColor="#ffffff" />
-				
-			<TextView android:text="Version: "
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:paddingTop="15px"
-				android:paddingLeft="15px"
-				android:textStyle="bold"
-				android:textColor="#00ff00" />
-			<TextView android:text="- Unknown -"
-				android:id="@+id/versionName"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:paddingLeft="15px"		
-				android:layout_gravity="center_vertical"
-				android:textColor="#ffffff" />	
-			<TextView android:text="Project Home(s): "
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"		
-				android:paddingTop="15px"
-				android:paddingLeft="15px"
-				android:textStyle="bold"
-				android:textColor="#00ff00" />
-			<TextView android:text="https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/orbot/";
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"		
-				android:textColor="#ffffff" />
-			<TextView android:text="License: "
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:paddingTop="15px"
-				android:paddingLeft="15px"
-				android:textStyle="bold"
-				android:textColor="#00ff00" />	
-			<TextView android:text="The Tor License"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:paddingLeft="15px"								
-				android:textColor="#ffffff" />	
-			<TextView android:text="https://torproject.org";
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"		
-				android:textColor="#ffffff" />				
-			<TextView android:text="3rd-Party-Software: "
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"		
-				android:paddingTop="15px"
-				android:paddingLeft="15px"
-				android:textStyle="bold"
-				android:textColor="#00ff00" />	
-			<TextView android:text="Tor v0.2.2.14: https://www.torproject.org";
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"
-				android:textColor="#ffffff" />				
-			<TextView android:text="LibEvent v1.4.13: http://www.monkey.org/~provos/libevent/";
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"	
-				android:textColor="#ffffff" />	
-			<TextView android:text="Privoxy v3.0.12: http://www.privoxy.org";
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"	
-				android:textColor="#ffffff" />	
-			<TextView android:text="Iptables v1.4.7: http://www.netfilter.org";
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"	
-				android:textColor="#ffffff" />					
-			</LinearLayout>
-		</ScrollView>			
-</LinearLayout>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml (from rev 24751, projects/android/trunk/Orbot/res/layout/layout_about.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+	<ScrollView android:id="@+id/aboutscrollview" 
+		android:orientation="vertical"
+		android:layout_width="fill_parent" 
+		android:layout_height="fill_parent">    
+		<LinearLayout
+		    android:orientation="vertical"
+		    android:layout_width="fill_parent"
+		    android:layout_height="fill_parent">
+		    <TextView android:text="@string/wizard_details"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"		
+				android:paddingTop="15px"
+				android:paddingLeft="15px"
+				android:textStyle="bold"
+				android:textColor="#00ff00" />	
+			<TextView android:text="@string/wizard_details_msg"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"		
+				android:textColor="#ffffff" />
+				
+			<TextView android:text="Version: "
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:paddingTop="15px"
+				android:paddingLeft="15px"
+				android:textStyle="bold"
+				android:textColor="#00ff00" />
+			<TextView android:text="- Unknown -"
+				android:id="@+id/versionName"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:paddingLeft="15px"		
+				android:layout_gravity="center_vertical"
+				android:textColor="#ffffff" />	
+			<TextView android:text="Project Home(s): "
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"		
+				android:paddingTop="15px"
+				android:paddingLeft="15px"
+				android:textStyle="bold"
+				android:textColor="#00ff00" />
+			<TextView android:text="https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/orbot/";
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"		
+				android:textColor="#ffffff" />
+			<TextView android:text="License: "
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:paddingTop="15px"
+				android:paddingLeft="15px"
+				android:textStyle="bold"
+				android:textColor="#00ff00" />	
+			<TextView android:text="The Tor License"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:paddingLeft="15px"								
+				android:textColor="#ffffff" />	
+			<TextView android:text="https://torproject.org";
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"		
+				android:textColor="#ffffff" />				
+			<TextView android:text="3rd-Party-Software: "
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"		
+				android:paddingTop="15px"
+				android:paddingLeft="15px"
+				android:textStyle="bold"
+				android:textColor="#00ff00" />	
+			<TextView android:text="Tor v0.2.2.25: https://www.torproject.org";
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"
+				android:textColor="#ffffff" />				
+			<TextView android:text="LibEvent v1.4.13: http://www.monkey.org/~provos/libevent/";
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"	
+				android:textColor="#ffffff" />	
+			<TextView android:text="Privoxy v3.0.12: http://www.privoxy.org";
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"	
+				android:textColor="#ffffff" />	
+			<TextView android:text="Iptables v1.4.7: http://www.netfilter.org";
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"	
+				android:textColor="#ffffff" />					
+			</LinearLayout>
+		</ScrollView>			
+</LinearLayout>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml
===================================================================
--- projects/android/trunk/Orbot/res/layout/layout_main.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:background="@drawable/bgtitanium"
-    android:id="@+id/viewMain"
-    >
-    
-    	<RelativeLayout android:id="@+id/layoutHeaderMain"
-		android:layout_width="fill_parent"
-		android:layout_height="30dp"
-		android:layout_gravity="center_horizontal"
-		android:background="#A0909090">
-        <ImageView android:id="@+id/radioModeImage"
- 		    android:layout_width="wrap_content"
-		    android:layout_height="wrap_content"
-			android:layout_marginTop="0px"
-			android:layout_marginRight="3px"
-			android:gravity="right"
-			android:layout_toRightOf="@+id/radioModeLabel"
-			android:layout_alignParentRight="true"
-			android:layout_alignParentTop="true"
-			android:src="@drawable/tor25"
-			/>
-		<TextView android:id="@+id/radioModeText"
- 		    android:layout_width="wrap_content"
-		    android:layout_height="wrap_content"           
-            android:text="@string/powered_by"
-			android:layout_marginTop="9px"
-			android:layout_marginRight="0px"
-			android:gravity="right"
-			android:layout_toLeftOf="@+id/radioModeImage"
-            android:textColor="#333333" />
-	</RelativeLayout>
-    
-   <ScrollView android:id="@+id/mainview" 
-		android:orientation="vertical"
-		android:layout_width="fill_parent" 
-		android:layout_height="fill_parent">
-   		<TableLayout android:id="@+id/mainLayout"
-			android:layout_gravity="center"
-			android:layout_height="wrap_content" 
-			android:layout_width="wrap_content">
-			<TableRow android:id="@+id/startRow">
-				<TableLayout
-					android:layout_gravity="center"
-					android:layout_height="wrap_content" 
-					android:layout_width="wrap_content">
-					<TableRow>
-							<ImageView
-							android:id="@+id/imgStatus"
-							android:layout_width="wrap_content"
-							android:layout_height="wrap_content"
-							android:src="@drawable/toroff"/>
-					</TableRow>
-					<TableRow>
-						<TextView android:id="@+id/lblStatus"
-							android:text="@string/press_to_start"
-							android:layout_gravity="center_horizontal"
-							android:gravity="center_horizontal"
-							android:textStyle="bold"
-							android:width="330px"
-							android:height="75px"
-							android:textColor="#ffffff"
-							 />
-					</TableRow>
-				</TableLayout>
-			</TableRow>
-			
-		</TableLayout>
-	</ScrollView>
-
-
-       
-</LinearLayout>
-
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml (from rev 24751, projects/android/trunk/Orbot/res/layout/layout_main.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:background="@drawable/bgtitanium"
+    android:id="@+id/viewMain"
+    >
+    
+    	<RelativeLayout android:id="@+id/layoutHeaderMain"
+		android:layout_width="fill_parent"
+		android:layout_height="30dp"
+		android:layout_gravity="center_horizontal"
+		android:background="#A0909090">
+        <ImageView android:id="@+id/radioModeImage"
+ 		    android:layout_width="wrap_content"
+		    android:layout_height="wrap_content"
+			android:layout_marginTop="3dip"
+			android:layout_marginRight="3dip"
+			android:gravity="right"
+			android:layout_toRightOf="@+id/radioModeLabel"
+			android:layout_alignParentRight="true"
+			android:layout_alignParentTop="true"
+			android:src="@drawable/tor25"
+			/>
+		<TextView android:id="@+id/radioModeText"
+ 		    android:layout_width="wrap_content"
+		    android:layout_height="wrap_content"           
+            android:text="@string/powered_by"
+			android:layout_marginTop="9px"
+			android:layout_marginRight="0px"
+			android:gravity="right"
+			android:layout_toLeftOf="@+id/radioModeImage"
+            android:textColor="#333333" />
+	</RelativeLayout>
+    
+   		<TableLayout android:id="@+id/mainLayout"
+			android:layout_gravity="center"
+			android:layout_height="wrap_content" 
+			android:layout_width="wrap_content">
+			<TableRow android:id="@+id/startRow">
+				<TableLayout
+					android:layout_gravity="center"
+					android:layout_height="wrap_content" 
+					android:layout_width="wrap_content">
+					<TableRow>
+							<ImageView
+							android:id="@+id/imgStatus"
+							android:layout_marginTop="30dip"
+							android:layout_width="wrap_content"
+							android:layout_height="wrap_content"
+							android:src="@drawable/toroff"/>
+					</TableRow>
+					<TableRow>
+						<TextView android:id="@+id/lblStatus"
+							android:text="@string/press_to_start"
+							android:layout_gravity="center_horizontal"
+							android:gravity="center_horizontal"
+							android:textStyle="bold"
+							android:layout_width="fill_parent"
+							android:layout_height="75px"
+							android:textColor="#ffffff"
+							 />
+					</TableRow>
+				</TableLayout>
+			</TableRow>
+			
+		</TableLayout>
+
+
+       
+</LinearLayout>
+
+

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc
===================================================================
--- projects/android/trunk/Orbot/res/raw/torrc	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,12 +0,0 @@
-SocksPort 9050
-SocksListenAddress 127.0.0.1
-SafeSocks 1
-Log notice stdout
-ControlPort 9051
-CookieAuthentication 1
-RelayBandwidthRate 20 KBytes
-RelayBandwidthBurst 20 KBytes
-UseBridges 0
-AutomapHostsOnResolve 1
-TransPort 9040
-DNSPort 5400

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc (from rev 24736, projects/android/trunk/Orbot/res/raw/torrc)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,11 @@
+SocksPort 9050
+SafeSocks 1
+Log notice stdout
+ControlPort 9051
+CookieAuthentication 1
+RelayBandwidthRate 20 KBytes
+RelayBandwidthBurst 20 KBytes
+UseBridges 0
+AutomapHostsOnResolve 1
+TransPort 9040
+DNSPort 5400

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">start and stop Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot is starting...</string>
-<string name="status_activated">Connected to the Tor network</string>
-<string name="status_disabled">"Orbot is Deactivated</string>
-<string name="status_shutting_down">Orbot is shutting down</string>
-
-<string name="tor_process_connecting">Starting Tor...</string>
-<string name="tor_process_connecting_step2">Setting up control...</string>
-<string name="tor_process_connecting_step3">complete.</string>
-<string name="tor_process_connecting_step4">waiting.</string>
-
-<string name="not_anonymous_yet">WARNING: Your traffic is not anonymous yet! Please configure your applications to use HTTP proxy 127.0.0.1:8118 or SOCKS4A or SOCKS5 proxy 127.0.0.1:9050</string>
-<string name="menu_home">Home</string>
-<string name="menu_browse">Browse</string>
-<string name="menu_settings">Settings</string>
-<string name="menu_log">Log</string>
-<string name="menu_info">Help</string>
-<string name="menu_apps">Apps</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stop</string>
-
-<string name="menu_about">About</string>
-<string name="menu_wizard">Wizard</string>
-
-
-
-<string name="button_help">Help</string>
-<string name="button_close">Close</string>
-<string name="button_about">About</string>
-
-<string name="button_clear_log">Clear Log</string>
-
-
-<string name="menu_verify">Check</string>
-<string name="menu_exit">Exit</string>
-<string name="powered_by">powered by the Tor Project</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Transparent Proxying (Requires Root)</string>
-<string name="pref_trans_proxy_title">Transparent Proxying</string>
-<string name="pref_trans_proxy_summary">Automatic Torifying of Apps</string>
-
-<string name="pref_transparent_all_title">Tor Everything</string>
-<string name="pref_transparent_all_summary">Proxy traffic for all apps through Tor</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Tor binaries successfully installed!</string>
-<string name="status_install_fail">The Tor binary files were unable to be installed. Please check the log and notify tor-assistants@xxxxxxxxxxxxxx</string>
-
-<string name="title_error">Application Error</string>
-
-<string name="wizard_title">Welcome to Orbot</string>
-
-<string name="wizard_btn_tell_me_more">About Orbot</string>
-<string name="btn_next">Next</string>
-<string name="btn_back">Back</string>
-<string name="btn_finish">Finish</string>
-
-<string name="btn_okay">Okay</string>
-<string name="btn_cancel">Cancel</string>
-
-
- <!-- Welcome Wizard strings (DJH) -->
-    <string name="wizard_welcome_msg">Orbot brings Tor to Android. Tor is free software and an open network that helps you defend against a form of network surveillance that threatens personal freedom and privacy, confidential business activities and relationships, and state security known as traffic analysis.\n\n*WARNING:* Simply installing Orbot will _not_ magically anonymize your mobile traffic! This wizard will help you get started.</string>
-    <string name="wizard_details">Some Orbot Details</string>
-    <string name="wizard_details_msg">Orbot is an open-source application that contains Tor, LibEvent and Privoxy. It provides a local HTTP proxy (8118) and a SOCKS proxy (9050) into the Tor network. Orbot also has the ability, on rooted device, to send all internet traffic through Tor.</string>
-    <string name="wizard_permissions_root">Permission Granted</string>
-    <string name="wizard_permissions_stock">Orbot Permissions</string>
-    <string name="wizard_premissions_msg_root">Excellent! We\'ve detected that you have root permissions enabled for Orbot. We will use this power wisely.</string>
-    <string name="wizard_permissions_msg_stock"> While it is not required, Orbot can become a more powerful tool if your device has root access. Use the button below to grant Orbot superpowers! </string>
-   
-    <string name="wizard_permissions_no_root">If you don\'t have root access or have no idea what we\'re talking about, just be sure to use apps made to work with Orbot.</string>
-    <string name="wizard_permissions_consent">I understand and would like to continue without root</string>
-   
-    <string name="wizard_permission_enable_root">Grant Root for Orbot</string>
-    <string name="wizard_configure">Configure Torification</string>
-    <string name="wizard_configure_msg">Orbot gives you the option to route all application traffic through Tor OR to choose your applications individually.</string> 
-    <string name="wizard_configure_all">Proxy All Apps Through Tor</string>
-    <string name="wizard_configure_select_apps">Select Individual Apps for Tor</string>
-    
-    
-    <string name="wizard_tips_tricks">Orbot-enabled Apps</string>
-    <string name="wizard_tips_msg">We encourage you to download &amp; use apps that know how to connect directly to Orbot. Click on the buttons below to install.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (Android 1.x Only) - Browser designed for privacy &amp; for Orbot</string>
-    <string name="wizard_tips_proxy">Proxy Settings - Learn how to configure apps to work with Orbot</string>
-    
-    <string name="wizard_proxy_help_info">Proxy Settings</string>
-    <string name="wizard_proxy_help_msg">If the Android app you are using can support the use of an HTTP or SOCKS proxy, then you can configure it to connect to Orbot and use Tor.\n\n
-    The host settings is 127.0.0.1 or "localhost". For HTTP, the port setting is 8118. For SOCKS, the proxy is 9050. You should use SOCKS4A or SOCKS5 if possible.
-    \n\n
-    You can learn more about proxying on Android via the FAQ at: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">Orbot is ready!</string>
-    <string name="wizard_final_msg">Hundreds of thousands of people around the world use Tor for a wide variety of reasons: journalists and bloggers, human rights workers, law enforcement officers, soldiers, corporations, citizens of repressive regimes, and just ordinary citizens... and now you are ready to, as well!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
- <!-- END Welcome Wizard strings (DJH) -->
-
-	<string name="connect_first_time"> You\'ve successfully connected to the Tor network - but this does NOT mean your device is secure. You can use the \'Check\' option from the menu to test your browser. \n\nVisit us at https://guardianproject.info/apps/orbot or send an email to help@xxxxxxxxxxxxxxxxxxxx to learn more.</string>
-
-	<string name="tor_check">This will open your default web browser to https://check.torproject.org in order to see if Orbot is probably configured and you are connected to Tor.</string>
-
-	
-    <string name="pref_hs_group">Hidden Services</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+             <string name="app_version">1.0.5</string>
+     
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">start and stop Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot is starting...</string>
+<string name="status_activated">Connected to the Tor network</string>
+<string name="status_disabled">"Orbot is Deactivated</string>
+<string name="status_shutting_down">Orbot is shutting down</string>
+
+<string name="tor_process_connecting">Starting Tor...</string>
+<string name="tor_process_connecting_step2">Setting up control...</string>
+<string name="tor_process_connecting_step3">complete.</string>
+<string name="tor_process_connecting_step4">waiting.</string>
+
+<string name="not_anonymous_yet">WARNING: Your traffic is not anonymous yet! Please configure your applications to use HTTP proxy 127.0.0.1:8118 or SOCKS4A or SOCKS5 proxy 127.0.0.1:9050</string>
+<string name="menu_home">Home</string>
+<string name="menu_browse">Browse</string>
+<string name="menu_settings">Settings</string>
+<string name="menu_log">Log</string>
+<string name="menu_info">Help</string>
+<string name="menu_apps">Apps</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stop</string>
+
+<string name="menu_about">About</string>
+<string name="menu_wizard">Wizard</string>
+
+
+
+<string name="button_help">Help</string>
+<string name="button_close">Close</string>
+<string name="button_about">About</string>
+
+<string name="button_clear_log">Clear Log</string>
+
+
+<string name="menu_verify">Check</string>
+<string name="menu_exit">Exit</string>
+<string name="powered_by">powered by the Tor Project</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Transparent Proxying (Requires Root)</string>
+<string name="pref_trans_proxy_title">Transparent Proxying</string>
+<string name="pref_trans_proxy_summary">Automatic Torifying of Apps</string>
+
+<string name="pref_transparent_all_title">Tor Everything</string>
+<string name="pref_transparent_all_summary">Proxy traffic for all apps through Tor</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Tor binaries successfully installed!</string>
+<string name="status_install_fail">The Tor binary files were unable to be installed. Please check the log and notify tor-assistants@xxxxxxxxxxxxxx</string>
+
+<string name="title_error">Application Error</string>
+
+<string name="wizard_title">Welcome to Orbot</string>
+
+<string name="wizard_btn_tell_me_more">About Orbot</string>
+<string name="btn_next">Next</string>
+<string name="btn_back">Back</string>
+<string name="btn_finish">Finish</string>
+
+<string name="btn_okay">Okay</string>
+<string name="btn_cancel">Cancel</string>
+
+
+ <!-- Welcome Wizard strings (DJH) -->
+    <string name="wizard_welcome_msg">Orbot brings Tor to Android. Tor is free software and an open network that helps you defend against a form of network surveillance that threatens personal freedom and privacy, confidential business activities and relationships, and state security known as traffic analysis.\n\n*WARNING:* Simply installing Orbot will _not_ magically anonymize your mobile traffic! This wizard will help you get started.</string>
+    <string name="wizard_details">Some Orbot Details</string>
+    <string name="wizard_details_msg">Orbot is an open-source application that contains Tor, LibEvent and Privoxy. It provides a local HTTP proxy (8118) and a SOCKS proxy (9050) into the Tor network. Orbot also has the ability, on rooted device, to send all internet traffic through Tor.</string>
+    <string name="wizard_permissions_root">Permission Granted</string>
+    <string name="wizard_permissions_stock">Orbot Permissions</string>
+    <string name="wizard_premissions_msg_root">Excellent! We\'ve detected that you have root permissions enabled for Orbot. We will use this power wisely.</string>
+    <string name="wizard_permissions_msg_stock"> While it is not required, Orbot can become a more powerful tool if your device has root access. Use the button below to grant Orbot superpowers! </string>
+   
+    <string name="wizard_permissions_no_root">If you don\'t have root access or have no idea what we\'re talking about, just be sure to use apps made to work with Orbot.</string>
+    <string name="wizard_permissions_consent">I understand and would like to continue without root</string>
+   
+    <string name="wizard_permission_enable_root">Grant Root for Orbot</string>
+    <string name="wizard_configure">Configure Torification</string>
+    <string name="wizard_configure_msg">Orbot gives you the option to route all application traffic through Tor OR to choose your applications individually.</string> 
+    <string name="wizard_configure_all">Proxy All Apps Through Tor</string>
+    <string name="wizard_configure_select_apps">Select Individual Apps for Tor</string>
+    
+    
+    <string name="wizard_tips_tricks">Orbot-enabled Apps</string>
+    <string name="wizard_tips_msg">We encourage you to download &amp; use apps that know how to connect directly to Orbot. Click on the buttons below to install.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (Android 1.x Only) - Browser designed for privacy &amp; for Orbot</string>
+    <string name="wizard_tips_proxy">Proxy Settings - Learn how to configure apps to work with Orbot</string>
+    
+    <string name="wizard_proxy_help_info">Proxy Settings</string>
+    <string name="wizard_proxy_help_msg">If the Android app you are using can support the use of an HTTP or SOCKS proxy, then you can configure it to connect to Orbot and use Tor.\n\n
+    The host settings is 127.0.0.1 or "localhost". For HTTP, the port setting is 8118. For SOCKS, the proxy is 9050. You should use SOCKS4A or SOCKS5 if possible.
+    \n\n
+    You can learn more about proxying on Android via the FAQ at: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">Orbot is ready!</string>
+    <string name="wizard_final_msg">Hundreds of thousands of people around the world use Tor for a wide variety of reasons: journalists and bloggers, human rights workers, law enforcement officers, soldiers, corporations, citizens of repressive regimes, and just ordinary citizens... and now you are ready to, as well!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+ <!-- END Welcome Wizard strings (DJH) -->
+
+	<string name="connect_first_time"> You\'ve successfully connected to the Tor network - but this does NOT mean your device is secure. You can use the \'Check\' option from the menu to test your browser. \n\nVisit us at https://guardianproject.info/apps/orbot or send an email to help@xxxxxxxxxxxxxxxxxxxx to learn more.</string>
+
+	<string name="tor_check">This will open your default web browser to https://check.torproject.org in order to see if Orbot is probably configured and you are connected to Tor.</string>
+
+	
+    <string name="pref_hs_group">Hidden Services</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ar/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">ØÙØØÙØ (Orbot)</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">ØØØ ÙØÙÙØÙ ØÙØ</string>
-    <string name="tor_proxy_service_process">ØØÙØ ÙÙÙÙ ØÙØ</string>
-   
-<string name="status_starting_up">ØÙØØÙØ ÙØØØ...</string>
-<string name="status_activated">ØÙØ ÙØØÙ ØØØÙØ ØÙØ</string>
-<string name="status_disabled">"ØÙ ØÙÙØÙ ØÙØØÙØ</string>
-<string name="status_shutting_down">ØØØÙ ØØÙØÙ ØÙØØÙØ</string>
-
-<string name="tor_process_connecting">ØØØ ØÙØ...</string>
-<string name="tor_process_connecting_step2">ØØØ ØÙØØÙÙ...</string>
-<string name="tor_process_connecting_step3">ÙÙØÙÙ.</string>
-<string name="tor_process_connecting_step4">ØÙØØØØ.</string>
-
-<string name="not_anonymous_yet">ØØØÙØ: ØØÙØ ÙØÙØÙ ÙÙØØ ØÙÙØ ØÙÙ ØÙØÙ! ÙÙ ÙØÙÙ ÙÙ ØØÙÙÙÙ ØÙØØØÙÙØØ ØÙØØØØ ØÙ ÙØØØØØØÙ HTTP proxy 127.0.0.1:8118 ØÙ SOCK4A ØÙ SOKS5 127.0.0.1:9050</string>
-<string name="menu_home">ØÙØÙØØ ØÙØØÙØÙØ</string>
-<string name="menu_browse">ØØÙÙØ</string>
-<string name="menu_settings">ØØØØØØØ</string>
-<string name="menu_log">ØÙØØÙ</string>
-<string name="menu_info">ÙØØØØØ</string>
-<string name="menu_apps">ØØØÙÙØØ</string>
-<string name="menu_start">ØØØ</string>
-<string name="menu_stop">ØÙÙØÙ</string>
-
-<string name="menu_about">ØÙÙ</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">ÙØØØØØ</string>
-<string name="button_close">ØØÙØÙ</string>
-<string name="button_about">ØÙÙ</string>
-
-<string name="button_clear_log">ÙØØ ØÙØØÙ</string>
-
-
-<string name="menu_verify">ÙØØ</string>
-<string name="menu_exit">ØØÙØ</string>
-<string name="powered_by">ØØØÙ ÙÙ ÙØØÙØ ØÙØ</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">ØÙÙÙØ ØÙÙÙÙ ØÙØ ÙØØÙØ ØÙ ØÙÙÙØ (ÙØØÙØ ØÙÙÙ ØÙÙØØÙÙ- Root-)</string>
-<string name="pref_trans_proxy_title">ØÙÙÙØ ØÙÙÙÙ ØÙØ ÙØØÙØ ØÙ ØÙÙÙØ</string>
-<string name="pref_trans_proxy_summary">ØÙÙÙØ ØÙØÙÙØÙ ØÙØÙÙØØÙÙÙØ ÙÙØØØÙÙØØ</string>
-
-<string name="pref_transparent_all_title">ØÙØ ÙÙ ØÙØ</string>
-<string name="pref_transparent_all_summary">ØØÙØ ÙØÙØ ØÙÙÙÙÙ ÙØÙÙØ ØÙØØØÙÙØØ ØØØ ØÙØ</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">ØÙ ØØØÙØ ØÙØØÙØØ ØÙØ ØÙØØØ!</string>
-<string name="status_install_fail">ØÙØ ÙØØØ ØÙÙ ØØØÙØ ÙÙÙØØ ØÙØØÙØØ ØÙØ. ÙØØÙ ØÙØØÙÙ ÙÙ ØÙØØÙ ÙØØÙØÙÙØ ØÙÙ ØÙØØÙØ ØÙØÙÙØØÙÙÙ tor-assistants@xxxxxxxxxxxxxx</string>
-
-<string name="title_error">ØØØ ÙÙ ØÙØØØÙÙ</string>
-
-<string name="wizard_title">ÙØØØØ ØÙ ÙÙ ØÙØØÙØ</string>
-
-<string name="wizard_btn_tell_me_more">ØÙ ØÙØØÙØ</string>
-<string name="btn_next">ØÙØØÙÙ</string>
-<string name="btn_back">ØØÙØ</string>
-<string name="btn_finish">ØÙÙØØ</string>
-
-<string name="btn_okay">ÙÙØÙÙ</string>
-<string name="btn_cancel">ØÙØØØ</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">ØÙØÙ ØÙØØÙØØ ØØØ ÙÙÙÙØ ØØØØÙØÙ ØÙØ ÙÙ ØÙØØÙÙØ. ØÙØ ÙÙ ØØÙØÙØ ÙØØÙÙ ÙØØÙØ ÙÙØÙØØ ØØØØØ ØÙÙ ØÙØÙØÙ ÙÙ ÙØØÙØØ ØÙØØÙØØ ØÙØÙ ØÙØØ ØÙØØÙØÙØ ÙØÙØØÙØ ØÙØØØÙØ ÙØÙØÙØÙØØ ÙØÙØÙØØØ ØÙØØØØÙØ ØÙØØÙØ ÙØÙØØØ ØÙØÙÙ ØÙÙØØÙÙØ ØØØÙ ØØÙÙÙ ØØÙØ ØÙÙØÙØ.
-
-*ØØØÙØ: *ØØØÙØ ØÙØØÙØ ØÙÙ ØÙØØÙ_ÙÙ_ÙÙÙÙ ØØØÙØØ ØØØÙØØ ØØÙØ ÙØÙØÙ ØØÙÙ ØØØÙ! ØÙÙ ÙØØØØÙ ÙØØ ØÙÙØØÙØ ØÙÙ ØÙØØØ.</string>
-    <string name="wizard_details">ØØØ ØÙØÙØØÙÙ ØÙ ØÙØØÙØ</string>
-    <string name="wizard_details_msg">ØÙØØÙØ ÙÙ ØØØÙÙ ÙÙØÙØ ØÙÙØØØ ÙØÙØÙ ÙØÙ ØÙØ, LibEvent ÙPrixovy. ÙØÙÙ ØÙÙ ØÙÙÙØ ÙÙÙÙ HTTP ÙØÙÙ (8118) ÙÙÙÙÙ SOCKS (9050) ØÙÙ ØØÙØ ØÙØ. ÙØÙÙØ ÙØÙ ØÙØØÙØ ØÙÙØØØ ØÙÙ ØØØØÙ ØÙÙØ ØØÙØØ ÙØÙØ ØÙØÙØØÙØ ÙÙ ØÙØÙ ØÙØ ØÙÙ ØÙØÙØØ ØØØ ØÙÙÙ ØÙÙØØÙÙ (root). </string>
-    <string name="wizard_permissions_root">ØÙ ÙÙØ ØÙØØÙ</string>
-    <string name="wizard_permissions_stock">ØØÙÙØØ ØÙØØÙØ</string>
-    <string name="wizard_premissions_msg_root">ÙÙØØØ! ÙÙØ ÙØØÙØ ØØÙÙ ÙØÙÙ ØØÙÙØØ ØÙÙÙ ØÙÙØØÙÙ (root) ÙØÙÙÙÙ ØÙØØÙØ. ØÙÙ ÙØØØØÙ ÙØÙ ØÙØÙØØ ØØÙÙØ.</string>
-    <string name="wizard_permissions_msg_stock">ØØÙ ØÙÙ ÙÙØ ØØÙØÙØØ ÙÙÙÙ ØÙ ÙØØØ ØÙØØÙØ ØØØØ ÙÙÙØ ØØØ ÙØÙ ÙØÙ ØÙØØÙ ØÙØØÙØ ØÙÙÙ ØÙÙØØÙÙ (root). ØØØØØÙ ØÙØØ ØØÙØØÙÙ ÙÙÙØ ØÙØØÙØ ÙÙØ ØÙØØ!</string>
-   
-    <string name="wizard_permissions_no_root">ØØØ ÙÙ ÙÙÙ ÙØÙÙ ØÙØØÙØ ØÙÙÙ ØÙÙØØÙÙ (root) ØÙ ÙÙØØ ÙØÙÙ ØØÙÙ ÙÙØØ ØÙØ ÙØØØØ ØÙÙØ ØØÙØ ÙÙØ ÙÙ ØØØØØØÙ ØØØÙÙØØ ØØÙÙ ÙØ ØÙØØÙØ.</string>
-    <string name="wizard_permissions_consent">ØÙÙÙ ØÙÙ ÙØÙØ ØÙ ØØØÙØ ØØÙÙ ØÙÙÙ ØÙÙØØÙÙ (root)</string>
-   
-    <string name="wizard_permission_enable_root">ÙÙØ ØÙØØÙØ ØÙÙÙ ØÙÙØØÙÙ (root)</string>
-    <string name="wizard_configure">ØÙÙÙÙ ØÙØÙÙØÙ</string>
-    <string name="wizard_configure_msg">ØÙØØÙØ ÙØØÙÙ ØÙØÙØØ ÙØÙØÙÙ ØÙÙØ ØØÙØØ ÙØÙØ ØÙØØØÙÙØØ ØØØ ØÙØ OR ÙØØØÙØØ ØØØÙÙØØÙ ØØÙÙ ÙØØÙ.</string> 
-    <string name="wizard_configure_all">ØÙÙÙÙ ØÙÙØ ØÙØØØÙÙØØ ØØØ ØÙØ</string>
-    <string name="wizard_configure_select_apps">ØØØØ ØÙØØØÙÙØØ ØÙÙØØÙØ ÙØÙØ</string>
-    
-    
-    <string name="wizard_tips_tricks">ØØØÙÙØØ ÙÙÙØØ ÙØÙØØÙØ</string>
-    <string name="wizard_tips_msg">ÙØØØÙÙ ØÙÙ ØØÙÙÙ ÙØØØØØØÙ ØÙØØØÙÙØØ ØÙØÙ ØØØÙ ÙÙÙÙØ ØÙØØØØÙ ÙØØØØØ ØØÙØØÙØ. ØØØØ ØÙÙ ØÙØØØØØ ÙÙ ØÙØØÙÙ ÙÙØØØÙØ.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (ØÙØØÙÙØ 1.x ÙÙØ) - ÙØØÙØ ÙØÙÙÙ ÙÙØØÙØÙØ ÙØÙØØÙØ </string>
-    <string name="wizard_tips_proxy">ØØØØØØØ ØÙÙÙÙÙ - ØØÙÙ ÙÙÙÙØ ØÙÙÙÙ ØÙØØØÙÙØØ ÙØØÙÙ ÙØ ØÙØØÙØ</string>
-    
-    <string name="wizard_proxy_help_info">ØØØØØØØ ØÙÙÙÙÙ</string>
-    <string name="wizard_proxy_help_msg">ØØØ ÙØÙ ØØØÙÙ ØÙØØÙÙØ ØÙØÙ ØØØØØÙÙ ÙÙÙÙ ØÙ ÙØØÙ ØØØØØØÙ ÙÙÙÙ HTTP ØÙ SOCKS , ØÙØÙØ ÙÙÙÙÙ ØÙÙÙÙÙ ÙÙØØØØÙ ØØÙØØÙØ ÙØØØØØØÙ ØÙØ.
-
-
-    ØØØØØØØ ØÙÙØØØÙÙ ÙÙ 127.0.0.1 ØÙ "ØÙÙØØØÙÙ ØÙÙØÙÙ". ØØÙÙØØØ ØÙÙ HTTP, ÙØÙ ØØØ ØÙÙÙÙØ ÙÙ 8118. ØØÙÙØØØ ØÙÙ SOCKS, ÙØÙ ØÙÙÙÙÙ ÙÙ 9050. ÙØØ ØÙÙÙ ØØØØØØÙ SOCKS4A ØÙ SOCKS5 ØØØ ØÙÙÙ.
-    
-
-
-    ÙÙÙÙÙ ÙØØÙØ ØÙÙØÙØ ØÙ ØÙÙÙØ ØÙÙÙÙ ØÙØ ÙØØÙØ ÙÙØÙØØÙÙØ ØÙ ØØÙÙ ØÙØØØÙØ ØÙÙØØØÙÙØ (FAQ)  ÙÙ: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">ØÙØØÙØ ØØÙØ!</string>
-    <string name="wizard_final_msg">ÙØØØ ØÙØÙØÙ ÙÙ ØÙÙØØ ÙÙ ØÙÙØ ØÙØØØ ØÙØØÙÙ ÙØØØØÙÙÙ ØÙØ ÙØØØØØ ØØÙØØ: ØÙØØÙÙÙÙ ÙØÙÙØÙÙÙÙØ ÙØÙØØÙÙÙÙ ÙÙ ÙØØÙ ØÙÙÙ ØÙØÙØØÙØ ÙØÙØÙÙØ ÙØÙØØÙØØ ÙØÙÙÙØØÙÙÙ ÙÙ ØÙØÙØÙØ ØÙÙÙØÙØØ ÙØÙÙÙØØÙÙÙ ØÙØØØÙÙÙ ... ÙØÙØÙ ØÙØ ÙØØØØ ÙØÙ ØØØØØÙÙ ÙØÙÙ!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time"> ÙÙØ ÙÙØ ØØØØØÙ ÙØØØ ØÙÙ ØØÙØ ØÙØ - ÙÙÙ ÙØØ ÙØ ÙØÙÙ ØØÙ ØÙØØÙ ÙÙ ÙØÙÙ. ÙÙÙÙÙ ØØØØØØÙ ØÙØØ \'ØØÙÙ\' ÙÙ ØÙÙØØÙØ ÙØØØØØØ ØÙÙØØÙØ ØÙØØØ ØÙ. 
-
- ÙÙ ØØÙØØØÙØ ØÙÙ https://guardianproject.info/apps/orbot ØÙ ØØØÙ ØØØÙØ ØÙÙØØÙÙÙØ ØÙÙ help@xxxxxxxxxxxxxxxxxxxx ÙÙØØÙØ ØÙÙØÙØ.</string>
-
-	<string name="tor_check">ØÙØØÙ ÙØØ ØÙÙ ÙØØ ØÙÙØØÙØ ØÙØÙØØØØÙ ØÙØØØ ØÙ ØÙÙ ØÙØÙÙØÙ https://check.torproject.org ÙÙ ØØÙ ØÙØØÙÙ ÙÙ ØÙÙÙÙ ØÙØØÙØ ØØÙÙ ØØÙØ ÙØØÙÙ ÙØØÙ ØØÙØ.</string>
-
-	
-    <string name="pref_hs_group">ØØÙØØ ØÙÙØ</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-ar/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">ØÙØØÙØ (Orbot)</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">ØØØ ÙØÙÙØÙ ØÙØ</string>
+    <string name="tor_proxy_service_process">ØØÙØ ÙÙÙÙ ØÙØ</string>
+   
+<string name="status_starting_up">ØÙØØÙØ ÙØØØ...</string>
+<string name="status_activated">ØÙØ ÙØØÙ ØØØÙØ ØÙØ</string>
+<string name="status_disabled">"ØÙ ØÙÙØÙ ØÙØØÙØ</string>
+<string name="status_shutting_down">ØØØÙ ØØÙØÙ ØÙØØÙØ</string>
+
+<string name="tor_process_connecting">ØØØ ØÙØ...</string>
+<string name="tor_process_connecting_step2">ØØØ ØÙØØÙÙ...</string>
+<string name="tor_process_connecting_step3">ÙÙØÙÙ.</string>
+<string name="tor_process_connecting_step4">ØÙØØØØ.</string>
+
+<string name="not_anonymous_yet">ØØØÙØ: ØØÙØ ÙØÙØÙ ÙÙØØ ØÙÙØ ØÙÙ ØÙØÙ! ÙÙ ÙØÙÙ ÙÙ ØØÙÙÙÙ ØÙØØØÙÙØØ ØÙØØØØ ØÙ ÙØØØØØØÙ HTTP proxy 127.0.0.1:8118 ØÙ SOCK4A ØÙ SOKS5 127.0.0.1:9050</string>
+<string name="menu_home">ØÙØÙØØ ØÙØØÙØÙØ</string>
+<string name="menu_browse">ØØÙÙØ</string>
+<string name="menu_settings">ØØØØØØØ</string>
+<string name="menu_log">ØÙØØÙ</string>
+<string name="menu_info">ÙØØØØØ</string>
+<string name="menu_apps">ØØØÙÙØØ</string>
+<string name="menu_start">ØØØ</string>
+<string name="menu_stop">ØÙÙØÙ</string>
+
+<string name="menu_about">ØÙÙ</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">ÙØØØØØ</string>
+<string name="button_close">ØØÙØÙ</string>
+<string name="button_about">ØÙÙ</string>
+
+<string name="button_clear_log">ÙØØ ØÙØØÙ</string>
+
+
+<string name="menu_verify">ÙØØ</string>
+<string name="menu_exit">ØØÙØ</string>
+<string name="powered_by">ØØØÙ ÙÙ ÙØØÙØ ØÙØ</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">ØÙÙÙØ ØÙÙÙÙ ØÙØ ÙØØÙØ ØÙ ØÙÙÙØ (ÙØØÙØ ØÙÙÙ ØÙÙØØÙÙ- Root-)</string>
+<string name="pref_trans_proxy_title">ØÙÙÙØ ØÙÙÙÙ ØÙØ ÙØØÙØ ØÙ ØÙÙÙØ</string>
+<string name="pref_trans_proxy_summary">ØÙÙÙØ ØÙØÙÙØÙ ØÙØÙÙØØÙÙÙØ ÙÙØØØÙÙØØ</string>
+
+<string name="pref_transparent_all_title">ØÙØ ÙÙ ØÙØ</string>
+<string name="pref_transparent_all_summary">ØØÙØ ÙØÙØ ØÙÙÙÙÙ ÙØÙÙØ ØÙØØØÙÙØØ ØØØ ØÙØ</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">ØÙ ØØØÙØ ØÙØØÙØØ ØÙØ ØÙØØØ!</string>
+<string name="status_install_fail">ØÙØ ÙØØØ ØÙÙ ØØØÙØ ÙÙÙØØ ØÙØØÙØØ ØÙØ. ÙØØÙ ØÙØØÙÙ ÙÙ ØÙØØÙ ÙØØÙØÙÙØ ØÙÙ ØÙØØÙØ ØÙØÙÙØØÙÙÙ tor-assistants@xxxxxxxxxxxxxx</string>
+
+<string name="title_error">ØØØ ÙÙ ØÙØØØÙÙ</string>
+
+<string name="wizard_title">ÙØØØØ ØÙ ÙÙ ØÙØØÙØ</string>
+
+<string name="wizard_btn_tell_me_more">ØÙ ØÙØØÙØ</string>
+<string name="btn_next">ØÙØØÙÙ</string>
+<string name="btn_back">ØØÙØ</string>
+<string name="btn_finish">ØÙÙØØ</string>
+
+<string name="btn_okay">ÙÙØÙÙ</string>
+<string name="btn_cancel">ØÙØØØ</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">ØÙØÙ ØÙØØÙØØ ØØØ ÙÙÙÙØ ØØØØÙØÙ ØÙØ ÙÙ ØÙØØÙÙØ. ØÙØ ÙÙ ØØÙØÙØ ÙØØÙÙ ÙØØÙØ ÙÙØÙØØ ØØØØØ ØÙÙ ØÙØÙØÙ ÙÙ ÙØØÙØØ ØÙØØÙØØ ØÙØÙ ØÙØØ ØÙØØÙØÙØ ÙØÙØØÙØ ØÙØØØÙØ ÙØÙØÙØÙØØ ÙØÙØÙØØØ ØÙØØØØÙØ ØÙØØÙØ ÙØÙØØØ ØÙØÙÙ ØÙÙØØÙÙØ ØØØÙ ØØÙÙÙ ØØÙØ ØÙÙØÙØ.
+
+*ØØØÙØ: *ØØØÙØ ØÙØØÙØ ØÙÙ ØÙØØÙ_ÙÙ_ÙÙÙÙ ØØØÙØØ ØØØÙØØ ØØÙØ ÙØÙØÙ ØØÙÙ ØØØÙ! ØÙÙ ÙØØØØÙ ÙØØ ØÙÙØØÙØ ØÙÙ ØÙØØØ.</string>
+    <string name="wizard_details">ØØØ ØÙØÙØØÙÙ ØÙ ØÙØØÙØ</string>
+    <string name="wizard_details_msg">ØÙØØÙØ ÙÙ ØØØÙÙ ÙÙØÙØ ØÙÙØØØ ÙØÙØÙ ÙØÙ ØÙØ, LibEvent ÙPrixovy. ÙØÙÙ ØÙÙ ØÙÙÙØ ÙÙÙÙ HTTP ÙØÙÙ (8118) ÙÙÙÙÙ SOCKS (9050) ØÙÙ ØØÙØ ØÙØ. ÙØÙÙØ ÙØÙ ØÙØØÙØ ØÙÙØØØ ØÙÙ ØØØØÙ ØÙÙØ ØØÙØØ ÙØÙØ ØÙØÙØØÙØ ÙÙ ØÙØÙ ØÙØ ØÙÙ ØÙØÙØØ ØØØ ØÙÙÙ ØÙÙØØÙÙ (root). </string>
+    <string name="wizard_permissions_root">ØÙ ÙÙØ ØÙØØÙ</string>
+    <string name="wizard_permissions_stock">ØØÙÙØØ ØÙØØÙØ</string>
+    <string name="wizard_premissions_msg_root">ÙÙØØØ! ÙÙØ ÙØØÙØ ØØÙÙ ÙØÙÙ ØØÙÙØØ ØÙÙÙ ØÙÙØØÙÙ (root) ÙØÙÙÙÙ ØÙØØÙØ. ØÙÙ ÙØØØØÙ ÙØÙ ØÙØÙØØ ØØÙÙØ.</string>
+    <string name="wizard_permissions_msg_stock">ØØÙ ØÙÙ ÙÙØ ØØÙØÙØØ ÙÙÙÙ ØÙ ÙØØØ ØÙØØÙØ ØØØØ ÙÙÙØ ØØØ ÙØÙ ÙØÙ ØÙØØÙ ØÙØØÙØ ØÙÙÙ ØÙÙØØÙÙ (root). ØØØØØÙ ØÙØØ ØØÙØØÙÙ ÙÙÙØ ØÙØØÙØ ÙÙØ ØÙØØ!</string>
+   
+    <string name="wizard_permissions_no_root">ØØØ ÙÙ ÙÙÙ ÙØÙÙ ØÙØØÙØ ØÙÙÙ ØÙÙØØÙÙ (root) ØÙ ÙÙØØ ÙØÙÙ ØØÙÙ ÙÙØØ ØÙØ ÙØØØØ ØÙÙØ ØØÙØ ÙÙØ ÙÙ ØØØØØØÙ ØØØÙÙØØ ØØÙÙ ÙØ ØÙØØÙØ.</string>
+    <string name="wizard_permissions_consent">ØÙÙÙ ØÙÙ ÙØÙØ ØÙ ØØØÙØ ØØÙÙ ØÙÙÙ ØÙÙØØÙÙ (root)</string>
+   
+    <string name="wizard_permission_enable_root">ÙÙØ ØÙØØÙØ ØÙÙÙ ØÙÙØØÙÙ (root)</string>
+    <string name="wizard_configure">ØÙÙÙÙ ØÙØÙÙØÙ</string>
+    <string name="wizard_configure_msg">ØÙØØÙØ ÙØØÙÙ ØÙØÙØØ ÙØÙØÙÙ ØÙÙØ ØØÙØØ ÙØÙØ ØÙØØØÙÙØØ ØØØ ØÙØ OR ÙØØØÙØØ ØØØÙÙØØÙ ØØÙÙ ÙØØÙ.</string> 
+    <string name="wizard_configure_all">ØÙÙÙÙ ØÙÙØ ØÙØØØÙÙØØ ØØØ ØÙØ</string>
+    <string name="wizard_configure_select_apps">ØØØØ ØÙØØØÙÙØØ ØÙÙØØÙØ ÙØÙØ</string>
+    
+    
+    <string name="wizard_tips_tricks">ØØØÙÙØØ ÙÙÙØØ ÙØÙØØÙØ</string>
+    <string name="wizard_tips_msg">ÙØØØÙÙ ØÙÙ ØØÙÙÙ ÙØØØØØØÙ ØÙØØØÙÙØØ ØÙØÙ ØØØÙ ÙÙÙÙØ ØÙØØØØÙ ÙØØØØØ ØØÙØØÙØ. ØØØØ ØÙÙ ØÙØØØØØ ÙÙ ØÙØØÙÙ ÙÙØØØÙØ.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (ØÙØØÙÙØ 1.x ÙÙØ) - ÙØØÙØ ÙØÙÙÙ ÙÙØØÙØÙØ ÙØÙØØÙØ </string>
+    <string name="wizard_tips_proxy">ØØØØØØØ ØÙÙÙÙÙ - ØØÙÙ ÙÙÙÙØ ØÙÙÙÙ ØÙØØØÙÙØØ ÙØØÙÙ ÙØ ØÙØØÙØ</string>
+    
+    <string name="wizard_proxy_help_info">ØØØØØØØ ØÙÙÙÙÙ</string>
+    <string name="wizard_proxy_help_msg">ØØØ ÙØÙ ØØØÙÙ ØÙØØÙÙØ ØÙØÙ ØØØØØÙÙ ÙÙÙÙ ØÙ ÙØØÙ ØØØØØØÙ ÙÙÙÙ HTTP ØÙ SOCKS , ØÙØÙØ ÙÙÙÙÙ ØÙÙÙÙÙ ÙÙØØØØÙ ØØÙØØÙØ ÙØØØØØØÙ ØÙØ.
+
+
+    ØØØØØØØ ØÙÙØØØÙÙ ÙÙ 127.0.0.1 ØÙ "ØÙÙØØØÙÙ ØÙÙØÙÙ". ØØÙÙØØØ ØÙÙ HTTP, ÙØÙ ØØØ ØÙÙÙÙØ ÙÙ 8118. ØØÙÙØØØ ØÙÙ SOCKS, ÙØÙ ØÙÙÙÙÙ ÙÙ 9050. ÙØØ ØÙÙÙ ØØØØØØÙ SOCKS4A ØÙ SOCKS5 ØØØ ØÙÙÙ.
+    
+
+
+    ÙÙÙÙÙ ÙØØÙØ ØÙÙØÙØ ØÙ ØÙÙÙØ ØÙÙÙÙ ØÙØ ÙØØÙØ ÙÙØÙØØÙÙØ ØÙ ØØÙÙ ØÙØØØÙØ ØÙÙØØØÙÙØ (FAQ)  ÙÙ: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">ØÙØØÙØ ØØÙØ!</string>
+    <string name="wizard_final_msg">ÙØØØ ØÙØÙØÙ ÙÙ ØÙÙØØ ÙÙ ØÙÙØ ØÙØØØ ØÙØØÙÙ ÙØØØØÙÙÙ ØÙØ ÙØØØØØ ØØÙØØ: ØÙØØÙÙÙÙ ÙØÙÙØÙÙÙÙØ ÙØÙØØÙÙÙÙ ÙÙ ÙØØÙ ØÙÙÙ ØÙØÙØØÙØ ÙØÙØÙÙØ ÙØÙØØÙØØ ÙØÙÙÙØØÙÙÙ ÙÙ ØÙØÙØÙØ ØÙÙÙØÙØØ ÙØÙÙÙØØÙÙÙ ØÙØØØÙÙÙ ... ÙØÙØÙ ØÙØ ÙØØØØ ÙØÙ ØØØØØÙÙ ÙØÙÙ!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time"> ÙÙØ ÙÙØ ØØØØØÙ ÙØØØ ØÙÙ ØØÙØ ØÙØ - ÙÙÙ ÙØØ ÙØ ÙØÙÙ ØØÙ ØÙØØÙ ÙÙ ÙØÙÙ. ÙÙÙÙÙ ØØØØØØÙ ØÙØØ \'ØØÙÙ\' ÙÙ ØÙÙØØÙØ ÙØØØØØØ ØÙÙØØÙØ ØÙØØØ ØÙ. 
+
+ ÙÙ ØØÙØØØÙØ ØÙÙ https://guardianproject.info/apps/orbot ØÙ ØØØÙ ØØØÙØ ØÙÙØØÙÙÙØ ØÙÙ help@xxxxxxxxxxxxxxxxxxxx ÙÙØØÙØ ØÙÙØÙØ.</string>
+
+	<string name="tor_check">ØÙØØÙ ÙØØ ØÙÙ ÙØØ ØÙÙØØÙØ ØÙØÙØØØØÙ ØÙØØØ ØÙ ØÙÙ ØÙØÙÙØÙ https://check.torproject.org ÙÙ ØØÙ ØÙØØÙÙ ÙÙ ØÙÙÙÙ ØÙØØÙØ ØØÙÙ ØØÙØ ÙØØÙÙ ÙØØÙ ØØÙØ.</string>
+
+	
+    <string name="pref_hs_group">ØØÙØØ ØÙÙØ</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ca/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">Engega o atura Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot s\'està iniciant...</string>
-<string name="status_activated">Connectat a la xarxa Tor</string>
-<string name="status_disabled">Orbot està desactivat</string>
-<string name="status_shutting_down">Orbot s\'està aturant</string>
-
-<string name="tor_process_connecting">Iniciant Tor...</string>
-<string name="tor_process_connecting_step2">Preparant el control...</string>
-<string name="tor_process_connecting_step3">acomplert.</string>
-<string name="tor_process_connecting_step4">esperant.</string>
-
-<string name="not_anonymous_yet">ATENCIà : El trÃnsit de la teva connexià ja no es anÃnim! Siusplau, configura les teves aplicacions per a usar HTTP proxy 127.0.0.1:8118, per SOCKS4A o SOCKS5 proxy 127.0.0.1:9050</string>
-<string name="menu_home">Lloc d\'inici</string>
-<string name="menu_browse">Navega</string>
-<string name="menu_settings">PreferÃncies</string>
-<string name="menu_log">Registre</string>
-<string name="menu_info">Ajut</string>
-<string name="menu_apps">Aplicacions</string>
-<string name="menu_start">Inici</string>
-<string name="menu_stop">Atura</string>
-
-<string name="menu_about">Quant a...</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Ajut</string>
-<string name="button_close">Tanca</string>
-<string name="button_about">Quant a...</string>
-
-<string name="button_clear_log">Esborra el registre</string>
-
-
-<string name="menu_verify">Prova</string>
-<string name="menu_exit">Surt</string>
-<string name="powered_by">Funciona grÃcies al Projecte Tor</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Utilitza un proxy transparent (requereix accÃs)</string>
-<string name="pref_trans_proxy_title">Utilitza un proxy transparent</string>
-<string name="pref_trans_proxy_summary">Automatitza Tor per a les aplicacions</string>
-
-<string name="pref_transparent_all_title">Automatitza Tor per a tot</string>
-<string name="pref_transparent_all_summary">Canalitza tot el trÃnsit de proxy de les aplicacions per Tor</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Binaris de Tor instalÂlats correctament!</string>
-<string name="status_install_fail">Els fitxers binaris de Tor no s\'han pogut instalar. Per favor, comprova el registre i notifica-ho a tor-assistants@xxxxxxxxxxxxxx</string>
-
-<string name="title_error">Error de l\'aplicaciÃ</string>
-
-<string name="wizard_title">Benvingut/da a Orbot</string>
-
-<string name="wizard_btn_tell_me_more">Quant a Orbot...</string>
-<string name="btn_next">SegÃent</string>
-<string name="btn_back">Enrere</string>
-<string name="btn_finish">Fi</string>
-
-<string name="btn_okay">D\'acord</string>
-<string name="btn_cancel">CancelÂla</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot et porta Tor a l\'Android. Tor Ãs programari lliure i una xarxa oberta que t\'ajuda a defensar-te d\'una vigilÃncia a travÃs de la xarxa, amenaÃant la teva privacitat i llibertat personal, informacià confidencial, activitats i relacions, i seguretat estatal coneguda com anÃlisi de trÃnsit.
-
-*ALERTA:* InstalÂlar Orbot _no_ convertirà la teva connexià en anÃnima instantÃniament! Aquest assistent t\'ajudarà a comenÃar.</string>
-    <string name="wizard_details">Alguns detalls d\'Orbot...</string>
-    <string name="wizard_details_msg">Orbot Ãs una aplicacià de codi lliure que contà Tor, LibEvent i Privoxy. Proporciona un Proxy HTTP local (8118) i un proxy SOCKS (9050) a la xarxa Tor. Orbot tambà tà capacitat d\'enviar tot el trÃnsit de dades d\'internet a travÃs de Tor.</string>
-    <string name="wizard_permissions_root">PermÃs concedit</string>
-    <string name="wizard_permissions_stock">Permisos d\'Orbot</string>
-    <string name="wizard_premissions_msg_root">Perfecte! Hem detectat que tens els permisos matriu activats per a Orbot. Utilitzarem aquest poder sÃviament.</string>
-    <string name="wizard_permissions_msg_stock">Encara que no Ãs imprescindible, Orbot pot esdevenir una eina molt mÃs potent si el teu terminal tà accÃs complet. Utilitza el botà d\'aquà sota per conferir superpoders a Orbot!</string>
-   
-    <string name="wizard_permissions_no_root">Si no tens accÃs complet, o no tens ni idea del quà t\'estem parlant, simplement assegura\'t d\'utilitzar aplicacions fetes per a funcionar amb Orbot.</string>
-    <string name="wizard_permissions_consent">Ho entenc i vull continuar sense accÃs complet.</string>
-   
-    <string name="wizard_permission_enable_root">Concedeix accÃs complet a Orbot</string>
-    <string name="wizard_configure">Configura la connexià a Tor</string>
-    <string name="wizard_configure_msg">Orbot t\'ofereix l\'opcià de conduir el trÃnsit de totes les aplicacions per Tor o bà escollir quines aplicacions vols utilitzar amb Tor.</string> 
-    <string name="wizard_configure_all">Connecta totes les aplicacions per Proxy per Tor.</string>
-    <string name="wizard_configure_select_apps">Selecciona aplicacions individuals per a funcionar amb Tor</string>
-    
-    
-    <string name="wizard_tips_tricks">Aplicacions per a usar-se amb Orbot</string>
-    <string name="wizard_tips_msg">T\'animem a descarregar-te &amp; utilitza aplicacions que sÃpiguen com connectar-se directament a Orbot. Fes clic als botons de sota per instalÂlar.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (NomÃs Android 1.x) - Navegador dissenyat per la privacitat &amp; per a Orbot</string>
-    <string name="wizard_tips_proxy">Coniguracià de Proxy - AprÃn a configurar aplicacions per a quà funcionin amb Orbot</string>
-    
-    <string name="wizard_proxy_help_info">Configuracià de Proxy</string>
-    <string name="wizard_proxy_help_msg">Si l\'aplicacià d\'Android que estÃs utilitzant admet l\'Ãs d\'un proxy HTTP o SOCKS, pots configurar-la per a connectar-se a Orbot i utilitzar Tor.
-
-
-La configuracià de l\'amfitrià Ãs 127.0.0.1 o "localhost". Per a HTTP, el port actiu Ãs 8118. Per a SOCKS, el proxy Ãs 9050. Hauries d\'utlitzar SOCKS4A o SOCKS5 si Ãs possible.
-
-
-
-Pots aprendre mÃs coses sobre l\'Ãs dels proxys a Android al FAQ de: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">Orbot Ãs a punt!</string>
-    <string name="wizard_final_msg">Centenars de milers de persones arreu del mÃn utilitzen Tor per un gran ventall de raons: periodistes i blocaires, treballadors pels drets humans, agents de l\'autoritat, soldats, corporacions, ciutadans de rÃgims opressors, i ciutadans qualssevol... I ara tu tambà ho pots fer!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">T\'has connectat correctament a la xarxa Tor, perà aixà NO vol dir que el teu dispositiu sigui segur. Pots utilitzar la opcià \'Comprova\' del menà per provar el teu navegador. 
-
-Visita\'ns a https://guardianproject.info/apps/orbot o envia\'ns un correu electrÃnic a help@xxxxxxxxxxxxxxxxxxxx per a saber-ne mÃs.</string>
-
-	<string name="tor_check">Aixà obrirà el teu navegador web per defecte i es connectarà a https://check.torproject.org per tal de comprovar si Orbot està configurat correctament i estÃs connectat/da a Tor.</string>
-
-	
-    <string name="pref_hs_group">Serveis ocults</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-ca/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">Engega o atura Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot s\'està iniciant...</string>
+<string name="status_activated">Connectat a la xarxa Tor</string>
+<string name="status_disabled">Orbot està desactivat</string>
+<string name="status_shutting_down">Orbot s\'està aturant</string>
+
+<string name="tor_process_connecting">Iniciant Tor...</string>
+<string name="tor_process_connecting_step2">Preparant el control...</string>
+<string name="tor_process_connecting_step3">acomplert.</string>
+<string name="tor_process_connecting_step4">esperant.</string>
+
+<string name="not_anonymous_yet">ATENCIà : El trÃnsit de la teva connexià ja no es anÃnim! Siusplau, configura les teves aplicacions per a usar HTTP proxy 127.0.0.1:8118, per SOCKS4A o SOCKS5 proxy 127.0.0.1:9050</string>
+<string name="menu_home">Lloc d\'inici</string>
+<string name="menu_browse">Navega</string>
+<string name="menu_settings">PreferÃncies</string>
+<string name="menu_log">Registre</string>
+<string name="menu_info">Ajut</string>
+<string name="menu_apps">Aplicacions</string>
+<string name="menu_start">Inici</string>
+<string name="menu_stop">Atura</string>
+
+<string name="menu_about">Quant a...</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Ajut</string>
+<string name="button_close">Tanca</string>
+<string name="button_about">Quant a...</string>
+
+<string name="button_clear_log">Esborra el registre</string>
+
+
+<string name="menu_verify">Prova</string>
+<string name="menu_exit">Surt</string>
+<string name="powered_by">Funciona grÃcies al Projecte Tor</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Utilitza un proxy transparent (requereix accÃs)</string>
+<string name="pref_trans_proxy_title">Utilitza un proxy transparent</string>
+<string name="pref_trans_proxy_summary">Automatitza Tor per a les aplicacions</string>
+
+<string name="pref_transparent_all_title">Automatitza Tor per a tot</string>
+<string name="pref_transparent_all_summary">Canalitza tot el trÃnsit de proxy de les aplicacions per Tor</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Binaris de Tor instalÂlats correctament!</string>
+<string name="status_install_fail">Els fitxers binaris de Tor no s\'han pogut instalar. Per favor, comprova el registre i notifica-ho a tor-assistants@xxxxxxxxxxxxxx</string>
+
+<string name="title_error">Error de l\'aplicaciÃ</string>
+
+<string name="wizard_title">Benvingut/da a Orbot</string>
+
+<string name="wizard_btn_tell_me_more">Quant a Orbot...</string>
+<string name="btn_next">SegÃent</string>
+<string name="btn_back">Enrere</string>
+<string name="btn_finish">Fi</string>
+
+<string name="btn_okay">D\'acord</string>
+<string name="btn_cancel">CancelÂla</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot et porta Tor a l\'Android. Tor Ãs programari lliure i una xarxa oberta que t\'ajuda a defensar-te d\'una vigilÃncia a travÃs de la xarxa, amenaÃant la teva privacitat i llibertat personal, informacià confidencial, activitats i relacions, i seguretat estatal coneguda com anÃlisi de trÃnsit.
+
+*ALERTA:* InstalÂlar Orbot _no_ convertirà la teva connexià en anÃnima instantÃniament! Aquest assistent t\'ajudarà a comenÃar.</string>
+    <string name="wizard_details">Alguns detalls d\'Orbot...</string>
+    <string name="wizard_details_msg">Orbot Ãs una aplicacià de codi lliure que contà Tor, LibEvent i Privoxy. Proporciona un Proxy HTTP local (8118) i un proxy SOCKS (9050) a la xarxa Tor. Orbot tambà tà capacitat d\'enviar tot el trÃnsit de dades d\'internet a travÃs de Tor.</string>
+    <string name="wizard_permissions_root">PermÃs concedit</string>
+    <string name="wizard_permissions_stock">Permisos d\'Orbot</string>
+    <string name="wizard_premissions_msg_root">Perfecte! Hem detectat que tens els permisos matriu activats per a Orbot. Utilitzarem aquest poder sÃviament.</string>
+    <string name="wizard_permissions_msg_stock">Encara que no Ãs imprescindible, Orbot pot esdevenir una eina molt mÃs potent si el teu terminal tà accÃs complet. Utilitza el botà d\'aquà sota per conferir superpoders a Orbot!</string>
+   
+    <string name="wizard_permissions_no_root">Si no tens accÃs complet, o no tens ni idea del quà t\'estem parlant, simplement assegura\'t d\'utilitzar aplicacions fetes per a funcionar amb Orbot.</string>
+    <string name="wizard_permissions_consent">Ho entenc i vull continuar sense accÃs complet.</string>
+   
+    <string name="wizard_permission_enable_root">Concedeix accÃs complet a Orbot</string>
+    <string name="wizard_configure">Configura la connexià a Tor</string>
+    <string name="wizard_configure_msg">Orbot t\'ofereix l\'opcià de conduir el trÃnsit de totes les aplicacions per Tor o bà escollir quines aplicacions vols utilitzar amb Tor.</string> 
+    <string name="wizard_configure_all">Connecta totes les aplicacions per Proxy per Tor.</string>
+    <string name="wizard_configure_select_apps">Selecciona aplicacions individuals per a funcionar amb Tor</string>
+    
+    
+    <string name="wizard_tips_tricks">Aplicacions per a usar-se amb Orbot</string>
+    <string name="wizard_tips_msg">T\'animem a descarregar-te &amp; utilitza aplicacions que sÃpiguen com connectar-se directament a Orbot. Fes clic als botons de sota per instalÂlar.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (NomÃs Android 1.x) - Navegador dissenyat per la privacitat &amp; per a Orbot</string>
+    <string name="wizard_tips_proxy">Coniguracià de Proxy - AprÃn a configurar aplicacions per a quà funcionin amb Orbot</string>
+    
+    <string name="wizard_proxy_help_info">Configuracià de Proxy</string>
+    <string name="wizard_proxy_help_msg">Si l\'aplicacià d\'Android que estÃs utilitzant admet l\'Ãs d\'un proxy HTTP o SOCKS, pots configurar-la per a connectar-se a Orbot i utilitzar Tor.
+
+
+La configuracià de l\'amfitrià Ãs 127.0.0.1 o "localhost". Per a HTTP, el port actiu Ãs 8118. Per a SOCKS, el proxy Ãs 9050. Hauries d\'utlitzar SOCKS4A o SOCKS5 si Ãs possible.
+
+
+
+Pots aprendre mÃs coses sobre l\'Ãs dels proxys a Android al FAQ de: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">Orbot Ãs a punt!</string>
+    <string name="wizard_final_msg">Centenars de milers de persones arreu del mÃn utilitzen Tor per un gran ventall de raons: periodistes i blocaires, treballadors pels drets humans, agents de l\'autoritat, soldats, corporacions, ciutadans de rÃgims opressors, i ciutadans qualssevol... I ara tu tambà ho pots fer!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">T\'has connectat correctament a la xarxa Tor, perà aixà NO vol dir que el teu dispositiu sigui segur. Pots utilitzar la opcià \'Comprova\' del menà per provar el teu navegador. 
+
+Visita\'ns a https://guardianproject.info/apps/orbot o envia\'ns un correu electrÃnic a help@xxxxxxxxxxxxxxxxxxxx per a saber-ne mÃs.</string>
+
+	<string name="tor_check">Aixà obrirà el teu navegador web per defecte i es connectarà a https://check.torproject.org per tal de comprovar si Orbot està configurat correctament i estÃs connectat/da a Tor.</string>
+
+	
+    <string name="pref_hs_group">Serveis ocults</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-de/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">starte und beende Tor</string>
-    <string name="tor_proxy_service_process">Tor Proxydienst</string>
-   
-<string name="status_starting_up">Orbot startet...</string>
-<string name="status_activated">Verbunden mit dem Tor-Netzwerk</string>
-<string name="status_disabled">"Orbot ist deaktiviert</string>
-<string name="status_shutting_down">Orbot wird beendet</string>
-
-<string name="tor_process_connecting">Starte Tor...</string>
-<string name="tor_process_connecting_step2">Baue Kontrollverbindung auf...</string>
-<string name="tor_process_connecting_step3">erfolgreich abgeschlossen.</string>
-<string name="tor_process_connecting_step4">warte.</string>
-
-<string name="not_anonymous_yet">WARNUNG: Die Verbindung ist noch nicht anonymisiert! Bitte stellen Sie Ihre Programme so ein, dass sie entwederden  HTTP proxy 127.0.0.1:8118, SOCKS4A oder SOCKS proxy 127.0.0.1:9050 nutzen.</string>
-<string name="menu_home">Home</string>
-<string name="menu_browse">DurchstÃbern</string>
-<string name="menu_settings">Einstellungen</string>
-<string name="menu_log">Log</string>
-<string name="menu_info">Hilfe</string>
-<string name="menu_apps">Apps</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stop</string>
-
-<string name="menu_about">Ãber</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Hilfe</string>
-<string name="button_close">SchlieÃen</string>
-<string name="button_about">Ãber</string>
-
-<string name="button_clear_log">Log lÃschen</string>
-
-
-<string name="menu_verify">ÃberprÃfen</string>
-<string name="menu_exit">Beenden</string>
-<string name="powered_by">ermÃglicht durch das Tor Projekt</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Transparenter Proxy (benÃtigt Administratorrechte)</string>
-<string name="pref_trans_proxy_title">Transparenter Proxy</string>
-<string name="pref_trans_proxy_summary">Anwendungen automatisch durch Tor leiten</string>
-
-<string name="pref_transparent_all_title">Alles durch Tor leiten</string>
-<string name="pref_transparent_all_summary">Verbindungen aller Anwendungen durch Tor leiten</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Die Tor-Pakete wurden erfolgreich installiert!</string>
-<string name="status_install_fail">Die Tor-Pakete konnten nicht erfolgreich installiert werden. Bitte prÃfen Sie das Logfile und wenden Sie sich an tor-assistants@xxxxxxxxxxxxxxx</string>
-
-<string name="title_error">Anwendungsfehler</string>
-
-<string name="wizard_title">Willkommen bei Orbot</string>
-
-<string name="wizard_btn_tell_me_more">Ãber Orbot</string>
-<string name="btn_next">Weiter</string>
-<string name="btn_back">ZurÃck</string>
-<string name="btn_finish">Fertigstellen</string>
-
-<string name="btn_okay">OK</string>
-<string name="btn_cancel">Abbrechen</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot bringt Tor auf Android GerÃte. Tor ist ein freies Programm und ein offenes Netzwerk, dass Ihnen hilft sich gegen DatenverkehrsÃberwachung zu wehren, eine Form der OnlineÃberwachung, die Ihre persÃnliche Freiheit, PrivatsphÃre, vertrauliche GeschÃfte und GeschÃftseziehungen bedroht.
-
-*WARNUNG:* Durch die Installation von Orbot wird _nicht_ sofort Ihr kompletter Datenverkehr anonymisiert! Hilfestellung erhalten Sie von diesem Assitenten.</string>
-    <string name="wizard_details">NÃhere Informationen zu Orbot</string>
-    <string name="wizard_details_msg">Orbot ist eine quelloffene Anwendung die Tor, LibEvent und Privoxy enthÃlt. Es stellt einen lokalen HTTP Proxy (8118) und einen SOCKS Proxy (9050) zum Tor-Netzwerk zur VerfÃgung. Orbot hat auf einem System mit Administrationsrechten auch die FÃhigkeit, jeglichen Internetverkehr Ãber das Tor-Netzwerk abzuwickeln.</string>
-    <string name="wizard_permissions_root">Erlaubnis erteilt</string>
-    <string name="wizard_permissions_stock">Orbot Rechte</string>
-    <string name="wizard_premissions_msg_root">Exzellent! Wir haben festgestellt, dass Sie Orbot Administrator-Rechte eingerÃumt haben. Wir werden diese Macht weise nutzen.</string>
-    <string name="wizard_permissions_msg_stock">Obwohl es nicht nÃtig ist, kann Orbot ein mÃchtigeres Tool werden, wenn Sie ihm Administrator-Rechte einrÃumen. DrÃcken Sie auf den Kopf unten um Orbot diese SuperkrÃfte einzurÃumen.</string>
-   
-    <string name="wizard_permissions_no_root">Falls Sie keinen Administrator-Zugang haben oder nicht wissen was das ist, stellen Sie sicher, dass Sie Anwendungen benutzen die mit Orbot kompatibel kÃnnen.</string>
-    <string name="wizard_permissions_consent">Ich habe verstanden und mÃchte ohne Administrator-Rechte weitermachen.</string>
-   
-    <string name="wizard_permission_enable_root">Orbot Administrator-Rechte einrÃumen</string>
-    <string name="wizard_configure">Configure Torification</string>
-    <string name="wizard_configure_msg">Orbot gibt Ihnen die Wahl den Datenverkehr aller Programme durch Tor zu leiten ODER die Wahl fÃr alle Programme einzeln zu treffen.</string> 
-    <string name="wizard_configure_all">Den Verkehr aller Programme durch Tor leiten</string>
-    <string name="wizard_configure_select_apps">Programme einzeln wÃhlen</string>
-    
-    
-    <string name="wizard_tips_tricks">Programme, fÃr die Orbot aktiviert ist</string>
-    <string name="wizard_tips_msg">Wir raten Ihnen Programme herunterzuladen &amp; zu nutzen, die wissen, wie sie sich direkt mit Orbot verbinden. Klicken Sie zum Installieren auf den Knopf unten.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (Nur Android 1.x) - Ein fÃr PrivatsphÃre &amp; Orbot entworfener Browser</string>
-    <string name="wizard_tips_proxy">Proxy-Einstellungen - Lernen Sie Anwendungen so zu konfigurieren, dass sie mit Orbot zusammenarbeiten.</string>
-    
-    <string name="wizard_proxy_help_info">Proxy-Einstellungen</string>
-    <string name="wizard_proxy_help_msg">Wenn das Android-Programm, das Sie benutzten die Verwendung von HTTP- oder SOCKS-Proxys unterstÃtzt, kÃnnen Sie es konfigurieren sich mit Orbot zu verbinden und Tor zu nutzen.
-
-
-Die Host-Einstellungen sind 127.0.0.1 oder "localhost". Die Port-Einstellungen sind 8118 fÃr HTTP und 9050 fÃr SOCKS. Sie sollten versuchen SOCKS4A oder SOCKS5 zu benutzen.
-
-
-
-Erfahren Sie mehr Ãber die Verwendung von Proxys unter Android in den FAQ unter http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">Orbot ist bereit!</string>
-    <string name="wizard_final_msg">Hunderttausende Menschen auf der ganzen Welt nutzen Tor aus einer Vielzahl von GrÃnden: Journalisten und Blogger, Menschenrechtsaktivisten, StrafverfolgungsbehÃrden, Soldaten, Unternehmen, BÃrger repressiver Regime und ganz normale Menschen... und sind Sie ebenfalls bereit!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">Sie haben sich erfolgreich mit dem Tor-Netzwerk verbunden - das bedeutet aber NICHT, dass Ihr GerÃt sicher ist. Sie kÃnnen die \'ÃberprÃfen\'-Option aus dem Menà benutzen, um Ihren Browser zu testen. 
-
-Besuchen Sie https://guardianproject.info/apps/orbot oder senden Sie eine E-Mail an help@xxxxxxxxxxxxxxxxxxxx um mehr zu erfahren.</string>
-
-	<string name="tor_check">Das wird die Seite https://check.torproject.org in Ihrem Webbrowser Ãffnen, so dass Sie ÃberprÃfen kÃnnen, ob Orbot richtig configuriert ist und Sie mit Tor verbunden sind.</string>
-
-	
-    <string name="pref_hs_group">Versteckte Dienste</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-de/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">starte und beende Tor</string>
+    <string name="tor_proxy_service_process">Tor Proxydienst</string>
+   
+<string name="status_starting_up">Orbot startet...</string>
+<string name="status_activated">Verbunden mit dem Tor-Netzwerk</string>
+<string name="status_disabled">"Orbot ist deaktiviert</string>
+<string name="status_shutting_down">Orbot wird beendet</string>
+
+<string name="tor_process_connecting">Starte Tor...</string>
+<string name="tor_process_connecting_step2">Baue Kontrollverbindung auf...</string>
+<string name="tor_process_connecting_step3">erfolgreich abgeschlossen.</string>
+<string name="tor_process_connecting_step4">warte.</string>
+
+<string name="not_anonymous_yet">WARNUNG: Die Verbindung ist noch nicht anonymisiert! Bitte stellen Sie Ihre Programme so ein, dass sie entwederden  HTTP proxy 127.0.0.1:8118, SOCKS4A oder SOCKS proxy 127.0.0.1:9050 nutzen.</string>
+<string name="menu_home">Home</string>
+<string name="menu_browse">DurchstÃbern</string>
+<string name="menu_settings">Einstellungen</string>
+<string name="menu_log">Log</string>
+<string name="menu_info">Hilfe</string>
+<string name="menu_apps">Apps</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stop</string>
+
+<string name="menu_about">Ãber</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Hilfe</string>
+<string name="button_close">SchlieÃen</string>
+<string name="button_about">Ãber</string>
+
+<string name="button_clear_log">Log lÃschen</string>
+
+
+<string name="menu_verify">ÃberprÃfen</string>
+<string name="menu_exit">Beenden</string>
+<string name="powered_by">ermÃglicht durch das Tor Projekt</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Transparenter Proxy (benÃtigt Administratorrechte)</string>
+<string name="pref_trans_proxy_title">Transparenter Proxy</string>
+<string name="pref_trans_proxy_summary">Anwendungen automatisch durch Tor leiten</string>
+
+<string name="pref_transparent_all_title">Alles durch Tor leiten</string>
+<string name="pref_transparent_all_summary">Verbindungen aller Anwendungen durch Tor leiten</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Die Tor-Pakete wurden erfolgreich installiert!</string>
+<string name="status_install_fail">Die Tor-Pakete konnten nicht erfolgreich installiert werden. Bitte prÃfen Sie das Logfile und wenden Sie sich an tor-assistants@xxxxxxxxxxxxxxx</string>
+
+<string name="title_error">Anwendungsfehler</string>
+
+<string name="wizard_title">Willkommen bei Orbot</string>
+
+<string name="wizard_btn_tell_me_more">Ãber Orbot</string>
+<string name="btn_next">Weiter</string>
+<string name="btn_back">ZurÃck</string>
+<string name="btn_finish">Fertigstellen</string>
+
+<string name="btn_okay">OK</string>
+<string name="btn_cancel">Abbrechen</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot bringt Tor auf Android GerÃte. Tor ist ein freies Programm und ein offenes Netzwerk, dass Ihnen hilft sich gegen DatenverkehrsÃberwachung zu wehren, eine Form der OnlineÃberwachung, die Ihre persÃnliche Freiheit, PrivatsphÃre, vertrauliche GeschÃfte und GeschÃftseziehungen bedroht.
+
+*WARNUNG:* Durch die Installation von Orbot wird _nicht_ sofort Ihr kompletter Datenverkehr anonymisiert! Hilfestellung erhalten Sie von diesem Assitenten.</string>
+    <string name="wizard_details">NÃhere Informationen zu Orbot</string>
+    <string name="wizard_details_msg">Orbot ist eine quelloffene Anwendung die Tor, LibEvent und Privoxy enthÃlt. Es stellt einen lokalen HTTP Proxy (8118) und einen SOCKS Proxy (9050) zum Tor-Netzwerk zur VerfÃgung. Orbot hat auf einem System mit Administrationsrechten auch die FÃhigkeit, jeglichen Internetverkehr Ãber das Tor-Netzwerk abzuwickeln.</string>
+    <string name="wizard_permissions_root">Erlaubnis erteilt</string>
+    <string name="wizard_permissions_stock">Orbot Rechte</string>
+    <string name="wizard_premissions_msg_root">Exzellent! Wir haben festgestellt, dass Sie Orbot Administrator-Rechte eingerÃumt haben. Wir werden diese Macht weise nutzen.</string>
+    <string name="wizard_permissions_msg_stock">Obwohl es nicht nÃtig ist, kann Orbot ein mÃchtigeres Tool werden, wenn Sie ihm Administrator-Rechte einrÃumen. DrÃcken Sie auf den Kopf unten um Orbot diese SuperkrÃfte einzurÃumen.</string>
+   
+    <string name="wizard_permissions_no_root">Falls Sie keinen Administrator-Zugang haben oder nicht wissen was das ist, stellen Sie sicher, dass Sie Anwendungen benutzen die mit Orbot kompatibel kÃnnen.</string>
+    <string name="wizard_permissions_consent">Ich habe verstanden und mÃchte ohne Administrator-Rechte weitermachen.</string>
+   
+    <string name="wizard_permission_enable_root">Orbot Administrator-Rechte einrÃumen</string>
+    <string name="wizard_configure">Configure Torification</string>
+    <string name="wizard_configure_msg">Orbot gibt Ihnen die Wahl den Datenverkehr aller Programme durch Tor zu leiten ODER die Wahl fÃr alle Programme einzeln zu treffen.</string> 
+    <string name="wizard_configure_all">Den Verkehr aller Programme durch Tor leiten</string>
+    <string name="wizard_configure_select_apps">Programme einzeln wÃhlen</string>
+    
+    
+    <string name="wizard_tips_tricks">Programme, fÃr die Orbot aktiviert ist</string>
+    <string name="wizard_tips_msg">Wir raten Ihnen Programme herunterzuladen &amp; zu nutzen, die wissen, wie sie sich direkt mit Orbot verbinden. Klicken Sie zum Installieren auf den Knopf unten.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (Nur Android 1.x) - Ein fÃr PrivatsphÃre &amp; Orbot entworfener Browser</string>
+    <string name="wizard_tips_proxy">Proxy-Einstellungen - Lernen Sie Anwendungen so zu konfigurieren, dass sie mit Orbot zusammenarbeiten.</string>
+    
+    <string name="wizard_proxy_help_info">Proxy-Einstellungen</string>
+    <string name="wizard_proxy_help_msg">Wenn das Android-Programm, das Sie benutzten die Verwendung von HTTP- oder SOCKS-Proxys unterstÃtzt, kÃnnen Sie es konfigurieren sich mit Orbot zu verbinden und Tor zu nutzen.
+
+
+Die Host-Einstellungen sind 127.0.0.1 oder "localhost". Die Port-Einstellungen sind 8118 fÃr HTTP und 9050 fÃr SOCKS. Sie sollten versuchen SOCKS4A oder SOCKS5 zu benutzen.
+
+
+
+Erfahren Sie mehr Ãber die Verwendung von Proxys unter Android in den FAQ unter http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">Orbot ist bereit!</string>
+    <string name="wizard_final_msg">Hunderttausende Menschen auf der ganzen Welt nutzen Tor aus einer Vielzahl von GrÃnden: Journalisten und Blogger, Menschenrechtsaktivisten, StrafverfolgungsbehÃrden, Soldaten, Unternehmen, BÃrger repressiver Regime und ganz normale Menschen... und sind Sie ebenfalls bereit!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">Sie haben sich erfolgreich mit dem Tor-Netzwerk verbunden - das bedeutet aber NICHT, dass Ihr GerÃt sicher ist. Sie kÃnnen die \'ÃberprÃfen\'-Option aus dem Menà benutzen, um Ihren Browser zu testen. 
+
+Besuchen Sie https://guardianproject.info/apps/orbot oder senden Sie eine E-Mail an help@xxxxxxxxxxxxxxxxxxxx um mehr zu erfahren.</string>
+
+	<string name="tor_check">Das wird die Seite https://check.torproject.org in Ihrem Webbrowser Ãffnen, so dass Sie ÃberprÃfen kÃnnen, ob Orbot richtig configuriert ist und Sie mit Tor verbunden sind.</string>
+
+	
+    <string name="pref_hs_group">Versteckte Dienste</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-es/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">iniciar y detener Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot està iniciando...</string>
-<string name="status_activated">Conectado a la Red de Tor</string>
-<string name="status_disabled">"Orbot està desactivado</string>
-<string name="status_shutting_down">Orbot se està cerrando</string>
-
-<string name="tor_process_connecting">Iniciando Tor...</string>
-<string name="tor_process_connecting_step2">ConfigurciÃn de control...</string>
-<string name="tor_process_connecting_step3">completo.</string>
-<string name="tor_process_connecting_step4">esperando.</string>
-
-<string name="not_anonymous_yet">ADVERTENCIA: ÂSu trÃfico no es anÃnimo aÃn! Por favor, configure sus aplicaciones para usar el Proxy HTTP 127.0.0.1:8118, el SOCKS4A o el Proxy SOCKS5 127.0.0.1:9050</string>
-<string name="menu_home">Principal</string>
-<string name="menu_browse">Examinar</string>
-<string name="menu_settings">ConfiguraciÃn</string>
-<string name="menu_log">Historial</string>
-<string name="menu_info">Ayuda</string>
-<string name="menu_apps">Aplicaciones</string>
-<string name="menu_start">Iniciar</string>
-<string name="menu_stop">Detener</string>
-
-<string name="menu_about">Acerca de</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Ayuda</string>
-<string name="button_close">Cerrar</string>
-<string name="button_about">Acerca de</string>
-
-<string name="button_clear_log">Limpiar Historial</string>
-
-
-<string name="menu_verify">Comprobar</string>
-<string name="menu_exit">Salir</string>
-<string name="powered_by">potenciado por Tor Project</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Proxy transparente (Requiere ser Administrador)</string>
-<string name="pref_trans_proxy_title">Proxy transparente</string>
-<string name="pref_trans_proxy_summary">Torificado automÃtico de las Aplicaciones</string>
-
-<string name="pref_transparent_all_title">Pasar todo el trÃfico por Tor</string>
-<string name="pref_transparent_all_summary">TrÃfico Proxy para todas las aplicaciones mediante Tor</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">ÂBinarios de Tor instalados con Ãxito!</string>
-<string name="status_install_fail">Los archivos binarios de Tor no se han podido instalar. Por favor, verifique el Historial y notifique a: tor-assistants@xxxxxxxxxxxxxx</string>
-
-<string name="title_error">Error de aplicaciÃn</string>
-
-<string name="wizard_title">Bienvenido a Orbot</string>
-
-<string name="wizard_btn_tell_me_more">Acerca de Orbot</string>
-<string name="btn_next">Siguiente</string>
-<string name="btn_back">AtrÃs</string>
-<string name="btn_finish">Finalizar</string>
-
-<string name="btn_okay">OK</string>
-<string name="btn_cancel">Cancelar</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot proporciona Tor a Android. Tor es un software libre y una red abierta que le ayuda a defenderse contra una forma de vigilancia que amenaza su libertad y privacidad personal, la confidencialidad en los negocios y en las relaciones, y la seguridad del Estado conocida como anÃlisis de trÃfico.
-
-*ADVERTENCIA:* ÂInstalando Orbot _NO_ anonimizarà mÃgicamente su trÃfico del mÃvil! Este assitente le ayudarà a empezar.</string>
-    <string name="wizard_details">Algunos detalles de Orbot</string>
-    <string name="wizard_details_msg">Orbot es una aplicaciÃn de cÃdigo abierto que contiene Tor, LibEvent y Privoxy. Provee un Proxy HTTP local (8118) y un Proxy SOCKS (9050) en la red Tor. Orbot tambiÃn tiene la habilidad, en un dispositivo enrutador, de enviar todo el trÃfico de Internet a travÃs de Tor.</string>
-    <string name="wizard_permissions_root">Permiso Concedido</string>
-    <string name="wizard_permissions_stock">Permisos de Orbot</string>
-    <string name="wizard_premissions_msg_root">ÂExcelente! Hemos detectado que usted tiene permisos administravitos activados para Orbot. Utilizaremos estos poderes sabiamente.</string>
-    <string name="wizard_permissions_msg_stock">Mientras no sea requerido, Orbot puede convertirse en una herramienta aÃn mÃs poderosa si su dispositivo tiene acceso de administrador. Utilice el botÃn a continuaciÃn para conceder superpoderes a Orbot</string>
-   
-    <string name="wizard_permissions_no_root">Si no tiene acceso de admnistrador o no tiene idea de quà estamos hablando, sÃlo asegÃrese de utilizar aplicaciones hechas para trabajar con Orbot.</string>
-    <string name="wizard_permissions_consent">Comprendo y quiero continuar sin poderes administrativos</string>
-   
-    <string name="wizard_permission_enable_root">Conceder poderes administrativos a Orbot</string>
-    <string name="wizard_configure">Configurar TorificaciÃn</string>
-    <string name="wizard_configure_msg">Orbot le da la opciÃn de dirigir todo el trÃfico de las aplicaciones a travÃs de Tor O de seleccionar sus aplicaciones individualmente.</string> 
-    <string name="wizard_configure_all">Configurar Proxy para todas las aplicaciones a travÃs de Tor</string>
-    <string name="wizard_configure_select_apps">Seleccionar aplicaciones individualmente para Tor</string>
-    
-    
-    <string name="wizard_tips_tricks">Aplicaciones activas en Orbot</string>
-    <string name="wizard_tips_msg">Le invitamos a descargar y utilizar aplicaciones que saben cÃmo conectarse directamente a Orbot. Haga clic en los botones a continuaciÃn para Instalar.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (SÃlo Android 1.x) - Navegador diseÃado para la privacidad y para Orbot</string>
-    <string name="wizard_tips_proxy">Configuraciones Proxy - Aprenda cÃmo configurar aplicaciones para que trabajen con Orbot</string>
-    
-    <string name="wizard_proxy_help_info">Configuraciones Proxy</string>
-    <string name="wizard_proxy_help_msg">Si la aplicaciÃn Android que està utilizando puede soportar el uso de un Proxy HTTP o SOCKS, entonces puede configurarla para conectar a Orbot y utilizar Tor.
-
-
-La configuraciÃn del dominio es 127.0.0.1 o "localhost". Para HTTP, la configuraciÃn del puerto es 8118. Para SOCKS, el proxy es 9050. Puede utilizar SOCKS4A o SOCKS5 si es posible.
-
-
-
-Puede aprender mÃs acerca de los proxys en Android a travÃs de las Preguntas Frecuentes ubicadas en: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">ÂOrbot està listo!</string>
-    <string name="wizard_final_msg">Cientos de miles de personas alrededor del mundo usan Tor por una amplia variedad de razones: periodistas y bloggers, trabajadores de los derechos humanos, oficiales de policÃa, soldados, corporaciones, ciudadanos de regÃmenes represivos y ciudadanos ordinarios... Ây ahora tambiÃn lo estÃs!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">Se ha conectado con Ãxito a la red Tor, pero eso NO significa que su dispositivo es seguro. Puede utilizar la opciÃn \'Comprobar\' desde el menà para probar su navegador.
-
-VisÃtenos en https://guardianproject.info/apps/orbot o envÃenos un correo electrÃnico a help@xxxxxxxxxxxxxxxxxxxx para aprender mÃs.</string>
-
-	<string name="tor_check">Esto abrirà https://check.torproject.org en su navegador predeterminado con el fin de comprobar si Orbot està configurado y si està conectado a Tor.</string>
-
-	
-    <string name="pref_hs_group">Servicios Ocultados</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-es/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">iniciar y detener Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot està iniciando...</string>
+<string name="status_activated">Conectado a la Red de Tor</string>
+<string name="status_disabled">"Orbot està desactivado</string>
+<string name="status_shutting_down">Orbot se està cerrando</string>
+
+<string name="tor_process_connecting">Iniciando Tor...</string>
+<string name="tor_process_connecting_step2">ConfigurciÃn de control...</string>
+<string name="tor_process_connecting_step3">completo.</string>
+<string name="tor_process_connecting_step4">esperando.</string>
+
+<string name="not_anonymous_yet">ADVERTENCIA: ÂSu trÃfico no es anÃnimo aÃn! Por favor, configure sus aplicaciones para usar el Proxy HTTP 127.0.0.1:8118, el SOCKS4A o el Proxy SOCKS5 127.0.0.1:9050</string>
+<string name="menu_home">Principal</string>
+<string name="menu_browse">Examinar</string>
+<string name="menu_settings">ConfiguraciÃn</string>
+<string name="menu_log">Historial</string>
+<string name="menu_info">Ayuda</string>
+<string name="menu_apps">Aplicaciones</string>
+<string name="menu_start">Iniciar</string>
+<string name="menu_stop">Detener</string>
+
+<string name="menu_about">Acerca de</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Ayuda</string>
+<string name="button_close">Cerrar</string>
+<string name="button_about">Acerca de</string>
+
+<string name="button_clear_log">Limpiar Historial</string>
+
+
+<string name="menu_verify">Comprobar</string>
+<string name="menu_exit">Salir</string>
+<string name="powered_by">potenciado por Tor Project</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Proxy transparente (Requiere ser Administrador)</string>
+<string name="pref_trans_proxy_title">Proxy transparente</string>
+<string name="pref_trans_proxy_summary">Torificado automÃtico de las Aplicaciones</string>
+
+<string name="pref_transparent_all_title">Pasar todo el trÃfico por Tor</string>
+<string name="pref_transparent_all_summary">TrÃfico Proxy para todas las aplicaciones mediante Tor</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">ÂBinarios de Tor instalados con Ãxito!</string>
+<string name="status_install_fail">Los archivos binarios de Tor no se han podido instalar. Por favor, verifique el Historial y notifique a: tor-assistants@xxxxxxxxxxxxxx</string>
+
+<string name="title_error">Error de aplicaciÃn</string>
+
+<string name="wizard_title">Bienvenido a Orbot</string>
+
+<string name="wizard_btn_tell_me_more">Acerca de Orbot</string>
+<string name="btn_next">Siguiente</string>
+<string name="btn_back">AtrÃs</string>
+<string name="btn_finish">Finalizar</string>
+
+<string name="btn_okay">OK</string>
+<string name="btn_cancel">Cancelar</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot proporciona Tor a Android. Tor es un software libre y una red abierta que le ayuda a defenderse contra una forma de vigilancia que amenaza su libertad y privacidad personal, la confidencialidad en los negocios y en las relaciones, y la seguridad del Estado conocida como anÃlisis de trÃfico.
+
+*ADVERTENCIA:* ÂInstalando Orbot _NO_ anonimizarà mÃgicamente su trÃfico del mÃvil! Este assitente le ayudarà a empezar.</string>
+    <string name="wizard_details">Algunos detalles de Orbot</string>
+    <string name="wizard_details_msg">Orbot es una aplicaciÃn de cÃdigo abierto que contiene Tor, LibEvent y Privoxy. Provee un Proxy HTTP local (8118) y un Proxy SOCKS (9050) en la red Tor. Orbot tambiÃn tiene la habilidad, en un dispositivo enrutador, de enviar todo el trÃfico de Internet a travÃs de Tor.</string>
+    <string name="wizard_permissions_root">Permiso Concedido</string>
+    <string name="wizard_permissions_stock">Permisos de Orbot</string>
+    <string name="wizard_premissions_msg_root">ÂExcelente! Hemos detectado que usted tiene permisos administravitos activados para Orbot. Utilizaremos estos poderes sabiamente.</string>
+    <string name="wizard_permissions_msg_stock">Mientras no sea requerido, Orbot puede convertirse en una herramienta aÃn mÃs poderosa si su dispositivo tiene acceso de administrador. Utilice el botÃn a continuaciÃn para conceder superpoderes a Orbot</string>
+   
+    <string name="wizard_permissions_no_root">Si no tiene acceso de admnistrador o no tiene idea de quà estamos hablando, sÃlo asegÃrese de utilizar aplicaciones hechas para trabajar con Orbot.</string>
+    <string name="wizard_permissions_consent">Comprendo y quiero continuar sin poderes administrativos</string>
+   
+    <string name="wizard_permission_enable_root">Conceder poderes administrativos a Orbot</string>
+    <string name="wizard_configure">Configurar TorificaciÃn</string>
+    <string name="wizard_configure_msg">Orbot le da la opciÃn de dirigir todo el trÃfico de las aplicaciones a travÃs de Tor O de seleccionar sus aplicaciones individualmente.</string> 
+    <string name="wizard_configure_all">Configurar Proxy para todas las aplicaciones a travÃs de Tor</string>
+    <string name="wizard_configure_select_apps">Seleccionar aplicaciones individualmente para Tor</string>
+    
+    
+    <string name="wizard_tips_tricks">Aplicaciones activas en Orbot</string>
+    <string name="wizard_tips_msg">Le invitamos a descargar y utilizar aplicaciones que saben cÃmo conectarse directamente a Orbot. Haga clic en los botones a continuaciÃn para Instalar.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (SÃlo Android 1.x) - Navegador diseÃado para la privacidad y para Orbot</string>
+    <string name="wizard_tips_proxy">Configuraciones Proxy - Aprenda cÃmo configurar aplicaciones para que trabajen con Orbot</string>
+    
+    <string name="wizard_proxy_help_info">Configuraciones Proxy</string>
+    <string name="wizard_proxy_help_msg">Si la aplicaciÃn Android que està utilizando puede soportar el uso de un Proxy HTTP o SOCKS, entonces puede configurarla para conectar a Orbot y utilizar Tor.
+
+
+La configuraciÃn del dominio es 127.0.0.1 o "localhost". Para HTTP, la configuraciÃn del puerto es 8118. Para SOCKS, el proxy es 9050. Puede utilizar SOCKS4A o SOCKS5 si es posible.
+
+
+
+Puede aprender mÃs acerca de los proxys en Android a travÃs de las Preguntas Frecuentes ubicadas en: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">ÂOrbot està listo!</string>
+    <string name="wizard_final_msg">Cientos de miles de personas alrededor del mundo usan Tor por una amplia variedad de razones: periodistas y bloggers, trabajadores de los derechos humanos, oficiales de policÃa, soldados, corporaciones, ciudadanos de regÃmenes represivos y ciudadanos ordinarios... Ây ahora tambiÃn lo estÃs!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">Se ha conectado con Ãxito a la red Tor, pero eso NO significa que su dispositivo es seguro. Puede utilizar la opciÃn \'Comprobar\' desde el menà para probar su navegador.
+
+VisÃtenos en https://guardianproject.info/apps/orbot o envÃenos un correo electrÃnico a help@xxxxxxxxxxxxxxxxxxxx para aprender mÃs.</string>
+
+	<string name="tor_check">Esto abrirà https://check.torproject.org en su navegador predeterminado con el fin de comprobar si Orbot està configurado y si està conectado a Tor.</string>
+
+	
+    <string name="pref_hs_group">Servicios Ocultados</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-fa/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">ØÙØØØØ</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">ØØÙØ Ù ÙØÛØÙ Tor</string>
-    <string name="tor_proxy_service_process">ØØÙÙØ ÙØÙÙØÙ ØÙØ</string>
-   
-<string name="status_starting_up">Orbat ØØØØ ÙÛ ØÙØ..</string>
-<string name="status_activated">ÙÛÙØØÙ ØÙ ØØÚÙ Û Tor</string>
-<string name="status_disabled">ØÙØØØØ ØÛØÙØØÙ ØØÙ ØØØ.</string>
-<string name="status_shutting_down">ØÙØØØØ ØØ ØØÙ ØØØÙ ØØÙ ØØØ.</string>
-
-<string name="tor_process_connecting">ØØÙØ ØÙØ ...</string>
-<string name="tor_process_connecting_step2">ØØÙ ØÙØØØÛ ÙØØØØ...</string>
-<string name="tor_process_connecting_step3">ÙØÙÙ ØØ.</string>
-<string name="tor_process_connecting_step4">ØØ ØÙØØØØ.</string>
-
-<string name="not_anonymous_yet">ÙØØØØ: ÙØØÙÛØ ØÙØ ÙÙÙØ "ÚÙÙØÙ" ÙÛØØ! ÙØÙÙ ØÙÙÛÚÛØÙ ØÙØ ØØ ØÙØÛÙ ÚÙÛØ ØØ ØØ HTTP ÙØÙÚØÛ 127.0.0.1:8118 Ù ÛØ SOCKS4A Ù ÛØ SOCKS5 ÙØÙÚØÛ 127.0.01:9050 ØØØÙØØÙ ÚÙØ.</string>
-<string name="menu_home">ØØÙÙ</string>
-<string name="menu_browse">ØØØØÙ</string>
-<string name="menu_settings">ØÙØÛÙØØ</string>
-<string name="menu_log">ÙØÙØ</string>
-<string name="menu_info">ÚÙÚ</string>
-<string name="menu_apps">ÙØÚ Ù ÙØÙÙ</string>
-<string name="menu_start">ØØØØ</string>
-<string name="menu_stop">ØÛØØ</string>
-
-<string name="menu_about">ØØØØØÙ</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">ÚÙÚ</string>
-<string name="button_close">ØØØÙ</string>
-<string name="button_about">ØØØØØÙ</string>
-
-<string name="button_clear_log">Clear Log</string>
-
-
-<string name="menu_verify">ØØØØÛ</string>
-<string name="menu_exit">ØØÙØ</string>
-<string name="powered_by">ÙØØÙ ØØÙ ØÙØØ Tor Project</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">ÙØÙÚØÛØÙ ØÙØÙ (ÙÛØØ ØÙ Root ØØØØ)</string>
-<string name="pref_trans_proxy_title">ÙØÙÚØÛØÙ ØÙØÙ</string>
-<string name="pref_trans_proxy_summary">Tori-ÙÙØÛÛ ØØÙÙØØÛÚ ØÙÙÛÚÛØÙ ÙØ</string>
-
-<string name="pref_transparent_all_title">ØØÙÙ ÙÙÙ</string>
-<string name="pref_transparent_all_summary">ÙØØÙÛØ ÙÙÙ ØÙÙÛÚÛØÙ ÙØ ØØ ØØ ØØÛÙ Tor ÙØÙÚØÛ ÚÙÛØ.</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">ØÙØØÛÛ ÙØÛ Tor ØØ ÙÙÙÙÛØ ÙØØ ØØÙØ!</string>
-<string name="status_install_fail">ÙØØ ÙØÛÙ ÙØÛ ØÙØØÛÛ Tor ÙÙÚÙ ÙØÙØ. ÙØÙÙ ÙØØÙ ØØ ÙØØØÛ ÚÙÛØ Ù ØÙ tor-assistance@xxxxxxxxxxxxxx ØØÙØØ ØÙÛØ.</string>
-
-<string name="title_error">ØØØÛ ØÙÙÛÚÛØÛÙ</string>
-
-<string name="wizard_title">ØÙ ØÙØØØØ ØÙØ ØÙØÛØ</string>
-
-<string name="wizard_btn_tell_me_more">ØØØØØÙ ØÙØØØØ</string>
-<string name="btn_next">ØØØÛ</string>
-<string name="btn_back">ØØØÚØØ</string>
-<string name="btn_finish">ÙØÛØÙ</string>
-
-<string name="btn_okay">ÙØÙ</string>
-<string name="btn_cancel">ÙØÙ</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">ØÙØØØØ Tor ØØ ØÙ ØÙØØÙÙÛØ ÙØØØ ÙÛ ÚÙØ. Tor ÙØÙ ØÙØØØÛ ØØÛÚØÙ Ù ØØÚÙ ØÛ ØØØ ØØØ ÚÙ ØØ ÙÙØØÙ ØÙØÛØ ØØÚÙ ÙØÛ ÙØØØØÛ ØÙÛÙ ØØØØÛ Ù ØØÛÙ ÙØØÛØ ÙØØÙÛØ ÙØ Ù ØÙØØØ ÙØØÙØÙÙ ØØÚØ ÙØØ Ù ØÙÙÛØ ÙÙÛØ ÚÙ "ÚØÙØ ÙØØÙÛØ" ÙØØÙÙ ØØØØ ØÙ ØÙØ ÚÙÚ ÙÛ ÚÙØ. *ÙØØØØ:* ÙØØ ØÙØØØØ ØÙ ØÙÙØÛÛ ÙØØØ ÙÛØØ ÙØØØÙ ØÛ ØÙØØ ØÙØ Ù ÙØØÙÛØ ØÙÙØÛÙ ØÙØ ØØ ÙØÙÛ ÚÙØ! ØÛÙ ØØØØØ ØÙÙØ ÚÙÚ ÙÛ ÚÙØ ÚÙ ÙØÙ ØÙÙ ØØ ØØØØØÛØ.</string>
-    <string name="wizard_details">ØØØÛ ØØØÛØØ ØØ ÙÙØØ ØÙØØØØ</string>
-    <string name="wizard_details_msg">ØÙØØØØ ØÙÙÛÚÛØÙÛ ØØ ÙØÙ-ØØØ ØØØ ÚÙ ØØÙÙ Tor, LibEvent Ù Privoxy. ØÛÙ ØÙÙÛÚÛØÙØ HTTP ÙØÙÚØÛ (8118) ÙØÙÛ Ù SOCKS ÙØÙÚØÛ (9050) ØØ ØØ ØØÚÙ Tor ØØ ØØØØØ ÙØØØ ÙÛ ØÙØ. ØÙØØØØ ÙÙÚÙÛÙ ÙØØØ ØØØ ØØ ØÙÛ ØØØØØ root ØØÙØ ØÙØÙ ØØØÙÛÚ ØÛÙØØÙØ ØØ ØØ Tor ØØØØÙ ÚÙØ.</string>
-    <string name="wizard_permissions_root">ÙØÙØ ØØØØ ÚØØÛØ</string>
-    <string name="wizard_permissions_stock">ÙØÙØÙØÛ ØÙØØØØ</string>
-    <string name="wizard_premissions_msg_root">ØØÛØØ ØØÙÛ! ØÛÙØÙØ ÚÙ ÙØÙÙÙ ØØØ ØÙØ ØØØØÛ ÙØÙØ root ØØØÛ ÙØØÙ ÚØØÙ ØÙØØØØ ÙØØÛØ. ØÛÙ ØÙÚØÙ ØØ ØØÙØÛ ÙÙØØ ØØØÙØØÙ ÙØØØ ØÙØÙÛÙ ØØØ. </string>
-    <string name="wizard_permissions_msg_stock">ÙØÚÙØ ØØÙØØ ÙØØØØ ØÙØ ØÚØ ØÛØØÙ ØÙØ ØØØØÛ ØØØØØÛ root ØØØØ ØÙØØØØ ØØ ØØÙÛØ ØØÛØØ ØÛØØØÛ ØÙÙ ØÙØÙØ ÚØØ. ØÚÙÙ ØÛØ ØØ ÙØØØ ØÙÛØ ØØ ØÙØØØØ ØØØØÛ ØØÙÛØ ØØØÚØØÛ ØØÙØ.</string>
-   
-    <string name="wizard_permissions_no_root">ØÚØ ØÛØØÙ ØÙØ ØØØØÛ ØØØØØÛ root ÙÛØØ Ù ÛØ ØØÙÙ ÚÛØÛ ØØ ØÛÙ ØØØØØ ÙØÙØÙ ÙÙÛ ØÙÛØØ ØØÙÙ ØØÛ ÚÙÛØ ØØ ØÙÙÚÛØÙ ÙØÛÛ ØØØÙØØÙ ÚÙÛØ ÚÙ ÙÛÚÙ ØÙØØØØ ØÙÛÙ ØØÙ ØÙØ. </string>
-    <string name="wizard_permissions_consent">ÙØÙØÙ ÙØØÙ Ù ØØØÛØ ÙÛ ØÙÙ ØØÙÙ root ØØØÙÙ ØØÙÙ.</string>
-   
-    <string name="wizard_permission_enable_root">ÙØÚØØØÛ root ØØØÛ ØÙØØØØ</string>
-    <string name="wizard_configure">ØÙØÛÙØØ ØØØÛÙ ØÙ Tor</string>
-    <string name="wizard_configure_msg">ØÙØØØØ ØÙ ØÙØ ØÙÚØÙ ÙÛ ØÙØ ÚÙ ØÙØÙ ØÙÙÛÚØÛÙ ÙØ ØØ ØØ ØØÛÙ Tor  ÙÙØÙÙ ÚÙÛØ Ù ÛØ ØÙÙÛÚÛØÙ ÙÙØØ ÙØØ ØÙØ ØØ ØØØÙ ØÙØØØØ ÚÙÛØ.</string> 
-    <string name="wizard_configure_all">ØÙØÙ ØÙÙÛÚÛØÙ ÙØ ØØ ØØ ØØÛÙ Tor ÙÙØÙÙ ÚÙÛØ.</string>
-    <string name="wizard_configure_select_apps">ØÙÙÛÚÛØÙ ÙØÛ ÙÙÙØØ ØØØÛ Tor ØÙØØØØ ÚÙÛØ.</string>
-    
-    
-    <string name="wizard_tips_tricks">ØÙÙÛÚÛØÙ ÙØÛÛ ÚÙ ØØØÛ ØÙØØØØ ØÙØÛÙ ØØÙ ØÙØ</string>
-    <string name="wizard_tips_msg">ØÙØÛÙ ÙÛ ÚÙÛÙ ØØÙÙ ÙÙØ Ù ÙØØÙ ÚÙÛØØ ØÙÙÛÚÛØÙ ÙØÛÛ ØØ ØØØÙØØÙ ÚÙÛØ ÚÙ ÙØØÙÛÙ ØÙ ØÙØØØØ ÙØÙ ÙÛ ØÙÙØ. ØÚÙÙ ÙØÛ ØÛØ ØØ ÙØØØ ØÙÛØ ØØ ÙØØ ØÙØ. </string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (ÙÙØ ØÙØØÙÛØ 1.x) - ÙØÙØÚØ ØØØØÛ ØØÙ ØØØÛ ØÙØ ØØÛÙ ØØÙØÛ Ù ØÙØÙÙØØØ ØÙØØØØ</string>
-    <string name="wizard_tips_proxy">ØÙØÛÙØØ ÙØÙÚØÛ - ÛØØÚÛØÛ ØÙØÛÙ ØÙÙÛÚÛØÙ ÙØ ØØØÛ ÚØØ ØØ ØÙØØØØ</string>
-    
-    <string name="wizard_proxy_help_info">ØÙØÛÙØØ ÙØÙÚØÛ</string>
-    <string name="wizard_proxy_help_msg">ØÚØ ØÙÙÛÚØÛÙ ØÙØØÙÙÙÛØ ÙÙØØ ØØØÙØØÙ ØÙØ ÙØØÙÛØ ÚØØ ØØ HTTP Ù ÛØ SOCKS ÙØÙÚØÛ ØØØØ ÙÛ ØÙØÙÛØ ØÙØÛÙØ ÚÙÛØ ØØ ØÙ ØÙØØØØ ÙØÙ ØÙØ Ù ØØ Tor ØØØÙØØÙ ÚÙØ. ØÙØÛÙØØ ØØÙÛØ ØÙÙØÙ 127.0.0.1 Ù ÛØ "ØØÙÛØ-ØÙ ÙØÙÛ" ØØØ. ØØØÛ HTTP ØÙØÛÙØØ ØØÚØÙ (port) 8118 ØØØ. ØØØÛ SOCKSØ ÙØÙÚØÛ ÙÙØØØØ 9050 ØØØ. ØÙØ ÙÛ ØØÛØØ SOCKS4A  Ù ÛØ  ØØ ØÙØØ ØÙÚØÙ ØØ socks5 ØØØÙØØÙ ÚÙÛØ. ØØ ØÙØØ ÙÛØØ ØÙ ØØÙØØØØ ØÛØØØ ØØ ÙÙØØ ØÙØÙØÙØÙ ØÙØØÙÛØØ ÙÛ ØÙØÙÛØ ØÙ FAQ (ØÙØÙÙØÛ ÙØÙÙÙ) ØØ http://tinyurl.com/proxyandroid ÙØØØØÙ ÚÙÛØ.</string>
-    
-    <string name="wizard_final">ØÙØØØØ ØÙØØÙ ØØØÙØØÙ ÙÛØØØØ!</string>
-    <string name="wizard_final_msg">ØØÙØ ÙØØØ ÙÙØ ØØ ØØØØØ ØÙØÙ ØÙ ØÙØÛÙ ÚÙÙØÚÙÙ ØØ Tor ØØØÙØØÙ ÙÛ ÚÙÙØ: ØÙØÙØÙÙ ÙÙÛØÙØ Ù ØÙØÚØÙØØ ÚØØÚÙØÙ ØÙÙÙ ØØØØ ÙØÙÙØØÙ ØÙØØØÙÛØ ØØØØØØÙØ ØØÚØÙØØ ØÙØÙÙØØÙ ØÙÙØÙØÛ ØØÚÙØÚØØ Ù ØÙØÙÙØØÙ ØØØÛØ Ù ØØÙØ ØÙØ ÙÛØ ØÙØØÙ ØØØÙØØÙ ØØ ØÙ ÙØØÛØ!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">ØÚÙÙÙ ØØ ÙÙÙÙÛØ ØÙ ØØÚÙ Tor ÙØÙ ØØÙ ØÛØ ØÙØ ØÙ ØÙ ÙØÙØ ÙÛØØ ÚÙ ØÛØØÙ ØÙØ ØÛÙÙ ØØØ. ÙÛ ØÙØÙÛØ ØØ ÙÙÛÙ ÚØÛÙÙ /"Check/" ØØ ØØØÛ ØØÙØÛØ ÙØÙØÚØ ØÙØØØØ ÚÙÛØ. ØÙ ÙØ ØØ ØÙØÙ https://guardianproject.info/apps/orbot ÙØØØØÙ ÚÙÛØ Ù ØÙ ØØØØ help@xxxxxxxxxxxxxxxxxxxx  ØÛÙÛÙÛ ØÙØØØÛØ ØØ ØØÙØØØØ ØÛØØØÛ ØØÛØÙØ ÚÙÛØ. </string>
-
-	<string name="tor_check">ØØ ØÛÙ ÙØÙ ÙÛØÙØØ ÙØÙØÚØ ÙØ ØÙØ ØÙ ØÙØÙ   https://check.torproject.org ØØØ ÙÛ ØÙØ ØØ ØÙØ ÙØØÙØÙ ÚÙÛØ ØÛØ ØÙØØØØ ØÙØÛÙ ØØÙ ØØØ Ù ØÛØ ØÙØ ØÙ Tor ÙØÙ ØØÙ ØÛØ ÛØ ÙÙ.</string>
-
-	
-    <string name="pref_hs_group">ØØÙÙØ ÙØÙ ÙØÙÙ</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-fa/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">ØÙØØØØ</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">ØØÙØ Ù ÙØÛØÙ Tor</string>
+    <string name="tor_proxy_service_process">ØØÙÙØ ÙØÙÙØÙ ØÙØ</string>
+   
+<string name="status_starting_up">Orbat ØØØØ ÙÛ ØÙØ..</string>
+<string name="status_activated">ÙÛÙØØÙ ØÙ ØØÚÙ Û Tor</string>
+<string name="status_disabled">ØÙØØØØ ØÛØÙØØÙ ØØÙ ØØØ.</string>
+<string name="status_shutting_down">ØÙØØØØ ØØ ØØÙ ØØØÙ ØØÙ ØØØ.</string>
+
+<string name="tor_process_connecting">ØØÙØ ØÙØ ...</string>
+<string name="tor_process_connecting_step2">ØØÙ ØÙØØØÛ ÙØØØØ...</string>
+<string name="tor_process_connecting_step3">ÙØÙÙ ØØ.</string>
+<string name="tor_process_connecting_step4">ØØ ØÙØØØØ.</string>
+
+<string name="not_anonymous_yet">ÙØØØØ: ÙØØÙÛØ ØÙØ ÙÙÙØ "ÚÙÙØÙ" ÙÛØØ! ÙØÙÙ ØÙÙÛÚÛØÙ ØÙØ ØØ ØÙØÛÙ ÚÙÛØ ØØ ØØ HTTP ÙØÙÚØÛ 127.0.0.1:8118 Ù ÛØ SOCKS4A Ù ÛØ SOCKS5 ÙØÙÚØÛ 127.0.01:9050 ØØØÙØØÙ ÚÙØ.</string>
+<string name="menu_home">ØØÙÙ</string>
+<string name="menu_browse">ØØØØÙ</string>
+<string name="menu_settings">ØÙØÛÙØØ</string>
+<string name="menu_log">ÙØÙØ</string>
+<string name="menu_info">ÚÙÚ</string>
+<string name="menu_apps">ÙØÚ Ù ÙØÙÙ</string>
+<string name="menu_start">ØØØØ</string>
+<string name="menu_stop">ØÛØØ</string>
+
+<string name="menu_about">ØØØØØÙ</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">ÚÙÚ</string>
+<string name="button_close">ØØØÙ</string>
+<string name="button_about">ØØØØØÙ</string>
+
+<string name="button_clear_log">Clear Log</string>
+
+
+<string name="menu_verify">ØØØØÛ</string>
+<string name="menu_exit">ØØÙØ</string>
+<string name="powered_by">ÙØØÙ ØØÙ ØÙØØ Tor Project</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">ÙØÙÚØÛØÙ ØÙØÙ (ÙÛØØ ØÙ Root ØØØØ)</string>
+<string name="pref_trans_proxy_title">ÙØÙÚØÛØÙ ØÙØÙ</string>
+<string name="pref_trans_proxy_summary">Tori-ÙÙØÛÛ ØØÙÙØØÛÚ ØÙÙÛÚÛØÙ ÙØ</string>
+
+<string name="pref_transparent_all_title">ØØÙÙ ÙÙÙ</string>
+<string name="pref_transparent_all_summary">ÙØØÙÛØ ÙÙÙ ØÙÙÛÚÛØÙ ÙØ ØØ ØØ ØØÛÙ Tor ÙØÙÚØÛ ÚÙÛØ.</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">ØÙØØÛÛ ÙØÛ Tor ØØ ÙÙÙÙÛØ ÙØØ ØØÙØ!</string>
+<string name="status_install_fail">ÙØØ ÙØÛÙ ÙØÛ ØÙØØÛÛ Tor ÙÙÚÙ ÙØÙØ. ÙØÙÙ ÙØØÙ ØØ ÙØØØÛ ÚÙÛØ Ù ØÙ tor-assistance@xxxxxxxxxxxxxx ØØÙØØ ØÙÛØ.</string>
+
+<string name="title_error">ØØØÛ ØÙÙÛÚÛØÛÙ</string>
+
+<string name="wizard_title">ØÙ ØÙØØØØ ØÙØ ØÙØÛØ</string>
+
+<string name="wizard_btn_tell_me_more">ØØØØØÙ ØÙØØØØ</string>
+<string name="btn_next">ØØØÛ</string>
+<string name="btn_back">ØØØÚØØ</string>
+<string name="btn_finish">ÙØÛØÙ</string>
+
+<string name="btn_okay">ÙØÙ</string>
+<string name="btn_cancel">ÙØÙ</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">ØÙØØØØ Tor ØØ ØÙ ØÙØØÙÙÛØ ÙØØØ ÙÛ ÚÙØ. Tor ÙØÙ ØÙØØØÛ ØØÛÚØÙ Ù ØØÚÙ ØÛ ØØØ ØØØ ÚÙ ØØ ÙÙØØÙ ØÙØÛØ ØØÚÙ ÙØÛ ÙØØØØÛ ØÙÛÙ ØØØØÛ Ù ØØÛÙ ÙØØÛØ ÙØØÙÛØ ÙØ Ù ØÙØØØ ÙØØÙØÙÙ ØØÚØ ÙØØ Ù ØÙÙÛØ ÙÙÛØ ÚÙ "ÚØÙØ ÙØØÙÛØ" ÙØØÙÙ ØØØØ ØÙ ØÙØ ÚÙÚ ÙÛ ÚÙØ. *ÙØØØØ:* ÙØØ ØÙØØØØ ØÙ ØÙÙØÛÛ ÙØØØ ÙÛØØ ÙØØØÙ ØÛ ØÙØØ ØÙØ Ù ÙØØÙÛØ ØÙÙØÛÙ ØÙØ ØØ ÙØÙÛ ÚÙØ! ØÛÙ ØØØØØ ØÙÙØ ÚÙÚ ÙÛ ÚÙØ ÚÙ ÙØÙ ØÙÙ ØØ ØØØØØÛØ.</string>
+    <string name="wizard_details">ØØØÛ ØØØÛØØ ØØ ÙÙØØ ØÙØØØØ</string>
+    <string name="wizard_details_msg">ØÙØØØØ ØÙÙÛÚÛØÙÛ ØØ ÙØÙ-ØØØ ØØØ ÚÙ ØØÙÙ Tor, LibEvent Ù Privoxy. ØÛÙ ØÙÙÛÚÛØÙØ HTTP ÙØÙÚØÛ (8118) ÙØÙÛ Ù SOCKS ÙØÙÚØÛ (9050) ØØ ØØ ØØÚÙ Tor ØØ ØØØØØ ÙØØØ ÙÛ ØÙØ. ØÙØØØØ ÙÙÚÙÛÙ ÙØØØ ØØØ ØØ ØÙÛ ØØØØØ root ØØÙØ ØÙØÙ ØØØÙÛÚ ØÛÙØØÙØ ØØ ØØ Tor ØØØØÙ ÚÙØ.</string>
+    <string name="wizard_permissions_root">ÙØÙØ ØØØØ ÚØØÛØ</string>
+    <string name="wizard_permissions_stock">ÙØÙØÙØÛ ØÙØØØØ</string>
+    <string name="wizard_premissions_msg_root">ØØÛØØ ØØÙÛ! ØÛÙØÙØ ÚÙ ÙØÙÙÙ ØØØ ØÙØ ØØØØÛ ÙØÙØ root ØØØÛ ÙØØÙ ÚØØÙ ØÙØØØØ ÙØØÛØ. ØÛÙ ØÙÚØÙ ØØ ØØÙØÛ ÙÙØØ ØØØÙØØÙ ÙØØØ ØÙØÙÛÙ ØØØ. </string>
+    <string name="wizard_permissions_msg_stock">ÙØÚÙØ ØØÙØØ ÙØØØØ ØÙØ ØÚØ ØÛØØÙ ØÙØ ØØØØÛ ØØØØØÛ root ØØØØ ØÙØØØØ ØØ ØØÙÛØ ØØÛØØ ØÛØØØÛ ØÙÙ ØÙØÙØ ÚØØ. ØÚÙÙ ØÛØ ØØ ÙØØØ ØÙÛØ ØØ ØÙØØØØ ØØØØÛ ØØÙÛØ ØØØÚØØÛ ØØÙØ.</string>
+   
+    <string name="wizard_permissions_no_root">ØÚØ ØÛØØÙ ØÙØ ØØØØÛ ØØØØØÛ root ÙÛØØ Ù ÛØ ØØÙÙ ÚÛØÛ ØØ ØÛÙ ØØØØØ ÙØÙØÙ ÙÙÛ ØÙÛØØ ØØÙÙ ØØÛ ÚÙÛØ ØØ ØÙÙÚÛØÙ ÙØÛÛ ØØØÙØØÙ ÚÙÛØ ÚÙ ÙÛÚÙ ØÙØØØØ ØÙÛÙ ØØÙ ØÙØ. </string>
+    <string name="wizard_permissions_consent">ÙØÙØÙ ÙØØÙ Ù ØØØÛØ ÙÛ ØÙÙ ØØÙÙ root ØØØÙÙ ØØÙÙ.</string>
+   
+    <string name="wizard_permission_enable_root">ÙØÚØØØÛ root ØØØÛ ØÙØØØØ</string>
+    <string name="wizard_configure">ØÙØÛÙØØ ØØØÛÙ ØÙ Tor</string>
+    <string name="wizard_configure_msg">ØÙØØØØ ØÙ ØÙØ ØÙÚØÙ ÙÛ ØÙØ ÚÙ ØÙØÙ ØÙÙÛÚØÛÙ ÙØ ØØ ØØ ØØÛÙ Tor  ÙÙØÙÙ ÚÙÛØ Ù ÛØ ØÙÙÛÚÛØÙ ÙÙØØ ÙØØ ØÙØ ØØ ØØØÙ ØÙØØØØ ÚÙÛØ.</string> 
+    <string name="wizard_configure_all">ØÙØÙ ØÙÙÛÚÛØÙ ÙØ ØØ ØØ ØØÛÙ Tor ÙÙØÙÙ ÚÙÛØ.</string>
+    <string name="wizard_configure_select_apps">ØÙÙÛÚÛØÙ ÙØÛ ÙÙÙØØ ØØØÛ Tor ØÙØØØØ ÚÙÛØ.</string>
+    
+    
+    <string name="wizard_tips_tricks">ØÙÙÛÚÛØÙ ÙØÛÛ ÚÙ ØØØÛ ØÙØØØØ ØÙØÛÙ ØØÙ ØÙØ</string>
+    <string name="wizard_tips_msg">ØÙØÛÙ ÙÛ ÚÙÛÙ ØØÙÙ ÙÙØ Ù ÙØØÙ ÚÙÛØØ ØÙÙÛÚÛØÙ ÙØÛÛ ØØ ØØØÙØØÙ ÚÙÛØ ÚÙ ÙØØÙÛÙ ØÙ ØÙØØØØ ÙØÙ ÙÛ ØÙÙØ. ØÚÙÙ ÙØÛ ØÛØ ØØ ÙØØØ ØÙÛØ ØØ ÙØØ ØÙØ. </string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (ÙÙØ ØÙØØÙÛØ 1.x) - ÙØÙØÚØ ØØØØÛ ØØÙ ØØØÛ ØÙØ ØØÛÙ ØØÙØÛ Ù ØÙØÙÙØØØ ØÙØØØØ</string>
+    <string name="wizard_tips_proxy">ØÙØÛÙØØ ÙØÙÚØÛ - ÛØØÚÛØÛ ØÙØÛÙ ØÙÙÛÚÛØÙ ÙØ ØØØÛ ÚØØ ØØ ØÙØØØØ</string>
+    
+    <string name="wizard_proxy_help_info">ØÙØÛÙØØ ÙØÙÚØÛ</string>
+    <string name="wizard_proxy_help_msg">ØÚØ ØÙÙÛÚØÛÙ ØÙØØÙÙÙÛØ ÙÙØØ ØØØÙØØÙ ØÙØ ÙØØÙÛØ ÚØØ ØØ HTTP Ù ÛØ SOCKS ÙØÙÚØÛ ØØØØ ÙÛ ØÙØÙÛØ ØÙØÛÙØ ÚÙÛØ ØØ ØÙ ØÙØØØØ ÙØÙ ØÙØ Ù ØØ Tor ØØØÙØØÙ ÚÙØ. ØÙØÛÙØØ ØØÙÛØ ØÙÙØÙ 127.0.0.1 Ù ÛØ "ØØÙÛØ-ØÙ ÙØÙÛ" ØØØ. ØØØÛ HTTP ØÙØÛÙØØ ØØÚØÙ (port) 8118 ØØØ. ØØØÛ SOCKSØ ÙØÙÚØÛ ÙÙØØØØ 9050 ØØØ. ØÙØ ÙÛ ØØÛØØ SOCKS4A  Ù ÛØ  ØØ ØÙØØ ØÙÚØÙ ØØ socks5 ØØØÙØØÙ ÚÙÛØ. ØØ ØÙØØ ÙÛØØ ØÙ ØØÙØØØØ ØÛØØØ ØØ ÙÙØØ ØÙØÙØÙØÙ ØÙØØÙÛØØ ÙÛ ØÙØÙÛØ ØÙ FAQ (ØÙØÙÙØÛ ÙØÙÙÙ) ØØ http://tinyurl.com/proxyandroid ÙØØØØÙ ÚÙÛØ.</string>
+    
+    <string name="wizard_final">ØÙØØØØ ØÙØØÙ ØØØÙØØÙ ÙÛØØØØ!</string>
+    <string name="wizard_final_msg">ØØÙØ ÙØØØ ÙÙØ ØØ ØØØØØ ØÙØÙ ØÙ ØÙØÛÙ ÚÙÙØÚÙÙ ØØ Tor ØØØÙØØÙ ÙÛ ÚÙÙØ: ØÙØÙØÙÙ ÙÙÛØÙØ Ù ØÙØÚØÙØØ ÚØØÚÙØÙ ØÙÙÙ ØØØØ ÙØÙÙØØÙ ØÙØØØÙÛØ ØØØØØØÙØ ØØÚØÙØØ ØÙØÙÙØØÙ ØÙÙØÙØÛ ØØÚÙØÚØØ Ù ØÙØÙÙØØÙ ØØØÛØ Ù ØØÙØ ØÙØ ÙÛØ ØÙØØÙ ØØØÙØØÙ ØØ ØÙ ÙØØÛØ!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">ØÚÙÙÙ ØØ ÙÙÙÙÛØ ØÙ ØØÚÙ Tor ÙØÙ ØØÙ ØÛØ ØÙØ ØÙ ØÙ ÙØÙØ ÙÛØØ ÚÙ ØÛØØÙ ØÙØ ØÛÙÙ ØØØ. ÙÛ ØÙØÙÛØ ØØ ÙÙÛÙ ÚØÛÙÙ /"Check/" ØØ ØØØÛ ØØÙØÛØ ÙØÙØÚØ ØÙØØØØ ÚÙÛØ. ØÙ ÙØ ØØ ØÙØÙ https://guardianproject.info/apps/orbot ÙØØØØÙ ÚÙÛØ Ù ØÙ ØØØØ help@xxxxxxxxxxxxxxxxxxxx  ØÛÙÛÙÛ ØÙØØØÛØ ØØ ØØÙØØØØ ØÛØØØÛ ØØÛØÙØ ÚÙÛØ. </string>
+
+	<string name="tor_check">ØØ ØÛÙ ÙØÙ ÙÛØÙØØ ÙØÙØÚØ ÙØ ØÙØ ØÙ ØÙØÙ   https://check.torproject.org ØØØ ÙÛ ØÙØ ØØ ØÙØ ÙØØÙØÙ ÚÙÛØ ØÛØ ØÙØØØØ ØÙØÛÙ ØØÙ ØØØ Ù ØÛØ ØÙØ ØÙ Tor ÙØÙ ØØÙ ØÛØ ÛØ ÙÙ.</string>
+
+	
+    <string name="pref_hs_group">ØØÙÙØ ÙØÙ ÙØÙÙ</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-mk/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">ÐÑÐÐÑ</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">ÐÐÐÑÑÐ Ð ÐÑÐÐÑÑÐ ÐÐ ÐÐÑ</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">ÐÑÐÐÑ ÑÐ ÐÐÐÑÑÑÐÐ...</string>
-<string name="status_activated">ÐÐÐÑÐÐÐ ÐÐ ÐÑÐÐÐÑÐ ÐÐÑ</string>
-<string name="status_disabled">"ÐÑÐÐÑ Ð ÐÐÐÐÐÑÐÐÐÑÐÐ</string>
-<string name="status_shutting_down">ÐÑÐÐÑ ÑÐ ÐÑÐÐÑÑÑÐÐ</string>
-
-<string name="tor_process_connecting">ÐÐÐÑÑÑÐÐÑÐ ÐÐ ÐÐÑ...</string>
-<string name="tor_process_connecting_step2">ÐÐÑÐÐÑÑÐÐÑÐÐÑÐ ÐÐÐÑÑÐÐÐ...</string>
-<string name="tor_process_connecting_step3">ÐÐÑÐÐÐ.</string>
-<string name="tor_process_connecting_step4">ÑÐÐÐÑÐ.</string>
-
-<string name="not_anonymous_yet">ÐÐÐÐÐÐÐÐ: ÐÐÑÐÐÑ ÑÐÐÐÑÐÑÐÑ ÑÐÑÑÑÐ ÐÐ Ð ÐÐÐÐÐÐÐÐ! ÐÑÐÐÐ ÐÐ ÐÐ ÐÐÐÑÐÐÑÑÐÑÐÑÐ ÐÐÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐ ÐÐ ÐÐÑÐÑÑÐÑ ÐÑÐÐÑÐÑÐ ÐÐ HTTP, 127.0.0.1:8118, ÐÐÐ ÐÑÐÐÑÐÑÐ ÐÐ SOCKS4A ÐÐÐ SOCKS5, 127.0.0.1:9050</string>
-<string name="menu_home">ÐÐÐÐ</string>
-<string name="menu_browse">ÐÑÐÐÐÑÑÑÐÐÑÐ</string>
-<string name="menu_settings">ÐÐÐÐÑÑÐÐÑÐ</string>
-<string name="menu_log">ÐÐÐ</string>
-<string name="menu_info">ÐÐÐÐÑ</string>
-<string name="menu_apps">ÐÐÐÐÐÐÑÐÐ</string>
-<string name="menu_start">ÐÐÐÑÑÐ</string>
-<string name="menu_stop">ÐÑÐÐÑÑÐ</string>
-
-<string name="menu_about">ÐÐ</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">ÐÐÐÐÑ</string>
-<string name="button_close">ÐÐÑÐÐÑÐ</string>
-<string name="button_about">ÐÐ</string>
-
-<string name="button_clear_log">ÐÐÐÑÐÑÐ ÐÐÐ</string>
-
-
-<string name="menu_verify">ÐÑÐÐÐÑÐ</string>
-<string name="menu_exit">ÐÐÐÐÐ</string>
-<string name="powered_by">ÐÐÐÐÑÑÐÐÐÐ ÐÐ ÐÑÐÐÐÑÐÑ ÐÐÑ</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">ÐÑÐÐÑÐÐÑÐÐÑÐÐ ÐÑÐÐÑÐ (ÐÐÑÐ root ÐÑÐÑÑÐÐ)</string>
-<string name="pref_trans_proxy_title">ÐÑÐÐÑÐÐÑÐÐÑÐÐ ÐÑÐÐÑÐ</string>
-<string name="pref_trans_proxy_summary">ÐÐÑÐÐÐÑÑÐÐ ÑÐÑÐÑÐÑÐÑÐÑÐ ÐÐ ÐÐÐÐÐÐÑÐÐÑÐ</string>
-
-<string name="pref_transparent_all_title">ÐÐÐÐÑÐÐ ÑÐÑÐÑÐÑÐÑÐÑÐ</string>
-<string name="pref_transparent_all_summary">ÐÑÐÐÑÐÑÐÑ ÐÐ ÑÐÐÐÑÐÑÐÑÐÑ ÐÐ ÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐÐ ÐÐÑ</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">ÐÐÐÑÑÐÐÑÐ ÐÑÐÐÑÐÐÐ ÐÐ ÐÐÑ ÑÐ ÑÑÐÐÑÐÐ ÐÐÑÑÐÐÐÑÐÐÐ!</string>
-<string name="status_install_fail">ÐÐÐÑÑÐÐÑÐ ÑÐÑÐÐÐÐ ÐÐ ÐÐÑ ÐÐ ÐÐÐÐÐ ÐÐ ÑÐ ÐÐÑÑÐÐÐÑÐÐÑ. ÐÐÐÐÑÐ ÐÐ ÐÐÐÐÑ Ð ÐÐÐÐÑÑÐÑÐ ÐÃ ÐÐ ÐÐÐ ÐÐ tor-assistants@xxxxxxxxxxxxxx</string>
-
-<string name="title_error">ÐÐÐÐÐÐÑÐÑÐÐ ÐÑÐÑÐÐ</string>
-
-<string name="wizard_title">ÐÐÐÑÐÐÐÑÐÐÐÑÐ ÐÐ ÐÑÐÐÑ</string>
-
-<string name="wizard_btn_tell_me_more">ÐÐ ÐÑÐÐÑ</string>
-<string name="btn_next">ÐÐÐÑÐÐ</string>
-<string name="btn_back">ÐÐÐÐÐ</string>
-<string name="btn_finish">ÐÑÐÑ</string>
-
-<string name="btn_okay">ÐÐ ÑÐÐ</string>
-<string name="btn_cancel">ÐÑÐÐÐÐ ÑÐ</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">ÐÑÐÐÑ ÐÐÐÐÐÐÐÑÐÐ ÑÐÐÐÑÐ ÑÐ ÐÐÑ ÐÐ ÐÐÐÑÐÐÐ. ÐÐÑ Ð ÑÐÐÐÐÐÐÐ ÑÐÑÑÐÐÑ Ð ÐÑÐÐÑÐÐÐ ÐÑÐÐÐ ÐÐÑÐÑÑÐ ÐÐ ÐÐÐÐÐÐ ÐÐ ÑÐ ÐÐÑÑÐÑÐÑÐ ÐÐ ÐÐÑÐÐÐÐ ÐÐÐ ÐÑÐÐÐÐ ÐÑÐÑÐÑÑÐÑÐÐÑÐ, ÐÐÐÐÐÑ ÐÐÐÐ ÐÐÐÐÐÐÐ ÐÐ ÑÐÐÐÑÐÑÐÑ (traffic analysis), ÐÐÑ ÐÑÐÑÑÑÐÐÑÐÐÐÑ ÐÐÐÐÐÐ ÐÐ ÐÐÑÐÐÑÐ ÑÐÐÐÐÐÐ Ð ÐÑÐÐÐÑÐÐÑÑ, ÐÐ ÑÑÐÐÐÐÑÐÐÑÐ ÐÐÑÐÐÑÑÐ Ð ÐÐÐÐÑÐ ÐÐ ÐÐÐÐÑÐÐÐ ÐÐÑÐÐÑÐÑ, ÐÐÐÐ Ð ÐÐ ÐÑÐÐÐÐÐÑÐ ÐÐÐÐÐÐÐÐÑÑ.\n\n*ÐÐÐÐÐÐÐÐ:*ÐÐÐÐÐÑ ÑÐÐÑ ÑÑÐ ÑÑÐ ÐÐ ÐÐÑÑÐÐÐÑÐÐÐ ÐÑÐÐÑ _ÐÐÐÐ_ ÐÐÑÐÐÐÑÑÐÐ ÐÐ ÐÐ ÐÐÐÑÐÐÐ ÐÐÑÐÐÑ ÐÐÐÐÐÐÐ ÑÐÐÐÑÐÑÐÑ ÐÐÐÐÐÐÐÐ! ÐÐ, ÐÐÐÑ ÐÑÐÐÐÑ ÑÐ ÐÐ ÐÐÐÐÐÐÐ ÐÐ ÑÐ ÐÐÐÑÐÑÐÑÐ.</string>
-    <string name="wizard_details">ÐÐÐÐÐ ÐÐÑÐÐÐ ÐÐ ÐÑÐÐÑ</string>
-    <string name="wizard_details_msg">ÐÑÐÐÑ Ð ÐÐÐÐÐÐÑÐÑÐ ÑÐ ÐÑÐÐÑÐÐ ÐÐÐ ÐÐÑÐÑÑÐ ÐÐ ÑÐÐÑÐÐ ÐÐÑ, LibEvent Ð Privoxy. ÐÐÐ ÐÐ ÐÑÐÐ ÐÐÐÐÐÐÐ ÐÑÐÐÑÐÑÐ ÐÐ HTTP (ÐÐÑÑ 8118) Ð SOCKS (ÐÐÑÑ 9050) ÐÐ ÐÐÐÑÐÑÐÐÑÐ ÑÐ ÐÑÐÐÐÑÐ ÐÐÑ. ÐÑÐÐÑ ÐÑÑÐ ÑÐÐÐ ÐÑÐÐ ÐÐÐÐÐÑÑ, ÐÐ ÑÑÐÐÐ ÑÐ root ÐÑÐÑÑÐÐ, ÑÐÐÐÐÑ ÑÐÐÐÑÐÑÐÑ ÐÐ ÑÐ ÐÑÐÐÐÑÐÑÐ ÐÑÐÐÑ ÐÐÑ.</string>
-    <string name="wizard_permissions_root">ÐÐÐÐÐÐÐÑÐ Ð ÐÐÐÐÐÐÐÐ</string>
-    <string name="wizard_permissions_stock">ÐÐÐÐÐÐÐ ÐÐ ÐÑÐÐÑ</string>
-    <string name="wizard_premissions_msg_root">ÐÐÐÐÑÐÐ! ÐÐÑÐÐÑÐÑÐÐÐÐ ÐÐÐÐ ÑÑÐ ÐÐÐÐÐÐÐÐÐÐ root ÐÑÐÑÑÐÐ ÐÐ ÐÑÐÐÑ. ÐÐÐÐÐÑÐÐÐÐ ÑÐ ÑÐ ÐÐÑÐÑÑÐÐÐ ÑÐ ÑÐÐ ÐÐÐÐÐÑÑ.</string>
-    <string name="wizard_permissions_msg_stock"> ÐÐÐÐ ÑÐÐ ÐÐ Ð ÐÐÐÐÐÐÐÑÐÐÐÐ, ÐÑÐÐÑ ÐÐÐÐ ÐÐ ÑÑÐÐÐ ÐÐÐÐÑÐÐ ÐÐÐÑÐÐ ÐÐÐÐÐÐÑ ÐÐÑÐÐÑ ÑÑÐÐ ÐÐÐ root ÐÑÐÑÑÐÐ. ÐÐ ÐÐÐÑÐÑÐ ÐÐÐÐÐÑ ÐÐÐÐÑÐ ÐÐ ÐÑÐÐÑ ÐÐ ÐÑ ÐÐÐÐÑÐ ÑÐÐÐÐ ÑÑÐÐÑ-ÐÐÑ.</string>
-   
-    <string name="wizard_permissions_no_root">ÐÐÐ ÐÐÐÐÑÐ root ÐÑÐÑÑÐÐ ÐÐÐ ÐÐÐ ÐÐ ÑÐÐÐÐÑÐÑÐ ÐÐ ÑÑÐ ÐÐÐÑÑÐÐÐÐ, ÐÐÐÐÑÑÐÐÐÐ ÐÑÐÐÑÑÐÑÑÐ ÑÐ ÐÐÐÐ ÐÐÑÐÑÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐÐ ÑÑÐ ÑÐÐÐÑÐÑ ÑÐ ÐÑÐÐÑ.</string>
-    <string name="wizard_permissions_consent">ÐÐÐÐÐÑÐÐ Ð ÑÐÐÐÐ ÐÐ ÐÑÐÐÐÐÐÐÐ ÐÐÐ root ÐÑÐÑÑÐÐ</string>
-   
-    <string name="wizard_permission_enable_root">ÐÐÐÐÐÐÐ root ÐÐ ÐÑÐÐÑ</string>
-    <string name="wizard_configure">ÐÐÐÐÑÑÐÐÑÐ ÐÐ ÑÐÑÐÑÐÑÐÑÐÑÐ</string>
-    <string name="wizard_configure_msg">ÐÑÐÐÑ ÐÐ ÐÐÐÐÐÐÐÑÐÐ, ÐÐÐ ÐÐ ÐÐ ÑÑÑÐÑÐÑÐ ÑÐÐÑ ÑÐÐÐÑÐÑÐÑ ÐÐ ÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐÐ ÐÐÑ, ÐÐÐ ÐÐÐÐÐÐÐÑÐÐ ÐÐ ÐÐ ÐÐÐÐÑÐÑÐ ÐÐÐÐÐÐÑÐÐÑÐ.</string> 
-    <string name="wizard_configure_all">ÐÑÐÐÑÐÑÐÑ ÐÐ ÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐÐ ÐÐÑ</string>
-    <string name="wizard_configure_select_apps">ÐÐÐÐÑÐ ÐÐÐÐÐÐÐÑÐÐ ÐÐÐÐÐÐÑÐÐ ÐÐ ÐÐÑ</string>
-    
-    
-    <string name="wizard_tips_tricks">ÐÑÐÐÑ-ÐÐÐÑÑÐÐÐ ÐÐÐÐÐÐÑÐÐ</string>
-    <string name="wizard_tips_msg">ÐÐ ÐÑÐÐÐÑÐÑÑÐÐÐÐ ÐÐ ÐÑÐÐÐÐÐÑÐ Ð ÐÐÑÐÑÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐÐ ÑÑÐ ÐÐÐÐÑ ÐÐÐÐ ÐÐÑÐÐÑÐÐ ÐÐ ÑÐ ÐÐÐÑÐÐÑ ÑÐ ÐÑÐÐÑ. ÐÑÐÑÐÑÐÐÑÐ ÐÐ ÐÐÐÑÐÑÐÑÐ ÐÐÐÐÐÑ ÐÐ ÐÐÑÑÐÐÐÑÐÑÐ.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (ÑÐÐÐ ÐÐÐÑÐÐÐ 1.x) - ÐÑÐÑÑÐÑ ÐÐÐÐÑÐÐÑÐÐ ÐÐ ÐÑÐÐÐÑÐÐÑÑ Ð ÐÐ ÐÑÐÐÑ</string>
-    <string name="wizard_tips_proxy">ÐÐÐÐÑÑÐÐÑÐ ÐÐ ÐÑÐÐÑÐ - ÐÐÑÑÐÑÐ ÐÐÐÐ ÐÐ ÐÐ ÐÐÐÑÐÐÑÑÐÑÐÑÐ ÐÐÐÐÐÐÑÐÐÑÐ ÐÐ ÑÐÐÐÑÐÑ ÑÐ ÐÑÐÐÑ</string>
-    
-    <string name="wizard_proxy_help_info">ÐÐÐÐÑÑÐÐÑÐ ÐÐ ÐÑÐÐÑÐ</string>
-    <string name="wizard_proxy_help_msg">ÐÐÐ ÐÐÐÐÐÐÑÐÑÐÑÐ ÐÐ ÐÐÐÑÐÐÐ ÑÑÐ ÑÐ ÐÐÑÐÑÑÐÑÐ ÐÐÐÐÑÐÑÐÐ ÑÐÐÑÑÐÐÐ ÐÐ ÐÑÐÐÑÐ ÐÐ HTTP ÐÐÐ SOCKS, ÑÐÐÐÑ ÐÐÐÐ ÐÐ ÑÐ ÐÐÐÑÐÐÑÑÐÑÐÑÐ ÐÐ ÑÐ ÐÐÐÑÐÐ ÑÐ ÐÑÐÐÑ Ð ÐÐ ÐÐÑÐÑÑÐ ÐÐÑ. \n\n
-    ÐÐÐÐÑÑÐÐÑÐÑÐ ÐÐ ÑÐÑÑ Ð 127.0.0.1 ÐÐÐ âlocalhostâ. ÐÐ HTTP, ÐÐÐÐÑÑÐÐÑÐÑÐ ÐÐ ÐÐÑÑ Ð 8118. ÐÐ SOCKS, ÐÐÑÑÐÑ Ð 9050. ÐÐÐÐÐÐÑ ÐÐÐÐÑÐ, ÐÐÑÐÑÑÐÑÐ SOCKS4A ÐÐÐ SOCKS5.
-    \n\n
-    ÐÐÐÐÑÐ ÐÐ ÐÐÑÑÐÑÐ ÐÐÐÐÑÐ ÐÐ ÐÑÐÐÑÐÑÐÑÐÑÐ ÐÐ ÐÐÐÑÐÐÐ ÐÑÐÐÑ ÐÐÐ ÐÐ: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">ÐÑÐÐÑ Ð ÑÐÑÐÐÐÐ!</string>
-    <string name="wizard_final_msg">ÐÑÐÑÐÑÐ ÐÐÑÐÐÐ ÐÑÑÐ ÐÐÐ ÑÐÐÐÐÑ ÐÐÐÑ ÐÐ ÐÐÑÐÑÑÐÑ ÐÐÑ ÐÐ ÐÐÐÐÑ ÑÐÐÐÐÑÐÐ ÐÑÐÑÐÐÐ: ÐÐÐÐÐÐÑÐ Ð ÐÐÐÐÐÑÐ, ÐÐÑÑÐ ÐÐ ÑÐÐÐÐÐÐÐ ÐÑÐÐÐ, ÐÐÐÐÑÐÑÑÐ, ÐÐÑÐÐÑÐ, ÐÐÑÐÐÑÐÑÐÐ, ÐÑÐÑÐÐÐ ÐÐ ÑÐÐÑÐÑÐÐÐÐ ÑÐÐÐÐÐ, Ð ÐÐÐÑÐÐ ÐÑÐÑÐÐÐ... Ð ÑÐÐÐ Ð ÐÐÐ ÑÑÐ ÑÐÑÐÐÐÐ ÐÐ ÐÐ ÐÐÑÐÑÑÐÑÐ!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time"> ÐÑÐÐÑÐÐ ÑÐ ÐÐÐÑÐÐÐÑÐ ÐÐ ÐÑÐÐÐÑÐ ÐÐÑ - ÐÐ ÐÐÐ ÐÐ ÐÐÐÑÐ ÐÐÐÐ ÐÐÐÐÐÑ ÑÑÐÐ Ð ÑÐÐÑÑÐÐ. ÐÐ ÐÐ ÐÐ ÐÑÐÐÐÑÐÑÐ ÐÐÑÐÐÑ ÐÑÐÑÑÐÑ, ÐÐÐÐÑÐÑÐ ÑÐ ÐÐÑÐÑÐÑÐ âÐÑÐÐÐÑÐâ ÐÐ ÐÐÐÐÑÐ. \n\nÐÐÑÐÑÐÑÐ ÐÑ ÐÐ https://guardianproject.info/apps/orbot ÐÐÐ ÐÑÐÑÐÑÐÑÐ ÐÐÑÐÐÐ ÐÐ help@xxxxxxxxxxxxxxxxxxxx ÐÐ ÐÐÐÐÑÐ ÐÐÑÐÑÐÐÑÐÐ.</string>
-
-	<string name="tor_check">ÐÐÐ ÑÐ ÑÐ ÐÑÐÐÑÐ ÑÑÑÐÐÐÑÐÑÐ https://check.torproject.org ÐÐ ÐÐÑÐÐÑ ÐÐÐ ÐÑÐÑÑÐÑ ÐÐ ÐÐ ÐÐÐÐÑÐ ÐÐÐÐ ÐÑÐÐÑ Ð ÐÑÐÐÐÐÐÐ ÐÐÐÑÐÐÑÑÐÑÐÐ Ð ÐÐÐÐ ÑÑÐ ÐÐÐÑÐÐÐÐ ÐÐ ÐÐÑ.</string>
-
-	
-    <string name="pref_hs_group">ÐÐÑÐÐÐÐ ÑÐÑÐÐÑÐ </string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-mk/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">ÐÑÐÐÑ</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">ÐÐÐÑÑÐ Ð ÐÑÐÐÑÑÐ ÐÐ ÐÐÑ</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">ÐÑÐÐÑ ÑÐ ÐÐÐÑÑÑÐÐ...</string>
+<string name="status_activated">ÐÐÐÑÐÐÐ ÐÐ ÐÑÐÐÐÑÐ ÐÐÑ</string>
+<string name="status_disabled">"ÐÑÐÐÑ Ð ÐÐÐÐÐÑÐÐÐÑÐÐ</string>
+<string name="status_shutting_down">ÐÑÐÐÑ ÑÐ ÐÑÐÐÑÑÑÐÐ</string>
+
+<string name="tor_process_connecting">ÐÐÐÑÑÑÐÐÑÐ ÐÐ ÐÐÑ...</string>
+<string name="tor_process_connecting_step2">ÐÐÑÐÐÑÑÐÐÑÐÐÑÐ ÐÐÐÑÑÐÐÐ...</string>
+<string name="tor_process_connecting_step3">ÐÐÑÐÐÐ.</string>
+<string name="tor_process_connecting_step4">ÑÐÐÐÑÐ.</string>
+
+<string name="not_anonymous_yet">ÐÐÐÐÐÐÐÐ: ÐÐÑÐÐÑ ÑÐÐÐÑÐÑÐÑ ÑÐÑÑÑÐ ÐÐ Ð ÐÐÐÐÐÐÐÐ! ÐÑÐÐÐ ÐÐ ÐÐ ÐÐÐÑÐÐÑÑÐÑÐÑÐ ÐÐÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐ ÐÐ ÐÐÑÐÑÑÐÑ ÐÑÐÐÑÐÑÐ ÐÐ HTTP, 127.0.0.1:8118, ÐÐÐ ÐÑÐÐÑÐÑÐ ÐÐ SOCKS4A ÐÐÐ SOCKS5, 127.0.0.1:9050</string>
+<string name="menu_home">ÐÐÐÐ</string>
+<string name="menu_browse">ÐÑÐÐÐÑÑÑÐÐÑÐ</string>
+<string name="menu_settings">ÐÐÐÐÑÑÐÐÑÐ</string>
+<string name="menu_log">ÐÐÐ</string>
+<string name="menu_info">ÐÐÐÐÑ</string>
+<string name="menu_apps">ÐÐÐÐÐÐÑÐÐ</string>
+<string name="menu_start">ÐÐÐÑÑÐ</string>
+<string name="menu_stop">ÐÑÐÐÑÑÐ</string>
+
+<string name="menu_about">ÐÐ</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">ÐÐÐÐÑ</string>
+<string name="button_close">ÐÐÑÐÐÑÐ</string>
+<string name="button_about">ÐÐ</string>
+
+<string name="button_clear_log">ÐÐÐÑÐÑÐ ÐÐÐ</string>
+
+
+<string name="menu_verify">ÐÑÐÐÐÑÐ</string>
+<string name="menu_exit">ÐÐÐÐÐ</string>
+<string name="powered_by">ÐÐÐÐÑÑÐÐÐÐ ÐÐ ÐÑÐÐÐÑÐÑ ÐÐÑ</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">ÐÑÐÐÑÐÐÑÐÐÑÐÐ ÐÑÐÐÑÐ (ÐÐÑÐ root ÐÑÐÑÑÐÐ)</string>
+<string name="pref_trans_proxy_title">ÐÑÐÐÑÐÐÑÐÐÑÐÐ ÐÑÐÐÑÐ</string>
+<string name="pref_trans_proxy_summary">ÐÐÑÐÐÐÑÑÐÐ ÑÐÑÐÑÐÑÐÑÐÑÐ ÐÐ ÐÐÐÐÐÐÑÐÐÑÐ</string>
+
+<string name="pref_transparent_all_title">ÐÐÐÐÑÐÐ ÑÐÑÐÑÐÑÐÑÐÑÐ</string>
+<string name="pref_transparent_all_summary">ÐÑÐÐÑÐÑÐÑ ÐÐ ÑÐÐÐÑÐÑÐÑÐÑ ÐÐ ÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐÐ ÐÐÑ</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">ÐÐÐÑÑÐÐÑÐ ÐÑÐÐÑÐÐÐ ÐÐ ÐÐÑ ÑÐ ÑÑÐÐÑÐÐ ÐÐÑÑÐÐÐÑÐÐÐ!</string>
+<string name="status_install_fail">ÐÐÐÑÑÐÐÑÐ ÑÐÑÐÐÐÐ ÐÐ ÐÐÑ ÐÐ ÐÐÐÐÐ ÐÐ ÑÐ ÐÐÑÑÐÐÐÑÐÐÑ. ÐÐÐÐÑÐ ÐÐ ÐÐÐÐÑ Ð ÐÐÐÐÑÑÐÑÐ ÐÃ ÐÐ ÐÐÐ ÐÐ tor-assistants@xxxxxxxxxxxxxx</string>
+
+<string name="title_error">ÐÐÐÐÐÐÑÐÑÐÐ ÐÑÐÑÐÐ</string>
+
+<string name="wizard_title">ÐÐÐÑÐÐÐÑÐÐÐÑÐ ÐÐ ÐÑÐÐÑ</string>
+
+<string name="wizard_btn_tell_me_more">ÐÐ ÐÑÐÐÑ</string>
+<string name="btn_next">ÐÐÐÑÐÐ</string>
+<string name="btn_back">ÐÐÐÐÐ</string>
+<string name="btn_finish">ÐÑÐÑ</string>
+
+<string name="btn_okay">ÐÐ ÑÐÐ</string>
+<string name="btn_cancel">ÐÑÐÐÐÐ ÑÐ</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">ÐÑÐÐÑ ÐÐÐÐÐÐÐÑÐÐ ÑÐÐÐÑÐ ÑÐ ÐÐÑ ÐÐ ÐÐÐÑÐÐÐ. ÐÐÑ Ð ÑÐÐÐÐÐÐÐ ÑÐÑÑÐÐÑ Ð ÐÑÐÐÑÐÐÐ ÐÑÐÐÐ ÐÐÑÐÑÑÐ ÐÐ ÐÐÐÐÐÐ ÐÐ ÑÐ ÐÐÑÑÐÑÐÑÐ ÐÐ ÐÐÑÐÐÐÐ ÐÐÐ ÐÑÐÐÐÐ ÐÑÐÑÐÑÑÐÑÐÐÑÐ, ÐÐÐÐÐÑ ÐÐÐÐ ÐÐÐÐÐÐÐ ÐÐ ÑÐÐÐÑÐÑÐÑ (traffic analysis), ÐÐÑ ÐÑÐÑÑÑÐÐÑÐÐÐÑ ÐÐÐÐÐÐ ÐÐ ÐÐÑÐÐÑÐ ÑÐÐÐÐÐÐ Ð ÐÑÐÐÐÑÐÐÑÑ, ÐÐ ÑÑÐÐÐÐÑÐÐÑÐ ÐÐÑÐÐÑÑÐ Ð ÐÐÐÐÑÐ ÐÐ ÐÐÐÐÑÐÐÐ ÐÐÑÐÐÑÐÑ, ÐÐÐÐ Ð ÐÐ ÐÑÐÐÐÐÐÑÐ ÐÐÐÐÐÐÐÐÑÑ.\n\n*ÐÐÐÐÐÐÐÐ:*ÐÐÐÐÐÑ ÑÐÐÑ ÑÑÐ ÑÑÐ ÐÐ ÐÐÑÑÐÐÐÑÐÐÐ ÐÑÐÐÑ _ÐÐÐÐ_ ÐÐÑÐÐÐÑÑÐÐ ÐÐ ÐÐ ÐÐÐÑÐÐÐ ÐÐÑÐÐÑ ÐÐÐÐÐÐÐ ÑÐÐÐÑÐÑÐÑ ÐÐÐÐÐÐÐÐ! ÐÐ, ÐÐÐÑ ÐÑÐÐÐÑ ÑÐ ÐÐ ÐÐÐÐÐÐÐ ÐÐ ÑÐ ÐÐÐÑÐÑÐÑÐ.</string>
+    <string name="wizard_details">ÐÐÐÐÐ ÐÐÑÐÐÐ ÐÐ ÐÑÐÐÑ</string>
+    <string name="wizard_details_msg">ÐÑÐÐÑ Ð ÐÐÐÐÐÐÑÐÑÐ ÑÐ ÐÑÐÐÑÐÐ ÐÐÐ ÐÐÑÐÑÑÐ ÐÐ ÑÐÐÑÐÐ ÐÐÑ, LibEvent Ð Privoxy. ÐÐÐ ÐÐ ÐÑÐÐ ÐÐÐÐÐÐÐ ÐÑÐÐÑÐÑÐ ÐÐ HTTP (ÐÐÑÑ 8118) Ð SOCKS (ÐÐÑÑ 9050) ÐÐ ÐÐÐÑÐÑÐÐÑÐ ÑÐ ÐÑÐÐÐÑÐ ÐÐÑ. ÐÑÐÐÑ ÐÑÑÐ ÑÐÐÐ ÐÑÐÐ ÐÐÐÐÐÑÑ, ÐÐ ÑÑÐÐÐ ÑÐ root ÐÑÐÑÑÐÐ, ÑÐÐÐÐÑ ÑÐÐÐÑÐÑÐÑ ÐÐ ÑÐ ÐÑÐÐÐÑÐÑÐ ÐÑÐÐÑ ÐÐÑ.</string>
+    <string name="wizard_permissions_root">ÐÐÐÐÐÐÐÑÐ Ð ÐÐÐÐÐÐÐÐ</string>
+    <string name="wizard_permissions_stock">ÐÐÐÐÐÐÐ ÐÐ ÐÑÐÐÑ</string>
+    <string name="wizard_premissions_msg_root">ÐÐÐÐÑÐÐ! ÐÐÑÐÐÑÐÑÐÐÐÐ ÐÐÐÐ ÑÑÐ ÐÐÐÐÐÐÐÐÐÐ root ÐÑÐÑÑÐÐ ÐÐ ÐÑÐÐÑ. ÐÐÐÐÐÑÐÐÐÐ ÑÐ ÑÐ ÐÐÑÐÑÑÐÐÐ ÑÐ ÑÐÐ ÐÐÐÐÐÑÑ.</string>
+    <string name="wizard_permissions_msg_stock"> ÐÐÐÐ ÑÐÐ ÐÐ Ð ÐÐÐÐÐÐÐÑÐÐÐÐ, ÐÑÐÐÑ ÐÐÐÐ ÐÐ ÑÑÐÐÐ ÐÐÐÐÑÐÐ ÐÐÐÑÐÐ ÐÐÐÐÐÐÑ ÐÐÑÐÐÑ ÑÑÐÐ ÐÐÐ root ÐÑÐÑÑÐÐ. ÐÐ ÐÐÐÑÐÑÐ ÐÐÐÐÐÑ ÐÐÐÐÑÐ ÐÐ ÐÑÐÐÑ ÐÐ ÐÑ ÐÐÐÐÑÐ ÑÐÐÐÐ ÑÑÐÐÑ-ÐÐÑ.</string>
+   
+    <string name="wizard_permissions_no_root">ÐÐÐ ÐÐÐÐÑÐ root ÐÑÐÑÑÐÐ ÐÐÐ ÐÐÐ ÐÐ ÑÐÐÐÐÑÐÑÐ ÐÐ ÑÑÐ ÐÐÐÑÑÐÐÐÐ, ÐÐÐÐÑÑÐÐÐÐ ÐÑÐÐÑÑÐÑÑÐ ÑÐ ÐÐÐÐ ÐÐÑÐÑÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐÐ ÑÑÐ ÑÐÐÐÑÐÑ ÑÐ ÐÑÐÐÑ.</string>
+    <string name="wizard_permissions_consent">ÐÐÐÐÐÑÐÐ Ð ÑÐÐÐÐ ÐÐ ÐÑÐÐÐÐÐÐÐ ÐÐÐ root ÐÑÐÑÑÐÐ</string>
+   
+    <string name="wizard_permission_enable_root">ÐÐÐÐÐÐÐ root ÐÐ ÐÑÐÐÑ</string>
+    <string name="wizard_configure">ÐÐÐÐÑÑÐÐÑÐ ÐÐ ÑÐÑÐÑÐÑÐÑÐÑÐ</string>
+    <string name="wizard_configure_msg">ÐÑÐÐÑ ÐÐ ÐÐÐÐÐÐÐÑÐÐ, ÐÐÐ ÐÐ ÐÐ ÑÑÑÐÑÐÑÐ ÑÐÐÑ ÑÐÐÐÑÐÑÐÑ ÐÐ ÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐÐ ÐÐÑ, ÐÐÐ ÐÐÐÐÐÐÐÑÐÐ ÐÐ ÐÐ ÐÐÐÐÑÐÑÐ ÐÐÐÐÐÐÑÐÐÑÐ.</string> 
+    <string name="wizard_configure_all">ÐÑÐÐÑÐÑÐÑ ÐÐ ÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐÐ ÐÐÑ</string>
+    <string name="wizard_configure_select_apps">ÐÐÐÐÑÐ ÐÐÐÐÐÐÐÑÐÐ ÐÐÐÐÐÐÑÐÐ ÐÐ ÐÐÑ</string>
+    
+    
+    <string name="wizard_tips_tricks">ÐÑÐÐÑ-ÐÐÐÑÑÐÐÐ ÐÐÐÐÐÐÑÐÐ</string>
+    <string name="wizard_tips_msg">ÐÐ ÐÑÐÐÐÑÐÑÑÐÐÐÐ ÐÐ ÐÑÐÐÐÐÐÑÐ Ð ÐÐÑÐÑÑÐÑÐ ÐÐÐÐÐÐÑÐÐ ÐÐÐ ÑÑÐ ÐÐÐÐÑ ÐÐÐÐ ÐÐÑÐÐÑÐÐ ÐÐ ÑÐ ÐÐÐÑÐÐÑ ÑÐ ÐÑÐÐÑ. ÐÑÐÑÐÑÐÐÑÐ ÐÐ ÐÐÐÑÐÑÐÑÐ ÐÐÐÐÐÑ ÐÐ ÐÐÑÑÐÐÐÑÐÑÐ.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (ÑÐÐÐ ÐÐÐÑÐÐÐ 1.x) - ÐÑÐÑÑÐÑ ÐÐÐÐÑÐÐÑÐÐ ÐÐ ÐÑÐÐÐÑÐÐÑÑ Ð ÐÐ ÐÑÐÐÑ</string>
+    <string name="wizard_tips_proxy">ÐÐÐÐÑÑÐÐÑÐ ÐÐ ÐÑÐÐÑÐ - ÐÐÑÑÐÑÐ ÐÐÐÐ ÐÐ ÐÐ ÐÐÐÑÐÐÑÑÐÑÐÑÐ ÐÐÐÐÐÐÑÐÐÑÐ ÐÐ ÑÐÐÐÑÐÑ ÑÐ ÐÑÐÐÑ</string>
+    
+    <string name="wizard_proxy_help_info">ÐÐÐÐÑÑÐÐÑÐ ÐÐ ÐÑÐÐÑÐ</string>
+    <string name="wizard_proxy_help_msg">ÐÐÐ ÐÐÐÐÐÐÑÐÑÐÑÐ ÐÐ ÐÐÐÑÐÐÐ ÑÑÐ ÑÐ ÐÐÑÐÑÑÐÑÐ ÐÐÐÐÑÐÑÐÐ ÑÐÐÑÑÐÐÐ ÐÐ ÐÑÐÐÑÐ ÐÐ HTTP ÐÐÐ SOCKS, ÑÐÐÐÑ ÐÐÐÐ ÐÐ ÑÐ ÐÐÐÑÐÐÑÑÐÑÐÑÐ ÐÐ ÑÐ ÐÐÐÑÐÐ ÑÐ ÐÑÐÐÑ Ð ÐÐ ÐÐÑÐÑÑÐ ÐÐÑ. \n\n
+    ÐÐÐÐÑÑÐÐÑÐÑÐ ÐÐ ÑÐÑÑ Ð 127.0.0.1 ÐÐÐ âlocalhostâ. ÐÐ HTTP, ÐÐÐÐÑÑÐÐÑÐÑÐ ÐÐ ÐÐÑÑ Ð 8118. ÐÐ SOCKS, ÐÐÑÑÐÑ Ð 9050. ÐÐÐÐÐÐÑ ÐÐÐÐÑÐ, ÐÐÑÐÑÑÐÑÐ SOCKS4A ÐÐÐ SOCKS5.
+    \n\n
+    ÐÐÐÐÑÐ ÐÐ ÐÐÑÑÐÑÐ ÐÐÐÐÑÐ ÐÐ ÐÑÐÐÑÐÑÐÑÐÑÐ ÐÐ ÐÐÐÑÐÐÐ ÐÑÐÐÑ ÐÐÐ ÐÐ: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">ÐÑÐÐÑ Ð ÑÐÑÐÐÐÐ!</string>
+    <string name="wizard_final_msg">ÐÑÐÑÐÑÐ ÐÐÑÐÐÐ ÐÑÑÐ ÐÐÐ ÑÐÐÐÐÑ ÐÐÐÑ ÐÐ ÐÐÑÐÑÑÐÑ ÐÐÑ ÐÐ ÐÐÐÐÑ ÑÐÐÐÐÑÐÐ ÐÑÐÑÐÐÐ: ÐÐÐÐÐÐÑÐ Ð ÐÐÐÐÐÑÐ, ÐÐÑÑÐ ÐÐ ÑÐÐÐÐÐÐÐ ÐÑÐÐÐ, ÐÐÐÐÑÐÑÑÐ, ÐÐÑÐÐÑÐ, ÐÐÑÐÐÑÐÑÐÐ, ÐÑÐÑÐÐÐ ÐÐ ÑÐÐÑÐÑÐÐÐÐ ÑÐÐÐÐÐ, Ð ÐÐÐÑÐÐ ÐÑÐÑÐÐÐ... Ð ÑÐÐÐ Ð ÐÐÐ ÑÑÐ ÑÐÑÐÐÐÐ ÐÐ ÐÐ ÐÐÑÐÑÑÐÑÐ!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time"> ÐÑÐÐÑÐÐ ÑÐ ÐÐÐÑÐÐÐÑÐ ÐÐ ÐÑÐÐÐÑÐ ÐÐÑ - ÐÐ ÐÐÐ ÐÐ ÐÐÐÑÐ ÐÐÐÐ ÐÐÐÐÐÑ ÑÑÐÐ Ð ÑÐÐÑÑÐÐ. ÐÐ ÐÐ ÐÐ ÐÑÐÐÐÑÐÑÐ ÐÐÑÐÐÑ ÐÑÐÑÑÐÑ, ÐÐÐÐÑÐÑÐ ÑÐ ÐÐÑÐÑÐÑÐ âÐÑÐÐÐÑÐâ ÐÐ ÐÐÐÐÑÐ. \n\nÐÐÑÐÑÐÑÐ ÐÑ ÐÐ https://guardianproject.info/apps/orbot ÐÐÐ ÐÑÐÑÐÑÐÑÐ ÐÐÑÐÐÐ ÐÐ help@xxxxxxxxxxxxxxxxxxxx ÐÐ ÐÐÐÐÑÐ ÐÐÑÐÑÐÐÑÐÐ.</string>
+
+	<string name="tor_check">ÐÐÐ ÑÐ ÑÐ ÐÑÐÐÑÐ ÑÑÑÐÐÐÑÐÑÐ https://check.torproject.org ÐÐ ÐÐÑÐÐÑ ÐÐÐ ÐÑÐÑÑÐÑ ÐÐ ÐÐ ÐÐÐÐÑÐ ÐÐÐÐ ÐÑÐÐÑ Ð ÐÑÐÐÐÐÐÐ ÐÐÐÑÐÐÑÑÐÑÐÐ Ð ÐÐÐÐ ÑÑÐ ÐÐÐÑÐÐÐÐ ÐÐ ÐÐÑ.</string>
+
+	
+    <string name="pref_hs_group">ÐÐÑÐÐÐÐ ÑÐÑÐÐÑÐ </string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-nb/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-  
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">start og stopp Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot starter...</string>
-<string name="status_activated">Tilkoblet Tor-nettverket</string>
-<string name="status_disabled">"Orbot er deaktivert</string>
-<string name="status_shutting_down">Orbot skrur seg av</string>
-
-<string name="tor_process_connecting">Starter Tor...</string>
-<string name="tor_process_connecting_step2">autentiserer kontrolltilkobling...</string>
-<string name="tor_process_connecting_step3">ferdig.</string>
-<string name="tor_process_connecting_step4">venter.</string>
-
-<string name="not_anonymous_yet">ADVARSEL: Trafikken din er ikke anonym helt enda! VÃr vennlig og konfigurer applikasjonene dine til à bruke HTTP proxy 127.0.0.1:8118 eller SOCKS4A eller SOCKS5 proxy 127.0.0.1:9050</string>
-<string name="menu_home">Hjem</string>
-<string name="menu_browse">GÃ til</string>
-<string name="menu_settings">Innstillinger</string>
-<string name="menu_log">Logg</string>
-<string name="menu_info">Hjelp</string>
-<string name="menu_apps">Applikasjoner</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stopp</string>
-
-<string name="menu_about">About</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
-
-
-<string name="button_help">Hjelp</string>
-<string name="button_close">Avslutt</string>
-<string name="button_about">Om</string>
-
-<string name="menu_verify">Check</string>
-<string name="menu_exit">Exit</string>
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-nb/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+  
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">start og stopp Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot starter...</string>
+<string name="status_activated">Tilkoblet Tor-nettverket</string>
+<string name="status_disabled">"Orbot er deaktivert</string>
+<string name="status_shutting_down">Orbot skrur seg av</string>
+
+<string name="tor_process_connecting">Starter Tor...</string>
+<string name="tor_process_connecting_step2">autentiserer kontrolltilkobling...</string>
+<string name="tor_process_connecting_step3">ferdig.</string>
+<string name="tor_process_connecting_step4">venter.</string>
+
+<string name="not_anonymous_yet">ADVARSEL: Trafikken din er ikke anonym helt enda! VÃr vennlig og konfigurer applikasjonene dine til à bruke HTTP proxy 127.0.0.1:8118 eller SOCKS4A eller SOCKS5 proxy 127.0.0.1:9050</string>
+<string name="menu_home">Hjem</string>
+<string name="menu_browse">GÃ til</string>
+<string name="menu_settings">Innstillinger</string>
+<string name="menu_log">Logg</string>
+<string name="menu_info">Hjelp</string>
+<string name="menu_apps">Applikasjoner</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stopp</string>
+
+<string name="menu_about">About</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
+
+
+<string name="button_help">Hjelp</string>
+<string name="button_close">Avslutt</string>
+<string name="button_about">Om</string>
+
+<string name="menu_verify">Check</string>
+<string name="menu_exit">Exit</string>
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-nl/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">start en stop Tor</string>
-    <string name="tor_proxy_service_process">torproxydienst</string>
-   
-<string name="status_starting_up">Orbot is aan het starten...</string>
-<string name="status_activated">Aangesloten op het Tor netwerk</string>
-<string name="status_disabled">Orbot is uitgeschakeld</string>
-<string name="status_shutting_down">Orbot is aan het afsluiten</string>
-
-<string name="tor_process_connecting">Bezig met opstarten van Tor...</string>
-<string name="tor_process_connecting_step2">Bezig met instellen aansturing</string>
-<string name="tor_process_connecting_step3">klaar.</string>
-<string name="tor_process_connecting_step4">aan het wachten.</string>
-
-<string name="not_anonymous_yet">WAARSCHUWING: Uw verkeer is nog niet anononiem! Stel uw programma\'s alstublieft in dat ze gebruik maken van HTTP proxy 127.0.0.1:8118 of SOCKS4A of SOCKS5 proxy 127.0.0.1:9050</string>
-<string name="menu_home">Thuis</string>
-<string name="menu_browse">Bladeren</string>
-<string name="menu_settings">Instellingen</string>
-<string name="menu_log">Logboek</string>
-<string name="menu_info">Hulp</string>
-<string name="menu_apps">Applicaties</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stop</string>
-
-<string name="menu_about">Over</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Hulp</string>
-<string name="button_close">Afsluiten</string>
-<string name="button_about">Over</string>
-
-<string name="button_clear_log">Wis logboek</string>
-
-
-<string name="menu_verify">Controleer</string>
-<string name="menu_exit">Verlaten</string>
-<string name="powered_by">aangedreven door het Tor Project</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Transparant Proxyen (Vereist Root)</string>
-<string name="pref_trans_proxy_title">Transparant Proxyen</string>
-<string name="pref_trans_proxy_summary">Automatisch Tor forceren van aplicaties</string>
-
-<string name="pref_transparent_all_title">Tor Alles</string>
-<string name="pref_transparent_all_summary">Proxy verkeer voor alle toepasingen door Tor</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Tor\'s binaire bestanden succesvol geÃnstalleerd</string>
-<string name="status_install_fail">The binaire bestanden konden niet worden geÃnstalleerd. Gelieve het log te raadplegen en tor-assistants@xxxxxxxxxxxxxx op de hoogte te stellen</string>
-
-<string name="title_error">Toepassingsfout</string>
-
-<string name="wizard_title">Welkom bij Orbot</string>
-
-<string name="wizard_btn_tell_me_more">Over Orbot</string>
-<string name="btn_next">Volgende</string>
-<string name="btn_back">Terug</string>
-<string name="btn_finish">Einde</string>
-
-<string name="btn_okay">OK</string>
-<string name="btn_cancel">Annuleren</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot brengt Tor naar de Android. Tor is vrije software en een open netwerk dat u helpt te verdedigen tegen netwerk toezicht welke aanvallen zijn op uw vrijheid en privacy, geheime zakelijke documenten en zaken relaties.
-
-*WAARSCHUWING:* Door het installeren van Orbot word uw verkeer _niet_ automatisch geproxyt! Deze wizard helpt u hier mee.</string>
-    <string name="wizard_details">Enkele Orbot Details</string>
-    <string name="wizard_details_msg">Orbot is een open-source applicatie waarin Tor, LibEvent en Privoxy zich bevinden. Het creeÃrt een lokale HTTP proxy (8118) en een SOCKS proxy (9050) naar het Tor netwerk. Orbot heeft ook de mogelijkheid om al het internet verkeer over het Tor netwerk te sturen.</string>
-    <string name="wizard_permissions_root">Toelating toegestaan</string>
-    <string name="wizard_permissions_stock">Orbot Rechten</string>
-    <string name="wizard_premissions_msg_root">Uitstekend! We hebben gedetecteerd dat je root rechten hebt aangezet voor Orbot. We gebruiken deze kracht met verstand.</string>
-    <string name="wizard_permissions_msg_stock">Alhoewel het niet verplicht is kan Orbot ook nog krachtiger worden. Als u root rechten heeft kunt u op de knop onderaan Orbot super krachten toewijzen.</string>
-   
-    <string name="wizard_permissions_no_root">Als u niet over root toegang beschikt en geen idee hebt waar u mee bezig bent zult u zeker moeten zijn dat de applicaties die u gebruikt geschikt voor Orbot zijn.</string>
-    <string name="wizard_permissions_consent">Ik begrijp dit en wil verdergaan zonder root</string>
-   
-    <string name="wizard_permission_enable_root">Root toestaan voor Orbot</string>
-    <string name="wizard_configure">Torificatie Configureren</string>
-    <string name="wizard_configure_msg">Orbot geeft u de mogelijkheid om induvidueel te bepalen welk van uw applicaties over het Tor netwerk gaan.</string> 
-    <string name="wizard_configure_all">Proxy alle toepasingen door Tor</string>
-    <string name="wizard_configure_select_apps">Selecteer individuele toepasingen voor Tor</string>
-    
-    
-    <string name="wizard_tips_tricks">Orbot-beschikbare Apps</string>
-    <string name="wizard_tips_msg">We raden u aan om te apps te downloaden welke zich zich automatisch verbinden met Orbot. Klik op de buttons hier beneden om te installeren.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (Alleen Android 1.x) - Browser gemaakt voor privacy &amp; voor Orbot</string>
-    <string name="wizard_tips_proxy">Proxy Instellingen - Leer hoe u uw apps kunt configureren voor Orbot</string>
-    
-    <string name="wizard_proxy_help_info">Proxy Instellingen</string>
-    <string name="wizard_proxy_help_msg">Als de Android app welke u gebruikt beschikt over een HTTP of SOCKS proxy instelling, dan kunt u het configureren zodat het via Orbot over het Tor netwerk gaat.
-
-
-De host instelling is 127.0.0.1 of "localhost". De poort voor SOCS is 9050 en voor HTTP 8118. Gebruik SOCKS4A or SOCKS5 indien nodig.
-
-
-U kunt meer leren over het proxyen op Android door naar de FAQ op http://tinyurl.com/proxyandroid te gaan
-    </string>
-    
-    <string name="wizard_final">Orbot is klaar!</string>
-    <string name="wizard_final_msg">Honderdduizenden verschillende mensen over de wereld gebruiken Tor, zoals: journalisten, bloggers, mensen rechten medewerkers, soldaten, bedrijven, burgers met onderdrukte religies, en natuurlijk normale mensen... En nu bent u ook klaar om te gaan!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">U bent succesvol verbonden met het Tor netwerk, maar dit betekent NIET dat u apparaat volledig veilig is. Gebruik te \'Check\' optie vanuit het menu om u browser te testen.
-
-Bezoek onze website op https://guardianproject.info/apps/orbot of stuuf een email naar help@xxxxxxxxxxxxxxxxxxxx voor vragen.</string>
-
-	<string name="tor_check">Dit opent uw standaard browser naar https://check.torproject.org om te controleren of Orbot succesvol is geconfigureerd om te verbinden met het Tor netwerk.</string>
-
-	
-    <string name="pref_hs_group">Verborgen diensten</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-nl/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">start en stop Tor</string>
+    <string name="tor_proxy_service_process">torproxydienst</string>
+   
+<string name="status_starting_up">Orbot is aan het starten...</string>
+<string name="status_activated">Aangesloten op het Tor netwerk</string>
+<string name="status_disabled">Orbot is uitgeschakeld</string>
+<string name="status_shutting_down">Orbot is aan het afsluiten</string>
+
+<string name="tor_process_connecting">Bezig met opstarten van Tor...</string>
+<string name="tor_process_connecting_step2">Bezig met instellen aansturing</string>
+<string name="tor_process_connecting_step3">klaar.</string>
+<string name="tor_process_connecting_step4">aan het wachten.</string>
+
+<string name="not_anonymous_yet">WAARSCHUWING: Uw verkeer is nog niet anononiem! Stel uw programma\'s alstublieft in dat ze gebruik maken van HTTP proxy 127.0.0.1:8118 of SOCKS4A of SOCKS5 proxy 127.0.0.1:9050</string>
+<string name="menu_home">Thuis</string>
+<string name="menu_browse">Bladeren</string>
+<string name="menu_settings">Instellingen</string>
+<string name="menu_log">Logboek</string>
+<string name="menu_info">Hulp</string>
+<string name="menu_apps">Applicaties</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stop</string>
+
+<string name="menu_about">Over</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Hulp</string>
+<string name="button_close">Afsluiten</string>
+<string name="button_about">Over</string>
+
+<string name="button_clear_log">Wis logboek</string>
+
+
+<string name="menu_verify">Controleer</string>
+<string name="menu_exit">Verlaten</string>
+<string name="powered_by">aangedreven door het Tor Project</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Transparant Proxyen (Vereist Root)</string>
+<string name="pref_trans_proxy_title">Transparant Proxyen</string>
+<string name="pref_trans_proxy_summary">Automatisch Tor forceren van aplicaties</string>
+
+<string name="pref_transparent_all_title">Tor Alles</string>
+<string name="pref_transparent_all_summary">Proxy verkeer voor alle toepasingen door Tor</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Tor\'s binaire bestanden succesvol geÃnstalleerd</string>
+<string name="status_install_fail">The binaire bestanden konden niet worden geÃnstalleerd. Gelieve het log te raadplegen en tor-assistants@xxxxxxxxxxxxxx op de hoogte te stellen</string>
+
+<string name="title_error">Toepassingsfout</string>
+
+<string name="wizard_title">Welkom bij Orbot</string>
+
+<string name="wizard_btn_tell_me_more">Over Orbot</string>
+<string name="btn_next">Volgende</string>
+<string name="btn_back">Terug</string>
+<string name="btn_finish">Einde</string>
+
+<string name="btn_okay">OK</string>
+<string name="btn_cancel">Annuleren</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot brengt Tor naar de Android. Tor is vrije software en een open netwerk dat u helpt te verdedigen tegen netwerk toezicht welke aanvallen zijn op uw vrijheid en privacy, geheime zakelijke documenten en zaken relaties.
+
+*WAARSCHUWING:* Door het installeren van Orbot word uw verkeer _niet_ automatisch geproxyt! Deze wizard helpt u hier mee.</string>
+    <string name="wizard_details">Enkele Orbot Details</string>
+    <string name="wizard_details_msg">Orbot is een open-source applicatie waarin Tor, LibEvent en Privoxy zich bevinden. Het creeÃrt een lokale HTTP proxy (8118) en een SOCKS proxy (9050) naar het Tor netwerk. Orbot heeft ook de mogelijkheid om al het internet verkeer over het Tor netwerk te sturen.</string>
+    <string name="wizard_permissions_root">Toelating toegestaan</string>
+    <string name="wizard_permissions_stock">Orbot Rechten</string>
+    <string name="wizard_premissions_msg_root">Uitstekend! We hebben gedetecteerd dat je root rechten hebt aangezet voor Orbot. We gebruiken deze kracht met verstand.</string>
+    <string name="wizard_permissions_msg_stock">Alhoewel het niet verplicht is kan Orbot ook nog krachtiger worden. Als u root rechten heeft kunt u op de knop onderaan Orbot super krachten toewijzen.</string>
+   
+    <string name="wizard_permissions_no_root">Als u niet over root toegang beschikt en geen idee hebt waar u mee bezig bent zult u zeker moeten zijn dat de applicaties die u gebruikt geschikt voor Orbot zijn.</string>
+    <string name="wizard_permissions_consent">Ik begrijp dit en wil verdergaan zonder root</string>
+   
+    <string name="wizard_permission_enable_root">Root toestaan voor Orbot</string>
+    <string name="wizard_configure">Torificatie Configureren</string>
+    <string name="wizard_configure_msg">Orbot geeft u de mogelijkheid om induvidueel te bepalen welk van uw applicaties over het Tor netwerk gaan.</string> 
+    <string name="wizard_configure_all">Proxy alle toepasingen door Tor</string>
+    <string name="wizard_configure_select_apps">Selecteer individuele toepasingen voor Tor</string>
+    
+    
+    <string name="wizard_tips_tricks">Orbot-beschikbare Apps</string>
+    <string name="wizard_tips_msg">We raden u aan om te apps te downloaden welke zich zich automatisch verbinden met Orbot. Klik op de buttons hier beneden om te installeren.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (Alleen Android 1.x) - Browser gemaakt voor privacy &amp; voor Orbot</string>
+    <string name="wizard_tips_proxy">Proxy Instellingen - Leer hoe u uw apps kunt configureren voor Orbot</string>
+    
+    <string name="wizard_proxy_help_info">Proxy Instellingen</string>
+    <string name="wizard_proxy_help_msg">Als de Android app welke u gebruikt beschikt over een HTTP of SOCKS proxy instelling, dan kunt u het configureren zodat het via Orbot over het Tor netwerk gaat.
+
+
+De host instelling is 127.0.0.1 of "localhost". De poort voor SOCS is 9050 en voor HTTP 8118. Gebruik SOCKS4A or SOCKS5 indien nodig.
+
+
+U kunt meer leren over het proxyen op Android door naar de FAQ op http://tinyurl.com/proxyandroid te gaan
+    </string>
+    
+    <string name="wizard_final">Orbot is klaar!</string>
+    <string name="wizard_final_msg">Honderdduizenden verschillende mensen over de wereld gebruiken Tor, zoals: journalisten, bloggers, mensen rechten medewerkers, soldaten, bedrijven, burgers met onderdrukte religies, en natuurlijk normale mensen... En nu bent u ook klaar om te gaan!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">U bent succesvol verbonden met het Tor netwerk, maar dit betekent NIET dat u apparaat volledig veilig is. Gebruik te \'Check\' optie vanuit het menu om u browser te testen.
+
+Bezoek onze website op https://guardianproject.info/apps/orbot of stuuf een email naar help@xxxxxxxxxxxxxxxxxxxx voor vragen.</string>
+
+	<string name="tor_check">Dit opent uw standaard browser naar https://check.torproject.org om te controleren of Orbot succesvol is geconfigureerd om te verbinden met het Tor netwerk.</string>
+
+	
+    <string name="pref_hs_group">Verborgen diensten</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-pl/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">wÅÄcz i wyÅÄcz Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot startuje...</string>
-<string name="status_activated">PodÅÄczony do sieci Tor</string>
-<string name="status_disabled">Orbot wyÅÄczony</string>
-<string name="status_shutting_down">Orbot wyÅÄcza siÄ</string>
-
-<string name="tor_process_connecting">Tor startuje...</string>
-<string name="tor_process_connecting_step2">Ustawianie sterowania...</string>
-<string name="tor_process_connecting_step3">zakoÅczono.</string>
-<string name="tor_process_connecting_step4">oczekiwanie.</string>
-
-<string name="not_anonymous_yet">UWAGA: Twoja komunikacja nie jest jeszcze anonimowa! ProszÄ skonfiguruj aplikacje aby uÅywaÅy serwera proxy HTTP 127.0.0.1:8118 lub SOCKS4A lub SOCKS5 127.0.0.1:9050</string>
-<string name="menu_home">Start</string>
-<string name="menu_browse">PrzeglÄdaj</string>
-<string name="menu_settings">Ustawienia</string>
-<string name="menu_log">Logi</string>
-<string name="menu_info">Pomoc</string>
-<string name="menu_apps">Aplikacje</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stop</string>
-
-<string name="menu_about">O programie</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Pomoc</string>
-<string name="button_close">Zamknij</string>
-<string name="button_about">O programie</string>
-
-<string name="button_clear_log">CzyÅÄ dziennik</string>
-
-
-<string name="menu_verify">SprawdÅ</string>
-<string name="menu_exit">WyjÅcie</string>
-<string name="powered_by">napÄdzane oprogramowaniem Projektu Tor</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Przekierowanie przezroczyste (Wymaga uprawnieÅ administratora)</string>
-<string name="pref_trans_proxy_title">Przekierowanie przezroczyste</string>
-<string name="pref_trans_proxy_summary">Automatyczne toryfikowanie aplikacji</string>
-
-<string name="pref_transparent_all_title">PrzepuÅÄ wszystko przez Tora</string>
-<string name="pref_transparent_all_summary">Przekierowanie ruchu wszystkich aplikacji przez Tora</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Binarki Tora pomyslnie zainstalowane!</string>
-<string name="status_install_fail">Nie moÅna zainstalowaÄ plikÃw binarnych Tora. Zajrzyj do dziennika i powiadom tor-assistants@xxxxxxxxxxxxxx</string>
-
-<string name="title_error">BÅÄd Aplikacji</string>
-
-<string name="wizard_title">Witamy w Orbocie</string>
-
-<string name="wizard_btn_tell_me_more">O Orbocie</string>
-<string name="btn_next">Dalej</string>
-<string name="btn_back">wstecz</string>
-<string name="btn_finish">Koniec</string>
-
-<string name="btn_okay">OK</string>
-<string name="btn_cancel">Anuluj</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot daje Tora Androidowi. Tor jest otwartym oprogramowaniem i otwartÄ sieciÄ, ktÃra pomaga broniÄ siÄ przed podsÅuchem sieci znanym jako analiza ruchu, ktÃry zagraÅa wolnoÅci osobistej i prywatnoÅci, poufnym dziaÅaniom biznesowym i relacjami oraz bezpieczeÅstwu paÅstwa.\n\n*UWAGA:* Sama instalacja Orbota _nie_ zanonimizuje magicznie Twojego ruchu! Ten kreator pozwoli Ci w pierwszych krokach.</string>
-    <string name="wizard_details">NiektÃre szczegÃÅy o Orbocie</string>
-    <string name="wizard_details_msg">Orbot jest otwartÄ aplikacjÄ zawierajÄcÄ Tora, LibEvent i Privoxy. Dostarcza lokalnego poÅrednika HTTP (8118) i SOCKS (9050) do sieci Tora. Orbot ma moÅliwoÅÄ, na urzÄdzeniu uruchomionym z prawami administratora, wysyÅaÄ caÅy ruch internetowy przez Tora.</string>
-    <string name="wizard_permissions_root">DostÄp zezwolony</string>
-    <string name="wizard_permissions_stock">Prawa dostepu Orbota</string>
-    <string name="wizard_premissions_msg_root">Doskonale! OdkryliÅmy, Åe masz uprawnienia administratora wÅÄczone dla Orbota. BÄdziemy mÄdrze korzystaÄ z tej wÅadzy.</string>
-    <string name="wizard_permissions_msg_stock"> Podczas gdy nie jest to wymagane, Orbot moÅe staÄ siÄ znacznie potÄÅniejszym narzÄdziem, gdy masz prawa administratora na swoim urzÄdzeniu. UÅyj przycisku poniÅej, by daÄ Orbotowi duÅy uprawnienia.</string>
-   
-    <string name="wizard_permissions_no_root">JeÅli nie masz uprawnieÅ administratora lub nie masz pojÄcia, o czym mÃwimy, uÅywaj aplikacji skonfigurowanych do pracy z Orbotem.</string>
-    <string name="wizard_permissions_consent">Rozumiem i chcÄ kontynuowaÄ bez uprawnieÅ administratora</string>
-   
-    <string name="wizard_permission_enable_root">Daj uprawnienia administratora Orbotowi</string>
-    <string name="wizard_configure">Skonfiguruj ToryfikacjÄ</string>
-    <string name="wizard_configure_msg">Orbot daje Ci moÅliwoÅÄ przekierowania caÅego ruchu aplikacji przez Tora ALBO wybrania aplikacji pojedynczo.</string> 
-    <string name="wizard_configure_all">Przekierowuj wszystkie aplikacje przez Tora</string>
-    <string name="wizard_configure_select_apps">Wybierz poszczegÃlne aplikacje dla Tora</string>
-    
-    
-    <string name="wizard_tips_tricks">Aplikacje skonfigurowane dla Orbota</string>
-    <string name="wizard_tips_msg">ZachÄcamy do pobierania i uÅywania aplikacji, ktÃre wiedzÄ, jak ÅÄczyÄ siÄ bezpoÅrednio z Orbotem. Kliknij na poniÅsze przyciski, by zainstalowaÄ.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (tylko Android 1.x) - PrzeglÄdarka zaprojektowana do prywatnoÅci i dla Orbota</string>
-    <string name="wizard_tips_proxy">Ustawienia Proxy - NDowiedz siÄ, jak konfiguroaÄ aplikacje do wspÃÅpracy z Orbotem</string>
-    
-    <string name="wizard_proxy_help_info">Ustawienia Proxy</string>
-    <string name="wizard_proxy_help_msg">JeÅli aplikacja na Androida, ktÃrej uÅywasz ma obsÅugÄ proxy HTTP lub SOCKS, moÅesz skonfigurowaÄ jÄ do ÅÄczenia siÄ z Orbotem i uÅywania Tora.\n\n
-    Ustawienie hosta to 127.0.0.1 lub "localhost". Dla HTTP, numer portu to 8118. Dla SOCKS poÅrednik to 9050. Powinno siÄ uÅywaÄ SOCKS4A lub SOCKS5, jeÅli to moÅliwe.
-    \n\n
-    MoÅesz dowiedzieÄ siÄ wiÄcej o przekierowaniu ruchu na Androidzie z FAQ pod adresem: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">Orbot jest gotowy!</string>
-    <string name="wizard_final_msg">Setki tysiÄcy ludzi na caÅym Åwiecie uÅywajÄ Tora z rÃÅnych powodÃw: dziennikarze i blogerzy, dziaÅacze na rzecz praw czÅowieka, strÃÅe prawa, ÅoÅnierze, korporacje, obywatele represyjnych reÅimÃw i zwykli obywatele... teraz Ty teÅ moÅesz!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">PomyÅlnie poÅaczono z sieciÄ Tora - ale to NIE oznacza, Åe Twoje urzÄdzenie jest bezpieczne. MoÅesz uÅyÄ opcji \'SprawdÅ\' w menu, aby przetestowaÄ swojÄ przeglÄdarkÄ. \n\nOdwiedÅ nas na https://guardianproject.info/apps/orbot lub wyÅlij email na help@xxxxxxxxxxxxxxxxxxxx, by dowiedzieÄ siÄ wiÄcej.</string>
-
-	<string name="tor_check">To otworzy TwojÄ domyÅlnÄ przeglÄdarkÄ na adresie https://check.torproject.org w celu sprawdzenia, czy Orbot jest skonfigurowany i jest poÄÅczenie z Torem.</string>
-
-	
-    <string name="pref_hs_group">UsÅugi ukryte</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-pl/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">wÅÄcz i wyÅÄcz Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot startuje...</string>
+<string name="status_activated">PodÅÄczony do sieci Tor</string>
+<string name="status_disabled">Orbot wyÅÄczony</string>
+<string name="status_shutting_down">Orbot wyÅÄcza siÄ</string>
+
+<string name="tor_process_connecting">Tor startuje...</string>
+<string name="tor_process_connecting_step2">Ustawianie sterowania...</string>
+<string name="tor_process_connecting_step3">zakoÅczono.</string>
+<string name="tor_process_connecting_step4">oczekiwanie.</string>
+
+<string name="not_anonymous_yet">UWAGA: Twoja komunikacja nie jest jeszcze anonimowa! ProszÄ skonfiguruj aplikacje aby uÅywaÅy serwera proxy HTTP 127.0.0.1:8118 lub SOCKS4A lub SOCKS5 127.0.0.1:9050</string>
+<string name="menu_home">Start</string>
+<string name="menu_browse">PrzeglÄdaj</string>
+<string name="menu_settings">Ustawienia</string>
+<string name="menu_log">Logi</string>
+<string name="menu_info">Pomoc</string>
+<string name="menu_apps">Aplikacje</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stop</string>
+
+<string name="menu_about">O programie</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Pomoc</string>
+<string name="button_close">Zamknij</string>
+<string name="button_about">O programie</string>
+
+<string name="button_clear_log">CzyÅÄ dziennik</string>
+
+
+<string name="menu_verify">SprawdÅ</string>
+<string name="menu_exit">WyjÅcie</string>
+<string name="powered_by">napÄdzane oprogramowaniem Projektu Tor</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Przekierowanie przezroczyste (Wymaga uprawnieÅ administratora)</string>
+<string name="pref_trans_proxy_title">Przekierowanie przezroczyste</string>
+<string name="pref_trans_proxy_summary">Automatyczne toryfikowanie aplikacji</string>
+
+<string name="pref_transparent_all_title">PrzepuÅÄ wszystko przez Tora</string>
+<string name="pref_transparent_all_summary">Przekierowanie ruchu wszystkich aplikacji przez Tora</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Binarki Tora pomyslnie zainstalowane!</string>
+<string name="status_install_fail">Nie moÅna zainstalowaÄ plikÃw binarnych Tora. Zajrzyj do dziennika i powiadom tor-assistants@xxxxxxxxxxxxxx</string>
+
+<string name="title_error">BÅÄd Aplikacji</string>
+
+<string name="wizard_title">Witamy w Orbocie</string>
+
+<string name="wizard_btn_tell_me_more">O Orbocie</string>
+<string name="btn_next">Dalej</string>
+<string name="btn_back">wstecz</string>
+<string name="btn_finish">Koniec</string>
+
+<string name="btn_okay">OK</string>
+<string name="btn_cancel">Anuluj</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot daje Tora Androidowi. Tor jest otwartym oprogramowaniem i otwartÄ sieciÄ, ktÃra pomaga broniÄ siÄ przed podsÅuchem sieci znanym jako analiza ruchu, ktÃry zagraÅa wolnoÅci osobistej i prywatnoÅci, poufnym dziaÅaniom biznesowym i relacjami oraz bezpieczeÅstwu paÅstwa.\n\n*UWAGA:* Sama instalacja Orbota _nie_ zanonimizuje magicznie Twojego ruchu! Ten kreator pozwoli Ci w pierwszych krokach.</string>
+    <string name="wizard_details">NiektÃre szczegÃÅy o Orbocie</string>
+    <string name="wizard_details_msg">Orbot jest otwartÄ aplikacjÄ zawierajÄcÄ Tora, LibEvent i Privoxy. Dostarcza lokalnego poÅrednika HTTP (8118) i SOCKS (9050) do sieci Tora. Orbot ma moÅliwoÅÄ, na urzÄdzeniu uruchomionym z prawami administratora, wysyÅaÄ caÅy ruch internetowy przez Tora.</string>
+    <string name="wizard_permissions_root">DostÄp zezwolony</string>
+    <string name="wizard_permissions_stock">Prawa dostepu Orbota</string>
+    <string name="wizard_premissions_msg_root">Doskonale! OdkryliÅmy, Åe masz uprawnienia administratora wÅÄczone dla Orbota. BÄdziemy mÄdrze korzystaÄ z tej wÅadzy.</string>
+    <string name="wizard_permissions_msg_stock"> Podczas gdy nie jest to wymagane, Orbot moÅe staÄ siÄ znacznie potÄÅniejszym narzÄdziem, gdy masz prawa administratora na swoim urzÄdzeniu. UÅyj przycisku poniÅej, by daÄ Orbotowi duÅy uprawnienia.</string>
+   
+    <string name="wizard_permissions_no_root">JeÅli nie masz uprawnieÅ administratora lub nie masz pojÄcia, o czym mÃwimy, uÅywaj aplikacji skonfigurowanych do pracy z Orbotem.</string>
+    <string name="wizard_permissions_consent">Rozumiem i chcÄ kontynuowaÄ bez uprawnieÅ administratora</string>
+   
+    <string name="wizard_permission_enable_root">Daj uprawnienia administratora Orbotowi</string>
+    <string name="wizard_configure">Skonfiguruj ToryfikacjÄ</string>
+    <string name="wizard_configure_msg">Orbot daje Ci moÅliwoÅÄ przekierowania caÅego ruchu aplikacji przez Tora ALBO wybrania aplikacji pojedynczo.</string> 
+    <string name="wizard_configure_all">Przekierowuj wszystkie aplikacje przez Tora</string>
+    <string name="wizard_configure_select_apps">Wybierz poszczegÃlne aplikacje dla Tora</string>
+    
+    
+    <string name="wizard_tips_tricks">Aplikacje skonfigurowane dla Orbota</string>
+    <string name="wizard_tips_msg">ZachÄcamy do pobierania i uÅywania aplikacji, ktÃre wiedzÄ, jak ÅÄczyÄ siÄ bezpoÅrednio z Orbotem. Kliknij na poniÅsze przyciski, by zainstalowaÄ.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (tylko Android 1.x) - PrzeglÄdarka zaprojektowana do prywatnoÅci i dla Orbota</string>
+    <string name="wizard_tips_proxy">Ustawienia Proxy - NDowiedz siÄ, jak konfiguroaÄ aplikacje do wspÃÅpracy z Orbotem</string>
+    
+    <string name="wizard_proxy_help_info">Ustawienia Proxy</string>
+    <string name="wizard_proxy_help_msg">JeÅli aplikacja na Androida, ktÃrej uÅywasz ma obsÅugÄ proxy HTTP lub SOCKS, moÅesz skonfigurowaÄ jÄ do ÅÄczenia siÄ z Orbotem i uÅywania Tora.\n\n
+    Ustawienie hosta to 127.0.0.1 lub "localhost". Dla HTTP, numer portu to 8118. Dla SOCKS poÅrednik to 9050. Powinno siÄ uÅywaÄ SOCKS4A lub SOCKS5, jeÅli to moÅliwe.
+    \n\n
+    MoÅesz dowiedzieÄ siÄ wiÄcej o przekierowaniu ruchu na Androidzie z FAQ pod adresem: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">Orbot jest gotowy!</string>
+    <string name="wizard_final_msg">Setki tysiÄcy ludzi na caÅym Åwiecie uÅywajÄ Tora z rÃÅnych powodÃw: dziennikarze i blogerzy, dziaÅacze na rzecz praw czÅowieka, strÃÅe prawa, ÅoÅnierze, korporacje, obywatele represyjnych reÅimÃw i zwykli obywatele... teraz Ty teÅ moÅesz!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">PomyÅlnie poÅaczono z sieciÄ Tora - ale to NIE oznacza, Åe Twoje urzÄdzenie jest bezpieczne. MoÅesz uÅyÄ opcji \'SprawdÅ\' w menu, aby przetestowaÄ swojÄ przeglÄdarkÄ. \n\nOdwiedÅ nas na https://guardianproject.info/apps/orbot lub wyÅlij email na help@xxxxxxxxxxxxxxxxxxxx, by dowiedzieÄ siÄ wiÄcej.</string>
+
+	<string name="tor_check">To otworzy TwojÄ domyÅlnÄ przeglÄdarkÄ na adresie https://check.torproject.org w celu sprawdzenia, czy Orbot jest skonfigurowany i jest poÄÅczenie z Torem.</string>
+
+	
+    <string name="pref_hs_group">UsÅugi ukryte</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-pt/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">iniciar e parar Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">O Orbot està a iniciar...</string>
-<string name="status_activated">LigaÃÃo estabelecida à rede Tor</string>
-<string name="status_disabled">"Orbot està Desactivado</string>
-<string name="status_shutting_down">Orbot a encerrar</string>
-
-<string name="tor_process_connecting">A iniciar Tor...</string>
-<string name="tor_process_connecting_step2">a autenticar a ligaÃÃo de controlo...</string>
-<string name="tor_process_connecting_step3">completo.</string>
-<string name="tor_process_connecting_step4">a aguardar.</string>
-
-<string name="not_anonymous_yet">ATENÃÃO: A sua ligaÃÃo ainda nÃo à anÃnima! Por favor configure as suas aplicaÃÃes para utilizarem o proxy HTTP 127.0.0.1:8118 ou o proxy SOCKS4A ou SOCKS5 127.0.0.1:9050</string>
-<string name="menu_home">InÃcio</string>
-<string name="menu_browse">Explorar</string>
-<string name="menu_settings">DefiniÃÃes</string>
-<string name="menu_log">RelatÃrio</string>
-<string name="menu_info">Ajuda</string>
-<string name="menu_apps">AplicaÃÃes</string>
-<string name="menu_start">Iniciar</string>
-<string name="menu_stop">Parar</string>
-
-<string name="menu_about">About</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Ajuda</string>
-<string name="button_close">Encerrar</string>
-<string name="button_about">Sobre</string>
-
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
-
-<string name="menu_verify">Check</string>
-<string name="menu_exit">Exit</string>
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-pt/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">iniciar e parar Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">O Orbot està a iniciar...</string>
+<string name="status_activated">LigaÃÃo estabelecida à rede Tor</string>
+<string name="status_disabled">"Orbot està Desactivado</string>
+<string name="status_shutting_down">Orbot a encerrar</string>
+
+<string name="tor_process_connecting">A iniciar Tor...</string>
+<string name="tor_process_connecting_step2">a autenticar a ligaÃÃo de controlo...</string>
+<string name="tor_process_connecting_step3">completo.</string>
+<string name="tor_process_connecting_step4">a aguardar.</string>
+
+<string name="not_anonymous_yet">ATENÃÃO: A sua ligaÃÃo ainda nÃo à anÃnima! Por favor configure as suas aplicaÃÃes para utilizarem o proxy HTTP 127.0.0.1:8118 ou o proxy SOCKS4A ou SOCKS5 127.0.0.1:9050</string>
+<string name="menu_home">InÃcio</string>
+<string name="menu_browse">Explorar</string>
+<string name="menu_settings">DefiniÃÃes</string>
+<string name="menu_log">RelatÃrio</string>
+<string name="menu_info">Ajuda</string>
+<string name="menu_apps">AplicaÃÃes</string>
+<string name="menu_start">Iniciar</string>
+<string name="menu_stop">Parar</string>
+
+<string name="menu_about">About</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Ajuda</string>
+<string name="button_close">Encerrar</string>
+<string name="button_about">Sobre</string>
+
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
+
+<string name="menu_verify">Check</string>
+<string name="menu_exit">Exit</string>
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ru/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">ÐÐÐÑÑÐ Ð ÐÑÑÐÐÐÐÐÐ Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">ÐÐÐÑÑÐ Orbot...</string>
-<string name="status_activated">ÐÐÐÐÐÑÑÐÐ Ð ÑÐÑÐ Tor</string>
-<string name="status_disabled">"Orbot ÐÑÐÐÑÑÐÐ</string>
-<string name="status_shutting_down">Orbot ÐÑÐÐÑÑÐÐÑÑÑ</string>
-
-<string name="tor_process_connecting">ÐÐÐÑÑÐ Tor...</string>
-<string name="tor_process_connecting_step2">ÐÐÑÑÑÐÐÐÐ ÑÐÑÐÐÐÐÐÐÑ...</string>
-<string name="tor_process_connecting_step3">ÐÐÑÐÐÐ.</string>
-<string name="tor_process_connecting_step4">ÐÐÐÐÐÐÐÐ.</string>
-
-<string name="not_anonymous_yet">ÐÐÐÐÐÐÐÐ! ÐÐÑ ÐÐÑÐÐ ÐÐÐÐÑÑ ÐÑÐ ÐÐ ÐÐÐÐÐÐÐÐ! ÐÐÐÐÐÑÐÑÑÐ, ÐÐÑÑÑÐÐÑÐ ÑÐÐÐ ÐÑÐÐÐÐÐÐÐÑ ÐÐ ÐÑÐÐÐÑÐÐÐÐÐÐÐ HTTP ÐÑÐÐÑÐ 127.0.0.1:8118 ÐÐÐ SOCKS4A ÐÐÐ SOCKS5 ÐÑÐÐÑÐ 127.0.0.1:9050</string>
-<string name="menu_home">ÐÐÐÐÑÐÑÑ ÑÑÑÐÐÐÑÐ</string>
-<string name="menu_browse">ÐÑÐÑÐÐÑÑ</string>
-<string name="menu_settings">ÐÐÑÐÐÐÑÑÑ</string>
-<string name="menu_log">ÐÑÑÐÐÐ</string>
-<string name="menu_info">ÐÐÑÐÐÐÐ</string>
-<string name="menu_apps">ÐÑÐÐÐÐÐÐÐÑ</string>
-<string name="menu_start">ÐÐÐÑÑÑÐÑÑ</string>
-<string name="menu_stop">ÐÑÑÐÐÐÐÐÑÑ</string>
-
-<string name="menu_about">Ð ÐÑÐÐÑÐÐÐÐ</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">ÐÐÑÐÐÐÐ</string>
-<string name="button_close">ÐÐÐÑÑÑÑ</string>
-<string name="button_about">Ð ÐÑÐÐÑÐÐÐÐ</string>
-
-<string name="button_clear_log">ÐÑÐÑÑÐÑÑ ÐÑÑÐÐÐ</string>
-
-
-<string name="menu_verify">ÐÑÐÐÐÑÐÐ</string>
-<string name="menu_exit">ÐÑÑÐÐ</string>
-<string name="powered_by">powered by the Tor Project</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">ÐÑÐÐÑÐÑÐÑÐ ÐÑÐÐÑÐ (ÐÑÐÐÑÑÑÑÑ ÐÑÐÐÐÐÐÐÐÐ root)</string>
-<string name="pref_trans_proxy_title">ÐÑÐÐÑÐÑÐÑÐ ÐÑÐÐÑÐ</string>
-<string name="pref_trans_proxy_summary">ÐÐÑÐÐÐÑÐÑÐÑÐÐÑ ÑÐÑÐÑÐÐÐÑÐÑ ÐÑÐÐÐÐÐÐÐÐ</string>
-
-<string name="pref_transparent_all_title">ÐÐÐÑÐÐÐÑÑÑ ÐÑÐ ÑÐÑÐÐ Tor</string>
-<string name="pref_transparent_all_summary">ÐÑÐÑÐÐ ÐÑÐÑ ÐÑÐÐÐÐÐÐÐÐ ÐÑÐÐÑ ÐÑÐÑÐÐÐÑÑ ÑÐÑÐÐ Tor</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">ÐÑÐÐÑÐÐÐÐ Tor ÑÑÐÐÑÐÐ ÑÑÑÐÐÐÐÐÐÐÐ!</string>
-<string name="status_install_fail">ÐÐ ÑÐÐÐÐÑÑ ÑÑÑÐÐÐÐÐÑÑ ÐÑÐÐÑÐÐÐÑ Tor. ÐÐÐÐÐÑÐÑÑÐ, ÐÑÐÐÐÑÑÑÐ ÑÐÑÑÐÐÐÑÐ ÐÑÑÐÐÐ Ð ÑÐÐÐÑÐÑÐ ÐÐÐ: tor-assistants@xxxxxxxxxxxxxx</string>
-
-<string name="title_error">ÐÑÐÐÐÐ ÐÑÐÐÐÐÐÐÐÑ</string>
-
-<string name="wizard_title">ÐÐÐÑÐ ÐÐÐÐÐÐÐÐÑÑ Ð Orbot</string>
-
-<string name="wizard_btn_tell_me_more">ÐÐ Orbot</string>
-<string name="btn_next">ÐÐÐÑÐÐ</string>
-<string name="btn_back">ÐÐÐÐÐ</string>
-<string name="btn_finish">ÐÐÐÐÑÑÐÑÑ</string>
-
-<string name="btn_okay">Ok</string>
-<string name="btn_cancel">ÐÑÐÐÐÐ</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot, Ð Tor ÐÐ Android. Tor - ÑÑÐ ÐÐÑÐÐÐÑÐÐÐ ÐÑÐÐÑÐÐÐÐÐÐ ÐÐÐÑÐÐÑÐÐÐÐ Ð ÐÑÐÑÑÑÐÑ ÑÐÑÑ, ÐÐÑÐÑÐÑ ÐÐÐÐÐÐÑÐÑ ÐÐÐ ÑÐÐÑÐÑÑÑÑ ÐÑ ÐÑÐÑÐÑÑÐÐÐÐÐÑ Ð ÑÐÑÐ, ÐÐÑÐÑÐÐ ÑÐÑÐÐÐÐÑ ÐÐÑÐÐ ÑÐÐÐÐÐÐ Ð ÐÐÐÑÐÐÐÐÑÐÐÐÑÐÐÑÑÐ Ð ÐÐÐÐÐÑÐ, ÐÑÐÐÑÐÐÐÑÑ, Tor ÐÐÐÐÐÐÑÐÑ ÐÐÑÐÑÐÑÑÑÑ ÐÑ ÐÐÐÐÐÐÐ ÑÑÐÑÐÐÐ.\n\n*ÐÐÐÐÐÐÐÐ:* ÐÑÑÐÐÐÐÐÐ Orbot ÐÐ ÐÐÐÐÑ ÐÐÐÐÑÐÑÐÐÐ ÐÐÑÐÐÐÐ ÐÐÐÐÐÐÐÐÐÑÐÐÐÑÑ ÐÐÑÑ ÐÐÑ ÐÐÐÐÐÑÐÑÐ ÑÑÐÑÐÐ! ÐÑÐÑ ÐÐÑÑÐÑ ÐÐÐÐÐÐÑ ÐÐÐ ÐÐÑÐÑÑ.</string>
-    <string name="wizard_details">ÐÐÐÐÑÐÑÑÐ ÑÐÐÐÐÐÑÑ Ð ÐÑÐÐÑÐÐÐÐ Orbot</string>
-    <string name="wizard_details_msg">Orbot - ÑÑÐ ÐÑÐÐÐÐÐÐÐÐ Ñ ÐÑÐÑÑÑÑÐ ÐÐÐÐÐ, ÐÐÑÐÑÐÐ ÑÐÐÐÑÐÐÑ Tor, LibEvent Ð Privoxy. ÐÐÐ ÐÐÐÑÐÐÑÐÐÐÐÑ ÑÐÐÐÑÑ ÐÐÐÐÐÑÐÐÐÐ HTTP ÐÑÐÐÑÐ (8118) Ð SOCKS ÐÑÐÐÑÐ (9050) Ð ÑÐÑÐ Tor. Orbot ÑÐÐÐÐ ÐÐÐÐÐÐÑÐÑ, ÐÐ ÐÐÑÐÑ ÑÑÑÑÐÐÑÐÐ, ÐÐÑÐÑÑÐÐÑÑ ÐÐÑÑ ÐÐÑÐÑÐÐÑ ÑÑÐÑÐÐ ÑÐÑÐÐ Tor.</string>
-    <string name="wizard_permissions_root">ÐÐÐÑÐÑÐÐÐÐ ÐÐÐÑÑÐÐÐ</string>
-    <string name="wizard_permissions_stock">ÐÐÐÑÐÑÐÐÐÑ Orbot</string>
-    <string name="wizard_premissions_msg_root">ÐÑÐÐÑÐÐ! ÐÑ ÐÐÑÐÐÐÐÐÐÐ, ÑÑÐ ÐÐÑÑÑÐ Ð ÐÐÑÐÐÐÐÐÑ ÐÐÑÐÐÐÐÑ  Ð Orbot ÑÐÐÑÐÑÐÐ. ÐÑ ÐÑÐÐÐ ÐÑÐÐÐÑÐÐÐÐÑÑ ÑÑÐ Ñ ÑÐÐÐ.</string>
-    <string name="wizard_permissions_msg_stock">ÐÐÑÑ ÑÑÐ ÐÐ ÑÑÐÐÑÐÑÑÑ, Orbot ÐÐÐÐÑ ÐÑÑÑ ÐÐÐÐÐ ÐÐÑÐÑÐ ÐÐÑÑÑÑÐÐÐÑÐÐ, ÐÑÐÐ ÐÐÑÑÑÐ Ð ÐÐÑÐÐÐÐÐÑ ÐÐÑÐÐÐÐÑ ÑÑÑÑÐÐÑÑÐÐ ÑÐÐÑÐÑÐÐ. ÐÐÐÐÐÐÑÐ ÐÐ ÐÐÐÐÐÑ ÐÐÐÐ Ð ÐÐÐÑÐ Orbot ÑÑÐÐÑÑÐÐÑ!</string>
-   
-    <string name="wizard_permissions_no_root">ÐÑÐÐ Ñ ÐÐÑ ÐÐÑ ÐÐÑÑÑÐÐ Ð ÐÐÑÐÐÐÐÐÑ ÐÐÑÐÐÐÐÑ ÐÐÐ ÐÑ ÐÐÐÑÑÐÑ ÐÐ ÐÐÐÐÑÐ Ð ÑÐÐ ÐÑ ÐÐÐÐÑÐÐ, ÐÑÐÑÑÐ ÑÐÐÐÐÑÐÑÑ, ÑÑÐ ÐÑÐÐÐÑÐÑÐÑÐ ÐÑÐÐÐÐÐÐÐÑ, ÑÐÐÑÐÐÐÑÐÐÐÑÐ ÐÐÑ Orbot.</string>
-    <string name="wizard_permissions_consent">Ð ÐÑÐ ÐÐÐÑÐ, ÐÑÐÐÐÐÐÑ ÐÐÐ ÐÐÑÑÑÐÐ Ð ÐÐÑÐÑ</string>
-   
-    <string name="wizard_permission_enable_root">ÐÐÑÑ ÐÐÑÑÑÐ Ð ÐÐÑÑ ÐÑÐÐÑÐÐÐÐ Orbot</string>
-    <string name="wizard_configure">ÐÐÑÑÑÐÐÑÑ ÐÐÑÐÑÐÐÐÑÐÑ</string>
-    <string name="wizard_configure_msg">ÐÑÐÐÑÐÐÐÐ Orbot ÐÐÐÑ ÐÐÐ ÐÐÐÐÐÐÐÐÑÑÑ ÐÐÑÑÑÑÑÐÐÐÑÐÐÐÑÑ ÑÑÐÑÐÐ ÐÑÐÑ ÐÑÐÐÐÐÐÐÐÐ ÑÐÑÐÐ Tor ÐÐÐ ÐÑÐÑÐÑÑ ÐÑÐÐÐÐÐÐÐÑ ÐÐÑ ÐÐÑÑÑÑÑÐÐÐÑÐÐ ÑÐÐÐÑÑÐÑÑÐÐÑÐÐ.</string> 
-    <string name="wizard_configure_all">ÐÐÑÑÑÑÑÐÐÐÑÐÐÐÑÑ ÐÑÐ ÐÑÐÐÐÐÐÐÐÑ ÑÐÑÐÐ Tor</string>
-    <string name="wizard_configure_select_apps">ÐÑÐÐÑÐÑÐ ÐÑÐÐÐÐÐÐÐÑ ÐÐÑ ÐÐÑÑÑÑÑÐÐÐÑÐÐ ÑÐÑÐÐ Tor</string>
-    
-    
-    <string name="wizard_tips_tricks">Orbot-ÐÐÐÐÐÑÑÐÐÐÐÐÐÑÐ ÐÑÐÐÐÐÐÐÐÑ</string>
-    <string name="wizard_tips_msg">ÐÑ ÑÐÐÐÑÑÐÐ ÐÐÐ ÑÐÐÑÐÑÑ Ð ÐÑÐÐÐÑÐÐÐÐÑÑ ÐÑÐÐÐÐÐÐÐÑ, ÐÐÑÐÑÑÐ ÑÐÐÑÑ ÑÐÐÐÑÐÑÑ ÐÐÐÑÑÐÑÑ ÑÐÑÐÐ Orbot. ÐÐÐÐÐÑÐ ÐÐ ÐÐÐÐÐÐ ÐÐÐÐ, ÑÑÐÐÑ ÐÐÐÑÑÑÐÑÑ ÐÑÐÑÐÑÑ ÑÑÑÐÐÐÐÐÐ.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (ÐÐÐÑÐÐ ÐÐÑ ÐÐÑÑÐÐ Android 1.x) - ÐÑÐÑÐÐÑ, ÑÐÐÑÐÐÐÑÐÐÐÑÐ ÐÐÑ ÐÐÐÑÐÐÑÐÐÐÑ ÐÐÐÐÐÐÑÐÐÑÑÐ Ð ÐÐÑ Orbot</string>
-    <string name="wizard_tips_proxy">ÐÐÑÑÑÐÐÐÐ ÐÑÐÐÑÐ - ÑÐÐÐÐÑÐ ÐÐÐ ÐÐÑÑÑÐÐÑÑ ÐÑÐÐÐÐÐÐÐÑ ÐÐÑ ÑÐÐÐÑÑ Ñ Orbot</string>
-    
-    <string name="wizard_proxy_help_info">ÐÐÑÑÑÐÐÐÐ ÐÑÐÐÑÐ</string>
-    <string name="wizard_proxy_help_msg">ÐÑÐÐ ÐÑÐÐÐÑÐÑÐÐÐÐ ÐÐÐÐ ÐÑÐÐÐÐÐÐÐÐ ÐÐÑ Android ÐÐÐÐÐÑÐÐÐÐÐÑ HTTP ÐÐÐ SOCKS, ÑÐ ÐÑ ÐÐÐÐÑÐ ÐÐÑÑÐÐÑÑ ÐÐÐ ÐÐ ÐÐÐÐÐÑÑÐÐÐÐ Ð Orbot Ð ÐÑÐÐÐÑÐÐÐÐÐÐÐ Tor.\n\n
-    ÐÐÑÑÑÐÐÐÐ ÑÐÑÑÐ (ÐÐÐ localhost) - 127.0.0.1. ÐÐÑ HTTP, ÐÐÐÐÑ ÐÐÑÑÐ - 8118. ÐÐÑ SOCKS ÐÑÐÐÑÐ - 9050. ÐÐ ÐÐÐÐÐÐÐÐÑÑÐ ÐÑÐÐÐÑÐÑÐÑÐ SOCKS4A ÐÐÐ SOCKS5.
-    \n\n
-    ÐÑ ÐÐÐÐÑÐ ÑÐÐÐÑÑ ÐÐÐÑÑÐ Ð ÑÐÐÐÑÐ ÑÐÑÐÐ ÐÑÐÐÑÐ ÐÐ Android, ÐÑÐÑÐÑÐÐ ÑÑÐÑ FAQ: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">ÐÑÐÐÑÐÐÐÐ Orbot ÐÐÑÐÐÐ Ð ÐÑÐÐÐÑÐÐÐÐÐÐÑ!</string>
-    <string name="wizard_final_msg">ÐÐÑÐÐ ÑÑÑÑÑ ÐÑÐÐÐ ÐÐ ÐÑÐÐÑ ÐÐÑÑ ÐÑÐÐÐÑÐÑÑÑ Tor ÐÐ ÑÐÐÐÐÑÐÑÐ ÐÑÐÑÐÐÐÐ: ÐÑÑÐÐÐÐÑÑÑ Ð ÐÐÐÐÐÐÑÑ, ÐÐÑÐÐÐÑÑÑ ÐÑÐÐÐÐÐÐÑÐÐ, ÐÑÑÑÑÐÐÑÑÐÑ Ð ÐÐÑÐÑÑ ÐÑÐÐ ÑÐÐÐÐÐÐÐ, ÑÑÐÐÐÐÑÐ ÐÑÐÐÐÐÐÑÐÐÐ, ÑÐÐÐÐÑÑ, ÐÐÑÐÐÑÐÑÐÐ, ÐÑÐÐÐÐÐÐ ÑÑÑÐÐ Ñ ÑÐÐÑÐÑÑÐÐÐÑÐ ÑÐÐÐÐÐÐ, Ð ÐÑÐÑÑÑÐ ÐÑÐÐ... Ð ÑÐÐÐÑÑ ÐÐÑÐÐÑ Ð ÐÑ!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time"> ÐÑ ÑÑÐÐÑÐÐ ÐÐÐÐÐÑÑÐÐÐÑÑ Ð ÑÐÑÐ Tor, ÐÐ ÑÑÐ ÐÐ ÐÐÐÑÐÑ, ÑÑÐ ÐÐÑÐ ÑÑÑÑÐÐÑÑÐÐ ÐÐÐÐÐÐÑÐÐ. ÐÑ ÐÐÐÐÑÐ ÐÐÑÐÐÐÑÐÐÐÐÑÑÑÑ ÑÑÐÐÑÐÐÐ \'ÐÑÐÐÐÑÐÐ\' ÐÐ ÐÐÐÑ, ÑÑÐÐÑ ÐÐÑÐÑÑÐÑÐÐÐÑÑ ÐÐÑ ÐÑÐÑÐÐÑ. \n\nÐÐÑÐÑÐÑÐ ÐÐÑ ÑÐÐÑ: https://guardianproject.info/apps/orbot ÐÐÐ ÐÑÐÑÐÐÑÑÐ ÐÐÐ ÐÐÑÑÐÐ ÐÐ ÐÐÑÐÑ: help@xxxxxxxxxxxxxxxxxxxx, ÑÑÐÐÑ ÑÐÐÐÑÑ ÐÐÐÑÑÐ.</string>
-
-	<string name="tor_check">ÐÑÐ ÐÑÐÐÐÐÐÑ Ð ÐÐÐÑÑÐÑ ÐÐÐ-ÐÑÐÑÐÐÑÐ, ÐÑÐÑÐÐÐÐÐÐ ÐÐ ÐÐÑÐÐ ÐÐÐÐÑÑÑÐÑÐ ÐÐ-ÑÐÐÐÑÐÐÐÑ, Ð ÐÐÐÐÐÑÑÐÐÐÑ Ð ÑÐÐÑÑ https://check.torproject.org, Ñ ÑÐÐÑÑ ÐÑÐÐÐÑÐÐ ÐÑÐÐÐÐÑÐÐÑÑÐ ÑÐÐÐÑÑ Orbot Ð ÐÐÑÐÐÐÐÐÐÐÑ, ÐÐÐÐÐÑÑÐÐÑ ÐÐ ÐÑ Ð ÑÐÑÐ Tor.</string>
-
-	
-    <string name="pref_hs_group">ÐÐÑÑÑÑÐ ÑÐÑÐÐÑÑ</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-ru/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">ÐÐÐÑÑÐ Ð ÐÑÑÐÐÐÐÐÐ Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">ÐÐÐÑÑÐ Orbot...</string>
+<string name="status_activated">ÐÐÐÐÐÑÑÐÐ Ð ÑÐÑÐ Tor</string>
+<string name="status_disabled">"Orbot ÐÑÐÐÑÑÐÐ</string>
+<string name="status_shutting_down">Orbot ÐÑÐÐÑÑÐÐÑÑÑ</string>
+
+<string name="tor_process_connecting">ÐÐÐÑÑÐ Tor...</string>
+<string name="tor_process_connecting_step2">ÐÐÑÑÑÐÐÐÐ ÑÐÑÐÐÐÐÐÐÑ...</string>
+<string name="tor_process_connecting_step3">ÐÐÑÐÐÐ.</string>
+<string name="tor_process_connecting_step4">ÐÐÐÐÐÐÐÐ.</string>
+
+<string name="not_anonymous_yet">ÐÐÐÐÐÐÐÐ! ÐÐÑ ÐÐÑÐÐ ÐÐÐÐÑÑ ÐÑÐ ÐÐ ÐÐÐÐÐÐÐÐ! ÐÐÐÐÐÑÐÑÑÐ, ÐÐÑÑÑÐÐÑÐ ÑÐÐÐ ÐÑÐÐÐÐÐÐÐÑ ÐÐ ÐÑÐÐÐÑÐÐÐÐÐÐÐ HTTP ÐÑÐÐÑÐ 127.0.0.1:8118 ÐÐÐ SOCKS4A ÐÐÐ SOCKS5 ÐÑÐÐÑÐ 127.0.0.1:9050</string>
+<string name="menu_home">ÐÐÐÐÑÐÑÑ ÑÑÑÐÐÐÑÐ</string>
+<string name="menu_browse">ÐÑÐÑÐÐÑÑ</string>
+<string name="menu_settings">ÐÐÑÐÐÐÑÑÑ</string>
+<string name="menu_log">ÐÑÑÐÐÐ</string>
+<string name="menu_info">ÐÐÑÐÐÐÐ</string>
+<string name="menu_apps">ÐÑÐÐÐÐÐÐÐÑ</string>
+<string name="menu_start">ÐÐÐÑÑÑÐÑÑ</string>
+<string name="menu_stop">ÐÑÑÐÐÐÐÐÑÑ</string>
+
+<string name="menu_about">Ð ÐÑÐÐÑÐÐÐÐ</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">ÐÐÑÐÐÐÐ</string>
+<string name="button_close">ÐÐÐÑÑÑÑ</string>
+<string name="button_about">Ð ÐÑÐÐÑÐÐÐÐ</string>
+
+<string name="button_clear_log">ÐÑÐÑÑÐÑÑ ÐÑÑÐÐÐ</string>
+
+
+<string name="menu_verify">ÐÑÐÐÐÑÐÐ</string>
+<string name="menu_exit">ÐÑÑÐÐ</string>
+<string name="powered_by">powered by the Tor Project</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">ÐÑÐÐÑÐÑÐÑÐ ÐÑÐÐÑÐ (ÐÑÐÐÑÑÑÑÑ ÐÑÐÐÐÐÐÐÐÐ root)</string>
+<string name="pref_trans_proxy_title">ÐÑÐÐÑÐÑÐÑÐ ÐÑÐÐÑÐ</string>
+<string name="pref_trans_proxy_summary">ÐÐÑÐÐÐÑÐÑÐÑÐÐÑ ÑÐÑÐÑÐÐÐÑÐÑ ÐÑÐÐÐÐÐÐÐÐ</string>
+
+<string name="pref_transparent_all_title">ÐÐÐÑÐÐÐÑÑÑ ÐÑÐ ÑÐÑÐÐ Tor</string>
+<string name="pref_transparent_all_summary">ÐÑÐÑÐÐ ÐÑÐÑ ÐÑÐÐÐÐÐÐÐÐ ÐÑÐÐÑ ÐÑÐÑÐÐÐÑÑ ÑÐÑÐÐ Tor</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">ÐÑÐÐÑÐÐÐÐ Tor ÑÑÐÐÑÐÐ ÑÑÑÐÐÐÐÐÐÐÐ!</string>
+<string name="status_install_fail">ÐÐ ÑÐÐÐÐÑÑ ÑÑÑÐÐÐÐÐÑÑ ÐÑÐÐÑÐÐÐÑ Tor. ÐÐÐÐÐÑÐÑÑÐ, ÐÑÐÐÐÑÑÑÐ ÑÐÑÑÐÐÐÑÐ ÐÑÑÐÐÐ Ð ÑÐÐÐÑÐÑÐ ÐÐÐ: tor-assistants@xxxxxxxxxxxxxx</string>
+
+<string name="title_error">ÐÑÐÐÐÐ ÐÑÐÐÐÐÐÐÐÑ</string>
+
+<string name="wizard_title">ÐÐÐÑÐ ÐÐÐÐÐÐÐÐÑÑ Ð Orbot</string>
+
+<string name="wizard_btn_tell_me_more">ÐÐ Orbot</string>
+<string name="btn_next">ÐÐÐÑÐÐ</string>
+<string name="btn_back">ÐÐÐÐÐ</string>
+<string name="btn_finish">ÐÐÐÐÑÑÐÑÑ</string>
+
+<string name="btn_okay">Ok</string>
+<string name="btn_cancel">ÐÑÐÐÐÐ</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot, Ð Tor ÐÐ Android. Tor - ÑÑÐ ÐÐÑÐÐÐÑÐÐÐ ÐÑÐÐÑÐÐÐÐÐÐ ÐÐÐÑÐÐÑÐÐÐÐ Ð ÐÑÐÑÑÑÐÑ ÑÐÑÑ, ÐÐÑÐÑÐÑ ÐÐÐÐÐÐÑÐÑ ÐÐÐ ÑÐÐÑÐÑÑÑÑ ÐÑ ÐÑÐÑÐÑÑÐÐÐÐÐÑ Ð ÑÐÑÐ, ÐÐÑÐÑÐÐ ÑÐÑÐÐÐÐÑ ÐÐÑÐÐ ÑÐÐÐÐÐÐ Ð ÐÐÐÑÐÐÐÐÑÐÐÐÑÐÐÑÑÐ Ð ÐÐÐÐÐÑÐ, ÐÑÐÐÑÐÐÐÑÑ, Tor ÐÐÐÐÐÐÑÐÑ ÐÐÑÐÑÐÑÑÑÑ ÐÑ ÐÐÐÐÐÐÐ ÑÑÐÑÐÐÐ.\n\n*ÐÐÐÐÐÐÐÐ:* ÐÑÑÐÐÐÐÐÐ Orbot ÐÐ ÐÐÐÐÑ ÐÐÐÐÑÐÑÐÐÐ ÐÐÑÐÐÐÐ ÐÐÐÐÐÐÐÐÐÑÐÐÐÑÑ ÐÐÑÑ ÐÐÑ ÐÐÐÐÐÑÐÑÐ ÑÑÐÑÐÐ! ÐÑÐÑ ÐÐÑÑÐÑ ÐÐÐÐÐÐÑ ÐÐÐ ÐÐÑÐÑÑ.</string>
+    <string name="wizard_details">ÐÐÐÐÑÐÑÑÐ ÑÐÐÐÐÐÑÑ Ð ÐÑÐÐÑÐÐÐÐ Orbot</string>
+    <string name="wizard_details_msg">Orbot - ÑÑÐ ÐÑÐÐÐÐÐÐÐÐ Ñ ÐÑÐÑÑÑÑÐ ÐÐÐÐÐ, ÐÐÑÐÑÐÐ ÑÐÐÐÑÐÐÑ Tor, LibEvent Ð Privoxy. ÐÐÐ ÐÐÐÑÐÐÑÐÐÐÐÑ ÑÐÐÐÑÑ ÐÐÐÐÐÑÐÐÐÐ HTTP ÐÑÐÐÑÐ (8118) Ð SOCKS ÐÑÐÐÑÐ (9050) Ð ÑÐÑÐ Tor. Orbot ÑÐÐÐÐ ÐÐÐÐÐÐÑÐÑ, ÐÐ ÐÐÑÐÑ ÑÑÑÑÐÐÑÐÐ, ÐÐÑÐÑÑÐÐÑÑ ÐÐÑÑ ÐÐÑÐÑÐÐÑ ÑÑÐÑÐÐ ÑÐÑÐÐ Tor.</string>
+    <string name="wizard_permissions_root">ÐÐÐÑÐÑÐÐÐÐ ÐÐÐÑÑÐÐÐ</string>
+    <string name="wizard_permissions_stock">ÐÐÐÑÐÑÐÐÐÑ Orbot</string>
+    <string name="wizard_premissions_msg_root">ÐÑÐÐÑÐÐ! ÐÑ ÐÐÑÐÐÐÐÐÐÐ, ÑÑÐ ÐÐÑÑÑÐ Ð ÐÐÑÐÐÐÐÐÑ ÐÐÑÐÐÐÐÑ  Ð Orbot ÑÐÐÑÐÑÐÐ. ÐÑ ÐÑÐÐÐ ÐÑÐÐÐÑÐÐÐÐÑÑ ÑÑÐ Ñ ÑÐÐÐ.</string>
+    <string name="wizard_permissions_msg_stock">ÐÐÑÑ ÑÑÐ ÐÐ ÑÑÐÐÑÐÑÑÑ, Orbot ÐÐÐÐÑ ÐÑÑÑ ÐÐÐÐÐ ÐÐÑÐÑÐ ÐÐÑÑÑÑÐÐÐÑÐÐ, ÐÑÐÐ ÐÐÑÑÑÐ Ð ÐÐÑÐÐÐÐÐÑ ÐÐÑÐÐÐÐÑ ÑÑÑÑÐÐÑÑÐÐ ÑÐÐÑÐÑÐÐ. ÐÐÐÐÐÐÑÐ ÐÐ ÐÐÐÐÐÑ ÐÐÐÐ Ð ÐÐÐÑÐ Orbot ÑÑÐÐÑÑÐÐÑ!</string>
+   
+    <string name="wizard_permissions_no_root">ÐÑÐÐ Ñ ÐÐÑ ÐÐÑ ÐÐÑÑÑÐÐ Ð ÐÐÑÐÐÐÐÐÑ ÐÐÑÐÐÐÐÑ ÐÐÐ ÐÑ ÐÐÐÑÑÐÑ ÐÐ ÐÐÐÐÑÐ Ð ÑÐÐ ÐÑ ÐÐÐÐÑÐÐ, ÐÑÐÑÑÐ ÑÐÐÐÐÑÐÑÑ, ÑÑÐ ÐÑÐÐÐÑÐÑÐÑÐ ÐÑÐÐÐÐÐÐÐÑ, ÑÐÐÑÐÐÐÑÐÐÐÑÐ ÐÐÑ Orbot.</string>
+    <string name="wizard_permissions_consent">Ð ÐÑÐ ÐÐÐÑÐ, ÐÑÐÐÐÐÐÑ ÐÐÐ ÐÐÑÑÑÐÐ Ð ÐÐÑÐÑ</string>
+   
+    <string name="wizard_permission_enable_root">ÐÐÑÑ ÐÐÑÑÑÐ Ð ÐÐÑÑ ÐÑÐÐÑÐÐÐÐ Orbot</string>
+    <string name="wizard_configure">ÐÐÑÑÑÐÐÑÑ ÐÐÑÐÑÐÐÐÑÐÑ</string>
+    <string name="wizard_configure_msg">ÐÑÐÐÑÐÐÐÐ Orbot ÐÐÐÑ ÐÐÐ ÐÐÐÐÐÐÐÐÑÑÑ ÐÐÑÑÑÑÑÐÐÐÑÐÐÐÑÑ ÑÑÐÑÐÐ ÐÑÐÑ ÐÑÐÐÐÐÐÐÐÐ ÑÐÑÐÐ Tor ÐÐÐ ÐÑÐÑÐÑÑ ÐÑÐÐÐÐÐÐÐÑ ÐÐÑ ÐÐÑÑÑÑÑÐÐÐÑÐÐ ÑÐÐÐÑÑÐÑÑÐÐÑÐÐ.</string> 
+    <string name="wizard_configure_all">ÐÐÑÑÑÑÑÐÐÐÑÐÐÐÑÑ ÐÑÐ ÐÑÐÐÐÐÐÐÐÑ ÑÐÑÐÐ Tor</string>
+    <string name="wizard_configure_select_apps">ÐÑÐÐÑÐÑÐ ÐÑÐÐÐÐÐÐÐÑ ÐÐÑ ÐÐÑÑÑÑÑÐÐÐÑÐÐ ÑÐÑÐÐ Tor</string>
+    
+    
+    <string name="wizard_tips_tricks">Orbot-ÐÐÐÐÐÑÑÐÐÐÐÐÐÑÐ ÐÑÐÐÐÐÐÐÐÑ</string>
+    <string name="wizard_tips_msg">ÐÑ ÑÐÐÐÑÑÐÐ ÐÐÐ ÑÐÐÑÐÑÑ Ð ÐÑÐÐÐÑÐÐÐÐÑÑ ÐÑÐÐÐÐÐÐÐÑ, ÐÐÑÐÑÑÐ ÑÐÐÑÑ ÑÐÐÐÑÐÑÑ ÐÐÐÑÑÐÑÑ ÑÐÑÐÐ Orbot. ÐÐÐÐÐÑÐ ÐÐ ÐÐÐÐÐÐ ÐÐÐÐ, ÑÑÐÐÑ ÐÐÐÑÑÑÐÑÑ ÐÑÐÑÐÑÑ ÑÑÑÐÐÐÐÐÐ.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (ÐÐÐÑÐÐ ÐÐÑ ÐÐÑÑÐÐ Android 1.x) - ÐÑÐÑÐÐÑ, ÑÐÐÑÐÐÐÑÐÐÐÑÐ ÐÐÑ ÐÐÐÑÐÐÑÐÐÐÑ ÐÐÐÐÐÐÑÐÐÑÑÐ Ð ÐÐÑ Orbot</string>
+    <string name="wizard_tips_proxy">ÐÐÑÑÑÐÐÐÐ ÐÑÐÐÑÐ - ÑÐÐÐÐÑÐ ÐÐÐ ÐÐÑÑÑÐÐÑÑ ÐÑÐÐÐÐÐÐÐÑ ÐÐÑ ÑÐÐÐÑÑ Ñ Orbot</string>
+    
+    <string name="wizard_proxy_help_info">ÐÐÑÑÑÐÐÐÐ ÐÑÐÐÑÐ</string>
+    <string name="wizard_proxy_help_msg">ÐÑÐÐ ÐÑÐÐÐÑÐÑÐÐÐÐ ÐÐÐÐ ÐÑÐÐÐÐÐÐÐÐ ÐÐÑ Android ÐÐÐÐÐÑÐÐÐÐÐÑ HTTP ÐÐÐ SOCKS, ÑÐ ÐÑ ÐÐÐÐÑÐ ÐÐÑÑÐÐÑÑ ÐÐÐ ÐÐ ÐÐÐÐÐÑÑÐÐÐÐ Ð Orbot Ð ÐÑÐÐÐÑÐÐÐÐÐÐÐ Tor.\n\n
+    ÐÐÑÑÑÐÐÐÐ ÑÐÑÑÐ (ÐÐÐ localhost) - 127.0.0.1. ÐÐÑ HTTP, ÐÐÐÐÑ ÐÐÑÑÐ - 8118. ÐÐÑ SOCKS ÐÑÐÐÑÐ - 9050. ÐÐ ÐÐÐÐÐÐÐÐÑÑÐ ÐÑÐÐÐÑÐÑÐÑÐ SOCKS4A ÐÐÐ SOCKS5.
+    \n\n
+    ÐÑ ÐÐÐÐÑÐ ÑÐÐÐÑÑ ÐÐÐÑÑÐ Ð ÑÐÐÐÑÐ ÑÐÑÐÐ ÐÑÐÐÑÐ ÐÐ Android, ÐÑÐÑÐÑÐÐ ÑÑÐÑ FAQ: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">ÐÑÐÐÑÐÐÐÐ Orbot ÐÐÑÐÐÐ Ð ÐÑÐÐÐÑÐÐÐÐÐÐÑ!</string>
+    <string name="wizard_final_msg">ÐÐÑÐÐ ÑÑÑÑÑ ÐÑÐÐÐ ÐÐ ÐÑÐÐÑ ÐÐÑÑ ÐÑÐÐÐÑÐÑÑÑ Tor ÐÐ ÑÐÐÐÐÑÐÑÐ ÐÑÐÑÐÐÐÐ: ÐÑÑÐÐÐÐÑÑÑ Ð ÐÐÐÐÐÐÑÑ, ÐÐÑÐÐÐÑÑÑ ÐÑÐÐÐÐÐÐÑÐÐ, ÐÑÑÑÑÐÐÑÑÐÑ Ð ÐÐÑÐÑÑ ÐÑÐÐ ÑÐÐÐÐÐÐÐ, ÑÑÐÐÐÐÑÐ ÐÑÐÐÐÐÐÑÐÐÐ, ÑÐÐÐÐÑÑ, ÐÐÑÐÐÑÐÑÐÐ, ÐÑÐÐÐÐÐÐ ÑÑÑÐÐ Ñ ÑÐÐÑÐÑÑÐÐÐÑÐ ÑÐÐÐÐÐÐ, Ð ÐÑÐÑÑÑÐ ÐÑÐÐ... Ð ÑÐÐÐÑÑ ÐÐÑÐÐÑ Ð ÐÑ!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time"> ÐÑ ÑÑÐÐÑÐÐ ÐÐÐÐÐÑÑÐÐÐÑÑ Ð ÑÐÑÐ Tor, ÐÐ ÑÑÐ ÐÐ ÐÐÐÑÐÑ, ÑÑÐ ÐÐÑÐ ÑÑÑÑÐÐÑÑÐÐ ÐÐÐÐÐÐÑÐÐ. ÐÑ ÐÐÐÐÑÐ ÐÐÑÐÐÐÑÐÐÐÐÑÑÑÑ ÑÑÐÐÑÐÐÐ \'ÐÑÐÐÐÑÐÐ\' ÐÐ ÐÐÐÑ, ÑÑÐÐÑ ÐÐÑÐÑÑÐÑÐÐÐÑÑ ÐÐÑ ÐÑÐÑÐÐÑ. \n\nÐÐÑÐÑÐÑÐ ÐÐÑ ÑÐÐÑ: https://guardianproject.info/apps/orbot ÐÐÐ ÐÑÐÑÐÐÑÑÐ ÐÐÐ ÐÐÑÑÐÐ ÐÐ ÐÐÑÐÑ: help@xxxxxxxxxxxxxxxxxxxx, ÑÑÐÐÑ ÑÐÐÐÑÑ ÐÐÐÑÑÐ.</string>
+
+	<string name="tor_check">ÐÑÐ ÐÑÐÐÐÐÐÑ Ð ÐÐÐÑÑÐÑ ÐÐÐ-ÐÑÐÑÐÐÑÐ, ÐÑÐÑÐÐÐÐÐÐ ÐÐ ÐÐÑÐÐ ÐÐÐÐÑÑÑÐÑÐ ÐÐ-ÑÐÐÐÑÐÐÐÑ, Ð ÐÐÐÐÐÑÑÐÐÐÑ Ð ÑÐÐÑÑ https://check.torproject.org, Ñ ÑÐÐÑÑ ÐÑÐÐÐÑÐÐ ÐÑÐÐÐÐÑÐÐÑÑÐ ÑÐÐÐÑÑ Orbot Ð ÐÐÑÐÐÐÐÐÐÐÑ, ÐÐÐÐÐÑÑÐÐÑ ÐÐ ÐÑ Ð ÑÐÑÐ Tor.</string>
+
+	
+    <string name="pref_hs_group">ÐÐÑÑÑÑÐ ÑÐÑÐÐÑÑ</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-sv/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-             <string name="app_version">1.0.5-dev</string>
-     
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">start and stop Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot startar...</string>
-<string name="status_activated">Uppkopplad till Tor nÃtverket</string>
-<string name="status_disabled">"Orbot Ãr inaktiverad</string>
-<string name="status_shutting_down">Orbot avslutas</string>
-
-<string name="tor_process_connecting">Startar Tor...</string>
-<string name="tor_process_connecting_step2">verifierar kontroll uppkopplingen...</string>
-<string name="tor_process_connecting_step3">klar.</string>
-<string name="tor_process_connecting_step4">vÃntar.</string>
-
-<string name="not_anonymous_yet">VARNING: Din trafik Ãr inte anonym Ãn! VÃnligen konfigurera dina apps att anvÃnda HTTP proxy 127.0.0.1:8118 eller SOCKS4A/5 proxy 127.0.0.1:9050</string>
-<string name="menu_home">Hem</string>
-<string name="menu_browse">Browse</string>
-<string name="menu_settings">InstÃllningar</string>
-<string name="menu_log">Logg</string>
-<string name="menu_info">HjÃlp</string>
-<string name="menu_apps">Apps</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stopp</string>
-
-<string name="menu_about">About</string>
-<string name="menu_wizard">Wizard</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
-
-
-<string name="button_help">HjÃlp</string>
-<string name="button_close">StÃng</string>
-<string name="button_about">Om</string>
-
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-sv/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+             <string name="app_version">1.0.5</string>
+     
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">start and stop Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot startar...</string>
+<string name="status_activated">Uppkopplad till Tor nÃtverket</string>
+<string name="status_disabled">"Orbot Ãr inaktiverad</string>
+<string name="status_shutting_down">Orbot avslutas</string>
+
+<string name="tor_process_connecting">Startar Tor...</string>
+<string name="tor_process_connecting_step2">verifierar kontroll uppkopplingen...</string>
+<string name="tor_process_connecting_step3">klar.</string>
+<string name="tor_process_connecting_step4">vÃntar.</string>
+
+<string name="not_anonymous_yet">VARNING: Din trafik Ãr inte anonym Ãn! VÃnligen konfigurera dina apps att anvÃnda HTTP proxy 127.0.0.1:8118 eller SOCKS4A/5 proxy 127.0.0.1:9050</string>
+<string name="menu_home">Hem</string>
+<string name="menu_browse">Browse</string>
+<string name="menu_settings">InstÃllningar</string>
+<string name="menu_log">Logg</string>
+<string name="menu_info">HjÃlp</string>
+<string name="menu_apps">Apps</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stopp</string>
+
+<string name="menu_about">About</string>
+<string name="menu_wizard">Wizard</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
+
+
+<string name="button_help">HjÃlp</string>
+<string name="button_close">StÃng</string>
+<string name="button_about">Om</string>
+
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-zh/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">ååååæ Tor</string>
-    <string name="tor_proxy_service_process">Tor äçæå</string>
-   
-<string name="status_starting_up">Orbot æååå...</string>
-<string name="status_activated">åèæå Tor çç</string>
-<string name="status_disabled">Orbot ååç</string>
-<string name="status_shutting_down">Orbot æååé</string>
-
-<string name="tor_process_connecting">æåååTor....</string>
-<string name="tor_process_connecting_step2">èçæå...</string>
-<string name="tor_process_connecting_step3">åæã</string>
-<string name="tor_process_connecting_step4">çåäã</string>
-
-<string name="not_anonymous_yet">èå: æçéèèäæååç! èèçæçåççåäçäçæåå 127.0.0.1:8118 æè SOCKS4A æè SOCKS5 äçæåå 127.0.0.1:9050</string>
-<string name="menu_home">éé</string>
-<string name="menu_browse">æè</string>
-<string name="menu_settings">èç</string>
-<string name="menu_log">æå</string>
-<string name="menu_info">åå</string>
-<string name="menu_apps">åç</string>
-<string name="menu_start">åå</string>
-<string name="menu_stop">åæ</string>
-
-<string name="menu_about">åä</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">åå</string>
-<string name="button_close">åé</string>
-<string name="button_about">åä</string>
-
-<string name="button_clear_log">Clear Log</string>
-
-
-<string name="menu_verify">ææ</string>
-<string name="menu_exit">éå</string>
-<string name="powered_by">ç Tor éçååéå</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">éæäç(éè root)</string>
-<string name="pref_trans_proxy_title">éæäç</string>
-<string name="pref_trans_proxy_summary">èåååççåäç Tor</string>
-
-<string name="pref_transparent_all_title">åææåçäç Tor</string>
-<string name="pref_transparent_all_summary">äç Tor äçææçåçæé</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Tor äèåçååèæåï</string>
-<string name="status_install_fail">Tor äèåçåææåèãèæçæå tor-assistants@xxxxxxxxxxxxxx</string>
-
-<string name="title_error">åççåéè</string>
-
-<string name="wizard_title">æèäç Orbot</string>
-
-<string name="wizard_btn_tell_me_more">åä Orbot</string>
-<string name="btn_next">ääæ</string>
-<string name="btn_back">ääæ</string>
-<string name="btn_finish">åæ</string>
-
-<string name="btn_okay">çå</string>
-<string name="btn_cancel">åæ</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot å Tor åå Android ääãTor æèçèäïèåäæååæççïååäæççèéçèçåéçïåäæåçåçåäæåãåçäååççæéåæææã\n\n*èåï*ääåè Orbot ääèåäæççåæéåååïèäååååæåéã</string>
-    <string name="wizard_details">ää Orbot èæ</string>
-    <string name="wizard_details_msg">Orbot æåå TorãLibEvent å Privoxy çåæèäãåååäääæå HTTP äç(8118)å SOCKS äç(9050)ïäææå Tor ççãOrbot ååäèå root æéçèåäæçæææéçç Tor ççã</string>
-    <string name="wizard_permissions_root">åèäæé</string>
-    <string name="wizard_permissions_stock">Orbot æé</string>
-    <string name="wizard_premissions_msg_root">éååïæäææåæåçä Orbot éçä root æéãæääèæåäçèäçæã</string>
-    <string name="wizard_permissions_msg_stock">èçåéåéïåæäçèåæ root æéïOrbot åäèçåæäååãäçääæéæèä Orbot èçèåï</string>
-   
-    <string name="wizard_permissions_no_root">åæäææ root æéïæäæçäéèçæääïéäåéäçåä Orbot åäçåççåã</string>
-    <string name="wizard_permissions_consent">ææçåääé root çç</string>
-   
-    <string name="wizard_permission_enable_root">ä Orbot èä root æé</string>
-    <string name="wizard_configure">éç Tor äç</string>
-    <string name="wizard_configure_msg">Orbot çäæèçææåççåæééè Tor æèäåäçåèçéæçééã</string> 
-    <string name="wizard_configure_all">éè Tor äçåéåççå</string>
-    <string name="wizard_configure_select_apps">éæäç Tor çåäåççå</string>
-    
-    
-    <string name="wizard_tips_tricks">åç Orbot çåççå</string>
-    <string name="wizard_tips_msg">æäåèæäèåäçèçæèæå Orbot çåççåãçåääæéåèã</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (ä Android 1.x) - çééçèèçæèå</string>
-    <string name="wizard_tips_proxy">äçèç - åäåäéçåççåäç Orbot</string>
-    
-    <string name="wizard_proxy_help_info">äçèç</string>
-    <string name="wizard_proxy_help_msg">åæææåäçç Android åççåææäç HTTP æ SOCKS äçïæåäéçåèæå Orbot åäç Torã\n\n
-    äæèçä 127.0.0.1 æ localhostãåä HTTPïçåä 8118ïåä SOCKS çåä 9050ãåæåèïååäç SOCKS4A æ SOCKS5ã
-    \n\n
-    æåäéè http://tinyurl.com/proxyandroid äèæå Android ääçäçççèã</string>
-    
-    <string name="wizard_final">Orbot ååçï</string>
-    <string name="wizard_final_msg">æääèçååääåäåçååäç Torïèèãäæåäèãæååäèãååãååãèäåéæåäççåæïåçäææéçåæãçåääååæäåäçäåï</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">æåæåèæè Tor çç - äèåäæåçæçèåååãæåääçâææâééæèæçæèåã\n\nèé https://guardianproject.info/apps/orbot æåééäå help@xxxxxxxxxxxxxxxxxxxx ääèæåäæã</string>
-
-	<string name="tor_check">èåååéèæèååèé https://check.torproject.org äæèæåæçéçä Orbot åçèææååçèæå Torã</string>
-
-	
-    <string name="pref_hs_group">éèæå</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-zh/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">ååååæ Tor</string>
+    <string name="tor_proxy_service_process">Tor äçæå</string>
+   
+<string name="status_starting_up">Orbot æååå...</string>
+<string name="status_activated">åèæå Tor çç</string>
+<string name="status_disabled">Orbot ååç</string>
+<string name="status_shutting_down">Orbot æååé</string>
+
+<string name="tor_process_connecting">æåååTor....</string>
+<string name="tor_process_connecting_step2">èçæå...</string>
+<string name="tor_process_connecting_step3">åæã</string>
+<string name="tor_process_connecting_step4">çåäã</string>
+
+<string name="not_anonymous_yet">èå: æçéèèäæååç! èèçæçåççåäçäçæåå 127.0.0.1:8118 æè SOCKS4A æè SOCKS5 äçæåå 127.0.0.1:9050</string>
+<string name="menu_home">éé</string>
+<string name="menu_browse">æè</string>
+<string name="menu_settings">èç</string>
+<string name="menu_log">æå</string>
+<string name="menu_info">åå</string>
+<string name="menu_apps">åç</string>
+<string name="menu_start">åå</string>
+<string name="menu_stop">åæ</string>
+
+<string name="menu_about">åä</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">åå</string>
+<string name="button_close">åé</string>
+<string name="button_about">åä</string>
+
+<string name="button_clear_log">Clear Log</string>
+
+
+<string name="menu_verify">ææ</string>
+<string name="menu_exit">éå</string>
+<string name="powered_by">ç Tor éçååéå</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">éæäç(éè root)</string>
+<string name="pref_trans_proxy_title">éæäç</string>
+<string name="pref_trans_proxy_summary">èåååççåäç Tor</string>
+
+<string name="pref_transparent_all_title">åææåçäç Tor</string>
+<string name="pref_transparent_all_summary">äç Tor äçææçåçæé</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Tor äèåçååèæåï</string>
+<string name="status_install_fail">Tor äèåçåææåèãèæçæå tor-assistants@xxxxxxxxxxxxxx</string>
+
+<string name="title_error">åççåéè</string>
+
+<string name="wizard_title">æèäç Orbot</string>
+
+<string name="wizard_btn_tell_me_more">åä Orbot</string>
+<string name="btn_next">ääæ</string>
+<string name="btn_back">ääæ</string>
+<string name="btn_finish">åæ</string>
+
+<string name="btn_okay">çå</string>
+<string name="btn_cancel">åæ</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot å Tor åå Android ääãTor æèçèäïèåäæååæççïååäæççèéçèçåéçïåäæåçåçåäæåãåçäååççæéåæææã\n\n*èåï*ääåè Orbot ääèåäæççåæéåååïèäååååæåéã</string>
+    <string name="wizard_details">ää Orbot èæ</string>
+    <string name="wizard_details_msg">Orbot æåå TorãLibEvent å Privoxy çåæèäãåååäääæå HTTP äç(8118)å SOCKS äç(9050)ïäææå Tor ççãOrbot ååäèå root æéçèåäæçæææéçç Tor ççã</string>
+    <string name="wizard_permissions_root">åèäæé</string>
+    <string name="wizard_permissions_stock">Orbot æé</string>
+    <string name="wizard_premissions_msg_root">éååïæäææåæåçä Orbot éçä root æéãæääèæåäçèäçæã</string>
+    <string name="wizard_permissions_msg_stock">èçåéåéïåæäçèåæ root æéïOrbot åäèçåæäååãäçääæéæèä Orbot èçèåï</string>
+   
+    <string name="wizard_permissions_no_root">åæäææ root æéïæäæçäéèçæääïéäåéäçåä Orbot åäçåççåã</string>
+    <string name="wizard_permissions_consent">ææçåääé root çç</string>
+   
+    <string name="wizard_permission_enable_root">ä Orbot èä root æé</string>
+    <string name="wizard_configure">éç Tor äç</string>
+    <string name="wizard_configure_msg">Orbot çäæèçææåççåæééè Tor æèäåäçåèçéæçééã</string> 
+    <string name="wizard_configure_all">éè Tor äçåéåççå</string>
+    <string name="wizard_configure_select_apps">éæäç Tor çåäåççå</string>
+    
+    
+    <string name="wizard_tips_tricks">åç Orbot çåççå</string>
+    <string name="wizard_tips_msg">æäåèæäèåäçèçæèæå Orbot çåççåãçåääæéåèã</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (ä Android 1.x) - çééçèèçæèå</string>
+    <string name="wizard_tips_proxy">äçèç - åäåäéçåççåäç Orbot</string>
+    
+    <string name="wizard_proxy_help_info">äçèç</string>
+    <string name="wizard_proxy_help_msg">åæææåäçç Android åççåææäç HTTP æ SOCKS äçïæåäéçåèæå Orbot åäç Torã\n\n
+    äæèçä 127.0.0.1 æ localhostãåä HTTPïçåä 8118ïåä SOCKS çåä 9050ãåæåèïååäç SOCKS4A æ SOCKS5ã
+    \n\n
+    æåäéè http://tinyurl.com/proxyandroid äèæå Android ääçäçççèã</string>
+    
+    <string name="wizard_final">Orbot ååçï</string>
+    <string name="wizard_final_msg">æääèçååääåäåçååäç Torïèèãäæåäèãæååäèãååãååãèäåéæåäççåæïåçäææéçåæãçåääååæäåäçäåï</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">æåæåèæè Tor çç - äèåäæåçæçèåååãæåääçâææâééæèæçæèåã\n\nèé https://guardianproject.info/apps/orbot æåééäå help@xxxxxxxxxxxxxxxxxxxx ääèæåäæã</string>
+
+	<string name="tor_check">èåååéèæèååèé https://check.torproject.org äæèæåæçéçä Orbot åçèææååçèæå Torã</string>
+
+	
+    <string name="pref_hs_group">éèæå</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml
===================================================================
--- projects/android/trunk/Orbot/res/xml/preferences.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,138 +0,0 @@
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android";>
-
-<PreferenceCategory android:title="@string/pref_general_group">
-<CheckBoxPreference 
-android:defaultValue="true" 
-android:key="pref_start_boot"
-android:title="@string/pref_start_boot_title"
-android:summary="@string/pref_start_boot_summary"
-android:enabled="true"/>
-
-<CheckBoxPreference 
-android:defaultValue="false" 
-android:key="has_root"
-android:title="@string/pref_has_root"
-android:summary="@string/pref_has_root_summary"
-android:enabled="true"/>
-</PreferenceCategory>
-
-<PreferenceCategory android:title="@string/pref_trans_proxy_group">
-
-<CheckBoxPreference 
-android:defaultValue="false" 
-android:key="pref_transparent"
-android:title="@string/pref_trans_proxy_title"
-android:summary="@string/pref_trans_proxy_summary"
-android:enabled="true"/>
-
-<CheckBoxPreference
-android:defaultValue="false" 
-android:key="pref_transparent_all"
-android:summary="@string/pref_transparent_all_summary"
-android:enabled="true" 
-android:title="@string/pref_transparent_all_title"/>
-
-<Preference
-android:defaultValue="" 
-android:key="pref_transparent_app_list"
-android:title="Select Apps"
-android:summary="Choose Apps to Route Through Tor"
-android:enabled="true"/>
-
-
-</PreferenceCategory>
-
- 
-<PreferenceCategory android:title="Bridges">
-
-<CheckBoxPreference android:defaultValue="false" 
-android:title="Use Bridges" android:key="pref_bridges_enabled" 
-android:summary="Enable alternate entrance nodes into the Tor Network"></CheckBoxPreference>
-
-<!-- 5/8/2010 NF: Arma says this doesn't actually work, so commenting out for now
-<CheckBoxPreference android:defaultValue="false" 
-android:title="Update from Authority" android:key="pref_bridges_update" 
-android:summary="Modify bridge list automatically"></CheckBoxPreference>
- -->
- 
-<EditTextPreference android:key="pref_bridges_list"
-android:title="Bridges"
-android:summary="IP address and port of bridges"
-android:dialogTitle="Enter Bridge Addresses"
-/>
-</PreferenceCategory>
-
-
-
-<PreferenceCategory android:title="Relays">
-<CheckBoxPreference android:key="pref_or"
-android:defaultValue="false"
-android:title="Relaying"
-android:summary="Enable your device to be a non-exit relay"
-android:enabled="true"
-/>
-
-<EditTextPreference android:key="pref_or_port"
-android:defaultValue="9001"
-android:title="Relay Port"
-android:summary="Listening port for your Tor relay"
-android:dialogTitle="Enter OR port"
-/>
-
-<EditTextPreference android:key="pref_or_nickname"
-android:defaultValue="Orbot"
-android:title="Relay nickname"
-android:summary="The nickname for your Tor relay"
-android:dialogTitle="Enter a custom relay nickname"
-/>
-
-</PreferenceCategory>
-
-<PreferenceCategory android:title="ReachableAddresses">
-<CheckBoxPreference
-android:key="pref_reachable_addresses"
-android:defaultValue="false"
-android:title="ReachableAddresses"
-android:summary="Run as a client behind a firewall with restrictive policies"
-android:enabled="true"></CheckBoxPreference>
-
-<EditTextPreference
-android:key="pref_reachable_addresses_ports"
-android:defaultValue="*:80,*:443"
-android:title="Reachable ports"
-android:summary="Ports reachable behind a restrictive firewall"
-android:dialogTitle="Enter ports"
-/>
-</PreferenceCategory>
-
-<PreferenceCategory android:title="@string/pref_hs_group">
-<CheckBoxPreference android:title="Enable Hidden Services" android:summary="run servers accessible via the Tor network" android:key="pref_hs_enable"></CheckBoxPreference>
-<EditTextPreference android:summary="enter localhost ports for hidden services" android:title="Hidden Service Ports" android:enabled="false" android:key="pref_hs_ports"></EditTextPreference>
-
-<EditTextPreference android:key="pref_hs_hostname" android:summary="the addressable name for your hidden service (generated automatically)" android:title=".Onion Hostname"></EditTextPreference>
-</PreferenceCategory>
-
-<PreferenceCategory android:title="Debug">
-<CheckBoxPreference
-android:key="pref_enable_logging"
-android:defaultValue="false"
-android:title="Debug Log"
-android:summary="enable debug log to output (must use adb or aLogCat to view)"
-android:enabled="true"></CheckBoxPreference>
-
-
-<CheckBoxPreference
-android:defaultValue="false" 
-android:key="pref_transparent_port_fallback"
-android:summary="@string/pref_transparent_port_fallback_summary"
-android:enabled="true" 
-android:title="@string/pref_transparent_port_fallback_title"/>
-
-<EditTextPreference android:key="pref_port_list"
-android:defaultValue="80,443,8080,8888,8443"
-android:title="@string/pref_transparent_port_title"
-android:summary="@string/pref_transparent_port_summary"
-android:dialogTitle="@string/pref_transparent_port_dialog"
-/>
-</PreferenceCategory>
-</PreferenceScreen>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml (from rev 24751, projects/android/trunk/Orbot/res/xml/preferences.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,150 @@
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android";>
+
+<PreferenceCategory android:title="@string/pref_general_group">
+<CheckBoxPreference 
+android:defaultValue="true" 
+android:key="pref_start_boot"
+android:title="@string/pref_start_boot_title"
+android:summary="@string/pref_start_boot_summary"
+android:enabled="true"/>
+
+<CheckBoxPreference 
+android:defaultValue="false" 
+android:key="has_root"
+android:title="@string/pref_has_root"
+android:summary="@string/pref_has_root_summary"
+android:enabled="true"/>
+</PreferenceCategory>
+
+<PreferenceCategory android:title="@string/pref_trans_proxy_group">
+
+<CheckBoxPreference 
+android:defaultValue="false" 
+android:key="pref_transparent"
+android:title="@string/pref_trans_proxy_title"
+android:summary="@string/pref_trans_proxy_summary"
+android:enabled="true"/>
+
+<CheckBoxPreference
+android:defaultValue="false" 
+android:key="pref_transparent_all"
+android:summary="@string/pref_transparent_all_summary"
+android:enabled="true" 
+android:title="@string/pref_transparent_all_title"/>
+
+<Preference
+android:defaultValue="" 
+android:key="pref_transparent_app_list"
+android:title="Select Apps"
+android:summary="Choose Apps to Route Through Tor"
+android:enabled="true"/>
+
+
+</PreferenceCategory>
+
+<PreferenceCategory android:title="Exit Nodes">
+
+<EditTextPreference android:key="pref_exit_nodes"
+android:title="Exit Nodes"
+android:summary="Fingerprints, nicknames, country codes and address patterns for the last hop"
+android:dialogTitle="Enter Exit Nodes"
+/>
+
+<CheckBoxPreference android:defaultValue="false" 
+android:title="Strict Exit Nodes" android:key="pref_strict_exit_nodes" 
+android:summary="Use only these specific exit nodes"/>
+
+</PreferenceCategory> 
+<PreferenceCategory android:title="Bridges">
+
+<CheckBoxPreference android:defaultValue="false" 
+android:title="Use Bridges" android:key="pref_bridges_enabled" 
+android:summary="Enable alternate entrance nodes into the Tor Network"></CheckBoxPreference>
+
+<!-- 5/8/2010 NF: Arma says this doesn't actually work, so commenting out for now
+<CheckBoxPreference android:defaultValue="false" 
+android:title="Update from Authority" android:key="pref_bridges_update" 
+android:summary="Modify bridge list automatically"></CheckBoxPreference>
+ -->
+ 
+<EditTextPreference android:key="pref_bridges_list"
+android:title="Bridges"
+android:summary="IP address and port of bridges"
+android:dialogTitle="Enter Bridge Addresses"
+/>
+</PreferenceCategory>
+
+
+
+<PreferenceCategory android:title="Relays">
+<CheckBoxPreference android:key="pref_or"
+android:defaultValue="false"
+android:title="Relaying"
+android:summary="Enable your device to be a non-exit relay"
+android:enabled="true"
+/>
+
+<EditTextPreference android:key="pref_or_port"
+android:defaultValue="9001"
+android:title="Relay Port"
+android:summary="Listening port for your Tor relay"
+android:dialogTitle="Enter OR port"
+/>
+
+<EditTextPreference android:key="pref_or_nickname"
+android:defaultValue="Orbot"
+android:title="Relay nickname"
+android:summary="The nickname for your Tor relay"
+android:dialogTitle="Enter a custom relay nickname"
+/>
+
+</PreferenceCategory>
+
+<PreferenceCategory android:title="ReachableAddresses">
+<CheckBoxPreference
+android:key="pref_reachable_addresses"
+android:defaultValue="false"
+android:title="ReachableAddresses"
+android:summary="Run as a client behind a firewall with restrictive policies"
+android:enabled="true"></CheckBoxPreference>
+
+<EditTextPreference
+android:key="pref_reachable_addresses_ports"
+android:defaultValue="*:80,*:443"
+android:title="Reachable ports"
+android:summary="Ports reachable behind a restrictive firewall"
+android:dialogTitle="Enter ports"
+/>
+</PreferenceCategory>
+
+<PreferenceCategory android:title="@string/pref_hs_group">
+<CheckBoxPreference android:title="Enable Hidden Services" android:summary="run servers accessible via the Tor network" android:key="pref_hs_enable"></CheckBoxPreference>
+<EditTextPreference android:summary="enter localhost ports for hidden services" android:title="Hidden Service Ports" android:enabled="false" android:key="pref_hs_ports"></EditTextPreference>
+
+<EditTextPreference android:key="pref_hs_hostname" android:summary="the addressable name for your hidden service (generated automatically)" android:title=".Onion Hostname"></EditTextPreference>
+</PreferenceCategory>
+
+<PreferenceCategory android:title="Debug">
+<CheckBoxPreference
+android:key="pref_enable_logging"
+android:defaultValue="false"
+android:title="Debug Log"
+android:summary="enable debug log to output (must use adb or aLogCat to view)"
+android:enabled="true"></CheckBoxPreference>
+
+
+<CheckBoxPreference
+android:defaultValue="false" 
+android:key="pref_transparent_port_fallback"
+android:summary="@string/pref_transparent_port_fallback_summary"
+android:enabled="true" 
+android:title="@string/pref_transparent_port_fallback_title"/>
+
+<EditTextPreference android:key="pref_port_list"
+android:defaultValue="80,443,8080,8888,8443"
+android:title="@string/pref_transparent_port_title"
+android:summary="@string/pref_transparent_port_summary"
+android:dialogTitle="@string/pref_transparent_port_dialog"
+/>
+</PreferenceCategory>
+</PreferenceScreen>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/OnBootReceiver.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,19 +0,0 @@
-package org.torproject.android;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-public class OnBootReceiver extends BroadcastReceiver {
-	
-	@Override
-	public void onReceive(Context context, Intent intent) {
-		Intent serviceIntent = new Intent();
-		serviceIntent.setAction("org.torproject.android.service.TorService");
-		context.startService(serviceIntent);
-
-	}
-
-	
-}
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java (from rev 24735, projects/android/trunk/Orbot/src/org/torproject/android/OnBootReceiver.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,29 @@
+package org.torproject.android;
+
+import org.torproject.android.service.TorService;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+public class OnBootReceiver extends BroadcastReceiver {
+	
+	@Override
+	public void onReceive(Context context, Intent intent) {
+
+		if (intent.getAction() != null 
+				&& intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
+		{
+			//Phase 1: Launch a service
+			Intent service = new Intent();
+			service.setAction("onboot");
+			service.setClass(context, TorService.class);
+			context.startService(service);
+		}
+	
+		
+	}
+
+	
+}
+

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,830 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-
-package org.torproject.android;
-
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.util.StringTokenizer;
-
-import org.torproject.android.service.ITorService;
-import org.torproject.android.service.ITorServiceCallback;
-import org.torproject.android.service.TorServiceConstants;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.NotificationManager;
-import android.app.ProgressDialog;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.RemoteException;
-import android.preference.PreferenceManager;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnLongClickListener;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-public class Orbot extends Activity implements OnLongClickListener, TorConstants
-{
-	
-	/* Useful UI bits */
-	private TextView lblStatus = null; //the main text display widget
-	private ImageView imgStatus = null; //the main touchable image for activating Orbot
-	private ProgressDialog progressDialog;
-	private MenuItem mItemOnOff = null;
-	
-	/* Some tracking bits */
-	private int torStatus = STATUS_READY; //latest status reported from the tor service
-	
-	/* Tor Service interaction */
-		/* The primary interface we will be calling on the service. */
-    ITorService mService = null;
-	private boolean autoStartOnBind = false;
-
-	SharedPreferences prefs;
-	
-    /** Called when the activity is first created. */
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        
-      //if Tor binary is not running, then start the service up
-		startService(new Intent(INTENT_TOR_SERVICE));
-		bindService ();
-		
-
-    	setTheme(android.R.style.Theme_Black_NoTitleBar);
-    	
-    	prefs = PreferenceManager.getDefaultSharedPreferences(this);
-    	
-    	setContentView(R.layout.layout_main);
-		
-    	lblStatus = (TextView)findViewById(R.id.lblStatus);
-		lblStatus.setOnLongClickListener(this);
-    	imgStatus = (ImageView)findViewById(R.id.imgStatus);
-    	imgStatus.setOnLongClickListener(this);
-    }
-    
-   /*
-    * Create the UI Options Menu (non-Javadoc)
-    * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
-    */
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-        
-        MenuItem mItem = null;
-        
-        mItemOnOff = menu.add(0, 1, Menu.NONE, getString(R.string.menu_start));
-        mItemOnOff.setIcon(android.R.drawable.ic_menu_share);
-        mItemOnOff.setAlphabeticShortcut('t');
-        
-        mItem = menu.add(0, 4, Menu.NONE, getString(R.string.menu_settings));
-        mItem.setIcon(R.drawable.ic_menu_register);
-       
-        mItem = menu.add(0, 7, Menu.NONE, getString(R.string.menu_verify));
-        mItem.setIcon(R.drawable.ic_menu_check);
-      
-        mItem =  menu.add(0,6, Menu.NONE, getString(R.string.menu_about));
-        mItem.setIcon(R.drawable.ic_menu_about);
-        
-        mItem = menu.add(0, 3, Menu.NONE, getString(R.string.menu_wizard));
-        mItem.setIcon(R.drawable.ic_menu_goto);
-       
-        mItem = menu.add(0, 8, Menu.NONE, getString(R.string.menu_exit));
-        mItem.setIcon(R.drawable.ic_menu_exit);
-       
-        
-        return true;
-    }
-    
-
-    private void showAbout ()
-	{
-		
-		LayoutInflater li = LayoutInflater.from(this);
-        View view = li.inflate(R.layout.layout_about, null); 
-        
-        TextView versionName = (TextView)view.findViewById(R.id.versionName);
-        versionName.setText(R.string.app_version);    
-        
-		new AlertDialog.Builder(this)
-        .setTitle(getString(R.string.button_about))
-        .setView(view)
-        .show();
-	}
-    
-    /* When a menu item is selected launch the appropriate view or activity
-     * (non-Javadoc)
-	 * @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem)
-	 */
-	public boolean onMenuItemSelected(int featureId, MenuItem item) {
-		
-		super.onMenuItemSelected(featureId, item);
-		
-		if (item.getItemId() == 1)
-		{
-			
-			try
-			{
-				
-				if (mService == null)
-				{
-				
-				}
-				else if (mService.getStatus() == STATUS_READY)
-				{
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-					startTor();
-					
-				}
-				else
-				{
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-					stopTor();
-					
-				}
-				
-			}
-			catch (RemoteException re)
-			{
-				Log.w(TAG, "Unable to start/top Tor from menu UI", re);
-			}
-		}
-		else if (item.getItemId() == 4)
-		{
-			showSettings();
-		}
-		else if (item.getItemId() == 3)
-		{
-			showHelp();
-		}
-		else if (item.getItemId() == 7)
-		{
-			doTorCheck();
-		}
-		else if (item.getItemId() == 8)
-		{
-			//exit app
-			doExit();
-			
-			
-		}
-		else if (item.getItemId() == 6)
-		{
-			showAbout();
-			
-			
-		}
-		
-        return true;
-	}
-	
-	private void doExit ()
-	{
-		try {
-		
-			stopTor();
-			
-			stopService(new Intent(ITorService.class.getName()));
-			
-        	NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-			mNotificationManager.cancelAll();
-		
-			
-		} catch (RemoteException e) {
-			Log.w(TAG, e);
-		}
-		
-		finish();
-		
-	}
-	
-	/* Return to the main view when the back key is pressed
-	 * (non-Javadoc)
-	 * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
-	 */
-	/*
-	public boolean onKeyDown(int keyCode, KeyEvent event){
-		
-		if(keyCode==KeyEvent.KEYCODE_BACK){
-
-			if(currentView != R.layout.layout_main){
-					
-					showMain ();
-					return true;
-			}
-			else{
-				return super.onKeyDown(keyCode, event);
-			}
-		}
-	
-		return super.onKeyDown(keyCode, event);
-		
-	}*/
- 
-    /* (non-Javadoc)
-	 * @see android.app.Activity#onPause()
-	 */
-	protected void onPause() {
-		super.onPause();
-		
-
-	}
-
-	public void onSaveInstanceState(Bundle savedInstanceState) {
-		  // Save UI state changes to the savedInstanceState.
-		  // This bundle will be passed to onCreate if the process is
-		  // killed and restarted.
-		  // etc.
-		  super.onSaveInstanceState(savedInstanceState);
-		}
-	
-	public void onRestoreInstanceState(Bundle savedInstanceState) {
-	  super.onRestoreInstanceState(savedInstanceState);
-	  // Restore UI state from the savedInstanceState.
-	  // This bundle has also been passed to onCreate.
-	 
-	}
-	
-	private void doTorCheck ()
-	{
-		
-		DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
-			
-		    @Override
-		    public void onClick(DialogInterface dialog, int which) {
-		        switch (which){
-		        case DialogInterface.BUTTON_POSITIVE:
-		            
-		    		openBrowser(URL_TOR_CHECK);
-
-					
-		        	
-		            break;
-
-		        case DialogInterface.BUTTON_NEGATIVE:
-		        
-		        	//do nothing
-		            break;
-		        }
-		    }
-		};
-
-		AlertDialog.Builder builder = new AlertDialog.Builder(this);
-		builder.setMessage(R.string.tor_check).setPositiveButton(R.string.btn_okay, dialogClickListener)
-		    .setNegativeButton(R.string.btn_cancel, dialogClickListener).show();
-
-	}
-	
-	private void enableHiddenServicePort (int hsPort)
-	{
-		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		Editor pEdit = prefs.edit();
-		
-		String hsPortString = prefs.getString("pref_hs_ports", "");
-		
-		if (hsPortString.length() > 0 && hsPortString.indexOf(hsPort+"")==-1)
-			hsPortString += ',' + hsPort;
-		else
-			hsPortString = hsPort + "";
-		
-		pEdit.putString("pref_hs_ports", hsPortString);
-		pEdit.putBoolean("pref_hs_enable", true);
-		
-		pEdit.commit();
-		
-		String onionHostname = prefs.getString("pref_hs_hostname","");
-
-		Intent nResult = new Intent();
-		nResult.putExtra("hs_host", onionHostname);
-		setResult(RESULT_OK, nResult);
-	
-	}
-	
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onResume()
-	 */
-	protected void onResume() {
-		super.onResume();
-		
-		 updateStatus("");
-		 
-		if (getIntent() == null)
-			return;
-		
-		String action = getIntent().getAction();
-		
-		if (action == null)
-			return;
-		
-		if (action.equals("org.torproject.android.REQUEST_HS_PORT"))
-		{
-			
-			DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
-			    @Override
-			    public void onClick(DialogInterface dialog, int which) {
-			        switch (which){
-			        case DialogInterface.BUTTON_POSITIVE:
-			            
-			        	int hsPort = getIntent().getIntExtra("hs_port", -1);
-						
-			        	enableHiddenServicePort (hsPort);
-			        	
-						finish();
-						
-			        	
-			            break;
-
-			        case DialogInterface.BUTTON_NEGATIVE:
-			            //No button clicked
-			        	finish();
-			            break;
-			        }
-			    }
-			};
-
-        	int hsPort = getIntent().getIntExtra("hs_port", -1);
-
-			String requestMsg = "An app wants to open a server port (" + hsPort + ") to the Tor network. This is safe if you trust the app.";
-			AlertDialog.Builder builder = new AlertDialog.Builder(this);
-			builder.setMessage(requestMsg).setPositiveButton("Allow", dialogClickListener)
-			    .setNegativeButton("Deny", dialogClickListener).show();
-			
-		
-		}
-		else if (action.equals("org.torproject.android.START_TOR"))
-		{
-			autoStartOnBind = true;
-			
-			if (mService == null)
-				bindService();
-			
-		}
-		else
-		{
-			
-			//setTitle(getString(R.string.app_name) + ' ' + getString(R.string.app_version));
-	    
-			NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-			mNotificationManager.cancelAll();
-			
-			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-	
-			boolean showWizard = prefs.getBoolean("show_wizard",true);
-			
-			if (showWizard)
-			{
-			
-				Editor pEdit = prefs.edit();
-				
-				pEdit.putBoolean("show_wizard",false);
-				
-				pEdit.commit();
-				
-			    new WizardHelper(this).showWizard();
-
-			}
-			
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onStart()
-	 */
-	protected void onStart() {
-		super.onStart();
-		
-		
-		updateStatus ("");
-		
-
-	}
-
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onStop()
-	 */
-	protected void onStop() {
-		super.onStop();
-		
-		unbindService();
-	}
-
-
-
-	/*
-	 * Launch the system activity for Uri viewing with the provided url
-	 */
-	private void openBrowser(String url)
-	{
-		startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
-		
-	}
-	
-	
-	
-	/*
-	 * Show the help view - a popup dialog
-	 */
-	private void showHelp ()
-	{
-		
-       new WizardHelper(this).showWizard();
-	}
-	
-	
-    /*
-     * Load the basic settings application to display torrc
-     */
-	private void showSettings ()
-	{
-		
-		startActivityForResult(new Intent(this, SettingsPreferences.class), 1);
-	}
-	
-	
-	@Override
-	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-		super.onActivityResult(requestCode, resultCode, data);
-		
-		if (requestCode == 1 && resultCode == 1010 && mService != null)
-		{
-			new ProcessSettingsAsyncTask().execute(mService);	
-		}
-	}
-	
-	private AlertDialog aDialog = null;
-	
-	private void showAlert(String title, String msg, boolean button)
-	{
-		if (aDialog != null)
-			aDialog.dismiss();
-		
-		 if (button)
-		 {
-			 aDialog = new AlertDialog.Builder(this)
-		 .setIcon(R.drawable.icon)
-         .setTitle(title)
-         .setMessage(msg)
-         .setPositiveButton(android.R.string.ok, null)
-         .show();
-		 }
-		 else
-		 {
-			 aDialog = new AlertDialog.Builder(this)
-			 .setIcon(R.drawable.icon)
-	         .setTitle(title)
-	         .setMessage(msg)
-	         .show();
-		 }
-	}
-    /*
-     * Set the state of the running/not running graphic and label
-     */
-    public void updateStatus (String torServiceMsg)
-    {
-    	try
-    	{
-    		
-    		if (mService != null)
-    			torStatus = mService.getStatus();
-    		
-	    	if (imgStatus != null)
-	    	{
-	    		
-		    	if (torStatus == STATUS_ON)
-		    	{
-		    		imgStatus.setImageResource(R.drawable.toron);
-		    	
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		
-		    		String lblMsg = getString(R.string.status_activated);
-		    		//+ "\n" + torServiceMsg;
-		    		
-		    		lblStatus.setText(lblMsg);
-		    		
-		    		if (torServiceMsg.length() > 0)
-		    			showAlert("Update", torServiceMsg, false);
-		    		
-		    		boolean showFirstTime = prefs.getBoolean("connect_first_time",true);
-		    		
-		    		if (showFirstTime)
-		    		{
-		    		
-		    			Editor pEdit = prefs.edit();
-		    			
-		    			pEdit.putBoolean("connect_first_time",false);
-		    			
-		    			pEdit.commit();
-		    			
-		    			showAlert(getString(R.string.status_activated),getString(R.string.connect_first_time),true);
-		    			
-		    		}
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-
-		    	}
-		    	else if (torStatus == STATUS_CONNECTING)
-		    	{
-		    		
-		    		imgStatus.setImageResource(R.drawable.torstarting);
-		    		if (progressDialog == null)
-		    		{
-		    			progressDialog =ProgressDialog.show(this, "", getString(R.string.status_starting_up));
-		    		}
-		    		else
-		    			progressDialog.setMessage(torServiceMsg);
-		    		
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-		    			
-		    	}
-		    	else if (torStatus == STATUS_OFF)
-		    	{
-		    		imgStatus.setImageResource(R.drawable.toroff);
-		    		
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		lblStatus.setText(getString(R.string.status_shutting_down));
-		    			
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-		    	}
-		    	else
-		    	{
-
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		
-		    		imgStatus.setImageResource(R.drawable.toroff);
-		    		lblStatus.setText(getString(R.string.status_disabled) + "\n" + getString(R.string.press_to_start));
-		    		
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-		    		
-		    	}
-	    	}
-		    	
-    	}
-    	catch (RemoteException e)
-    	{
-    		Log.e(TAG,"remote exception updating status",e);
-    	}
-    	
-        
-    }
-  
-    private void startTor () throws RemoteException
-    {
-    	
-    	mService.setProfile(TorServiceConstants.PROFILE_ON); //this means turn on
-		
-		imgStatus.setImageResource(R.drawable.torstarting);
-		lblStatus.setText(getString(R.string.status_starting_up));
-		
-		Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG);
-    	mHandler.sendMessage(msg);
-    	
-    	
-    	
-    }
-    
-    private void stopTor () throws RemoteException
-    {
-    	if (mService != null)
-    	{
-    		mService.setProfile(TorServiceConstants.PROFILE_OFF);
-    		Message msg = mHandler.obtainMessage(TorServiceConstants.DISABLE_TOR_MSG);
-    		mHandler.sendMessage(msg);
-    	}
-    	
-       // stopService(new Intent(ITorService.class.getName()));
-	
-    	
-    }
-    
-	/*
-     * (non-Javadoc)
-     * @see android.view.View.OnClickListener#onClick(android.view.View)
-     */
-	public boolean onLongClick(View view) {
-		
-		
-		try
-		{
-			
-			if (mService == null)
-			{
-			
-			}
-			else if (mService.getStatus() == STATUS_READY)
-			{
-				
-				startTor();
-				
-			}
-			else
-			{
-				
-				stopTor();
-				
-			}
-			
-		}
-		catch (Exception e)
-		{
-			Log.d(TAG,"error onclick",e);
-		}
-			
-		return true;
-	}
-	
-
-    /**
-     * This implementation is used to receive callbacks from the remote
-     * service.
-     */
-    private ITorServiceCallback mCallback = new ITorServiceCallback.Stub() {
-        /**
-         * This is called by the remote service regularly to tell us about
-         * new values.  Note that IPC calls are dispatched through a thread
-         * pool running in each process, so the code executing here will
-         * NOT be running in our main thread like most other things -- so,
-         * to update the UI, we need to use a Handler to hop over there.
-         */
-        public void statusChanged(String value) {
-           
-        	Message msg = mHandler.obtainMessage(TorServiceConstants.STATUS_MSG);
-        	msg.getData().putString(HANDLER_TOR_MSG, value);
-        	mHandler.sendMessage(msg);
-        }
-
-		@Override
-		public void logMessage(String value) throws RemoteException {
-			
-			Message msg = mHandler.obtainMessage(TorServiceConstants.LOG_MSG);
-        	msg.getData().putString(HANDLER_TOR_MSG, value);
-        	mHandler.sendMessage(msg);
-			
-		}
-    };
-    
-
-    private Handler mHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case TorServiceConstants.STATUS_MSG:
-
-                	String torServiceMsg = (String)msg.getData().getString(HANDLER_TOR_MSG);
-                	
-                	updateStatus(torServiceMsg);
-                	
-                    break;
-                case TorServiceConstants.LOG_MSG:
-                	
-                	
-                    break;
-                case TorServiceConstants.ENABLE_TOR_MSG:
-                	
-                	if (progressDialog == null)
-					{
-						progressDialog = ProgressDialog.show(Orbot.this, "", getString(R.string.status_starting_up));
-					}
-    	
-                	
-                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
-                	
-                	break;
-                case TorServiceConstants.DISABLE_TOR_MSG:
-                	
-                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
-                	
-                	break;
-                		
-                default:
-                    super.handleMessage(msg);
-            }
-        }
-        
-    };
-
-    
-    /**
-     * Class for interacting with the main interface of the service.
-     */
-    private ServiceConnection mConnection = new ServiceConnection() {
-        public void onServiceConnected(ComponentName className,
-                IBinder service) {
-            // This is called when the connection with the service has been
-            // established, giving us the service object we can use to
-            // interact with the service.  We are communicating with our
-            // service through an IDL interface, so get a client-side
-            // representation of that from the raw service object.
-            mService = ITorService.Stub.asInterface(service);
-       
-            // We want to monitor the service for as long as we are
-            // connected to it.
-            try {
-                mService.registerCallback(mCallback);
-           
-                updateStatus("");
-                
-                if (autoStartOnBind)
-                {
-                	autoStartOnBind = false;
-                	
-                	startTor();
-                	
-                }
-            
-            } catch (RemoteException e) {
-                // In this case the service has crashed before we could even
-                // do anything with it; we can count on soon being
-                // disconnected (and then reconnected if it can be restarted)
-                // so there is no need to do anything here.
-            	Log.d(TAG,"error registering callback to service",e);
-            }
-            
-
-
-           
-       
-          
-        }
-
-        public void onServiceDisconnected(ComponentName className) {
-            // This is called when the connection with the service has been
-            // unexpectedly disconnected -- that is, its process crashed.
-            mService = null;
-          
-        }
-    };
-    
-    boolean mIsBound = false;
-    
-    private void bindService ()
-    {
-    	 bindService(new Intent(ITorService.class.getName()),
-                 mConnection, Context.BIND_AUTO_CREATE);
-    	 
-    	 mIsBound = true;
-    
-    	
-    	
-    }
-    
-    private void unbindService ()
-    {
-    	if (mIsBound) {
-            // If we have received the service, and hence registered with
-            // it, then now is the time to unregister.
-            if (mService != null) {
-                try {
-                    mService.unregisterCallback(mCallback);
-                    
-                } catch (RemoteException e) {
-                    // There is nothing special we need to do if the service
-                    // has crashed.
-                }
-            }
-            
-            // Detach our existing connection.
-            unbindService(mConnection);
-            mIsBound = false;
-            
-        }
-    }
-	
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java (from rev 24735, projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,846 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
+/* See LICENSE for licensing information */
+
+package org.torproject.android;
+
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.StringTokenizer;
+
+import org.torproject.android.service.ITorService;
+import org.torproject.android.service.ITorServiceCallback;
+import org.torproject.android.service.TorServiceConstants;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.NotificationManager;
+import android.app.ProgressDialog;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.RemoteException;
+import android.preference.PreferenceManager;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnLongClickListener;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class Orbot extends Activity implements OnLongClickListener, TorConstants
+{
+	
+	/* Useful UI bits */
+	private TextView lblStatus = null; //the main text display widget
+	private ImageView imgStatus = null; //the main touchable image for activating Orbot
+	private ProgressDialog progressDialog;
+	private MenuItem mItemOnOff = null;
+	
+	/* Some tracking bits */
+	private int torStatus = STATUS_READY; //latest status reported from the tor service
+	
+	/* Tor Service interaction */
+		/* The primary interface we will be calling on the service. */
+    ITorService mService = null;
+	private boolean autoStartOnBind = false;
+
+	SharedPreferences prefs;
+	
+    /** Called when the activity is first created. */
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+      //if Tor binary is not running, then start the service up
+		startService(new Intent(INTENT_TOR_SERVICE));
+		
+
+    	setTheme(android.R.style.Theme_Black_NoTitleBar);
+    	
+    	prefs = PreferenceManager.getDefaultSharedPreferences(this);
+    	
+    	setContentView(R.layout.layout_main);
+		
+    	lblStatus = (TextView)findViewById(R.id.lblStatus);
+		lblStatus.setOnLongClickListener(this);
+    	imgStatus = (ImageView)findViewById(R.id.imgStatus);
+    	imgStatus.setOnLongClickListener(this);
+    	
+    	
+
+    }
+    
+   /*
+    * Create the UI Options Menu (non-Javadoc)
+    * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
+    */
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+        
+        MenuItem mItem = null;
+        
+        mItemOnOff = menu.add(0, 1, Menu.NONE, getString(R.string.menu_start));
+        mItemOnOff.setIcon(android.R.drawable.ic_menu_share);
+        mItemOnOff.setAlphabeticShortcut('t');
+        
+        mItem = menu.add(0, 4, Menu.NONE, getString(R.string.menu_settings));
+        mItem.setIcon(R.drawable.ic_menu_register);
+       
+        mItem = menu.add(0, 7, Menu.NONE, getString(R.string.menu_verify));
+        mItem.setIcon(R.drawable.ic_menu_check);
+      
+        mItem =  menu.add(0,6, Menu.NONE, getString(R.string.menu_about));
+        mItem.setIcon(R.drawable.ic_menu_about);
+        
+        mItem = menu.add(0, 3, Menu.NONE, getString(R.string.menu_wizard));
+        mItem.setIcon(R.drawable.ic_menu_goto);
+       
+        mItem = menu.add(0, 8, Menu.NONE, getString(R.string.menu_exit));
+        mItem.setIcon(R.drawable.ic_menu_exit);
+       
+        
+        return true;
+    }
+    
+
+    private void showAbout ()
+	{
+		
+		LayoutInflater li = LayoutInflater.from(this);
+        View view = li.inflate(R.layout.layout_about, null); 
+        
+        TextView versionName = (TextView)view.findViewById(R.id.versionName);
+        versionName.setText(R.string.app_version);    
+        
+		new AlertDialog.Builder(this)
+        .setTitle(getString(R.string.button_about))
+        .setView(view)
+        .show();
+	}
+    
+    /* When a menu item is selected launch the appropriate view or activity
+     * (non-Javadoc)
+	 * @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem)
+	 */
+	public boolean onMenuItemSelected(int featureId, MenuItem item) {
+		
+		super.onMenuItemSelected(featureId, item);
+		
+		if (item.getItemId() == 1)
+		{
+			
+			try
+			{
+				
+				if (mService == null)
+				{
+				
+				}
+				else if (mService.getStatus() == STATUS_READY)
+				{
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+					startTor();
+					
+				}
+				else
+				{
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+					stopTor();
+					
+				}
+				
+			}
+			catch (RemoteException re)
+			{
+				Log.w(TAG, "Unable to start/top Tor from menu UI", re);
+			}
+		}
+		else if (item.getItemId() == 4)
+		{
+			showSettings();
+		}
+		else if (item.getItemId() == 3)
+		{
+			showHelp();
+		}
+		else if (item.getItemId() == 7)
+		{
+			doTorCheck();
+		}
+		else if (item.getItemId() == 8)
+		{
+			//exit app
+			doExit();
+			
+			
+		}
+		else if (item.getItemId() == 6)
+		{
+			showAbout();
+			
+			
+		}
+		
+        return true;
+	}
+	
+	private void doExit ()
+	{
+		try {
+		
+			stopTor();
+			
+			stopService(new Intent(ITorService.class.getName()));
+			
+        	NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+			mNotificationManager.cancelAll();
+		
+			
+		} catch (RemoteException e) {
+			Log.w(TAG, e);
+		}
+		
+		finish();
+		
+	}
+	
+	/* Return to the main view when the back key is pressed
+	 * (non-Javadoc)
+	 * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
+	 */
+	/*
+	public boolean onKeyDown(int keyCode, KeyEvent event){
+		
+		if(keyCode==KeyEvent.KEYCODE_BACK){
+
+			if(currentView != R.layout.layout_main){
+					
+					showMain ();
+					return true;
+			}
+			else{
+				return super.onKeyDown(keyCode, event);
+			}
+		}
+	
+		return super.onKeyDown(keyCode, event);
+		
+	}*/
+ 
+    /* (non-Javadoc)
+	 * @see android.app.Activity#onPause()
+	 */
+	protected void onPause() {
+		super.onPause();
+		
+		hideProgressDialog();
+
+		if (aDialog != null)
+			aDialog.dismiss();
+	}
+
+	public void onSaveInstanceState(Bundle savedInstanceState) {
+		  // Save UI state changes to the savedInstanceState.
+		  // This bundle will be passed to onCreate if the process is
+		  // killed and restarted.
+		  // etc.
+		  super.onSaveInstanceState(savedInstanceState);
+		}
+	
+	public void onRestoreInstanceState(Bundle savedInstanceState) {
+	  super.onRestoreInstanceState(savedInstanceState);
+	  // Restore UI state from the savedInstanceState.
+	  // This bundle has also been passed to onCreate.
+	 
+	}
+	
+	private void doTorCheck ()
+	{
+		
+		DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
+			
+		    @Override
+		    public void onClick(DialogInterface dialog, int which) {
+		        switch (which){
+		        case DialogInterface.BUTTON_POSITIVE:
+		            
+		    		openBrowser(URL_TOR_CHECK);
+
+					
+		        	
+		            break;
+
+		        case DialogInterface.BUTTON_NEGATIVE:
+		        
+		        	//do nothing
+		            break;
+		        }
+		    }
+		};
+
+		AlertDialog.Builder builder = new AlertDialog.Builder(this);
+		builder.setMessage(R.string.tor_check).setPositiveButton(R.string.btn_okay, dialogClickListener)
+		    .setNegativeButton(R.string.btn_cancel, dialogClickListener).show();
+
+	}
+	
+	private void enableHiddenServicePort (int hsPort)
+	{
+		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		Editor pEdit = prefs.edit();
+		
+		String hsPortString = prefs.getString("pref_hs_ports", "");
+		
+		if (hsPortString.length() > 0 && hsPortString.indexOf(hsPort+"")==-1)
+			hsPortString += ',' + hsPort;
+		else
+			hsPortString = hsPort + "";
+		
+		pEdit.putString("pref_hs_ports", hsPortString);
+		pEdit.putBoolean("pref_hs_enable", true);
+		
+		pEdit.commit();
+		
+		String onionHostname = prefs.getString("pref_hs_hostname","");
+
+		Intent nResult = new Intent();
+		nResult.putExtra("hs_host", onionHostname);
+		setResult(RESULT_OK, nResult);
+	
+	}
+	
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onResume()
+	 */
+	protected void onResume() {
+		super.onResume();
+		
+		bindService();
+		
+		 updateStatus("");
+		 
+		if (getIntent() == null)
+			return;
+		
+		String action = getIntent().getAction();
+		
+		if (action == null)
+			return;
+		
+		if (action.equals("org.torproject.android.REQUEST_HS_PORT"))
+		{
+			
+			DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
+			    @Override
+			    public void onClick(DialogInterface dialog, int which) {
+			        switch (which){
+			        case DialogInterface.BUTTON_POSITIVE:
+			            
+			        	int hsPort = getIntent().getIntExtra("hs_port", -1);
+						
+			        	enableHiddenServicePort (hsPort);
+			        	
+						finish();
+						
+			        	
+			            break;
+
+			        case DialogInterface.BUTTON_NEGATIVE:
+			            //No button clicked
+			        	finish();
+			            break;
+			        }
+			    }
+			};
+
+        	int hsPort = getIntent().getIntExtra("hs_port", -1);
+
+			String requestMsg = "An app wants to open a server port (" + hsPort + ") to the Tor network. This is safe if you trust the app.";
+			AlertDialog.Builder builder = new AlertDialog.Builder(this);
+			builder.setMessage(requestMsg).setPositiveButton("Allow", dialogClickListener)
+			    .setNegativeButton("Deny", dialogClickListener).show();
+			
+		
+		}
+		else if (action.equals("org.torproject.android.START_TOR"))
+		{
+			autoStartOnBind = true;
+			
+			if (mService == null)
+				bindService();
+			
+		}
+		else
+		{
+			
+			//setTitle(getString(R.string.app_name) + ' ' + getString(R.string.app_version));
+	    
+			NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+			mNotificationManager.cancelAll();
+			
+			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+	
+			boolean showWizard = prefs.getBoolean("show_wizard",true);
+			
+			if (showWizard)
+			{
+			
+				Editor pEdit = prefs.edit();
+				
+				pEdit.putBoolean("show_wizard",false);
+				
+				pEdit.commit();
+				
+			    new WizardHelper(this).showWizard();
+
+			}
+			
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onStart()
+	 */
+	protected void onStart() {
+		super.onStart();
+		
+		
+		updateStatus ("");
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onStop()
+	 */
+	protected void onStop() {
+		super.onStop();
+		
+		//unbindService();
+	}
+
+
+
+	/*
+	 * Launch the system activity for Uri viewing with the provided url
+	 */
+	private void openBrowser(String url)
+	{
+		startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
+		
+	}
+	
+	
+	
+	/*
+	 * Show the help view - a popup dialog
+	 */
+	private void showHelp ()
+	{
+		
+       new WizardHelper(this).showWizard();
+	}
+	
+	
+    /*
+     * Load the basic settings application to display torrc
+     */
+	private void showSettings ()
+	{
+		
+		startActivityForResult(new Intent(this, SettingsPreferences.class), 1);
+	}
+	
+	
+	@Override
+	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+		super.onActivityResult(requestCode, resultCode, data);
+		
+		if (requestCode == 1 && resultCode == 1010 && mService != null)
+		{
+			new ProcessSettingsAsyncTask().execute(mService);	
+		}
+	}
+	
+	AlertDialog aDialog = null;
+	
+	private void showAlert(String title, String msg, boolean button)
+	{
+		try
+		{
+			if (aDialog != null && aDialog.isShowing())
+				aDialog.dismiss();
+		}
+		catch (Exception e){} //swallow any errors
+		
+		 if (button)
+		 {
+				aDialog = new AlertDialog.Builder(this)
+			 .setIcon(R.drawable.icon)
+	         .setTitle(title)
+	         .setMessage(msg)
+	         .setPositiveButton(android.R.string.ok, null)
+	         .show();
+		 }
+		 else
+		 {
+			 aDialog = new AlertDialog.Builder(this)
+			 .setIcon(R.drawable.icon)
+	         .setTitle(title)
+	         .setMessage(msg)
+	         .show();
+		 }
+	
+		 aDialog.setCanceledOnTouchOutside(true);
+	}
+    /*
+     * Set the state of the running/not running graphic and label
+     */
+    public void updateStatus (String torServiceMsg)
+    {
+    	try
+    	{
+    		
+    		if (mService != null)
+    			torStatus = mService.getStatus();
+    		
+	    	if (imgStatus != null)
+	    	{
+	    		
+		    	if (torStatus == STATUS_ON)
+		    	{
+		    		imgStatus.setImageResource(R.drawable.toron);
+
+		    		hideProgressDialog();
+		    		
+		    		String lblMsg = getString(R.string.status_activated);
+		    		//+ "\n" + torServiceMsg;
+		    		
+		    		lblStatus.setText(lblMsg);
+		    		
+		    		if (torServiceMsg.length() > 0)
+		    			showAlert("Update", torServiceMsg, false);
+		    		
+		    		boolean showFirstTime = prefs.getBoolean("connect_first_time",true);
+		    		
+		    		if (showFirstTime)
+		    		{
+		    		
+		    			Editor pEdit = prefs.edit();
+		    			
+		    			pEdit.putBoolean("connect_first_time",false);
+		    			
+		    			pEdit.commit();
+		    			
+		    			showAlert(getString(R.string.status_activated),getString(R.string.connect_first_time),true);
+		    			
+		    		}
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+		    		
+
+		    	}
+		    	else if (torStatus == STATUS_CONNECTING)
+		    	{
+		    		
+		    		imgStatus.setImageResource(R.drawable.torstarting);
+		    		
+		    		if (progressDialog != null)
+		    			progressDialog.setMessage(torServiceMsg);
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+		    			
+		    	}
+		    	else if (torStatus == STATUS_OFF)
+		    	{
+		    		imgStatus.setImageResource(R.drawable.toroff);
+		    		
+
+		    		hideProgressDialog();
+		    		
+		    		lblStatus.setText(getString(R.string.status_shutting_down));
+		    			
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+		    	}
+		    	else
+		    	{
+
+
+		    		hideProgressDialog();
+		    		
+		    		imgStatus.setImageResource(R.drawable.toroff);
+		    		lblStatus.setText(getString(R.string.status_disabled) + "\n" + getString(R.string.press_to_start));
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+		    		
+		    	}
+	    	}
+		    	
+    	}
+    	catch (RemoteException e)
+    	{
+    		Log.e(TAG,"remote exception updating status",e);
+    	}
+    	
+        
+    }
+  
+    private void startTor () throws RemoteException
+    {
+    	
+    	bindService();
+    	
+    	mService.setProfile(TorServiceConstants.PROFILE_ON); //this means turn on
+		
+		imgStatus.setImageResource(R.drawable.torstarting);
+		lblStatus.setText(getString(R.string.status_starting_up));
+		
+		Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG);
+    	mHandler.sendMessage(msg);
+    	
+    	
+    	
+    }
+    
+    private void stopTor () throws RemoteException
+    {
+    	if (mService != null)
+    	{
+    		mService.setProfile(TorServiceConstants.PROFILE_OFF);
+    		Message msg = mHandler.obtainMessage(TorServiceConstants.DISABLE_TOR_MSG);
+    		mHandler.sendMessage(msg);
+    	}
+    	
+     
+    }
+    
+	/*
+     * (non-Javadoc)
+     * @see android.view.View.OnClickListener#onClick(android.view.View)
+     */
+	public boolean onLongClick(View view) {
+		
+		
+		try
+		{
+			
+			if (mService == null)
+			{
+			
+			}
+			else if (mService.getStatus() == STATUS_READY)
+			{
+				
+				createProgressDialog(getString(R.string.status_starting_up));
+
+				startTor();
+			}
+			else
+			{
+				
+				stopTor();
+				
+			}
+			
+		}
+		catch (Exception e)
+		{
+			Log.d(TAG,"error onclick",e);
+		}
+			
+		return true;
+	}
+	
+
+    /**
+     * This implementation is used to receive callbacks from the remote
+     * service.
+     */
+    private ITorServiceCallback mCallback = new ITorServiceCallback.Stub() {
+        /**
+         * This is called by the remote service regularly to tell us about
+         * new values.  Note that IPC calls are dispatched through a thread
+         * pool running in each process, so the code executing here will
+         * NOT be running in our main thread like most other things -- so,
+         * to update the UI, we need to use a Handler to hop over there.
+         */
+        public void statusChanged(String value) {
+           
+        	Message msg = mHandler.obtainMessage(TorServiceConstants.STATUS_MSG);
+        	msg.getData().putString(HANDLER_TOR_MSG, value);
+        	mHandler.sendMessage(msg);
+        }
+
+		@Override
+		public void logMessage(String value) throws RemoteException {
+			
+			Message msg = mHandler.obtainMessage(TorServiceConstants.LOG_MSG);
+        	msg.getData().putString(HANDLER_TOR_MSG, value);
+        	mHandler.sendMessage(msg);
+			
+		}
+    };
+    
+
+    private Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case TorServiceConstants.STATUS_MSG:
+
+                	String torServiceMsg = (String)msg.getData().getString(HANDLER_TOR_MSG);
+                	
+                	updateStatus(torServiceMsg);
+                	
+                    break;
+                case TorServiceConstants.LOG_MSG:
+                	
+                	
+                    break;
+                case TorServiceConstants.ENABLE_TOR_MSG:
+                	
+                	
+                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
+                	
+                	break;
+                case TorServiceConstants.DISABLE_TOR_MSG:
+                	
+                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
+                	
+                	break;
+                		
+                default:
+                    super.handleMessage(msg);
+            }
+        }
+        
+        
+        
+    };
+
+    
+    /**
+     * Class for interacting with the main interface of the service.
+     */
+    private ServiceConnection mConnection = new ServiceConnection() {
+        public void onServiceConnected(ComponentName className,
+                IBinder service) {
+            // This is called when the connection with the service has been
+            // established, giving us the service object we can use to
+            // interact with the service.  We are communicating with our
+            // service through an IDL interface, so get a client-side
+            // representation of that from the raw service object.
+            mService = ITorService.Stub.asInterface(service);
+       
+            // We want to monitor the service for as long as we are
+            // connected to it.
+            try {
+                mService.registerCallback(mCallback);
+           
+                updateStatus("");
+                
+                if (autoStartOnBind)
+                {
+                	autoStartOnBind = false;
+                	
+                	startTor();
+                	
+                }
+            
+            } catch (RemoteException e) {
+                // In this case the service has crashed before we could even
+                // do anything with it; we can count on soon being
+                // disconnected (and then reconnected if it can be restarted)
+                // so there is no need to do anything here.
+            	Log.d(TAG,"error registering callback to service",e);
+            }
+            
+
+
+           
+       
+          
+        }
+
+        public void onServiceDisconnected(ComponentName className) {
+            // This is called when the connection with the service has been
+            // unexpectedly disconnected -- that is, its process crashed.
+            mService = null;
+          
+        }
+    };
+    
+    boolean mIsBound = false;
+    
+    private void bindService ()
+    {
+    	 bindService(new Intent(ITorService.class.getName()),
+                 mConnection, Context.BIND_AUTO_CREATE);
+    	 
+    	 mIsBound = true;
+    
+    }
+    
+    private void unbindService ()
+    {
+    	if (mIsBound) {
+            // If we have received the service, and hence registered with
+            // it, then now is the time to unregister.
+            if (mService != null) {
+                try {
+                    mService.unregisterCallback(mCallback);
+                    
+                } catch (RemoteException e) {
+                    // There is nothing special we need to do if the service
+                    // has crashed.
+                }
+            }
+            
+            // Detach our existing connection.
+            unbindService(mConnection);
+            mIsBound = false;
+            
+        }
+    }
+	
+    private void createProgressDialog (String msg)
+    {
+    	if (progressDialog != null && progressDialog.isShowing())
+    		return;
+    	
+    	progressDialog = ProgressDialog.show(Orbot.this, "", msg);	
+		progressDialog.setCancelable(true);
+
+    }
+    
+    private void hideProgressDialog ()
+    {
+
+		if (progressDialog != null && progressDialog.isShowing())
+		{
+			progressDialog.dismiss();
+
+		}
+		
+		
+    }
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/SettingsPreferences.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,132 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-
-package org.torproject.android;
-
-import org.torproject.android.service.TorServiceUtils;
-import org.torproject.android.service.TorTransProxy;
-
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.os.Bundle;
-import android.preference.CheckBoxPreference;
-import android.preference.Preference;
-import android.preference.PreferenceManager;
-import android.preference.Preference.OnPreferenceClickListener;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceCategory;
-
-
-public class SettingsPreferences 
-		extends PreferenceActivity implements OnPreferenceClickListener {
-
-	private CheckBoxPreference prefCBTransProxy = null;
-	private CheckBoxPreference prefcBTransProxyAll = null;
-	private Preference prefTransProxyApps = null;
-	private CheckBoxPreference prefHiddenServices = null;
-	
-	private boolean hasRoot = false;
-	
-	protected void onCreate(Bundle savedInstanceState)
-	{
-		super.onCreate(savedInstanceState);
-		addPreferencesFromResource(R.xml.preferences);
-		
-		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		
-		if (prefs.contains("has_root"))
-		{
-			hasRoot = prefs.getBoolean("has_root",false);
-		}
-		else
-		{
-			hasRoot = TorServiceUtils.checkRootAccess();
-			Editor pEdit = prefs.edit();
-			pEdit.putBoolean("has_root",hasRoot);
-			pEdit.commit();
-		}
-	}
-	
-	
-	@Override
-	protected void onResume() {
-	
-		super.onResume();
-	
-
-		int transProxyGroupIdx = 1;
-		
-		if (!hasRoot)
-		{
-			getPreferenceScreen().getPreference(transProxyGroupIdx).setEnabled(false);
-		}
-		else
-		{
-			prefCBTransProxy = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(0));
-			prefcBTransProxyAll = (CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(1);
-			prefTransProxyApps = ((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(2);
-
-			prefcBTransProxyAll.setEnabled(prefCBTransProxy.isChecked());
-			
-			prefTransProxyApps.setEnabled(prefCBTransProxy.isChecked() && (!prefcBTransProxyAll.isChecked()));
-			
-			prefCBTransProxy.setOnPreferenceClickListener(this);
-			prefcBTransProxyAll.setOnPreferenceClickListener(this);
-			prefTransProxyApps.setOnPreferenceClickListener(this);
-			
-		}
-		
-		int hiddenGroupIdx = 5;
-		
-		prefHiddenServices = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(0));
-		prefHiddenServices.setOnPreferenceClickListener(this);
-		((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
-		((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
-				
-		
-	};
-	
-	
-	
-	
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onStop()
-	 */
-	@Override
-	protected void onStop() {
-		super.onStop();
-		
-		//Log.d(getClass().getName(),"Exiting Preferences");
-	}
-
-	@Override
-	public boolean onPreferenceClick(Preference preference) {
-		
-		setResult(1010);
-		
-		if (preference == prefTransProxyApps)
-		{
-			startActivity(new Intent(this, AppManager.class));
-			
-		}
-		else if (preference == prefHiddenServices)
-		{
-			
-			((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
-			((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
-			
-		}
-		else
-		{
-			prefcBTransProxyAll.setEnabled(prefCBTransProxy.isChecked());
-			prefTransProxyApps.setEnabled(prefCBTransProxy.isChecked() && (!prefcBTransProxyAll.isChecked()));
-			
-		}
-		
-		return true;
-	}
-
-	
-
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java (from rev 24753, projects/android/trunk/Orbot/src/org/torproject/android/SettingsPreferences.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,132 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
+/* See LICENSE for licensing information */
+
+package org.torproject.android;
+
+import org.torproject.android.service.TorServiceUtils;
+import org.torproject.android.service.TorTransProxy;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.preference.PreferenceManager;
+import android.preference.Preference.OnPreferenceClickListener;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceCategory;
+
+
+public class SettingsPreferences 
+		extends PreferenceActivity implements OnPreferenceClickListener {
+
+	private CheckBoxPreference prefCBTransProxy = null;
+	private CheckBoxPreference prefcBTransProxyAll = null;
+	private Preference prefTransProxyApps = null;
+	private CheckBoxPreference prefHiddenServices = null;
+	
+	private boolean hasRoot = false;
+	
+	protected void onCreate(Bundle savedInstanceState)
+	{
+		super.onCreate(savedInstanceState);
+		addPreferencesFromResource(R.xml.preferences);
+		
+		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		
+		if (prefs.contains("has_root"))
+		{
+			hasRoot = prefs.getBoolean("has_root",false);
+		}
+		else
+		{
+			hasRoot = TorServiceUtils.checkRootAccess();
+			Editor pEdit = prefs.edit();
+			pEdit.putBoolean("has_root",hasRoot);
+			pEdit.commit();
+		}
+	}
+	
+	
+	@Override
+	protected void onResume() {
+	
+		super.onResume();
+	
+
+		int transProxyGroupIdx = 1;
+		
+		if (!hasRoot)
+		{
+			getPreferenceScreen().getPreference(transProxyGroupIdx).setEnabled(false);
+		}
+		else
+		{
+			prefCBTransProxy = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(0));
+			prefcBTransProxyAll = (CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(1);
+			prefTransProxyApps = ((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(2);
+
+			prefcBTransProxyAll.setEnabled(prefCBTransProxy.isChecked());
+			
+			prefTransProxyApps.setEnabled(prefCBTransProxy.isChecked() && (!prefcBTransProxyAll.isChecked()));
+			
+			prefCBTransProxy.setOnPreferenceClickListener(this);
+			prefcBTransProxyAll.setOnPreferenceClickListener(this);
+			prefTransProxyApps.setOnPreferenceClickListener(this);
+			
+		}
+		
+		int hiddenGroupIdx = 6;
+		
+		prefHiddenServices = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(0));
+		prefHiddenServices.setOnPreferenceClickListener(this);
+		((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
+		((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
+				
+		
+	};
+	
+	
+	
+	
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onStop()
+	 */
+	@Override
+	protected void onStop() {
+		super.onStop();
+		
+		//Log.d(getClass().getName(),"Exiting Preferences");
+	}
+
+	@Override
+	public boolean onPreferenceClick(Preference preference) {
+		
+		setResult(1010);
+		
+		if (preference == prefTransProxyApps)
+		{
+			startActivity(new Intent(this, AppManager.class));
+			
+		}
+		else if (preference == prefHiddenServices)
+		{
+			
+			((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
+			((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
+			
+		}
+		else
+		{
+			prefcBTransProxyAll.setEnabled(prefCBTransProxy.isChecked());
+			prefTransProxyApps.setEnabled(prefCBTransProxy.isChecked() && (!prefcBTransProxyAll.isChecked()));
+			
+		}
+		
+		return true;
+	}
+
+	
+
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,1433 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-package org.torproject.android.service;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import net.freehaven.tor.control.ConfigEntry;
-import net.freehaven.tor.control.EventHandler;
-import net.freehaven.tor.control.TorControlConnection;
-
-import org.torproject.android.AppManager;
-import org.torproject.android.Orbot;
-import org.torproject.android.ProcessSettingsAsyncTask;
-import org.torproject.android.R;
-import org.torproject.android.TorConstants;
-import org.torproject.android.Utils;
-
-import android.app.AlertDialog;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.RemoteCallbackList;
-import android.os.RemoteException;
-import android.preference.PreferenceManager;
-import android.util.Log;
-
-public class TorService extends Service implements TorServiceConstants, Runnable, EventHandler
-{
-	
-	public static boolean ENABLE_DEBUG_LOG = false;
-	
-	private static int currentStatus = STATUS_OFF;
-		
-	private TorControlConnection conn = null;
-	private Socket torConnSocket = null;
-	
-	private static TorService _torInstance;
-	
-	private static final int NOTIFY_ID = 1;
-	
-	private static final int MAX_START_TRIES = 3;
-
-    private ArrayList<String> configBuffer = null;
-    private ArrayList<String> resetBuffer = null;
-     
-   
-    private String appHome;
-    private String appBinHome;
-    private String appDataHome;
-    
-    private String torBinaryPath;
-    private String privoxyPath;
-    
-	
-    private boolean hasRoot = false;
-    
-    /** Called when the activity is first created. */
-    public void onCreate() {
-    	super.onCreate();
-       
-    	logMessage("serviced created");
-      
-    }
-    
-    public static void logMessage(String msg)
-    {
-    	if (ENABLE_DEBUG_LOG)
-    		Log.d(TAG,msg);
-    }
-    
-    public static void logException(String msg, Exception e)
-    {
-    	if (ENABLE_DEBUG_LOG)
-    		Log.e(TAG,msg,e);
-    }
-    
-    
-    private boolean findExistingProc ()
-    {
-    	 int procId = TorServiceUtils.findProcessId(torBinaryPath);
-
- 		if (procId != -1)
- 		{
- 			logNotice("Found existing Tor process");
- 			
-            sendCallbackLogMessage ("found existing Tor process...");
-
- 			try {
- 				currentStatus = STATUS_CONNECTING;
-				
- 				initControlConnection();
-				
-				currentStatus = STATUS_ON;
-				
-				return true;
- 						
-			} catch (RuntimeException e) {
-				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
-				currentStatus = STATUS_OFF;
-				
-			} catch (Exception e) {
-				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
-				currentStatus = STATUS_OFF;
-				
-				
-			}
- 		}
- 		
- 		return false;
-    	 
-    }
-    
-
-    /* (non-Javadoc)
-	 * @see android.app.Service#onLowMemory()
-	 */
-	public void onLowMemory() {
-		super.onLowMemory();
-		
-		logNotice( "Low Memory Warning!");
-		
-	}
-
-
-	/* (non-Javadoc)
-	 * @see android.app.Service#onUnbind(android.content.Intent)
-	 */
-	public boolean onUnbind(Intent intent) {
-		
-	//	logNotice( "onUnbind Called: " + intent.getAction());
-		
-		
-		
-		return super.onUnbind(intent);
-		
-		
-	}
-
-	public int getTorStatus ()
-    {
-    	
-    	return currentStatus;
-    	
-    }
-	
-   
-	private void showToolbarNotification (String notifyMsg, int notifyId, int icon)
-	{
-	
-		
-		NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-
-		
-		CharSequence tickerText = notifyMsg;
-		long when = System.currentTimeMillis();
-
-		Notification notification = new Notification(icon, tickerText, when);
-		
-		Context context = getApplicationContext();
-		CharSequence contentTitle = getString(R.string.app_name);
-		CharSequence contentText = notifyMsg;
-		
-		Intent notificationIntent = new Intent(this, Orbot.class);
-		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
-
-		notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
-
-
-		mNotificationManager.notify(notifyId, notification);
-
-
-	}
-    
-    /* (non-Javadoc)
-	 * @see android.app.Service#onRebind(android.content.Intent)
-	 */
-	public void onRebind(Intent intent) {
-		super.onRebind(intent);
-		
-		
-	}
-
-
-	/* (non-Javadoc)
-	 * @see android.app.Service#onStart(android.content.Intent, int)
-	 */
-	public void onStart(Intent intent, int startId) {
-		super.onStart(intent, startId);
-
-		_torInstance = this;
-		
-    	Log.i(TAG, "service started: " + intent.getAction());
-
-		try {
-			checkTorBinaries ();
-		} catch (Exception e) {
-
-			logNotice("unable to find tor binaries: " + e.getMessage());
-	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
-
-			Log.e(TAG, "error checking tor binaries", e);
-		}
-
-		if (intent.getAction()!=null && intent.getAction().equals("onboot"))
-		{
-			
-		
-			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-			
-			boolean startOnBoot = prefs.getBoolean("pref_start_boot",true);
-			
-			if (startOnBoot)
-			{
-				setTorProfile(PROFILE_ON);
-			}
-		}
-	}
-	 
-	public void run ()
-	{
-		
-		boolean isRunning = _torInstance.findExistingProc ();
-		
-		if (!isRunning)
-		{
-	     try
-	     {
-		   initTor();
-		   isRunning = true;
-	     }
-	     catch (Exception e)
-	     {
-	    	 currentStatus = STATUS_OFF;
-	    	 this.showToolbarNotification(getString(R.string.status_disabled), NOTIFY_ID, R.drawable.tornotificationerr);
-	    	 Log.d(TAG,"Unable to start Tor: " + e.getMessage(),e);
-	     }
-		}
-	}
-
-	
-    public void onDestroy ()
-    {
-    	super.onDestroy();
-    	
-    	Log.d(TAG,"onDestroy called");
-    	
-    	  // Unregister all callbacks.
-        mCallbacks.kill();
-      
-    }
-    
-    private void stopTor ()
-    {
-    	currentStatus = STATUS_OFF;
-    	
-    	try
-    	{	
-    		killTorProcess ();
-				
-    		currentStatus = STATUS_OFF;
-    
-    		showToolbarNotification (getString(R.string.status_disabled),NOTIFY_ID,R.drawable.tornotificationoff);
-    		sendCallbackStatusMessage(getString(R.string.status_disabled));
-
-    		setupTransProxy(false);
-    	}
-    	catch (Exception e)
-    	{
-    		Log.d(TAG, "An error occured stopping Tor",e);
-    		logNotice("An error occured stopping Tor: " + e.getMessage());
-    		sendCallbackStatusMessage("Something bad happened. Check the log");
-
-    	}
-    }
-    
- 
-   
-    /*
-    public void reloadConfig ()
-    {
-    	try
-		{
-	    	if (conn == null)
-			{
-				initControlConnection ();
-			}
-		
-			if (conn != null)
-			{
-				 conn.signal("RELOAD");
-			}
-		}
-    	catch (Exception e)
-    	{
-    		Log.d(TAG,"Unable to reload configuration",e);
-    	}
-    }*/
-    
-    
-    
-	private void getHiddenServiceHostname ()
-	{
-
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		
-        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
-
-        if (enableHiddenServices)
-        {
-	    	File file = new File(appDataHome, "hostname");
-	    	
-	    	if (file.exists())
-	    	{
-		    	try {
-					String onionHostname = Utils.readString(new FileInputStream(file));
-					showToolbarNotification("hidden service on: " + onionHostname, NOTIFY_ID, R.drawable.tornotification);
-					Editor pEdit = prefs.edit();
-					pEdit.putString("pref_hs_hostname",onionHostname);
-					pEdit.commit();
-				
-					
-				} catch (FileNotFoundException e) {
-					logException("unable to read onion hostname file",e);
-					showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
-					return;
-				}
-	    	}
-	    	else
-	    	{
-				showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
-	
-	    		
-	    	}
-        }
-        
-        return;
-	}
-	
-    
-    private void killTorProcess () throws Exception
-    {
-		//android.os.Debug.waitForDebugger();
-    	
-    	StringBuilder log = new StringBuilder();
-    	int procId = -1;
-    	
-    	if (conn != null)
-		{
-    		logNotice("Using control port to shutdown Tor");
-    		
-    		
-			try {
-				logNotice("sending SHUTDOWN signal to Tor process");
-				conn.shutdownTor("SHUTDOWN");
-				
-				
-			} catch (Exception e) {
-				Log.d(TAG,"error shutting down Tor via connection",e);
-			}
-			
-			conn = null;
-		}
-    	
-		while ((procId = TorServiceUtils.findProcessId(torBinaryPath)) != -1)
-		{
-			
-			logNotice("Found Tor PID=" + procId + " - killing now...");
-			
-			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
-			TorServiceUtils.doShellCommand(cmd,log, false, false);
-			try { Thread.sleep(500); }
-			catch (Exception e){}
-		}
-
-		while ((procId = TorServiceUtils.findProcessId(privoxyPath)) != -1)
-		{
-			
-			logNotice("Found Privoxy PID=" + procId + " - killing now...");
-			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
-
-			TorServiceUtils.doShellCommand(cmd,log, false, false);
-			try { Thread.sleep(500); }
-			catch (Exception e){}
-		}
-		
-    }
-   
-    private void logNotice (String msg)
-    {
-    	if (msg != null && msg.trim().length() > 0)
-    	{
-    		if (ENABLE_DEBUG_LOG)        	
-        		Log.d(TAG, msg);
-    	
-    		sendCallbackLogMessage(msg);
-    	}
-    }
-    
-
-    
-    private boolean checkTorBinaries () throws Exception
-    {
-    	//android.os.Debug.waitForDebugger();
-    	
-    	//check and install iptables
-    	Api.assertBinaries(this, true);
-    	
-    	File fileInstall = getDir("",0);
-    	String subBinPath = "bin/";
-    	
-		appHome = fileInstall.getAbsolutePath();
-		appBinHome = appHome + subBinPath;
-		appDataHome = getCacheDir().getAbsolutePath() + '/';
-		logNotice( "appHome=" + appHome);
-		
-		torBinaryPath = appBinHome + TOR_BINARY_ASSET_KEY;
-    	privoxyPath = appBinHome + PRIVOXY_ASSET_KEY;
-    	
-		logNotice( "checking Tor binaries");
-	    
-		boolean torBinaryExists = new File(torBinaryPath).exists();
-		boolean privoxyBinaryExists = new File(privoxyPath).exists();
-		
-		if (!(torBinaryExists && privoxyBinaryExists))
-		{
-			killTorProcess ();
-			
-			TorBinaryInstaller installer = new TorBinaryInstaller(this, appBinHome, appBinHome); 
-			installer.start(true);
-			
-			torBinaryExists = new File(torBinaryPath).exists();
-			privoxyBinaryExists = new File(privoxyPath).exists();
-			
-    		if (torBinaryExists && privoxyBinaryExists)
-    		{
-    			logNotice(getString(R.string.status_install_success));
-    	
-    			showToolbarNotification(getString(R.string.status_install_success), NOTIFY_ID, R.drawable.tornotification);
-    		
-    		}
-    		else
-    		{
-    		
-    			logNotice(getString(R.string.status_install_fail));
-
-    			sendCallbackStatusMessage(getString(R.string.status_install_fail));
-    			
-    			return false;
-    		}
-    		
-		}
-		else
-		{
-			logNotice("Found Tor binary: " + torBinaryPath);
-			logNotice("Found Privoxy binary: " + privoxyPath);
-
-		}
-	
-		StringBuilder log = new StringBuilder ();
-		
-		logNotice("(re)Setting permission on Tor binary");
-		String[] cmd1 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + torBinaryPath};
-		TorServiceUtils.doShellCommand(cmd1, log, false, true);
-		
-		logNotice("(re)Setting permission on Privoxy binary");
-		String[] cmd2 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + privoxyPath};
-		TorServiceUtils.doShellCommand(cmd2, log, false, true);
-		
-		
-		return true;
-    }
-    
-    public void initTor () throws Exception
-    {
-
-    	
-    		currentStatus = STATUS_CONNECTING;
-
-    		logNotice(getString(R.string.status_starting_up));
-    		
-    		sendCallbackStatusMessage(getString(R.string.status_starting_up));
-    		
-    		killTorProcess ();
-    		
-    		try {
-
-
-	    		setupTransProxy(true);
-	    		runTorShellCmd();
-	    		runPrivoxyShellCmd();
-
-			} catch (Exception e) {
-		    	logException("Unable to start Tor: " + e.getMessage(),e);	
-		    	sendCallbackStatusMessage("Unable to start Tor: " + e.getMessage());
-		    	
-		    } 
-    		
-    }
-    
-    /*
-     * activate means whether to apply the users preferences
-     * or clear them out
-     * 
-     * the idea is that if Tor is off then transproxy is off
-     */
-    private boolean setupTransProxy (boolean activate) throws Exception
- 	{
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- 		boolean hasRoot;
- 		
- 		if (prefs.contains("has_root"))
- 		{
- 			hasRoot = prefs.getBoolean("has_root",false);
- 		}
- 		else
- 		{
- 			hasRoot = TorServiceUtils.checkRootAccess();
- 			Editor pEdit = prefs.edit();
- 			pEdit.putBoolean("has_root",hasRoot);
- 			pEdit.commit();
- 		}
- 		
- 		if (!hasRoot)
- 			return false;
- 		
-    	if (activate)
-    	{
-	 		
-	 		boolean enableTransparentProxy = prefs.getBoolean("pref_transparent", false);
-	 		boolean transProxyAll = prefs.getBoolean("pref_transparent_all", false);
-	 		boolean transProxyPortFallback = prefs.getBoolean("pref_transparent_port_fallback", false);
-	 		
-	     	TorService.logMessage ("Transparent Proxying: " + enableTransparentProxy);
-	     	
-	     	String portProxyList = prefs.getString("pref_port_list", "");
-	
-	 		if (enableTransparentProxy)
-	 		{
-	 			//TODO: Find a nice place for the next (commented) line
-				//TorTransProxy.setDNSProxying(); 
-				
-				int code = 0; // Default state is "okay"
-					
-				if(transProxyPortFallback)
-				{
-					showAlert("Status", "Setting up port-based transparent proxying...");
-					StringTokenizer st = new StringTokenizer(portProxyList, ",");
-					int status = code;
-					while (st.hasMoreTokens())
-					{
-						status = TorTransProxy.setTransparentProxyingByPort(this, Integer.parseInt(st.nextToken()));
-						if(status != 0)
-							code = status;
-					}
-				}
-				else
-				{
-					if(transProxyAll)
-					{
-						showAlert("Status", "Setting up full transparent proxying...");
-						code = TorTransProxy.setTransparentProxyingAll(this);
-					}
-					else
-					{
-						showAlert("Status", "Setting up app-based transparent proxying...");
-						code = TorTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this));
-					}
-				}
-			
-				TorService.logMessage ("TorTransProxy resp code: " + code);
-				
-				if (code == 0)
-				{
-					showAlert("Status", "Transparent proxying ENABLED");
-				}
-				else
-				{
-					showAlert("Status", "WARNING: error starting transparent proxying!");
-				}
-			
-				return true;
-	 				
-	 		}
-	 		else
-	 		{
-	 			TorTransProxy.purgeIptables(this);
-				showAlert("Status", "Transparent proxying DISABLED");
-
-	 		}
-    	}
-    	else
-    	{	 	
-    		TorTransProxy.purgeIptables(this);
-			showAlert("Status", "Transparent proxying DISABLED");
-
-    	}
-    	
- 		return true;
- 	}
-    
-    private void runTorShellCmd() throws Exception
-    {
-    	
-    	StringBuilder log = new StringBuilder();
-		
-		String torrcPath = appBinHome + TORRC_ASSET_KEY;
-		
-		String[] torCmd = {torBinaryPath + " DataDirectory " + appDataHome + " -f " + torrcPath  + " || exit\n"};
-		
-		boolean runAsRootFalse = false;
-		boolean waitForProcess = false;
-		
-		int procId = -1;
-		int attempts = 0;
-
-		int torRetryWaitTimeMS = 5000;
-		
-		while (procId == -1 && attempts < MAX_START_TRIES)
-		{
-			log = new StringBuilder();
-			
-			logNotice(torCmd[0]);
-			sendCallbackStatusMessage(getString(R.string.status_starting_up));
-			
-			TorServiceUtils.doShellCommand(torCmd, log, runAsRootFalse, waitForProcess);
-		
-			Thread.sleep(torRetryWaitTimeMS);
-			
-			procId = TorServiceUtils.findProcessId(torBinaryPath);
-			
-			logNotice("got tor proc id: " + procId);
-			
-			if (procId == -1)
-			{
-				
-				sendCallbackStatusMessage("Couldn't start Tor process.\nretrying..." + log.toString());
-				Thread.sleep(torRetryWaitTimeMS);
-				attempts++;
-			}
-			
-			logNotice(log.toString());
-		}
-		
-		if (procId == -1)
-		{
-			throw new Exception ("Unable to start Tor");
-		}
-		else
-		{
-		
-			logNotice("Tor process id=" + procId);
-			
-			showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.tornotification);
-			
-			initControlConnection ();
-
-	        applyPreferences();
-	    }
-    }
-    
-    private void runPrivoxyShellCmd () throws Exception
-    {
-    	
-    	logNotice( "Starting privoxy process");
-    	
-			int privoxyProcId = TorServiceUtils.findProcessId(privoxyPath);
-
-			StringBuilder log = null;
-			
-			int attempts = 0;
-			
-    		if (privoxyProcId == -1)
-    		{
-    			log = new StringBuilder();
-    			
-    			String privoxyConfigPath = appBinHome + PRIVOXYCONFIG_ASSET_KEY;
-    			
-    			String[] cmds = 
-    			{ privoxyPath + " " + privoxyConfigPath + " &" };
-    			
-    			logNotice (cmds[0]); 
-    			
-    			boolean runAsRoot = false;
-    			boolean waitFor = false;
-    			
-    			TorServiceUtils.doShellCommand(cmds, log, runAsRoot, waitFor);
-    			
-    			//wait one second to make sure it has started up
-    			Thread.sleep(1000);
-    			
-    			while ((privoxyProcId = TorServiceUtils.findProcessId(privoxyPath)) == -1  && attempts < MAX_START_TRIES)
-    			{
-    				logNotice("Couldn't find Privoxy process... retrying...\n" + log);
-    				Thread.sleep(3000);
-    				attempts++;
-    			}
-    			
-    			
-    			logNotice(log.toString());
-    		}
-    		
-			sendCallbackLogMessage("Privoxy is running on port: " + PORT_HTTP);
-			
-    		logNotice("Privoxy process id=" + privoxyProcId);
-			
-    		
-    		
-    }
-    
-    /*
-	public String generateHashPassword ()
-	{
-		
-		PasswordDigest d = PasswordDigest.generateDigest();
-	      byte[] s = d.getSecret(); // pass this to authenticate
-	      String h = d.getHashedPassword(); // pass this to the Tor on startup.
-
-		return null;
-	}*/
-	
-	public void initControlConnection () throws Exception, RuntimeException
-	{
-			while (true)
-			{
-				try
-				{
-					logNotice( "Connecting to control port: " + TOR_CONTROL_PORT);
-					
-					String baseMessage = getString(R.string.tor_process_connecting);
-					sendCallbackStatusMessage(baseMessage);
-					
-					torConnSocket = new Socket(IP_LOCALHOST, TOR_CONTROL_PORT);
-			        conn = TorControlConnection.getConnection(torConnSocket);
-			        
-			      //  conn.authenticate(new byte[0]); // See section 3.2
-			        
-					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2));
-
-					logNotice( "SUCCESS connected to control port");
-			        
-			        String torAuthCookie = appDataHome + TOR_CONTROL_COOKIE;
-			        
-			        File fileCookie = new File(torAuthCookie);
-			        
-			        if (fileCookie.exists())
-			        {
-				        byte[] cookie = new byte[(int)fileCookie.length()];
-				        new FileInputStream(new File(torAuthCookie)).read(cookie);
-				        conn.authenticate(cookie);
-				        		
-				        logNotice( "SUCCESS authenticated to control port");
-				        
-						sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2) + getString(R.string.tor_process_connecting_step3));
-	
-				        addEventHandler();
-				        
-			        }
-			        
-			        break; //don't need to retry
-				}
-				catch (Exception ce)
-				{
-					conn = null;
-					Log.d(TAG,"Attempt: Error connecting to control port: " + ce.getLocalizedMessage(),ce);
-					
-					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step4));
-
-					Thread.sleep(1000);
-										
-				}	
-			}
-		
-		
-
-	}
-	
-	
-	/*
-	private void getTorStatus () throws IOException
-	{
-		try
-		{
-			 
-			if (conn != null)
-			{
-				 // get a single value.
-			      
-			       // get several values
-			       
-			       if (currentStatus == STATUS_CONNECTING)
-			       {
-				       //Map vals = conn.getInfo(Arrays.asList(new String[]{
-				         // "status/bootstrap-phase", "status","version"}));
-			
-				       String bsPhase = conn.getInfo("status/bootstrap-phase");
-				       Log.d(TAG, "bootstrap-phase: " + bsPhase);
-				       
-				       
-			       }
-			       else
-			       {
-			    	 //  String status = conn.getInfo("status/circuit-established");
-			    	 //  Log.d(TAG, "status/circuit-established=" + status);
-			       }
-			}
-		}
-		catch (Exception e)
-		{
-			Log.d(TAG, "Unable to get Tor status from control port");
-			currentStatus = STATUS_UNAVAILABLE;
-		}
-		
-	}*/
-	
-	
-	public void addEventHandler () throws IOException
-	{
-	       // We extend NullEventHandler so that we don't need to provide empty
-	       // implementations for all the events we don't care about.
-	       // ...
-		logNotice( "adding control port event handler");
-
-		conn.setEventHandler(this);
-	    
-		conn.setEvents(Arrays.asList(new String[]{
-	          "ORCONN", "CIRC", "NOTICE", "WARN", "ERR"}));
-	      // conn.setEvents(Arrays.asList(new String[]{
-	        //  "DEBUG", "INFO", "NOTICE", "WARN", "ERR"}));
-
-		logNotice( "SUCCESS added control port event handler");
-	    
-	    
-
-	}
-	
-		/**
-		 * Returns the port number that the HTTP proxy is running on
-		 */
-		public int getHTTPPort() throws RemoteException {
-			return TorServiceConstants.PORT_HTTP;
-		}
-
-		/**
-		 * Returns the port number that the SOCKS proxy is running on
-		 */
-		public int getSOCKSPort() throws RemoteException {
-			return TorServiceConstants.PORT_SOCKS;
-		}
-
-
-		
-		
-		public int getProfile() throws RemoteException {
-			//return mProfile;
-			return PROFILE_ON;
-		}
-		
-		public void setTorProfile(int profile)  {
-			logNotice("Tor profile set to " + profile);
-			
-			if (profile == PROFILE_ON)
-			{
- 				currentStatus = STATUS_CONNECTING;
-	            sendCallbackStatusMessage ("starting...");
-
-	            Thread thread = new Thread(this);
-	            thread.start();
-	           
-			}
-			else if (profile == PROFILE_OFF)
-			{
-				currentStatus = STATUS_OFF;
-	            sendCallbackStatusMessage ("shutting down...");
-	            
-				_torInstance.stopTor();
-
-				
-			}
-		}
-
-
-
-	public void message(String severity, String msg) {
-		
-		
-		logNotice(  "[Tor Control Port] " + severity + ": " + msg);
-          
-          if (msg.indexOf(TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)!=-1)
-          {
-        	  currentStatus = STATUS_ON;
-        	
-
-   		   	getHiddenServiceHostname ();
-   		   
-          }
-          
-          
-    	  showToolbarNotification (getString(R.string.status_activated),NOTIFY_ID,R.drawable.tornotificationon);
-    		 
-          sendCallbackStatusMessage (msg);
-          
-	}
-
-	private void showAlert(String title, String msg)
-	{
-		 /*
-		 new AlertDialog.Builder(this)
-         .setTitle(title)
-         .setMessage(msg)
-         .setPositiveButton(android.R.string.ok, null)
-         .show();
-         */
-		showToolbarNotification(msg, NOTIFY_ID, R.drawable.tornotification);
-	}
-	
-	public void newDescriptors(List<String> orList) {
-		
-	}
-
-
-	public void orConnStatus(String status, String orName) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("orConnStatus (");
-			sb.append((orName) );
-			sb.append("): ");
-			sb.append(status);
-			
-			logNotice(sb.toString());
-		}
-	}
-
-
-	public void streamStatus(String status, String streamID, String target) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("StreamStatus (");
-			sb.append((streamID));
-			sb.append("): ");
-			sb.append(status);
-			
-			logNotice(sb.toString());
-		}
-	}
-
-
-	public void unrecognized(String type, String msg) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Message (");
-			sb.append(type);
-			sb.append("): ");
-			sb.append(msg);
-			
-			logNotice(sb.toString());
-		}
-		
-	}
-
-	public void bandwidthUsed(long read, long written) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Bandwidth used: ");
-			sb.append(read/1000);
-			sb.append("kb read / ");
-			sb.append(written/1000);
-			sb.append("kb written");
-			
-			logNotice(sb.toString());
-		}
-
-	}
-
-	public void circuitStatus(String status, String circID, String path) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Circuit (");
-			sb.append((circID));
-			sb.append("): ");
-			sb.append(status);
-			sb.append("; ");
-			sb.append(path);
-			
-			logNotice(sb.toString());
-		}
-		
-	}
-	
-    public IBinder onBind(Intent intent) {
-        // Select the interface to return.  If your service only implements
-        // a single interface, you can just return it here without checking
-        // the Intent.
-        
-    	_torInstance = this;
-    	
-		try
-		{
-	
-			checkTorBinaries();
-    	
-		}
-		catch (Exception e)
-		{
-			logNotice("unable to find tor binaries: " + e.getMessage());
-	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
-
-			Log.d(TAG,"Unable to check for Tor binaries",e);
-			return null;
-		}
-    	
-		findExistingProc ();
-		
-    	if (ITorService.class.getName().equals(intent.getAction())) {
-            return mBinder;
-        }
-        
-
-        return null;
-    }
-	
-    /**
-     * This is a list of callbacks that have been registered with the
-     * service.  Note that this is package scoped (instead of private) so
-     * that it can be accessed more efficiently from inner classes.
-     */
-    final RemoteCallbackList<ITorServiceCallback> mCallbacks
-            = new RemoteCallbackList<ITorServiceCallback>();
-
-
-    /**
-     * The IRemoteInterface is defined through IDL
-     */
-    private final ITorService.Stub mBinder = new ITorService.Stub() {
-    	
-       
-		public void registerCallback(ITorServiceCallback cb) {
-            if (cb != null) mCallbacks.register(cb);
-        }
-        public void unregisterCallback(ITorServiceCallback cb) {
-            if (cb != null) mCallbacks.unregister(cb);
-        }
-        public int getStatus () {
-        	return getTorStatus();
-        }
-        
-        public void setProfile (int profile)
-        {
-        	setTorProfile(profile);
-        	
-        }
-        
-        public void processSettings ()
-        {
-        	
-        	
-        	try {
-				applyPreferences();
-			} catch (RemoteException e) {
-				logException ("error applying prefs",e);
-			}
-        	
-        }
-        
-        
-        
-        public String getConfiguration (String name)
-        {
-        	try
-        	{
-	        	if (conn != null)
-	        	{
-	        		StringBuffer result = new StringBuffer();
-	        		
-	        		List<ConfigEntry> listCe = conn.getConf(name);
-	        		
-	        		Iterator<ConfigEntry> itCe = listCe.iterator();
-	        		ConfigEntry ce = null;
-	        		
-	        		while (itCe.hasNext())
-	        		{
-	        			ce = itCe.next();
-	        			
-	        			result.append(ce.key);
-	        			result.append(' ');
-	        			result.append(ce.value);
-	        			result.append('\n');
-	        		}
-	        		
-	   	       		return result.toString();
-	        	}
-        	}
-        	catch (IOException ioe)
-        	{
-        		Log.e(TAG, "Unable to update Tor configuration", ioe);
-        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
-        	}
-        	
-        	return null;
-        }
-        
-        /**
-         * Set configuration
-         **/
-        public boolean updateConfiguration (String name, String value, boolean saveToDisk)
-        {
-        	if (configBuffer == null)
-        		configBuffer = new ArrayList<String>();
-	        
-        	if (resetBuffer == null)
-        		resetBuffer = new ArrayList<String>();
-	        
-        	if (value == null || value.length() == 0)
-        	{
-        		resetBuffer.add(name);
-        		/*
-        		if (conn != null)
-        		{
-        			try {
-						conn.resetConf(Arrays.asList(new String[]{name}));
-					} catch (IOException e) {
-						Log.w(TAG, "Unable to reset conf",e);
-					}
-        		}*/
-        	}
-        	else
-        		configBuffer.add(name + ' ' + value);
-	        
-        	return false;
-        }
-         
-	    public boolean saveConfiguration ()
-	    {
-	    	try
-        	{
-	        	if (conn != null)
-	        	{
-	        		
-	        		 if (resetBuffer != null && resetBuffer.size() > 0)
-				        {	
-				        	conn.resetConf(resetBuffer);
-				        	resetBuffer = null;
-				        }
-	   	       
-	        		 if (configBuffer != null && configBuffer.size() > 0)
-				        {
-	        			 	
-				        	conn.setConf(configBuffer);
-				        	configBuffer = null;
-				        }
-	   	       
-	   	       		// Flush the configuration to disk.
-	        		//this is doing bad things right now NF 22/07/10
-	   	       		//conn.saveConf();
-	
-	   	       		return true;
-	        	}
-        	}
-        	catch (Exception ioe)
-        	{
-        		Log.e(TAG, "Unable to update Tor configuration", ioe);
-        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
-        	}
-        	
-        	return false;
-        	
-	    }
-    };
-    
-    private ArrayList<String> callbackBuffer = new ArrayList<String>();
-    private boolean inCallbackStatus = false;
-    private boolean inCallback = false;
-    
-    private synchronized void sendCallbackStatusMessage (String newStatus)
-    {
-    	 
-    	if (mCallbacks == null)
-    		return;
-    	
-        // Broadcast to all clients the new value.
-        final int N = mCallbacks.beginBroadcast();
-        
-        inCallback = true;
-        
-        if (N > 0)
-        {
-        	 for (int i=0; i<N; i++) {
-		            try {
-		                mCallbacks.getBroadcastItem(i).statusChanged(newStatus);
-		                
-		                
-		            } catch (RemoteException e) {
-		                // The RemoteCallbackList will take care of removing
-		                // the dead object for us.
-		            }
-		        }
-        }
-        
-        mCallbacks.finishBroadcast();
-        inCallback = false;
-    }
-    
-    private synchronized void sendCallbackLogMessage (String logMessage)
-    {
-    	 
-    	if (mCallbacks == null)
-    		return;
-    	
-    	callbackBuffer.add(logMessage);
-
-    	if (!inCallback)
-    	{
-
-	        inCallback = true;
-	        // Broadcast to all clients the new value.
-	        final int N = mCallbacks.beginBroadcast();
-	        
-	
-	        if (N > 0)
-	        {
-	        
-	        	Iterator<String> it = callbackBuffer.iterator();
-	        	String status = null;
-	        	
-	        	while (it.hasNext())
-	        	{
-	        		status = it.next();
-	        		
-			        for (int i=0; i<N; i++) {
-			            try {
-			                mCallbacks.getBroadcastItem(i).logMessage(status);
-			                
-			            } catch (RemoteException e) {
-			                // The RemoteCallbackList will take care of removing
-			                // the dead object for us.
-			            }
-			        }
-	        	}
-		        
-		        callbackBuffer.clear();
-	        }
-	        
-	        mCallbacks.finishBroadcast();
-	        inCallback = false;
-    	}
-    	
-    }
-    
-    private boolean applyPreferences () throws RemoteException
-    {
-    	
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		
-    	ENABLE_DEBUG_LOG = prefs.getBoolean("pref_enable_logging",false);
-    	Log.i(TAG,"debug logging:" + ENABLE_DEBUG_LOG);
-    		
-		boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
-		
-		//boolean autoUpdateBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_UPDATED, false);
-
-        boolean becomeRelay = prefs.getBoolean(TorConstants.PREF_OR, false);
-
-        boolean ReachableAddresses = prefs.getBoolean(TorConstants.PREF_REACHABLE_ADDRESSES,false);
-
-        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
-
-		//boolean enableTransparentProxy = prefs.getBoolean(TorConstants.PREF_TRANSPARENT, false);
-		
-        if (currentStatus == STATUS_ON)
-        {
-        	//reset iptables rules in active mode
-        
-			try
-			{
-				setupTransProxy(true); 		
-			}
-			catch (Exception e)
-			{
-				logException("unable to setup transproxy",e);
-			}
-        }
-		
-		if (useBridges)
-		{
-			String bridgeList = prefs.getString(TorConstants.PREF_BRIDGES_LIST,"");
-
-			if (bridgeList == null || bridgeList.length() == 0)
-			{
-			
-				showAlert("Bridge Error","In order to use the bridge feature, you must enter at least one bridge IP address." +
-						"Send an email to bridges@xxxxxxxxxxxxxx with the line \"get bridges\" by itself in the body of the mail from a gmail account.");
-				
-			
-				return false;
-			}
-			
-			
-			mBinder.updateConfiguration("UseBridges", "1", false);
-				
-			String bridgeDelim = "\n";
-			
-			if (bridgeList.indexOf(",") != -1)
-			{
-				bridgeDelim = ",";
-			}
-			
-			StringTokenizer st = new StringTokenizer(bridgeList,bridgeDelim);
-			while (st.hasMoreTokens())
-			{
-
-				mBinder.updateConfiguration("bridge", st.nextToken(), false);
-
-			}
-			
-			mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false);
-			
-		}
-		else
-		{
-			mBinder.updateConfiguration("UseBridges", "0", false);
-
-		}
-
-        try
-        {
-            if (ReachableAddresses)
-            {
-                String ReachableAddressesPorts =
-                    prefs.getString(TorConstants.PREF_REACHABLE_ADDRESSES_PORTS, "*:80,*:443");
-                
-                mBinder.updateConfiguration("ReachableAddresses", ReachableAddressesPorts, false);
-
-            }
-            else
-            {
-                mBinder.updateConfiguration("ReachableAddresses", "", false);
-            }
-        }
-        catch (Exception e)
-        {
-           showAlert("Config Error","Your ReachableAddresses settings caused an exception!");
-           
-           return false;
-        }
-
-        try
-        {
-            if (becomeRelay && (!useBridges) && (!ReachableAddresses))
-            {
-                int ORPort =  Integer.parseInt(prefs.getString(TorConstants.PREF_OR_PORT, "9001"));
-                String nickname = prefs.getString(TorConstants.PREF_OR_NICKNAME, "Orbot");
-
-                mBinder.updateConfiguration("ORPort", ORPort + "", false);
-    			mBinder.updateConfiguration("Nickname", nickname, false);
-    			mBinder.updateConfiguration("ExitPolicy", "reject *:*", false);
-
-            }
-            else
-            {
-            	mBinder.updateConfiguration("ORPort", "", false);
-    			mBinder.updateConfiguration("Nickname", "", false);
-    			mBinder.updateConfiguration("ExitPolicy", "", false);
-            }
-        }
-        catch (Exception e)
-        {
-            showAlert("Uh-oh!","Your relay settings caused an exception!");
-          
-            return false;
-        }
-
-        if (enableHiddenServices)
-        {
-        	mBinder.updateConfiguration("HiddenServiceDir",appDataHome, false);
-        	
-        	String hsPorts = prefs.getString("pref_hs_ports","");
-        	
-        	StringTokenizer st = new StringTokenizer (hsPorts,",");
-        	String hsPortConfig = null;
-        	
-        	while (st.hasMoreTokens())
-        	{
-        		hsPortConfig = st.nextToken();
-        		
-        		if (hsPortConfig.indexOf(":")==-1) //setup the port to localhost if not specifed
-        		{
-        			hsPortConfig = hsPortConfig + " 127.0.0.1:" + hsPortConfig;
-        		}
-        		
-        		mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false);
-        	}
-        	
-        	
-        }
-        else
-        {
-        	mBinder.updateConfiguration("HiddenServiceDir","", false);
-        	
-        }
-        
-        mBinder.saveConfiguration();
-	
-        return true;
-    }
-    
-   
-   
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java (from rev 24753, projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,1444 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
+/* See LICENSE for licensing information */
+package org.torproject.android.service;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import net.freehaven.tor.control.ConfigEntry;
+import net.freehaven.tor.control.EventHandler;
+import net.freehaven.tor.control.TorControlConnection;
+
+import org.torproject.android.AppManager;
+import org.torproject.android.Orbot;
+import org.torproject.android.ProcessSettingsAsyncTask;
+import org.torproject.android.R;
+import org.torproject.android.TorConstants;
+import org.torproject.android.Utils;
+
+import android.app.AlertDialog;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteCallbackList;
+import android.os.RemoteException;
+import android.preference.PreferenceManager;
+import android.util.Log;
+
+public class TorService extends Service implements TorServiceConstants, Runnable, EventHandler
+{
+	
+	public static boolean ENABLE_DEBUG_LOG = false;
+	
+	private static int currentStatus = STATUS_OFF;
+		
+	private TorControlConnection conn = null;
+	private Socket torConnSocket = null;
+	
+	private static TorService _torInstance;
+	
+	private static final int NOTIFY_ID = 1;
+	
+	private static final int MAX_START_TRIES = 3;
+
+    private ArrayList<String> configBuffer = null;
+    private ArrayList<String> resetBuffer = null;
+     
+   
+    private String appHome;
+    private String appBinHome;
+    private String appDataHome;
+    
+    private String torBinaryPath;
+    private String privoxyPath;
+    
+	
+    private boolean hasRoot = false;
+    
+    /** Called when the activity is first created. */
+    public void onCreate() {
+    	super.onCreate();
+       
+    	logMessage("serviced created");
+      
+    }
+    
+    public static void logMessage(String msg)
+    {
+    	if (ENABLE_DEBUG_LOG)
+    		Log.d(TAG,msg);
+    }
+    
+    public static void logException(String msg, Exception e)
+    {
+    	if (ENABLE_DEBUG_LOG)
+    		Log.e(TAG,msg,e);
+    }
+    
+    
+    private boolean findExistingProc ()
+    {
+    	 int procId = TorServiceUtils.findProcessId(torBinaryPath);
+
+ 		if (procId != -1)
+ 		{
+ 			logNotice("Found existing Tor process");
+ 			
+            sendCallbackLogMessage ("found existing Tor process...");
+
+ 			try {
+ 				currentStatus = STATUS_CONNECTING;
+				
+ 				initControlConnection();
+				
+				currentStatus = STATUS_ON;
+				
+				return true;
+ 						
+			} catch (RuntimeException e) {
+				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
+				currentStatus = STATUS_OFF;
+				
+			} catch (Exception e) {
+				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
+				currentStatus = STATUS_OFF;
+				
+				
+			}
+ 		}
+ 		
+ 		return false;
+    	 
+    }
+    
+
+    /* (non-Javadoc)
+	 * @see android.app.Service#onLowMemory()
+	 */
+	public void onLowMemory() {
+		super.onLowMemory();
+		
+		logNotice( "Low Memory Warning!");
+		
+	}
+
+
+	/* (non-Javadoc)
+	 * @see android.app.Service#onUnbind(android.content.Intent)
+	 */
+	public boolean onUnbind(Intent intent) {
+		
+	//	logNotice( "onUnbind Called: " + intent.getAction());
+		
+		
+		
+		return super.onUnbind(intent);
+		
+		
+	}
+
+	public int getTorStatus ()
+    {
+    	
+    	return currentStatus;
+    	
+    }
+	
+   
+	private void showToolbarNotification (String notifyMsg, int notifyId, int icon)
+	{
+	
+		
+		NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+		
+		CharSequence tickerText = notifyMsg;
+		long when = System.currentTimeMillis();
+
+		Notification notification = new Notification(icon, tickerText, when);
+		
+		Context context = getApplicationContext();
+		CharSequence contentTitle = getString(R.string.app_name);
+		CharSequence contentText = notifyMsg;
+		
+		Intent notificationIntent = new Intent(this, Orbot.class);
+		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
+
+		notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
+
+
+		mNotificationManager.notify(notifyId, notification);
+
+
+	}
+    
+    /* (non-Javadoc)
+	 * @see android.app.Service#onRebind(android.content.Intent)
+	 */
+	public void onRebind(Intent intent) {
+		super.onRebind(intent);
+		
+		
+	}
+
+
+	/* (non-Javadoc)
+	 * @see android.app.Service#onStart(android.content.Intent, int)
+	 */
+	public void onStart(Intent intent, int startId) {
+		super.onStart(intent, startId);
+
+		_torInstance = this;
+		
+    	Log.i(TAG, "service started: " + intent.getAction());
+
+		try {
+			checkTorBinaries ();
+		} catch (Exception e) {
+
+			logNotice("unable to find tor binaries: " + e.getMessage());
+	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
+
+			Log.e(TAG, "error checking tor binaries", e);
+		}
+
+		if (intent.getAction()!=null && intent.getAction().equals("onboot"))
+		{
+			
+		
+			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+			
+			boolean startOnBoot = prefs.getBoolean("pref_start_boot",true);
+			
+			if (startOnBoot)
+			{
+				setTorProfile(PROFILE_ON);
+			}
+		}
+	}
+	 
+	public void run ()
+	{
+		
+		boolean isRunning = _torInstance.findExistingProc ();
+		
+		if (!isRunning)
+		{
+	     try
+	     {
+		   initTor();
+		   isRunning = true;
+	     }
+	     catch (Exception e)
+	     {
+	    	 currentStatus = STATUS_OFF;
+	    	 this.showToolbarNotification(getString(R.string.status_disabled), NOTIFY_ID, R.drawable.tornotificationerr);
+	    	 Log.d(TAG,"Unable to start Tor: " + e.getMessage(),e);
+	     }
+		}
+	}
+
+	
+    public void onDestroy ()
+    {
+    	super.onDestroy();
+    	
+    	Log.d(TAG,"onDestroy called");
+    	
+    	  // Unregister all callbacks.
+        mCallbacks.kill();
+      
+    }
+    
+    private void stopTor ()
+    {
+    	currentStatus = STATUS_OFF;
+    	
+    	try
+    	{	
+    		killTorProcess ();
+				
+    		currentStatus = STATUS_OFF;
+    
+    		showToolbarNotification (getString(R.string.status_disabled),NOTIFY_ID,R.drawable.tornotificationoff);
+    		sendCallbackStatusMessage(getString(R.string.status_disabled));
+
+    		setupTransProxy(false);
+    	}
+    	catch (Exception e)
+    	{
+    		Log.d(TAG, "An error occured stopping Tor",e);
+    		logNotice("An error occured stopping Tor: " + e.getMessage());
+    		sendCallbackStatusMessage("Something bad happened. Check the log");
+
+    	}
+    }
+    
+ 
+   
+    /*
+    public void reloadConfig ()
+    {
+    	try
+		{
+	    	if (conn == null)
+			{
+				initControlConnection ();
+			}
+		
+			if (conn != null)
+			{
+				 conn.signal("RELOAD");
+			}
+		}
+    	catch (Exception e)
+    	{
+    		Log.d(TAG,"Unable to reload configuration",e);
+    	}
+    }*/
+    
+    
+    
+	private void getHiddenServiceHostname ()
+	{
+
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		
+        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
+
+        if (enableHiddenServices)
+        {
+	    	File file = new File(appDataHome, "hostname");
+	    	
+	    	if (file.exists())
+	    	{
+		    	try {
+					String onionHostname = Utils.readString(new FileInputStream(file));
+					showToolbarNotification("hidden service on: " + onionHostname, NOTIFY_ID, R.drawable.tornotification);
+					Editor pEdit = prefs.edit();
+					pEdit.putString("pref_hs_hostname",onionHostname);
+					pEdit.commit();
+				
+					
+				} catch (FileNotFoundException e) {
+					logException("unable to read onion hostname file",e);
+					showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
+					return;
+				}
+	    	}
+	    	else
+	    	{
+				showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
+	
+	    		
+	    	}
+        }
+        
+        return;
+	}
+	
+    
+    private void killTorProcess () throws Exception
+    {
+		//android.os.Debug.waitForDebugger();
+    	
+    	StringBuilder log = new StringBuilder();
+    	int procId = -1;
+    	
+    	if (conn != null)
+		{
+    		logNotice("Using control port to shutdown Tor");
+    		
+    		
+			try {
+				logNotice("sending SHUTDOWN signal to Tor process");
+				conn.shutdownTor("SHUTDOWN");
+				
+				
+			} catch (Exception e) {
+				Log.d(TAG,"error shutting down Tor via connection",e);
+			}
+			
+			conn = null;
+		}
+    	
+		while ((procId = TorServiceUtils.findProcessId(torBinaryPath)) != -1)
+		{
+			
+			logNotice("Found Tor PID=" + procId + " - killing now...");
+			
+			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
+			TorServiceUtils.doShellCommand(cmd,log, false, false);
+			try { Thread.sleep(500); }
+			catch (Exception e){}
+		}
+
+		while ((procId = TorServiceUtils.findProcessId(privoxyPath)) != -1)
+		{
+			
+			logNotice("Found Privoxy PID=" + procId + " - killing now...");
+			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
+
+			TorServiceUtils.doShellCommand(cmd,log, false, false);
+			try { Thread.sleep(500); }
+			catch (Exception e){}
+		}
+		
+    }
+   
+    private void logNotice (String msg)
+    {
+    	if (msg != null && msg.trim().length() > 0)
+    	{
+    		if (ENABLE_DEBUG_LOG)        	
+        		Log.d(TAG, msg);
+    	
+    		sendCallbackLogMessage(msg);
+    	}
+    }
+    
+
+    
+    private boolean checkTorBinaries () throws Exception
+    {
+    	//android.os.Debug.waitForDebugger();
+    	
+    	//check and install iptables
+    	Api.assertBinaries(this, true);
+    	
+    	File fileInstall = getDir("",0);
+    	String subBinPath = "bin/";
+    	
+		appHome = fileInstall.getAbsolutePath();
+		appBinHome = appHome + subBinPath;
+		appDataHome = getCacheDir().getAbsolutePath() + '/';
+		logNotice( "appHome=" + appHome);
+		
+		torBinaryPath = appBinHome + TOR_BINARY_ASSET_KEY;
+    	privoxyPath = appBinHome + PRIVOXY_ASSET_KEY;
+    	
+		logNotice( "checking Tor binaries");
+	    
+		boolean torBinaryExists = new File(torBinaryPath).exists();
+		boolean privoxyBinaryExists = new File(privoxyPath).exists();
+		
+		if (!(torBinaryExists && privoxyBinaryExists))
+		{
+			killTorProcess ();
+			
+			TorBinaryInstaller installer = new TorBinaryInstaller(this, appBinHome, appBinHome); 
+			installer.start(true);
+			
+			torBinaryExists = new File(torBinaryPath).exists();
+			privoxyBinaryExists = new File(privoxyPath).exists();
+			
+    		if (torBinaryExists && privoxyBinaryExists)
+    		{
+    			logNotice(getString(R.string.status_install_success));
+    	
+    			showToolbarNotification(getString(R.string.status_install_success), NOTIFY_ID, R.drawable.tornotification);
+    		
+    		}
+    		else
+    		{
+    		
+    			logNotice(getString(R.string.status_install_fail));
+
+    			sendCallbackStatusMessage(getString(R.string.status_install_fail));
+    			
+    			return false;
+    		}
+    		
+		}
+		else
+		{
+			logNotice("Found Tor binary: " + torBinaryPath);
+			logNotice("Found Privoxy binary: " + privoxyPath);
+
+		}
+	
+		StringBuilder log = new StringBuilder ();
+		
+		logNotice("(re)Setting permission on Tor binary");
+		String[] cmd1 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + torBinaryPath};
+		TorServiceUtils.doShellCommand(cmd1, log, false, true);
+		
+		logNotice("(re)Setting permission on Privoxy binary");
+		String[] cmd2 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + privoxyPath};
+		TorServiceUtils.doShellCommand(cmd2, log, false, true);
+		
+		
+		return true;
+    }
+    
+    public void initTor () throws Exception
+    {
+
+    	
+    		currentStatus = STATUS_CONNECTING;
+
+    		logNotice(getString(R.string.status_starting_up));
+    		
+    		sendCallbackStatusMessage(getString(R.string.status_starting_up));
+    		
+    		killTorProcess ();
+    		
+    		try {
+
+
+	    		setupTransProxy(true);
+	    		runTorShellCmd();
+	    		runPrivoxyShellCmd();
+
+			} catch (Exception e) {
+		    	logException("Unable to start Tor: " + e.getMessage(),e);	
+		    	sendCallbackStatusMessage("Unable to start Tor: " + e.getMessage());
+		    	
+		    } 
+    		
+    }
+    
+    /*
+     * activate means whether to apply the users preferences
+     * or clear them out
+     * 
+     * the idea is that if Tor is off then transproxy is off
+     */
+    private boolean setupTransProxy (boolean activate) throws Exception
+ 	{
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ 		boolean hasRoot;
+ 		
+ 		if (prefs.contains("has_root"))
+ 		{
+ 			hasRoot = prefs.getBoolean("has_root",false);
+ 		}
+ 		else
+ 		{
+ 			hasRoot = TorServiceUtils.checkRootAccess();
+ 			Editor pEdit = prefs.edit();
+ 			pEdit.putBoolean("has_root",hasRoot);
+ 			pEdit.commit();
+ 		}
+ 		
+ 		if (!hasRoot)
+ 			return false;
+ 		
+    	if (activate)
+    	{
+	 		
+	 		boolean enableTransparentProxy = prefs.getBoolean("pref_transparent", false);
+	 		boolean transProxyAll = prefs.getBoolean("pref_transparent_all", false);
+	 		boolean transProxyPortFallback = prefs.getBoolean("pref_transparent_port_fallback", false);
+	 		
+	     	TorService.logMessage ("Transparent Proxying: " + enableTransparentProxy);
+	     	
+	     	String portProxyList = prefs.getString("pref_port_list", "");
+	
+	 		if (enableTransparentProxy)
+	 		{
+	 			//TODO: Find a nice place for the next (commented) line
+				//TorTransProxy.setDNSProxying(); 
+				
+				int code = 0; // Default state is "okay"
+					
+				if(transProxyPortFallback)
+				{
+					showAlert("Status", "Setting up port-based transparent proxying...");
+					StringTokenizer st = new StringTokenizer(portProxyList, ",");
+					int status = code;
+					while (st.hasMoreTokens())
+					{
+						status = TorTransProxy.setTransparentProxyingByPort(this, Integer.parseInt(st.nextToken()));
+						if(status != 0)
+							code = status;
+					}
+				}
+				else
+				{
+					if(transProxyAll)
+					{
+						showAlert("Status", "Setting up full transparent proxying...");
+						code = TorTransProxy.setTransparentProxyingAll(this);
+					}
+					else
+					{
+						showAlert("Status", "Setting up app-based transparent proxying...");
+						code = TorTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this));
+					}
+				}
+			
+				TorService.logMessage ("TorTransProxy resp code: " + code);
+				
+				if (code == 0)
+				{
+					showAlert("Status", "Transparent proxying ENABLED");
+				}
+				else
+				{
+					showAlert("Status", "WARNING: error starting transparent proxying!");
+				}
+			
+				return true;
+	 				
+	 		}
+	 		else
+	 		{
+	 			TorTransProxy.purgeIptables(this);
+				showAlert("Status", "Transparent proxying: DISABLED");
+	 		}
+    	}
+    	else
+    	{	 	
+    		TorTransProxy.purgeIptables(this);
+			showAlert("Status", "Transparent proxying: DISABLED");
+
+    	}
+    	
+ 		return true;
+ 	}
+    
+    private void runTorShellCmd() throws Exception
+    {
+    	
+    	StringBuilder log = new StringBuilder();
+		
+		String torrcPath = appBinHome + TORRC_ASSET_KEY;
+		
+		String[] torCmd = {torBinaryPath + " DataDirectory " + appDataHome + " -f " + torrcPath  + " || exit\n"};
+		
+		boolean runAsRootFalse = false;
+		boolean waitForProcess = false;
+		
+		int procId = -1;
+		int attempts = 0;
+
+		int torRetryWaitTimeMS = 5000;
+		
+		while (procId == -1 && attempts < MAX_START_TRIES)
+		{
+			log = new StringBuilder();
+			
+			logNotice(torCmd[0]);
+			sendCallbackStatusMessage(getString(R.string.status_starting_up));
+			
+			TorServiceUtils.doShellCommand(torCmd, log, runAsRootFalse, waitForProcess);
+		
+			Thread.sleep(torRetryWaitTimeMS);
+			
+			procId = TorServiceUtils.findProcessId(torBinaryPath);
+			
+			logNotice("got tor proc id: " + procId);
+			
+			if (procId == -1)
+			{
+				
+				sendCallbackStatusMessage("Couldn't start Tor process.\nretrying..." + log.toString());
+				Thread.sleep(torRetryWaitTimeMS);
+				attempts++;
+			}
+			
+			logNotice(log.toString());
+		}
+		
+		if (procId == -1)
+		{
+			throw new Exception ("Unable to start Tor");
+		}
+		else
+		{
+		
+			logNotice("Tor process id=" + procId);
+			
+			showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.tornotification);
+			
+			initControlConnection ();
+
+	        applyPreferences();
+	    }
+    }
+    
+    private void runPrivoxyShellCmd () throws Exception
+    {
+    	
+    	logNotice( "Starting privoxy process");
+    	
+			int privoxyProcId = TorServiceUtils.findProcessId(privoxyPath);
+
+			StringBuilder log = null;
+			
+			int attempts = 0;
+			
+    		if (privoxyProcId == -1)
+    		{
+    			log = new StringBuilder();
+    			
+    			String privoxyConfigPath = appBinHome + PRIVOXYCONFIG_ASSET_KEY;
+    			
+    			String[] cmds = 
+    			{ privoxyPath + " " + privoxyConfigPath + " &" };
+    			
+    			logNotice (cmds[0]); 
+    			
+    			boolean runAsRoot = false;
+    			boolean waitFor = false;
+    			
+    			TorServiceUtils.doShellCommand(cmds, log, runAsRoot, waitFor);
+    			
+    			//wait one second to make sure it has started up
+    			Thread.sleep(1000);
+    			
+    			while ((privoxyProcId = TorServiceUtils.findProcessId(privoxyPath)) == -1  && attempts < MAX_START_TRIES)
+    			{
+    				logNotice("Couldn't find Privoxy process... retrying...\n" + log);
+    				Thread.sleep(3000);
+    				attempts++;
+    			}
+    			
+    			
+    			logNotice(log.toString());
+    		}
+    		
+			sendCallbackLogMessage("Privoxy is running on port: " + PORT_HTTP);
+			
+    		logNotice("Privoxy process id=" + privoxyProcId);
+			
+    		
+    		
+    }
+    
+    /*
+	public String generateHashPassword ()
+	{
+		
+		PasswordDigest d = PasswordDigest.generateDigest();
+	      byte[] s = d.getSecret(); // pass this to authenticate
+	      String h = d.getHashedPassword(); // pass this to the Tor on startup.
+
+		return null;
+	}*/
+	
+	public void initControlConnection () throws Exception, RuntimeException
+	{
+			while (true)
+			{
+				try
+				{
+					logNotice( "Connecting to control port: " + TOR_CONTROL_PORT);
+					
+					String baseMessage = getString(R.string.tor_process_connecting);
+					sendCallbackStatusMessage(baseMessage);
+					
+					torConnSocket = new Socket(IP_LOCALHOST, TOR_CONTROL_PORT);
+			        conn = TorControlConnection.getConnection(torConnSocket);
+			        
+			      //  conn.authenticate(new byte[0]); // See section 3.2
+			        
+					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2));
+
+					logNotice( "SUCCESS connected to control port");
+			        
+			        String torAuthCookie = appDataHome + TOR_CONTROL_COOKIE;
+			        
+			        File fileCookie = new File(torAuthCookie);
+			        
+			        if (fileCookie.exists())
+			        {
+				        byte[] cookie = new byte[(int)fileCookie.length()];
+				        new FileInputStream(new File(torAuthCookie)).read(cookie);
+				        conn.authenticate(cookie);
+				        		
+				        logNotice( "SUCCESS authenticated to control port");
+				        
+						sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2) + getString(R.string.tor_process_connecting_step3));
+	
+				        addEventHandler();
+				        
+			        }
+			        
+			        break; //don't need to retry
+				}
+				catch (Exception ce)
+				{
+					conn = null;
+					Log.d(TAG,"Attempt: Error connecting to control port: " + ce.getLocalizedMessage(),ce);
+					
+					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step4));
+
+					Thread.sleep(1000);
+										
+				}	
+			}
+		
+		
+
+	}
+	
+	
+	/*
+	private void getTorStatus () throws IOException
+	{
+		try
+		{
+			 
+			if (conn != null)
+			{
+				 // get a single value.
+			      
+			       // get several values
+			       
+			       if (currentStatus == STATUS_CONNECTING)
+			       {
+				       //Map vals = conn.getInfo(Arrays.asList(new String[]{
+				         // "status/bootstrap-phase", "status","version"}));
+			
+				       String bsPhase = conn.getInfo("status/bootstrap-phase");
+				       Log.d(TAG, "bootstrap-phase: " + bsPhase);
+				       
+				       
+			       }
+			       else
+			       {
+			    	 //  String status = conn.getInfo("status/circuit-established");
+			    	 //  Log.d(TAG, "status/circuit-established=" + status);
+			       }
+			}
+		}
+		catch (Exception e)
+		{
+			Log.d(TAG, "Unable to get Tor status from control port");
+			currentStatus = STATUS_UNAVAILABLE;
+		}
+		
+	}*/
+	
+	
+	public void addEventHandler () throws IOException
+	{
+	       // We extend NullEventHandler so that we don't need to provide empty
+	       // implementations for all the events we don't care about.
+	       // ...
+		logNotice( "adding control port event handler");
+
+		conn.setEventHandler(this);
+	    
+		conn.setEvents(Arrays.asList(new String[]{
+	          "ORCONN", "CIRC", "NOTICE", "WARN", "ERR"}));
+	      // conn.setEvents(Arrays.asList(new String[]{
+	        //  "DEBUG", "INFO", "NOTICE", "WARN", "ERR"}));
+
+		logNotice( "SUCCESS added control port event handler");
+	    
+	    
+
+	}
+	
+		/**
+		 * Returns the port number that the HTTP proxy is running on
+		 */
+		public int getHTTPPort() throws RemoteException {
+			return TorServiceConstants.PORT_HTTP;
+		}
+
+		/**
+		 * Returns the port number that the SOCKS proxy is running on
+		 */
+		public int getSOCKSPort() throws RemoteException {
+			return TorServiceConstants.PORT_SOCKS;
+		}
+
+
+		
+		
+		public int getProfile() throws RemoteException {
+			//return mProfile;
+			return PROFILE_ON;
+		}
+		
+		public void setTorProfile(int profile)  {
+			logNotice("Tor profile set to " + profile);
+			
+			if (profile == PROFILE_ON)
+			{
+ 				currentStatus = STATUS_CONNECTING;
+	            sendCallbackStatusMessage ("starting...");
+
+	            Thread thread = new Thread(this);
+	            thread.start();
+	           
+			}
+			else if (profile == PROFILE_OFF)
+			{
+				currentStatus = STATUS_OFF;
+	            sendCallbackStatusMessage ("shutting down...");
+	            
+				_torInstance.stopTor();
+
+				
+			}
+		}
+
+
+
+	public void message(String severity, String msg) {
+		
+		
+		logNotice(  "[Tor Control Port] " + severity + ": " + msg);
+          
+          if (msg.indexOf(TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)!=-1)
+          {
+        	  currentStatus = STATUS_ON;
+        	
+
+   		   	getHiddenServiceHostname ();
+   		   
+          }
+          
+          
+    	  showToolbarNotification (getString(R.string.status_activated),NOTIFY_ID,R.drawable.tornotificationon);
+    		 
+          sendCallbackStatusMessage (msg);
+          
+	}
+
+	private void showAlert(String title, String msg)
+	{
+		 /*
+		 new AlertDialog.Builder(this)
+         .setTitle(title)
+         .setMessage(msg)
+         .setPositiveButton(android.R.string.ok, null)
+         .show();
+         */
+		showToolbarNotification(msg, NOTIFY_ID, R.drawable.tornotification);
+	}
+	
+	public void newDescriptors(List<String> orList) {
+		
+	}
+
+
+	public void orConnStatus(String status, String orName) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("orConnStatus (");
+			sb.append((orName) );
+			sb.append("): ");
+			sb.append(status);
+			
+			logNotice(sb.toString());
+		}
+	}
+
+
+	public void streamStatus(String status, String streamID, String target) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("StreamStatus (");
+			sb.append((streamID));
+			sb.append("): ");
+			sb.append(status);
+			
+			logNotice(sb.toString());
+		}
+	}
+
+
+	public void unrecognized(String type, String msg) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Message (");
+			sb.append(type);
+			sb.append("): ");
+			sb.append(msg);
+			
+			logNotice(sb.toString());
+		}
+		
+	}
+
+	public void bandwidthUsed(long read, long written) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Bandwidth used: ");
+			sb.append(read/1000);
+			sb.append("kb read / ");
+			sb.append(written/1000);
+			sb.append("kb written");
+			
+			logNotice(sb.toString());
+		}
+
+	}
+
+	public void circuitStatus(String status, String circID, String path) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Circuit (");
+			sb.append((circID));
+			sb.append("): ");
+			sb.append(status);
+			sb.append("; ");
+			sb.append(path);
+			
+			logNotice(sb.toString());
+		}
+		
+	}
+	
+    public IBinder onBind(Intent intent) {
+        // Select the interface to return.  If your service only implements
+        // a single interface, you can just return it here without checking
+        // the Intent.
+        
+    	_torInstance = this;
+    	
+		try
+		{
+	
+			checkTorBinaries();
+    	
+		}
+		catch (Exception e)
+		{
+			logNotice("unable to find tor binaries: " + e.getMessage());
+	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
+
+			Log.d(TAG,"Unable to check for Tor binaries",e);
+			return null;
+		}
+    	
+		findExistingProc ();
+		
+    	if (ITorService.class.getName().equals(intent.getAction())) {
+            return mBinder;
+        }
+        
+
+        return null;
+    }
+	
+    /**
+     * This is a list of callbacks that have been registered with the
+     * service.  Note that this is package scoped (instead of private) so
+     * that it can be accessed more efficiently from inner classes.
+     */
+    final RemoteCallbackList<ITorServiceCallback> mCallbacks
+            = new RemoteCallbackList<ITorServiceCallback>();
+
+
+    /**
+     * The IRemoteInterface is defined through IDL
+     */
+    private final ITorService.Stub mBinder = new ITorService.Stub() {
+    	
+       
+		public void registerCallback(ITorServiceCallback cb) {
+            if (cb != null) mCallbacks.register(cb);
+        }
+        public void unregisterCallback(ITorServiceCallback cb) {
+            if (cb != null) mCallbacks.unregister(cb);
+        }
+        public int getStatus () {
+        	return getTorStatus();
+        }
+        
+        public void setProfile (int profile)
+        {
+        	setTorProfile(profile);
+        	
+        }
+        
+        public void processSettings ()
+        {
+        	
+        	
+        	try {
+				applyPreferences();
+			} catch (RemoteException e) {
+				logException ("error applying prefs",e);
+			}
+        	
+        }
+        
+        
+        
+        public String getConfiguration (String name)
+        {
+        	try
+        	{
+	        	if (conn != null)
+	        	{
+	        		StringBuffer result = new StringBuffer();
+	        		
+	        		List<ConfigEntry> listCe = conn.getConf(name);
+	        		
+	        		Iterator<ConfigEntry> itCe = listCe.iterator();
+	        		ConfigEntry ce = null;
+	        		
+	        		while (itCe.hasNext())
+	        		{
+	        			ce = itCe.next();
+	        			
+	        			result.append(ce.key);
+	        			result.append(' ');
+	        			result.append(ce.value);
+	        			result.append('\n');
+	        		}
+	        		
+	   	       		return result.toString();
+	        	}
+        	}
+        	catch (IOException ioe)
+        	{
+        		Log.e(TAG, "Unable to update Tor configuration", ioe);
+        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
+        	}
+        	
+        	return null;
+        }
+        
+        /**
+         * Set configuration
+         **/
+        public boolean updateConfiguration (String name, String value, boolean saveToDisk)
+        {
+        	if (configBuffer == null)
+        		configBuffer = new ArrayList<String>();
+	        
+        	if (resetBuffer == null)
+        		resetBuffer = new ArrayList<String>();
+	        
+        	if (value == null || value.length() == 0)
+        	{
+        		resetBuffer.add(name);
+        		/*
+        		if (conn != null)
+        		{
+        			try {
+						conn.resetConf(Arrays.asList(new String[]{name}));
+					} catch (IOException e) {
+						Log.w(TAG, "Unable to reset conf",e);
+					}
+        		}*/
+        	}
+        	else
+        		configBuffer.add(name + ' ' + value);
+	        
+        	return false;
+        }
+         
+	    public boolean saveConfiguration ()
+	    {
+	    	try
+        	{
+	        	if (conn != null)
+	        	{
+	        		
+	        		 if (resetBuffer != null && resetBuffer.size() > 0)
+				        {	
+				        	conn.resetConf(resetBuffer);
+				        	resetBuffer = null;
+				        }
+	   	       
+	        		 if (configBuffer != null && configBuffer.size() > 0)
+				        {
+	        			 	
+				        	conn.setConf(configBuffer);
+				        	configBuffer = null;
+				        }
+	   	       
+	   	       		// Flush the configuration to disk.
+	        		//this is doing bad things right now NF 22/07/10
+	   	       		//conn.saveConf();
+	
+	   	       		return true;
+	        	}
+        	}
+        	catch (Exception ioe)
+        	{
+        		Log.e(TAG, "Unable to update Tor configuration", ioe);
+        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
+        	}
+        	
+        	return false;
+        	
+	    }
+    };
+    
+    private ArrayList<String> callbackBuffer = new ArrayList<String>();
+    private boolean inCallbackStatus = false;
+    private boolean inCallback = false;
+    
+    private synchronized void sendCallbackStatusMessage (String newStatus)
+    {
+    	 
+    	if (mCallbacks == null)
+    		return;
+    	
+        // Broadcast to all clients the new value.
+        final int N = mCallbacks.beginBroadcast();
+        
+        inCallback = true;
+        
+        if (N > 0)
+        {
+        	 for (int i=0; i<N; i++) {
+		            try {
+		                mCallbacks.getBroadcastItem(i).statusChanged(newStatus);
+		                
+		                
+		            } catch (RemoteException e) {
+		                // The RemoteCallbackList will take care of removing
+		                // the dead object for us.
+		            }
+		        }
+        }
+        
+        mCallbacks.finishBroadcast();
+        inCallback = false;
+    }
+    
+    private synchronized void sendCallbackLogMessage (String logMessage)
+    {
+    	 
+    	if (mCallbacks == null)
+    		return;
+    	
+    	callbackBuffer.add(logMessage);
+
+    	if (!inCallback)
+    	{
+
+	        inCallback = true;
+	        // Broadcast to all clients the new value.
+	        final int N = mCallbacks.beginBroadcast();
+	        
+	
+	        if (N > 0)
+	        {
+	        
+	        	Iterator<String> it = callbackBuffer.iterator();
+	        	String status = null;
+	        	
+	        	while (it.hasNext())
+	        	{
+	        		status = it.next();
+	        		
+			        for (int i=0; i<N; i++) {
+			            try {
+			                mCallbacks.getBroadcastItem(i).logMessage(status);
+			                
+			            } catch (RemoteException e) {
+			                // The RemoteCallbackList will take care of removing
+			                // the dead object for us.
+			            }
+			        }
+	        	}
+		        
+		        callbackBuffer.clear();
+	        }
+	        
+	        mCallbacks.finishBroadcast();
+	        inCallback = false;
+    	}
+    	
+    }
+    
+    private boolean applyPreferences () throws RemoteException
+    {
+    	
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		
+    	ENABLE_DEBUG_LOG = prefs.getBoolean("pref_enable_logging",false);
+    	Log.i(TAG,"debug logging:" + ENABLE_DEBUG_LOG);
+    		
+		boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
+		
+		//boolean autoUpdateBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_UPDATED, false);
+
+        boolean becomeRelay = prefs.getBoolean(TorConstants.PREF_OR, false);
+
+        boolean ReachableAddresses = prefs.getBoolean(TorConstants.PREF_REACHABLE_ADDRESSES,false);
+
+        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
+
+        boolean enableStrictExitNodes = prefs.getBoolean("pref_strict_exit_nodes", false);
+        String exitNodes = prefs.getString("pref_exit_nodes", "");
+        
+        
+		//boolean enableTransparentProxy = prefs.getBoolean(TorConstants.PREF_TRANSPARENT, false);
+		
+        if (currentStatus == STATUS_ON)
+        {
+        	//reset iptables rules in active mode
+        
+			try
+			{
+				setupTransProxy(true); 		
+			}
+			catch (Exception e)
+			{
+				logException("unable to setup transproxy",e);
+			}
+        }
+        
+        if (exitNodes.length() > 0)
+        {
+        	
+			mBinder.updateConfiguration("ExitNodes", exitNodes, false);
+			mBinder.updateConfiguration("StrictExitNodes", enableStrictExitNodes ? "1" : "0", false);
+			
+        }
+		
+		if (useBridges)
+		{
+			String bridgeList = prefs.getString(TorConstants.PREF_BRIDGES_LIST,"");
+
+			if (bridgeList == null || bridgeList.length() == 0)
+			{
+			
+				showAlert("Bridge Error","In order to use the bridge feature, you must enter at least one bridge IP address." +
+						"Send an email to bridges@xxxxxxxxxxxxxx with the line \"get bridges\" by itself in the body of the mail from a gmail account.");
+				
+			
+				return false;
+			}
+			
+			
+			mBinder.updateConfiguration("UseBridges", "1", false);
+				
+			String bridgeDelim = "\n";
+			
+			if (bridgeList.indexOf(",") != -1)
+			{
+				bridgeDelim = ",";
+			}
+			
+			StringTokenizer st = new StringTokenizer(bridgeList,bridgeDelim);
+			while (st.hasMoreTokens())
+			{
+
+				mBinder.updateConfiguration("bridge", st.nextToken(), false);
+
+			}
+			
+			mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false);
+			
+		}
+		else
+		{
+			mBinder.updateConfiguration("UseBridges", "0", false);
+
+		}
+
+        try
+        {
+            if (ReachableAddresses)
+            {
+                String ReachableAddressesPorts =
+                    prefs.getString(TorConstants.PREF_REACHABLE_ADDRESSES_PORTS, "*:80,*:443");
+                
+                mBinder.updateConfiguration("ReachableAddresses", ReachableAddressesPorts, false);
+
+            }
+            else
+            {
+                mBinder.updateConfiguration("ReachableAddresses", "", false);
+            }
+        }
+        catch (Exception e)
+        {
+           showAlert("Config Error","Your ReachableAddresses settings caused an exception!");
+           
+           return false;
+        }
+
+        try
+        {
+            if (becomeRelay && (!useBridges) && (!ReachableAddresses))
+            {
+                int ORPort =  Integer.parseInt(prefs.getString(TorConstants.PREF_OR_PORT, "9001"));
+                String nickname = prefs.getString(TorConstants.PREF_OR_NICKNAME, "Orbot");
+
+                mBinder.updateConfiguration("ORPort", ORPort + "", false);
+    			mBinder.updateConfiguration("Nickname", nickname, false);
+    			mBinder.updateConfiguration("ExitPolicy", "reject *:*", false);
+
+            }
+            else
+            {
+            	mBinder.updateConfiguration("ORPort", "", false);
+    			mBinder.updateConfiguration("Nickname", "", false);
+    			mBinder.updateConfiguration("ExitPolicy", "", false);
+            }
+        }
+        catch (Exception e)
+        {
+            showAlert("Uh-oh!","Your relay settings caused an exception!");
+          
+            return false;
+        }
+
+        if (enableHiddenServices)
+        {
+        	mBinder.updateConfiguration("HiddenServiceDir",appDataHome, false);
+        	
+        	String hsPorts = prefs.getString("pref_hs_ports","");
+        	
+        	StringTokenizer st = new StringTokenizer (hsPorts,",");
+        	String hsPortConfig = null;
+        	
+        	while (st.hasMoreTokens())
+        	{
+        		hsPortConfig = st.nextToken();
+        		
+        		if (hsPortConfig.indexOf(":")==-1) //setup the port to localhost if not specifed
+        		{
+        			hsPortConfig = hsPortConfig + " 127.0.0.1:" + hsPortConfig;
+        		}
+        		
+        		mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false);
+        	}
+        	
+        	
+        }
+        else
+        {
+        	mBinder.updateConfiguration("HiddenServiceDir","", false);
+        	
+        }
+        
+        mBinder.saveConfiguration();
+	
+        return true;
+    }
+    
+   
+   
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,434 +0,0 @@
-package org.torproject.android.service;
-
-import java.io.File;
-
-import org.torproject.android.TorifiedApp;
-
-import android.content.Context;
-import android.util.Log;
-
-public class TorTransProxy implements TorServiceConstants {
-	
-	private final static String TAG = TorServiceConstants.TAG;
-		
-
-	
-	public static int purgeIptables(Context context) throws Exception {
-		
-	String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	final StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -F || exit\n");
-	
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -F || exit\n");
-    	
-    	String[] cmd = {script.toString()};	    	
-		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
-		String msg = res.toString();
-		
-		TorService.logMessage(cmd[0] + ";errCode=" + code + ";resp=" + msg);
-			
-		
-		return code;
-	
-	}
-	
-	/*
-	public static int purgeIptablesByApp(Context context, TorifiedApp[] apps) throws Exception {
-
-		//restoreDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	final StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		for (int i = 0; i < apps.length; i++)
-		{
-			//flush nat for every app
-			script.append(ipTablesPath);
-			script.append(" -t nat -m owner --uid-owner ");
-			script.append(apps[i].getUid());
-			script.append(" -F || exit\n");
-		
-			script.append(ipTablesPath);
-			script.append(" -t filter -m owner --uid-owner ");
-			script.append(apps[i].getUid());
-			script.append(" -F || exit\n");
-				
-		}
-		
-    	
-    	String[] cmd = {script.toString()};	    	
-		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
-		String msg = res.toString();
-		logNotice(cmd[0] + ";errCode=" + code + ";resp=" + msg);
-			
-		
-		return code;
-		
-	}*/
-	
-	
-	/*
-	 // 9/19/2010 - NF This code is in process... /etc path on System partition
-	 // is read-only on Android for now.
-	public static int redirectDNSResolvConf () throws Exception
-	{
-    	StringBuilder script = new StringBuilder();
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		//mv resolv.conf to resolve.conf.bak
-		String cmd = "mv /etc/resolv.conf /etc/resolv.conf.bak";
-		script.append(cmd);
-		
-		//create new resolve.conf pointing to localhost/127.0.0.1
-		cmd = "echo \"nameserver 127.0.0.1\" > /etc/resolv.conf";
-		script.append(cmd);
-		
-		String[] cmdFlush = {script.toString()};
-		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
-		//String msg = res.toString(); //get stdout from command
-		
-		
-		return code;
-	}
-	
-	public static int restoreDNSResolvConf () throws Exception
-	{
-		StringBuilder script = new StringBuilder();
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		//mv resolv.conf to resolve.conf.bak
-		String cmd = "mv /etc/resolv.conf.bak /etc/resolv.conf";
-		script.append(cmd);
-		script.append(" || exit\n");
-		
-		String[] cmdFlush = {script.toString()};
-		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
-		//String msg = res.toString(); //get stdout from command
-		
-		return code;
-	}
-	*/
-	
-	public static int testOwnerModule(Context context) throws Exception
-	{
-
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-    	int torUid = context.getApplicationInfo().uid;
-
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	// Allow everything for Tor
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -m owner --uid-owner ");
-		script.append(torUid);
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		
-		return code;
-    }	
-	
-	
-	
-	public static int setTransparentProxyingByApp(Context context, TorifiedApp[] apps) throws Exception
-	{
-
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	purgeIptables(context);
-				
-		//build up array of shell cmds to execute under one root context
-		for (int i = 0; i < apps.length; i++)
-		{
-
-			if (apps[i].isTorified()) //if app is set to true
-			{
-				
-				if (apps[i].getUsername().equals(TorServiceConstants.TOR_APP_USERNAME))
-				{
-					//should never trans proxy the Orbot app (and Tor or Privoxy) itself
-					continue;
-				}
-				
-				TorService.logMessage("enabling transproxy for app: " + apps[i].getUsername() + "(" + apps[i].getUid() + ")");
-			 
-				//TCP
-				script.append(ipTablesPath);
-				script.append(" -t nat");
-				script.append(" -A OUTPUT -p tcp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m tcp --syn");
-				script.append(" -j REDIRECT --to-ports ");
-				script.append(TOR_TRANSPROXY_PORT);
-				script.append(" || exit\n");
-				
-				//DNS
-				script.append(ipTablesPath);
-				script.append(" -t nat");
-				script.append(" -A OUTPUT -p udp -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m udp --dport "); 
-				script.append(STANDARD_DNS_PORT);
-				script.append(" -j REDIRECT --to-ports ");
-				script.append(TOR_DNS_PORT);
-				script.append(" || exit\n");
-				
-				script.append(ipTablesPath);
-				script.append(" -t filter");
-				script.append(" -A OUTPUT -p tcp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m tcp --dport ");
-				script.append(TOR_TRANSPROXY_PORT);
-				script.append(" -j ACCEPT");
-				script.append(" || exit\n");
-				
-				script.append(ipTablesPath);
-				script.append(" -t filter");
-				script.append(" -A OUTPUT -p udp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m udp --dport ");
-				script.append(TOR_DNS_PORT);
-				script.append(" -j ACCEPT");
-				script.append(" || exit\n");
-									
-				script.append(ipTablesPath);
-				script.append(" -t filter -A OUTPUT -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -j DROP"); //drop all other packets as Tor won't handle them
-				script.append(" || exit\n");
-				
-				
-			}		
-		}
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		
-		return code;
-    }	
-	
-	public static int setTransparentProxyingByPort(Context context, int port) throws Exception
-	{
-
-		//android.os.Debug.waitForDebugger();
-		
-		//redirectDNSResolvConf(); //not working yet
-		
-		//String baseDir = context.getDir("bin",0).getAbsolutePath() + '/';
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	purgeIptables(context);
-		
-		//TCP
-		//iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $srcPortNumber -j REDIRECT --to-port $dstPortNumbe
-
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p tcp");
-		script.append(" --dport ");
-		script.append(port);
-		//script.append(" -m tcp --syn");
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp");
-		script.append(" --dport ");
-		script.append(port);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		//DNS
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp ");
-		script.append(" -m udp --dport "); 
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_DNS_PORT);
-		script.append(" || exit\n");
-		
-    	
-    	String[] cmdAdd = {script.toString()};    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		return code;
-    }
-
-	public static int setTransparentProxyingAll(Context context) throws Exception 
-	{
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	purgeIptables(context);
-    	
-    	int torUid = context.getApplicationInfo().uid;
-
-    	// Set up port redirection
-    	script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p tcp");
-		script.append(" -m owner ! --uid-owner ");
-		script.append(torUid);
-		script.append(" -m tcp --syn");
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		// Same for DNS
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp -m owner ! --uid-owner ");
-		script.append(torUid);
-		script.append(" -m udp --dport "); 
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_DNS_PORT);
-		script.append(" || exit\n");
-		
-		// Allow packets to localhost (contains all the port-redirected ones)
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -d 127.0.0.1");
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		// Allow loopback
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -o lo");
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		// Allow everything for Tor
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -m owner --uid-owner ");
-		script.append(torUid);
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		if (TorService.ENABLE_DEBUG_LOG)
-		{
-			//XXX: Comment the following rules for non-debug builds
-			script.append(ipTablesPath);
-			script.append(" -t filter");
-			script.append(" -A OUTPUT");
-			script.append(" -p udp");
-			script.append(" --dport ");
-			script.append(STANDARD_DNS_PORT);
-			script.append(" -j LOG");
-			script.append(" --log-prefix='ORBOT_DNSLEAK_PROTECTION'");
-			script.append(" --log-uid");
-			script.append(" || exit\n");
-			script.append(ipTablesPath);
-			script.append(" -t filter");
-			script.append(" -A OUTPUT");
-			script.append(" -p tcp");
-			script.append(" -j LOG");
-			script.append(" --log-prefix='ORBOT_TCPLEAK_PROTECTION'");
-			script.append(" --log-uid");
-			script.append(" || exit\n");
-		}
-		
-		// Reject DNS that is not from Tor (order is important - first matched rule counts!)
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p udp");
-		script.append(" --dport ");
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REJECT");
-		script.append(" || exit\n");
-		
-		// Reject all other outbound TCP packets
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -j REJECT");
-		script.append(" || exit\n");
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-    	return code;
-	}	
-	
-
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java (from rev 24753, projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,483 @@
+package org.torproject.android.service;
+
+import java.io.File;
+
+import org.torproject.android.TorifiedApp;
+
+import android.content.Context;
+import android.util.Log;
+
+public class TorTransProxy implements TorServiceConstants {
+	
+	private final static String TAG = TorServiceConstants.TAG;
+		
+
+	
+	public static int purgeIptables(Context context) throws Exception {
+		
+	String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	final StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -F || exit\n");
+	
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -F || exit\n");
+    	
+    	String[] cmd = {script.toString()};	    	
+		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
+		String msg = res.toString();
+		
+		TorService.logMessage(cmd[0] + ";errCode=" + code + ";resp=" + msg);
+			
+		
+		return code;
+	
+	}
+	
+	/*
+	public static int purgeIptablesByApp(Context context, TorifiedApp[] apps) throws Exception {
+
+		//restoreDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	final StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		for (int i = 0; i < apps.length; i++)
+		{
+			//flush nat for every app
+			script.append(ipTablesPath);
+			script.append(" -t nat -m owner --uid-owner ");
+			script.append(apps[i].getUid());
+			script.append(" -F || exit\n");
+		
+			script.append(ipTablesPath);
+			script.append(" -t filter -m owner --uid-owner ");
+			script.append(apps[i].getUid());
+			script.append(" -F || exit\n");
+				
+		}
+		
+    	
+    	String[] cmd = {script.toString()};	    	
+		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
+		String msg = res.toString();
+		logNotice(cmd[0] + ";errCode=" + code + ";resp=" + msg);
+			
+		
+		return code;
+		
+	}*/
+	
+	
+	/*
+	 // 9/19/2010 - NF This code is in process... /etc path on System partition
+	 // is read-only on Android for now.
+	public static int redirectDNSResolvConf () throws Exception
+	{
+    	StringBuilder script = new StringBuilder();
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		//mv resolv.conf to resolve.conf.bak
+		String cmd = "mv /etc/resolv.conf /etc/resolv.conf.bak";
+		script.append(cmd);
+		
+		//create new resolve.conf pointing to localhost/127.0.0.1
+		cmd = "echo \"nameserver 127.0.0.1\" > /etc/resolv.conf";
+		script.append(cmd);
+		
+		String[] cmdFlush = {script.toString()};
+		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
+		//String msg = res.toString(); //get stdout from command
+		
+		
+		return code;
+	}
+	
+	public static int restoreDNSResolvConf () throws Exception
+	{
+		StringBuilder script = new StringBuilder();
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		//mv resolv.conf to resolve.conf.bak
+		String cmd = "mv /etc/resolv.conf.bak /etc/resolv.conf";
+		script.append(cmd);
+		script.append(" || exit\n");
+		
+		String[] cmdFlush = {script.toString()};
+		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
+		//String msg = res.toString(); //get stdout from command
+		
+		return code;
+	}
+	*/
+	
+	public static int testOwnerModule(Context context) throws Exception
+	{
+
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+    	int torUid = context.getApplicationInfo().uid;
+
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	// Allow everything for Tor
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -m owner --uid-owner ");
+		script.append(torUid);
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+    }	
+	
+	
+	
+	public static int setTransparentProxyingByApp(Context context, TorifiedApp[] apps) throws Exception
+	{
+
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	purgeIptables(context);
+				
+		//build up array of shell cmds to execute under one root context
+		for (int i = 0; i < apps.length; i++)
+		{
+
+			if (apps[i].isTorified()) //if app is set to true
+			{
+				
+				if (apps[i].getUsername().equals(TorServiceConstants.TOR_APP_USERNAME))
+				{
+					//should never trans proxy the Orbot app (and Tor or Privoxy) itself
+					continue;
+				}
+				
+				TorService.logMessage("enabling transproxy for app: " + apps[i].getUsername() + "(" + apps[i].getUid() + ")");
+			 
+				//TCP
+				script.append(ipTablesPath);
+				script.append(" -t nat");
+				script.append(" -A OUTPUT -p tcp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m tcp --syn");
+				script.append(" -j REDIRECT --to-ports ");
+				script.append(TOR_TRANSPROXY_PORT);
+				script.append(" || exit\n");
+				
+				//DNS
+				script.append(ipTablesPath);
+				script.append(" -t nat");
+				script.append(" -A OUTPUT -p udp -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m udp --dport "); 
+				script.append(STANDARD_DNS_PORT);
+				script.append(" -j REDIRECT --to-ports ");
+				script.append(TOR_DNS_PORT);
+				script.append(" || exit\n");
+				
+				script.append(ipTablesPath);
+				script.append(" -t filter");
+				script.append(" -A OUTPUT -p tcp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m tcp --dport ");
+				script.append(TOR_TRANSPROXY_PORT);
+				script.append(" -j ACCEPT");
+				script.append(" || exit\n");
+				
+				script.append(ipTablesPath);
+				script.append(" -t filter");
+				script.append(" -A OUTPUT -p udp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m udp --dport ");
+				script.append(TOR_DNS_PORT);
+				script.append(" -j ACCEPT");
+				script.append(" || exit\n");
+									
+				script.append(ipTablesPath);
+				script.append(" -t filter -A OUTPUT -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -j DROP"); //drop all other packets as Tor won't handle them
+				script.append(" || exit\n");
+				
+				
+			}		
+		}
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+    }	
+	
+	public static int setTransparentProxyingByPort(Context context, int port) throws Exception
+	{
+
+		//android.os.Debug.waitForDebugger();
+		
+		//redirectDNSResolvConf(); //not working yet
+		
+		//String baseDir = context.getDir("bin",0).getAbsolutePath() + '/';
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	purgeIptables(context);
+		
+		//TCP
+		//iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $srcPortNumber -j REDIRECT --to-port $dstPortNumbe
+
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p tcp");
+		script.append(" --dport ");
+		script.append(port);
+		//script.append(" -m tcp --syn");
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp");
+		script.append(" --dport ");
+		script.append(port);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		//DNS
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp ");
+		script.append(" -m udp --dport "); 
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_DNS_PORT);
+		script.append(" || exit\n");
+		
+    	
+    	String[] cmdAdd = {script.toString()};    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		return code;
+    }
+
+	public static int enableWifiHotspotRules (Context context) throws Exception
+	{
+		
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    
+    	script.append(ipTablesPath);
+		script.append(" -I FORWARD");
+		script.append(" -m state --state ESTABLISHED,RELATED -j ACCEPT");
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -I FORWARD");
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		/*
+		script.append(ipTablesPath);
+		script.append(" -P FORWARD DROP");
+		script.append(" || exit\n");
+		*/
+		
+		script.append(ipTablesPath);
+		script.append(" -t nat -I POSTROUTING -j MASQUERADE");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+	}
+	
+	public static int setTransparentProxyingAll(Context context) throws Exception 
+	{
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	purgeIptables(context);
+    	
+    	enableWifiHotspotRules(context);
+		
+    	int torUid = context.getApplicationInfo().uid;
+
+    	// Set up port redirection
+    	script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p tcp");
+		script.append(" -m owner ! --uid-owner ");
+		script.append(torUid);
+		script.append(" -m tcp --syn");
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		// Same for DNS
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp -m owner ! --uid-owner ");
+		script.append(torUid);
+		script.append(" -m udp --dport "); 
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_DNS_PORT);
+		script.append(" || exit\n");
+		
+		// Allow packets to localhost (contains all the port-redirected ones)
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -d 127.0.0.1");
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		// Allow loopback
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -o lo");
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		// Allow everything for Tor
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -m owner --uid-owner ");
+		script.append(torUid);
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		if (TorService.ENABLE_DEBUG_LOG)
+		{
+			//XXX: Comment the following rules for non-debug builds
+			script.append(ipTablesPath);
+			script.append(" -t filter");
+			script.append(" -A OUTPUT");
+			script.append(" -p udp");
+			script.append(" --dport ");
+			script.append(STANDARD_DNS_PORT);
+			script.append(" -j LOG");
+			script.append(" --log-prefix='ORBOT_DNSLEAK_PROTECTION'");
+			script.append(" --log-uid");
+			script.append(" || exit\n");
+			script.append(ipTablesPath);
+			script.append(" -t filter");
+			script.append(" -A OUTPUT");
+			script.append(" -p tcp");
+			script.append(" -j LOG");
+			script.append(" --log-prefix='ORBOT_TCPLEAK_PROTECTION'");
+			script.append(" --log-uid");
+			script.append(" || exit\n");
+		}
+		
+		// Reject DNS that is not from Tor (order is important - first matched rule counts!)
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p udp");
+		script.append(" --dport ");
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REJECT");
+		script.append(" || exit\n");
+		
+		// Reject all other outbound TCP packets
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -j REJECT");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+    	
+    	
+    	return code;
+	}	
+	
+
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS
===================================================================
--- projects/android/trunk/Orbot/AUTHORS	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,33 +0,0 @@
-This file lists the authors for Orbot, a free software project to provide
-anonymity on the Internet on Android smartphones.
-
-For more information about Orbot, see https://guardianproject.info/apps/orbot
-
-If you got this file as a part of a larger bundle, there are probably
-other authors that you should be aware of.
-
-Main Authors:
--------------
-Nathan Freitas <nathan@xxxxxxxxxxx> developed the primary Android
-application and managed the porting of Tor to Android.
-
-Jake Appelbaum <jacob@xxxxxxxxxxxxx> regularly gave Nathan a swift kick
-in the rear to get this done. He has also provided extensive guidance
-and review. Most recently he has been promoted to Chief Application
-Resource Editor.
-
-Derek Halliday <derek@xxxxxxxxxxxxxxxxxxxx> has designed and implemented
-new user interface components and layouts since the 1.0.4 release. 
-
-Contributors:
--------------
-Nick Mathewson <nickm@xxxxxxxxxxxxx> wrote some of the patch code to
-support the compiling of Tor and Libevent on Android, and generally
-provided guidance in the entire effort.
-
-Adam Langley made the original valiant effort to port Tor to Android.
-
-Sathyanarayanan <gsathya.ceg@xxxxxxxxx> created a patch for the wizard
-which updated the icon and link for the secure chat app info to point
-to Gibberbot, and hopefully will continue to contribute useful patches.
- 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS (from rev 24719, projects/android/trunk/Orbot/AUTHORS)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,38 @@
+This file lists the authors for Orbot, a free software project to provide
+anonymity on the Internet on Android smartphones.
+
+For more information about Orbot, see https://guardianproject.info/apps/orbot
+
+If you got this file as a part of a larger bundle, there are probably
+other authors that you should be aware of.
+
+Main Authors:
+-------------
+Nathan Freitas <nathan@xxxxxxxxxxx> developed the primary Android
+application and managed the porting of Tor to Android.
+
+Jake Appelbaum <jacob@xxxxxxxxxxxxx> regularly gave Nathan a swift kick
+in the rear to get this done. He has also provided extensive guidance
+and review. Most recently he has been promoted to Chief Application
+Resource Editor.
+
+Derek Halliday <derek@xxxxxxxxxxxxxxxxxxxx> has designed and implemented
+new user interface components and layouts since the 1.0.4 release. 
+
+Contributors:
+-------------
+Nick Mathewson <nickm@xxxxxxxxxxxxx> wrote some of the patch code to
+support the compiling of Tor and Libevent on Android, and generally
+provided guidance in the entire effort.
+
+Adam Langley made the original valiant effort to port Tor to Android.
+
+Sathyanarayanan <gsathya.ceg@xxxxxxxxx> created a patch for the wizard
+which updated the icon and link for the secure chat app info to point
+to Gibberbot, and hopefully will continue to contribute useful patches.
+
+__sporkbomb <manuel@xxxxxxxxxxxxxxxx> implemented an updated set of logic
+in TorTransProxy for handling the "transproxy all" mode of operation. Before
+certain system processes were leaking traffic, and this was also detected
+by his excellent auditing.
+ 

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android";
-      package="org.torproject.android" android:versionName="0.2.2.22-orbot-alpha-1.0.5.20110503a-dev" android:versionCode="11">
-       
-       <uses-permission android:name="android.permission.INTERNET" />
- 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- 
-    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
-      
-        <activity android:name=".Orbot"
-                  android:theme="@android:style/Theme.NoTitleBar">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-          </intent-filter>
-            <intent-filter>
-            <action android:name="android.intent.action.VIEW" />
-            <category android:name="android.intent.category.DEFAULT" />
-            <category android:name="android.intent.category.BROWSABLE" />
-        </intent-filter>
-        
-         <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
-            </intent-filter>
-             <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.START_TOR" />
-            </intent-filter>
-        </activity>
-      
-        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
-        <activity android:name=".AppManager"  android:label="@string/app_name"/>
-        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
-      
-    	<service android:enabled="true"
-    		android:name=".service.TorService" 
-    		android:exported="false"
-    		>
-	            <intent-filter>
-	                <action android:name="org.torproject.android.service.ITorService" />
-	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
-            </intent-filter>
-    	</service>
-    	
-    	
-    	<receiver android:name=".OnBootReceiver">
-			<intent-filter>
-			<action
-			android:name="android.intent.action.BOOT_COMPLETED" />
-			<category android:name="android.intent.category.HOME" />
-			</intent-filter>
-		</receiver>
-    	
-    </application>
-    
-    <uses-sdk android:minSdkVersion="4"/>
-
-
-
-</manifest> 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml (from rev 24737, projects/android/trunk/Orbot/AndroidManifest.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android";
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5" android:versionCode="11">
+       
+       <uses-permission android:name="android.permission.INTERNET" />
+ 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+ 
+    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
+      
+        <activity android:name=".Orbot"
+                  android:theme="@android:style/Theme.NoTitleBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+          </intent-filter>
+            <intent-filter>
+            <action android:name="android.intent.action.VIEW" />
+            <category android:name="android.intent.category.DEFAULT" />
+            <category android:name="android.intent.category.BROWSABLE" />
+        </intent-filter>
+        
+         <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
+            </intent-filter>
+             <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.START_TOR" />
+            </intent-filter>
+        </activity>
+      
+        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
+        <activity android:name=".AppManager"  android:label="@string/app_name"/>
+        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
+      
+    	<service android:enabled="true"
+    		android:name=".service.TorService" 
+    		android:exported="false"
+    		>
+	            <intent-filter>
+	                <action android:name="org.torproject.android.service.ITorService" />
+	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
+            </intent-filter>
+    	</service>
+    	
+    	
+    	<receiver android:name=".OnBootReceiver">
+			<intent-filter>
+				<action	android:name="android.intent.action.BOOT_COMPLETED" />
+				<category android:name="android.intent.category.HOME" />
+			</intent-filter>
+		</receiver>
+    	
+    </application>
+    
+    <uses-sdk android:minSdkVersion="4"/>
+
+
+
+</manifest> 

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.debug
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml.debug	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.debug	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android";
-      package="org.torproject.android" android:versionName="1.0.4" android:versionCode="10">
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5.20110503a-dev-debug" android:versionCode="10">
        
        <uses-permission android:name="android.permission.INTERNET" />
 

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.production
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml.production	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.production	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android";
-      package="org.torproject.android" android:versionName="0.2.2.22-orbot-alpha-1.0.5.20110416a-dev" android:versionCode="11">
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5.20110503a" android:versionCode="11">
        
        <uses-permission android:name="android.permission.INTERNET" />
  		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD
===================================================================
--- projects/android/trunk/Orbot/BUILD	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,163 +0,0 @@
-
-// 2011/04/15 this document is a bit out of date. We will be updating to use
-// the standalone cross-compiler that is offered by the Android NDK soon
-
-This document explains how to properly build an Android package of Orbot from
-source. It covers building on Debian Lenny (5.0.3).
-
-Please install the following prerequisites (instructions for each follows):
-	ant: http://ant.apache.org/
-	Android OS SDK: http://source.android.com/download
-	droid-wrapper: http://github.com/tmurakam/droid-wrapper
-	libevent source (1.4.12-stable from svn)
-	Tor source (most recent git master branch)
-	Privoxy source (http://sourceforge.net/projects/ijbswa/)
-
-Install and prepare the Android OS SDK ( http://source.android.com/download )
-on Debian Lenny:
-
-	sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf \
-		libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip \
-		curl libncurses5-dev zlib1g-dev valgrind libtool automake \
-		ruby subversion
-	update-java-alternatives -s java-1.5.0-sun
-
-	curl http://android.git.kernel.org/repo >~/bin/repo
-	chmod a+x ~/bin/repo
-
-	mkdir ~/mydroid
-	cd ~/mydroid
-
-	repo init -u git://android.git.kernel.org/platform/manifest.git
-	repo sync
-
-	# Paste in key from http://source.android.com/download next...
-	gpg --import
-
-	cd ~/mydroid
-
-	# This takes a long while...
-	make
-
-Install droid-wrapper:
-
-	cd /tmp
-	git clone git://github.com/tmurakam/droid-wrapper.git
-	cd droid-wrapper
-	sudo make install
-
-zlib and OpenSSL are included with the Android OS SDK. You'll need to build
-libevent, Privoxy and finally Tor. We'll create an externals directory for this code:
-
-	mkdir -p ~/mydroid/external/{libevent,tor,privoxy}
-
-We need to set to environment variables for droid-gcc:
-	export DROID_ROOT=~/mydroid/
-	export DROID_TARGET=generic
-
-Fetch and build Privoxy:
-	cd ~/mydroid/external/privoxy
-	wget http://sourceforge.net/projects/ijbswa/files/Sources/3.0.12%20%28stable%29/privoxy-3.0.12-stable-src.tar.gz/download
-	tar xzvf privoxy-3.0.12-stable-src.tar.gz
-	cd privoxy-3.0.12-stable
-	autoheader
-	autoconf
-	#need to disable setpgrp check in configure
-	export ac_cv_func_setpgrp_void=yes
-	#replace FOO with your actual username
-	CC=droid-gcc LD=droid-ld CPPFLAGS="-I/home/FOO/mydroid/external/zlib/" ./configure --host=arm-none-linux-gnueabi
-	#don't mind the "unrecognized option '-pthread'" error message that you'll see when you run make
-	make
-	
-Fetch and build libevent:
-
-	cd ~/mydroid/external/libevent
-	svn co https://levent.svn.sourceforge.net/svnroot/levent/tags/release-1.4.12-stable/libevent/ .
-	export LIBEVENTDIR=`pwd`
-	./autogen.sh
-	# Put the contents of http://pastebin.ca/1577207 in /tmp/libevent-patch
-	patch < /tmp/libevent-patch
-	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi
-	make
-
-Copy over the libevent library:
-	cp .libs/libevent.a ~/mydroid/out/target/product/generic/obj/lib
-
-Fetch and build Tor:
-
-	export OPENSSLDIR=`cd ~/mydroid/external/openssl/include/ && pwd`
-	export ZLIBDIR=`cd ~/mydroid/external/zlib && pwd`
-
-	cd ~/mydroid/external/tor
-	git clone git://git.torproject.org/git/tor.git
-	cd tor/
-	./autogen.sh
-	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi \
-	--with-libevent-dir=$LIBEVENTDIR --with-openssl-dir=$OPENSSLDIR \
-	--with-zlib-dir=$ZLIBDIR --disable-asciidoc
-	make
-
-At this point, you'll have a Tor binary that can be run on an Android handset.
-This isn't enough though and we'll now sew up the binary into a small package
-that will handle basic Tor controlling features.
-
-We need to build our Java SOCKS library:
-
-	# If you're in Orbot's directory already...
-	cd ../asocks/
-	ant compile
-	ant jar
-	cp bin/jar/asocks.jar ../Orbot/libs
-
-We need to get the TorControl library for Java:
-(see also https://svn.torproject.org/svn/torctl/trunk/doc/howto.txt)
-
-	git clone git://git.torproject.org/git/jtorctl
-	cd jtorctl
-	mkdir bin
-	javac net/freehaven/tor/control/TorControlConnection.java -d bin
-	cd bin
-	jar cvf jtorctrl.jar *
-	cp jtorctrl.jar {Orbot Home}/libs
-	
-Finally, we'll make a proper Android package with ant and the Android App SDK:
-
-	export APP_SDK=~/Documents/projects/android/android-sdk-linux_x86-1.5_r3/tools
-	cd ../Orbot/
-	cp ~/mydroid/external/privoxy/privoxy-3.0.12-stable/privoxy assets/privoxy
-	cp ~/mydroid/external/tor/tor/src/or/tor assets/tor
-	$APP_SDK/android update project --name Orbot --target 3 --path .
-	ant release
-
-This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk!
-
-To produce a usable package, you'll need to sign the .apk. The basics on
-signing can be found on the Android developer site:
-
-	http://developer.android.com/guide/publishing/app-signing.html
-
-The three steps are quite simple. First, you'll generate a key. Secondly,
-you'll sign the application. Thirdly, you'll verify the the apk.
-
-Generating a signing key:
-
-	keytool -genkey -v -keystore my-release-key.keystore \
-		-alias orbots_key -keyalg RSA -validity 10000
-
-Sign the apk:
-
-	jarsigner -verbose -keystore my-release-key.keystore \
-		bin/Orbot-unsigned.apk orbots_key
-
-Verify the signature for the apk:
-
-	jarsigner -verify bin/Orbot-unsigned.apk
-	mv bin/Orbot-unsigned.apk bin/Orbot-signed-alpha.apk
-
-You can also GPG sign the apk and generate an .asc:
-
-	gpg -ab Orbot-signed-alpha.apk
-
-Now you should have a fully signed and production ready alpha release of Orbot!
-Give bin/Orbot-signed-alpha.apk an install and send us bug reports!
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD (from rev 24737, projects/android/trunk/Orbot/BUILD)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,162 @@
+
+// 2011/04/15 this document is a bit out of date. We will be updating to use
+// the standalone cross-compiler that is offered by the Android NDK soon
+
+This document explains how to properly build an Android package of Orbot from
+source. It covers building on Debian Lenny (5.0.3).
+
+Please install the following prerequisites (instructions for each follows):
+	ant: http://ant.apache.org/
+	Android OS SDK: http://source.android.com/download
+	droid-wrapper: http://github.com/tmurakam/droid-wrapper
+	libevent source (1.4.12-stable from svn)
+	Tor source (most recent git master branch)
+	Privoxy source (http://sourceforge.net/projects/ijbswa/)
+
+Install and prepare the Android OS SDK ( http://source.android.com/download )
+on Debian Lenny:
+
+	sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf \
+		libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip \
+		curl libncurses5-dev zlib1g-dev valgrind libtool automake \
+		ruby subversion
+	update-java-alternatives -s java-1.5.0-sun
+
+	curl http://android.git.kernel.org/repo >~/bin/repo
+	chmod a+x ~/bin/repo
+
+	mkdir ~/mydroid
+	cd ~/mydroid
+
+	repo init -u git://android.git.kernel.org/platform/manifest.git
+	repo sync
+
+	# Paste in key from http://source.android.com/download next...
+	gpg --import
+
+	cd ~/mydroid
+
+	# This takes a long while...
+	make
+
+Install droid-wrapper:
+
+	cd /tmp
+	git clone git://github.com/tmurakam/droid-wrapper.git
+	cd droid-wrapper
+	sudo make install
+
+zlib and OpenSSL are included with the Android OS SDK. You'll need to build
+libevent, Privoxy and finally Tor. We'll create an externals directory for this code:
+
+	mkdir -p ~/mydroid/external/{libevent,tor,privoxy}
+
+We need to set to environment variables for droid-gcc:
+	export DROID_ROOT=~/mydroid/
+	export DROID_TARGET=generic
+
+Fetch and build Privoxy:
+	cd ~/mydroid/external/privoxy
+	wget http://sourceforge.net/projects/ijbswa/files/Sources/3.0.12%20%28stable%29/privoxy-3.0.12-stable-src.tar.gz/download
+	tar xzvf privoxy-3.0.12-stable-src.tar.gz
+	cd privoxy-3.0.12-stable
+	autoheader
+	autoconf
+	#need to disable setpgrp check in configure
+	export ac_cv_func_setpgrp_void=yes
+	#replace FOO with your actual username
+	CC=droid-gcc LD=droid-ld CPPFLAGS="-I/home/FOO/mydroid/external/zlib/" ./configure --host=arm-none-linux-gnueabi
+	#don't mind the "unrecognized option '-pthread'" error message that you'll see when you run make
+	make
+	
+Fetch and build libevent:
+
+	cd ~/mydroid/external/libevent
+	svn co https://levent.svn.sourceforge.net/svnroot/levent/tags/release-1.4.12-stable/libevent/ .
+	export LIBEVENTDIR=`cd $DROID_ROOT/external/libevent && pwd`
+	./autogen.sh
+	# Put the contents of http://pastebin.ca/1577207 in /tmp/libevent-patch
+	patch < /tmp/libevent-patch
+	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi
+	make
+
+Copy over the libevent library:
+	cp .libs/libevent.a $DROID_ROOT/out/target/product/generic/obj/lib
+
+Fetch and build Tor:
+
+	export OPENSSLDIR=`cd $DROID_ROOT/external/openssl/include/ && pwd`
+	export ZLIBDIR=`cd $DROID_ROOT/external/zlib && pwd`
+
+	cd $DROID_ROOT/external/tor
+	git clone git://git.torproject.org/git/tor.git
+	cd tor/
+	./autogen.sh
+	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi \
+	--with-libevent-dir=$LIBEVENTDIR --with-openssl-dir=$OPENSSLDIR \
+	--with-zlib-dir=$ZLIBDIR --disable-asciidoc
+	make
+
+At this point, you'll have a Tor binary that can be run on an Android handset.
+You can verify the ARM binary was properly built using the following command:
+
+file src/or/tor
+	
+You should see something like:
+src/or/tor: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
+
+This isn't enough though and we'll now sew up the binary into a small package
+that will handle basic Tor controlling features.
+
+We need to get the TorControl library for Java:
+(see also https://svn.torproject.org/svn/torctl/trunk/doc/howto.txt)
+
+	git clone git://git.torproject.org/git/jtorctl
+	cd jtorctl
+	mkdir bin
+	javac net/freehaven/tor/control/TorControlConnection.java -d bin
+	cd bin
+	jar cvf jtorctrl.jar *
+	cp jtorctrl.jar {Orbot Home}/libs
+	
+Finally, we'll make a proper Android package with ant and the Android App SDK:
+
+	export APP_SDK=~/Documents/projects/android/android-sdk-linux_x86-1.5_r3/tools
+	cd ../Orbot/
+	cp $DROID_ROOT/external/privoxy/privoxy-3.0.12-stable/privoxy assets/privoxy
+	cp $DROID_ROOT/external/tor/tor/src/or/tor assets/tor
+	$APP_SDK/android update project --name Orbot --target 3 --path .
+	ant release
+
+This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk!
+
+To produce a usable package, you'll need to sign the .apk. The basics on
+signing can be found on the Android developer site:
+
+	http://developer.android.com/guide/publishing/app-signing.html
+
+The three steps are quite simple. First, you'll generate a key. Secondly,
+you'll sign the application. Thirdly, you'll verify the the apk.
+
+Generating a signing key:
+
+	keytool -genkey -v -keystore my-release-key.keystore \
+		-alias orbots_key -keyalg RSA -validity 10000
+
+Sign the apk:
+
+	jarsigner -verbose -keystore my-release-key.keystore \
+		bin/Orbot-unsigned.apk orbots_key
+
+Verify the signature for the apk:
+
+	jarsigner -verify bin/Orbot-unsigned.apk
+	mv bin/Orbot-unsigned.apk bin/Orbot-signed-alpha.apk
+
+You can also GPG sign the apk and generate an .asc:
+
+	gpg -ab Orbot-signed-alpha.apk
+
+Now you should have a fully signed and production ready alpha release of Orbot!
+Give bin/Orbot-signed-alpha.apk an install and send us bug reports!
+

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG
===================================================================
--- projects/android/trunk/Orbot/CHANGELOG	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,105 +0,0 @@
-NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
-
-1.0.5
-- Added new toolbar notifications and alerts for displaying notifications and Tor messages
-- Removed unused Socks client code from android.net package
-- Updated wizard to show link to Gibberbot (formerly OTRchat) chat app
-- Bundled iptables 1.4.7 for ARM instead of relying on installed version
-- Fixed various issues related to iptables, transproxying for CyanogenMod7/Android 2.3.*
-- Changed how settings changed are processed through the control port (batched instead of one by one)
-- Stopped app by app flushing of iptables rules, in favor of complete flush of 'nat' and 'filter' type
-- removed useless log screen (logs can be viewed/retrieved using 'alogcat' 3rd party app)
-
-1.0.4
-- Added Russian, Persian, Arabic and other .po translations (see res/values-* folders)
-- Fixed incorrect try to clear iptables rules for non-root devices
-- Fixed bug that stopped wizard helper from showing first time
-- Added new green notification icon when Tor is connected
-- Fixed app selector layout in settings
-- Moved minSDK to 4 (Android 1.6); discontinued 1.5 support
-- Fixed log screen touch disable tor bug
-- Debugged issues around network status change causing FC/crash
-- Added "Start on Boot" option
-
-1.0.3
-- Fixed spanish language issues with settings screen
-- Cleaned up logging, and moved most of it to debug output only
-- Small changes to iptables, transproxy settings to handle iptables 1.3 and 1.4 variations
-- Added compile time variable/flag for turning on/off detailed control port output to Android stdout
-- Hidden services now support through option in settings
-- removed double apostrophes from value/strings.xml files
-
-1.0.2
-- Added "check" yes/no dialog prompt
-- Debugged iptables/transprox settings on Android 1.6 and 2.2
-- Added proxy settings help screen and fixed processSettings() NPE
-
-1.0.1
-- Found and fixed major bug in per-app trans proxying; list of apps was being cached and iptables rules were not properly updated as the user changed the selection in the list
- 
-1.0.0 - 2010-08-10
-- Added "Proxy Settings" help screen
-- Handle potential null pointers on process settings where service not yet active 
-
-0.0.9x - 2010-08-03
-- Revised Orbot install wizard
-- Integrated Tor 0.2.2.14 and iptables 4.x binary
-- Fixed "got root" detection method 
-- Fixed Per App Torification handling so it updates on exit from Settings screen
-
-0.0.8x - 2010-07-15
-- Updated Settings & App configuration screens
-- Changed progress dialog display
-- Significant application re-arch
-- Fixed force stop crash on install
-- Integrated Tor 0.2.2.13-alpha-dev binary
-- Fixed su shell cmd error handling & root perms issue
-- #1570: Added new setup wizard on install to clarify root / non-root capabilities 
-- #1716: Per-app traffic routing prefs not persisted
-- #1509: Help window is too big for the screen on android 1.6
-- #1513: Orbot can't be told to exit <-- added 'Exit' menu option
-- #1530: Capture sh cmd stout for debugging errors <-- updated debug log screen
-- #1531: Don't loop ad infinitum in Orbot fails <-- only retries 3 times now
-- #1272: Orbot should store Tor files in the cache
-- #1273: Info should mention anonymity problems with ProxySurf
-
-0.0.5x
-- #1388: Error parsing PID from output of "ps"
-- #1277, #1278: Enabling bridges issues
-- #1279: Misleading message when initialization is finished
-- #1292: Tor version in About screen is wrong
-
-0.0.3x - 2010-03-15
-- Added Start/Stop menu item for non-touch activation
-- Improved parsing and validation of settings screen
-- UI now compatible with landscape mode (#1276)
-- Added relay support for static/publicly accessible IP devices
-
-0.0.3a - 2010-02-07
-- Integrated iptables support for transparent proxying of outbound port
-  80 and DNS
-- Privoxy is now used as HTTP Proxy server (cross-compiled to ARM)
-- New UI layout and graphics
-- Android settings screen for generated torrc file
-- Improved performance and error handling
-
-0.0.2a - 2009-11-30
-- Update user interface layout and graphics
-- Modified service launch, shutdown and handling
-- Improved event handler on Tor Control port callbacks
-- Added Help page
-
-0.0.2 - 2009-11-27
-- Major improvement to the user interface including relative layout for
-  different screens
-- New graphics resources
-- Implemented Tor Control Port using official Java library
-- Added 'clear' button to the log screen
-- Added 'save' and editable textbox for the settings screen
-- Moved screen navigation to a pop-up menu
-
-0.0.1-alpha - 2009-10-21
-- First code release
-- Major Features: Tor binary application is fully operational, UI:
-  Start/Stop Tor, View Message Log, View Settings (torrc)
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG (from rev 24737, projects/android/trunk/Orbot/CHANGELOG)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,111 @@
+NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
+
+1.0.5
+- fixed tor binary installation issue related to max resource size and compression
+- updated "start on boot" code to test for proper launch event
+- updated to Tor 0.2.2.25-alpha binary
+- moved back to single notification bar id to avoid double entries
+- cleaned up progress dialog and alert handling to avoid leaky windows
+- Merged __sporkbomb's patch for how transproxy all works; now does "everything but Tor"
+- Added new toolbar notifications and alerts for displaying notifications and Tor messages
+- Removed unused Socks client code from android.net package
+- Updated wizard to show link to Gibberbot (formerly OTRchat) chat app
+- Bundled iptables 1.4.7 for ARM instead of relying on installed version
+- Fixed various issues related to iptables, transproxying for CyanogenMod7/Android 2.3.*
+- Changed how settings changed are processed through the control port (batched instead of one by one)
+- Stopped app by app flushing of iptables rules, in favor of complete flush of 'nat' and 'filter' type
+- removed useless log screen (logs can be viewed/retrieved using 'alogcat' 3rd party app)
+
+1.0.4
+- Added Russian, Persian, Arabic and other .po translations (see res/values-* folders)
+- Fixed incorrect try to clear iptables rules for non-root devices
+- Fixed bug that stopped wizard helper from showing first time
+- Added new green notification icon when Tor is connected
+- Fixed app selector layout in settings
+- Moved minSDK to 4 (Android 1.6); discontinued 1.5 support
+- Fixed log screen touch disable tor bug
+- Debugged issues around network status change causing FC/crash
+- Added "Start on Boot" option
+
+1.0.3
+- Fixed spanish language issues with settings screen
+- Cleaned up logging, and moved most of it to debug output only
+- Small changes to iptables, transproxy settings to handle iptables 1.3 and 1.4 variations
+- Added compile time variable/flag for turning on/off detailed control port output to Android stdout
+- Hidden services now support through option in settings
+- removed double apostrophes from value/strings.xml files
+
+1.0.2
+- Added "check" yes/no dialog prompt
+- Debugged iptables/transprox settings on Android 1.6 and 2.2
+- Added proxy settings help screen and fixed processSettings() NPE
+
+1.0.1
+- Found and fixed major bug in per-app trans proxying; list of apps was being cached and iptables rules were not properly updated as the user changed the selection in the list
+ 
+1.0.0 - 2010-08-10
+- Added "Proxy Settings" help screen
+- Handle potential null pointers on process settings where service not yet active 
+
+0.0.9x - 2010-08-03
+- Revised Orbot install wizard
+- Integrated Tor 0.2.2.14 and iptables 4.x binary
+- Fixed "got root" detection method 
+- Fixed Per App Torification handling so it updates on exit from Settings screen
+
+0.0.8x - 2010-07-15
+- Updated Settings & App configuration screens
+- Changed progress dialog display
+- Significant application re-arch
+- Fixed force stop crash on install
+- Integrated Tor 0.2.2.13-alpha-dev binary
+- Fixed su shell cmd error handling & root perms issue
+- #1570: Added new setup wizard on install to clarify root / non-root capabilities 
+- #1716: Per-app traffic routing prefs not persisted
+- #1509: Help window is too big for the screen on android 1.6
+- #1513: Orbot can't be told to exit <-- added 'Exit' menu option
+- #1530: Capture sh cmd stout for debugging errors <-- updated debug log screen
+- #1531: Don't loop ad infinitum in Orbot fails <-- only retries 3 times now
+- #1272: Orbot should store Tor files in the cache
+- #1273: Info should mention anonymity problems with ProxySurf
+
+0.0.5x
+- #1388: Error parsing PID from output of "ps"
+- #1277, #1278: Enabling bridges issues
+- #1279: Misleading message when initialization is finished
+- #1292: Tor version in About screen is wrong
+
+0.0.3x - 2010-03-15
+- Added Start/Stop menu item for non-touch activation
+- Improved parsing and validation of settings screen
+- UI now compatible with landscape mode (#1276)
+- Added relay support for static/publicly accessible IP devices
+
+0.0.3a - 2010-02-07
+- Integrated iptables support for transparent proxying of outbound port
+  80 and DNS
+- Privoxy is now used as HTTP Proxy server (cross-compiled to ARM)
+- New UI layout and graphics
+- Android settings screen for generated torrc file
+- Improved performance and error handling
+
+0.0.2a - 2009-11-30
+- Update user interface layout and graphics
+- Modified service launch, shutdown and handling
+- Improved event handler on Tor Control port callbacks
+- Added Help page
+
+0.0.2 - 2009-11-27
+- Major improvement to the user interface including relative layout for
+  different screens
+- New graphics resources
+- Implemented Tor Control Port using official Java library
+- Added 'clear' button to the log screen
+- Added 'save' and editable textbox for the settings screen
+- Moved screen navigation to a pop-up menu
+
+0.0.1-alpha - 2009-10-21
+- First code release
+- Major Features: Tor binary application is fully operational, UI:
+  Start/Stop Tor, View Message Log, View Settings (torrc)
+

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/drawable/torerror.png (from rev 24738, projects/android/trunk/Orbot/res/drawable/torerror.png)
===================================================================
(Binary files differ)

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/layout/layout_about.xml
===================================================================
--- projects/android/trunk/Orbot/res/layout/layout_about.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/layout/layout_about.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -80,7 +80,7 @@
 				android:paddingLeft="15px"
 				android:textStyle="bold"
 				android:textColor="#00ff00" />	
-			<TextView android:text="Tor v0.2.2.14: https://www.torproject.org";
+			<TextView android:text="Tor v0.2.2.25: https://www.torproject.org";
 				android:layout_width="fill_parent" 
 				android:layout_height="wrap_content"
 				android:autoLink="web"

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc
===================================================================
--- projects/android/trunk/Orbot/res/raw/torrc	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,12 +0,0 @@
-SocksPort 9050
-SocksListenAddress 127.0.0.1
-SafeSocks 1
-Log notice stdout
-ControlPort 9051
-CookieAuthentication 1
-RelayBandwidthRate 20 KBytes
-RelayBandwidthBurst 20 KBytes
-UseBridges 0
-AutomapHostsOnResolve 1
-TransPort 9040
-DNSPort 5400

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc (from rev 24736, projects/android/trunk/Orbot/res/raw/torrc)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,11 @@
+SocksPort 9050
+SafeSocks 1
+Log notice stdout
+ControlPort 9051
+CookieAuthentication 1
+RelayBandwidthRate 20 KBytes
+RelayBandwidthBurst 20 KBytes
+UseBridges 0
+AutomapHostsOnResolve 1
+TransPort 9040
+DNSPort 5400

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
+             <string name="app_version">1.0.5</string>
+     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>
     <string name="secure_default_web_url">https://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ar/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ar/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ar/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">ØÙØØÙØ (Orbot)</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ca/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ca/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ca/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-de/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-de/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-de/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-es/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-es/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-es/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-fa/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-fa/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-fa/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">ØÙØØØØ</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-mk/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-mk/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-mk/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">ÐÑÐÐÑ</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nb/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-nb/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nb/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
   
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nl/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-nl/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pl/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-pl/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pt/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-pt/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pt/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>
     <string name="secure_default_web_url">https://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ru/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ru/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ru/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-sv/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-sv/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-sv/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-             <string name="app_version">1.0.5-dev</string>
+             <string name="app_version">1.0.5</string>
      
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-zh/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-zh/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-zh/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/OnBootReceiver.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,19 +0,0 @@
-package org.torproject.android;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-public class OnBootReceiver extends BroadcastReceiver {
-	
-	@Override
-	public void onReceive(Context context, Intent intent) {
-		Intent serviceIntent = new Intent();
-		serviceIntent.setAction("org.torproject.android.service.TorService");
-		context.startService(serviceIntent);
-
-	}
-
-	
-}
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java (from rev 24735, projects/android/trunk/Orbot/src/org/torproject/android/OnBootReceiver.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,29 @@
+package org.torproject.android;
+
+import org.torproject.android.service.TorService;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+public class OnBootReceiver extends BroadcastReceiver {
+	
+	@Override
+	public void onReceive(Context context, Intent intent) {
+
+		if (intent.getAction() != null 
+				&& intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
+		{
+			//Phase 1: Launch a service
+			Intent service = new Intent();
+			service.setAction("onboot");
+			service.setClass(context, TorService.class);
+			context.startService(service);
+		}
+	
+		
+	}
+
+	
+}
+

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,830 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-
-package org.torproject.android;
-
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.util.StringTokenizer;
-
-import org.torproject.android.service.ITorService;
-import org.torproject.android.service.ITorServiceCallback;
-import org.torproject.android.service.TorServiceConstants;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.NotificationManager;
-import android.app.ProgressDialog;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.RemoteException;
-import android.preference.PreferenceManager;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnLongClickListener;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-public class Orbot extends Activity implements OnLongClickListener, TorConstants
-{
-	
-	/* Useful UI bits */
-	private TextView lblStatus = null; //the main text display widget
-	private ImageView imgStatus = null; //the main touchable image for activating Orbot
-	private ProgressDialog progressDialog;
-	private MenuItem mItemOnOff = null;
-	
-	/* Some tracking bits */
-	private int torStatus = STATUS_READY; //latest status reported from the tor service
-	
-	/* Tor Service interaction */
-		/* The primary interface we will be calling on the service. */
-    ITorService mService = null;
-	private boolean autoStartOnBind = false;
-
-	SharedPreferences prefs;
-	
-    /** Called when the activity is first created. */
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        
-      //if Tor binary is not running, then start the service up
-		startService(new Intent(INTENT_TOR_SERVICE));
-		bindService ();
-		
-
-    	setTheme(android.R.style.Theme_Black_NoTitleBar);
-    	
-    	prefs = PreferenceManager.getDefaultSharedPreferences(this);
-    	
-    	setContentView(R.layout.layout_main);
-		
-    	lblStatus = (TextView)findViewById(R.id.lblStatus);
-		lblStatus.setOnLongClickListener(this);
-    	imgStatus = (ImageView)findViewById(R.id.imgStatus);
-    	imgStatus.setOnLongClickListener(this);
-    }
-    
-   /*
-    * Create the UI Options Menu (non-Javadoc)
-    * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
-    */
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-        
-        MenuItem mItem = null;
-        
-        mItemOnOff = menu.add(0, 1, Menu.NONE, getString(R.string.menu_start));
-        mItemOnOff.setIcon(android.R.drawable.ic_menu_share);
-        mItemOnOff.setAlphabeticShortcut('t');
-        
-        mItem = menu.add(0, 4, Menu.NONE, getString(R.string.menu_settings));
-        mItem.setIcon(R.drawable.ic_menu_register);
-       
-        mItem = menu.add(0, 7, Menu.NONE, getString(R.string.menu_verify));
-        mItem.setIcon(R.drawable.ic_menu_check);
-      
-        mItem =  menu.add(0,6, Menu.NONE, getString(R.string.menu_about));
-        mItem.setIcon(R.drawable.ic_menu_about);
-        
-        mItem = menu.add(0, 3, Menu.NONE, getString(R.string.menu_wizard));
-        mItem.setIcon(R.drawable.ic_menu_goto);
-       
-        mItem = menu.add(0, 8, Menu.NONE, getString(R.string.menu_exit));
-        mItem.setIcon(R.drawable.ic_menu_exit);
-       
-        
-        return true;
-    }
-    
-
-    private void showAbout ()
-	{
-		
-		LayoutInflater li = LayoutInflater.from(this);
-        View view = li.inflate(R.layout.layout_about, null); 
-        
-        TextView versionName = (TextView)view.findViewById(R.id.versionName);
-        versionName.setText(R.string.app_version);    
-        
-		new AlertDialog.Builder(this)
-        .setTitle(getString(R.string.button_about))
-        .setView(view)
-        .show();
-	}
-    
-    /* When a menu item is selected launch the appropriate view or activity
-     * (non-Javadoc)
-	 * @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem)
-	 */
-	public boolean onMenuItemSelected(int featureId, MenuItem item) {
-		
-		super.onMenuItemSelected(featureId, item);
-		
-		if (item.getItemId() == 1)
-		{
-			
-			try
-			{
-				
-				if (mService == null)
-				{
-				
-				}
-				else if (mService.getStatus() == STATUS_READY)
-				{
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-					startTor();
-					
-				}
-				else
-				{
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-					stopTor();
-					
-				}
-				
-			}
-			catch (RemoteException re)
-			{
-				Log.w(TAG, "Unable to start/top Tor from menu UI", re);
-			}
-		}
-		else if (item.getItemId() == 4)
-		{
-			showSettings();
-		}
-		else if (item.getItemId() == 3)
-		{
-			showHelp();
-		}
-		else if (item.getItemId() == 7)
-		{
-			doTorCheck();
-		}
-		else if (item.getItemId() == 8)
-		{
-			//exit app
-			doExit();
-			
-			
-		}
-		else if (item.getItemId() == 6)
-		{
-			showAbout();
-			
-			
-		}
-		
-        return true;
-	}
-	
-	private void doExit ()
-	{
-		try {
-		
-			stopTor();
-			
-			stopService(new Intent(ITorService.class.getName()));
-			
-        	NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-			mNotificationManager.cancelAll();
-		
-			
-		} catch (RemoteException e) {
-			Log.w(TAG, e);
-		}
-		
-		finish();
-		
-	}
-	
-	/* Return to the main view when the back key is pressed
-	 * (non-Javadoc)
-	 * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
-	 */
-	/*
-	public boolean onKeyDown(int keyCode, KeyEvent event){
-		
-		if(keyCode==KeyEvent.KEYCODE_BACK){
-
-			if(currentView != R.layout.layout_main){
-					
-					showMain ();
-					return true;
-			}
-			else{
-				return super.onKeyDown(keyCode, event);
-			}
-		}
-	
-		return super.onKeyDown(keyCode, event);
-		
-	}*/
- 
-    /* (non-Javadoc)
-	 * @see android.app.Activity#onPause()
-	 */
-	protected void onPause() {
-		super.onPause();
-		
-
-	}
-
-	public void onSaveInstanceState(Bundle savedInstanceState) {
-		  // Save UI state changes to the savedInstanceState.
-		  // This bundle will be passed to onCreate if the process is
-		  // killed and restarted.
-		  // etc.
-		  super.onSaveInstanceState(savedInstanceState);
-		}
-	
-	public void onRestoreInstanceState(Bundle savedInstanceState) {
-	  super.onRestoreInstanceState(savedInstanceState);
-	  // Restore UI state from the savedInstanceState.
-	  // This bundle has also been passed to onCreate.
-	 
-	}
-	
-	private void doTorCheck ()
-	{
-		
-		DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
-			
-		    @Override
-		    public void onClick(DialogInterface dialog, int which) {
-		        switch (which){
-		        case DialogInterface.BUTTON_POSITIVE:
-		            
-		    		openBrowser(URL_TOR_CHECK);
-
-					
-		        	
-		            break;
-
-		        case DialogInterface.BUTTON_NEGATIVE:
-		        
-		        	//do nothing
-		            break;
-		        }
-		    }
-		};
-
-		AlertDialog.Builder builder = new AlertDialog.Builder(this);
-		builder.setMessage(R.string.tor_check).setPositiveButton(R.string.btn_okay, dialogClickListener)
-		    .setNegativeButton(R.string.btn_cancel, dialogClickListener).show();
-
-	}
-	
-	private void enableHiddenServicePort (int hsPort)
-	{
-		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		Editor pEdit = prefs.edit();
-		
-		String hsPortString = prefs.getString("pref_hs_ports", "");
-		
-		if (hsPortString.length() > 0 && hsPortString.indexOf(hsPort+"")==-1)
-			hsPortString += ',' + hsPort;
-		else
-			hsPortString = hsPort + "";
-		
-		pEdit.putString("pref_hs_ports", hsPortString);
-		pEdit.putBoolean("pref_hs_enable", true);
-		
-		pEdit.commit();
-		
-		String onionHostname = prefs.getString("pref_hs_hostname","");
-
-		Intent nResult = new Intent();
-		nResult.putExtra("hs_host", onionHostname);
-		setResult(RESULT_OK, nResult);
-	
-	}
-	
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onResume()
-	 */
-	protected void onResume() {
-		super.onResume();
-		
-		 updateStatus("");
-		 
-		if (getIntent() == null)
-			return;
-		
-		String action = getIntent().getAction();
-		
-		if (action == null)
-			return;
-		
-		if (action.equals("org.torproject.android.REQUEST_HS_PORT"))
-		{
-			
-			DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
-			    @Override
-			    public void onClick(DialogInterface dialog, int which) {
-			        switch (which){
-			        case DialogInterface.BUTTON_POSITIVE:
-			            
-			        	int hsPort = getIntent().getIntExtra("hs_port", -1);
-						
-			        	enableHiddenServicePort (hsPort);
-			        	
-						finish();
-						
-			        	
-			            break;
-
-			        case DialogInterface.BUTTON_NEGATIVE:
-			            //No button clicked
-			        	finish();
-			            break;
-			        }
-			    }
-			};
-
-        	int hsPort = getIntent().getIntExtra("hs_port", -1);
-
-			String requestMsg = "An app wants to open a server port (" + hsPort + ") to the Tor network. This is safe if you trust the app.";
-			AlertDialog.Builder builder = new AlertDialog.Builder(this);
-			builder.setMessage(requestMsg).setPositiveButton("Allow", dialogClickListener)
-			    .setNegativeButton("Deny", dialogClickListener).show();
-			
-		
-		}
-		else if (action.equals("org.torproject.android.START_TOR"))
-		{
-			autoStartOnBind = true;
-			
-			if (mService == null)
-				bindService();
-			
-		}
-		else
-		{
-			
-			//setTitle(getString(R.string.app_name) + ' ' + getString(R.string.app_version));
-	    
-			NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-			mNotificationManager.cancelAll();
-			
-			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-	
-			boolean showWizard = prefs.getBoolean("show_wizard",true);
-			
-			if (showWizard)
-			{
-			
-				Editor pEdit = prefs.edit();
-				
-				pEdit.putBoolean("show_wizard",false);
-				
-				pEdit.commit();
-				
-			    new WizardHelper(this).showWizard();
-
-			}
-			
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onStart()
-	 */
-	protected void onStart() {
-		super.onStart();
-		
-		
-		updateStatus ("");
-		
-
-	}
-
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onStop()
-	 */
-	protected void onStop() {
-		super.onStop();
-		
-		unbindService();
-	}
-
-
-
-	/*
-	 * Launch the system activity for Uri viewing with the provided url
-	 */
-	private void openBrowser(String url)
-	{
-		startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
-		
-	}
-	
-	
-	
-	/*
-	 * Show the help view - a popup dialog
-	 */
-	private void showHelp ()
-	{
-		
-       new WizardHelper(this).showWizard();
-	}
-	
-	
-    /*
-     * Load the basic settings application to display torrc
-     */
-	private void showSettings ()
-	{
-		
-		startActivityForResult(new Intent(this, SettingsPreferences.class), 1);
-	}
-	
-	
-	@Override
-	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-		super.onActivityResult(requestCode, resultCode, data);
-		
-		if (requestCode == 1 && resultCode == 1010 && mService != null)
-		{
-			new ProcessSettingsAsyncTask().execute(mService);	
-		}
-	}
-	
-	private AlertDialog aDialog = null;
-	
-	private void showAlert(String title, String msg, boolean button)
-	{
-		if (aDialog != null)
-			aDialog.dismiss();
-		
-		 if (button)
-		 {
-			 aDialog = new AlertDialog.Builder(this)
-		 .setIcon(R.drawable.icon)
-         .setTitle(title)
-         .setMessage(msg)
-         .setPositiveButton(android.R.string.ok, null)
-         .show();
-		 }
-		 else
-		 {
-			 aDialog = new AlertDialog.Builder(this)
-			 .setIcon(R.drawable.icon)
-	         .setTitle(title)
-	         .setMessage(msg)
-	         .show();
-		 }
-	}
-    /*
-     * Set the state of the running/not running graphic and label
-     */
-    public void updateStatus (String torServiceMsg)
-    {
-    	try
-    	{
-    		
-    		if (mService != null)
-    			torStatus = mService.getStatus();
-    		
-	    	if (imgStatus != null)
-	    	{
-	    		
-		    	if (torStatus == STATUS_ON)
-		    	{
-		    		imgStatus.setImageResource(R.drawable.toron);
-		    	
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		
-		    		String lblMsg = getString(R.string.status_activated);
-		    		//+ "\n" + torServiceMsg;
-		    		
-		    		lblStatus.setText(lblMsg);
-		    		
-		    		if (torServiceMsg.length() > 0)
-		    			showAlert("Update", torServiceMsg, false);
-		    		
-		    		boolean showFirstTime = prefs.getBoolean("connect_first_time",true);
-		    		
-		    		if (showFirstTime)
-		    		{
-		    		
-		    			Editor pEdit = prefs.edit();
-		    			
-		    			pEdit.putBoolean("connect_first_time",false);
-		    			
-		    			pEdit.commit();
-		    			
-		    			showAlert(getString(R.string.status_activated),getString(R.string.connect_first_time),true);
-		    			
-		    		}
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-
-		    	}
-		    	else if (torStatus == STATUS_CONNECTING)
-		    	{
-		    		
-		    		imgStatus.setImageResource(R.drawable.torstarting);
-		    		if (progressDialog == null)
-		    		{
-		    			progressDialog =ProgressDialog.show(this, "", getString(R.string.status_starting_up));
-		    		}
-		    		else
-		    			progressDialog.setMessage(torServiceMsg);
-		    		
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-		    			
-		    	}
-		    	else if (torStatus == STATUS_OFF)
-		    	{
-		    		imgStatus.setImageResource(R.drawable.toroff);
-		    		
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		lblStatus.setText(getString(R.string.status_shutting_down));
-		    			
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-		    	}
-		    	else
-		    	{
-
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		
-		    		imgStatus.setImageResource(R.drawable.toroff);
-		    		lblStatus.setText(getString(R.string.status_disabled) + "\n" + getString(R.string.press_to_start));
-		    		
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-		    		
-		    	}
-	    	}
-		    	
-    	}
-    	catch (RemoteException e)
-    	{
-    		Log.e(TAG,"remote exception updating status",e);
-    	}
-    	
-        
-    }
-  
-    private void startTor () throws RemoteException
-    {
-    	
-    	mService.setProfile(TorServiceConstants.PROFILE_ON); //this means turn on
-		
-		imgStatus.setImageResource(R.drawable.torstarting);
-		lblStatus.setText(getString(R.string.status_starting_up));
-		
-		Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG);
-    	mHandler.sendMessage(msg);
-    	
-    	
-    	
-    }
-    
-    private void stopTor () throws RemoteException
-    {
-    	if (mService != null)
-    	{
-    		mService.setProfile(TorServiceConstants.PROFILE_OFF);
-    		Message msg = mHandler.obtainMessage(TorServiceConstants.DISABLE_TOR_MSG);
-    		mHandler.sendMessage(msg);
-    	}
-    	
-       // stopService(new Intent(ITorService.class.getName()));
-	
-    	
-    }
-    
-	/*
-     * (non-Javadoc)
-     * @see android.view.View.OnClickListener#onClick(android.view.View)
-     */
-	public boolean onLongClick(View view) {
-		
-		
-		try
-		{
-			
-			if (mService == null)
-			{
-			
-			}
-			else if (mService.getStatus() == STATUS_READY)
-			{
-				
-				startTor();
-				
-			}
-			else
-			{
-				
-				stopTor();
-				
-			}
-			
-		}
-		catch (Exception e)
-		{
-			Log.d(TAG,"error onclick",e);
-		}
-			
-		return true;
-	}
-	
-
-    /**
-     * This implementation is used to receive callbacks from the remote
-     * service.
-     */
-    private ITorServiceCallback mCallback = new ITorServiceCallback.Stub() {
-        /**
-         * This is called by the remote service regularly to tell us about
-         * new values.  Note that IPC calls are dispatched through a thread
-         * pool running in each process, so the code executing here will
-         * NOT be running in our main thread like most other things -- so,
-         * to update the UI, we need to use a Handler to hop over there.
-         */
-        public void statusChanged(String value) {
-           
-        	Message msg = mHandler.obtainMessage(TorServiceConstants.STATUS_MSG);
-        	msg.getData().putString(HANDLER_TOR_MSG, value);
-        	mHandler.sendMessage(msg);
-        }
-
-		@Override
-		public void logMessage(String value) throws RemoteException {
-			
-			Message msg = mHandler.obtainMessage(TorServiceConstants.LOG_MSG);
-        	msg.getData().putString(HANDLER_TOR_MSG, value);
-        	mHandler.sendMessage(msg);
-			
-		}
-    };
-    
-
-    private Handler mHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case TorServiceConstants.STATUS_MSG:
-
-                	String torServiceMsg = (String)msg.getData().getString(HANDLER_TOR_MSG);
-                	
-                	updateStatus(torServiceMsg);
-                	
-                    break;
-                case TorServiceConstants.LOG_MSG:
-                	
-                	
-                    break;
-                case TorServiceConstants.ENABLE_TOR_MSG:
-                	
-                	if (progressDialog == null)
-					{
-						progressDialog = ProgressDialog.show(Orbot.this, "", getString(R.string.status_starting_up));
-					}
-    	
-                	
-                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
-                	
-                	break;
-                case TorServiceConstants.DISABLE_TOR_MSG:
-                	
-                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
-                	
-                	break;
-                		
-                default:
-                    super.handleMessage(msg);
-            }
-        }
-        
-    };
-
-    
-    /**
-     * Class for interacting with the main interface of the service.
-     */
-    private ServiceConnection mConnection = new ServiceConnection() {
-        public void onServiceConnected(ComponentName className,
-                IBinder service) {
-            // This is called when the connection with the service has been
-            // established, giving us the service object we can use to
-            // interact with the service.  We are communicating with our
-            // service through an IDL interface, so get a client-side
-            // representation of that from the raw service object.
-            mService = ITorService.Stub.asInterface(service);
-       
-            // We want to monitor the service for as long as we are
-            // connected to it.
-            try {
-                mService.registerCallback(mCallback);
-           
-                updateStatus("");
-                
-                if (autoStartOnBind)
-                {
-                	autoStartOnBind = false;
-                	
-                	startTor();
-                	
-                }
-            
-            } catch (RemoteException e) {
-                // In this case the service has crashed before we could even
-                // do anything with it; we can count on soon being
-                // disconnected (and then reconnected if it can be restarted)
-                // so there is no need to do anything here.
-            	Log.d(TAG,"error registering callback to service",e);
-            }
-            
-
-
-           
-       
-          
-        }
-
-        public void onServiceDisconnected(ComponentName className) {
-            // This is called when the connection with the service has been
-            // unexpectedly disconnected -- that is, its process crashed.
-            mService = null;
-          
-        }
-    };
-    
-    boolean mIsBound = false;
-    
-    private void bindService ()
-    {
-    	 bindService(new Intent(ITorService.class.getName()),
-                 mConnection, Context.BIND_AUTO_CREATE);
-    	 
-    	 mIsBound = true;
-    
-    	
-    	
-    }
-    
-    private void unbindService ()
-    {
-    	if (mIsBound) {
-            // If we have received the service, and hence registered with
-            // it, then now is the time to unregister.
-            if (mService != null) {
-                try {
-                    mService.unregisterCallback(mCallback);
-                    
-                } catch (RemoteException e) {
-                    // There is nothing special we need to do if the service
-                    // has crashed.
-                }
-            }
-            
-            // Detach our existing connection.
-            unbindService(mConnection);
-            mIsBound = false;
-            
-        }
-    }
-	
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java (from rev 24735, projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,846 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
+/* See LICENSE for licensing information */
+
+package org.torproject.android;
+
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.StringTokenizer;
+
+import org.torproject.android.service.ITorService;
+import org.torproject.android.service.ITorServiceCallback;
+import org.torproject.android.service.TorServiceConstants;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.NotificationManager;
+import android.app.ProgressDialog;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.RemoteException;
+import android.preference.PreferenceManager;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnLongClickListener;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class Orbot extends Activity implements OnLongClickListener, TorConstants
+{
+	
+	/* Useful UI bits */
+	private TextView lblStatus = null; //the main text display widget
+	private ImageView imgStatus = null; //the main touchable image for activating Orbot
+	private ProgressDialog progressDialog;
+	private MenuItem mItemOnOff = null;
+	
+	/* Some tracking bits */
+	private int torStatus = STATUS_READY; //latest status reported from the tor service
+	
+	/* Tor Service interaction */
+		/* The primary interface we will be calling on the service. */
+    ITorService mService = null;
+	private boolean autoStartOnBind = false;
+
+	SharedPreferences prefs;
+	
+    /** Called when the activity is first created. */
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+      //if Tor binary is not running, then start the service up
+		startService(new Intent(INTENT_TOR_SERVICE));
+		
+
+    	setTheme(android.R.style.Theme_Black_NoTitleBar);
+    	
+    	prefs = PreferenceManager.getDefaultSharedPreferences(this);
+    	
+    	setContentView(R.layout.layout_main);
+		
+    	lblStatus = (TextView)findViewById(R.id.lblStatus);
+		lblStatus.setOnLongClickListener(this);
+    	imgStatus = (ImageView)findViewById(R.id.imgStatus);
+    	imgStatus.setOnLongClickListener(this);
+    	
+    	
+
+    }
+    
+   /*
+    * Create the UI Options Menu (non-Javadoc)
+    * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
+    */
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+        
+        MenuItem mItem = null;
+        
+        mItemOnOff = menu.add(0, 1, Menu.NONE, getString(R.string.menu_start));
+        mItemOnOff.setIcon(android.R.drawable.ic_menu_share);
+        mItemOnOff.setAlphabeticShortcut('t');
+        
+        mItem = menu.add(0, 4, Menu.NONE, getString(R.string.menu_settings));
+        mItem.setIcon(R.drawable.ic_menu_register);
+       
+        mItem = menu.add(0, 7, Menu.NONE, getString(R.string.menu_verify));
+        mItem.setIcon(R.drawable.ic_menu_check);
+      
+        mItem =  menu.add(0,6, Menu.NONE, getString(R.string.menu_about));
+        mItem.setIcon(R.drawable.ic_menu_about);
+        
+        mItem = menu.add(0, 3, Menu.NONE, getString(R.string.menu_wizard));
+        mItem.setIcon(R.drawable.ic_menu_goto);
+       
+        mItem = menu.add(0, 8, Menu.NONE, getString(R.string.menu_exit));
+        mItem.setIcon(R.drawable.ic_menu_exit);
+       
+        
+        return true;
+    }
+    
+
+    private void showAbout ()
+	{
+		
+		LayoutInflater li = LayoutInflater.from(this);
+        View view = li.inflate(R.layout.layout_about, null); 
+        
+        TextView versionName = (TextView)view.findViewById(R.id.versionName);
+        versionName.setText(R.string.app_version);    
+        
+		new AlertDialog.Builder(this)
+        .setTitle(getString(R.string.button_about))
+        .setView(view)
+        .show();
+	}
+    
+    /* When a menu item is selected launch the appropriate view or activity
+     * (non-Javadoc)
+	 * @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem)
+	 */
+	public boolean onMenuItemSelected(int featureId, MenuItem item) {
+		
+		super.onMenuItemSelected(featureId, item);
+		
+		if (item.getItemId() == 1)
+		{
+			
+			try
+			{
+				
+				if (mService == null)
+				{
+				
+				}
+				else if (mService.getStatus() == STATUS_READY)
+				{
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+					startTor();
+					
+				}
+				else
+				{
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+					stopTor();
+					
+				}
+				
+			}
+			catch (RemoteException re)
+			{
+				Log.w(TAG, "Unable to start/top Tor from menu UI", re);
+			}
+		}
+		else if (item.getItemId() == 4)
+		{
+			showSettings();
+		}
+		else if (item.getItemId() == 3)
+		{
+			showHelp();
+		}
+		else if (item.getItemId() == 7)
+		{
+			doTorCheck();
+		}
+		else if (item.getItemId() == 8)
+		{
+			//exit app
+			doExit();
+			
+			
+		}
+		else if (item.getItemId() == 6)
+		{
+			showAbout();
+			
+			
+		}
+		
+        return true;
+	}
+	
+	private void doExit ()
+	{
+		try {
+		
+			stopTor();
+			
+			stopService(new Intent(ITorService.class.getName()));
+			
+        	NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+			mNotificationManager.cancelAll();
+		
+			
+		} catch (RemoteException e) {
+			Log.w(TAG, e);
+		}
+		
+		finish();
+		
+	}
+	
+	/* Return to the main view when the back key is pressed
+	 * (non-Javadoc)
+	 * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
+	 */
+	/*
+	public boolean onKeyDown(int keyCode, KeyEvent event){
+		
+		if(keyCode==KeyEvent.KEYCODE_BACK){
+
+			if(currentView != R.layout.layout_main){
+					
+					showMain ();
+					return true;
+			}
+			else{
+				return super.onKeyDown(keyCode, event);
+			}
+		}
+	
+		return super.onKeyDown(keyCode, event);
+		
+	}*/
+ 
+    /* (non-Javadoc)
+	 * @see android.app.Activity#onPause()
+	 */
+	protected void onPause() {
+		super.onPause();
+		
+		hideProgressDialog();
+
+		if (aDialog != null)
+			aDialog.dismiss();
+	}
+
+	public void onSaveInstanceState(Bundle savedInstanceState) {
+		  // Save UI state changes to the savedInstanceState.
+		  // This bundle will be passed to onCreate if the process is
+		  // killed and restarted.
+		  // etc.
+		  super.onSaveInstanceState(savedInstanceState);
+		}
+	
+	public void onRestoreInstanceState(Bundle savedInstanceState) {
+	  super.onRestoreInstanceState(savedInstanceState);
+	  // Restore UI state from the savedInstanceState.
+	  // This bundle has also been passed to onCreate.
+	 
+	}
+	
+	private void doTorCheck ()
+	{
+		
+		DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
+			
+		    @Override
+		    public void onClick(DialogInterface dialog, int which) {
+		        switch (which){
+		        case DialogInterface.BUTTON_POSITIVE:
+		            
+		    		openBrowser(URL_TOR_CHECK);
+
+					
+		        	
+		            break;
+
+		        case DialogInterface.BUTTON_NEGATIVE:
+		        
+		        	//do nothing
+		            break;
+		        }
+		    }
+		};
+
+		AlertDialog.Builder builder = new AlertDialog.Builder(this);
+		builder.setMessage(R.string.tor_check).setPositiveButton(R.string.btn_okay, dialogClickListener)
+		    .setNegativeButton(R.string.btn_cancel, dialogClickListener).show();
+
+	}
+	
+	private void enableHiddenServicePort (int hsPort)
+	{
+		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		Editor pEdit = prefs.edit();
+		
+		String hsPortString = prefs.getString("pref_hs_ports", "");
+		
+		if (hsPortString.length() > 0 && hsPortString.indexOf(hsPort+"")==-1)
+			hsPortString += ',' + hsPort;
+		else
+			hsPortString = hsPort + "";
+		
+		pEdit.putString("pref_hs_ports", hsPortString);
+		pEdit.putBoolean("pref_hs_enable", true);
+		
+		pEdit.commit();
+		
+		String onionHostname = prefs.getString("pref_hs_hostname","");
+
+		Intent nResult = new Intent();
+		nResult.putExtra("hs_host", onionHostname);
+		setResult(RESULT_OK, nResult);
+	
+	}
+	
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onResume()
+	 */
+	protected void onResume() {
+		super.onResume();
+		
+		bindService();
+		
+		 updateStatus("");
+		 
+		if (getIntent() == null)
+			return;
+		
+		String action = getIntent().getAction();
+		
+		if (action == null)
+			return;
+		
+		if (action.equals("org.torproject.android.REQUEST_HS_PORT"))
+		{
+			
+			DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
+			    @Override
+			    public void onClick(DialogInterface dialog, int which) {
+			        switch (which){
+			        case DialogInterface.BUTTON_POSITIVE:
+			            
+			        	int hsPort = getIntent().getIntExtra("hs_port", -1);
+						
+			        	enableHiddenServicePort (hsPort);
+			        	
+						finish();
+						
+			        	
+			            break;
+
+			        case DialogInterface.BUTTON_NEGATIVE:
+			            //No button clicked
+			        	finish();
+			            break;
+			        }
+			    }
+			};
+
+        	int hsPort = getIntent().getIntExtra("hs_port", -1);
+
+			String requestMsg = "An app wants to open a server port (" + hsPort + ") to the Tor network. This is safe if you trust the app.";
+			AlertDialog.Builder builder = new AlertDialog.Builder(this);
+			builder.setMessage(requestMsg).setPositiveButton("Allow", dialogClickListener)
+			    .setNegativeButton("Deny", dialogClickListener).show();
+			
+		
+		}
+		else if (action.equals("org.torproject.android.START_TOR"))
+		{
+			autoStartOnBind = true;
+			
+			if (mService == null)
+				bindService();
+			
+		}
+		else
+		{
+			
+			//setTitle(getString(R.string.app_name) + ' ' + getString(R.string.app_version));
+	    
+			NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+			mNotificationManager.cancelAll();
+			
+			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+	
+			boolean showWizard = prefs.getBoolean("show_wizard",true);
+			
+			if (showWizard)
+			{
+			
+				Editor pEdit = prefs.edit();
+				
+				pEdit.putBoolean("show_wizard",false);
+				
+				pEdit.commit();
+				
+			    new WizardHelper(this).showWizard();
+
+			}
+			
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onStart()
+	 */
+	protected void onStart() {
+		super.onStart();
+		
+		
+		updateStatus ("");
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onStop()
+	 */
+	protected void onStop() {
+		super.onStop();
+		
+		//unbindService();
+	}
+
+
+
+	/*
+	 * Launch the system activity for Uri viewing with the provided url
+	 */
+	private void openBrowser(String url)
+	{
+		startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
+		
+	}
+	
+	
+	
+	/*
+	 * Show the help view - a popup dialog
+	 */
+	private void showHelp ()
+	{
+		
+       new WizardHelper(this).showWizard();
+	}
+	
+	
+    /*
+     * Load the basic settings application to display torrc
+     */
+	private void showSettings ()
+	{
+		
+		startActivityForResult(new Intent(this, SettingsPreferences.class), 1);
+	}
+	
+	
+	@Override
+	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+		super.onActivityResult(requestCode, resultCode, data);
+		
+		if (requestCode == 1 && resultCode == 1010 && mService != null)
+		{
+			new ProcessSettingsAsyncTask().execute(mService);	
+		}
+	}
+	
+	AlertDialog aDialog = null;
+	
+	private void showAlert(String title, String msg, boolean button)
+	{
+		try
+		{
+			if (aDialog != null && aDialog.isShowing())
+				aDialog.dismiss();
+		}
+		catch (Exception e){} //swallow any errors
+		
+		 if (button)
+		 {
+				aDialog = new AlertDialog.Builder(this)
+			 .setIcon(R.drawable.icon)
+	         .setTitle(title)
+	         .setMessage(msg)
+	         .setPositiveButton(android.R.string.ok, null)
+	         .show();
+		 }
+		 else
+		 {
+			 aDialog = new AlertDialog.Builder(this)
+			 .setIcon(R.drawable.icon)
+	         .setTitle(title)
+	         .setMessage(msg)
+	         .show();
+		 }
+	
+		 aDialog.setCanceledOnTouchOutside(true);
+	}
+    /*
+     * Set the state of the running/not running graphic and label
+     */
+    public void updateStatus (String torServiceMsg)
+    {
+    	try
+    	{
+    		
+    		if (mService != null)
+    			torStatus = mService.getStatus();
+    		
+	    	if (imgStatus != null)
+	    	{
+	    		
+		    	if (torStatus == STATUS_ON)
+		    	{
+		    		imgStatus.setImageResource(R.drawable.toron);
+
+		    		hideProgressDialog();
+		    		
+		    		String lblMsg = getString(R.string.status_activated);
+		    		//+ "\n" + torServiceMsg;
+		    		
+		    		lblStatus.setText(lblMsg);
+		    		
+		    		if (torServiceMsg.length() > 0)
+		    			showAlert("Update", torServiceMsg, false);
+		    		
+		    		boolean showFirstTime = prefs.getBoolean("connect_first_time",true);
+		    		
+		    		if (showFirstTime)
+		    		{
+		    		
+		    			Editor pEdit = prefs.edit();
+		    			
+		    			pEdit.putBoolean("connect_first_time",false);
+		    			
+		    			pEdit.commit();
+		    			
+		    			showAlert(getString(R.string.status_activated),getString(R.string.connect_first_time),true);
+		    			
+		    		}
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+		    		
+
+		    	}
+		    	else if (torStatus == STATUS_CONNECTING)
+		    	{
+		    		
+		    		imgStatus.setImageResource(R.drawable.torstarting);
+		    		
+		    		if (progressDialog != null)
+		    			progressDialog.setMessage(torServiceMsg);
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+		    			
+		    	}
+		    	else if (torStatus == STATUS_OFF)
+		    	{
+		    		imgStatus.setImageResource(R.drawable.toroff);
+		    		
+
+		    		hideProgressDialog();
+		    		
+		    		lblStatus.setText(getString(R.string.status_shutting_down));
+		    			
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+		    	}
+		    	else
+		    	{
+
+
+		    		hideProgressDialog();
+		    		
+		    		imgStatus.setImageResource(R.drawable.toroff);
+		    		lblStatus.setText(getString(R.string.status_disabled) + "\n" + getString(R.string.press_to_start));
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+		    		
+		    	}
+	    	}
+		    	
+    	}
+    	catch (RemoteException e)
+    	{
+    		Log.e(TAG,"remote exception updating status",e);
+    	}
+    	
+        
+    }
+  
+    private void startTor () throws RemoteException
+    {
+    	
+    	bindService();
+    	
+    	mService.setProfile(TorServiceConstants.PROFILE_ON); //this means turn on
+		
+		imgStatus.setImageResource(R.drawable.torstarting);
+		lblStatus.setText(getString(R.string.status_starting_up));
+		
+		Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG);
+    	mHandler.sendMessage(msg);
+    	
+    	
+    	
+    }
+    
+    private void stopTor () throws RemoteException
+    {
+    	if (mService != null)
+    	{
+    		mService.setProfile(TorServiceConstants.PROFILE_OFF);
+    		Message msg = mHandler.obtainMessage(TorServiceConstants.DISABLE_TOR_MSG);
+    		mHandler.sendMessage(msg);
+    	}
+    	
+     
+    }
+    
+	/*
+     * (non-Javadoc)
+     * @see android.view.View.OnClickListener#onClick(android.view.View)
+     */
+	public boolean onLongClick(View view) {
+		
+		
+		try
+		{
+			
+			if (mService == null)
+			{
+			
+			}
+			else if (mService.getStatus() == STATUS_READY)
+			{
+				
+				createProgressDialog(getString(R.string.status_starting_up));
+
+				startTor();
+			}
+			else
+			{
+				
+				stopTor();
+				
+			}
+			
+		}
+		catch (Exception e)
+		{
+			Log.d(TAG,"error onclick",e);
+		}
+			
+		return true;
+	}
+	
+
+    /**
+     * This implementation is used to receive callbacks from the remote
+     * service.
+     */
+    private ITorServiceCallback mCallback = new ITorServiceCallback.Stub() {
+        /**
+         * This is called by the remote service regularly to tell us about
+         * new values.  Note that IPC calls are dispatched through a thread
+         * pool running in each process, so the code executing here will
+         * NOT be running in our main thread like most other things -- so,
+         * to update the UI, we need to use a Handler to hop over there.
+         */
+        public void statusChanged(String value) {
+           
+        	Message msg = mHandler.obtainMessage(TorServiceConstants.STATUS_MSG);
+        	msg.getData().putString(HANDLER_TOR_MSG, value);
+        	mHandler.sendMessage(msg);
+        }
+
+		@Override
+		public void logMessage(String value) throws RemoteException {
+			
+			Message msg = mHandler.obtainMessage(TorServiceConstants.LOG_MSG);
+        	msg.getData().putString(HANDLER_TOR_MSG, value);
+        	mHandler.sendMessage(msg);
+			
+		}
+    };
+    
+
+    private Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case TorServiceConstants.STATUS_MSG:
+
+                	String torServiceMsg = (String)msg.getData().getString(HANDLER_TOR_MSG);
+                	
+                	updateStatus(torServiceMsg);
+                	
+                    break;
+                case TorServiceConstants.LOG_MSG:
+                	
+                	
+                    break;
+                case TorServiceConstants.ENABLE_TOR_MSG:
+                	
+                	
+                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
+                	
+                	break;
+                case TorServiceConstants.DISABLE_TOR_MSG:
+                	
+                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
+                	
+                	break;
+                		
+                default:
+                    super.handleMessage(msg);
+            }
+        }
+        
+        
+        
+    };
+
+    
+    /**
+     * Class for interacting with the main interface of the service.
+     */
+    private ServiceConnection mConnection = new ServiceConnection() {
+        public void onServiceConnected(ComponentName className,
+                IBinder service) {
+            // This is called when the connection with the service has been
+            // established, giving us the service object we can use to
+            // interact with the service.  We are communicating with our
+            // service through an IDL interface, so get a client-side
+            // representation of that from the raw service object.
+            mService = ITorService.Stub.asInterface(service);
+       
+            // We want to monitor the service for as long as we are
+            // connected to it.
+            try {
+                mService.registerCallback(mCallback);
+           
+                updateStatus("");
+                
+                if (autoStartOnBind)
+                {
+                	autoStartOnBind = false;
+                	
+                	startTor();
+                	
+                }
+            
+            } catch (RemoteException e) {
+                // In this case the service has crashed before we could even
+                // do anything with it; we can count on soon being
+                // disconnected (and then reconnected if it can be restarted)
+                // so there is no need to do anything here.
+            	Log.d(TAG,"error registering callback to service",e);
+            }
+            
+
+
+           
+       
+          
+        }
+
+        public void onServiceDisconnected(ComponentName className) {
+            // This is called when the connection with the service has been
+            // unexpectedly disconnected -- that is, its process crashed.
+            mService = null;
+          
+        }
+    };
+    
+    boolean mIsBound = false;
+    
+    private void bindService ()
+    {
+    	 bindService(new Intent(ITorService.class.getName()),
+                 mConnection, Context.BIND_AUTO_CREATE);
+    	 
+    	 mIsBound = true;
+    
+    }
+    
+    private void unbindService ()
+    {
+    	if (mIsBound) {
+            // If we have received the service, and hence registered with
+            // it, then now is the time to unregister.
+            if (mService != null) {
+                try {
+                    mService.unregisterCallback(mCallback);
+                    
+                } catch (RemoteException e) {
+                    // There is nothing special we need to do if the service
+                    // has crashed.
+                }
+            }
+            
+            // Detach our existing connection.
+            unbindService(mConnection);
+            mIsBound = false;
+            
+        }
+    }
+	
+    private void createProgressDialog (String msg)
+    {
+    	if (progressDialog != null && progressDialog.isShowing())
+    		return;
+    	
+    	progressDialog = ProgressDialog.show(Orbot.this, "", msg);	
+		progressDialog.setCancelable(true);
+
+    }
+    
+    private void hideProgressDialog ()
+    {
+
+		if (progressDialog != null && progressDialog.isShowing())
+		{
+			progressDialog.dismiss();
+
+		}
+		
+		
+    }
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,1433 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-package org.torproject.android.service;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import net.freehaven.tor.control.ConfigEntry;
-import net.freehaven.tor.control.EventHandler;
-import net.freehaven.tor.control.TorControlConnection;
-
-import org.torproject.android.AppManager;
-import org.torproject.android.Orbot;
-import org.torproject.android.ProcessSettingsAsyncTask;
-import org.torproject.android.R;
-import org.torproject.android.TorConstants;
-import org.torproject.android.Utils;
-
-import android.app.AlertDialog;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.RemoteCallbackList;
-import android.os.RemoteException;
-import android.preference.PreferenceManager;
-import android.util.Log;
-
-public class TorService extends Service implements TorServiceConstants, Runnable, EventHandler
-{
-	
-	public static boolean ENABLE_DEBUG_LOG = false;
-	
-	private static int currentStatus = STATUS_OFF;
-		
-	private TorControlConnection conn = null;
-	private Socket torConnSocket = null;
-	
-	private static TorService _torInstance;
-	
-	private static final int NOTIFY_ID = 1;
-	
-	private static final int MAX_START_TRIES = 3;
-
-    private ArrayList<String> configBuffer = null;
-    private ArrayList<String> resetBuffer = null;
-     
-   
-    private String appHome;
-    private String appBinHome;
-    private String appDataHome;
-    
-    private String torBinaryPath;
-    private String privoxyPath;
-    
-	
-    private boolean hasRoot = false;
-    
-    /** Called when the activity is first created. */
-    public void onCreate() {
-    	super.onCreate();
-       
-    	logMessage("serviced created");
-      
-    }
-    
-    public static void logMessage(String msg)
-    {
-    	if (ENABLE_DEBUG_LOG)
-    		Log.d(TAG,msg);
-    }
-    
-    public static void logException(String msg, Exception e)
-    {
-    	if (ENABLE_DEBUG_LOG)
-    		Log.e(TAG,msg,e);
-    }
-    
-    
-    private boolean findExistingProc ()
-    {
-    	 int procId = TorServiceUtils.findProcessId(torBinaryPath);
-
- 		if (procId != -1)
- 		{
- 			logNotice("Found existing Tor process");
- 			
-            sendCallbackLogMessage ("found existing Tor process...");
-
- 			try {
- 				currentStatus = STATUS_CONNECTING;
-				
- 				initControlConnection();
-				
-				currentStatus = STATUS_ON;
-				
-				return true;
- 						
-			} catch (RuntimeException e) {
-				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
-				currentStatus = STATUS_OFF;
-				
-			} catch (Exception e) {
-				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
-				currentStatus = STATUS_OFF;
-				
-				
-			}
- 		}
- 		
- 		return false;
-    	 
-    }
-    
-
-    /* (non-Javadoc)
-	 * @see android.app.Service#onLowMemory()
-	 */
-	public void onLowMemory() {
-		super.onLowMemory();
-		
-		logNotice( "Low Memory Warning!");
-		
-	}
-
-
-	/* (non-Javadoc)
-	 * @see android.app.Service#onUnbind(android.content.Intent)
-	 */
-	public boolean onUnbind(Intent intent) {
-		
-	//	logNotice( "onUnbind Called: " + intent.getAction());
-		
-		
-		
-		return super.onUnbind(intent);
-		
-		
-	}
-
-	public int getTorStatus ()
-    {
-    	
-    	return currentStatus;
-    	
-    }
-	
-   
-	private void showToolbarNotification (String notifyMsg, int notifyId, int icon)
-	{
-	
-		
-		NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-
-		
-		CharSequence tickerText = notifyMsg;
-		long when = System.currentTimeMillis();
-
-		Notification notification = new Notification(icon, tickerText, when);
-		
-		Context context = getApplicationContext();
-		CharSequence contentTitle = getString(R.string.app_name);
-		CharSequence contentText = notifyMsg;
-		
-		Intent notificationIntent = new Intent(this, Orbot.class);
-		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
-
-		notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
-
-
-		mNotificationManager.notify(notifyId, notification);
-
-
-	}
-    
-    /* (non-Javadoc)
-	 * @see android.app.Service#onRebind(android.content.Intent)
-	 */
-	public void onRebind(Intent intent) {
-		super.onRebind(intent);
-		
-		
-	}
-
-
-	/* (non-Javadoc)
-	 * @see android.app.Service#onStart(android.content.Intent, int)
-	 */
-	public void onStart(Intent intent, int startId) {
-		super.onStart(intent, startId);
-
-		_torInstance = this;
-		
-    	Log.i(TAG, "service started: " + intent.getAction());
-
-		try {
-			checkTorBinaries ();
-		} catch (Exception e) {
-
-			logNotice("unable to find tor binaries: " + e.getMessage());
-	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
-
-			Log.e(TAG, "error checking tor binaries", e);
-		}
-
-		if (intent.getAction()!=null && intent.getAction().equals("onboot"))
-		{
-			
-		
-			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-			
-			boolean startOnBoot = prefs.getBoolean("pref_start_boot",true);
-			
-			if (startOnBoot)
-			{
-				setTorProfile(PROFILE_ON);
-			}
-		}
-	}
-	 
-	public void run ()
-	{
-		
-		boolean isRunning = _torInstance.findExistingProc ();
-		
-		if (!isRunning)
-		{
-	     try
-	     {
-		   initTor();
-		   isRunning = true;
-	     }
-	     catch (Exception e)
-	     {
-	    	 currentStatus = STATUS_OFF;
-	    	 this.showToolbarNotification(getString(R.string.status_disabled), NOTIFY_ID, R.drawable.tornotificationerr);
-	    	 Log.d(TAG,"Unable to start Tor: " + e.getMessage(),e);
-	     }
-		}
-	}
-
-	
-    public void onDestroy ()
-    {
-    	super.onDestroy();
-    	
-    	Log.d(TAG,"onDestroy called");
-    	
-    	  // Unregister all callbacks.
-        mCallbacks.kill();
-      
-    }
-    
-    private void stopTor ()
-    {
-    	currentStatus = STATUS_OFF;
-    	
-    	try
-    	{	
-    		killTorProcess ();
-				
-    		currentStatus = STATUS_OFF;
-    
-    		showToolbarNotification (getString(R.string.status_disabled),NOTIFY_ID,R.drawable.tornotificationoff);
-    		sendCallbackStatusMessage(getString(R.string.status_disabled));
-
-    		setupTransProxy(false);
-    	}
-    	catch (Exception e)
-    	{
-    		Log.d(TAG, "An error occured stopping Tor",e);
-    		logNotice("An error occured stopping Tor: " + e.getMessage());
-    		sendCallbackStatusMessage("Something bad happened. Check the log");
-
-    	}
-    }
-    
- 
-   
-    /*
-    public void reloadConfig ()
-    {
-    	try
-		{
-	    	if (conn == null)
-			{
-				initControlConnection ();
-			}
-		
-			if (conn != null)
-			{
-				 conn.signal("RELOAD");
-			}
-		}
-    	catch (Exception e)
-    	{
-    		Log.d(TAG,"Unable to reload configuration",e);
-    	}
-    }*/
-    
-    
-    
-	private void getHiddenServiceHostname ()
-	{
-
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		
-        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
-
-        if (enableHiddenServices)
-        {
-	    	File file = new File(appDataHome, "hostname");
-	    	
-	    	if (file.exists())
-	    	{
-		    	try {
-					String onionHostname = Utils.readString(new FileInputStream(file));
-					showToolbarNotification("hidden service on: " + onionHostname, NOTIFY_ID, R.drawable.tornotification);
-					Editor pEdit = prefs.edit();
-					pEdit.putString("pref_hs_hostname",onionHostname);
-					pEdit.commit();
-				
-					
-				} catch (FileNotFoundException e) {
-					logException("unable to read onion hostname file",e);
-					showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
-					return;
-				}
-	    	}
-	    	else
-	    	{
-				showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
-	
-	    		
-	    	}
-        }
-        
-        return;
-	}
-	
-    
-    private void killTorProcess () throws Exception
-    {
-		//android.os.Debug.waitForDebugger();
-    	
-    	StringBuilder log = new StringBuilder();
-    	int procId = -1;
-    	
-    	if (conn != null)
-		{
-    		logNotice("Using control port to shutdown Tor");
-    		
-    		
-			try {
-				logNotice("sending SHUTDOWN signal to Tor process");
-				conn.shutdownTor("SHUTDOWN");
-				
-				
-			} catch (Exception e) {
-				Log.d(TAG,"error shutting down Tor via connection",e);
-			}
-			
-			conn = null;
-		}
-    	
-		while ((procId = TorServiceUtils.findProcessId(torBinaryPath)) != -1)
-		{
-			
-			logNotice("Found Tor PID=" + procId + " - killing now...");
-			
-			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
-			TorServiceUtils.doShellCommand(cmd,log, false, false);
-			try { Thread.sleep(500); }
-			catch (Exception e){}
-		}
-
-		while ((procId = TorServiceUtils.findProcessId(privoxyPath)) != -1)
-		{
-			
-			logNotice("Found Privoxy PID=" + procId + " - killing now...");
-			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
-
-			TorServiceUtils.doShellCommand(cmd,log, false, false);
-			try { Thread.sleep(500); }
-			catch (Exception e){}
-		}
-		
-    }
-   
-    private void logNotice (String msg)
-    {
-    	if (msg != null && msg.trim().length() > 0)
-    	{
-    		if (ENABLE_DEBUG_LOG)        	
-        		Log.d(TAG, msg);
-    	
-    		sendCallbackLogMessage(msg);
-    	}
-    }
-    
-
-    
-    private boolean checkTorBinaries () throws Exception
-    {
-    	//android.os.Debug.waitForDebugger();
-    	
-    	//check and install iptables
-    	Api.assertBinaries(this, true);
-    	
-    	File fileInstall = getDir("",0);
-    	String subBinPath = "bin/";
-    	
-		appHome = fileInstall.getAbsolutePath();
-		appBinHome = appHome + subBinPath;
-		appDataHome = getCacheDir().getAbsolutePath() + '/';
-		logNotice( "appHome=" + appHome);
-		
-		torBinaryPath = appBinHome + TOR_BINARY_ASSET_KEY;
-    	privoxyPath = appBinHome + PRIVOXY_ASSET_KEY;
-    	
-		logNotice( "checking Tor binaries");
-	    
-		boolean torBinaryExists = new File(torBinaryPath).exists();
-		boolean privoxyBinaryExists = new File(privoxyPath).exists();
-		
-		if (!(torBinaryExists && privoxyBinaryExists))
-		{
-			killTorProcess ();
-			
-			TorBinaryInstaller installer = new TorBinaryInstaller(this, appBinHome, appBinHome); 
-			installer.start(true);
-			
-			torBinaryExists = new File(torBinaryPath).exists();
-			privoxyBinaryExists = new File(privoxyPath).exists();
-			
-    		if (torBinaryExists && privoxyBinaryExists)
-    		{
-    			logNotice(getString(R.string.status_install_success));
-    	
-    			showToolbarNotification(getString(R.string.status_install_success), NOTIFY_ID, R.drawable.tornotification);
-    		
-    		}
-    		else
-    		{
-    		
-    			logNotice(getString(R.string.status_install_fail));
-
-    			sendCallbackStatusMessage(getString(R.string.status_install_fail));
-    			
-    			return false;
-    		}
-    		
-		}
-		else
-		{
-			logNotice("Found Tor binary: " + torBinaryPath);
-			logNotice("Found Privoxy binary: " + privoxyPath);
-
-		}
-	
-		StringBuilder log = new StringBuilder ();
-		
-		logNotice("(re)Setting permission on Tor binary");
-		String[] cmd1 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + torBinaryPath};
-		TorServiceUtils.doShellCommand(cmd1, log, false, true);
-		
-		logNotice("(re)Setting permission on Privoxy binary");
-		String[] cmd2 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + privoxyPath};
-		TorServiceUtils.doShellCommand(cmd2, log, false, true);
-		
-		
-		return true;
-    }
-    
-    public void initTor () throws Exception
-    {
-
-    	
-    		currentStatus = STATUS_CONNECTING;
-
-    		logNotice(getString(R.string.status_starting_up));
-    		
-    		sendCallbackStatusMessage(getString(R.string.status_starting_up));
-    		
-    		killTorProcess ();
-    		
-    		try {
-
-
-	    		setupTransProxy(true);
-	    		runTorShellCmd();
-	    		runPrivoxyShellCmd();
-
-			} catch (Exception e) {
-		    	logException("Unable to start Tor: " + e.getMessage(),e);	
-		    	sendCallbackStatusMessage("Unable to start Tor: " + e.getMessage());
-		    	
-		    } 
-    		
-    }
-    
-    /*
-     * activate means whether to apply the users preferences
-     * or clear them out
-     * 
-     * the idea is that if Tor is off then transproxy is off
-     */
-    private boolean setupTransProxy (boolean activate) throws Exception
- 	{
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- 		boolean hasRoot;
- 		
- 		if (prefs.contains("has_root"))
- 		{
- 			hasRoot = prefs.getBoolean("has_root",false);
- 		}
- 		else
- 		{
- 			hasRoot = TorServiceUtils.checkRootAccess();
- 			Editor pEdit = prefs.edit();
- 			pEdit.putBoolean("has_root",hasRoot);
- 			pEdit.commit();
- 		}
- 		
- 		if (!hasRoot)
- 			return false;
- 		
-    	if (activate)
-    	{
-	 		
-	 		boolean enableTransparentProxy = prefs.getBoolean("pref_transparent", false);
-	 		boolean transProxyAll = prefs.getBoolean("pref_transparent_all", false);
-	 		boolean transProxyPortFallback = prefs.getBoolean("pref_transparent_port_fallback", false);
-	 		
-	     	TorService.logMessage ("Transparent Proxying: " + enableTransparentProxy);
-	     	
-	     	String portProxyList = prefs.getString("pref_port_list", "");
-	
-	 		if (enableTransparentProxy)
-	 		{
-	 			//TODO: Find a nice place for the next (commented) line
-				//TorTransProxy.setDNSProxying(); 
-				
-				int code = 0; // Default state is "okay"
-					
-				if(transProxyPortFallback)
-				{
-					showAlert("Status", "Setting up port-based transparent proxying...");
-					StringTokenizer st = new StringTokenizer(portProxyList, ",");
-					int status = code;
-					while (st.hasMoreTokens())
-					{
-						status = TorTransProxy.setTransparentProxyingByPort(this, Integer.parseInt(st.nextToken()));
-						if(status != 0)
-							code = status;
-					}
-				}
-				else
-				{
-					if(transProxyAll)
-					{
-						showAlert("Status", "Setting up full transparent proxying...");
-						code = TorTransProxy.setTransparentProxyingAll(this);
-					}
-					else
-					{
-						showAlert("Status", "Setting up app-based transparent proxying...");
-						code = TorTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this));
-					}
-				}
-			
-				TorService.logMessage ("TorTransProxy resp code: " + code);
-				
-				if (code == 0)
-				{
-					showAlert("Status", "Transparent proxying ENABLED");
-				}
-				else
-				{
-					showAlert("Status", "WARNING: error starting transparent proxying!");
-				}
-			
-				return true;
-	 				
-	 		}
-	 		else
-	 		{
-	 			TorTransProxy.purgeIptables(this);
-				showAlert("Status", "Transparent proxying DISABLED");
-
-	 		}
-    	}
-    	else
-    	{	 	
-    		TorTransProxy.purgeIptables(this);
-			showAlert("Status", "Transparent proxying DISABLED");
-
-    	}
-    	
- 		return true;
- 	}
-    
-    private void runTorShellCmd() throws Exception
-    {
-    	
-    	StringBuilder log = new StringBuilder();
-		
-		String torrcPath = appBinHome + TORRC_ASSET_KEY;
-		
-		String[] torCmd = {torBinaryPath + " DataDirectory " + appDataHome + " -f " + torrcPath  + " || exit\n"};
-		
-		boolean runAsRootFalse = false;
-		boolean waitForProcess = false;
-		
-		int procId = -1;
-		int attempts = 0;
-
-		int torRetryWaitTimeMS = 5000;
-		
-		while (procId == -1 && attempts < MAX_START_TRIES)
-		{
-			log = new StringBuilder();
-			
-			logNotice(torCmd[0]);
-			sendCallbackStatusMessage(getString(R.string.status_starting_up));
-			
-			TorServiceUtils.doShellCommand(torCmd, log, runAsRootFalse, waitForProcess);
-		
-			Thread.sleep(torRetryWaitTimeMS);
-			
-			procId = TorServiceUtils.findProcessId(torBinaryPath);
-			
-			logNotice("got tor proc id: " + procId);
-			
-			if (procId == -1)
-			{
-				
-				sendCallbackStatusMessage("Couldn't start Tor process.\nretrying..." + log.toString());
-				Thread.sleep(torRetryWaitTimeMS);
-				attempts++;
-			}
-			
-			logNotice(log.toString());
-		}
-		
-		if (procId == -1)
-		{
-			throw new Exception ("Unable to start Tor");
-		}
-		else
-		{
-		
-			logNotice("Tor process id=" + procId);
-			
-			showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.tornotification);
-			
-			initControlConnection ();
-
-	        applyPreferences();
-	    }
-    }
-    
-    private void runPrivoxyShellCmd () throws Exception
-    {
-    	
-    	logNotice( "Starting privoxy process");
-    	
-			int privoxyProcId = TorServiceUtils.findProcessId(privoxyPath);
-
-			StringBuilder log = null;
-			
-			int attempts = 0;
-			
-    		if (privoxyProcId == -1)
-    		{
-    			log = new StringBuilder();
-    			
-    			String privoxyConfigPath = appBinHome + PRIVOXYCONFIG_ASSET_KEY;
-    			
-    			String[] cmds = 
-    			{ privoxyPath + " " + privoxyConfigPath + " &" };
-    			
-    			logNotice (cmds[0]); 
-    			
-    			boolean runAsRoot = false;
-    			boolean waitFor = false;
-    			
-    			TorServiceUtils.doShellCommand(cmds, log, runAsRoot, waitFor);
-    			
-    			//wait one second to make sure it has started up
-    			Thread.sleep(1000);
-    			
-    			while ((privoxyProcId = TorServiceUtils.findProcessId(privoxyPath)) == -1  && attempts < MAX_START_TRIES)
-    			{
-    				logNotice("Couldn't find Privoxy process... retrying...\n" + log);
-    				Thread.sleep(3000);
-    				attempts++;
-    			}
-    			
-    			
-    			logNotice(log.toString());
-    		}
-    		
-			sendCallbackLogMessage("Privoxy is running on port: " + PORT_HTTP);
-			
-    		logNotice("Privoxy process id=" + privoxyProcId);
-			
-    		
-    		
-    }
-    
-    /*
-	public String generateHashPassword ()
-	{
-		
-		PasswordDigest d = PasswordDigest.generateDigest();
-	      byte[] s = d.getSecret(); // pass this to authenticate
-	      String h = d.getHashedPassword(); // pass this to the Tor on startup.
-
-		return null;
-	}*/
-	
-	public void initControlConnection () throws Exception, RuntimeException
-	{
-			while (true)
-			{
-				try
-				{
-					logNotice( "Connecting to control port: " + TOR_CONTROL_PORT);
-					
-					String baseMessage = getString(R.string.tor_process_connecting);
-					sendCallbackStatusMessage(baseMessage);
-					
-					torConnSocket = new Socket(IP_LOCALHOST, TOR_CONTROL_PORT);
-			        conn = TorControlConnection.getConnection(torConnSocket);
-			        
-			      //  conn.authenticate(new byte[0]); // See section 3.2
-			        
-					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2));
-
-					logNotice( "SUCCESS connected to control port");
-			        
-			        String torAuthCookie = appDataHome + TOR_CONTROL_COOKIE;
-			        
-			        File fileCookie = new File(torAuthCookie);
-			        
-			        if (fileCookie.exists())
-			        {
-				        byte[] cookie = new byte[(int)fileCookie.length()];
-				        new FileInputStream(new File(torAuthCookie)).read(cookie);
-				        conn.authenticate(cookie);
-				        		
-				        logNotice( "SUCCESS authenticated to control port");
-				        
-						sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2) + getString(R.string.tor_process_connecting_step3));
-	
-				        addEventHandler();
-				        
-			        }
-			        
-			        break; //don't need to retry
-				}
-				catch (Exception ce)
-				{
-					conn = null;
-					Log.d(TAG,"Attempt: Error connecting to control port: " + ce.getLocalizedMessage(),ce);
-					
-					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step4));
-
-					Thread.sleep(1000);
-										
-				}	
-			}
-		
-		
-
-	}
-	
-	
-	/*
-	private void getTorStatus () throws IOException
-	{
-		try
-		{
-			 
-			if (conn != null)
-			{
-				 // get a single value.
-			      
-			       // get several values
-			       
-			       if (currentStatus == STATUS_CONNECTING)
-			       {
-				       //Map vals = conn.getInfo(Arrays.asList(new String[]{
-				         // "status/bootstrap-phase", "status","version"}));
-			
-				       String bsPhase = conn.getInfo("status/bootstrap-phase");
-				       Log.d(TAG, "bootstrap-phase: " + bsPhase);
-				       
-				       
-			       }
-			       else
-			       {
-			    	 //  String status = conn.getInfo("status/circuit-established");
-			    	 //  Log.d(TAG, "status/circuit-established=" + status);
-			       }
-			}
-		}
-		catch (Exception e)
-		{
-			Log.d(TAG, "Unable to get Tor status from control port");
-			currentStatus = STATUS_UNAVAILABLE;
-		}
-		
-	}*/
-	
-	
-	public void addEventHandler () throws IOException
-	{
-	       // We extend NullEventHandler so that we don't need to provide empty
-	       // implementations for all the events we don't care about.
-	       // ...
-		logNotice( "adding control port event handler");
-
-		conn.setEventHandler(this);
-	    
-		conn.setEvents(Arrays.asList(new String[]{
-	          "ORCONN", "CIRC", "NOTICE", "WARN", "ERR"}));
-	      // conn.setEvents(Arrays.asList(new String[]{
-	        //  "DEBUG", "INFO", "NOTICE", "WARN", "ERR"}));
-
-		logNotice( "SUCCESS added control port event handler");
-	    
-	    
-
-	}
-	
-		/**
-		 * Returns the port number that the HTTP proxy is running on
-		 */
-		public int getHTTPPort() throws RemoteException {
-			return TorServiceConstants.PORT_HTTP;
-		}
-
-		/**
-		 * Returns the port number that the SOCKS proxy is running on
-		 */
-		public int getSOCKSPort() throws RemoteException {
-			return TorServiceConstants.PORT_SOCKS;
-		}
-
-
-		
-		
-		public int getProfile() throws RemoteException {
-			//return mProfile;
-			return PROFILE_ON;
-		}
-		
-		public void setTorProfile(int profile)  {
-			logNotice("Tor profile set to " + profile);
-			
-			if (profile == PROFILE_ON)
-			{
- 				currentStatus = STATUS_CONNECTING;
-	            sendCallbackStatusMessage ("starting...");
-
-	            Thread thread = new Thread(this);
-	            thread.start();
-	           
-			}
-			else if (profile == PROFILE_OFF)
-			{
-				currentStatus = STATUS_OFF;
-	            sendCallbackStatusMessage ("shutting down...");
-	            
-				_torInstance.stopTor();
-
-				
-			}
-		}
-
-
-
-	public void message(String severity, String msg) {
-		
-		
-		logNotice(  "[Tor Control Port] " + severity + ": " + msg);
-          
-          if (msg.indexOf(TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)!=-1)
-          {
-        	  currentStatus = STATUS_ON;
-        	
-
-   		   	getHiddenServiceHostname ();
-   		   
-          }
-          
-          
-    	  showToolbarNotification (getString(R.string.status_activated),NOTIFY_ID,R.drawable.tornotificationon);
-    		 
-          sendCallbackStatusMessage (msg);
-          
-	}
-
-	private void showAlert(String title, String msg)
-	{
-		 /*
-		 new AlertDialog.Builder(this)
-         .setTitle(title)
-         .setMessage(msg)
-         .setPositiveButton(android.R.string.ok, null)
-         .show();
-         */
-		showToolbarNotification(msg, NOTIFY_ID, R.drawable.tornotification);
-	}
-	
-	public void newDescriptors(List<String> orList) {
-		
-	}
-
-
-	public void orConnStatus(String status, String orName) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("orConnStatus (");
-			sb.append((orName) );
-			sb.append("): ");
-			sb.append(status);
-			
-			logNotice(sb.toString());
-		}
-	}
-
-
-	public void streamStatus(String status, String streamID, String target) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("StreamStatus (");
-			sb.append((streamID));
-			sb.append("): ");
-			sb.append(status);
-			
-			logNotice(sb.toString());
-		}
-	}
-
-
-	public void unrecognized(String type, String msg) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Message (");
-			sb.append(type);
-			sb.append("): ");
-			sb.append(msg);
-			
-			logNotice(sb.toString());
-		}
-		
-	}
-
-	public void bandwidthUsed(long read, long written) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Bandwidth used: ");
-			sb.append(read/1000);
-			sb.append("kb read / ");
-			sb.append(written/1000);
-			sb.append("kb written");
-			
-			logNotice(sb.toString());
-		}
-
-	}
-
-	public void circuitStatus(String status, String circID, String path) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Circuit (");
-			sb.append((circID));
-			sb.append("): ");
-			sb.append(status);
-			sb.append("; ");
-			sb.append(path);
-			
-			logNotice(sb.toString());
-		}
-		
-	}
-	
-    public IBinder onBind(Intent intent) {
-        // Select the interface to return.  If your service only implements
-        // a single interface, you can just return it here without checking
-        // the Intent.
-        
-    	_torInstance = this;
-    	
-		try
-		{
-	
-			checkTorBinaries();
-    	
-		}
-		catch (Exception e)
-		{
-			logNotice("unable to find tor binaries: " + e.getMessage());
-	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
-
-			Log.d(TAG,"Unable to check for Tor binaries",e);
-			return null;
-		}
-    	
-		findExistingProc ();
-		
-    	if (ITorService.class.getName().equals(intent.getAction())) {
-            return mBinder;
-        }
-        
-
-        return null;
-    }
-	
-    /**
-     * This is a list of callbacks that have been registered with the
-     * service.  Note that this is package scoped (instead of private) so
-     * that it can be accessed more efficiently from inner classes.
-     */
-    final RemoteCallbackList<ITorServiceCallback> mCallbacks
-            = new RemoteCallbackList<ITorServiceCallback>();
-
-
-    /**
-     * The IRemoteInterface is defined through IDL
-     */
-    private final ITorService.Stub mBinder = new ITorService.Stub() {
-    	
-       
-		public void registerCallback(ITorServiceCallback cb) {
-            if (cb != null) mCallbacks.register(cb);
-        }
-        public void unregisterCallback(ITorServiceCallback cb) {
-            if (cb != null) mCallbacks.unregister(cb);
-        }
-        public int getStatus () {
-        	return getTorStatus();
-        }
-        
-        public void setProfile (int profile)
-        {
-        	setTorProfile(profile);
-        	
-        }
-        
-        public void processSettings ()
-        {
-        	
-        	
-        	try {
-				applyPreferences();
-			} catch (RemoteException e) {
-				logException ("error applying prefs",e);
-			}
-        	
-        }
-        
-        
-        
-        public String getConfiguration (String name)
-        {
-        	try
-        	{
-	        	if (conn != null)
-	        	{
-	        		StringBuffer result = new StringBuffer();
-	        		
-	        		List<ConfigEntry> listCe = conn.getConf(name);
-	        		
-	        		Iterator<ConfigEntry> itCe = listCe.iterator();
-	        		ConfigEntry ce = null;
-	        		
-	        		while (itCe.hasNext())
-	        		{
-	        			ce = itCe.next();
-	        			
-	        			result.append(ce.key);
-	        			result.append(' ');
-	        			result.append(ce.value);
-	        			result.append('\n');
-	        		}
-	        		
-	   	       		return result.toString();
-	        	}
-        	}
-        	catch (IOException ioe)
-        	{
-        		Log.e(TAG, "Unable to update Tor configuration", ioe);
-        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
-        	}
-        	
-        	return null;
-        }
-        
-        /**
-         * Set configuration
-         **/
-        public boolean updateConfiguration (String name, String value, boolean saveToDisk)
-        {
-        	if (configBuffer == null)
-        		configBuffer = new ArrayList<String>();
-	        
-        	if (resetBuffer == null)
-        		resetBuffer = new ArrayList<String>();
-	        
-        	if (value == null || value.length() == 0)
-        	{
-        		resetBuffer.add(name);
-        		/*
-        		if (conn != null)
-        		{
-        			try {
-						conn.resetConf(Arrays.asList(new String[]{name}));
-					} catch (IOException e) {
-						Log.w(TAG, "Unable to reset conf",e);
-					}
-        		}*/
-        	}
-        	else
-        		configBuffer.add(name + ' ' + value);
-	        
-        	return false;
-        }
-         
-	    public boolean saveConfiguration ()
-	    {
-	    	try
-        	{
-	        	if (conn != null)
-	        	{
-	        		
-	        		 if (resetBuffer != null && resetBuffer.size() > 0)
-				        {	
-				        	conn.resetConf(resetBuffer);
-				        	resetBuffer = null;
-				        }
-	   	       
-	        		 if (configBuffer != null && configBuffer.size() > 0)
-				        {
-	        			 	
-				        	conn.setConf(configBuffer);
-				        	configBuffer = null;
-				        }
-	   	       
-	   	       		// Flush the configuration to disk.
-	        		//this is doing bad things right now NF 22/07/10
-	   	       		//conn.saveConf();
-	
-	   	       		return true;
-	        	}
-        	}
-        	catch (Exception ioe)
-        	{
-        		Log.e(TAG, "Unable to update Tor configuration", ioe);
-        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
-        	}
-        	
-        	return false;
-        	
-	    }
-    };
-    
-    private ArrayList<String> callbackBuffer = new ArrayList<String>();
-    private boolean inCallbackStatus = false;
-    private boolean inCallback = false;
-    
-    private synchronized void sendCallbackStatusMessage (String newStatus)
-    {
-    	 
-    	if (mCallbacks == null)
-    		return;
-    	
-        // Broadcast to all clients the new value.
-        final int N = mCallbacks.beginBroadcast();
-        
-        inCallback = true;
-        
-        if (N > 0)
-        {
-        	 for (int i=0; i<N; i++) {
-		            try {
-		                mCallbacks.getBroadcastItem(i).statusChanged(newStatus);
-		                
-		                
-		            } catch (RemoteException e) {
-		                // The RemoteCallbackList will take care of removing
-		                // the dead object for us.
-		            }
-		        }
-        }
-        
-        mCallbacks.finishBroadcast();
-        inCallback = false;
-    }
-    
-    private synchronized void sendCallbackLogMessage (String logMessage)
-    {
-    	 
-    	if (mCallbacks == null)
-    		return;
-    	
-    	callbackBuffer.add(logMessage);
-
-    	if (!inCallback)
-    	{
-
-	        inCallback = true;
-	        // Broadcast to all clients the new value.
-	        final int N = mCallbacks.beginBroadcast();
-	        
-	
-	        if (N > 0)
-	        {
-	        
-	        	Iterator<String> it = callbackBuffer.iterator();
-	        	String status = null;
-	        	
-	        	while (it.hasNext())
-	        	{
-	        		status = it.next();
-	        		
-			        for (int i=0; i<N; i++) {
-			            try {
-			                mCallbacks.getBroadcastItem(i).logMessage(status);
-			                
-			            } catch (RemoteException e) {
-			                // The RemoteCallbackList will take care of removing
-			                // the dead object for us.
-			            }
-			        }
-	        	}
-		        
-		        callbackBuffer.clear();
-	        }
-	        
-	        mCallbacks.finishBroadcast();
-	        inCallback = false;
-    	}
-    	
-    }
-    
-    private boolean applyPreferences () throws RemoteException
-    {
-    	
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		
-    	ENABLE_DEBUG_LOG = prefs.getBoolean("pref_enable_logging",false);
-    	Log.i(TAG,"debug logging:" + ENABLE_DEBUG_LOG);
-    		
-		boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
-		
-		//boolean autoUpdateBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_UPDATED, false);
-
-        boolean becomeRelay = prefs.getBoolean(TorConstants.PREF_OR, false);
-
-        boolean ReachableAddresses = prefs.getBoolean(TorConstants.PREF_REACHABLE_ADDRESSES,false);
-
-        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
-
-		//boolean enableTransparentProxy = prefs.getBoolean(TorConstants.PREF_TRANSPARENT, false);
-		
-        if (currentStatus == STATUS_ON)
-        {
-        	//reset iptables rules in active mode
-        
-			try
-			{
-				setupTransProxy(true); 		
-			}
-			catch (Exception e)
-			{
-				logException("unable to setup transproxy",e);
-			}
-        }
-		
-		if (useBridges)
-		{
-			String bridgeList = prefs.getString(TorConstants.PREF_BRIDGES_LIST,"");
-
-			if (bridgeList == null || bridgeList.length() == 0)
-			{
-			
-				showAlert("Bridge Error","In order to use the bridge feature, you must enter at least one bridge IP address." +
-						"Send an email to bridges@xxxxxxxxxxxxxx with the line \"get bridges\" by itself in the body of the mail from a gmail account.");
-				
-			
-				return false;
-			}
-			
-			
-			mBinder.updateConfiguration("UseBridges", "1", false);
-				
-			String bridgeDelim = "\n";
-			
-			if (bridgeList.indexOf(",") != -1)
-			{
-				bridgeDelim = ",";
-			}
-			
-			StringTokenizer st = new StringTokenizer(bridgeList,bridgeDelim);
-			while (st.hasMoreTokens())
-			{
-
-				mBinder.updateConfiguration("bridge", st.nextToken(), false);
-
-			}
-			
-			mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false);
-			
-		}
-		else
-		{
-			mBinder.updateConfiguration("UseBridges", "0", false);
-
-		}
-
-        try
-        {
-            if (ReachableAddresses)
-            {
-                String ReachableAddressesPorts =
-                    prefs.getString(TorConstants.PREF_REACHABLE_ADDRESSES_PORTS, "*:80,*:443");
-                
-                mBinder.updateConfiguration("ReachableAddresses", ReachableAddressesPorts, false);
-
-            }
-            else
-            {
-                mBinder.updateConfiguration("ReachableAddresses", "", false);
-            }
-        }
-        catch (Exception e)
-        {
-           showAlert("Config Error","Your ReachableAddresses settings caused an exception!");
-           
-           return false;
-        }
-
-        try
-        {
-            if (becomeRelay && (!useBridges) && (!ReachableAddresses))
-            {
-                int ORPort =  Integer.parseInt(prefs.getString(TorConstants.PREF_OR_PORT, "9001"));
-                String nickname = prefs.getString(TorConstants.PREF_OR_NICKNAME, "Orbot");
-
-                mBinder.updateConfiguration("ORPort", ORPort + "", false);
-    			mBinder.updateConfiguration("Nickname", nickname, false);
-    			mBinder.updateConfiguration("ExitPolicy", "reject *:*", false);
-
-            }
-            else
-            {
-            	mBinder.updateConfiguration("ORPort", "", false);
-    			mBinder.updateConfiguration("Nickname", "", false);
-    			mBinder.updateConfiguration("ExitPolicy", "", false);
-            }
-        }
-        catch (Exception e)
-        {
-            showAlert("Uh-oh!","Your relay settings caused an exception!");
-          
-            return false;
-        }
-
-        if (enableHiddenServices)
-        {
-        	mBinder.updateConfiguration("HiddenServiceDir",appDataHome, false);
-        	
-        	String hsPorts = prefs.getString("pref_hs_ports","");
-        	
-        	StringTokenizer st = new StringTokenizer (hsPorts,",");
-        	String hsPortConfig = null;
-        	
-        	while (st.hasMoreTokens())
-        	{
-        		hsPortConfig = st.nextToken();
-        		
-        		if (hsPortConfig.indexOf(":")==-1) //setup the port to localhost if not specifed
-        		{
-        			hsPortConfig = hsPortConfig + " 127.0.0.1:" + hsPortConfig;
-        		}
-        		
-        		mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false);
-        	}
-        	
-        	
-        }
-        else
-        {
-        	mBinder.updateConfiguration("HiddenServiceDir","", false);
-        	
-        }
-        
-        mBinder.saveConfiguration();
-	
-        return true;
-    }
-    
-   
-   
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java (from rev 24717, projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,1432 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
+/* See LICENSE for licensing information */
+package org.torproject.android.service;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import net.freehaven.tor.control.ConfigEntry;
+import net.freehaven.tor.control.EventHandler;
+import net.freehaven.tor.control.TorControlConnection;
+
+import org.torproject.android.AppManager;
+import org.torproject.android.Orbot;
+import org.torproject.android.ProcessSettingsAsyncTask;
+import org.torproject.android.R;
+import org.torproject.android.TorConstants;
+import org.torproject.android.Utils;
+
+import android.app.AlertDialog;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteCallbackList;
+import android.os.RemoteException;
+import android.preference.PreferenceManager;
+import android.util.Log;
+
+public class TorService extends Service implements TorServiceConstants, Runnable, EventHandler
+{
+	
+	public static boolean ENABLE_DEBUG_LOG = false;
+	
+	private static int currentStatus = STATUS_OFF;
+		
+	private TorControlConnection conn = null;
+	private Socket torConnSocket = null;
+	
+	private static TorService _torInstance;
+	
+	private static final int NOTIFY_ID = 1;
+	
+	private static final int MAX_START_TRIES = 3;
+
+    private ArrayList<String> configBuffer = null;
+    private ArrayList<String> resetBuffer = null;
+     
+   
+    private String appHome;
+    private String appBinHome;
+    private String appDataHome;
+    
+    private String torBinaryPath;
+    private String privoxyPath;
+    
+	
+    private boolean hasRoot = false;
+    
+    /** Called when the activity is first created. */
+    public void onCreate() {
+    	super.onCreate();
+       
+    	logMessage("serviced created");
+      
+    }
+    
+    public static void logMessage(String msg)
+    {
+    	if (ENABLE_DEBUG_LOG)
+    		Log.d(TAG,msg);
+    }
+    
+    public static void logException(String msg, Exception e)
+    {
+    	if (ENABLE_DEBUG_LOG)
+    		Log.e(TAG,msg,e);
+    }
+    
+    
+    private boolean findExistingProc ()
+    {
+    	 int procId = TorServiceUtils.findProcessId(torBinaryPath);
+
+ 		if (procId != -1)
+ 		{
+ 			logNotice("Found existing Tor process");
+ 			
+            sendCallbackLogMessage ("found existing Tor process...");
+
+ 			try {
+ 				currentStatus = STATUS_CONNECTING;
+				
+ 				initControlConnection();
+				
+				currentStatus = STATUS_ON;
+				
+				return true;
+ 						
+			} catch (RuntimeException e) {
+				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
+				currentStatus = STATUS_OFF;
+				
+			} catch (Exception e) {
+				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
+				currentStatus = STATUS_OFF;
+				
+				
+			}
+ 		}
+ 		
+ 		return false;
+    	 
+    }
+    
+
+    /* (non-Javadoc)
+	 * @see android.app.Service#onLowMemory()
+	 */
+	public void onLowMemory() {
+		super.onLowMemory();
+		
+		logNotice( "Low Memory Warning!");
+		
+	}
+
+
+	/* (non-Javadoc)
+	 * @see android.app.Service#onUnbind(android.content.Intent)
+	 */
+	public boolean onUnbind(Intent intent) {
+		
+	//	logNotice( "onUnbind Called: " + intent.getAction());
+		
+		
+		
+		return super.onUnbind(intent);
+		
+		
+	}
+
+	public int getTorStatus ()
+    {
+    	
+    	return currentStatus;
+    	
+    }
+	
+   
+	private void showToolbarNotification (String notifyMsg, int notifyId, int icon)
+	{
+	
+		
+		NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+		
+		CharSequence tickerText = notifyMsg;
+		long when = System.currentTimeMillis();
+
+		Notification notification = new Notification(icon, tickerText, when);
+		
+		Context context = getApplicationContext();
+		CharSequence contentTitle = getString(R.string.app_name);
+		CharSequence contentText = notifyMsg;
+		
+		Intent notificationIntent = new Intent(this, Orbot.class);
+		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
+
+		notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
+
+
+		mNotificationManager.notify(notifyId, notification);
+
+
+	}
+    
+    /* (non-Javadoc)
+	 * @see android.app.Service#onRebind(android.content.Intent)
+	 */
+	public void onRebind(Intent intent) {
+		super.onRebind(intent);
+		
+		
+	}
+
+
+	/* (non-Javadoc)
+	 * @see android.app.Service#onStart(android.content.Intent, int)
+	 */
+	public void onStart(Intent intent, int startId) {
+		super.onStart(intent, startId);
+
+		_torInstance = this;
+		
+    	Log.i(TAG, "service started: " + intent.getAction());
+
+		try {
+			checkTorBinaries ();
+		} catch (Exception e) {
+
+			logNotice("unable to find tor binaries: " + e.getMessage());
+	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
+
+			Log.e(TAG, "error checking tor binaries", e);
+		}
+
+		if (intent.getAction()!=null && intent.getAction().equals("onboot"))
+		{
+			
+		
+			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+			
+			boolean startOnBoot = prefs.getBoolean("pref_start_boot",true);
+			
+			if (startOnBoot)
+			{
+				setTorProfile(PROFILE_ON);
+			}
+		}
+	}
+	 
+	public void run ()
+	{
+		
+		boolean isRunning = _torInstance.findExistingProc ();
+		
+		if (!isRunning)
+		{
+	     try
+	     {
+		   initTor();
+		   isRunning = true;
+	     }
+	     catch (Exception e)
+	     {
+	    	 currentStatus = STATUS_OFF;
+	    	 this.showToolbarNotification(getString(R.string.status_disabled), NOTIFY_ID, R.drawable.tornotificationerr);
+	    	 Log.d(TAG,"Unable to start Tor: " + e.getMessage(),e);
+	     }
+		}
+	}
+
+	
+    public void onDestroy ()
+    {
+    	super.onDestroy();
+    	
+    	Log.d(TAG,"onDestroy called");
+    	
+    	  // Unregister all callbacks.
+        mCallbacks.kill();
+      
+    }
+    
+    private void stopTor ()
+    {
+    	currentStatus = STATUS_OFF;
+    	
+    	try
+    	{	
+    		killTorProcess ();
+				
+    		currentStatus = STATUS_OFF;
+    
+    		showToolbarNotification (getString(R.string.status_disabled),NOTIFY_ID,R.drawable.tornotificationoff);
+    		sendCallbackStatusMessage(getString(R.string.status_disabled));
+
+    		setupTransProxy(false);
+    	}
+    	catch (Exception e)
+    	{
+    		Log.d(TAG, "An error occured stopping Tor",e);
+    		logNotice("An error occured stopping Tor: " + e.getMessage());
+    		sendCallbackStatusMessage("Something bad happened. Check the log");
+
+    	}
+    }
+    
+ 
+   
+    /*
+    public void reloadConfig ()
+    {
+    	try
+		{
+	    	if (conn == null)
+			{
+				initControlConnection ();
+			}
+		
+			if (conn != null)
+			{
+				 conn.signal("RELOAD");
+			}
+		}
+    	catch (Exception e)
+    	{
+    		Log.d(TAG,"Unable to reload configuration",e);
+    	}
+    }*/
+    
+    
+    
+	private void getHiddenServiceHostname ()
+	{
+
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		
+        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
+
+        if (enableHiddenServices)
+        {
+	    	File file = new File(appDataHome, "hostname");
+	    	
+	    	if (file.exists())
+	    	{
+		    	try {
+					String onionHostname = Utils.readString(new FileInputStream(file));
+					showToolbarNotification("hidden service on: " + onionHostname, NOTIFY_ID, R.drawable.tornotification);
+					Editor pEdit = prefs.edit();
+					pEdit.putString("pref_hs_hostname",onionHostname);
+					pEdit.commit();
+				
+					
+				} catch (FileNotFoundException e) {
+					logException("unable to read onion hostname file",e);
+					showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
+					return;
+				}
+	    	}
+	    	else
+	    	{
+				showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
+	
+	    		
+	    	}
+        }
+        
+        return;
+	}
+	
+    
+    private void killTorProcess () throws Exception
+    {
+		//android.os.Debug.waitForDebugger();
+    	
+    	StringBuilder log = new StringBuilder();
+    	int procId = -1;
+    	
+    	if (conn != null)
+		{
+    		logNotice("Using control port to shutdown Tor");
+    		
+    		
+			try {
+				logNotice("sending SHUTDOWN signal to Tor process");
+				conn.shutdownTor("SHUTDOWN");
+				
+				
+			} catch (Exception e) {
+				Log.d(TAG,"error shutting down Tor via connection",e);
+			}
+			
+			conn = null;
+		}
+    	
+		while ((procId = TorServiceUtils.findProcessId(torBinaryPath)) != -1)
+		{
+			
+			logNotice("Found Tor PID=" + procId + " - killing now...");
+			
+			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
+			TorServiceUtils.doShellCommand(cmd,log, false, false);
+			try { Thread.sleep(500); }
+			catch (Exception e){}
+		}
+
+		while ((procId = TorServiceUtils.findProcessId(privoxyPath)) != -1)
+		{
+			
+			logNotice("Found Privoxy PID=" + procId + " - killing now...");
+			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
+
+			TorServiceUtils.doShellCommand(cmd,log, false, false);
+			try { Thread.sleep(500); }
+			catch (Exception e){}
+		}
+		
+    }
+   
+    private void logNotice (String msg)
+    {
+    	if (msg != null && msg.trim().length() > 0)
+    	{
+    		if (ENABLE_DEBUG_LOG)        	
+        		Log.d(TAG, msg);
+    	
+    		sendCallbackLogMessage(msg);
+    	}
+    }
+    
+
+    
+    private boolean checkTorBinaries () throws Exception
+    {
+    	//android.os.Debug.waitForDebugger();
+    	
+    	//check and install iptables
+    	Api.assertBinaries(this, true);
+    	
+    	File fileInstall = getDir("",0);
+    	String subBinPath = "bin/";
+    	
+		appHome = fileInstall.getAbsolutePath();
+		appBinHome = appHome + subBinPath;
+		appDataHome = getCacheDir().getAbsolutePath() + '/';
+		logNotice( "appHome=" + appHome);
+		
+		torBinaryPath = appBinHome + TOR_BINARY_ASSET_KEY;
+    	privoxyPath = appBinHome + PRIVOXY_ASSET_KEY;
+    	
+		logNotice( "checking Tor binaries");
+	    
+		boolean torBinaryExists = new File(torBinaryPath).exists();
+		boolean privoxyBinaryExists = new File(privoxyPath).exists();
+		
+		if (!(torBinaryExists && privoxyBinaryExists))
+		{
+			killTorProcess ();
+			
+			TorBinaryInstaller installer = new TorBinaryInstaller(this, appBinHome, appBinHome); 
+			installer.start(true);
+			
+			torBinaryExists = new File(torBinaryPath).exists();
+			privoxyBinaryExists = new File(privoxyPath).exists();
+			
+    		if (torBinaryExists && privoxyBinaryExists)
+    		{
+    			logNotice(getString(R.string.status_install_success));
+    	
+    			showToolbarNotification(getString(R.string.status_install_success), NOTIFY_ID, R.drawable.tornotification);
+    		
+    		}
+    		else
+    		{
+    		
+    			logNotice(getString(R.string.status_install_fail));
+
+    			sendCallbackStatusMessage(getString(R.string.status_install_fail));
+    			
+    			return false;
+    		}
+    		
+		}
+		else
+		{
+			logNotice("Found Tor binary: " + torBinaryPath);
+			logNotice("Found Privoxy binary: " + privoxyPath);
+
+		}
+	
+		StringBuilder log = new StringBuilder ();
+		
+		logNotice("(re)Setting permission on Tor binary");
+		String[] cmd1 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + torBinaryPath};
+		TorServiceUtils.doShellCommand(cmd1, log, false, true);
+		
+		logNotice("(re)Setting permission on Privoxy binary");
+		String[] cmd2 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + privoxyPath};
+		TorServiceUtils.doShellCommand(cmd2, log, false, true);
+		
+		
+		return true;
+    }
+    
+    public void initTor () throws Exception
+    {
+
+    	
+    		currentStatus = STATUS_CONNECTING;
+
+    		logNotice(getString(R.string.status_starting_up));
+    		
+    		sendCallbackStatusMessage(getString(R.string.status_starting_up));
+    		
+    		killTorProcess ();
+    		
+    		try {
+
+
+	    		setupTransProxy(true);
+	    		runTorShellCmd();
+	    		runPrivoxyShellCmd();
+
+			} catch (Exception e) {
+		    	logException("Unable to start Tor: " + e.getMessage(),e);	
+		    	sendCallbackStatusMessage("Unable to start Tor: " + e.getMessage());
+		    	
+		    } 
+    		
+    }
+    
+    /*
+     * activate means whether to apply the users preferences
+     * or clear them out
+     * 
+     * the idea is that if Tor is off then transproxy is off
+     */
+    private boolean setupTransProxy (boolean activate) throws Exception
+ 	{
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ 		boolean hasRoot;
+ 		
+ 		if (prefs.contains("has_root"))
+ 		{
+ 			hasRoot = prefs.getBoolean("has_root",false);
+ 		}
+ 		else
+ 		{
+ 			hasRoot = TorServiceUtils.checkRootAccess();
+ 			Editor pEdit = prefs.edit();
+ 			pEdit.putBoolean("has_root",hasRoot);
+ 			pEdit.commit();
+ 		}
+ 		
+ 		if (!hasRoot)
+ 			return false;
+ 		
+    	if (activate)
+    	{
+	 		
+	 		boolean enableTransparentProxy = prefs.getBoolean("pref_transparent", false);
+	 		boolean transProxyAll = prefs.getBoolean("pref_transparent_all", false);
+	 		boolean transProxyPortFallback = prefs.getBoolean("pref_transparent_port_fallback", false);
+	 		
+	     	TorService.logMessage ("Transparent Proxying: " + enableTransparentProxy);
+	     	
+	     	String portProxyList = prefs.getString("pref_port_list", "");
+	
+	 		if (enableTransparentProxy)
+	 		{
+	 			//TODO: Find a nice place for the next (commented) line
+				//TorTransProxy.setDNSProxying(); 
+				
+				int code = 0; // Default state is "okay"
+					
+				if(transProxyPortFallback)
+				{
+					showAlert("Status", "Setting up port-based transparent proxying...");
+					StringTokenizer st = new StringTokenizer(portProxyList, ",");
+					int status = code;
+					while (st.hasMoreTokens())
+					{
+						status = TorTransProxy.setTransparentProxyingByPort(this, Integer.parseInt(st.nextToken()));
+						if(status != 0)
+							code = status;
+					}
+				}
+				else
+				{
+					if(transProxyAll)
+					{
+						showAlert("Status", "Setting up full transparent proxying...");
+						code = TorTransProxy.setTransparentProxyingAll(this);
+					}
+					else
+					{
+						showAlert("Status", "Setting up app-based transparent proxying...");
+						code = TorTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this));
+					}
+				}
+			
+				TorService.logMessage ("TorTransProxy resp code: " + code);
+				
+				if (code == 0)
+				{
+					showAlert("Status", "Transparent proxying ENABLED");
+				}
+				else
+				{
+					showAlert("Status", "WARNING: error starting transparent proxying!");
+				}
+			
+				return true;
+	 				
+	 		}
+	 		else
+	 		{
+	 			TorTransProxy.purgeIptables(this);
+				showAlert("Status", "Transparent proxying: DISABLED");
+	 		}
+    	}
+    	else
+    	{	 	
+    		TorTransProxy.purgeIptables(this);
+			showAlert("Status", "Transparent proxying: DISABLED");
+
+    	}
+    	
+ 		return true;
+ 	}
+    
+    private void runTorShellCmd() throws Exception
+    {
+    	
+    	StringBuilder log = new StringBuilder();
+		
+		String torrcPath = appBinHome + TORRC_ASSET_KEY;
+		
+		String[] torCmd = {torBinaryPath + " DataDirectory " + appDataHome + " -f " + torrcPath  + " || exit\n"};
+		
+		boolean runAsRootFalse = false;
+		boolean waitForProcess = false;
+		
+		int procId = -1;
+		int attempts = 0;
+
+		int torRetryWaitTimeMS = 5000;
+		
+		while (procId == -1 && attempts < MAX_START_TRIES)
+		{
+			log = new StringBuilder();
+			
+			logNotice(torCmd[0]);
+			sendCallbackStatusMessage(getString(R.string.status_starting_up));
+			
+			TorServiceUtils.doShellCommand(torCmd, log, runAsRootFalse, waitForProcess);
+		
+			Thread.sleep(torRetryWaitTimeMS);
+			
+			procId = TorServiceUtils.findProcessId(torBinaryPath);
+			
+			logNotice("got tor proc id: " + procId);
+			
+			if (procId == -1)
+			{
+				
+				sendCallbackStatusMessage("Couldn't start Tor process.\nretrying..." + log.toString());
+				Thread.sleep(torRetryWaitTimeMS);
+				attempts++;
+			}
+			
+			logNotice(log.toString());
+		}
+		
+		if (procId == -1)
+		{
+			throw new Exception ("Unable to start Tor");
+		}
+		else
+		{
+		
+			logNotice("Tor process id=" + procId);
+			
+			showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.tornotification);
+			
+			initControlConnection ();
+
+	        applyPreferences();
+	    }
+    }
+    
+    private void runPrivoxyShellCmd () throws Exception
+    {
+    	
+    	logNotice( "Starting privoxy process");
+    	
+			int privoxyProcId = TorServiceUtils.findProcessId(privoxyPath);
+
+			StringBuilder log = null;
+			
+			int attempts = 0;
+			
+    		if (privoxyProcId == -1)
+    		{
+    			log = new StringBuilder();
+    			
+    			String privoxyConfigPath = appBinHome + PRIVOXYCONFIG_ASSET_KEY;
+    			
+    			String[] cmds = 
+    			{ privoxyPath + " " + privoxyConfigPath + " &" };
+    			
+    			logNotice (cmds[0]); 
+    			
+    			boolean runAsRoot = false;
+    			boolean waitFor = false;
+    			
+    			TorServiceUtils.doShellCommand(cmds, log, runAsRoot, waitFor);
+    			
+    			//wait one second to make sure it has started up
+    			Thread.sleep(1000);
+    			
+    			while ((privoxyProcId = TorServiceUtils.findProcessId(privoxyPath)) == -1  && attempts < MAX_START_TRIES)
+    			{
+    				logNotice("Couldn't find Privoxy process... retrying...\n" + log);
+    				Thread.sleep(3000);
+    				attempts++;
+    			}
+    			
+    			
+    			logNotice(log.toString());
+    		}
+    		
+			sendCallbackLogMessage("Privoxy is running on port: " + PORT_HTTP);
+			
+    		logNotice("Privoxy process id=" + privoxyProcId);
+			
+    		
+    		
+    }
+    
+    /*
+	public String generateHashPassword ()
+	{
+		
+		PasswordDigest d = PasswordDigest.generateDigest();
+	      byte[] s = d.getSecret(); // pass this to authenticate
+	      String h = d.getHashedPassword(); // pass this to the Tor on startup.
+
+		return null;
+	}*/
+	
+	public void initControlConnection () throws Exception, RuntimeException
+	{
+			while (true)
+			{
+				try
+				{
+					logNotice( "Connecting to control port: " + TOR_CONTROL_PORT);
+					
+					String baseMessage = getString(R.string.tor_process_connecting);
+					sendCallbackStatusMessage(baseMessage);
+					
+					torConnSocket = new Socket(IP_LOCALHOST, TOR_CONTROL_PORT);
+			        conn = TorControlConnection.getConnection(torConnSocket);
+			        
+			      //  conn.authenticate(new byte[0]); // See section 3.2
+			        
+					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2));
+
+					logNotice( "SUCCESS connected to control port");
+			        
+			        String torAuthCookie = appDataHome + TOR_CONTROL_COOKIE;
+			        
+			        File fileCookie = new File(torAuthCookie);
+			        
+			        if (fileCookie.exists())
+			        {
+				        byte[] cookie = new byte[(int)fileCookie.length()];
+				        new FileInputStream(new File(torAuthCookie)).read(cookie);
+				        conn.authenticate(cookie);
+				        		
+				        logNotice( "SUCCESS authenticated to control port");
+				        
+						sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2) + getString(R.string.tor_process_connecting_step3));
+	
+				        addEventHandler();
+				        
+			        }
+			        
+			        break; //don't need to retry
+				}
+				catch (Exception ce)
+				{
+					conn = null;
+					Log.d(TAG,"Attempt: Error connecting to control port: " + ce.getLocalizedMessage(),ce);
+					
+					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step4));
+
+					Thread.sleep(1000);
+										
+				}	
+			}
+		
+		
+
+	}
+	
+	
+	/*
+	private void getTorStatus () throws IOException
+	{
+		try
+		{
+			 
+			if (conn != null)
+			{
+				 // get a single value.
+			      
+			       // get several values
+			       
+			       if (currentStatus == STATUS_CONNECTING)
+			       {
+				       //Map vals = conn.getInfo(Arrays.asList(new String[]{
+				         // "status/bootstrap-phase", "status","version"}));
+			
+				       String bsPhase = conn.getInfo("status/bootstrap-phase");
+				       Log.d(TAG, "bootstrap-phase: " + bsPhase);
+				       
+				       
+			       }
+			       else
+			       {
+			    	 //  String status = conn.getInfo("status/circuit-established");
+			    	 //  Log.d(TAG, "status/circuit-established=" + status);
+			       }
+			}
+		}
+		catch (Exception e)
+		{
+			Log.d(TAG, "Unable to get Tor status from control port");
+			currentStatus = STATUS_UNAVAILABLE;
+		}
+		
+	}*/
+	
+	
+	public void addEventHandler () throws IOException
+	{
+	       // We extend NullEventHandler so that we don't need to provide empty
+	       // implementations for all the events we don't care about.
+	       // ...
+		logNotice( "adding control port event handler");
+
+		conn.setEventHandler(this);
+	    
+		conn.setEvents(Arrays.asList(new String[]{
+	          "ORCONN", "CIRC", "NOTICE", "WARN", "ERR"}));
+	      // conn.setEvents(Arrays.asList(new String[]{
+	        //  "DEBUG", "INFO", "NOTICE", "WARN", "ERR"}));
+
+		logNotice( "SUCCESS added control port event handler");
+	    
+	    
+
+	}
+	
+		/**
+		 * Returns the port number that the HTTP proxy is running on
+		 */
+		public int getHTTPPort() throws RemoteException {
+			return TorServiceConstants.PORT_HTTP;
+		}
+
+		/**
+		 * Returns the port number that the SOCKS proxy is running on
+		 */
+		public int getSOCKSPort() throws RemoteException {
+			return TorServiceConstants.PORT_SOCKS;
+		}
+
+
+		
+		
+		public int getProfile() throws RemoteException {
+			//return mProfile;
+			return PROFILE_ON;
+		}
+		
+		public void setTorProfile(int profile)  {
+			logNotice("Tor profile set to " + profile);
+			
+			if (profile == PROFILE_ON)
+			{
+ 				currentStatus = STATUS_CONNECTING;
+	            sendCallbackStatusMessage ("starting...");
+
+	            Thread thread = new Thread(this);
+	            thread.start();
+	           
+			}
+			else if (profile == PROFILE_OFF)
+			{
+				currentStatus = STATUS_OFF;
+	            sendCallbackStatusMessage ("shutting down...");
+	            
+				_torInstance.stopTor();
+
+				
+			}
+		}
+
+
+
+	public void message(String severity, String msg) {
+		
+		
+		logNotice(  "[Tor Control Port] " + severity + ": " + msg);
+          
+          if (msg.indexOf(TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)!=-1)
+          {
+        	  currentStatus = STATUS_ON;
+        	
+
+   		   	getHiddenServiceHostname ();
+   		   
+          }
+          
+          
+    	  showToolbarNotification (getString(R.string.status_activated),NOTIFY_ID,R.drawable.tornotificationon);
+    		 
+          sendCallbackStatusMessage (msg);
+          
+	}
+
+	private void showAlert(String title, String msg)
+	{
+		 /*
+		 new AlertDialog.Builder(this)
+         .setTitle(title)
+         .setMessage(msg)
+         .setPositiveButton(android.R.string.ok, null)
+         .show();
+         */
+		showToolbarNotification(msg, NOTIFY_ID, R.drawable.tornotification);
+	}
+	
+	public void newDescriptors(List<String> orList) {
+		
+	}
+
+
+	public void orConnStatus(String status, String orName) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("orConnStatus (");
+			sb.append((orName) );
+			sb.append("): ");
+			sb.append(status);
+			
+			logNotice(sb.toString());
+		}
+	}
+
+
+	public void streamStatus(String status, String streamID, String target) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("StreamStatus (");
+			sb.append((streamID));
+			sb.append("): ");
+			sb.append(status);
+			
+			logNotice(sb.toString());
+		}
+	}
+
+
+	public void unrecognized(String type, String msg) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Message (");
+			sb.append(type);
+			sb.append("): ");
+			sb.append(msg);
+			
+			logNotice(sb.toString());
+		}
+		
+	}
+
+	public void bandwidthUsed(long read, long written) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Bandwidth used: ");
+			sb.append(read/1000);
+			sb.append("kb read / ");
+			sb.append(written/1000);
+			sb.append("kb written");
+			
+			logNotice(sb.toString());
+		}
+
+	}
+
+	public void circuitStatus(String status, String circID, String path) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Circuit (");
+			sb.append((circID));
+			sb.append("): ");
+			sb.append(status);
+			sb.append("; ");
+			sb.append(path);
+			
+			logNotice(sb.toString());
+		}
+		
+	}
+	
+    public IBinder onBind(Intent intent) {
+        // Select the interface to return.  If your service only implements
+        // a single interface, you can just return it here without checking
+        // the Intent.
+        
+    	_torInstance = this;
+    	
+		try
+		{
+	
+			checkTorBinaries();
+    	
+		}
+		catch (Exception e)
+		{
+			logNotice("unable to find tor binaries: " + e.getMessage());
+	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
+
+			Log.d(TAG,"Unable to check for Tor binaries",e);
+			return null;
+		}
+    	
+		findExistingProc ();
+		
+    	if (ITorService.class.getName().equals(intent.getAction())) {
+            return mBinder;
+        }
+        
+
+        return null;
+    }
+	
+    /**
+     * This is a list of callbacks that have been registered with the
+     * service.  Note that this is package scoped (instead of private) so
+     * that it can be accessed more efficiently from inner classes.
+     */
+    final RemoteCallbackList<ITorServiceCallback> mCallbacks
+            = new RemoteCallbackList<ITorServiceCallback>();
+
+
+    /**
+     * The IRemoteInterface is defined through IDL
+     */
+    private final ITorService.Stub mBinder = new ITorService.Stub() {
+    	
+       
+		public void registerCallback(ITorServiceCallback cb) {
+            if (cb != null) mCallbacks.register(cb);
+        }
+        public void unregisterCallback(ITorServiceCallback cb) {
+            if (cb != null) mCallbacks.unregister(cb);
+        }
+        public int getStatus () {
+        	return getTorStatus();
+        }
+        
+        public void setProfile (int profile)
+        {
+        	setTorProfile(profile);
+        	
+        }
+        
+        public void processSettings ()
+        {
+        	
+        	
+        	try {
+				applyPreferences();
+			} catch (RemoteException e) {
+				logException ("error applying prefs",e);
+			}
+        	
+        }
+        
+        
+        
+        public String getConfiguration (String name)
+        {
+        	try
+        	{
+	        	if (conn != null)
+	        	{
+	        		StringBuffer result = new StringBuffer();
+	        		
+	        		List<ConfigEntry> listCe = conn.getConf(name);
+	        		
+	        		Iterator<ConfigEntry> itCe = listCe.iterator();
+	        		ConfigEntry ce = null;
+	        		
+	        		while (itCe.hasNext())
+	        		{
+	        			ce = itCe.next();
+	        			
+	        			result.append(ce.key);
+	        			result.append(' ');
+	        			result.append(ce.value);
+	        			result.append('\n');
+	        		}
+	        		
+	   	       		return result.toString();
+	        	}
+        	}
+        	catch (IOException ioe)
+        	{
+        		Log.e(TAG, "Unable to update Tor configuration", ioe);
+        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
+        	}
+        	
+        	return null;
+        }
+        
+        /**
+         * Set configuration
+         **/
+        public boolean updateConfiguration (String name, String value, boolean saveToDisk)
+        {
+        	if (configBuffer == null)
+        		configBuffer = new ArrayList<String>();
+	        
+        	if (resetBuffer == null)
+        		resetBuffer = new ArrayList<String>();
+	        
+        	if (value == null || value.length() == 0)
+        	{
+        		resetBuffer.add(name);
+        		/*
+        		if (conn != null)
+        		{
+        			try {
+						conn.resetConf(Arrays.asList(new String[]{name}));
+					} catch (IOException e) {
+						Log.w(TAG, "Unable to reset conf",e);
+					}
+        		}*/
+        	}
+        	else
+        		configBuffer.add(name + ' ' + value);
+	        
+        	return false;
+        }
+         
+	    public boolean saveConfiguration ()
+	    {
+	    	try
+        	{
+	        	if (conn != null)
+	        	{
+	        		
+	        		 if (resetBuffer != null && resetBuffer.size() > 0)
+				        {	
+				        	conn.resetConf(resetBuffer);
+				        	resetBuffer = null;
+				        }
+	   	       
+	        		 if (configBuffer != null && configBuffer.size() > 0)
+				        {
+	        			 	
+				        	conn.setConf(configBuffer);
+				        	configBuffer = null;
+				        }
+	   	       
+	   	       		// Flush the configuration to disk.
+	        		//this is doing bad things right now NF 22/07/10
+	   	       		//conn.saveConf();
+	
+	   	       		return true;
+	        	}
+        	}
+        	catch (Exception ioe)
+        	{
+        		Log.e(TAG, "Unable to update Tor configuration", ioe);
+        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
+        	}
+        	
+        	return false;
+        	
+	    }
+    };
+    
+    private ArrayList<String> callbackBuffer = new ArrayList<String>();
+    private boolean inCallbackStatus = false;
+    private boolean inCallback = false;
+    
+    private synchronized void sendCallbackStatusMessage (String newStatus)
+    {
+    	 
+    	if (mCallbacks == null)
+    		return;
+    	
+        // Broadcast to all clients the new value.
+        final int N = mCallbacks.beginBroadcast();
+        
+        inCallback = true;
+        
+        if (N > 0)
+        {
+        	 for (int i=0; i<N; i++) {
+		            try {
+		                mCallbacks.getBroadcastItem(i).statusChanged(newStatus);
+		                
+		                
+		            } catch (RemoteException e) {
+		                // The RemoteCallbackList will take care of removing
+		                // the dead object for us.
+		            }
+		        }
+        }
+        
+        mCallbacks.finishBroadcast();
+        inCallback = false;
+    }
+    
+    private synchronized void sendCallbackLogMessage (String logMessage)
+    {
+    	 
+    	if (mCallbacks == null)
+    		return;
+    	
+    	callbackBuffer.add(logMessage);
+
+    	if (!inCallback)
+    	{
+
+	        inCallback = true;
+	        // Broadcast to all clients the new value.
+	        final int N = mCallbacks.beginBroadcast();
+	        
+	
+	        if (N > 0)
+	        {
+	        
+	        	Iterator<String> it = callbackBuffer.iterator();
+	        	String status = null;
+	        	
+	        	while (it.hasNext())
+	        	{
+	        		status = it.next();
+	        		
+			        for (int i=0; i<N; i++) {
+			            try {
+			                mCallbacks.getBroadcastItem(i).logMessage(status);
+			                
+			            } catch (RemoteException e) {
+			                // The RemoteCallbackList will take care of removing
+			                // the dead object for us.
+			            }
+			        }
+	        	}
+		        
+		        callbackBuffer.clear();
+	        }
+	        
+	        mCallbacks.finishBroadcast();
+	        inCallback = false;
+    	}
+    	
+    }
+    
+    private boolean applyPreferences () throws RemoteException
+    {
+    	
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		
+    	ENABLE_DEBUG_LOG = prefs.getBoolean("pref_enable_logging",false);
+    	Log.i(TAG,"debug logging:" + ENABLE_DEBUG_LOG);
+    		
+		boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
+		
+		//boolean autoUpdateBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_UPDATED, false);
+
+        boolean becomeRelay = prefs.getBoolean(TorConstants.PREF_OR, false);
+
+        boolean ReachableAddresses = prefs.getBoolean(TorConstants.PREF_REACHABLE_ADDRESSES,false);
+
+        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
+
+		//boolean enableTransparentProxy = prefs.getBoolean(TorConstants.PREF_TRANSPARENT, false);
+		
+        if (currentStatus == STATUS_ON)
+        {
+        	//reset iptables rules in active mode
+        
+			try
+			{
+				setupTransProxy(true); 		
+			}
+			catch (Exception e)
+			{
+				logException("unable to setup transproxy",e);
+			}
+        }
+		
+		if (useBridges)
+		{
+			String bridgeList = prefs.getString(TorConstants.PREF_BRIDGES_LIST,"");
+
+			if (bridgeList == null || bridgeList.length() == 0)
+			{
+			
+				showAlert("Bridge Error","In order to use the bridge feature, you must enter at least one bridge IP address." +
+						"Send an email to bridges@xxxxxxxxxxxxxx with the line \"get bridges\" by itself in the body of the mail from a gmail account.");
+				
+			
+				return false;
+			}
+			
+			
+			mBinder.updateConfiguration("UseBridges", "1", false);
+				
+			String bridgeDelim = "\n";
+			
+			if (bridgeList.indexOf(",") != -1)
+			{
+				bridgeDelim = ",";
+			}
+			
+			StringTokenizer st = new StringTokenizer(bridgeList,bridgeDelim);
+			while (st.hasMoreTokens())
+			{
+
+				mBinder.updateConfiguration("bridge", st.nextToken(), false);
+
+			}
+			
+			mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false);
+			
+		}
+		else
+		{
+			mBinder.updateConfiguration("UseBridges", "0", false);
+
+		}
+
+        try
+        {
+            if (ReachableAddresses)
+            {
+                String ReachableAddressesPorts =
+                    prefs.getString(TorConstants.PREF_REACHABLE_ADDRESSES_PORTS, "*:80,*:443");
+                
+                mBinder.updateConfiguration("ReachableAddresses", ReachableAddressesPorts, false);
+
+            }
+            else
+            {
+                mBinder.updateConfiguration("ReachableAddresses", "", false);
+            }
+        }
+        catch (Exception e)
+        {
+           showAlert("Config Error","Your ReachableAddresses settings caused an exception!");
+           
+           return false;
+        }
+
+        try
+        {
+            if (becomeRelay && (!useBridges) && (!ReachableAddresses))
+            {
+                int ORPort =  Integer.parseInt(prefs.getString(TorConstants.PREF_OR_PORT, "9001"));
+                String nickname = prefs.getString(TorConstants.PREF_OR_NICKNAME, "Orbot");
+
+                mBinder.updateConfiguration("ORPort", ORPort + "", false);
+    			mBinder.updateConfiguration("Nickname", nickname, false);
+    			mBinder.updateConfiguration("ExitPolicy", "reject *:*", false);
+
+            }
+            else
+            {
+            	mBinder.updateConfiguration("ORPort", "", false);
+    			mBinder.updateConfiguration("Nickname", "", false);
+    			mBinder.updateConfiguration("ExitPolicy", "", false);
+            }
+        }
+        catch (Exception e)
+        {
+            showAlert("Uh-oh!","Your relay settings caused an exception!");
+          
+            return false;
+        }
+
+        if (enableHiddenServices)
+        {
+        	mBinder.updateConfiguration("HiddenServiceDir",appDataHome, false);
+        	
+        	String hsPorts = prefs.getString("pref_hs_ports","");
+        	
+        	StringTokenizer st = new StringTokenizer (hsPorts,",");
+        	String hsPortConfig = null;
+        	
+        	while (st.hasMoreTokens())
+        	{
+        		hsPortConfig = st.nextToken();
+        		
+        		if (hsPortConfig.indexOf(":")==-1) //setup the port to localhost if not specifed
+        		{
+        			hsPortConfig = hsPortConfig + " 127.0.0.1:" + hsPortConfig;
+        		}
+        		
+        		mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false);
+        	}
+        	
+        	
+        }
+        else
+        {
+        	mBinder.updateConfiguration("HiddenServiceDir","", false);
+        	
+        }
+        
+        mBinder.saveConfiguration();
+	
+        return true;
+    }
+    
+   
+   
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,434 +0,0 @@
-package org.torproject.android.service;
-
-import java.io.File;
-
-import org.torproject.android.TorifiedApp;
-
-import android.content.Context;
-import android.util.Log;
-
-public class TorTransProxy implements TorServiceConstants {
-	
-	private final static String TAG = TorServiceConstants.TAG;
-		
-
-	
-	public static int purgeIptables(Context context) throws Exception {
-		
-	String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	final StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -F || exit\n");
-	
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -F || exit\n");
-    	
-    	String[] cmd = {script.toString()};	    	
-		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
-		String msg = res.toString();
-		
-		TorService.logMessage(cmd[0] + ";errCode=" + code + ";resp=" + msg);
-			
-		
-		return code;
-	
-	}
-	
-	/*
-	public static int purgeIptablesByApp(Context context, TorifiedApp[] apps) throws Exception {
-
-		//restoreDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	final StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		for (int i = 0; i < apps.length; i++)
-		{
-			//flush nat for every app
-			script.append(ipTablesPath);
-			script.append(" -t nat -m owner --uid-owner ");
-			script.append(apps[i].getUid());
-			script.append(" -F || exit\n");
-		
-			script.append(ipTablesPath);
-			script.append(" -t filter -m owner --uid-owner ");
-			script.append(apps[i].getUid());
-			script.append(" -F || exit\n");
-				
-		}
-		
-    	
-    	String[] cmd = {script.toString()};	    	
-		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
-		String msg = res.toString();
-		logNotice(cmd[0] + ";errCode=" + code + ";resp=" + msg);
-			
-		
-		return code;
-		
-	}*/
-	
-	
-	/*
-	 // 9/19/2010 - NF This code is in process... /etc path on System partition
-	 // is read-only on Android for now.
-	public static int redirectDNSResolvConf () throws Exception
-	{
-    	StringBuilder script = new StringBuilder();
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		//mv resolv.conf to resolve.conf.bak
-		String cmd = "mv /etc/resolv.conf /etc/resolv.conf.bak";
-		script.append(cmd);
-		
-		//create new resolve.conf pointing to localhost/127.0.0.1
-		cmd = "echo \"nameserver 127.0.0.1\" > /etc/resolv.conf";
-		script.append(cmd);
-		
-		String[] cmdFlush = {script.toString()};
-		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
-		//String msg = res.toString(); //get stdout from command
-		
-		
-		return code;
-	}
-	
-	public static int restoreDNSResolvConf () throws Exception
-	{
-		StringBuilder script = new StringBuilder();
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		//mv resolv.conf to resolve.conf.bak
-		String cmd = "mv /etc/resolv.conf.bak /etc/resolv.conf";
-		script.append(cmd);
-		script.append(" || exit\n");
-		
-		String[] cmdFlush = {script.toString()};
-		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
-		//String msg = res.toString(); //get stdout from command
-		
-		return code;
-	}
-	*/
-	
-	public static int testOwnerModule(Context context) throws Exception
-	{
-
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-    	int torUid = context.getApplicationInfo().uid;
-
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	// Allow everything for Tor
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -m owner --uid-owner ");
-		script.append(torUid);
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		
-		return code;
-    }	
-	
-	
-	
-	public static int setTransparentProxyingByApp(Context context, TorifiedApp[] apps) throws Exception
-	{
-
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	purgeIptables(context);
-				
-		//build up array of shell cmds to execute under one root context
-		for (int i = 0; i < apps.length; i++)
-		{
-
-			if (apps[i].isTorified()) //if app is set to true
-			{
-				
-				if (apps[i].getUsername().equals(TorServiceConstants.TOR_APP_USERNAME))
-				{
-					//should never trans proxy the Orbot app (and Tor or Privoxy) itself
-					continue;
-				}
-				
-				TorService.logMessage("enabling transproxy for app: " + apps[i].getUsername() + "(" + apps[i].getUid() + ")");
-			 
-				//TCP
-				script.append(ipTablesPath);
-				script.append(" -t nat");
-				script.append(" -A OUTPUT -p tcp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m tcp --syn");
-				script.append(" -j REDIRECT --to-ports ");
-				script.append(TOR_TRANSPROXY_PORT);
-				script.append(" || exit\n");
-				
-				//DNS
-				script.append(ipTablesPath);
-				script.append(" -t nat");
-				script.append(" -A OUTPUT -p udp -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m udp --dport "); 
-				script.append(STANDARD_DNS_PORT);
-				script.append(" -j REDIRECT --to-ports ");
-				script.append(TOR_DNS_PORT);
-				script.append(" || exit\n");
-				
-				script.append(ipTablesPath);
-				script.append(" -t filter");
-				script.append(" -A OUTPUT -p tcp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m tcp --dport ");
-				script.append(TOR_TRANSPROXY_PORT);
-				script.append(" -j ACCEPT");
-				script.append(" || exit\n");
-				
-				script.append(ipTablesPath);
-				script.append(" -t filter");
-				script.append(" -A OUTPUT -p udp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m udp --dport ");
-				script.append(TOR_DNS_PORT);
-				script.append(" -j ACCEPT");
-				script.append(" || exit\n");
-									
-				script.append(ipTablesPath);
-				script.append(" -t filter -A OUTPUT -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -j DROP"); //drop all other packets as Tor won't handle them
-				script.append(" || exit\n");
-				
-				
-			}		
-		}
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		
-		return code;
-    }	
-	
-	public static int setTransparentProxyingByPort(Context context, int port) throws Exception
-	{
-
-		//android.os.Debug.waitForDebugger();
-		
-		//redirectDNSResolvConf(); //not working yet
-		
-		//String baseDir = context.getDir("bin",0).getAbsolutePath() + '/';
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	purgeIptables(context);
-		
-		//TCP
-		//iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $srcPortNumber -j REDIRECT --to-port $dstPortNumbe
-
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p tcp");
-		script.append(" --dport ");
-		script.append(port);
-		//script.append(" -m tcp --syn");
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp");
-		script.append(" --dport ");
-		script.append(port);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		//DNS
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp ");
-		script.append(" -m udp --dport "); 
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_DNS_PORT);
-		script.append(" || exit\n");
-		
-    	
-    	String[] cmdAdd = {script.toString()};    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		return code;
-    }
-
-	public static int setTransparentProxyingAll(Context context) throws Exception 
-	{
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	purgeIptables(context);
-    	
-    	int torUid = context.getApplicationInfo().uid;
-
-    	// Set up port redirection
-    	script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p tcp");
-		script.append(" -m owner ! --uid-owner ");
-		script.append(torUid);
-		script.append(" -m tcp --syn");
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		// Same for DNS
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp -m owner ! --uid-owner ");
-		script.append(torUid);
-		script.append(" -m udp --dport "); 
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_DNS_PORT);
-		script.append(" || exit\n");
-		
-		// Allow packets to localhost (contains all the port-redirected ones)
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -d 127.0.0.1");
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		// Allow loopback
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -o lo");
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		// Allow everything for Tor
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -m owner --uid-owner ");
-		script.append(torUid);
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		if (TorService.ENABLE_DEBUG_LOG)
-		{
-			//XXX: Comment the following rules for non-debug builds
-			script.append(ipTablesPath);
-			script.append(" -t filter");
-			script.append(" -A OUTPUT");
-			script.append(" -p udp");
-			script.append(" --dport ");
-			script.append(STANDARD_DNS_PORT);
-			script.append(" -j LOG");
-			script.append(" --log-prefix='ORBOT_DNSLEAK_PROTECTION'");
-			script.append(" --log-uid");
-			script.append(" || exit\n");
-			script.append(ipTablesPath);
-			script.append(" -t filter");
-			script.append(" -A OUTPUT");
-			script.append(" -p tcp");
-			script.append(" -j LOG");
-			script.append(" --log-prefix='ORBOT_TCPLEAK_PROTECTION'");
-			script.append(" --log-uid");
-			script.append(" || exit\n");
-		}
-		
-		// Reject DNS that is not from Tor (order is important - first matched rule counts!)
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p udp");
-		script.append(" --dport ");
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REJECT");
-		script.append(" || exit\n");
-		
-		// Reject all other outbound TCP packets
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -j REJECT");
-		script.append(" || exit\n");
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-    	return code;
-	}	
-	
-
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java (from rev 24735, projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,479 @@
+package org.torproject.android.service;
+
+import java.io.File;
+
+import org.torproject.android.TorifiedApp;
+
+import android.content.Context;
+import android.util.Log;
+
+public class TorTransProxy implements TorServiceConstants {
+	
+	private final static String TAG = TorServiceConstants.TAG;
+		
+
+	
+	public static int purgeIptables(Context context) throws Exception {
+		
+	String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	final StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -F || exit\n");
+	
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -F || exit\n");
+    	
+    	String[] cmd = {script.toString()};	    	
+		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
+		String msg = res.toString();
+		
+		TorService.logMessage(cmd[0] + ";errCode=" + code + ";resp=" + msg);
+			
+		
+		return code;
+	
+	}
+	
+	/*
+	public static int purgeIptablesByApp(Context context, TorifiedApp[] apps) throws Exception {
+
+		//restoreDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	final StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		for (int i = 0; i < apps.length; i++)
+		{
+			//flush nat for every app
+			script.append(ipTablesPath);
+			script.append(" -t nat -m owner --uid-owner ");
+			script.append(apps[i].getUid());
+			script.append(" -F || exit\n");
+		
+			script.append(ipTablesPath);
+			script.append(" -t filter -m owner --uid-owner ");
+			script.append(apps[i].getUid());
+			script.append(" -F || exit\n");
+				
+		}
+		
+    	
+    	String[] cmd = {script.toString()};	    	
+		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
+		String msg = res.toString();
+		logNotice(cmd[0] + ";errCode=" + code + ";resp=" + msg);
+			
+		
+		return code;
+		
+	}*/
+	
+	
+	/*
+	 // 9/19/2010 - NF This code is in process... /etc path on System partition
+	 // is read-only on Android for now.
+	public static int redirectDNSResolvConf () throws Exception
+	{
+    	StringBuilder script = new StringBuilder();
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		//mv resolv.conf to resolve.conf.bak
+		String cmd = "mv /etc/resolv.conf /etc/resolv.conf.bak";
+		script.append(cmd);
+		
+		//create new resolve.conf pointing to localhost/127.0.0.1
+		cmd = "echo \"nameserver 127.0.0.1\" > /etc/resolv.conf";
+		script.append(cmd);
+		
+		String[] cmdFlush = {script.toString()};
+		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
+		//String msg = res.toString(); //get stdout from command
+		
+		
+		return code;
+	}
+	
+	public static int restoreDNSResolvConf () throws Exception
+	{
+		StringBuilder script = new StringBuilder();
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		//mv resolv.conf to resolve.conf.bak
+		String cmd = "mv /etc/resolv.conf.bak /etc/resolv.conf";
+		script.append(cmd);
+		script.append(" || exit\n");
+		
+		String[] cmdFlush = {script.toString()};
+		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
+		//String msg = res.toString(); //get stdout from command
+		
+		return code;
+	}
+	*/
+	
+	public static int testOwnerModule(Context context) throws Exception
+	{
+
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+    	int torUid = context.getApplicationInfo().uid;
+
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	// Allow everything for Tor
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -m owner --uid-owner ");
+		script.append(torUid);
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+    }	
+	
+	
+	
+	public static int setTransparentProxyingByApp(Context context, TorifiedApp[] apps) throws Exception
+	{
+
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	purgeIptables(context);
+				
+		//build up array of shell cmds to execute under one root context
+		for (int i = 0; i < apps.length; i++)
+		{
+
+			if (apps[i].isTorified()) //if app is set to true
+			{
+				
+				if (apps[i].getUsername().equals(TorServiceConstants.TOR_APP_USERNAME))
+				{
+					//should never trans proxy the Orbot app (and Tor or Privoxy) itself
+					continue;
+				}
+				
+				TorService.logMessage("enabling transproxy for app: " + apps[i].getUsername() + "(" + apps[i].getUid() + ")");
+			 
+				//TCP
+				script.append(ipTablesPath);
+				script.append(" -t nat");
+				script.append(" -A OUTPUT -p tcp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m tcp --syn");
+				script.append(" -j REDIRECT --to-ports ");
+				script.append(TOR_TRANSPROXY_PORT);
+				script.append(" || exit\n");
+				
+				//DNS
+				script.append(ipTablesPath);
+				script.append(" -t nat");
+				script.append(" -A OUTPUT -p udp -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m udp --dport "); 
+				script.append(STANDARD_DNS_PORT);
+				script.append(" -j REDIRECT --to-ports ");
+				script.append(TOR_DNS_PORT);
+				script.append(" || exit\n");
+				
+				script.append(ipTablesPath);
+				script.append(" -t filter");
+				script.append(" -A OUTPUT -p tcp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m tcp --dport ");
+				script.append(TOR_TRANSPROXY_PORT);
+				script.append(" -j ACCEPT");
+				script.append(" || exit\n");
+				
+				script.append(ipTablesPath);
+				script.append(" -t filter");
+				script.append(" -A OUTPUT -p udp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m udp --dport ");
+				script.append(TOR_DNS_PORT);
+				script.append(" -j ACCEPT");
+				script.append(" || exit\n");
+									
+				script.append(ipTablesPath);
+				script.append(" -t filter -A OUTPUT -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -j DROP"); //drop all other packets as Tor won't handle them
+				script.append(" || exit\n");
+				
+				
+			}		
+		}
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+    }	
+	
+	public static int setTransparentProxyingByPort(Context context, int port) throws Exception
+	{
+
+		//android.os.Debug.waitForDebugger();
+		
+		//redirectDNSResolvConf(); //not working yet
+		
+		//String baseDir = context.getDir("bin",0).getAbsolutePath() + '/';
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	purgeIptables(context);
+		
+		//TCP
+		//iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $srcPortNumber -j REDIRECT --to-port $dstPortNumbe
+
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p tcp");
+		script.append(" --dport ");
+		script.append(port);
+		//script.append(" -m tcp --syn");
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp");
+		script.append(" --dport ");
+		script.append(port);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		//DNS
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp ");
+		script.append(" -m udp --dport "); 
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_DNS_PORT);
+		script.append(" || exit\n");
+		
+    	
+    	String[] cmdAdd = {script.toString()};    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		return code;
+    }
+
+	public static int enableWifiHotspotRules (Context context) throws Exception
+	{
+		
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    
+    	script.append(ipTablesPath);
+		script.append(" -I FORWARD");
+		script.append(" -m state --state ESTABLISHED,RELATED -j ACCEPT");
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -I FORWARD");
+		script.append(" -s 192.168.43.0/24 -j ACCEPT");
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -P FORWARD DROP");
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -t nat -I POSTROUTING -s 192.168.43.0/24 -j MASQUERADE");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+	}
+	
+	public static int setTransparentProxyingAll(Context context) throws Exception 
+	{
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	purgeIptables(context);
+    	
+    	//enableWifiHotspotRules(context);
+    	
+    	int torUid = context.getApplicationInfo().uid;
+
+    	// Set up port redirection
+    	script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p tcp");
+		script.append(" -m owner ! --uid-owner ");
+		script.append(torUid);
+		script.append(" -m tcp --syn");
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		// Same for DNS
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp -m owner ! --uid-owner ");
+		script.append(torUid);
+		script.append(" -m udp --dport "); 
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_DNS_PORT);
+		script.append(" || exit\n");
+		
+		// Allow packets to localhost (contains all the port-redirected ones)
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -d 127.0.0.1");
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		// Allow loopback
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -o lo");
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		// Allow everything for Tor
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -m owner --uid-owner ");
+		script.append(torUid);
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		if (TorService.ENABLE_DEBUG_LOG)
+		{
+			//XXX: Comment the following rules for non-debug builds
+			script.append(ipTablesPath);
+			script.append(" -t filter");
+			script.append(" -A OUTPUT");
+			script.append(" -p udp");
+			script.append(" --dport ");
+			script.append(STANDARD_DNS_PORT);
+			script.append(" -j LOG");
+			script.append(" --log-prefix='ORBOT_DNSLEAK_PROTECTION'");
+			script.append(" --log-uid");
+			script.append(" || exit\n");
+			script.append(ipTablesPath);
+			script.append(" -t filter");
+			script.append(" -A OUTPUT");
+			script.append(" -p tcp");
+			script.append(" -j LOG");
+			script.append(" --log-prefix='ORBOT_TCPLEAK_PROTECTION'");
+			script.append(" --log-uid");
+			script.append(" || exit\n");
+		}
+		
+		// Reject DNS that is not from Tor (order is important - first matched rule counts!)
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p udp");
+		script.append(" --dport ");
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REJECT");
+		script.append(" || exit\n");
+		
+		// Reject all other outbound TCP packets
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -j REJECT");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+    	return code;
+	}	
+	
+
+}

_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits