[tor-commits] [orbot/master] final fixes for AppsVPN mode on boot and Android 4.x support

n8fr8 at torproject.org n8fr8 at torproject.org
Fri Jun 26 13:55:09 UTC 2015


commit dc06eedcfdffb7bc12a8198fc2f9b4b21f9e1269
Author: Nathan Freitas <nathan at freitas.net>
Date:   Fri Jun 26 09:52:42 2015 -0400

    final fixes for AppsVPN mode on boot and Android 4.x support
---
 AndroidManifest.xml                                |    7 +-
 external/appcompat/project.properties              |    2 +-
 src/org/torproject/android/OrbotMainActivity.java  |   47 ++-----
 .../torproject/android/service/OnBootReceiver.java |   28 ++--
 src/org/torproject/android/service/TorService.java |    1 -
 .../torproject/android/vpn/VPNEnableActivity.java  |  137 ++++++++++++++++++++
 6 files changed, 164 insertions(+), 58 deletions(-)

diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 328d57e..3b5ba41 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -73,7 +73,12 @@
 			android:finishOnTaskLaunch="true"
 			
 			/> 
-			      	
+		
+      	<activity
+			android:name=".vpn.VPNEnableActivity" android:label="@string/app_name" android:exported="false"
+			android:theme="@android:style/Theme.NoDisplay"			
+			/> 
+		
 			      	
       	<activity android:name="org.torproject.android.ui.PromoAppsActivity" android:exported="false"/>
       	
diff --git a/external/appcompat/project.properties b/external/appcompat/project.properties
index 93c8c3c..362a0a3 100644
--- a/external/appcompat/project.properties
+++ b/external/appcompat/project.properties
@@ -11,5 +11,5 @@
 #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
 
 # Project target.
-target=android-21
+target=android-22
 android.library=true
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index 7ff6068..c88f129 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -59,6 +59,7 @@ import org.torproject.android.settings.SettingsPreferences;
 import org.torproject.android.ui.ImageProgressView;
 import org.torproject.android.ui.PromoAppsActivity;
 import org.torproject.android.ui.Rotate3dAnimation;
+import org.torproject.android.vpn.VPNEnableActivity;
 
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
@@ -252,10 +253,11 @@ public class OrbotMainActivity extends Activity
 		boolean useVPN = Prefs.useVpn();
 		mBtnVPN.setChecked(useVPN);
 		
+		/**
 		if (useVPN)
 		{
-			startVpnService ();
-		}
+			startActivity(new Intent(OrbotMainActivity.this,VPNEnableActivity.class));
+		}*/
 		
 		mBtnVPN.setOnClickListener(new View.OnClickListener ()
 		{
@@ -264,7 +266,7 @@ public class OrbotMainActivity extends Activity
 			public void onClick(View v) {
 
 				if (mBtnVPN.isChecked())
-					promptStartVpnService();
+					startActivity(new Intent(OrbotMainActivity.this,VPNEnableActivity.class));
 				else
 					stopVpnService();
 				
@@ -943,45 +945,12 @@ public class OrbotMainActivity extends Activity
         sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
     }
 
-    public void promptStartVpnService ()
-    {
-    	 LayoutInflater li = LayoutInflater.from(this);
-         View view = li.inflate(R.layout.layout_diag, null); 
-         
-         TextView versionName = (TextView)view.findViewById(R.id.diaglog);
-         versionName.setText(R.string.you_can_enable_all_apps_on_your_device_to_run_through_the_tor_network_using_the_vpn_feature_of_android_);    
-         
-         new AlertDialog.Builder(this)
-         .setTitle(R.string.apps_mode)
-         .setView(view)
-         .setPositiveButton(R.string.activate, new Dialog.OnClickListener ()
-         {
-
-			@Override
-			public void onClick(DialogInterface dialog, int which) {
-		        Prefs.putUseVpn(true);
-				startVpnService();
-			}
-
-        	 
-         })
-         .setNegativeButton(R.string.btn_cancel, new Dialog.OnClickListener ()
-         {
-
-			@Override
-			public void onClick(DialogInterface dialog, int which) {
-				
-				mBtnVPN.setChecked(false);
-			}
-        	 
-         })
-         .show();
-    }
     
+    /**
     @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
     public void startVpnService ()
     {
-        Intent intent = VpnService.prepare(this);
+        Intent intent = VpnService.prepare(getApplicationContext());
         if (intent != null) {
             startActivityForResult(intent,REQUEST_VPN);
         } 
@@ -989,7 +958,7 @@ public class OrbotMainActivity extends Activity
         {
             sendIntentToService(TorServiceConstants.CMD_VPN);
         }
-    }
+    }*/
     
     public void stopVpnService ()
     {    	
diff --git a/src/org/torproject/android/service/OnBootReceiver.java b/src/org/torproject/android/service/OnBootReceiver.java
index 2429c4d..36891e8 100644
--- a/src/org/torproject/android/service/OnBootReceiver.java
+++ b/src/org/torproject/android/service/OnBootReceiver.java
@@ -1,13 +1,12 @@
 package org.torproject.android.service;
 
 
-import android.annotation.SuppressLint;
+import org.torproject.android.Prefs;
+import org.torproject.android.vpn.VPNEnableActivity;
+
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
-import android.net.VpnService;
-
-import org.torproject.android.Prefs;
 
 public class OnBootReceiver extends BroadcastReceiver {
 	
@@ -15,24 +14,21 @@ public class OnBootReceiver extends BroadcastReceiver {
 	public void onReceive(Context context, Intent intent) {
 	    Prefs.setContext(context);
 		if (Prefs.startOnBoot())
-		{
-			startService(TorServiceConstants.ACTION_START, context);
+		{			
 
 			if (Prefs.useVpn())
-				startVpnService(context);
+				startVpnService(context); //VPN will start Tor once it is done
+			else
+				startService(TorServiceConstants.ACTION_START, context);
+				
 		}
 	}
 	
-	 @SuppressLint("NewApi")
-	public void startVpnService (Context context)
+	public void startVpnService (final Context context)
     	{
-       		Intent intent = VpnService.prepare(context);
-
-		if (intent != null) {
-        		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            		context.startActivity(intent);
-        	} 
-
+		   Intent intent = new Intent(context,VPNEnableActivity.class);
+           intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+           context.startActivity(intent);
     	}
 
 	private void startService (String action, Context context)
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index a515333..2ee02bd 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -93,7 +93,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
     private Socket torConnSocket = null;
     private int mLastProcessId = -1;
     
-
     private int mPortHTTP = HTTP_PROXY_PORT_DEFAULT;
     private int mPortSOCKS = SOCKS_PROXY_PORT_DEFAULT;
     
diff --git a/src/org/torproject/android/vpn/VPNEnableActivity.java b/src/org/torproject/android/vpn/VPNEnableActivity.java
new file mode 100644
index 0000000..273a1cd
--- /dev/null
+++ b/src/org/torproject/android/vpn/VPNEnableActivity.java
@@ -0,0 +1,137 @@
+package org.torproject.android.vpn;
+
+import org.torproject.android.Prefs;
+import org.torproject.android.R;
+import org.torproject.android.service.TorService;
+import org.torproject.android.service.TorServiceConstants;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.VpnService;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+/*
+ * To combat background service being stopped/swiped
+ */
+public class VPNEnableActivity extends Activity {
+	
+	private final static int REQUEST_VPN = 7777;
+	private	Intent intent = null;
+
+	@Override
+	public void onCreate( Bundle icicle ) {
+		super.onCreate( icicle );
+
+		Log.d("VPNEnableActivity","prompting user to start Orbot VPN");
+
+		intent = VpnService.prepare(this);
+		
+		if (intent != null)
+			promptStartVpnService();
+		else
+			startVpnService ();
+		
+	}
+	
+	public void promptStartVpnService ()
+    {
+    	 LayoutInflater li = LayoutInflater.from(this);
+         View view = li.inflate(R.layout.layout_diag, null); 
+         
+         TextView versionName = (TextView)view.findViewById(R.id.diaglog);
+         versionName.setText(R.string.you_can_enable_all_apps_on_your_device_to_run_through_the_tor_network_using_the_vpn_feature_of_android_);    
+         
+         new AlertDialog.Builder(this)
+         .setTitle(getString(R.string.app_name) + ' ' + getString(R.string.apps_mode))
+         .setView(view)
+         .setPositiveButton(R.string.activate, new Dialog.OnClickListener ()
+         {
+
+			@Override
+			public void onClick(DialogInterface dialog, int which) {
+		        Prefs.putUseVpn(true);
+		        
+				startVpnService();
+				
+			}
+
+        	 
+         })
+         .setNegativeButton(R.string.btn_cancel, new Dialog.OnClickListener ()
+         {
+
+			@Override
+			public void onClick(DialogInterface dialog, int which) {
+				
+				finish();
+			}
+        	 
+         })
+         .show();
+    }
+	 
+	private void startVpnService ()
+	{
+   		if (intent == null)
+   		{
+   			Log.d("VPNEnableActivity","VPN enabled, starting Tor...");
+            sendIntentToService(TorServiceConstants.CMD_VPN);
+            
+            Handler h = new Handler();
+            h.postDelayed(new Runnable () {
+            	
+            	public void run ()
+            	{
+            		sendIntentToService(TorServiceConstants.ACTION_START);		
+            		finish();
+            	}
+            }, 1000);
+   			
+   		}
+   		else
+   		{
+   			Log.w("VPNEnableActivity","prompt for VPN");
+            startActivityForResult(intent,REQUEST_VPN);
+
+   		}
+
+	}
+	
+	  @Override
+	    protected void onActivityResult(int request, int response, Intent data) {
+	        super.onActivityResult(request, response, data);
+	        
+	        if (request == REQUEST_VPN && response == RESULT_OK)
+	        {
+	            sendIntentToService(TorServiceConstants.CMD_VPN);	    
+	            Handler h = new Handler();
+	            h.postDelayed(new Runnable () {
+	            	
+	            	public void run ()
+	            	{
+	            		sendIntentToService(TorServiceConstants.ACTION_START);		
+	            		finish();
+	            	}
+	            }, 1000);
+	            
+	        }
+	  }
+	  
+
+		private void sendIntentToService(String action) {
+			Intent torService = new Intent(this, TorService.class);    
+			torService.setAction(action);
+			startService(torService);
+		}
+    
+}
\ No newline at end of file





More information about the tor-commits mailing list