From 89a13cecf5474aa1cb455a2f8356db4a2ec20840 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Tue, 24 Jan 2023 23:14:57 +0100 Subject: [PATCH] Create extra result function to work around onPermissionResult not existing on Android 5 --- .../card_locker/CatimaAppCompatActivity.java | 4 +++ .../card_locker/LoyaltyCardEditActivity.java | 4 +++ .../protect/card_locker/PermissionUtils.java | 25 +++++++++++++++---- .../protect/card_locker/ScanActivity.java | 4 +++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/protect/card_locker/CatimaAppCompatActivity.java b/app/src/main/java/protect/card_locker/CatimaAppCompatActivity.java index 676106125..86b99a21a 100644 --- a/app/src/main/java/protect/card_locker/CatimaAppCompatActivity.java +++ b/app/src/main/java/protect/card_locker/CatimaAppCompatActivity.java @@ -6,6 +6,7 @@ import android.os.Build; import android.os.Bundle; import android.view.View; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; @@ -49,4 +50,7 @@ public class CatimaAppCompatActivity extends AppCompatActivity { actionBar.setDisplayHomeAsUpEnabled(true); } } + + public void onMockedRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + } } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index e673c6ed4..075d54e82 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -984,6 +984,10 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); + onMockedRequestPermissionsResult(requestCode, permissions, grantResults); + } + + public void onMockedRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { boolean allowed = grantResults[0] == PackageManager.PERMISSION_GRANTED; Integer failureReason = null; diff --git a/app/src/main/java/protect/card_locker/PermissionUtils.java b/app/src/main/java/protect/card_locker/PermissionUtils.java index b5e2390a7..71cf75f52 100644 --- a/app/src/main/java/protect/card_locker/PermissionUtils.java +++ b/app/src/main/java/protect/card_locker/PermissionUtils.java @@ -19,6 +19,7 @@ public class PermissionUtils { * @return */ private static boolean needsStorageReadPermission(Activity activity) { + // Testing showed this permission wasn't needed for anything Catima did past Marshmallow if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return false; } @@ -48,14 +49,21 @@ public class PermissionUtils { * @param activity * @param requestCode */ - public static void requestStorageReadPermission(Activity activity, int requestCode) { + public static void requestStorageReadPermission(CatimaAppCompatActivity activity, int requestCode) { String[] permissions = new String[]{ android.Manifest.permission.READ_EXTERNAL_STORAGE }; int[] mockedResults = new int[]{ PackageManager.PERMISSION_GRANTED }; if (needsStorageReadPermission(activity)) { ActivityCompat.requestPermissions(activity, permissions, requestCode); } else { - activity.onRequestPermissionsResult(requestCode, permissions, mockedResults); + // FIXME: This points to onMockedRequestPermissionResult instead of to + // onRequestPermissionResult because onRequestPermissionResult was only introduced in + // Android 6.0 (SDK 23) and we and to support Android 5.0 (SDK 21) too. + // + // When minSdk becomes 23, this should point to onRequestPermissionResult directly and + // the activity input variable should be changed from CatimaAppCompatActivity to + // Activity. + activity.onMockedRequestPermissionsResult(requestCode, permissions, mockedResults); } } @@ -66,14 +74,21 @@ public class PermissionUtils { * @param activity * @param requestCode */ - public static void requestCameraPermission(Activity activity, int requestCode) { + public static void requestCameraPermission(CatimaAppCompatActivity activity, int requestCode) { String[] permissions = new String[]{ Manifest.permission.CAMERA }; int[] mockedResults = new int[]{ PackageManager.PERMISSION_GRANTED }; if (needsCameraPermission(activity)) { ActivityCompat.requestPermissions(activity, permissions, requestCode); } else { - activity.onRequestPermissionsResult(requestCode, permissions, mockedResults); + // FIXME: This points to onMockedRequestPermissionResult instead of to + // onRequestPermissionResult because onRequestPermissionResult was only introduced in + // Android 6.0 (SDK 23) and we and to support Android 5.0 (SDK 21) too. + // + // When minSdk becomes 23, this should point to onRequestPermissionResult directly and + // the activity input variable should be changed from CatimaAppCompatActivity to + // Activity. + activity.onMockedRequestPermissionsResult(requestCode, permissions, mockedResults); } } -} +} \ No newline at end of file diff --git a/app/src/main/java/protect/card_locker/ScanActivity.java b/app/src/main/java/protect/card_locker/ScanActivity.java index d098da78f..0b394df2b 100644 --- a/app/src/main/java/protect/card_locker/ScanActivity.java +++ b/app/src/main/java/protect/card_locker/ScanActivity.java @@ -282,6 +282,10 @@ public class ScanActivity extends CatimaAppCompatActivity { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); + onMockedRequestPermissionsResult(requestCode, permissions, grantResults); + } + + public void onMockedRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == CaptureManager.getCameraPermissionReqCode()) { showCameraPermissionMissingText(grantResults[0] != PackageManager.PERMISSION_GRANTED); } else if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE) {