commit da47fd3be0b1a0c92c08be10351eb73ae5a64401 Author: Fabio Mazza Date: Thu Oct 13 00:01:57 2022 +0200 Dynamically adapt fetchers based on settings diff --git a/src/it/reyboz/bustorino/backend/utils.java b/src/it/reyboz/bustorino/backend/utils.java index 9283f44..b11a2da 100644 --- a/src/it/reyboz/bustorino/backend/utils.java +++ b/src/it/reyboz/bustorino/backend/utils.java @@ -233,8 +233,7 @@ public abstract class utils { */ public static List getDefaultArrivalsFetchers(Context context){ SharedPreferences defSharPref = PreferenceManager.getDefaultSharedPreferences(context); - final Set setSelected = new HashSet<>(); - setSelected.addAll(defSharPref.getStringSet(SettingsFragment.KEY_ARRIVALS_FETCHERS_USE, + final Set setSelected = new HashSet<>(defSharPref.getStringSet(SettingsFragment.KEY_ARRIVALS_FETCHERS_USE, new HashSet<>())); if (setSelected.isEmpty()) { return Arrays.asList(new MatoAPIFetcher(), @@ -276,7 +275,7 @@ public abstract class utils { setSelected.remove("fivetscraper"); } if(!setSelected.isEmpty()){ - Log.e("BusTO-Utils","Getting some fetchers values which are not contemplated"); + Log.e("BusTO-Utils","Getting some fetchers values which are not contemplated: "+setSelected); } return outFetchers; diff --git a/src/it/reyboz/bustorino/fragments/ArrivalsFragment.java b/src/it/reyboz/bustorino/fragments/ArrivalsFragment.java index 86b83ed..30126cc 100644 --- a/src/it/reyboz/bustorino/fragments/ArrivalsFragment.java +++ b/src/it/reyboz/bustorino/fragments/ArrivalsFragment.java @@ -212,6 +212,9 @@ public class ArrivalsFragment extends ResultListFragment implements LoaderManage if(stopID!=null){ //refresh the arrivals if(!justCreated){ + fetchers = utils.getDefaultArrivalsFetchers(getContext()); + adjustFetchersToSource(); + if (reloadOnResume) mListener.requestArrivalsForStopID(stopID); } @@ -342,14 +345,9 @@ public class ArrivalsFragment extends ResultListFragment implements LoaderManage default: throw new IllegalStateException("Unexpected value: " + source); } - int count = 0; - if (source!= Passaggio.Source.UNDETERMINED) - while (source != fetchers.get(0).getSourceForFetcher() && count < 10){ - //we need to update the fetcher that is requested - rotateFetchers(); - count++; - } - if (count>10) + // + final boolean updatedFetchers = adjustFetchersToSource(source); + if(!updatedFetchers) Log.w(DEBUG_TAG, "Tried to update the source fetcher but it didn't work"); final String base_message = getString(R.string.times_source_fmt, source_txt); timesSourceTextView.setText(base_message); @@ -361,6 +359,26 @@ public class ArrivalsFragment extends ResultListFragment implements LoaderManage fetchersChangeRequestPending = false; } + protected boolean adjustFetchersToSource(Passaggio.Source source){ + if (source == null) return false; + int count = 0; + if (source!= Passaggio.Source.UNDETERMINED) + while (source != fetchers.get(0).getSourceForFetcher() && count < 200){ + //we need to update the fetcher that is requested + rotateFetchers(); + count++; + } + if (count>=200){ + return false; + } + else return true; + } + protected boolean adjustFetchersToSource(){ + if (lastUpdatedPalina == null) return false; + final Passaggio.Source source = lastUpdatedPalina.getPassaggiSourceIfAny(); + return adjustFetchersToSource(source); + } + @Override public void setNewListAdapter(ListAdapter adapter) { throw new UnsupportedOperationException(); diff --git a/src/it/reyboz/bustorino/fragments/MainScreenFragment.java b/src/it/reyboz/bustorino/fragments/MainScreenFragment.java index 8897cc3..2b711f5 100644 --- a/src/it/reyboz/bustorino/fragments/MainScreenFragment.java +++ b/src/it/reyboz/bustorino/fragments/MainScreenFragment.java @@ -101,7 +101,6 @@ public class MainScreenFragment extends ScreenBaseFragment implements FragmentL private static final int SEARCH_BY_ROUTE = 2; // TODO: implement this -- https://gitpull.it/T12 private int searchMode; //private ImageButton addToFavorites; - private final ArrivalsFetcher[] arrivalsFetchers = utils.getDefaultArrivalsFetchers(); //// HIDDEN BUT IMPORTANT ELEMENTS //// FragmentManager fragMan; Handler mainHandler; @@ -720,6 +719,7 @@ public class MainScreenFragment extends ScreenBaseFragment implements FragmentL Log.e(DEBUG_TAG, "Asked for arrivals with null context"); return; } + ArrivalsFetcher[] fetchers = utils.getDefaultArrivalsFetchers(getContext()).toArray(new ArrivalsFetcher[0]); if (ID == null || ID.length() <= 0) { // we're still in UI thread, no need to mess with Progress showToastMessage(R.string.insert_bus_stop_number_error, true); @@ -731,11 +731,11 @@ public class MainScreenFragment extends ScreenBaseFragment implements FragmentL //fragment.getCurrentFetchers().toArray() new AsyncArrivalsSearcher(fragmentHelper,fragment.getCurrentFetchersAsArray(), getContext()).execute(ID); } else{ - new AsyncArrivalsSearcher(fragmentHelper, arrivalsFetchers, getContext()).execute(ID); + new AsyncArrivalsSearcher(fragmentHelper, fetchers, getContext()).execute(ID); } } else { - new AsyncArrivalsSearcher(fragmentHelper,arrivalsFetchers, getContext()).execute(ID); + new AsyncArrivalsSearcher(fragmentHelper,fetchers, getContext()).execute(ID); Log.d(DEBUG_TAG, "Started search for arrivals of stop " + ID); } }