diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/GenericImageWithTextListingDialog.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/GenericImageWithTextListingDialog.java new file mode 100644 index 00000000..c146d15f --- /dev/null +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/GenericImageWithTextListingDialog.java @@ -0,0 +1,305 @@ +package com.gmeremit.online.gmeremittance_native.customwidgets; + +import android.app.Dialog; +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.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.gmeremit.online.gmeremittance_native.R; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class GenericImageWithTextListingDialog extends android.support.v4.app.DialogFragment implements View.OnClickListener, TextWatcher { + + private List data; + private GenericImageWithTextListingDialogListener listener; + private RecyclerView textListRv; + private View cancelButton; + private EditText noDataFoundView; + private EditText searchEditTextView; + private TextView titleView; + private GenericImageWithTextListingRvAdapter genericTextListingRvAdapter; + private View searchViewContainer; + private String hintText; + private String noDataFoundText; + private String titleText; + private boolean shouldDisableSearch = false; + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_generic_text_listing_layout, null); + textListRv = view.findViewById(R.id.textListRv); + noDataFoundView = view.findViewById(R.id.noDataFoundTextView); + cancelButton = view.findViewById(R.id.iv_cancel); + titleView = view.findViewById(R.id.dialog_title_txt); + searchEditTextView = view.findViewById(R.id.searchEditText); + searchViewContainer = view.findViewById(R.id.searchViewContainer); + builder.setView(view); + + + initialize(); + return builder.create(); + + } + + private void initialize() { + cancelButton.setOnClickListener(this); + searchEditTextView.addTextChangedListener(this); + genericTextListingRvAdapter = new GenericImageWithTextListingRvAdapter<>(this.listener); + genericTextListingRvAdapter.setData(this.data); + textListRv.setAdapter(genericTextListingRvAdapter); + LineDividerItemDecoration lineDividerItemDecoration = new LineDividerItemDecoration(getActivity(), LineDividerItemDecoration.VERTICAL_LIST); + textListRv.addItemDecoration(lineDividerItemDecoration); + titleView.setText(titleText != null && titleText.length() > 0 ? titleText : "Select Data"); + searchEditTextView.setHint(hintText != null && hintText.length() > 0 ? hintText : "Search Data"); + noDataFoundView.setHint(noDataFoundText != null && noDataFoundText.length() > 0 ? noDataFoundText : "No Data Found"); + if (shouldDisableSearch) + searchViewContainer.setVisibility(View.GONE); + + searchViewContainer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + searchEditTextView.requestFocus(); + showKeyBoard(searchEditTextView); + } + }); + + } + + public void setHintAndTitle(String hint, String title, String noDataFroundText) { + this.hintText = hint; + this.titleText = title; + this.noDataFoundText = noDataFroundText; + } + + public void setListener(GenericImageWithTextListingDialogListener listener) { + this.listener = listener; + } + + public void setData(List data) { + if (data != null) { + this.data = data; + } + } + + + public void disableSearch(boolean action) { + this.shouldDisableSearch = action; + } + + @Override + public void onStart() { + super.onStart(); + + + Window window = getDialog().getWindow(); + if (window != null) { + if (!shouldDisableSearch) + window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + else + window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + window.setBackgroundDrawableResource(R.drawable.ic_rounded_grey_bg_with_inset); + + } + } + + @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); + searchViewContainer.setOnClickListener(null); + + } + + private void showDataNotFoundView(boolean action) { + if (action) { + if (textListRv.getVisibility() == View.VISIBLE) { + textListRv.setVisibility(View.GONE); + noDataFoundView.setVisibility(View.VISIBLE); + } + } else { + if (textListRv.getVisibility() != View.VISIBLE) { + noDataFoundView.setVisibility(View.GONE); + textListRv.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 (genericTextListingRvAdapter != null) { + searchForData(s.toString()); + } + } + + private void searchForData(String s) { + if (this.data != null) { + if (s.length() > 0) { + List searchedData = new ArrayList<>(); + for (T item : data) { + if (item.getDisplayName().toLowerCase().contains(s.toLowerCase())) { + searchedData.add(item); + } + } + if (searchedData.size() > 0) + showDataNotFoundView(false); + else + showDataNotFoundView(true); + genericTextListingRvAdapter.setData(searchedData); + + } else { + showDataNotFoundView(false); + genericTextListingRvAdapter.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 void showKeyBoard(View view) { + try { + InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); + Log.d("GMEEXCEPTION", "Keyboard shown"); + } catch (NullPointerException e) { + Log.d("GMEEXCEPTION", "Null pointer while showing keyboard"); + } + } + + + public interface GenericImageWithTextListingDialogListener { + void onDataSelectedFromDialog(T selectedData); + } + + public class GenericImageWithTextListingRvAdapter extends RecyclerView.Adapter { + private final GenericImageWithTextListingDialogListener listener; + private List data; + + public GenericImageWithTextListingRvAdapter(GenericImageWithTextListingDialogListener listener) { + this.data = new ArrayList<>(); + this.listener = listener; + } + + + @Override + public GenericImageWithTextListingRVViewholder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.generic_image_with_text_listing_dialog_item_layout, parent, false); + return new GenericImageWithTextListingRVViewholder(view); + } + + @Override + public void onBindViewHolder(final GenericImageWithTextListingRVViewholder holder, int position) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) + listener.onDataSelectedFromDialog(data.get(holder.getAdapterPosition())); + } + }); + T selectedDataType = data.get(position); + holder.setTextName(selectedDataType.getDisplayName()); + int resId=(data.get(holder.getAdapterPosition())).getResourceId(); + if(resId!=-1) + Glide.with(holder.getImageView().getContext()) + .load(data.get(holder.getAdapterPosition()).getResourceId()) + .diskCacheStrategy(DiskCacheStrategy.SOURCE) + .into(holder.getImageView()); + + } + + @Override + public int getItemCount() { + return data.size(); + } + + public void setData(List data) { + if (data != null) { + this.data = data; + notifyDataSetChanged(); + } + } + } + + public class GenericImageWithTextListingRVViewholder extends RecyclerView.ViewHolder { + @BindView(R.id.textView) + TextView textName; + + @BindView(R.id.imageView) + ImageView imageView; + + public GenericImageWithTextListingRVViewholder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + public void setTextName(String name) { + if (name != null) + textName.setText(name); + } + + public ImageView getImageView() { + return imageView; + } + + + } + + public interface ImageWithDataDTOInterface { + String getDisplayName(); + + int getResourceId(); + } +} diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV3/model/recipientaddeditV3/countryservice/CountryServiceModel.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV3/model/recipientaddeditV3/countryservice/CountryServiceModel.java index e12f17d5..22a43af2 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV3/model/recipientaddeditV3/countryservice/CountryServiceModel.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV3/model/recipientaddeditV3/countryservice/CountryServiceModel.java @@ -1,11 +1,13 @@ package com.gmeremit.online.gmeremittance_native.recipientV3.model.recipientaddeditV3.countryservice; +import com.gmeremit.online.gmeremittance_native.customwidgets.GenericImageWithTextListingDialog; +import com.gmeremit.online.gmeremittance_native.customwidgets.exchangecountrylistingdialog.CountryFlagMapper; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; import java.util.List; -public class CountryServiceModel { +public class CountryServiceModel implements GenericImageWithTextListingDialog.ImageWithDataDTOInterface { @SerializedName("countryCode") @Expose @@ -56,4 +58,14 @@ public class CountryServiceModel { public String toString() { return countryName; } + + @Override + public String getDisplayName() { + return countryName; + } + + @Override + public int getResourceId() { + return CountryFlagMapper.getFlagFromCountryCode(countryCode); + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV3/view/recipientaddeditV3/RecipientAddEditV3Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV3/view/recipientaddeditV3/RecipientAddEditV3Activity.java index 7e11c51d..0f5a992c 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV3/view/recipientaddeditV3/RecipientAddEditV3Activity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV3/view/recipientaddeditV3/RecipientAddEditV3Activity.java @@ -1,14 +1,19 @@ package com.gmeremit.online.gmeremittance_native.recipientV3.view.recipientaddeditV3; import android.os.Bundle; +import android.support.transition.TransitionManager; import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.LinearLayout; import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseActivity; import com.gmeremit.online.gmeremittance_native.customwidgets.GMEFormInputField; +import com.gmeremit.online.gmeremittance_native.customwidgets.GenericImageWithTextListingDialog; import com.gmeremit.online.gmeremittance_native.customwidgets.GenericTextListingDialog; import com.gmeremit.online.gmeremittance_native.customwidgets.TextWatcherAdapter; +import com.gmeremit.online.gmeremittance_native.customwidgets.exchangecountrylistingdialog.CountryFlagMapper; import com.gmeremit.online.gmeremittance_native.recipientV3.gateway.recipientaddeditV3.RecipientAddV3Gateway; import com.gmeremit.online.gmeremittance_native.recipientV3.model.recipientaddeditV3.countryservice.CountryServiceModel; import com.gmeremit.online.gmeremittance_native.recipientV3.model.recipientaddeditV3.countryservice.ServiceTypeModel; @@ -32,7 +37,10 @@ public class RecipientAddEditV3Activity extends BaseActivity implements Recipien @BindView(R.id.recieverCountryViewContainer) - View recieverCountryViewContainer; + ViewGroup recieverCountryViewContainer; + + @BindView(R.id.recieverCountrySelectionCountryFlag) + ImageView recieverCountrySelectionCountryFlag; @BindView(R.id.recieverCountrySelectionFormInputField) GMEFormInputField recieverCountrySelectionFormInputField; @@ -128,7 +136,7 @@ public class RecipientAddEditV3Activity extends BaseActivity implements Recipien GMEFormInputField recieverIdNumberFormInputField; - GenericTextListingDialog countryListingDialog; + GenericImageWithTextListingDialog countryListingDialog; GenericTextListingDialog serviceMethodListingDialog; @@ -351,7 +359,18 @@ public class RecipientAddEditV3Activity extends BaseActivity implements Recipien } + private void showSelectedCountryFlag(String flagId) { + + recieverCountrySelectionCountryFlag.setImageResource(CountryFlagMapper.getFlagFromCountryCode(flagId)); + + if (recieverCountrySelectionCountryFlag.getVisibility() != View.VISIBLE) { + TransitionManager.beginDelayedTransition(recieverCountryViewContainer); + recieverCountrySelectionCountryFlag.setVisibility(View.VISIBLE); + } + + + } public class CountrySelectionClickListener implements View.OnClickListener { @@ -359,12 +378,13 @@ public class RecipientAddEditV3Activity extends BaseActivity implements Recipien public void onClick(View v) { hideKeyBoard(); if (countryListingDialog == null) - countryListingDialog = new GenericTextListingDialog<>(); + countryListingDialog = new GenericImageWithTextListingDialog<>(); countryListingDialog.setData(presenter.getAvailableCountryServiceData()); countryListingDialog.setListener(countryServiceModel -> { presenter.onCountryServiceSelected(countryServiceModel); countryListingDialog.dismiss(); + showSelectedCountryFlag(countryServiceModel.getCountryCode()); }); countryListingDialog.setHintAndTitle(getString(R.string.search_country_text), getString(R.string.select_country_text), getString(R.string.no_country_found_text)); countryListingDialog.disableSearch(false); diff --git a/app/src/main/res/layout/activity_recipient_add_edit_v3.xml b/app/src/main/res/layout/activity_recipient_add_edit_v3.xml index 30cabe64..c6691ee4 100644 --- a/app/src/main/res/layout/activity_recipient_add_edit_v3.xml +++ b/app/src/main/res/layout/activity_recipient_add_edit_v3.xml @@ -16,9 +16,9 @@ android:id="@+id/receiverFromViewContainer" android:layout_width="match_parent" android:layout_height="wrap_content" + android:orientation="vertical" android:paddingStart="@dimen/_8sdp" - android:paddingEnd="@dimen/_8sdp" - android:orientation="vertical"> + android:paddingEnd="@dimen/_8sdp"> + android:orientation="horizontal" + android:visibility="visible"> + + + + + + + app:edFormHint="Select Country" /> + + android:layout_gravity="center_vertical|end" + android:layout_marginStart="@dimen/_4sdp" + android:layout_marginEnd="@dimen/_4sdp" + android:background="@drawable/ic_arrow_down" /> + + android:orientation="horizontal" + android:visibility="visible"> + + app:edFormHint="Select Payment Method" /> + + android:layout_gravity="center_vertical|end" + android:layout_marginStart="@dimen/_4sdp" + android:layout_marginEnd="@dimen/_4sdp" + android:background="@drawable/ic_arrow_down" /> + + android:orientation="horizontal" + android:visibility="visible"> + + app:edFormHint="Select Bank" /> + + android:layout_gravity="center_vertical|end" + android:layout_marginStart="@dimen/_4sdp" + android:layout_marginEnd="@dimen/_4sdp" + android:background="@drawable/ic_arrow_down" /> + + android:orientation="horizontal" + android:visibility="visible"> + + app:edFormHint="Select Branch" /> + + android:layout_gravity="center_vertical|end" + android:layout_marginStart="@dimen/_4sdp" + android:layout_marginEnd="@dimen/_4sdp" + android:background="@drawable/ic_arrow_down" /> + android:orientation="horizontal" + android:visibility="visible"> + + app:edFormHint="Select State/Porvince" /> + + android:layout_gravity="center_vertical|end" + android:layout_marginStart="@dimen/_4sdp" + android:layout_marginEnd="@dimen/_4sdp" + android:background="@drawable/ic_arrow_down" /> + + android:orientation="horizontal" + android:visibility="visible"> + + app:edFormHint="Select District" /> + + android:layout_gravity="center_vertical|end" + android:layout_marginStart="@dimen/_4sdp" + android:layout_marginEnd="@dimen/_4sdp" + android:background="@drawable/ic_arrow_down" /> + android:orientation="horizontal" + android:visibility="visible"> + + app:edFormHint="Select Relation" /> + + android:layout_gravity="center_vertical|end" + android:layout_marginStart="@dimen/_4sdp" + android:layout_marginEnd="@dimen/_4sdp" + android:background="@drawable/ic_arrow_down" /> - - + android:orientation="horizontal" + android:visibility="visible"> + + app:edFormHint="Select Relation" /> + + android:layout_gravity="center_vertical|end" + android:layout_marginStart="@dimen/_4sdp" + android:layout_marginEnd="@dimen/_4sdp" + android:background="@drawable/ic_arrow_down" /> + android:orientation="horizontal" + android:visibility="visible"> + + app:edFormHint="Select ID Type" /> + + android:layout_gravity="center_vertical|end" + android:layout_marginStart="@dimen/_4sdp" + android:layout_marginEnd="@dimen/_4sdp" + android:background="@drawable/ic_arrow_down" /> - - - diff --git a/app/src/main/res/layout/generic_image_with_text_listing_dialog_item_layout.xml b/app/src/main/res/layout/generic_image_with_text_listing_dialog_item_layout.xml new file mode 100644 index 00000000..12b4d2b4 --- /dev/null +++ b/app/src/main/res/layout/generic_image_with_text_listing_dialog_item_layout.xml @@ -0,0 +1,31 @@ + + + + + + + \ No newline at end of file