Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: improve payment by stripe #1084

Merged
merged 13 commits into from
Mar 5, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import android.text.SpannableStringBuilder
import android.text.TextPaint
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
Expand Down Expand Up @@ -61,6 +62,7 @@ import kotlinx.android.synthetic.main.fragment_attendee.view.time
import kotlinx.android.synthetic.main.fragment_attendee.view.view
import kotlinx.android.synthetic.main.fragment_attendee.view.year
import kotlinx.android.synthetic.main.fragment_attendee.view.yearText
import kotlinx.android.synthetic.main.fragment_attendee.view.cardNumber
import kotlinx.android.synthetic.main.fragment_attendee.view.acceptCheckbox
import org.fossasia.openevent.general.R
import org.fossasia.openevent.general.attendees.forms.CustomForm
Expand Down Expand Up @@ -114,7 +116,7 @@ class AttendeeFragment : Fragment() {
}
singleTicket = ticketIdAndQty?.map { it.second }?.sum() == 1
API_KEY = activity?.packageManager?.getApplicationInfo(activity?.packageName, PackageManager.GET_META_DATA)
?.metaData?.getString(STRIPE_KEY).toString()
?.metaData?.getString(STRIPE_KEY).toString()
}

override fun onCreateView(
Expand Down Expand Up @@ -218,6 +220,44 @@ class AttendeeFragment : Fragment() {

attendeeViewModel.initializeSpinner()

rootView.cardNumber.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
}

override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}

override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
if (s == null || s.length < 3) {
setCardSelectorAndError(0, visibility = true, error = false)
return
}
val card = Utils.getCardType(s.toString())
if (card == Utils.cardType.NONE) {
setCardSelectorAndError(0, visibility = true, error = true)
return
}

val pos: Int = card.let {
when (it) {
Utils.cardType.AMERICAN_EXPRESS -> 1
Utils.cardType.MASTER_CARD -> 2
Utils.cardType.VISA -> 3
else -> 0
}
}
setCardSelectorAndError(pos, visibility = false, error = false)
}
fun setCardSelectorAndError(pos: Int, visibility: Boolean, error: Boolean) {
rootView.cardSelector.setSelection(pos, true)
rootView.cardSelector.isVisible = visibility
if (error) {
rootView.cardNumber.error = "Invalid card number"
return
}
rootView.cardNumber.error = null
pranavpandey1998official marked this conversation as resolved.
Show resolved Hide resolved
}
})
rootView.month.adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item,
attendeeViewModel.month)
rootView.month.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
Expand All @@ -230,6 +270,9 @@ class AttendeeFragment : Fragment() {
rootView.monthText.text = attendeeViewModel.month[p2]
}
}
rootView.monthText.setOnClickListener {
rootView.month.performClick()
}

rootView.year.adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item,
attendeeViewModel.year)
Expand All @@ -245,6 +288,9 @@ class AttendeeFragment : Fragment() {
rootView.yearText.text = attendeeViewModel.year[p2]
}
}
rootView.yearText.setOnClickListener {
rootView.year.performClick()
}

rootView.cardSelector.adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item,
attendeeViewModel.cardType)
Expand Down Expand Up @@ -434,7 +480,7 @@ class AttendeeFragment : Fragment() {
if (show) {
val builder = AlertDialog.Builder(context)
builder.setMessage(getString(R.string.tickets_sold_out))
.setPositiveButton(getString(R.string.ok)) { dialog, _ -> dialog.cancel() }
.setPositiveButton(getString(R.string.ok)) { dialog, _ -> dialog.cancel() }
builder.show()
}
}
Expand Down Expand Up @@ -480,10 +526,10 @@ class AttendeeFragment : Fragment() {
rootView.eventName.text = "${event.name} - ${EventUtils.getFormattedDate(startsAt)}"
rootView.amount.text = "Total: $paymentCurrency$amount"
rootView.time.text = dateString.append(EventUtils.getFormattedDate(startsAt))
.append(" - ")
.append(EventUtils.getFormattedDate(endsAt))
.append(" • ")
.append(EventUtils.getFormattedTime(startsAt))
.append(" - ")
.append(EventUtils.getFormattedDate(endsAt))
.append(" • ")
.append(EventUtils.getFormattedTime(startsAt))
}

private fun openOrderCompletedFragment() {
Expand Down
35 changes: 28 additions & 7 deletions app/src/main/java/org/fossasia/openevent/general/utils/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import androidx.navigation.NavOptions
import com.google.android.material.bottomnavigation.BottomNavigationView
import org.fossasia.openevent.general.R
import timber.log.Timber
import java.util.regex.Pattern

object Utils {

Expand All @@ -30,13 +31,13 @@ object Utils {
}

CustomTabsIntent.Builder()
.setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimaryDark))
.setCloseButtonIcon(BitmapFactory.decodeResource(context.resources,
R.drawable.ic_arrow_back_white_cct))
.setStartAnimations(context, R.anim.slide_in_right, R.anim.slide_out_left)
.setExitAnimations(context, R.anim.slide_in_left, R.anim.slide_out_right)
.build()
.launchUrl(context, Uri.parse(url))
.setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimaryDark))
.setCloseButtonIcon(BitmapFactory.decodeResource(context.resources,
R.drawable.ic_arrow_back_white_cct))
.setStartAnimations(context, R.anim.slide_in_right, R.anim.slide_out_left)
.setExitAnimations(context, R.anim.slide_in_left, R.anim.slide_out_right)
.build()
.launchUrl(context, Uri.parse(url))
}

fun showNoInternetDialog(context: Context?) {
Expand Down Expand Up @@ -137,4 +138,24 @@ object Utils {
navigation.animation = AnimationUtils.loadAnimation(context, R.anim.slide_down)
}
}

enum class cardType {
VISA,
MASTER_CARD,
AMERICAN_EXPRESS,
NONE,
}

fun getCardType(s: String): cardType {
val visaPattern = Pattern.compile("^4[0-9]{0,15}$")
val masterCardPattern = Pattern.compile("^(5[1-5]|222[1-9]|22[3-9][0-9]|2[3-6]" +
"[0-9]{2}|27[01][0-9]|2720)[0-9]{0,15}$")
val americanExpressPattern = Pattern.compile("^3[47][0-9]{0,15}$")
return when {
americanExpressPattern.matcher(s).matches() -> cardType.AMERICAN_EXPRESS
masterCardPattern.matcher(s).matches() -> cardType.MASTER_CARD
visaPattern.matcher(s).matches() -> cardType.VISA
else -> cardType.NONE
}
}
}
5 changes: 4 additions & 1 deletion app/src/main/res/layout/fragment_attendee.xml
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@

<EditText
android:id="@+id/cardNumber"
android:inputType="number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/card_number" />
Expand All @@ -330,7 +331,7 @@
<TextView
android:id="@+id/selectCard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="@dimen/spinner_width"
android:layout_weight="0.8"
android:gravity="center"
android:textSize="@dimen/text_size_large" />
Expand Down Expand Up @@ -410,6 +411,7 @@

<EditText
android:id="@+id/cvc"
android:inputType="number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/cvc" />
Expand All @@ -423,6 +425,7 @@

<EditText
android:id="@+id/postalCode"
android:inputType="number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/postal_code" />
Expand Down