[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