Browse Source

Send Money animation fixes

master
preyearegmi 6 years ago
parent
commit
14ed722d70
  1. 61
      app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/adapter/PayoutModeBankListingRvAdapter.java
  2. 186
      app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeBankListingDialog.java
  3. 30
      app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeBankListingRvViewHolder.java
  4. 97
      app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/payoutmode/PayoutModeSendMoneyFragment.java
  5. 16
      app/src/main/res/layout/banklist_item_view.xml
  6. 5
      app/src/main/res/layout/fragment_payout_mode_send_money_v2.xml

61
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<PayoutModeBankListingRvViewHolder> {
private final PayoutModeBankListingDialog.BankSelectionListener listener;
private List<BankList> 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<BankList> data) {
if(data!=null)
{
this.data=data;
notifyDataSetChanged();
}
}
}

186
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<BankList> 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<BankList> 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<BankList> 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);
}
}

30
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);
}
}

97
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);
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
{
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
{
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<PayoutMode> 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<PayoutModeApiResponse>

16
app/src/main/res/layout/banklist_item_view.xml

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/generalName"
android:layout_width="match_parent"
android:gravity="center_vertical|start"
android:textSize="18sp"
android:paddingStart="8dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
tools:ignore="RtlSymmetry" />

5
app/src/main/res/layout/fragment_payout_mode_send_money_v2.xml

@ -43,6 +43,7 @@
<LinearLayout
android:padding="10dp"
android:minHeight="220dp"
android:orientation="vertical"
android:id="@+id/bankDetailContainer"
android:layout_width="match_parent"
@ -83,7 +84,7 @@
</FrameLayout>
<FrameLayout
android:visibility="invisible"
android:visibility="gone"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:id="@+id/branchListContainer"
@ -117,7 +118,7 @@
</FrameLayout>
<android.support.design.widget.TextInputLayout
android:visibility="invisible"
android:visibility="gone"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:id="@+id/accountWrapper"

Loading…
Cancel
Save