From a5901700b4c9ade4464b7e1693e6df10da3ddd64 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Fri, 11 Feb 2022 18:45:28 +0100 Subject: [PATCH] Fix crash in edit activity on locale without region --- CHANGELOG.md | 1 + .../card_locker/LoyaltyCardEditActivity.java | 18 ++++++++++++------ .../LoyaltyCardViewActivityTest.java | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e447dd51..cc1cfb0ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unreleased - 103 - Fix manual language selection not applying everywhere +- Fix crash in edit view on regionless locale ## v2.15.1 - 102 (2022-02-10) diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 2366eebb0..373d1a4d8 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -448,14 +448,10 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { for (int i = locales.size() - 1; i >= 0; i--) { Locale locale = locales.get(i); - String currencySymbol = Currency.getInstance(locale).getSymbol(); - currencyList.remove(currencySymbol); - currencyList.add(0, currencySymbol); + currencyPrioritizeLocaleSymbols(currencyList, locale); } } else { - String currencySymbol = Currency.getInstance(mSystemLocale).getSymbol(); - currencyList.remove(currencySymbol); - currencyList.add(0, currencySymbol); + currencyPrioritizeLocaleSymbols(currencyList, mSystemLocale); } currencyList.add(0, getString(R.string.points)); @@ -1513,4 +1509,14 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { throw new UnsupportedOperationException(); } } + + private void currencyPrioritizeLocaleSymbols(ArrayList currencyList, Locale locale) { + try { + String currencySymbol = Currency.getInstance(locale).getSymbol(); + currencyList.remove(currencySymbol); + currencyList.add(0, currencySymbol); + } catch (IllegalArgumentException e) { + Log.d(TAG, "Could not get currency data for locale info: " + e); + } + } } diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index 16829faf7..56a4b8c6b 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -313,6 +313,24 @@ public class LoyaltyCardViewActivityTest { } } + @Test + @Config(qualifiers="de") + public void noCrashOnRegionlessLocale() { + ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create(); + + LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get(); + final Context context = activity.getApplicationContext(); + + activityController.start(); + activityController.visible(); + activityController.resume(); + + shadowOf(getMainLooper()).idle(); + + // Check default settings + checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null); + } + @Test public void noDataLossOnResumeOrRotate() { registerMediaStoreIntentHandler();