[tor-commits] [orbot/master] action moved

n8fr8 at torproject.org n8fr8 at torproject.org
Thu Mar 2 04:10:20 UTC 2017


commit 3e6c62771209b61e54ecf75ffb39e7bf419af3b5
Author: arrase <arrase at gmail.com>
Date:   Sun Nov 20 22:31:12 2016 +0100

    action moved
---
 .../org/torproject/android/OrbotMainActivity.java  | 122 ++++++++++++++++++---
 .../android/hsutils/GrantedPermissionsAction.java  |   7 ++
 .../android/ui/hs/HiddenServicesActivity.java      |  65 -----------
 3 files changed, 113 insertions(+), 81 deletions(-)

diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index 85dc028..2e4a4e9 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -16,6 +16,7 @@ import java.util.Random;
 import java.util.StringTokenizer;
 
 import org.json.JSONArray;
+import org.torproject.android.hsutils.GrantedPermissionsAction;
 import org.torproject.android.service.OrbotConstants;
 import org.torproject.android.service.util.Prefs;
 import org.torproject.android.service.TorService;
@@ -31,6 +32,7 @@ import org.torproject.android.ui.hs.providers.HSContentProvider;
 import org.torproject.android.vpn.VPNEnableActivity;
 import org.torproject.android.hsutils.HiddenServiceUtils;
 
+import android.Manifest;
 import android.annotation.SuppressLint;
 import android.app.ActivityManager;
 import android.app.ActivityManager.RunningServiceInfo;
@@ -55,6 +57,8 @@ import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.os.RemoteException;
+import android.support.design.widget.Snackbar;
+import android.support.v4.app.ActivityCompat;
 import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.ActionBarDrawerToggle;
@@ -88,6 +92,7 @@ import com.google.zxing.integration.android.IntentResult;
 
 public class OrbotMainActivity extends AppCompatActivity
         implements OrbotConstants, OnLongClickListener, OnTouchListener {
+	private GrantedPermissionsAction postPermissionsAction = null;
 
     /* Useful UI bits */
     private TextView lblStatus = null; //the main text display widget
@@ -127,7 +132,9 @@ public class OrbotMainActivity extends AppCompatActivity
     private static final int MESSAGE_TRAFFIC_COUNT = 2;
 
 	public final static String INTENT_ACTION_REQUEST_HIDDEN_SERVICE = "org.torproject.android.REQUEST_HS_PORT";
-	public final static String INTENT_ACTION_REQUEST_START_TOR = "org.torproject.android.START_TOR";	
+	public final static String INTENT_ACTION_REQUEST_START_TOR = "org.torproject.android.START_TOR";
+
+	public final int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 1;
 
 	// for bridge loading from the assets default bridges.txt file
     class Bridge
@@ -518,9 +525,20 @@ public class OrbotMainActivity extends AppCompatActivity
          }
          else if (item.getItemId() == R.id.menu_hidden_services)
          {
-             startActivity(new Intent(this, HiddenServicesActivity.class));
+			 if(usesRuntimePermissions()){
+				 postPermissionsAction = new GrantedPermissionsAction() {
+					 @Override
+					 public void run(Context context, boolean granted) {
+						 startActivity(new Intent(context, HiddenServicesActivity.class));
+					 }
+				 };
+
+				 checkPermissions();
+			 } else {
+				 startActivity(new Intent(this, HiddenServicesActivity.class));
+			 }
          }
-     
+
 		return super.onOptionsItemSelected(item);
 	}
 
@@ -696,25 +714,47 @@ public class OrbotMainActivity extends AppCompatActivity
         	final String hiddenServiceName = intent.getStringExtra("hs_name");
         	final Boolean createBackup = intent.getBooleanExtra("hs_backup",false);
 
+			if(createBackup && usesRuntimePermissions())
+				checkPermissions();
+
 			DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
 			    
 			    public void onClick(DialogInterface dialog, int which) {
 			        switch (which){
 			        case DialogInterface.BUTTON_POSITIVE:
-			            
-						try {
-							enableHiddenServicePort (
-									hiddenServiceName, hiddenServicePort,
-									hiddenServiceRemotePort, createBackup
-							);
-						} catch (RemoteException e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						} catch (InterruptedException e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
+						if(createBackup && usesRuntimePermissions()){
+							postPermissionsAction = new GrantedPermissionsAction() {
+								@Override
+								public void run(Context context, boolean granted) {
+									try {
+										enableHiddenServicePort (
+												hiddenServiceName, hiddenServicePort,
+												hiddenServiceRemotePort, createBackup
+										);
+									} catch (RemoteException e) {
+										// TODO Auto-generated catch block
+										e.printStackTrace();
+									} catch (InterruptedException e) {
+										// TODO Auto-generated catch block
+										e.printStackTrace();
+									}
+								}
+							};
+							checkPermissions();
+						} else {
+							try {
+								enableHiddenServicePort (
+										hiddenServiceName, hiddenServicePort,
+										hiddenServiceRemotePort, createBackup
+								);
+							} catch (RemoteException e) {
+								// TODO Auto-generated catch block
+								e.printStackTrace();
+							} catch (InterruptedException e) {
+								// TODO Auto-generated catch block
+								e.printStackTrace();
+							}
 						}
-
 						
 			            break;
 
@@ -1553,4 +1593,54 @@ public class OrbotMainActivity extends AppCompatActivity
     	
     	setNewBridges(sbConfig.toString());
     }
+
+
+	private boolean usesRuntimePermissions() {
+		return (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1);
+	}
+
+	@SuppressLint("NewApi")
+	private boolean hasPermission(String permission) {
+		return (checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED);
+	}
+
+	private void checkPermissions() {
+		if (!hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
+			if (ActivityCompat.shouldShowRequestPermissionRationale
+					(OrbotMainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
+				Snackbar.make(findViewById(android.R.id.content),
+						R.string.please_grant_permissions_for_external_storage,
+						Snackbar.LENGTH_INDEFINITE).setAction("ENABLE",
+						new View.OnClickListener() {
+							@Override
+							public void onClick(View v) {
+								ActivityCompat.requestPermissions(OrbotMainActivity.this,
+										new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
+										PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
+							}
+						}).show();
+			} else {
+				ActivityCompat.requestPermissions(OrbotMainActivity.this,
+						new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
+						PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
+			}
+		}
+	}
+
+	@SuppressLint("NewApi")
+	@Override
+	public void onRequestPermissionsResult(int requestCode,
+										   String permissions[], int[] grantResults) {
+		switch (requestCode) {
+			case PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {
+				// If request is cancelled, the result arrays are empty.
+				boolean granted = (grantResults.length > 0
+						&& grantResults[0] == PackageManager.PERMISSION_GRANTED);
+
+				postPermissionsAction.run(this, granted);
+
+				break;
+			}
+		}
+	}
 }
diff --git a/app/src/main/java/org/torproject/android/hsutils/GrantedPermissionsAction.java b/app/src/main/java/org/torproject/android/hsutils/GrantedPermissionsAction.java
new file mode 100644
index 0000000..31731fa
--- /dev/null
+++ b/app/src/main/java/org/torproject/android/hsutils/GrantedPermissionsAction.java
@@ -0,0 +1,7 @@
+package org.torproject.android.hsutils;
+
+import android.content.Context;
+
+public abstract class GrantedPermissionsAction {
+    public abstract void run(Context context, boolean granted);
+}
diff --git a/app/src/main/java/org/torproject/android/ui/hs/HiddenServicesActivity.java b/app/src/main/java/org/torproject/android/ui/hs/HiddenServicesActivity.java
index fa09cdd..26889d0 100644
--- a/app/src/main/java/org/torproject/android/ui/hs/HiddenServicesActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/hs/HiddenServicesActivity.java
@@ -1,17 +1,11 @@
 package org.torproject.android.ui.hs;
 
 
-import android.Manifest;
-import android.annotation.SuppressLint;
 import android.content.ContentResolver;
-import android.content.pm.PackageManager;
 import android.database.ContentObserver;
-import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.design.widget.FloatingActionButton;
-import android.support.design.widget.Snackbar;
-import android.support.v4.app.ActivityCompat;
 import android.support.v7.app.AppCompatActivity;
 import android.view.View;
 import android.widget.AdapterView;
@@ -28,8 +22,6 @@ public class HiddenServicesActivity extends AppCompatActivity {
     private ContentResolver mCR;
     private OnionListAdapter mAdapter;
 
-    public final int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 1;
-
     private String[] mProjection = new String[]{
             HSContentProvider.HiddenService._ID,
             HSContentProvider.HiddenService.NAME,
@@ -84,9 +76,6 @@ public class HiddenServicesActivity extends AppCompatActivity {
 
             @Override
             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                if (usesRuntimePermissions())
-                    checkPermissions();
-
                 TextView port = (TextView) view.findViewById(R.id.hs_port);
                 TextView onion = (TextView) view.findViewById(R.id.hs_onion);
 
@@ -100,58 +89,4 @@ public class HiddenServicesActivity extends AppCompatActivity {
             }
         });
     }
-
-    private boolean usesRuntimePermissions() {
-        return (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1);
-    }
-
-    @SuppressLint("NewApi")
-    private boolean hasPermission(String permission) {
-        return !usesRuntimePermissions() || (checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED);
-    }
-
-    private void checkPermissions() {
-        if (!hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
-            if (ActivityCompat.shouldShowRequestPermissionRationale
-                    (HiddenServicesActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
-                Snackbar.make(findViewById(android.R.id.content),
-                        R.string.please_grant_permissions_for_external_storage,
-                        Snackbar.LENGTH_INDEFINITE).setAction("ENABLE",
-                        new View.OnClickListener() {
-                            @Override
-                            public void onClick(View v) {
-                                ActivityCompat.requestPermissions(HiddenServicesActivity.this,
-                                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
-                                        PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
-                            }
-                        }).show();
-            } else {
-                ActivityCompat.requestPermissions(HiddenServicesActivity.this,
-                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
-                        PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
-            }
-        }
-    }
-
-    @SuppressLint("NewApi")
-    @Override
-    public void onRequestPermissionsResult(int requestCode,
-                                           String permissions[], int[] grantResults) {
-        switch (requestCode) {
-            case PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {
-                // If request is cancelled, the result arrays are empty.
-                if (grantResults.length > 0
-                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
-                    Snackbar.make(findViewById(android.R.id.content),
-                            R.string.permission_granted,
-                            Snackbar.LENGTH_LONG).show();
-                } else {
-                    Snackbar.make(findViewById(android.R.id.content),
-                            R.string.permission_denied,
-                            Snackbar.LENGTH_LONG).show();
-                }
-                break;
-            }
-        }
-    }
 }





More information about the tor-commits mailing list