From 7ae568c3b0828b8feaee9d2f7a4b0a8b243543c6 Mon Sep 17 00:00:00 2001 From: vanitasvitae Date: Fri, 15 Sep 2017 01:17:35 +0200 Subject: [PATCH] Ask for permission to access external storage --- app/build.gradle | 2 +- .../java/de/trac/spherical/MainActivity.java | 46 +++++++++++++++++-- app/src/main/res/values/strings.xml | 1 + 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 119e145..767da27 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion "25.0.3" defaultConfig { applicationId "de.trac.spherical" - minSdkVersion 15 + minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" diff --git a/app/src/main/java/de/trac/spherical/MainActivity.java b/app/src/main/java/de/trac/spherical/MainActivity.java index aa16846..12e5425 100644 --- a/app/src/main/java/de/trac/spherical/MainActivity.java +++ b/app/src/main/java/de/trac/spherical/MainActivity.java @@ -1,12 +1,15 @@ package de.trac.spherical; +import android.Manifest; import android.content.Intent; +import android.content.pm.PackageManager; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.support.design.widget.AppBarLayout; import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; @@ -38,11 +41,15 @@ public class MainActivity extends AppCompatActivity { public static final String MIME_PHOTO_SPHERE = "application/vnd.google.panorama360+jpg"; public static final String MIME_IMAGE = "image/*"; + private static final int PERMISSION_REQUEST_READ_EXTERNAL_STORAGE = 387; + private SphereSurfaceView surfaceView; private Renderer renderer; private FloatingActionButton fab; private Toolbar toolbar; + private Intent cachedIntent; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -92,11 +99,14 @@ public class MainActivity extends AppCompatActivity { } }); - Intent intent = getIntent(); + handleIntent(getIntent()); + } + + private void handleIntent(Intent intent) { switch (intent.getAction()) { //Image was sent into the app case Intent.ACTION_SEND: - handleSentImageIntent(intent); + checkPermissionAndHandleSentImage(intent); break; //App was launched via launcher icon @@ -106,6 +116,36 @@ public class MainActivity extends AppCompatActivity { } } + private void checkPermissionAndHandleSentImage(Intent intent) { + int status = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE); + if (status == PackageManager.PERMISSION_GRANTED) { + handleSentImageIntent(intent); + } + + // Cache intent and request permission + this.cachedIntent = intent; + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + PERMISSION_REQUEST_READ_EXTERNAL_STORAGE); + + } + + @Override + public void onRequestPermissionsResult(int requestCode, + String permissions[], int[] grantResults) { + switch (requestCode) { + case PERMISSION_REQUEST_READ_EXTERNAL_STORAGE: { + // If request is cancelled, the result arrays are empty. + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + handleSentImageIntent(cachedIntent); + } else { + Toast.makeText(this, R.string.missing_permission, Toast.LENGTH_LONG).show(); + } + return; + } + } + } + private void displayUI(boolean display) { if (display) { fab.show(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fefa961..a384a13 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,4 +6,5 @@ WOW! SUCH 3D!!! Show as Sphere Not yet implemented! + Cannot display photo: Missing permissions to access external storage.