[or-cvs] r23290: {projects} fixes #1947 bug; adds Start on Boot option; v1.0.4-RC5 (in projects/android/trunk/Orbot: . res/layout res/values res/xml src/org/torproject/android src/org/torproject/android/service)

Nathan Freitas nathan at freitas.net
Thu Sep 23 19:47:26 UTC 2010


Author: n8fr8
Date: 2010-09-23 19:47:25 +0000 (Thu, 23 Sep 2010)
New Revision: 23290

Modified:
   projects/android/trunk/Orbot/AndroidManifest.xml
   projects/android/trunk/Orbot/AndroidManifest.xml.debug
   projects/android/trunk/Orbot/CHANGELOG
   projects/android/trunk/Orbot/res/layout/layout_log.xml
   projects/android/trunk/Orbot/res/layout/layout_main.xml
   projects/android/trunk/Orbot/res/values/strings.xml
   projects/android/trunk/Orbot/res/xml/preferences.xml
   projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java
   projects/android/trunk/Orbot/src/org/torproject/android/SettingsPreferences.java
   projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java
Log:
fixes #1947 bug; adds Start on Boot option; v1.0.4-RC5

Modified: projects/android/trunk/Orbot/AndroidManifest.xml
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml	2010-09-23 16:55:12 UTC (rev 23289)
+++ projects/android/trunk/Orbot/AndroidManifest.xml	2010-09-23 19:47:25 UTC (rev 23290)
@@ -1,10 +1,10 @@
 <?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.14-orbot-alpha-1.0.3" android:versionCode="9">
+      package="org.torproject.android" android:versionName="1.0.4" 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"
@@ -33,13 +33,21 @@
         <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" 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=".boot.OnbootBroadcastReceiver">
+			<intent-filter>
+			<action
+			android:name="android.intent.action.BOOT_COMPLETED" />
+			<category android:name="android.intent.category.HOME" />
+			</intent-filter>
+		</receiver>
     	
     	
     </application>

Modified: projects/android/trunk/Orbot/AndroidManifest.xml.debug
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml.debug	2010-09-23 16:55:12 UTC (rev 23289)
+++ projects/android/trunk/Orbot/AndroidManifest.xml.debug	2010-09-23 19:47:25 UTC (rev 23290)
@@ -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.14-orbot-alpha-1.0.3" android:versionCode="9">
+      package="org.torproject.android" android:versionName="1.0.4" android:versionCode="10">
        
        <uses-permission android:name="android.permission.INTERNET" />
 

Modified: projects/android/trunk/Orbot/CHANGELOG
===================================================================
--- projects/android/trunk/Orbot/CHANGELOG	2010-09-23 16:55:12 UTC (rev 23289)
+++ projects/android/trunk/Orbot/CHANGELOG	2010-09-23 19:47:25 UTC (rev 23290)
@@ -1,5 +1,6 @@
 NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
 
+
 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
@@ -7,6 +8,9 @@
 - 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

Modified: projects/android/trunk/Orbot/res/layout/layout_log.xml
===================================================================
--- projects/android/trunk/Orbot/res/layout/layout_log.xml	2010-09-23 16:55:12 UTC (rev 23289)
+++ projects/android/trunk/Orbot/res/layout/layout_log.xml	2010-09-23 19:47:25 UTC (rev 23290)
@@ -43,7 +43,7 @@
          android:layout_width="fill_parent"
          android:layout_x="2px"
 		 android:layout_y="2px"
-         android:textSize="12px"
+         android:textSize="14px"
          android:background="#A0222222"
          />	
         

Modified: projects/android/trunk/Orbot/res/layout/layout_main.xml
===================================================================
--- projects/android/trunk/Orbot/res/layout/layout_main.xml	2010-09-23 16:55:12 UTC (rev 23289)
+++ projects/android/trunk/Orbot/res/layout/layout_main.xml	2010-09-23 19:47:25 UTC (rev 23290)
@@ -58,8 +58,8 @@
 							android:layout_gravity="center_horizontal"
 							android:gravity="center_horizontal"
 							android:textStyle="bold"
-							android:width="320px"
-							android:height="100px"
+							android:width="300px"
+							android:height="75px"
 							android:textColor="#ffffff"
 							 />
 					</TableRow>

Modified: projects/android/trunk/Orbot/res/values/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values/strings.xml	2010-09-23 16:55:12 UTC (rev 23289)
+++ projects/android/trunk/Orbot/res/values/strings.xml	2010-09-23 19:47:25 UTC (rev 23290)
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <string name="pref_hs_group">Hidden Services</string>
     <string name="app_name">Orbot</string>
         <string name="app_version">1.0.4</string>
     
@@ -110,4 +109,12 @@
 	<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 at guardianproject.info 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>

Modified: projects/android/trunk/Orbot/res/xml/preferences.xml
===================================================================
--- projects/android/trunk/Orbot/res/xml/preferences.xml	2010-09-23 16:55:12 UTC (rev 23289)
+++ projects/android/trunk/Orbot/res/xml/preferences.xml	2010-09-23 19:47:25 UTC (rev 23290)
@@ -1,5 +1,14 @@
 <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"/>
+</PreferenceCategory>
+
 <PreferenceCategory android:title="@string/pref_trans_proxy_group">
 
 <CheckBoxPreference 

Modified: projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java	2010-09-23 16:55:12 UTC (rev 23289)
+++ projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java	2010-09-23 19:47:25 UTC (rev 23290)
@@ -176,10 +176,7 @@
 			stopTor();
 			
 			
-			unbindService();
 			
-            stopService(new Intent(ITorService.class.getName()));
-		
         	NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
 			mNotificationManager.cancelAll();
 		
@@ -826,43 +823,45 @@
     		mHandler.sendMessage(msg);
     	}
     	
+    	//unbindService();
+		
+        //stopService(new Intent(ITorService.class.getName()));
+	
+    	
     }
     
-    
+    /*
     @Override
 	public boolean onTouchEvent(MotionEvent event) {
-    	try
-		{
-			
-			if (mService == null)
+    	
+    	if (currentView == R.layout.layout_main)
+    	{
+	    	try
 			{
-			
-			}
-			else if (mService.getStatus() == STATUS_READY)
-			{
+				if (mService == null)
+				{
 				
-				if (event.getAction() == MotionEvent.ACTION_UP)
+				}
+				else if (mService.getStatus() == STATUS_READY)
 				{
 					startTor();
+					
 				}
-			}
-			else
-			{
-				
-				if (event.getAction() == MotionEvent.ACTION_DOWN)
+				else
 				{
 					stopTor();
+					
 				}
+				
 			}
-			
-		}
-		catch (Exception e)
-		{
-			Log.d(TAG,"error onclick",e);
-		}
-		
+			catch (Exception e)
+			{
+				Log.d(TAG,"error onclick",e);
+			}
+    	}
+    	
 		return super.onTouchEvent(event);
-	}
+	}*/
 
 	/*
      * (non-Javadoc)
@@ -870,9 +869,8 @@
      */
 	public void onClick(View view) {
 		
-		// the start button
-	//	if (view.getId()==R.id.imgStatus || view.getId()==R.id.lblStatus)
-	//	{
+		if (currentView == R.layout.layout_main)
+    	{
 			try
 			{
 				
@@ -899,7 +897,7 @@
 				Log.d(TAG,"error onclick",e);
 			}
 			
-	//	}
+		}
 		
 		
 	}

Modified: projects/android/trunk/Orbot/src/org/torproject/android/SettingsPreferences.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/SettingsPreferences.java	2010-09-23 16:55:12 UTC (rev 23289)
+++ projects/android/trunk/Orbot/src/org/torproject/android/SettingsPreferences.java	2010-09-23 19:47:25 UTC (rev 23290)
@@ -54,15 +54,18 @@
 	
 		super.onResume();
 	
+
+		int transProxyGroupIdx = 1;
+		
 		if (!hasRoot)
 		{
-			getPreferenceScreen().getPreference(0).setEnabled(false);
+			getPreferenceScreen().getPreference(transProxyGroupIdx).setEnabled(false);
 		}
 		else
 		{
-			prefCBTransProxy = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(0)).getPreference(0));
-			prefcBTransProxyAll = (CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(0)).getPreference(1);
-			prefTransProxyApps = ((PreferenceCategory)this.getPreferenceScreen().getPreference(0)).getPreference(2);
+			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());
 			
@@ -74,10 +77,12 @@
 			
 		}
 		
-		prefHiddenServices = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(4)).getPreference(0));
+		int hiddenGroupIdx = 5;
+		
+		prefHiddenServices = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(0));
 		prefHiddenServices.setOnPreferenceClickListener(this);
-		((PreferenceCategory)this.getPreferenceScreen().getPreference(4)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
-		((PreferenceCategory)this.getPreferenceScreen().getPreference(4)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
+		((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
+		((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
 				
 		
 	};
@@ -106,8 +111,8 @@
 		else if (preference == prefHiddenServices)
 		{
 			
-			((PreferenceCategory)this.getPreferenceScreen().getPreference(4)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
-			((PreferenceCategory)this.getPreferenceScreen().getPreference(4)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
+			((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
+			((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
 			
 		}
 		else

Modified: projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java	2010-09-23 16:55:12 UTC (rev 23289)
+++ projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java	2010-09-23 19:47:25 UTC (rev 23290)
@@ -65,7 +65,7 @@
     public void onCreate() {
     	super.onCreate();
        
-    
+    	Log.i(TAG, "serviced created");
       
     }
     
@@ -183,16 +183,38 @@
 	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(), R.drawable.tornotificationoff);
+
 			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)
@@ -227,16 +249,12 @@
     {
     	currentStatus = STATUS_OFF;
     	
-    		
-    	sendCallbackLogMessage("Web proxy shutdown");
-    	
     	try
     	{	
     		killTorProcess ();
 				
     		currentStatus = STATUS_READY;
-    	
-	
+    
     		showToolbarNotification (getString(R.string.status_disabled),R.drawable.tornotificationoff);
     		sendCallbackStatusMessage(getString(R.string.status_disabled));
 
@@ -276,8 +294,6 @@
     
     private void killTorProcess () throws Exception
     {
-		//android.os.Debug.waitForDebugger();
-		
     	StringBuilder log = new StringBuilder();
     	int procId = -1;
     	
@@ -287,34 +303,35 @@
     		
 			try {
 				logNotice("sending SHUTDOWN signal to Tor process");
-				conn.signal("SHUTDOWN");
-				//torConnSocket.close();
 				
+				conn.shutdownTor("SHUTDOWN");
+				
+				
 			} catch (Exception e) {
 				Log.d(TAG,"error shutting down Tor via connection",e);
 			}
 			
 			conn = null;
 		}
+    	else
+    	{
     	
-    	try //wait a second for this
-    	{ Thread.sleep(1000); }
-    	catch (Exception e) {}
-    	
-    	logNotice("Checking for existing Tor process via path: " + torBinaryPath);
-		procId = TorServiceUtils.findProcessId(torBinaryPath);
-
-		while (procId != -1)
-		{
-			
-			logNotice("Found Tor PID=" + procId + " - killing now...");
-			
-			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
-			TorServiceUtils.doShellCommand(cmd,log, false, false);
-
+	    	
+	    	logNotice("Checking for existing Tor process via path: " + torBinaryPath);
 			procId = TorServiceUtils.findProcessId(torBinaryPath);
-		}
+	
+			while (procId != -1)
+			{
+				
+				logNotice("Found Tor PID=" + procId + " - killing now...");
+				
+				String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
+				TorServiceUtils.doShellCommand(cmd,log, false, false);
+	
+				procId = TorServiceUtils.findProcessId(torBinaryPath);
+			}
     	
+    	}
 		
     	logNotice("Checking for existing Privoxy process via path: " + privoxyPath);
 		procId = TorServiceUtils.findProcessId(privoxyPath);
@@ -393,7 +410,34 @@
     			return fileApk.getAbsolutePath();
     	}
     	
+
+    	apkBase = "/sd-ext/app/";
     	
+    	APK_EXT = ".apk";
+    	
+    	MAX_TRIES = 10;
+    	
+    	buildPath = apkBase + TOR_APP_USERNAME + APK_EXT;
+    	logNotice("Checking Apps2SD APK location: " + buildPath);
+		
+    	fileApk = new File(buildPath);
+    	
+    	if (fileApk.exists())
+    		return fileApk.getAbsolutePath();
+    	
+    	for (int i = 0; i < MAX_TRIES; i++)
+    	{
+    		buildPath = apkBase + TOR_APP_USERNAME + '-' + i + APK_EXT;
+    		fileApk = new File(buildPath);
+    	
+    		logNotice( "Checking Apps2SD location: " + buildPath);
+    		
+    		if (fileApk.exists())
+    			return fileApk.getAbsolutePath();
+    	}
+    	
+    	
+    	
     	return null;
     }
     
@@ -412,6 +456,9 @@
 	    	
     	String apkPath = findAPK();
 		    	
+    	if (apkPath == null)
+    		throw new Exception ("Unable to locate Orbot binary APK file");
+    	
     	logNotice( "found apk at: " + apkPath);
     	
     	boolean apkExists = new File(apkPath).exists();
@@ -768,13 +815,15 @@
 		}
 		
 		public void setTorProfile(int profile)  {
+			logNotice("Tor profile set to " + profile);
 			
 			if (profile == PROFILE_ON)
 			{
  				currentStatus = STATUS_CONNECTING;
 	            sendCallbackStatusMessage ("starting...");
 
-	            new Thread(_torInstance).start();
+	            Thread thread = new Thread(this);
+	            thread.start();
 
 			}
 			else
@@ -784,6 +833,7 @@
 	            
 				_torInstance.stopTor();
 
+				
 			}
 		}
 
@@ -899,22 +949,25 @@
         // a single interface, you can just return it here without checking
         // the Intent.
         
+    	_torInstance = this;
     	
 		try
 		{
-			
+	
 			checkTorBinaries();
     	
-			findExistingProc ();
-    	
-			_torInstance = this;
 		}
 		catch (Exception e)
 		{
+			logNotice("unable to find tor binaries: " + e.getMessage());
+	    	showToolbarNotification(e.getMessage(), R.drawable.tornotificationoff);
+
 			Log.d(TAG,"Unable to check for Tor binaries",e);
 			return null;
 		}
     	
+		findExistingProc ();
+		
     	if (ITorService.class.getName().equals(intent.getAction())) {
             return mBinder;
         }
@@ -1060,29 +1113,28 @@
     };
     
     private ArrayList<String> callbackBuffer = new ArrayList<String>();
+    private boolean inCallbackStatus = false;
+    private boolean inCallbackLog = false;
     
     private void sendCallbackStatusMessage (String newStatus)
     {
     	 
+    	if (mCallbacks == null)
+    		return;
+    	
+    	
+    	
         // Broadcast to all clients the new value.
         final int N = mCallbacks.beginBroadcast();
         
-
-    	callbackBuffer.add(newStatus);
-    	
+        inCallbackStatus = true;
+        
         if (N > 0)
         {
         
-        	Iterator<String> it = callbackBuffer.iterator();
-        	String status = null;
-        	
-        	while (it.hasNext())
-        	{
-        		status = it.next();
-        		
-		        for (int i=0; i<N; i++) {
+        	 for (int i=0; i<N; i++) {
 		            try {
-		                mCallbacks.getBroadcastItem(i).statusChanged(status);
+		                mCallbacks.getBroadcastItem(i).statusChanged(newStatus);
 		                
 		                
 		            } catch (RemoteException e) {
@@ -1090,22 +1142,26 @@
 		                // the dead object for us.
 		            }
 		        }
-        	}
-	        
-	        callbackBuffer.clear();
         }
         
         mCallbacks.finishBroadcast();
+        inCallbackStatus = false;
     }
     
-    private synchronized void sendCallbackLogMessage (String logMessage)
+    private void sendCallbackLogMessage (String logMessage)
     {
     	 
+    	if (mCallbacks == null)
+    		return;
+    	
+    	callbackBuffer.add(logMessage);
+    	
+    	
         // Broadcast to all clients the new value.
         final int N = mCallbacks.beginBroadcast();
         
+        inCallbackLog = true;
 
-    	callbackBuffer.add(logMessage);
     	
         if (N > 0)
         {
@@ -1133,6 +1189,7 @@
         }
         
         mCallbacks.finishBroadcast();
+        inCallbackLog = false;
     }
     
     private void applyPreferences () throws RemoteException



More information about the tor-commits mailing list