package com.fourtails.usuariolecturista.fragments; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import android.widget.DatePicker; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import com.fourtails.usuariolecturista.BarcodeActivity; import com.fourtails.usuariolecturista.MainActivity; import com.fourtails.usuariolecturista.R; import com.fourtails.usuariolecturista.ottoEvents.BillPaymentAttemptEvent; import com.fourtails.usuariolecturista.utilities.DatePickerFragmentCreditCard; import com.stripe.android.model.Card; import java.util.Calendar; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; public class PayOptionsFragment extends Fragment { /** * Dialog Views * */ TextView textViewCreditCardExpirationDate; Spinner spinnerCreditCardSelector; EditText editTextCreditCardNumber; EditText editTextCreditCardName; EditText editTextCCV; TextView textViewSubTotalPay; CheckBox checkBoxAgreedTAC; Button payButton; int selectedMonth; int selectedYear; private AlertDialog payDialog = null; /** * ************************** */ @Bind(R.id.buttonCreditCard) Button buttonAddCreditCard; @Bind(R.id.textViewTotalBillToPay) TextView textViewTotalBillToPay; @OnClick(R.id.buttonCreditCard) public void creditCardClicked() { inflateCreditCardDialog(); } @OnClick(R.id.buttonOxxoGenerate) public void generateOxxoCodeBarClicked() { Intent intent = new Intent(getActivity(), BarcodeActivity.class); MainActivity.bus.post(intent); } public PayOptionsFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_pay_options, container, false); ButterKnife.bind(this, view); textViewTotalBillToPay.setText(String.valueOf(BillsFragment.selectedBill)); return view; } @Override public void onResume() { super.onResume(); // Set title MainActivity.bus.post(getResources().getString(R.string.toolbarTitlePayOptions)); } /** * Inflates the credit card alert dialog, can't be injected */ private void inflateCreditCardDialog() { LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.fragment_add_credit_card, null); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setView(view); payDialog = builder.show(); textViewCreditCardExpirationDate = (TextView) view.findViewById(R.id.editTextCreditCardExpirationDate); // spinnerCreditCardSelector = (Spinner) view.findViewById(R.id.spinnerCreditCardSelector); editTextCreditCardNumber = (EditText) view.findViewById(R.id.editTextCreditCardNumber); editTextCreditCardName = (EditText) view.findViewById(R.id.editTextCreditCardName); editTextCCV = (EditText) view.findViewById(R.id.editTextCCV); checkBoxAgreedTAC = (CheckBox) view.findViewById(R.id.checkBoxAgreedTAC); textViewSubTotalPay = (TextView) view.findViewById(R.id.textViewSubTotalPay); payButton = (Button) view.findViewById(R.id.buttonPayWithCC); textViewSubTotalPay.setText(String.valueOf(BillsFragment.selectedBill)); textViewCreditCardExpirationDate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDatePicker(); } }); payButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { payButtonClicked(); } }); } /** * Checks if TAC is accepted and the credit card is valid, if so, then goes to main Activity * to initiate the payment process */ private void payButtonClicked() { if (checkBoxAgreedTAC.isChecked()) { boolean validCard = validateCard(); if (validCard) { Double payAmount = BillsFragment.selectedBill; MainActivity.bus.post(new BillPaymentAttemptEvent(payAmount)); if (PayOptionsFragment.this.payDialog != null) { PayOptionsFragment.this.payDialog.dismiss(); } } } else { Toast.makeText(getActivity(), getResources().getString(R.string.TACMustAgreedMessage), Toast.LENGTH_SHORT).show(); } } /** * Square Credit card validation * * @return */ private boolean validateCard() { Card card = new Card( editTextCreditCardNumber.getText().toString(), selectedMonth, selectedYear, editTextCCV.getText().toString() ); boolean validation = card.validateCard(); if (validation) { return true; } else if (!card.validateNumber()) { Toast.makeText(getActivity(), getResources().getString(R.string.creditCardErrorNumber), Toast.LENGTH_SHORT).show(); return false; } else if (!card.validateExpiryDate()) { Toast.makeText(getActivity(), getResources().getString(R.string.creditCardErrorExpiryDate), Toast.LENGTH_SHORT).show(); return false; } else if (!card.validateCVC()) { Toast.makeText(getActivity(), getResources().getString(R.string.creditCardErrorCCV), Toast.LENGTH_SHORT).show(); return false; } else { Toast.makeText(getActivity(), getResources().getString(R.string.creditCardError), Toast.LENGTH_SHORT).show(); return false; } } /** * This will call for an special date picker without the "day" */ private void showDatePicker() { DatePickerFragmentCreditCard date = new DatePickerFragmentCreditCard(); /** * Set Up Current Date Into dialog */ Calendar calendar = Calendar.getInstance(); Bundle args = new Bundle(); args.putInt("year", calendar.get(Calendar.YEAR)); args.putInt("month", calendar.get(Calendar.MONTH)); args.putInt("day", calendar.get(Calendar.DAY_OF_MONTH)); args.putLong("currentDateInMillis", calendar.getTimeInMillis()); date.setArguments(args); /** * Set Call back to capture selected date */ date.setCallBack(ondate); date.show(getFragmentManager(), "Date Picker"); } /** * Dialog Listener */ DatePickerDialog.OnDateSetListener ondate = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { selectedMonth = monthOfYear + 1; selectedYear = year; textViewCreditCardExpirationDate.setText(String.valueOf(monthOfYear + 1) + "-" + String.valueOf(year)); } }; }