Skip to content

Instantly share code, notes, and snippets.

@rkbi
Last active February 15, 2022 03:56
Show Gist options
  • Select an option

  • Save rkbi/60b39e16d69288c4e08dc7cffe03cb10 to your computer and use it in GitHub Desktop.

Select an option

Save rkbi/60b39e16d69288c4e08dc7cffe03cb10 to your computer and use it in GitHub Desktop.

Revisions

  1. rkbi revised this gist Feb 15, 2022. No changes.
  2. rkbi created this gist Feb 15, 2022.
    257 changes: 257 additions & 0 deletions MainActivity.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,257 @@
    package com.sslwireless.sslsdkintegration;

    import android.content.Context;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.CompoundButton;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.Spinner;
    import android.widget.Toast;

    import androidx.appcompat.app.AppCompatActivity;
    import androidx.fragment.app.FragmentManager;
    import androidx.fragment.app.FragmentTransaction;

    import com.sslwireless.sslcommerzlibrary.model.initializer.SSLCAdditionalInitializer;
    import com.sslwireless.sslcommerzlibrary.model.initializer.SSLCCustomerInfoInitializer;
    import com.sslwireless.sslcommerzlibrary.model.initializer.SSLCEMITransactionInitializer;
    import com.sslwireless.sslcommerzlibrary.model.initializer.SSLCProductInitializer;
    import com.sslwireless.sslcommerzlibrary.model.initializer.SSLCProductInitializer.ProductProfile;
    import com.sslwireless.sslcommerzlibrary.model.initializer.SSLCShipmentInfoInitializer;
    import com.sslwireless.sslcommerzlibrary.model.initializer.SSLCommerzInitialization;
    import com.sslwireless.sslcommerzlibrary.model.response.SSLCTransactionInfoModel;
    import com.sslwireless.sslcommerzlibrary.model.util.SSLCCurrencyType;
    import com.sslwireless.sslcommerzlibrary.model.util.SSLCEnums;
    import com.sslwireless.sslcommerzlibrary.model.util.SSLCLanguage;
    import com.sslwireless.sslcommerzlibrary.model.util.SSLCSdkType;
    import com.sslwireless.sslcommerzlibrary.view.singleton.IntegrateSSLCommerz;
    import com.sslwireless.sslcommerzlibrary.viewmodel.listener.SSLCTransactionResponseListener;
    import com.sslwireless.sslsdkintegration.databinding.ActivityMainBinding;

    public class MainActivity extends AppCompatActivity implements SSLCTransactionResponseListener {

    private Context context;
    private Button tv_hello;
    private EditText etAmount, etPhone, storeID, storePass,multiCard;
    double amount = 15;
    String phoneNumber = "";
    RadioButton rbTest, rbLive, rbDev;
    SSLCommerzInitialization sslCommerzInitialization;
    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityMainBinding.inflate(LayoutInflater.from(this));
    setContentView(binding.getRoot());
    //setContentView(R.layout.activity_main);

    context = this;

    // tv_hello = findViewById(R.id.tv_hello);
    // storeID = findViewById(R.id.storeID);
    // storePass = findViewById(R.id.storePass);
    // etAmount = findViewById(R.id.etAmount);
    // etPhone = findViewById(R.id.etPhone);
    // multiCard = findViewById(R.id.multiCard);
    // rbTest = findViewById(R.id.radio0);

    //binding.etProductName.setText("Burger");
    //binding.etProductCategory.setText("food");
    //binding.etDiscountAmount.setText("5");

    binding.storeID.setText("testbox");
    binding.storePass.setText("qwerty");

    binding.etPhone.setText("01408335173");
    binding.etCustomerName.setText("Amimul");
    binding.etEmail.setText("[email protected]");
    binding.etAddress.setText("8 Banasree");
    binding.etCity.setText("Dhaka");
    binding.cbCustomer.setOnCheckedChangeListener((buttonView, isChecked) -> {
    if (isChecked){
    binding.etPhone.setText("01408335173");
    binding.etCustomerName.setText("Amimul");
    binding.etEmail.setText("[email protected]");
    binding.etAddress.setText("8 Banasree");
    binding.etCity.setText("Dhaka");
    }else{
    binding.etPhone.getText().clear();
    binding.etCustomerName.getText().clear();
    binding.etEmail.getText().clear();
    binding.etAddress.getText().clear();
    binding.etCity.getText().clear();
    }
    });

    binding.tvHello.setOnClickListener(v -> initTransaction());
    }

    private void initTransaction() {
    if (!binding.etAmount.getText().toString().isEmpty()) {
    amount = Double.parseDouble(binding.etAmount.getText().toString().trim());
    }
    if (!binding.etPhone.getText().toString().isEmpty()) {
    phoneNumber = binding.etPhone.getText().toString().trim();
    }


    // String[] items = new String[]{"general", "physical-goods", "non-physical-goods"};
    // ArrayAdapter<String> adapter = new ArrayAdapter<String> (MainActivity.this, android.R.layout.simple_spinner_item, items);
    // adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // binding.spinnerProfile.setAdapter(adapter);

    if(binding.radio0.isChecked()) {
    sslCommerzInitialization = new SSLCommerzInitialization(binding.storeID.getText().toString(),
    binding.storePass.getText().toString(), amount, SSLCCurrencyType.BDT,
    "123456789098765", "food", SSLCSdkType.TESTBOX)
    .addMultiCardName(binding.multiCard.getText().toString())
    .addLanguage(SSLCLanguage.English)
    .addOTPReadHashKey("");
    }else if(binding.radio1.isChecked()) {
    sslCommerzInitialization = new SSLCommerzInitialization(binding.storeID.getText().toString(),
    binding.storePass.getText().toString(), amount, SSLCCurrencyType.BDT,
    "123456789098765", "food", SSLCSdkType.LIVE)
    .addMultiCardName(binding.multiCard.getText().toString())
    .addOTPReadHashKey("");
    }

    final SSLCCustomerInfoInitializer SSLCCustomerInfoInitializer = setCustomerInfo();
    SSLCEMITransactionInitializer sslcEMITransactionInitializer = null;
    if (binding.cbEmiEnabled.isChecked()){
    sslcEMITransactionInitializer = new SSLCEMITransactionInitializer(1);
    sslcEMITransactionInitializer.setEmi_max_list_options(1);
    sslcEMITransactionInitializer.setEmi_options(1);
    sslcEMITransactionInitializer.setEmi_selected_inst(3);
    }
    SSLCProductInitializer SSLCProductInitializer = setProductInfo();

    SSLCShipmentInfoInitializer sslcShipmentInfoInitializer = null;
    if (!binding.etShippingItem.getText().toString().isEmpty()) {
    sslcShipmentInfoInitializer = new SSLCShipmentInfoInitializer(binding.etShippingMethod.getText().toString(),
    Integer.parseInt(binding.etShippingItem.getText().toString()), new SSLCShipmentInfoInitializer.ShipmentDetails(binding.etShpiName.getText().toString(), binding.etShipAddress.getText().toString(),
    "Dhaka", "1000", "BD"));
    }
    //ProviderInstaller.installIfNeeded(getContext());
    SSLCAdditionalInitializer sslcAdditionalInitializer = setAdditionalInfo();

    IntegrateSSLCommerz
    .getInstance(context)
    .addSSLCommerzInitialization(sslCommerzInitialization)
    .addCustomerInfoInitializer(SSLCCustomerInfoInitializer)
    .addEMITransactionInitializer(sslcEMITransactionInitializer)
    .addShipmentInfoInitializer(sslcShipmentInfoInitializer)
    .addProductInitializer(SSLCProductInitializer)
    .addAdditionalInitializer(sslcAdditionalInitializer)
    .buildApiCall(this);
    }

    private SSLCCustomerInfoInitializer setCustomerInfo() {
    SSLCCustomerInfoInitializer sslcCustomerInfoInitializer = null;
    if (!phoneNumber.isEmpty()) {
    String customerName = binding.etCustomerName.getText().toString();
    String email = binding.etEmail.getText().toString();
    String address = binding.etAddress.getText().toString();
    String city = binding.etCity.getText().toString();
    sslcCustomerInfoInitializer = new SSLCCustomerInfoInitializer(customerName, email,
    address, city, "", "", phoneNumber);
    }

    return sslcCustomerInfoInitializer;
    }

    private SSLCProductInitializer setProductInfo(){
    SSLCProductInitializer SSLCProductInitializer = null;
    if (!binding.etProductName.getText().toString().isEmpty()) {
    String productName = binding.etProductName.getText().toString();
    String productCat = binding.etProductCategory.getText().toString();
    String productAmount = binding.etProductAmount.getText().toString();
    String discountAmount = binding.etDiscountAmount.getText().toString();

    String spinnertext = binding.spinnerProfile.getSelectedItem().toString();
    if (spinnertext.equalsIgnoreCase("general")){
    SSLCProductInitializer = new SSLCProductInitializer(productName, productCat, new SSLCProductInitializer.ProductProfile.General(spinnertext, "A"));
    }else if (spinnertext.equalsIgnoreCase("physical-goods")) {
    SSLCProductInitializer = new SSLCProductInitializer(productName, productCat, new SSLCProductInitializer.ProductProfile.PhysicalGoods(spinnertext, "A"));
    }else if (spinnertext.equalsIgnoreCase("non-physical-goods")) {
    SSLCProductInitializer = new SSLCProductInitializer(productName, productCat, new SSLCProductInitializer.ProductProfile.NonPhysicalGoods(spinnertext, "A"));
    }else if (spinnertext.equalsIgnoreCase("telecom-vertical")) {
    SSLCProductInitializer = new SSLCProductInitializer(productName, productCat, new SSLCProductInitializer.ProductProfile.TelecomVertical(spinnertext, "A", "", ""));
    }else if (spinnertext.equalsIgnoreCase("travel-vertical")) {
    SSLCProductInitializer = new SSLCProductInitializer(productName, productCat, new SSLCProductInitializer.ProductProfile.TravelVertical(spinnertext, "A", "", "", ""));
    }else{
    SSLCProductInitializer = new SSLCProductInitializer(productName, productCat, new SSLCProductInitializer.ProductProfile.AirlinesTicket(spinnertext, "A", "", "", "",""));
    }
    if (!productAmount.isEmpty()) {
    SSLCProductInitializer.addDiscountAmount(Double.parseDouble(productAmount));
    }
    if (!discountAmount.isEmpty()) {
    SSLCProductInitializer.addDiscountAmount(Double.parseDouble(discountAmount));
    }
    }

    return SSLCProductInitializer;
    }

    private SSLCAdditionalInitializer setAdditionalInfo(){
    final SSLCAdditionalInitializer sslcAdditionalInitializer = new SSLCAdditionalInitializer();
    if (!binding.etValueA.getText().toString().isEmpty()) {
    sslcAdditionalInitializer.setValueA(binding.etValueA.getText().toString());
    }
    if (!binding.etValueB.getText().toString().isEmpty()) {
    sslcAdditionalInitializer.setValueB(binding.etValueB.getText().toString());
    }
    if (!binding.etValueC.getText().toString().isEmpty()) {
    sslcAdditionalInitializer.setValueC(binding.etValueC.getText().toString());
    }
    if (!binding.etValueD.getText().toString().isEmpty()) {
    sslcAdditionalInitializer.setValueD(binding.etValueD.getText().toString());
    }
    if (!binding.etBillNumber.getText().toString().isEmpty()) {
    sslcAdditionalInitializer.setBill_number(binding.etBillNumber.getText().toString());
    }
    if (!binding.etUserRefer.getText().toString().isEmpty()) {
    sslcAdditionalInitializer.setUser_refer(binding.etUserRefer.getText().toString());
    }
    if (!binding.etCampaignCode.getText().toString().isEmpty()) {
    sslcAdditionalInitializer.setCampaign_code(binding.etCampaignCode.getText().toString());
    }
    if (!binding.etInvoiceId.getText().toString().isEmpty()) {
    sslcAdditionalInitializer.setInvoice_id(binding.etInvoiceId.getText().toString());
    }
    if (!binding.etNoOffer.getText().toString().isEmpty()) {
    sslcAdditionalInitializer.setNo_offer(Integer.parseInt(binding.etNoOffer.getText().toString()));
    }

    return sslcAdditionalInitializer;
    }

    @Override
    public void transactionSuccess(SSLCTransactionInfoModel transactionInfo) {
    //Toast.makeText(context, "Transaction successful: Amount " + transactionInfo.getAmount()+"TK", Toast.LENGTH_LONG).show();
    String vlue = "Transaction successful: Amount " + transactionInfo.getAmount()+" TK";
    FragmentManager manager = getSupportFragmentManager();
    final ConfirmDF dialogFragment = new ConfirmDF();
    Bundle args = new Bundle();
    args.putString(SSLCEnums.Common.Type.name(), vlue);
    dialogFragment.setArguments(args);
    //dialogFragment.show(manager, "dialog_fragment");
    FragmentTransaction ft = manager.beginTransaction();
    ft.add(dialogFragment, "fragment_tag");
    ft.commitAllowingStateLoss();
    }

    @Override
    public void transactionFail(String message) {
    Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    }

    @Override
    public void closed(String message) {
    Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    }
    }
    476 changes: 476 additions & 0 deletions activity_main.xml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,476 @@
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.core.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="40dp"
    android:gravity="center">


    <EditText
    android:id="@+id/storePass"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@id/storeID"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Default Store pass set but can edit"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etAmount"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/storePass"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:gravity="center"
    android:hint="Enter amount: default 15 BDT"
    android:inputType="numberDecimal"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/multiCard"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etAmount"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:gravity="center"
    android:hint="Enter Multi Card"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <CheckBox
    android:id="@+id/cbEmiEnabled"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/multiCard"
    android:layout_centerHorizontal="true"
    android:checked="false"
    android:text="EMI Enabled" />

    <LinearLayout
    android:id="@+id/layoutCustomerInfo"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/cbEmiEnabled"
    android:layout_marginTop="16dp"
    android:orientation="vertical">

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:gravity="center_horizontal"
    android:text="Customer Information"
    android:textSize="20sp"
    android:textStyle="bold" />

    <androidx.appcompat.widget.AppCompatCheckBox
    android:id="@+id/cbCustomer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerInParent="true"
    android:layout_marginRight="16dp"
    android:checked="true"
    android:text="Fill" />
    </RelativeLayout>

    <EditText
    android:id="@+id/etPhone"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@id/etAmount"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:gravity="center"
    android:hint="Enter phone"
    android:inputType="numberDecimal"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etCustomerName"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Customer Name"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etEmail"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etAmount"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Email"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etAddress"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Address"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etCity"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="City"
    android:inputType="text"
    android:padding="20dp"></EditText>

    </LinearLayout>

    <LinearLayout
    android:id="@+id/layoutProductInfo"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/layoutCustomerInfo"
    android:orientation="vertical">

    <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:gravity="center_horizontal"
    android:text="Product Information"
    android:textSize="20sp"
    android:textStyle="bold" />

    <EditText
    android:id="@+id/etProductName"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etAmount"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Product Name"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etProductCategory"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etAmount"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Product Category"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <androidx.appcompat.widget.AppCompatSpinner
    android:id="@+id/spinnerProfile"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:entries="@array/itemselect"
    android:theme="@style/CustomSpinnerTheme"
    android:spinnerMode="dropdown"/>

    <EditText
    android:id="@+id/etProductAmount"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/spinnerProfile"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Enter product amount"
    android:inputType="numberDecimal"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etDiscountAmount"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etProductAmount"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Enter discount amount"
    android:inputType="numberDecimal"
    android:padding="20dp"></EditText>

    </LinearLayout>

    <LinearLayout
    android:id="@+id/layoutShippingInfo"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/layoutProductInfo"
    android:orientation="vertical">

    <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:gravity="center_horizontal"
    android:text="Shipping Information"
    android:textSize="20sp"
    android:textStyle="bold" />

    <EditText
    android:id="@+id/etShippingMethod"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etAmount"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Shipping Method"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etShippingItem"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etAmount"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Number Items"
    android:inputType="numberDecimal"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etShpiName"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Ship Name"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etShipAddress"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Ship Address"
    android:inputType="text"
    android:padding="20dp"></EditText>

    </LinearLayout>

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/layoutShippingInfo"
    android:orientation="vertical">

    <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:gravity="center_horizontal"
    android:text="Additional Information"
    android:textSize="20sp"
    android:textStyle="bold" />

    <EditText
    android:id="@+id/etValueA"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etAmount"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="ValueA"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etValueB"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etAmount"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="ValueB"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etValueC"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="ValueC"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etValueD"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="ValueD"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etBillNumber"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="bill number"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etUserRefer"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="user refer"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etCampaignCode"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="campaign code"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etInvoiceId"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="invoic id"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <EditText
    android:id="@+id/etNoOffer"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/etPhone"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="no offer"
    android:inputType="numberDecimal"
    android:padding="20dp"></EditText>

    </LinearLayout>

    <EditText
    android:id="@+id/storeID"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/radioGroup1"
    android:layout_margin="8dp"
    android:gravity="center"
    android:hint="Default Store Id set but can edit"
    android:inputType="text"
    android:padding="20dp"></EditText>

    <RadioGroup
    android:id="@+id/radioGroup1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="20dp"
    android:orientation="horizontal">

    <RadioButton
    android:id="@+id/radio0"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:checked="true"
    android:text="Sandbox" />

    <RadioButton
    android:id="@+id/radio1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:text="Live" />
    </RadioGroup>
    </RelativeLayout>
    </androidx.core.widget.NestedScrollView>

    <Button
    android:id="@+id/tv_hello"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:background="@color/colorPrimary"
    android:gravity="center"
    android:text="Pay Now"
    android:textColor="@color/white"
    android:textSize="20sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
    </RelativeLayout>