diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.java b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.java index eacead9252..c945ef0d32 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.java +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.java @@ -92,6 +92,18 @@ public class PreferencesHelper { return rxPrefs.getInteger(getKey(R.string.pref_image_scale_type_key), 1); } + public Preference imageDecoder() { + return rxPrefs.getInteger(getKey(R.string.pref_image_decoder_key), 0); + } + + public Preference zoomStart() { + return rxPrefs.getInteger(getKey(R.string.pref_zoom_start_key), 1); + } + + public Preference readerTheme() { + return rxPrefs.getInteger(getKey(R.string.pref_reader_theme_key), 0); + } + public Preference portraitColumns() { return rxPrefs.getInteger(getKey(R.string.pref_library_columns_portrait_key), 0); } @@ -112,16 +124,8 @@ public class PreferencesHelper { return prefs.getBoolean(getKey(R.string.pref_ask_update_manga_sync_key), false); } - public Preference imageDecoder() { - return rxPrefs.getInteger(getKey(R.string.pref_image_decoder_key), 0); - } - - public Preference zoomStart() { - return rxPrefs.getInteger(getKey(R.string.pref_zoom_start_key), 1); - } - - public Preference readerTheme() { - return rxPrefs.getInteger(getKey(R.string.pref_reader_theme_key), 0); + public Preference lastUsedCatalogueSource() { + return rxPrefs.getInteger(getKey(R.string.pref_last_catalogue_source_key), -1); } public Preference catalogueAsList() { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueFragment.java b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueFragment.java index fff75b078c..07a4ce9067 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueFragment.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueFragment.java @@ -20,6 +20,7 @@ import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.AdapterView; +import android.widget.ArrayAdapter; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.ViewSwitcher; @@ -66,7 +67,7 @@ public class CatalogueFragment extends BaseRxFragment private EndlessListScrollListener listScrollListener; @State String query = ""; - @State int selectedIndex = -1; + @State int selectedIndex; private final int SEARCH_TIMEOUT = 1000; private PublishSubject queryDebouncerSubject; @@ -122,25 +123,27 @@ public class CatalogueFragment extends BaseRxFragment Context themedContext = getBaseActivity().getSupportActionBar() != null ? getBaseActivity().getSupportActionBar().getThemedContext() : getActivity(); spinner = new Spinner(themedContext); - CatalogueSpinnerAdapter spinnerAdapter = new CatalogueSpinnerAdapter(themedContext, + ArrayAdapter spinnerAdapter = new ArrayAdapter<>(themedContext, android.R.layout.simple_spinner_item, getPresenter().getEnabledSources()); spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - if (savedState == null) selectedIndex = spinnerAdapter.getEmptyIndex(); + + if (savedState == null) { + selectedIndex = getPresenter().getLastUsedSourceIndex(); + } spinner.setAdapter(spinnerAdapter); spinner.setSelection(selectedIndex); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Source source = spinnerAdapter.getItem(position); - // We add an empty source with id -1 that acts as a placeholder to show a hint - // that asks to select a source - if (source.getId() != -1 && (selectedIndex != position || adapter.isEmpty())) { + if (selectedIndex != position || adapter.isEmpty()) { // Set previous selection if it's not a valid source and notify the user if (!getPresenter().isValidSource(source)) { - spinner.setSelection(spinnerAdapter.getEmptyIndex()); + spinner.setSelection(getPresenter().findFirstValidSource()); ToastUtil.showShort(getActivity(), R.string.source_requires_login); } else { selectedIndex = position; + getPresenter().setEnabledSource(selectedIndex); showProgressBar(); glm.scrollToPositionWithOffset(0, 0); llm.scrollToPositionWithOffset(0, 0); diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CataloguePresenter.java b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CataloguePresenter.java index 26d959ae2a..49951cac79 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CataloguePresenter.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CataloguePresenter.java @@ -32,6 +32,7 @@ public class CataloguePresenter extends BasePresenter { @Inject CoverCache coverCache; @Inject PreferencesHelper prefs; + private List sources; private Source source; @State int sourceId; @@ -56,6 +57,8 @@ public class CataloguePresenter extends BasePresenter { source = sourceManager.get(sourceId); } + sources = sourceManager.getSources(); + mangaDetailSubject = PublishSubject.create(); pager = new RxPager<>(); @@ -168,6 +171,14 @@ public class CataloguePresenter extends BasePresenter { return lastMangasPage != null && lastMangasPage.nextPageUrl != null; } + public int getLastUsedSourceIndex() { + int index = prefs.lastUsedCatalogueSource().get(); + if (index < 0 || index >= sources.size() || !isValidSource(sources.get(index))) { + return findFirstValidSource(); + } + return index; + } + public boolean isValidSource(Source source) { if (!source.isLoginRequired() || source.isLogged()) return true; @@ -176,6 +187,19 @@ public class CataloguePresenter extends BasePresenter { || prefs.getSourcePassword(source).equals("")); } + public int findFirstValidSource() { + for (int i = 0; i < sources.size(); i++) { + if (isValidSource(sources.get(i))) { + return i; + } + } + return 0; + } + + public void setEnabledSource(int index) { + prefs.lastUsedCatalogueSource().set(index); + } + public List getEnabledSources() { // TODO filter by enabled source return sourceManager.getSources(); diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueSpinnerAdapter.java b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueSpinnerAdapter.java deleted file mode 100644 index b2da1f2d03..0000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueSpinnerAdapter.java +++ /dev/null @@ -1,120 +0,0 @@ -package eu.kanade.tachiyomi.ui.catalogue; - -import android.content.Context; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import org.jsoup.nodes.Document; - -import java.util.List; - -import eu.kanade.tachiyomi.R; -import eu.kanade.tachiyomi.data.database.models.Chapter; -import eu.kanade.tachiyomi.data.database.models.Manga; -import eu.kanade.tachiyomi.data.source.base.Source; -import eu.kanade.tachiyomi.data.source.model.MangasPage; - -public class CatalogueSpinnerAdapter extends ArrayAdapter { - - public CatalogueSpinnerAdapter(Context context, int resource, List sources) { - super(context, resource, sources); - sources.add(new SimpleSource()); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - - View v = super.getView(position, convertView, parent); - if (position == getCount()) { - ((TextView)v.findViewById(android.R.id.text1)).setText(""); - ((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount()).getName()); - } - - return v; - } - - @Override - public int getCount() { - return super.getCount()-1; // you dont display last item. It is used as hint. - } - - public int getEmptyIndex() { - return getCount(); - } - - private class SimpleSource extends Source { - - @Override - public String getName() { - return getContext().getString(R.string.select_source); - } - - @Override - public int getId() { - return -1; - } - - @Override - public String getBaseUrl() { - return null; - } - - @Override - public boolean isLoginRequired() { - return false; - } - - @Override - protected String getInitialPopularMangasUrl() { - return null; - } - - @Override - protected String getInitialSearchUrl(String query) { - return null; - } - - @Override - protected List parsePopularMangasFromHtml(Document parsedHtml) { - return null; - } - - @Override - protected String parseNextPopularMangasUrl(Document parsedHtml, MangasPage page) { - return null; - } - - @Override - protected List parseSearchFromHtml(Document parsedHtml) { - return null; - } - - @Override - protected String parseNextSearchUrl(Document parsedHtml, MangasPage page, String query) { - return null; - } - - @Override - protected Manga parseHtmlToManga(String mangaUrl, String unparsedHtml) { - return null; - } - - @Override - protected List parseHtmlToChapters(String unparsedHtml) { - return null; - } - - @Override - protected List parseHtmlToPageUrls(String unparsedHtml) { - return null; - } - - @Override - protected String parseHtmlToImageUrl(String unparsedHtml) { - return null; - } - } - -} diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 1967a589f7..ff88227f28 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -39,4 +39,5 @@ pref_build_time pref_display_catalogue_as_list + pref_last_catalogue_source_key \ No newline at end of file