From 057942d657b7ab3f045a3eb9448af06d09e3e22c Mon Sep 17 00:00:00 2001 From: Abdul Wadood Date: Fri, 10 Aug 2018 03:59:03 +0530 Subject: [PATCH] Add selected and unselected language header in LanguageActivity --- .../language/LanguageActivity.java | 1 + .../kiwixmobile/language/LanguageAdapter.java | 82 +++++++++++++++++-- .../kiwix/kiwixmobile/models/Language.java | 8 +- 3 files changed, 82 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageActivity.java index 047aa359c..b95f08f46 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageActivity.java @@ -109,6 +109,7 @@ public class LanguageActivity extends BaseActivity implements LanguageContract.V public void notifyLanguagesFiltered(List languages) { this.languages.clear(); this.languages.addAll(languages); + languageAdapter.categorizeLanguages(); languageAdapter.notifyDataSetChanged(); } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageAdapter.java b/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageAdapter.java index 742b95b22..f928851f5 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageAdapter.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageAdapter.java @@ -12,27 +12,66 @@ import org.kiwix.kiwixmobile.R; import org.kiwix.kiwixmobile.models.Language; import java.util.ArrayList; +import java.util.Collections; import butterknife.BindView; import butterknife.ButterKnife; -class LanguageAdapter extends RecyclerView.Adapter { +class LanguageAdapter extends RecyclerView.Adapter { + private static final int TYPE_HEADER = 0; + private static final int TYPE_ITEM = 1; private final ArrayList languages; + private final ArrayList selectedLanguages = new ArrayList<>(); + private final ArrayList unselectedLanguages = new ArrayList<>(); LanguageAdapter(ArrayList languages) { this.languages = languages; + categorizeLanguages(); + } + + void categorizeLanguages() { + selectedLanguages.clear(); + unselectedLanguages.clear(); + for (Language language : languages) { + if (language.active != null && language.active.equals(true)) { + selectedLanguages.add(language); + } else { + language.active = false; + unselectedLanguages.add(language); + } + } + Collections.sort(selectedLanguages); + Collections.sort(unselectedLanguages); } @NonNull @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_language, parent, false); - return new ViewHolder(view); + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + if (viewType == TYPE_ITEM) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_language, parent, false); + return new ViewHolder(view); + } + return new Header(LayoutInflater.from(parent.getContext()).inflate(R.layout.header_date, parent, false)); } @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - Language language = languages.get(position); + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder item, int position) { + if (item instanceof Header) { + Header header = (Header) item; + if (position == 0) { + header.header.setText(R.string.your_languages); + } else { + header.header.setText(R.string.other_languages); + } + return; + } + Language language; + if (position - 1 < selectedLanguages.size()) { + language = selectedLanguages.get(position - 1); + } else { + language = unselectedLanguages.get(position - selectedLanguages.size() - 2); + } + ViewHolder holder = (ViewHolder) item; holder.languageName.setText(language.language); holder.languageLocalizedName.setText(language.languageLocalized); holder.booksCount.setText(holder.booksCount.getContext().getResources() @@ -43,7 +82,16 @@ class LanguageAdapter extends RecyclerView.Adapter { holder.checkBox.setChecked(language.active); View.OnClickListener onClickListener = v -> { language.active = holder.checkBox.isChecked(); - notifyItemChanged(position); + if (language.active) { + unselectedLanguages.remove(language); + selectedLanguages.add(language); + } else { + unselectedLanguages.add(language); + selectedLanguages.remove(language); + } + Collections.sort(selectedLanguages); + Collections.sort(unselectedLanguages); + notifyDataSetChanged(); }; holder.itemView.setOnClickListener(v -> { holder.checkBox.toggle(); @@ -52,9 +100,17 @@ class LanguageAdapter extends RecyclerView.Adapter { holder.checkBox.setOnClickListener(onClickListener); } + @Override + public int getItemViewType(int position) { + if (position == 0 || position == selectedLanguages.size() + 1) { + return TYPE_HEADER; + } + return TYPE_ITEM; + } + @Override public int getItemCount() { - return languages.size(); + return selectedLanguages.size() + unselectedLanguages.size() + 2; } class ViewHolder extends RecyclerView.ViewHolder { @@ -72,4 +128,14 @@ class LanguageAdapter extends RecyclerView.Adapter { ButterKnife.bind(this, itemView); } } + + class Header extends RecyclerView.ViewHolder { + @BindView(R.id.header_date) + TextView header; + + Header(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/models/Language.java b/app/src/main/java/org/kiwix/kiwixmobile/models/Language.java index d11a669ad..0cb9e1a9c 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/models/Language.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/models/Language.java @@ -2,10 +2,11 @@ package org.kiwix.kiwixmobile.models; import android.os.Parcel; import android.os.Parcelable; +import android.support.annotation.NonNull; import java.util.Locale; -public class Language implements Parcelable { +public class Language implements Parcelable, Comparable { public static final Creator CREATOR = new Creator() { @Override @@ -62,4 +63,9 @@ public class Language implements Parcelable { dest.writeByte((byte) (active == null ? 0 : active ? 1 : 2)); dest.writeInt(booksCount); } + + @Override + public int compareTo(@NonNull Language o) { + return language.compareTo(o.language); + } }