Preyea Regmi
5 years ago
5 changed files with 523 additions and 127 deletions
-
305app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/GenericImageWithTextListingDialog.java
-
14app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV3/model/recipientaddeditV3/countryservice/CountryServiceModel.java
-
26app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV3/view/recipientaddeditV3/RecipientAddEditV3Activity.java
-
274app/src/main/res/layout/activity_recipient_add_edit_v3.xml
-
31app/src/main/res/layout/generic_image_with_text_listing_dialog_item_layout.xml
@ -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<T extends GenericImageWithTextListingDialog.ImageWithDataDTOInterface> extends android.support.v4.app.DialogFragment implements View.OnClickListener, TextWatcher { |
||||
|
|
||||
|
private List<T> data; |
||||
|
private GenericImageWithTextListingDialogListener<T> listener; |
||||
|
private RecyclerView textListRv; |
||||
|
private View cancelButton; |
||||
|
private EditText noDataFoundView; |
||||
|
private EditText searchEditTextView; |
||||
|
private TextView titleView; |
||||
|
private GenericImageWithTextListingRvAdapter<T> 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<T> listener) { |
||||
|
this.listener = listener; |
||||
|
} |
||||
|
|
||||
|
public void setData(List<T> 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<T> 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<T extends ImageWithDataDTOInterface> { |
||||
|
void onDataSelectedFromDialog(T selectedData); |
||||
|
} |
||||
|
|
||||
|
public class GenericImageWithTextListingRvAdapter<T extends ImageWithDataDTOInterface> extends RecyclerView.Adapter<GenericImageWithTextListingRVViewholder> { |
||||
|
private final GenericImageWithTextListingDialogListener listener; |
||||
|
private List<T> 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<T> 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(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<android.support.constraint.ConstraintLayout 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="wrap_content"> |
||||
|
|
||||
|
<ImageView |
||||
|
android:id="@+id/imageView" |
||||
|
android:layout_width="60dp" |
||||
|
android:layout_height="55dp" |
||||
|
android:layout_marginStart="23dp" |
||||
|
app:layout_constraintBottom_toBottomOf="parent" |
||||
|
app:layout_constraintEnd_toStartOf="@+id/textView" |
||||
|
app:layout_constraintStart_toStartOf="parent" |
||||
|
app:layout_constraintTop_toTopOf="parent" /> |
||||
|
|
||||
|
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView |
||||
|
android:id="@+id/textView" |
||||
|
android:layout_width="0dp" |
||||
|
android:layout_height="60dp" |
||||
|
android:layout_marginStart="24dp" |
||||
|
android:gravity="center_vertical|start" |
||||
|
android:minHeight="45dp" |
||||
|
android:paddingStart="7dp" |
||||
|
android:paddingLeft="7dp" |
||||
|
android:textSize="14sp" |
||||
|
app:layout_constraintEnd_toEndOf="parent" |
||||
|
app:layout_constraintStart_toEndOf="@+id/imageView" |
||||
|
app:layout_constraintTop_toTopOf="parent" /> |
||||
|
</android.support.constraint.ConstraintLayout> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue