From 7a453a88ed5cba89fb30d53093f87708df760884 Mon Sep 17 00:00:00 2001 From: Damilola Odujoko Date: Fri, 6 Nov 2020 12:40:25 +0100 Subject: [PATCH 1/6] Feat: Add kotlin code --- app/build.gradle | 9 +- .../foodcheckout/CheckoutActivity.java | 120 ------------------ .../paystack/foodcheckout/CheckoutActivity.kt | 103 +++++++++++++++ .../paystack/foodcheckout/MainActivity.java | 27 ---- .../com/paystack/foodcheckout/MainActivity.kt | 23 ++++ build.gradle | 2 + 6 files changed, 136 insertions(+), 148 deletions(-) delete mode 100644 app/src/main/java/com/paystack/foodcheckout/CheckoutActivity.java create mode 100644 app/src/main/java/com/paystack/foodcheckout/CheckoutActivity.kt delete mode 100644 app/src/main/java/com/paystack/foodcheckout/MainActivity.java create mode 100644 app/src/main/java/com/paystack/foodcheckout/MainActivity.kt diff --git a/app/build.gradle b/app/build.gradle index 60f4364..d96fa94 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,6 @@ plugins { id 'com.android.application' + id 'kotlin-android' } android { @@ -27,13 +28,19 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + + kotlinOptions { + jvmTarget = '1.8' + } } dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' - implementation 'androidx.constraintlayout:constraintlayout:2.0.2' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.13.1' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' diff --git a/app/src/main/java/com/paystack/foodcheckout/CheckoutActivity.java b/app/src/main/java/com/paystack/foodcheckout/CheckoutActivity.java deleted file mode 100644 index 17a9fc9..0000000 --- a/app/src/main/java/com/paystack/foodcheckout/CheckoutActivity.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.paystack.foodcheckout; - -import android.content.Intent; -import android.os.Bundle; -import android.text.Editable; -import android.text.TextWatcher; -import android.util.Log; -import android.widget.Button; -import android.widget.Toast; - -import androidx.appcompat.app.AppCompatActivity; - -import com.google.android.material.textfield.TextInputLayout; - -import java.util.Objects; - -import co.paystack.android.Paystack; -import co.paystack.android.PaystackSdk; -import co.paystack.android.Transaction; -import co.paystack.android.model.Card; -import co.paystack.android.model.Charge; - -public class CheckoutActivity extends AppCompatActivity { - - private TextInputLayout mCardNumber; - private TextInputLayout mCardExpiry; - private TextInputLayout mCardCVV; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_checkout); - - initializePaystack(); - initializeFormVariables(); - } - - private void initializePaystack() { - PaystackSdk.initialize(getApplicationContext()); - PaystackSdk.setPublicKey(BuildConfig.PSTK_PUBLIC_KEY); - } - - - private void initializeFormVariables() { - mCardNumber = findViewById(R.id.til_card_number); - mCardExpiry = findViewById(R.id.til_card_expiry); - mCardCVV = findViewById(R.id.til_card_cvv); - - // this is used to add a forward slash (/) between the cards expiry month - // and year (11/21). After the month is entered, a forward slash is added - // before the year - - Objects.requireNonNull(mCardExpiry.getEditText()).addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - - } - - @Override - public void afterTextChanged(Editable s) { - if(s.toString().length() == 2 && !s.toString().contains("/")) { - s.append("/"); - } - } - }); - - Button button = findViewById(R.id.btn_make_payment); - button.setOnClickListener(v -> performCharge()); - } - - private void performCharge() { - Intent intent = getIntent(); - - String cardNumber = mCardNumber.getEditText().getText().toString(); - String cardExpiry = mCardExpiry.getEditText().getText().toString(); - String cvv = mCardCVV.getEditText().getText().toString(); - - String[] cardExpiryArray = cardExpiry.split("/"); - int expiryMonth = Integer.parseInt(cardExpiryArray[0]); - int expiryYear = Integer.parseInt(cardExpiryArray[1]); - int amount = intent.getIntExtra(getString(R.string.meal_name), 0); - amount *= 100; - - Card card = new Card(cardNumber, expiryMonth, expiryYear, cvv); - - Charge charge = new Charge(); - charge.setAmount(amount); - charge.setEmail("customer@email.com"); - charge.setCard(card); - - PaystackSdk.chargeCard(this, charge, new Paystack.TransactionCallback() { - @Override - public void onSuccess(Transaction transaction) { - parseResponse(transaction.getReference()); - } - - @Override - public void beforeValidate(Transaction transaction) { - Log.d("Main Activity", "beforeValidate: " + transaction.getReference()); - } - - @Override - public void onError(Throwable error, Transaction transaction) { - Log.d("Main Activity", "onError: " + error.getLocalizedMessage()); - Log.d("Main Activity", "onError: " + error); - } - - }); - } - - private void parseResponse(String transactionReference) { - String message = "Payment Successful - " + transactionReference; - Toast.makeText(this, message, Toast.LENGTH_LONG).show(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/paystack/foodcheckout/CheckoutActivity.kt b/app/src/main/java/com/paystack/foodcheckout/CheckoutActivity.kt new file mode 100644 index 0000000..c75e649 --- /dev/null +++ b/app/src/main/java/com/paystack/foodcheckout/CheckoutActivity.kt @@ -0,0 +1,103 @@ +package com.paystack.foodcheckout + +import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.widget.Button +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import co.paystack.android.Paystack.TransactionCallback +import co.paystack.android.PaystackSdk +import co.paystack.android.Transaction +import co.paystack.android.model.Card +import co.paystack.android.model.Charge +import com.google.android.material.textfield.TextInputLayout + +class CheckoutActivity : AppCompatActivity() { + private lateinit var mCardNumber: TextInputLayout + private lateinit var mCardExpiry: TextInputLayout + private lateinit var mCardCVV: TextInputLayout + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_checkout) + + initializePaystack() + initializeFormVariables() + } + + private fun initializePaystack() { + PaystackSdk.initialize(applicationContext) + PaystackSdk.setPublicKey(BuildConfig.PSTK_PUBLIC_KEY) + } + + private fun initializeFormVariables() { + mCardNumber = findViewById(R.id.til_card_number) + mCardExpiry = findViewById(R.id.til_card_expiry) + mCardCVV = findViewById(R.id.til_card_cvv) + + // this is used to add a forward slash (/) between the cards expiry month + // and year (11/21). After the month is entered, a forward slash is added + // before the year + mCardExpiry.editText!!.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + if (s.toString().length == 2 && !s.toString().contains("/")) { + s!!.append("/") + } + } + + }) + + val button = findViewById