diff --git a/app/src/main/java/org/kiwix/kiwixmobile/views/LanguageSelectDialog.java b/app/src/main/java/org/kiwix/kiwixmobile/views/LanguageSelectDialog.java new file mode 100644 index 000000000..ad979e8a0 --- /dev/null +++ b/app/src/main/java/org/kiwix/kiwixmobile/views/LanguageSelectDialog.java @@ -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 languages; + private Map languageCounts; + + public Builder(@NonNull Context context) { + super(context); + } + + public Builder(@NonNull Context context, int themeResId) { + super(context, themeResId); + } + + public Builder setLanguages(List languages) { + this.languages = languages; + return this; + } + + public Builder setLanguageCounts(Map 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 { + private Map languageCounts; + private Context context; + + public LanguageArrayAdapter(Context context, int textViewResourceId, List languages, Map 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; + } + } +} diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java index d4d50d85b..a85ba55d6 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java @@ -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 { - - 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; - } - } }