diff --git a/app/build.gradle b/app/build.gradle index 7e37e8bb3..8ded45ee8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,13 +11,13 @@ spotbugs { } android { - compileSdkVersion 30 - buildToolsVersion "30.0.3" + compileSdkVersion 31 + buildToolsVersion "31.0.0" defaultConfig { applicationId "me.hackerchick.catima" minSdkVersion 19 - targetSdkVersion 30 + targetSdkVersion 31 versionCode 83 versionName "2.6.0" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4ebbd3d2e..87d5ddc47 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,7 +29,8 @@ + android:theme="@style/SplashTheme" + android:exported="true"> @@ -92,7 +93,8 @@ + android:theme="@style/AppTheme.NoActionBar" + android:exported="true"> diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index e5d70707e..88f6616af 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -12,6 +12,7 @@ import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; +import android.graphics.ImageDecoder; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -1087,7 +1088,12 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity } else if (requestCode == Utils.CARD_IMAGE_FROM_FILE_FRONT || requestCode == Utils.CARD_IMAGE_FROM_FILE_BACK) { Bitmap bitmap = null; try { - bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), intent.getData()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + ImageDecoder.Source image_source = ImageDecoder.createSource(getContentResolver(), intent.getData()); + bitmap = ImageDecoder.decodeBitmap(image_source, (decoder, info, source) -> decoder.setMutableRequired(true)); + } else { + bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), intent.getData()); + } } catch (IOException e) { Log.e(TAG, "Error getting data from image file"); e.printStackTrace(); diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 6d2ce99f0..608c1defa 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -45,6 +45,7 @@ import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.Toolbar; import androidx.constraintlayout.widget.Guideline; +import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; import androidx.core.widget.TextViewCompat; import protect.card_locker.preferences.Settings; @@ -192,7 +193,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements Drawable unwrappedIcon = AppCompatResources.getDrawable(this, active ? R.drawable.active_dot : R.drawable.inactive_dot); assert unwrappedIcon != null; Drawable wrappedIcon = DrawableCompat.wrap(unwrappedIcon); - DrawableCompat.setTint(wrappedIcon, getResources().getColor(R.color.iconColor)); + DrawableCompat.setTint(wrappedIcon, ContextCompat.getColor(getApplicationContext(), R.color.iconColor)); return wrappedIcon; } @@ -468,7 +469,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements int expiryString = R.string.expiryStateSentence; if(Utils.hasExpired(loyaltyCard.expiry)) { expiryString = R.string.expiryStateSentenceExpired; - expiryView.setTextColor(getResources().getColor(R.color.alert)); + expiryView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.alert)); } expiryView.setText(getString(expiryString, DateFormat.getDateInstance(DateFormat.LONG).format(loyaltyCard.expiry))); expiryView.setTextSize(settings.getFontSizeMax(settings.getMediumFont())); diff --git a/app/src/main/java/protect/card_locker/Utils.java b/app/src/main/java/protect/card_locker/Utils.java index fe8fb8bf5..ff1bad0d7 100644 --- a/app/src/main/java/protect/card_locker/Utils.java +++ b/app/src/main/java/protect/card_locker/Utils.java @@ -8,6 +8,7 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; +import android.graphics.ImageDecoder; import android.graphics.Matrix; import android.os.Build; import android.os.LocaleList; @@ -105,7 +106,12 @@ public class Utils { Bitmap bitmap; try { - bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), intent.getData()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + ImageDecoder.Source image_source = ImageDecoder.createSource(context.getContentResolver(), intent.getData()); + bitmap = ImageDecoder.decodeBitmap(image_source, (decoder, info, source) -> decoder.setMutableRequired(true)); + } else { + bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), intent.getData()); + } } catch (IOException e) { Log.e(TAG, "Error getting data from image file"); e.printStackTrace(); diff --git a/build.gradle b/build.gradle index 39dfcc99d..4f2af7dc8 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.0.1' + classpath 'com.android.tools.build:gradle:7.0.2' classpath 'gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.7.0' // NOTE: Do not place your application dependencies here; they belong @@ -24,6 +24,9 @@ allprojects { maven { url "https://jitpack.io" } gradlePluginPortal() } + tasks.withType(JavaCompile) { + options.compilerArgs << "-Xlint:deprecation" + } } task clean(type: Delete) {