mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-08-03 10:46:53 -04:00
Add selected and unselected language header in LanguageActivity
This commit is contained in:
parent
1118e26c9b
commit
057942d657
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user