diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 7cd6ed737..f80a782bb 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -855,10 +855,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { // Generate random header color if (tempLoyaltyCard.headerColor == null) { // Select a random color to start out with. - TypedArray colors = getResources().obtainTypedArray(R.array.letter_tile_colors); - final int color = (int) (Math.random() * colors.length()); - updateTempState(LoyaltyCardField.headerColor, colors.getColor(color, Color.BLACK)); - colors.recycle(); + updateTempState(LoyaltyCardField.headerColor, Utils.getRandomHeaderColor(this)); } // It can't be null because we set it in updateTempState but SpotBugs insists it can be @@ -919,7 +916,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { protected void setColorFromIcon() { Object icon = thumbnail.getTag(); if (icon != null && (icon instanceof Bitmap)) { - updateTempState(LoyaltyCardField.headerColor, new Palette.Builder((Bitmap) icon).generate().getDominantColor(tempLoyaltyCard.headerColor != null ? tempLoyaltyCard.headerColor : R.attr.colorPrimary)); + updateTempState(LoyaltyCardField.headerColor, Utils.getHeaderColorFromImage((Bitmap) icon, tempLoyaltyCard.headerColor)); } else { Log.d("setColorFromIcon", "attempting header color change from icon but icon does not exist"); } diff --git a/app/src/main/java/protect/card_locker/Utils.java b/app/src/main/java/protect/card_locker/Utils.java index 55e9d86d0..43175783d 100644 --- a/app/src/main/java/protect/card_locker/Utils.java +++ b/app/src/main/java/protect/card_locker/Utils.java @@ -5,6 +5,7 @@ import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; +import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; @@ -48,6 +49,7 @@ import androidx.appcompat.app.AppCompatDelegate; import androidx.core.graphics.ColorUtils; import androidx.exifinterface.media.ExifInterface; +import androidx.palette.graphics.Palette; import protect.card_locker.preferences.Settings; public class Utils { @@ -518,4 +520,18 @@ public class Utils { item.setTitle(R.string.action_show_details); } } + + public static int getHeaderColorFromImage(Bitmap image, int fallback) { + if (image == null) { + return fallback; + } + + return new Palette.Builder(image).generate().getDominantColor(R.attr.colorPrimary); + } + + public static int getRandomHeaderColor(Context context) { + TypedArray colors = context.getResources().obtainTypedArray(R.array.letter_tile_colors); + final int color = (int) (Math.random() * colors.length()); + return colors.getColor(color, Color.BLACK); + } } diff --git a/app/src/main/java/protect/card_locker/importexport/StocardImporter.java b/app/src/main/java/protect/card_locker/importexport/StocardImporter.java index 33595b084..6a5ae3c33 100644 --- a/app/src/main/java/protect/card_locker/importexport/StocardImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/StocardImporter.java @@ -216,10 +216,17 @@ public class StocardImporter implements Importer { } } - long loyaltyCardInternalId = DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, 0, null); - + int headerColor = Utils.getRandomHeaderColor(context); + Bitmap cardIcon = null; if (providerData != null && providerData.containsKey("logo")) { - Utils.saveCardImage(context, (Bitmap) providerData.get("logo"), (int) loyaltyCardInternalId, ImageLocationType.icon); + cardIcon = (Bitmap) providerData.get("logo"); + headerColor = Utils.getHeaderColorFromImage(cardIcon, headerColor); + } + + long loyaltyCardInternalId = DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, 0, null); + + if (cardIcon != null) { + Utils.saveCardImage(context, cardIcon, (int) loyaltyCardInternalId, ImageLocationType.icon); } if (loyaltyCardData.containsKey("frontImage")) {