From 3b38506eb153f6ca87548135212c55acc4ad506d Mon Sep 17 00:00:00 2001 From: Renzo Duin Date: Thu, 5 Aug 2021 19:39:16 +0200 Subject: [PATCH] fix permission bug --- .gitignore | 5 ++ .vscode/settings.json | 3 ++ app/build.gradle | 17 +++++++ app/src/main/AndroidManifest.xml | 3 +- .../android/apps/photos/MainActivity.java | 50 ++++++++++++++++--- build.gradle | 4 +- gradle.properties | 18 ------- 7 files changed, 71 insertions(+), 29 deletions(-) create mode 100644 .vscode/settings.json delete mode 100644 gradle.properties diff --git a/.gitignore b/.gitignore index 4bfc701..09ff80d 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,8 @@ gen/ # Proguard folder generated by Eclipse proguard/ + +# Sigining keys +signing + +gradle*.properties \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f582a1f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "disabled" +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 643853d..82a0fa8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,4 +11,21 @@ android { versionCode 1 versionName '1.0.0' } + + /*signingConfigs { + release { + storeFile file(RELEASE_STORE_FILE) + storePassword RELEASE_STORE_PASSWORD + keyAlias RELEASE_KEY_ALIAS + + // Optional, specify signing versions used + v3SigningEnabled true + } + } + + buildTypes { + release { + signingConfig signingConfigs.release + } + }*/ } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 65d5796..e0cb49e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - - + diff --git a/app/src/main/java/com/google/android/apps/photos/MainActivity.java b/app/src/main/java/com/google/android/apps/photos/MainActivity.java index c6cd23f..840cdfa 100644 --- a/app/src/main/java/com/google/android/apps/photos/MainActivity.java +++ b/app/src/main/java/com/google/android/apps/photos/MainActivity.java @@ -16,6 +16,8 @@ import android.provider.MediaStore; import android.content.Context; import android.app.PendingIntent; +import android.Manifest; +import android.content.pm.PackageManager; public class MainActivity extends Activity { @@ -23,6 +25,10 @@ public class MainActivity extends Activity { private static final int maximumSeconds = 30000; private static final int iterations = maximumSeconds * 1000 / waitMS; + private static final int PERMISSIONS_INT = 755009201; + + private PendingIntent cameraRelaunchIntent; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -36,7 +42,20 @@ protected void onCreate(Bundle savedInstanceState) { Uri processingURI = (Uri) receivedIntent.getParcelableExtra("processing_uri_intent_extra"); - PendingIntent cameraRelaunchIntent = (PendingIntent) receivedIntent.getParcelableExtra("CAMERA_RELAUNCH_INTENT_EXTRA"); + this.cameraRelaunchIntent = (PendingIntent) receivedIntent.getParcelableExtra("CAMERA_RELAUNCH_INTENT_EXTRA"); + + if (SessionId == null) { + finish(); + return; + } + + if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + Log.i("PhotosShim", "No permission, requesting them"); + + requestPermissions(new String[] { Manifest.permission.READ_EXTERNAL_STORAGE }, PERMISSIONS_INT); + + return; + } Log.i("PhotosShim", "SessionId: '" + SessionId + "', URI:'" + uri + "', type: '" + type + "', processingURI: '" + processingURI + "'"); @@ -75,12 +94,7 @@ protected void onCreate(Bundle savedInstanceState) { } if (!success) { - try { - cameraRelaunchIntent.send(); - } catch (Exception e) { - Log.e("PhotosShim", "Error sending intent", e); - } - finish(); + quit(); return; } @@ -92,6 +106,28 @@ protected void onCreate(Bundle savedInstanceState) { finish(); } + private void quit() { + try { + if (this.cameraRelaunchIntent != null) + this.cameraRelaunchIntent.send(); + } catch (Exception e) { + Log.e("PhotosShim", "Error sending intent", e); + } + finish(); + return; + } + + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + if (requestCode != PERMISSIONS_INT) + return; + if (permissions.length == 0 || grantResults.length == 0) + return; + + if (permissions[0] == Manifest.permission.READ_EXTERNAL_STORAGE) + quit(); + } + public static String getRealPathFromURI(Context context, Uri contentUri) { Cursor cursor = null; String result = ""; diff --git a/build.gradle b/build.gradle index 3e9b9f8..6f2942b 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { repositories { - jcenter() + mavenCentral() google() } dependencies { @@ -20,7 +20,7 @@ buildscript { allprojects { repositories { - jcenter() + mavenCentral() google() } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties deleted file mode 100644 index 1d3591c..0000000 --- a/gradle.properties +++ /dev/null @@ -1,18 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx10248m -XX:MaxPermSize=256m -# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file