From d048cd6fb2292997cea2a974a2ae3923105bd371 Mon Sep 17 00:00:00 2001 From: arrase Date: Sun, 20 Nov 2016 19:03:45 +0100 Subject: [PATCH] request permissions --- .../android/ui/hs/HiddenServicesActivity.java | 65 +++++++++++++++++++ app/src/main/res/values/strings.xml | 3 + 2 files changed, 68 insertions(+) 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 26889d0f..8a81a406 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,11 +1,17 @@ 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; @@ -22,6 +28,8 @@ 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, @@ -46,6 +54,9 @@ public class HiddenServicesActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.layout_hs_list_view); + if (usesRuntimePermissions()) + checkPermissions(); + mCR = getContentResolver(); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); @@ -89,4 +100,58 @@ 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; + } + } + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cfa23934..05408dcf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -343,4 +343,7 @@ Delete Service Done! Filemanager not available + Please grant permissions for external storage + Permission granted + Permission denied