diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/adapter/PayoutModeBankListingRvAdapter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/adapter/PayoutModeBankListingRvAdapter.java new file mode 100644 index 00000000..b9e0a391 --- /dev/null +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/adapter/PayoutModeBankListingRvAdapter.java @@ -0,0 +1,61 @@ +package com.gmeremit.online.gmeremittance_native.sendmoneyV2.adapter; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.gmeremit.online.gmeremittance_native.R; +import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.CountryDetailModel; +import com.gmeremit.online.gmeremittance_native.sendmoneyV2.model.payoutmode.BankList; +import com.gmeremit.online.gmeremittance_native.sendmoneyV2.view.payoutmode.PayoutModeBankListingDialog; +import com.gmeremit.online.gmeremittance_native.sendmoneyV2.view.payoutmode.PayoutModeBankListingRvViewHolder; + +import java.util.ArrayList; +import java.util.List; + +public class PayoutModeBankListingRvAdapter extends RecyclerView.Adapter { + + private final PayoutModeBankListingDialog.BankSelectionListener listener; + private List data; + + public PayoutModeBankListingRvAdapter(PayoutModeBankListingDialog.BankSelectionListener listener) { + this.data=new ArrayList<>(); + this.listener=listener; + } + + + @Override + public PayoutModeBankListingRvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.banklist_item_view, parent, false); + return new PayoutModeBankListingRvViewHolder(view); + } + + @Override + public void onBindViewHolder(final PayoutModeBankListingRvViewHolder holder, int position) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(listener!=null) + listener.onBankSelected(data.get(holder.getAdapterPosition())); + } + }); + BankList bank= data.get(position); + holder.setName(bank.getName()); + } + + @Override + public int getItemCount() { + return data.size(); + } + + public void setData(List data) { + if(data!=null) + { + this.data=data; + notifyDataSetChanged(); + } + } + + +} diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeBankListingDialog.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeBankListingDialog.java new file mode 100644 index 00000000..1beb03cc --- /dev/null +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeBankListingDialog.java @@ -0,0 +1,186 @@ +package com.gmeremit.online.gmeremittance_native.sendmoneyV2.view.payoutmode; + +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.RecyclerView; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +import com.gmeremit.online.gmeremittance_native.R; +import com.gmeremit.online.gmeremittance_native.customwidgets.LineDividerItemDecoration; +import com.gmeremit.online.gmeremittance_native.recipientV2.adapter.RecipientCountryListingRvAdapter; +import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.CountryDetailModel; +import com.gmeremit.online.gmeremittance_native.sendmoneyV2.adapter.PayoutModeBankListingRvAdapter; +import com.gmeremit.online.gmeremittance_native.sendmoneyV2.model.payoutmode.BankList; + +import java.util.ArrayList; +import java.util.List; + +public class PayoutModeBankListingDialog extends DialogFragment implements View.OnClickListener, TextWatcher { + + private List data; + private BankSelectionListener listener; + private RecyclerView countryListRv; + private View cancelButton; + private EditText noCountryFoundView; + private EditText searchEditTextView; + private PayoutModeBankListingRvAdapter payoutModeBankListingRvAdapter; + private Window window; + private boolean windowHieghtNotFixed=true; + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_country_listing, null); + countryListRv = view.findViewById(R.id.countryListRv); + noCountryFoundView = view.findViewById(R.id.noCountryFoundTextView); + cancelButton = view.findViewById(R.id.iv_cancel); + searchEditTextView = view.findViewById(R.id.searchEditText); + + builder.setView(view); + + Dialog dialog = builder.create(); + try { + this.window = dialog.getWindow(); + window.setBackgroundDrawableResource(R.drawable.ic_rounded_country_listing_gray); + + } catch (NullPointerException e) { + + } + initialize(); + return dialog; + } + + private void initialize() { + cancelButton.setOnClickListener(this); + searchEditTextView.addTextChangedListener(this); + payoutModeBankListingRvAdapter = new PayoutModeBankListingRvAdapter(this.listener); + payoutModeBankListingRvAdapter.setData(this.data); + countryListRv.setAdapter(payoutModeBankListingRvAdapter); + LineDividerItemDecoration lineDividerItemDecoration = new LineDividerItemDecoration(getActivity(), LineDividerItemDecoration.VERTICAL_LIST); + countryListRv.addItemDecoration(lineDividerItemDecoration); + + } + + public void setListener(BankSelectionListener listener) { + this.listener = listener; + } + + public void setCountryData(List data) { + if (data != null) { + this.data = data; + } + } + + @Override + public void onStart() { + super.onStart(); + if(windowHieghtNotFixed&&window!=null) + { + WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); + lp.copyFrom(window.getAttributes()); + lp.height = WindowManager.LayoutParams.MATCH_PARENT; + float multi = getActivity().getResources().getDisplayMetrics().density; + lp.verticalMargin=10*multi; + window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + window.setAttributes(lp); + windowHieghtNotFixed=false; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_cancel: + cancelButton.setOnClickListener(null); + hideKeyboard(); + dismiss(); + break; + } + } + + @Override + public void onDismiss(DialogInterface dialog) { + super.onDismiss(dialog); + cancelButton.setOnClickListener(null); + searchEditTextView.removeTextChangedListener(this); + } + + private void showCountryNotFoundView(boolean action) { + if (action) { + int rvHeight = countryListRv.getHeight(); + noCountryFoundView.setHeight(rvHeight); + countryListRv.setVisibility(View.INVISIBLE); + noCountryFoundView.setVisibility(View.VISIBLE); + } else { + noCountryFoundView.setVisibility(View.INVISIBLE); + countryListRv.setVisibility(View.VISIBLE); + } + } + + @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 (payoutModeBankListingRvAdapter != null) { + searchForCountry(s.toString()); + } + } + + private void searchForCountry(String s) { + if (this.data != null) { + if (s.length() > 0) { + List searchedData = new ArrayList<>(); + for (BankList item : data) { + if (item.getName().toLowerCase().contains(s.toLowerCase())) { + searchedData.add(item); + } + } + if (searchedData.size() > 0) + showCountryNotFoundView(false); + else + showCountryNotFoundView(true); + payoutModeBankListingRvAdapter.setData(searchedData); + + } else + payoutModeBankListingRvAdapter.setData(this.data); + } + } + + public void hideKeyboard() { + // Check if no view has focus: + try { + View view = getActivity().getCurrentFocus(); + + InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + } + catch(Exception ex) + { + + } + + } + + + public interface BankSelectionListener { + void onBankSelected(BankList selectedBank); + } +} diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeBankListingRvViewHolder.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeBankListingRvViewHolder.java new file mode 100644 index 00000000..4f81ff54 --- /dev/null +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeBankListingRvViewHolder.java @@ -0,0 +1,30 @@ +package com.gmeremit.online.gmeremittance_native.sendmoneyV2.view.payoutmode; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.TextView; + +import com.gmeremit.online.gmeremittance_native.R; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class PayoutModeBankListingRvViewHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.generalName) + TextView generalName; + + + + + public PayoutModeBankListingRvViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + public void setName(String name) + { + if(name!=null) + generalName.setText(name); + } +} diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeSendMoneyFragment.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeSendMoneyFragment.java index 24646095..952f0e52 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeSendMoneyFragment.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeSendMoneyFragment.java @@ -5,6 +5,8 @@ import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPropertyAnimatorListener; +import android.support.v4.view.ViewPropertyAnimatorListenerAdapter; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.RecyclerView; import android.util.Log; @@ -20,6 +22,7 @@ import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseFragment; import com.gmeremit.online.gmeremittance_native.exchange_rate.view.SelectedRedBorderDecoration; import com.gmeremit.online.gmeremittance_native.sendmoneyV2.adapter.SendMoneyPayoutModeRvAdapter; +import com.gmeremit.online.gmeremittance_native.sendmoneyV2.model.payoutmode.BankList; import com.gmeremit.online.gmeremittance_native.sendmoneyV2.model.payoutmode.PayoutMode; import com.gmeremit.online.gmeremittance_native.sendmoneyV2.model.payoutmode.PayoutModeApiResponse; import com.gmeremit.online.gmeremittance_native.sendmoneyV2.model.payoutmode.PayoutModeModel; @@ -33,7 +36,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import io.reactivex.disposables.CompositeDisposable; -public class PayoutModeSendMoneyFragment extends BaseFragment implements SendMoneyPayoutModeRvAdapter.SendMoneyPayoutModeListener, View.OnClickListener { +public class PayoutModeSendMoneyFragment extends BaseFragment implements SendMoneyPayoutModeRvAdapter.SendMoneyPayoutModeListener, View.OnClickListener, PayoutModeBankListingDialog.BankSelectionListener { @BindView(R.id.paymentModeRV) RecyclerView paymentModeRv; @@ -62,6 +65,8 @@ public class PayoutModeSendMoneyFragment extends BaseFragment implements SendMon private PayoutMode selectedPayoutMode; private PayoutModeModel apiResponseData; private static Interpolator interpolator=new AccelerateDecelerateInterpolator(); + private PayoutModeBankListingDialog payoutModeBankListingDialog; + private BankList selectedBank; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -147,13 +152,25 @@ public class PayoutModeSendMoneyFragment extends BaseFragment implements SendMon @Override public void onPayoutModeSelected(PayoutMode selectedPayoutMode) { Log.d("SendMoneyV2","Selected Payment Mode: "+selectedPayoutMode.getMode()); + clearBankData(); + clearBranchData(); + clearAccounData(); this.selectedPayoutMode=selectedPayoutMode; showBankSelectView(this.selectedPayoutMode.getBankrequired().equalsIgnoreCase(Constants.TRUE_STRING)); + } + + + private void showBankSelectView(boolean action) { + //HIDE others + branchListContainer.setVisibility(View.GONE); + accountViewContainer.setVisibility(View.GONE); if(action) { + + if(bankListContainer.getVisibility()!=View.VISIBLE) { bankListContainer.setVisibility(View.INVISIBLE); bankListContainer.setTranslationY(-bankListContainer.getHeight()); @@ -163,15 +180,27 @@ public class PayoutModeSendMoneyFragment extends BaseFragment implements SendMon } else { - branchListContainer.setVisibility(View.GONE); - ed_account.setVisibility(View.GONE); - bankListContainer.setVisibility(View.INVISIBLE); + if(bankListContainer.getVisibility()==View.VISIBLE) + { + ViewCompat.animate(bankListContainer).translationY(-bankListContainer.getHeight()).setInterpolator(interpolator).setDuration(400).setListener(new ViewPropertyAnimatorListenerAdapter(){ + @Override + public void onAnimationEnd(View view) { + super.onAnimationEnd(view); + bankListContainer.setVisibility(View.INVISIBLE); + bankListContainer.setTranslationY(bankListContainer.getHeight()); + ViewCompat.animate(bankListContainer).setListener(null); + } + }); + + } + } } private void showBranchSelectView(boolean action) { if(action) { if(branchListContainer.getVisibility()!=View.VISIBLE) { + ed_branch.setText(""); branchListContainer.setVisibility(View.INVISIBLE); branchListContainer.setTranslationY(-branchListContainer.getHeight() * 3 / 4); branchListContainer.setVisibility(View.VISIBLE); @@ -180,7 +209,19 @@ public class PayoutModeSendMoneyFragment extends BaseFragment implements SendMon } else { - branchListContainer.setVisibility(View.GONE); + if(branchListContainer.getVisibility()==View.VISIBLE) + { + ViewCompat.animate(branchListContainer).translationY(-branchListContainer.getHeight()).setInterpolator(interpolator).setDuration(400).setListener(new ViewPropertyAnimatorListenerAdapter(){ + @Override + public void onAnimationEnd(View view) { + super.onAnimationEnd(view); + branchListContainer.setVisibility(View.GONE); + branchListContainer.setTranslationY(branchListContainer.getHeight()); + ViewCompat.animate(branchListContainer).setListener(null); + } + }); + + } } } @@ -196,11 +237,37 @@ public class PayoutModeSendMoneyFragment extends BaseFragment implements SendMon } else { - accountViewContainer.setVisibility(View.GONE); + if(accountViewContainer.getVisibility()==View.VISIBLE) + { + ViewCompat.animate(accountViewContainer).translationY(-accountViewContainer.getHeight()).setInterpolator(interpolator).setDuration(400).setListener(new ViewPropertyAnimatorListenerAdapter(){ + @Override + public void onAnimationEnd(View view) { + super.onAnimationEnd(view); + accountViewContainer.setVisibility(View.GONE); + accountViewContainer.setTranslationY(branchListContainer.getHeight()); + ViewCompat.animate(accountViewContainer).setListener(null); + } + }); + } } } + private void clearBankData() + { + this.selectedBank=null; + ed_bank.setText(""); + } + + private void clearBranchData() + { + ed_branch.setText(""); + } + private void clearAccounData() + { + ed_account.setText(""); + } + public void setDataToPaymentMode(List data) { paymentModeRvAdapter.setData(data); @@ -219,15 +286,35 @@ public class PayoutModeSendMoneyFragment extends BaseFragment implements SendMon break; case R.id.ed_bank: - showBranchSelectView(true); + showBankListInDialog(); break; case R.id.ed_branch: - showAccountView(true); + break; } } + private void showBankListInDialog() { + if(payoutModeBankListingDialog==null) + payoutModeBankListingDialog=new PayoutModeBankListingDialog(); + payoutModeBankListingDialog.setCountryData(this.selectedPayoutMode.getBankList()); + payoutModeBankListingDialog.setListener(this); + payoutModeBankListingDialog.show(getActivity().getFragmentManager(),"BankListingFragment"); + } + + @Override + public void onBankSelected(BankList selectedBank) { + if(payoutModeBankListingDialog!=null) + payoutModeBankListingDialog.dismiss(); + this.selectedBank=selectedBank; + ed_bank.setText(this.selectedBank.getName()); + showBranchSelectView(this.selectedBank.getBranchRequired().equalsIgnoreCase(Constants.TRUE_STRING)); + showAccountView(this.selectedBank.getIsAccountRequired().equalsIgnoreCase(Constants.TRUE_STRING)); + + + payoutModeBankListingDialog=null; + } public class PayoutModeObserver extends GenericApiObserverResponse diff --git a/app/src/main/res/layout/banklist_item_view.xml b/app/src/main/res/layout/banklist_item_view.xml new file mode 100644 index 00000000..1816839c --- /dev/null +++ b/app/src/main/res/layout/banklist_item_view.xml @@ -0,0 +1,16 @@ + + + diff --git a/app/src/main/res/layout/fragment_payout_mode_send_money_v2.xml b/app/src/main/res/layout/fragment_payout_mode_send_money_v2.xml index 51e13388..dd176b6b 100644 --- a/app/src/main/res/layout/fragment_payout_mode_send_money_v2.xml +++ b/app/src/main/res/layout/fragment_payout_mode_send_money_v2.xml @@ -43,6 +43,7 @@