From bf244393c5bf0176d373bd93cf87096e9526e026 Mon Sep 17 00:00:00 2001 From: Emanuele Date: Thu, 19 Jul 2018 15:44:08 +0200 Subject: [PATCH] added support for diners cards --- .../creditcarddesign/CardSelector.java | 8 ++- .../creditcarddesign/CreditCardUtils.java | 50 ++++++++++++++---- .../pager/CardNumberFragment.java | 4 +- .../drawable/card_color_round_rect_grey.xml | 12 +++++ .../res/drawable/ic_billing_diners_logo.png | Bin 0 -> 24068 bytes .../src/main/res/values/colors.xml | 3 +- 6 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 creditcarddesign/src/main/res/drawable/card_color_round_rect_grey.xml create mode 100644 creditcarddesign/src/main/res/drawable/ic_billing_diners_logo.png diff --git a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CardSelector.java b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CardSelector.java index 621569a..15be79c 100644 --- a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CardSelector.java +++ b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CardSelector.java @@ -9,6 +9,7 @@ public class CardSelector { public static final CardSelector MASTER = new CardSelector(R.drawable.card_color_round_rect_pink, R.drawable.chip_yellow, R.drawable.chip_yellow_inner, android.R.color.transparent, R.drawable.ic_billing_mastercard_logo, CardSelector.CVV_LENGHT_DEFAULT); public static final CardSelector AMEX = new CardSelector(R.drawable.card_color_round_rect_green, android.R.color.transparent, android.R.color.transparent, R.drawable.img_amex_center_face, R.drawable.ic_billing_amex_logo1, CardSelector.CVV_LENGHT_AMEX); public static final CardSelector DISCOVER = new CardSelector(R.drawable.card_color_round_rect_brown, android.R.color.transparent, android.R.color.transparent, android.R.color.transparent, R.drawable.ic_billing_discover_logo, CardSelector.CVV_LENGHT_DEFAULT); + public static final CardSelector DINERS = new CardSelector(R.drawable.card_color_round_rect_grey, R.drawable.chip, R.drawable.chip_inner, android.R.color.transparent, R.drawable.ic_billing_diners_logo, CardSelector.CVV_LENGHT_DEFAULT); public static final CardSelector DEFAULT = new CardSelector(R.drawable.card_color_round_rect_default, R.drawable.chip, R.drawable.chip_inner, android.R.color.transparent, android.R.color.transparent, CardSelector.CVV_LENGHT_DEFAULT); public static final int CVV_LENGHT_DEFAULT = 3; @@ -89,6 +90,10 @@ public static CardSelector selectCardType(CreditCardUtils.CardType cardType) { return MASTER; case VISA_CARD: return VISA; + case DINERS_14_CARD: + return DINERS; + case DINERS_16_CARD: + return DINERS; default: return DEFAULT; } @@ -100,7 +105,8 @@ public static CardSelector selectCard(String cardNumber) { CardSelector selector = selectCardType(cardType); if ((selector != DEFAULT) && (cardNumber.length() >= 3)) { - int[] drawables = {R.drawable.card_color_round_rect_brown, R.drawable.card_color_round_rect_green, R.drawable.card_color_round_rect_pink, R.drawable.card_color_round_rect_purple, R.drawable.card_color_round_rect_blue}; + int[] drawables = {R.drawable.card_color_round_rect_brown, R.drawable.card_color_round_rect_green, R.drawable.card_color_round_rect_pink, + R.drawable.card_color_round_rect_purple, R.drawable.card_color_round_rect_blue, R.drawable.card_color_round_rect_grey}; int hash = cardNumber.substring(0, 3).hashCode(); if (hash < 0) { diff --git a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CreditCardUtils.java b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CreditCardUtils.java index 030d991..f5ad430 100755 --- a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CreditCardUtils.java +++ b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CreditCardUtils.java @@ -10,19 +10,24 @@ */ public class CreditCardUtils { public enum CardType { - UNKNOWN_CARD, AMEX_CARD, MASTER_CARD, VISA_CARD, DISCOVER_CARD + UNKNOWN_CARD, AMEX_CARD, MASTER_CARD, VISA_CARD, DISCOVER_CARD, DINERS_14_CARD, DINERS_16_CARD } private static final String PATTERN_AMEX = "^3(4|7)[0-9 ]*"; private static final String PATTERN_VISA = "^4[0-9 ]*"; - private static final String PATTERN_MASTER = "^5[0-9 ]*"; + private static final String PATTERN_MASTER = "^[52][0-9]*$"; private static final String PATTERN_DISCOVER = "^6[0-9 ]*"; + private static final String PATTERN_DINERS_14 = "^3(0[0-5]|[6])[0-9]*$"; + private static final String PATTERN_DINERS_16 = "^3[89][0-9]*$"; - public static final int MAX_LENGTH_CARD_NUMBER = 16; - public static final int MAX_LENGTH_CARD_NUMBER_AMEX = 15; + private static final int MAX_LENGTH_CARD_NUMBER = 16; + private static final int MAX_LENGTH_CARD_NUMBER_AMEX = 15; + private static final int MAX_LENGTH_CARD_NUMBER_DINERS_14 = 14; - public static final String CARD_NUMBER_FORMAT = "XXXX XXXX XXXX XXXX"; - public static final String CARD_NUMBER_FORMAT_AMEX = "XXXX XXXXXX XXXXX"; + private static final String CARD_NUMBER_FORMAT = "XXXX XXXX XXXX XXXX"; + private static final String CARD_NUMBER_FORMAT_AMEX = "XXXX XXXXXX XXXXX"; + private static final String CARD_NUMBER_FORMAT_DINERS_14 = "XXXXX XXXX XXXXX"; + private static final String CARD_NUMBER_FORMAT_DINERS_16 = "XXXXX XXXX XXXXXXX"; public static final String EXTRA_CARD_NUMBER = "card_number"; public static final String EXTRA_CARD_CVV = "card_cvv"; @@ -42,7 +47,6 @@ public enum CardType { public static final char CHAR_X = 'X'; public static String handleCardNumber(String inputCardNumber) { - return handleCardNumber(inputCardNumber,SPACE_SEPERATOR); } @@ -56,6 +60,12 @@ public static CardType selectCardType(String cardNumber) { pCardType = Pattern.compile(PATTERN_AMEX); if(pCardType.matcher(cardNumber).matches()) return CardType.AMEX_CARD; + pCardType = Pattern.compile(PATTERN_DINERS_14); + if(pCardType.matcher(cardNumber).matches()) + return CardType.DINERS_14_CARD; + pCardType = Pattern.compile(PATTERN_DINERS_16); + if(pCardType.matcher(cardNumber).matches()) + return CardType.DINERS_16_CARD; pCardType = Pattern.compile(PATTERN_DISCOVER); if(pCardType.matcher(cardNumber).matches()) return CardType.DISCOVER_CARD; @@ -63,13 +73,33 @@ public static CardType selectCardType(String cardNumber) { } public static int selectCardLength(CardType cardType) { - return cardType == CardType.AMEX_CARD ? MAX_LENGTH_CARD_NUMBER_AMEX : MAX_LENGTH_CARD_NUMBER; + switch (cardType) { + case AMEX_CARD: + return MAX_LENGTH_CARD_NUMBER_AMEX; + case DINERS_14_CARD: + return MAX_LENGTH_CARD_NUMBER_DINERS_14; + default: + return MAX_LENGTH_CARD_NUMBER; + } + } + + public static String getCardFormat(CardType cardType) { + switch (cardType) { + case AMEX_CARD: + return CARD_NUMBER_FORMAT_AMEX; + case DINERS_14_CARD: + return CARD_NUMBER_FORMAT_DINERS_14; + case DINERS_16_CARD: + return CARD_NUMBER_FORMAT_DINERS_16; + default: + return CARD_NUMBER_FORMAT; + } } public static String handleCardNumber(String inputCardNumber, String seperator) { String unformattedText = inputCardNumber.replace(seperator, ""); CardType cardType = selectCardType(inputCardNumber); - String format = (cardType == CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT; + String format = getCardFormat(cardType); StringBuilder sbFormattedNumber = new StringBuilder(); for(int iIdx = 0, jIdx = 0; (iIdx < format.length()) && (unformattedText.length() > jIdx); iIdx++) { if(format.charAt(iIdx) == CHAR_X) @@ -84,7 +114,7 @@ public static String handleCardNumber(String inputCardNumber, String seperator) public static String formatCardNumber(String inputCardNumber, String seperator) { String unformattedText = inputCardNumber.replace(seperator, ""); CardType cardType = selectCardType(inputCardNumber); - String format = (cardType == CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT; + String format = getCardFormat(cardType); StringBuilder sbFormattedNumber = new StringBuilder(); for(int iIdx = 0, jIdx = 0; iIdx < format.length(); iIdx++) { if((format.charAt(iIdx) == CHAR_X) && (unformattedText.length() > jIdx)) diff --git a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/pager/CardNumberFragment.java b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/pager/CardNumberFragment.java index a70e9d7..a9c1121 100644 --- a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/pager/CardNumberFragment.java +++ b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/pager/CardNumberFragment.java @@ -10,8 +10,6 @@ import com.cooltechworks.creditcarddesign.CreditCardUtils; import com.cooltechworks.creditcarddesign.R; -import static com.cooltechworks.creditcarddesign.CreditCardUtils.CARD_NUMBER_FORMAT; -import static com.cooltechworks.creditcarddesign.CreditCardUtils.CARD_NUMBER_FORMAT_AMEX; import static com.cooltechworks.creditcarddesign.CreditCardUtils.EXTRA_CARD_NUMBER; /** @@ -57,7 +55,7 @@ public void afterTextChanged(Editable s) { mCardNumberView.setText(cardNumber); String rawCardNumber = cardNumber.replace(CreditCardUtils.SPACE_SEPERATOR, ""); CreditCardUtils.CardType cardType = CreditCardUtils.selectCardType(rawCardNumber); - int maxLengthWithSpaces = ((cardType == CreditCardUtils.CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT).length(); + int maxLengthWithSpaces = CreditCardUtils.getCardFormat(cardType).length(); mCardNumberView.setSelection(cardNumber.length() > maxLengthWithSpaces ? maxLengthWithSpaces : cardNumber.length()); mCardNumberView.addTextChangedListener(this); diff --git a/creditcarddesign/src/main/res/drawable/card_color_round_rect_grey.xml b/creditcarddesign/src/main/res/drawable/card_color_round_rect_grey.xml new file mode 100644 index 0000000..1a3a9c3 --- /dev/null +++ b/creditcarddesign/src/main/res/drawable/card_color_round_rect_grey.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/creditcarddesign/src/main/res/drawable/ic_billing_diners_logo.png b/creditcarddesign/src/main/res/drawable/ic_billing_diners_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f84baf5296b3c7afca69fd1215476b068d9aedad GIT binary patch literal 24068 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 literal 0 HcmV?d00001 diff --git a/creditcarddesign/src/main/res/values/colors.xml b/creditcarddesign/src/main/res/values/colors.xml index b3da404..ea0b83b 100644 --- a/creditcarddesign/src/main/res/values/colors.xml +++ b/creditcarddesign/src/main/res/values/colors.xml @@ -25,7 +25,8 @@ #800000 #A52A2A - + #D4D4D4 + #D4CCD4 \ No newline at end of file