mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-08-03 18:56:44 -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) {
|
public void notifyLanguagesFiltered(List<Language> languages) {
|
||||||
this.languages.clear();
|
this.languages.clear();
|
||||||
this.languages.addAll(languages);
|
this.languages.addAll(languages);
|
||||||
|
languageAdapter.categorizeLanguages();
|
||||||
languageAdapter.notifyDataSetChanged();
|
languageAdapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,27 +12,66 @@ import org.kiwix.kiwixmobile.R;
|
|||||||
import org.kiwix.kiwixmobile.models.Language;
|
import org.kiwix.kiwixmobile.models.Language;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
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> languages;
|
||||||
|
private final ArrayList<Language> selectedLanguages = new ArrayList<>();
|
||||||
|
private final ArrayList<Language> unselectedLanguages = new ArrayList<>();
|
||||||
|
|
||||||
LanguageAdapter(ArrayList<Language> languages) {
|
LanguageAdapter(ArrayList<Language> languages) {
|
||||||
this.languages = 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
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_language, parent, false);
|
if (viewType == TYPE_ITEM) {
|
||||||
return new ViewHolder(view);
|
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
|
@Override
|
||||||
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder item, int position) {
|
||||||
Language language = languages.get(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.languageName.setText(language.language);
|
||||||
holder.languageLocalizedName.setText(language.languageLocalized);
|
holder.languageLocalizedName.setText(language.languageLocalized);
|
||||||
holder.booksCount.setText(holder.booksCount.getContext().getResources()
|
holder.booksCount.setText(holder.booksCount.getContext().getResources()
|
||||||
@ -43,7 +82,16 @@ class LanguageAdapter extends RecyclerView.Adapter<LanguageAdapter.ViewHolder> {
|
|||||||
holder.checkBox.setChecked(language.active);
|
holder.checkBox.setChecked(language.active);
|
||||||
View.OnClickListener onClickListener = v -> {
|
View.OnClickListener onClickListener = v -> {
|
||||||
language.active = holder.checkBox.isChecked();
|
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.itemView.setOnClickListener(v -> {
|
||||||
holder.checkBox.toggle();
|
holder.checkBox.toggle();
|
||||||
@ -52,9 +100,17 @@ class LanguageAdapter extends RecyclerView.Adapter<LanguageAdapter.ViewHolder> {
|
|||||||
holder.checkBox.setOnClickListener(onClickListener);
|
holder.checkBox.setOnClickListener(onClickListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemViewType(int position) {
|
||||||
|
if (position == 0 || position == selectedLanguages.size() + 1) {
|
||||||
|
return TYPE_HEADER;
|
||||||
|
}
|
||||||
|
return TYPE_ITEM;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return languages.size();
|
return selectedLanguages.size() + unselectedLanguages.size() + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ViewHolder extends RecyclerView.ViewHolder {
|
class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
@ -72,4 +128,14 @@ class LanguageAdapter extends RecyclerView.Adapter<LanguageAdapter.ViewHolder> {
|
|||||||
ButterKnife.bind(this, itemView);
|
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.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
import java.util.Locale;
|
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>() {
|
public static final Creator<Language> CREATOR = new Creator<Language>() {
|
||||||
@Override
|
@Override
|
||||||
@ -62,4 +63,9 @@ public class Language implements Parcelable {
|
|||||||
dest.writeByte((byte) (active == null ? 0 : active ? 1 : 2));
|
dest.writeByte((byte) (active == null ? 0 : active ? 1 : 2));
|
||||||
dest.writeInt(booksCount);
|
dest.writeInt(booksCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(@NonNull Language o) {
|
||||||
|
return language.compareTo(o.language);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user