Browse Source

Added language picker dialog in setting

master
preyearegmi 6 years ago
parent
commit
3107262f59
  1. 81
      app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/adapter/LanguageSelectionDialogRVAdapter.java
  2. 8
      app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/events/PasswordEvent.java
  3. 37
      app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/LanguageSelectionDialogItemHolder.java
  4. 203
      app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/LanguageSelectionListingDialog.java
  5. 94
      app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/SettingsView.java
  6. 3
      app/src/main/java/com/gmeremit/online/gmeremittance_native/user_profile/view/ChangePasswordActivity.java
  7. 17
      app/src/main/res/layout/activity_settings.xml
  8. 100
      app/src/main/res/layout/language_selection_dialog.xml
  9. 31
      app/src/main/res/layout/language_selection_dialog_item_view.xml
  10. 2
      app/src/main/res/values/strings.xml

81
app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/adapter/LanguageSelectionDialogRVAdapter.java

@ -0,0 +1,81 @@
package com.gmeremit.online.gmeremittance_native.settings.adapter;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.bumptech.glide.Glide;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.customwidgets.exchangecountrylistingdialog.CountryFlagMapper;
import com.gmeremit.online.gmeremittance_native.settings.view.LanguageSelectionDialogItemHolder;
import com.gmeremit.online.gmeremittance_native.settings.view.LanguageSelectionListingDialog;
import com.gmeremit.online.gmeremittance_native.splash_screen.model.LanguageModel;
import com.gmeremit.online.gmeremittance_native.splash_screen.view.LanguageSelectionItemViewHolder;
import java.util.ArrayList;
import java.util.List;
public class LanguageSelectionDialogRVAdapter extends RecyclerView.Adapter<LanguageSelectionDialogItemHolder> {
private List<LanguageModel> languageModels;
private LanguageSelectionListener languageSelectionListener;
public LanguageSelectionDialogRVAdapter(LanguageSelectionListener listener)
{
languageModels=new ArrayList<>();
languageSelectionListener=listener;
}
@NonNull
@Override
public LanguageSelectionDialogItemHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.language_selection_dialog_item_view,viewGroup,false);
return new LanguageSelectionDialogItemHolder(view);
}
@Override
public void onBindViewHolder(@NonNull LanguageSelectionDialogItemHolder holder, int i) {
LanguageModel data=languageModels.get(holder.getAdapterPosition());
int flagId= CountryFlagMapper.getFlagFromCountryCode(data.getCountryCode());
if(flagId!=-1)
{
Glide.with(holder.getImageView().getContext())
.load(flagId)
.into(holder.getImageView());
}
holder.setLanguageName(data.getCountryName());
holder.itemView.setOnClickListener(view->{
if(languageSelectionListener!=null)
languageSelectionListener.onLangugageSelected(data);
});
}
@Override
public int getItemCount() {
return languageModels.size();
}
public void setLanguageSelectionListener(LanguageSelectionListener listener)
{
this.languageSelectionListener=listener;
}
public void setData(List<LanguageModel> data)
{
if(data!=null&&data.size()>0)
{
this.languageModels=data;
notifyDataSetChanged();
}
}
public interface LanguageSelectionListener
{
void onLangugageSelected(LanguageModel languageModel);
}
}

8
app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/events/PasswordEvent.java

@ -1,8 +0,0 @@
package com.gmeremit.online.gmeremittance_native.settings.events;
/**
* Created by fmi-lt-11 on 3/12/18.
*/
public class PasswordEvent {
}

37
app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/LanguageSelectionDialogItemHolder.java

@ -0,0 +1,37 @@
package com.gmeremit.online.gmeremittance_native.settings.view;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.gmeremit.online.gmeremittance_native.R;
import butterknife.BindView;
import butterknife.ButterKnife;
public class LanguageSelectionDialogItemHolder extends RecyclerView.ViewHolder {
@BindView(R.id.countryFlagImageView)
ImageView countryFlag;
@BindView(R.id.countryName)
TextView countryName;
public LanguageSelectionDialogItemHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
public ImageView getImageView()
{
return countryFlag;
}
public void setLanguageName(String name)
{
countryName.setText(name);
}
}

203
app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/LanguageSelectionListingDialog.java

@ -0,0 +1,203 @@
package com.gmeremit.online.gmeremittance_native.settings.view;
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.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.customwidgets.LineDividerItemDecoration;
import com.gmeremit.online.gmeremittance_native.customwidgets.exchangecountrylistingdialog.CountryListingRvAdapter;
import com.gmeremit.online.gmeremittance_native.exchange_rate.model.datav2.CountryPaymentService;
import com.gmeremit.online.gmeremittance_native.settings.adapter.LanguageSelectionDialogRVAdapter;
import com.gmeremit.online.gmeremittance_native.splash_screen.model.LanguageModel;
import java.util.ArrayList;
import java.util.List;
public class LanguageSelectionListingDialog extends android.support.v4.app.DialogFragment implements View.OnClickListener, TextWatcher {
private List<LanguageModel> data;
private LanguageSelectionDialogRVAdapter.LanguageSelectionListener listener;
private RecyclerView countryListRv;
private View cancelButton;
private EditText noCountryFoundView;
private EditText searchEditTextView;
private LanguageSelectionDialogRVAdapter languageSelectionDialogRVAdapter;
private View searchViewContainer;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
View view = getActivity().getLayoutInflater().inflate(R.layout.language_selection_dialog, 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);
searchViewContainer= view.findViewById(R.id.searchViewContainer);
builder.setView(view);
initialize();
return builder.create();
}
private void initialize() {
cancelButton.setOnClickListener(this);
searchEditTextView.addTextChangedListener(this);
languageSelectionDialogRVAdapter = new LanguageSelectionDialogRVAdapter(this.listener);
languageSelectionDialogRVAdapter.setData(this.data);
countryListRv.setAdapter(languageSelectionDialogRVAdapter);
LineDividerItemDecoration lineDividerItemDecoration = new LineDividerItemDecoration(getActivity(), LineDividerItemDecoration.VERTICAL_LIST);
countryListRv.addItemDecoration(lineDividerItemDecoration);
searchViewContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchEditTextView.requestFocus();
showKeyBoard(searchEditTextView);
}
});
}
public void setListener(LanguageSelectionDialogRVAdapter.LanguageSelectionListener listener) {
this.listener = listener;
}
public void setLanguageData(List<LanguageModel> data) {
if (data != null) {
this.data = data;
}
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
if (window != null) {
window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
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 showNoLanguageFound(boolean action) {
if (action) {
if (countryListRv.getVisibility() == View.VISIBLE) {
countryListRv.setVisibility(View.GONE);
noCountryFoundView.setVisibility(View.VISIBLE);
}
} else {
if (countryListRv.getVisibility() != View.VISIBLE) {
noCountryFoundView.setVisibility(View.GONE);
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 (languageSelectionDialogRVAdapter != null) {
searchForCountry(s.toString());
}
}
private void searchForCountry(String s) {
if (this.data != null) {
if (s.length() > 0) {
List<LanguageModel> searchedData = new ArrayList<>();
for (LanguageModel item : data) {
if (item.getCountryName().toLowerCase().contains(s.toLowerCase())) {
searchedData.add(item);
}
}
if (searchedData.size() > 0)
showNoLanguageFound(false);
else
showNoLanguageFound(true);
languageSelectionDialogRVAdapter.setData(searchedData);
} else {
showNoLanguageFound(false);
languageSelectionDialogRVAdapter.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);
getActivity().getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
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");
}
}
}

94
app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/SettingsView.java

@ -1,15 +1,24 @@
package com.gmeremit.online.gmeremittance_native.settings.view;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.gmeremit.online.gmeremittance_native.GmeApplication;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.changepasswordV2.view.ChangePasswordV2Activity;
import com.gmeremit.online.gmeremittance_native.settings.adapter.LanguageSelectionDialogRVAdapter;
import com.gmeremit.online.gmeremittance_native.splash_screen.model.LanguageModel;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import butterknife.ButterKnife;
import butterknife.OnClick;
@ -19,6 +28,8 @@ import butterknife.OnClick;
public class SettingsView extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -28,18 +39,97 @@ public class SettingsView extends AppCompatActivity {
private void init() {
ButterKnife.bind(this);
// EventBus.getDefault().register(this);
}
@OnClick({R.id.view_change_password, R.id.iv_back})
@OnClick({R.id.view_change_password, R.id.iv_back,R.id.view_language})
public void onClick(View view) {
switch (view.getId()) {
case R.id.view_change_password:
startActivity(new Intent(this, ChangePasswordV2Activity.class));
break;
case R.id.iv_back:
finish();
break;
case R.id.view_language:
promptLanguageSelectionDialog();
break;
}
}
private void promptLanguageSelectionDialog()
{
LanguageSelectionListingDialog languageSelectionDialog = new LanguageSelectionListingDialog();
languageSelectionDialog.setLanguageData(getLanguagedata());
languageSelectionDialog.setListener(new LanguageSelectionDialogRVAdapter.LanguageSelectionListener() {
@Override
public void onLangugageSelected(LanguageModel languageModel) {
languageSelectionDialog.dismiss();
changeLocale(languageModel.getLocaleCode());
}
});
if (!languageSelectionDialog.isAdded())
languageSelectionDialog.show(getSupportFragmentManager(), "GenericTextListingDialog");
}
private void changeLocale(String localeCode) {
Locale locale = new Locale(localeCode);
Locale.setDefault(locale);
// Create a new configuration object
Configuration config = new Configuration();
// Set the locale of the new configuration
config.locale = locale;
// Update the configuration of the Accplication context
Resources res= getResources();
res.updateConfiguration(
config,
getResources().getDisplayMetrics()
);
GmeApplication.getStringExtractor().updateResources(res);
try {
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
catch(NullPointerException ne)
{
}
}
private List<LanguageModel> getLanguagedata()
{
List<LanguageModel> models = new ArrayList<>();
models.add(new LanguageModel("BD", "bd", "Bangladesh"));
models.add(new LanguageModel("KH", "th", "Cambodia"));
models.add(new LanguageModel("CN", "th", "China"));
models.add(new LanguageModel("KR", "th", "Korea"));
models.add(new LanguageModel("NP", "th", "Nepal"));
models.add(new LanguageModel("TH", "th", "Thailand"));
models.add(new LanguageModel("PK", "th", "Pakistan"));
models.add(new LanguageModel("PH", "th", "Philippines"));
models.add(new LanguageModel("LK", "th", "Sri Lanka"));
models.add(new LanguageModel("SG", "en", "Singapore"));
models.add(new LanguageModel("VN", "th", "Vietnam"));
models.add(new LanguageModel("RU", "th", "Russia"));
models.add(new LanguageModel("AZ", "th", "Azerbaijan"));
models.add(new LanguageModel("GE", "th", "Georgia"));
models.add(new LanguageModel("KJ", "th", "Kazakhstan"));
models.add(new LanguageModel("KD", "th", "Kyrgyzstan"));
models.add(new LanguageModel("MG", "th", "Moldova"));
models.add(new LanguageModel("TJ", "th", "Tajikistan"));
models.add(new LanguageModel("AE", "th", "UAE"));
models.add(new LanguageModel("UZ", "th", "Uzbekistan"));
models.add(new LanguageModel("BY", "th", "Belarus"));
models.add(new LanguageModel("MN", "th", "Mongolia"));
return models;
}
}

3
app/src/main/java/com/gmeremit/online/gmeremittance_native/user_profile/view/ChangePasswordActivity.java

@ -8,14 +8,11 @@ import android.widget.TextView;
import android.widget.Toast;
import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.settings.events.PasswordEvent;
import com.gmeremit.online.gmeremittance_native.user_profile.UserProfileContract;
import com.gmeremit.online.gmeremittance_native.user_profile.model.UserProfileModel;
import com.gmeremit.online.gmeremittance_native.user_profile.presenter.UserProfilePresenter;
import com.gmeremit.online.gmeremittance_native.utils.Utils;
import com.gmeremit.online.gmeremittance_native.utils.other.DisplayUtils;
import com.gmeremit.online.gmeremittance_native.utils.other.PersistenceStorageManager;
import com.gmeremit.online.gmeremittance_native.utils.other.Utility;
import butterknife.BindView;

17
app/src/main/res/layout/activity_settings.xml

@ -98,6 +98,23 @@
android:text="@string/change_password_text"
android:textColor="@color/darkgray"
android:textSize="14sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/divider_dark" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:layout_marginTop="14dp"
android:id="@+id/view_language"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:paddingLeft="21dp"
android:paddingStart="21dp"
android:paddingTop="16dp"
android:text="@string/language_text"
android:textColor="@color/darkgray"
android:textSize="14sp" />
<View
android:layout_width="match_parent"

100
app/src/main/res/layout/language_selection_dialog.xml

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:background="#FAFAFA"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/dialog_title_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/select_language_text"
android:textColor="@color/darkgray"
android:textSize="18sp"
android:gravity="center"
android:padding="20dp" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/iv_cancel"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="10dp"
android:gravity="center"
android:layout_gravity="end"
android:textColor="@color/colorAccent"
android:text="@string/cancel_text" />
</FrameLayout>
<LinearLayout
android:id="@+id/searchViewContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FBFBFB"
android:elevation="1dp"
android:focusableInTouchMode="true"
android:orientation="horizontal"
android:padding="18dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_search_icon"
android:contentDescription="Search Icon"
/>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeEditText
android:id="@+id/searchEditText"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp"
android:layout_weight="1"
android:maxLength="20"
android:background="@null"
android:gravity="center_vertical"
android:hint="@string/search_language_text"
android:imeActionLabel="Done"
android:imeOptions="actionDone"
android:inputType="text"
android:textColor="@android:color/black"
android:textSize="14sp"
/>
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/countryListRv"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeEditText
android:paddingTop="20dp"
android:id="@+id/noCountryFoundTextView"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@null"
android:enabled="false"
android:gravity="center"
android:hint="@string/no_languages_available_text"
android:imeActionLabel="Done"
android:imeOptions="actionDone"
android:inputType="text"
android:textColor="@android:color/black"
android:textSize="14sp"
/>
</FrameLayout>
</LinearLayout>

31
app/src/main/res/layout/language_selection_dialog_item_view.xml

@ -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/countryFlagImageView"
android:layout_width="60dp"
android:layout_height="55dp"
android:layout_marginStart="23dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/countryName"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/countryName"
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/countryFlagImageView"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

2
app/src/main/res/values/strings.xml

@ -314,5 +314,7 @@
<string name="hassle_free_transfer_text">Hassle free money transfer to your\nloved ones</string>
<string name="connect_local_community_text">Connect to local community</string>
<string name="earn_reward_point_text">Earn reward points and get\nsurprise gifts</string>
<string name="language_text">Language</string>
<string name="no_languages_available_text">No Languages Available</string>
</resources>
Loading…
Cancel
Save