Add selected and unselected language header in LanguageActivity

This commit is contained in:
Abdul Wadood 2018-08-10 03:59:03 +05:30 committed by Isaac Hutt
parent 1118e26c9b
commit 057942d657
3 changed files with 82 additions and 9 deletions

View File

@ -109,6 +109,7 @@ public class LanguageActivity extends BaseActivity implements LanguageContract.V
public void notifyLanguagesFiltered(List<Language> languages) {
this.languages.clear();
this.languages.addAll(languages);
languageAdapter.categorizeLanguages();
languageAdapter.notifyDataSetChanged();
}
}

View File

@ -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<LanguageAdapter.ViewHolder> {
class LanguageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private final ArrayList<Language> languages;
private final ArrayList<Language> selectedLanguages = new ArrayList<>();
private final ArrayList<Language> unselectedLanguages = new ArrayList<>();
LanguageAdapter(ArrayList<Language> 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<LanguageAdapter.ViewHolder> {
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<LanguageAdapter.ViewHolder> {
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<LanguageAdapter.ViewHolder> {
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);
}
}
}

View File

@ -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<Language> {
public static final Creator<Language> CREATOR = new Creator<Language>() {
@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);
}
}