mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-08-03 18:56:44 -04:00
Created custom LanguageSelectDialog class
Created custom LanguageSelectDialog class. This can be reused in multiple places. The library screen has been modified to use this class. Settings screen still requires modification.
This commit is contained in:
parent
b9c78f7ca7
commit
e0ec00b3d1
@ -0,0 +1,134 @@
|
||||
package org.kiwix.kiwixmobile.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.kiwix.kiwixmobile.R;
|
||||
import org.kiwix.kiwixmobile.library.LibraryAdapter;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by judebrauer on 12/6/17
|
||||
*/
|
||||
|
||||
public class LanguageSelectDialog extends AlertDialog {
|
||||
protected LanguageSelectDialog(@NonNull Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public LanguageSelectDialog(@NonNull Context context, int themeResId) {
|
||||
super(context, themeResId);
|
||||
}
|
||||
|
||||
public static class Builder extends AlertDialog.Builder {
|
||||
private List<LibraryAdapter.Language> languages;
|
||||
private Map<String, Integer> languageCounts;
|
||||
|
||||
public Builder(@NonNull Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public Builder(@NonNull Context context, int themeResId) {
|
||||
super(context, themeResId);
|
||||
}
|
||||
|
||||
public Builder setLanguages(List<LibraryAdapter.Language> languages) {
|
||||
this.languages = languages;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setLanguageCounts(Map<String, Integer> languageCounts) {
|
||||
this.languageCounts = languageCounts;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlertDialog create() {
|
||||
LinearLayout view = (LinearLayout) View.inflate(getContext(), R.layout.language_selection, null);
|
||||
ListView listView = view.findViewById(R.id.language_check_view);
|
||||
int size = 0;
|
||||
try {
|
||||
size = languages.size();
|
||||
} catch (NullPointerException e) {}
|
||||
|
||||
if (size == 0) {
|
||||
Toast.makeText(getContext(), getContext().getResources().getString(R.string.wait_for_load), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
LanguageArrayAdapter languageArrayAdapter = new LanguageArrayAdapter(getContext(), 0, languages, languageCounts);
|
||||
listView.setAdapter(languageArrayAdapter);
|
||||
setView(view);
|
||||
|
||||
return super.create();
|
||||
}
|
||||
}
|
||||
|
||||
private static class LanguageArrayAdapter extends ArrayAdapter<LibraryAdapter.Language> {
|
||||
private Map<String, Integer> languageCounts;
|
||||
private Context context;
|
||||
|
||||
public LanguageArrayAdapter(Context context, int textViewResourceId, List<LibraryAdapter.Language> languages, Map<String, Integer> languageCounts) {
|
||||
super(context, textViewResourceId, languages);
|
||||
this.languageCounts = languageCounts;
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
LanguageArrayAdapter.ViewHolder holder;
|
||||
|
||||
if (convertView == null) {
|
||||
convertView = View.inflate(getContext(), R.layout.language_check_item, null);
|
||||
holder = new LanguageArrayAdapter.ViewHolder();
|
||||
holder.row = convertView.findViewById(R.id.language_row);
|
||||
holder.checkBox = convertView.findViewById(R.id.language_checkbox);
|
||||
holder.language = convertView.findViewById(R.id.language_name);
|
||||
holder.languageLocalized = convertView.findViewById(R.id.language_name_localized);
|
||||
holder.languageEntriesCount = convertView.findViewById(R.id.language_entries_count);
|
||||
convertView.setTag(holder);
|
||||
} else {
|
||||
holder = (LanguageArrayAdapter.ViewHolder) convertView.getTag();
|
||||
}
|
||||
|
||||
// Set event listeners first, since updating the default values can trigger them.
|
||||
holder.row.setOnClickListener((view) -> holder.checkBox.toggle());
|
||||
holder.checkBox.setOnCheckedChangeListener((compoundButton, b) -> getItem(position).active = b);
|
||||
|
||||
LibraryAdapter.Language language = getItem(position);
|
||||
holder.language.setText(language.language);
|
||||
holder.languageLocalized.setText(language.languageLocalized);
|
||||
|
||||
if (languageCounts != null) {
|
||||
holder.languageEntriesCount.setText(
|
||||
context.getString(R.string.language_count,
|
||||
languageCounts.get(language.languageCode)));
|
||||
} else {
|
||||
holder.languageEntriesCount.setVisibility(View.GONE);
|
||||
}
|
||||
holder.checkBox.setChecked(language.active);
|
||||
|
||||
return convertView;
|
||||
}
|
||||
|
||||
// We are using the ViewHolder pattern in order to optimize the ListView by reusing
|
||||
// Views and saving them to this mLibrary class, and not inflating the layout every time
|
||||
// we need to create a row.
|
||||
private class ViewHolder {
|
||||
ViewGroup row;
|
||||
CheckBox checkBox;
|
||||
TextView language;
|
||||
TextView languageLocalized;
|
||||
TextView languageEntriesCount;
|
||||
}
|
||||
}
|
||||
}
|
@ -36,6 +36,7 @@ import org.kiwix.kiwixmobile.downloader.DownloadService;
|
||||
import org.kiwix.kiwixmobile.library.LibraryAdapter;
|
||||
import org.kiwix.kiwixmobile.library.LibraryAdapter.Language;
|
||||
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity;
|
||||
import org.kiwix.kiwixmobile.views.LanguageSelectDialog;
|
||||
import org.kiwix.kiwixmobile.zim_manager.fileselect_view.ZimFileSelectFragment;
|
||||
import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryFragment;
|
||||
|
||||
@ -236,29 +237,16 @@ public class ZimManageActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
private void showLanguageSelect() {
|
||||
LinearLayout view = (LinearLayout) getLayoutInflater().inflate(R.layout.language_selection, null);
|
||||
ListView listView = (ListView) view.findViewById(R.id.language_check_view);
|
||||
int size = 0;
|
||||
try {
|
||||
size = mSectionsPagerAdapter.libraryFragment.libraryAdapter.languages.size();
|
||||
} catch (NullPointerException e) { }
|
||||
if (size == 0) {
|
||||
Toast.makeText(this, getResources().getString(R.string.wait_for_load), Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
LanguageArrayAdapter languageArrayAdapter =
|
||||
new LanguageArrayAdapter(this, 0, mSectionsPagerAdapter.libraryFragment.libraryAdapter);
|
||||
listView.setAdapter(languageArrayAdapter);
|
||||
new AlertDialog.Builder(this, dialogStyle())
|
||||
.setView(view)
|
||||
.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> {
|
||||
mSectionsPagerAdapter.libraryFragment.libraryAdapter.updateNetworkLanguages();
|
||||
mSectionsPagerAdapter.libraryFragment.libraryAdapter.getFilter().filter(searchQuery);
|
||||
})
|
||||
.show();
|
||||
new LanguageSelectDialog.Builder(this, dialogStyle())
|
||||
.setLanguages(mSectionsPagerAdapter.libraryFragment.libraryAdapter.languages)
|
||||
.setLanguageCounts(mSectionsPagerAdapter.libraryFragment.libraryAdapter.languageCounts)
|
||||
.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> {
|
||||
mSectionsPagerAdapter.libraryFragment.libraryAdapter.updateNetworkLanguages();
|
||||
mSectionsPagerAdapter.libraryFragment.libraryAdapter.getFilter().filter(searchQuery);
|
||||
})
|
||||
.show();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
|
||||
* one of the sections/tabs/pages.
|
||||
@ -312,56 +300,4 @@ public class ZimManageActivity extends AppCompatActivity {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private class LanguageArrayAdapter extends ArrayAdapter<LibraryAdapter.Language> {
|
||||
|
||||
public LanguageArrayAdapter(Context context, int textViewResourceId, LibraryAdapter library_adapter) {
|
||||
super(context, textViewResourceId, library_adapter.languages);
|
||||
this.library_adapter = library_adapter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
|
||||
ViewHolder holder;
|
||||
if (convertView == null) {
|
||||
convertView = View.inflate(getContext(), R.layout.language_check_item, null);
|
||||
holder = new ViewHolder();
|
||||
holder.row = (ViewGroup) convertView.findViewById(R.id.language_row);
|
||||
holder.checkBox = (CheckBox) convertView.findViewById(R.id.language_checkbox);
|
||||
holder.language = (TextView) convertView.findViewById(R.id.language_name);
|
||||
holder.languageLocalized = (TextView) convertView.findViewById(R.id.language_name_localized);
|
||||
holder.languageEntriesCount = (TextView) convertView.findViewById(R.id.language_entries_count);
|
||||
convertView.setTag(holder);
|
||||
} else {
|
||||
holder = (ViewHolder) convertView.getTag();
|
||||
}
|
||||
|
||||
// Set event listeners first, since updating the default values can trigger them.
|
||||
holder.row.setOnClickListener((view) -> holder.checkBox.toggle());
|
||||
holder.checkBox.setOnCheckedChangeListener((compoundButton, b) -> getItem(position).active = b);
|
||||
|
||||
Language language = getItem(position);
|
||||
holder.language.setText(language.language);
|
||||
holder.languageLocalized.setText(language.languageLocalized);
|
||||
holder.languageEntriesCount.setText(
|
||||
getString(R.string.language_count, library_adapter.languageCounts.get(language.languageCode)));
|
||||
holder.checkBox.setChecked(language.active);
|
||||
|
||||
return convertView;
|
||||
}
|
||||
|
||||
private LibraryAdapter library_adapter;
|
||||
// We are using the ViewHolder pattern in order to optimize the ListView by reusing
|
||||
// Views and saving them to this mLibrary class, and not inflating the layout every time
|
||||
// we need to create a row.
|
||||
private class ViewHolder {
|
||||
ViewGroup row;
|
||||
CheckBox checkBox;
|
||||
TextView language;
|
||||
TextView languageLocalized;
|
||||
TextView languageEntriesCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user