Page MenuHomeGitPull.it

D88.1729573038.diff
No OneTemporary

Size
33 KB
Referenced Files
None
Subscribers
None

D88.1729573038.diff

diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -184,6 +184,8 @@
</string-array>
<string name="pref_lines_click_msg">Mostra arrivi quando tocchi una fermata</string>
<string name="pref_experimental_msg">Abilita esperimenti</string>
+ <string name="pref_shown_startup">Schermata da mostrare all\'avvio</string>
+ <string name="pref_shown_startup_def_desc">Tocca per cambiare</string>
diff --git a/res/values/keys.xml b/res/values/keys.xml
--- a/res/values/keys.xml
+++ b/res/values/keys.xml
@@ -3,4 +3,11 @@
tools:ignore="MissingTranslation">
<string name="pref_layout">layout_pref</string>
<string name="pref_update_db_now">pref_update_db_now</string>
+
+ <array name="first_screen_values">
+ <item>arrivals</item>
+ <item>favorites</item>
+ <item>map</item>
+ <item>lines</item>
+ </array>
</resources>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -201,10 +201,19 @@
<item>CAPITALIZE_FIRST</item>
</array>
+ <string name="pref_shown_startup">Section to show on startup</string>
+ <string name="pref_shown_startup_def_desc">Touch to change it</string>
<string name="pref_lines_click_msg">Show arrivals touching on stop</string>
<string name="pref_experimental_msg">Enable experiments</string>
<!-- lines -->
<string name="long_press_stop_4_options">Long press the stop for options</string>
+ <array name="first_screen_shown">
+ <item>@string/nav_arrivals_text</item>
+ <item>@string/nav_favorites_text</item>
+ <item>@string/nav_map_text</item>
+ <item>@string/lines</item>
+ </array>
+
</resources>
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -2,6 +2,16 @@
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
+ <androidx.preference.PreferenceCategory android:title="@string/general_settings">
+ <androidx.preference.ListPreference
+ android:key="startup_screen_to_show"
+ android:entries="@array/first_screen_shown"
+ android:entryValues="@array/first_screen_values"
+ android:title="@string/pref_shown_startup"
+ android:summary="%s"
+ />
+ </androidx.preference.PreferenceCategory>
+
<androidx.preference.PreferenceCategory
android:title="@string/pref_recents_group_title">
<!--
diff --git a/src/it/reyboz/bustorino/ActivityPrincipal.java b/src/it/reyboz/bustorino/ActivityPrincipal.java
--- a/src/it/reyboz/bustorino/ActivityPrincipal.java
+++ b/src/it/reyboz/bustorino/ActivityPrincipal.java
@@ -77,6 +77,7 @@
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
final SharedPreferences theShPr = getMainSharedPreferences();
+ boolean showingArrivalsForStop = false;
//database check
GtfsDatabase gtfsDB = GtfsDatabase.Companion.getGtfsDatabase(this);
@@ -189,10 +190,12 @@
//setBusStopSearchByIDEditText(busStopID);
requestArrivalsForStopID(busStopID);
+ showingArrivalsForStop = true;
}
//Try (hopefully) database update
if(!dataUpdateRequested)
DatabaseUpdate.requestDBUpdateWithWork(this, false, false);
+
/*
Watch for database update
*/
@@ -224,7 +227,23 @@
});
// show the main fragment
- showMainFragment();
+ Fragment f = getSupportFragmentManager().findFragmentById(R.id.mainActContentFrame);
+ Log.d(DEBUG_TAG, "OnCreate the fragment is "+f);
+ String vl = PreferenceManager.getDefaultSharedPreferences(this).getString(SettingsFragment.PREF_KEY_STARTUP_SCREEN, "");
+ //if (vl.length() == 0 || vl.equals("arrivals")) {
+ // showMainFragment();
+ Log.d(DEBUG_TAG, "The default screen to open is: "+vl);
+ if(showingArrivalsForStop){
+ showMainFragment(false);
+ } else if (vl.equals("map")){
+ requestMapFragment(false);
+ } else if(vl.equals("favorites")){
+ checkAndShowFavoritesFragment(getSupportFragmentManager(), false);
+ } else if(vl.equals("lines")){
+ showLinesFragment(getSupportFragmentManager(), false, null);
+ } else{
+ showMainFragment(false);
+ }
}
@@ -250,50 +269,19 @@
} else if(menuItem.getItemId() == R.id.nav_favorites_item){
closeDrawerIfOpen();
//get Fragment
- FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
- FavoritesFragment fragment = FavoritesFragment.newInstance();
- ft.replace(R.id.mainActContentFrame,fragment, TAG_FAVORITES)
- .addToBackStack("main");
- ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
- ft.commit();
+ checkAndShowFavoritesFragment(getSupportFragmentManager(), true);
return true;
} else if(menuItem.getItemId() == R.id.nav_arrivals){
closeDrawerIfOpen();
- showMainFragment();
+ showMainFragment(true);
return true;
} else if(menuItem.getItemId() == R.id.nav_map_item){
closeDrawerIfOpen();
- final String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
- int result = askForPermissionIfNeeded(permission, STORAGE_PERMISSION_REQ);
- switch (result) {
- case PERMISSION_OK:
- createAndShowMapFragment(null);
- break;
- case PERMISSION_ASKING:
- permissionDoneRunnables.put(permission,
- () -> createAndShowMapFragment(null));
- break;
- case PERMISSION_NEG_CANNOT_ASK:
- String storage_perm = getString(R.string.storage_permission);
- String text = getString(R.string.too_many_permission_asks, storage_perm);
- Toast.makeText(getApplicationContext(),text, Toast.LENGTH_LONG).show();
- }
+ requestMapFragment(true);
return true;
} else if (menuItem.getItemId() == R.id.nav_lines_item) {
closeDrawerIfOpen();
- FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
- Fragment f = getSupportFragmentManager().findFragmentByTag(LinesFragment.FRAGMENT_TAG);
- if(f!=null){
- ft.replace(R.id.mainActContentFrame, f, LinesFragment.FRAGMENT_TAG);
- }else{
- //use new method
- ft.replace(R.id.mainActContentFrame,LinesFragment.class,null,LinesFragment.FRAGMENT_TAG);
- }
-
- ft.setReorderingAllowed(true)
- .addToBackStack("lines")
- .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
- .commit();
+ showLinesFragment(getSupportFragmentManager(), true,null);
return true;
}
//selectDrawerItem(menuItem);
@@ -394,13 +382,15 @@
//we have to stop the arrivals reload
((MainScreenFragment) shownFrag).cancelReloadArrivalsIfNeeded();
}
- shownFrag.getChildFragmentManager().popBackStackImmediate();
+ shownFrag.getChildFragmentManager().popBackStack();
if(showingMainFragmentFromOther && getSupportFragmentManager().getBackStackEntryCount() > 0){
getSupportFragmentManager().popBackStack();
+ Log.d(DEBUG_TAG, "Popping main back stack also");
}
}
else if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
+ Log.d(DEBUG_TAG, "Popping main frame backstack for fragments");
}
else
super.onBackPressed();
@@ -422,48 +412,90 @@
snackbar.show();
}
- private MainScreenFragment createAndShowMainFragment(){
- FragmentManager fraMan = getSupportFragmentManager();
-
- MainScreenFragment fragment = MainScreenFragment.newInstance();
-
- FragmentTransaction transaction = fraMan.beginTransaction();
- transaction.replace(R.id.mainActContentFrame, fragment, MainScreenFragment.FRAGMENT_TAG);
- transaction.commit();
- return fragment;
- }
-
/**
* Show the fragment by adding it to the backstack
* @param fraMan the fragmentManager
* @param fragment the fragment
*/
- private static void showMainFragment(FragmentManager fraMan, MainScreenFragment fragment){
- fraMan.beginTransaction().replace(R.id.mainActContentFrame, fragment)
- .setReorderingAllowed(true)
- .addToBackStack(null)
+ private static void showMainFragment(FragmentManager fraMan, MainScreenFragment fragment, boolean addToBackStack){
+ FragmentTransaction ft = fraMan.beginTransaction()
+ .replace(R.id.mainActContentFrame, fragment, MainScreenFragment.FRAGMENT_TAG)
+ .setReorderingAllowed(false)
/*.setCustomAnimations(
R.anim.slide_in, // enter
R.anim.fade_out, // exit
R.anim.fade_in, // popEnter
R.anim.slide_out // popExit
)*/
+ .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
+ if (addToBackStack) ft.addToBackStack(null);
+ ft.commit();
+ }
+
+ private void requestMapFragment(final boolean allowReturn){
+ final String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
+ int result = askForPermissionIfNeeded(permission, STORAGE_PERMISSION_REQ);
+ switch (result) {
+ case PERMISSION_OK:
+ createAndShowMapFragment(null, allowReturn);
+ break;
+ case PERMISSION_ASKING:
+ permissionDoneRunnables.put(permission,
+ () -> createAndShowMapFragment(null, allowReturn));
+ break;
+ case PERMISSION_NEG_CANNOT_ASK:
+ String storage_perm = getString(R.string.storage_permission);
+ String text = getString(R.string.too_many_permission_asks, storage_perm);
+ Toast.makeText(getApplicationContext(),text, Toast.LENGTH_LONG).show();
+ }
+ }
+
+ private static void checkAndShowFavoritesFragment(FragmentManager fragmentManager, boolean addToBackStack){
+ FragmentTransaction ft = fragmentManager.beginTransaction();
+ Fragment fragment = fragmentManager.findFragmentByTag(TAG_FAVORITES);
+ if(fragment!=null){
+ ft.replace(R.id.mainActContentFrame, fragment, TAG_FAVORITES);
+ }else{
+ //use new method
+ ft.replace(R.id.mainActContentFrame,FavoritesFragment.class,null,TAG_FAVORITES);
+ }
+ if (addToBackStack)
+ ft.addToBackStack("favorites_main");
+ ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
+ .setReorderingAllowed(false);
+ ft.commit();
+ }
+
+ private static void showLinesFragment(@NonNull FragmentManager fragmentManager, boolean addToBackStack, @Nullable Bundle fragArgs){
+ FragmentTransaction ft = fragmentManager.beginTransaction();
+ Fragment f = fragmentManager.findFragmentByTag(LinesFragment.FRAGMENT_TAG);
+ if(f!=null){
+ ft.replace(R.id.mainActContentFrame, f, LinesFragment.FRAGMENT_TAG);
+ }else{
+ //use new method
+ ft.replace(R.id.mainActContentFrame,LinesFragment.class,fragArgs,LinesFragment.FRAGMENT_TAG);
+ }
+ if (addToBackStack)
+ ft.addToBackStack("lines");
+ ft.setReorderingAllowed(true)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.commit();
}
- private MainScreenFragment showMainFragment(){
+ private MainScreenFragment showMainFragment(boolean addToBackStack){
FragmentManager fraMan = getSupportFragmentManager();
Fragment fragment = fraMan.findFragmentByTag(MainScreenFragment.FRAGMENT_TAG);
final MainScreenFragment mainScreenFragment;
if (fragment==null | !(fragment instanceof MainScreenFragment)){
- mainScreenFragment = createAndShowMainFragment();
+ mainScreenFragment = MainScreenFragment.newInstance();
+ //mainScreenFragment = createAndShowMainFragment();
+ showMainFragment(fraMan, mainScreenFragment, addToBackStack);
}
else if(!fragment.isVisible()){
mainScreenFragment = (MainScreenFragment) fragment;
- showMainFragment(fraMan, mainScreenFragment);
+ showMainFragment(fraMan, mainScreenFragment, addToBackStack);
Log.d(DEBUG_TAG, "Found the main fragment");
} else{
mainScreenFragment = (MainScreenFragment) fragment;
@@ -549,15 +581,19 @@
if (showingMainFragmentFromOther){
FragmentManager fraMan = getSupportFragmentManager();
Fragment fragment = fraMan.findFragmentByTag(MainScreenFragment.FRAGMENT_TAG);
+ Log.d(DEBUG_TAG, "Requested main fragment, not visible. Search by TAG: "+fragment);
if(fragment!=null){
//the fragment is there but not shown
probableFragment = (MainScreenFragment) fragment;
// set the flag
probableFragment.setSuppressArrivalsReload(true);
- showMainFragment(fraMan, probableFragment);
+ showMainFragment(fraMan, probableFragment, true);
} else {
+ //createAndShowMainFragment
// we have no fragment
- probableFragment = createAndShowMainFragment();
+ probableFragment = MainScreenFragment.newInstance();
+ showMainFragment(fraMan, probableFragment,true);
+ //probableFragment = createAndShowMainFragment();
}
}
probableFragment.requestArrivalsForStopID(ID);
@@ -582,16 +618,16 @@
@Override
public void showMapCenteredOnStop(Stop stop) {
- createAndShowMapFragment(stop);
+ createAndShowMapFragment(stop, true);
}
//Map Fragment stuff
- void createAndShowMapFragment(@Nullable Stop stop){
+ void createAndShowMapFragment(@Nullable Stop stop, boolean addToBackStack){
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
MapFragment fragment = stop == null? MapFragment.getInstance(): MapFragment.getInstance(stop);
ft.replace(R.id.mainActContentFrame, fragment, MapFragment.FRAGMENT_TAG);
- ft.addToBackStack(null);
+ if (addToBackStack) ft.addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
diff --git a/src/it/reyboz/bustorino/backend/mato/MatoAPIFetcher.kt b/src/it/reyboz/bustorino/backend/mato/MatoAPIFetcher.kt
--- a/src/it/reyboz/bustorino/backend/mato/MatoAPIFetcher.kt
+++ b/src/it/reyboz/bustorino/backend/mato/MatoAPIFetcher.kt
@@ -55,7 +55,7 @@
var numPassaggi = 0
var trials = 0
val numDepartures = 4
- while (numPassaggi < minNumPassaggi && trials < 4) {
+ while (numPassaggi < minNumPassaggi && trials < 2) {
//numDepartures+=2
numMinutes += 20
diff --git a/src/it/reyboz/bustorino/data/FavoritesLiveData.java b/src/it/reyboz/bustorino/data/FavoritesLiveData.java
--- a/src/it/reyboz/bustorino/data/FavoritesLiveData.java
+++ b/src/it/reyboz/bustorino/data/FavoritesLiveData.java
@@ -83,16 +83,18 @@
}
private void loadData(boolean forceQuery) {
- Log.d(TAG, "loadData()");
+ Log.d(TAG, "loadData() force: "+forceQuery);
if (!forceQuery){
if (getValue()!= null){
//Data already loaded
+ Log.d(TAG, "Data already loaded");
return;
}
}
if (isQueryRunning){
//we are waiting for data, we will get an update soon
+ Log.d(TAG, "Query is running, abort");
return;
}
@@ -105,7 +107,7 @@
@Override
protected void onActive() {
//Log.d(TAG, "onActive()");
- loadData();
+ loadData(true);
}
/**
@@ -146,6 +148,7 @@
if(stopsFromFavorites.size() == 0){
//we don't need to call the other query
setValue(stopsDone);
+ isQueryRunning = false;
} else
for (int i = 0; i < stopsFromFavorites.size(); i++) {
Stop s = stopsFromFavorites.get(i);
diff --git a/src/it/reyboz/bustorino/data/PreferencesHolder.java b/src/it/reyboz/bustorino/data/PreferencesHolder.java
--- a/src/it/reyboz/bustorino/data/PreferencesHolder.java
+++ b/src/it/reyboz/bustorino/data/PreferencesHolder.java
@@ -23,6 +23,8 @@
import static android.content.Context.MODE_PRIVATE;
+import androidx.preference.PreferenceManager;
+
/**
* Static class for commonly used SharedPreference operations
*/
@@ -34,6 +36,10 @@
return context.getSharedPreferences(context.getString(R.string.mainSharedPreferences), MODE_PRIVATE);
}
+ public static SharedPreferences getAppPreferences(Context con){
+ return PreferenceManager.getDefaultSharedPreferences(con);
+ }
+
public static int getGtfsDBVersion(SharedPreferences pref){
return pref.getInt(PREF_GTFS_DB_VERSION,-1);
}
diff --git a/src/it/reyboz/bustorino/fragments/FavoritesFragment.java b/src/it/reyboz/bustorino/fragments/FavoritesFragment.java
--- a/src/it/reyboz/bustorino/fragments/FavoritesFragment.java
+++ b/src/it/reyboz/bustorino/fragments/FavoritesFragment.java
@@ -175,6 +175,7 @@
public void onResume() {
super.onResume();
if (mListener!=null) mListener.readyGUIfor(FragmentKind.FAVORITES);
+
}
@Override
diff --git a/src/it/reyboz/bustorino/fragments/LinesFragment.kt b/src/it/reyboz/bustorino/fragments/LinesFragment.kt
--- a/src/it/reyboz/bustorino/fragments/LinesFragment.kt
+++ b/src/it/reyboz/bustorino/fragments/LinesFragment.kt
@@ -19,6 +19,7 @@
import android.content.Context
import android.os.Bundle
+import android.os.Parcelable
import android.util.Log
import android.view.*
import android.widget.*
@@ -42,7 +43,7 @@
companion object {
fun newInstance(){
- val fragment = LinesFragment()
+ LinesFragment()
}
const val DEBUG_TAG="BusTO-LinesFragment"
const val FRAGMENT_TAG="LinesFragment"
@@ -71,7 +72,9 @@
private val linesComparator = Comparator<GtfsRoute> { a,b ->
return@Comparator linesNameSorter.compare(a.shortName, b.shortName)
}
- private var firstClick = true;
+ private var firstClick = true
+ private var recyclerViewState:Parcelable? = null
+ private var patternsSpinnerState:Parcelable? = null
private val adapterListener = object : StopAdapterListener {
override fun onTappedStop(stop: Stop?) {
@@ -98,6 +101,10 @@
}
}
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ Log.d(DEBUG_TAG, "saveInstanceState bundle: $outState")
+ }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
@@ -115,14 +122,51 @@
stopsRecyclerView.layoutManager = llManager
//allow the context menu to be opened
registerForContextMenu(stopsRecyclerView)
+ Log.d(DEBUG_TAG, "Called onCreateView for LinesFragment")
+ Log.d(DEBUG_TAG, "OnCreateView, selected line spinner pos: ${linesSpinner.selectedItemPosition}")
+ Log.d(DEBUG_TAG, "OnCreateView, selected patterns spinner pos: ${patternsSpinner.selectedItemPosition}")
+
+ //set requests
+ viewModel.routesGTTLiveData.observe(viewLifecycleOwner) {
+ setRoutes(it)
+ }
+
+ viewModel.patternsWithStopsByRouteLiveData.observe(viewLifecycleOwner){
+ patterns ->
+ run {
+ currentPatterns = patterns.sortedBy { p-> p.pattern.code }
+ //patterns. //sortedBy {-1*it.stopsIndices.size}// "${p.pattern.directionId} - ${p.pattern.headsign}" }
+ patternsAdapter?.let {
+ it.clear()
+ it.addAll(currentPatterns.map { p->"${p.pattern.directionId} - ${p.pattern.headsign}" })
+ it.notifyDataSetChanged()
+ }
+
+ val pos = patternsSpinner.selectedItemPosition
+ //might be possible that the selectedItem is different (larger than list size)
+ if(pos!= INVALID_POSITION && pos >= 0 && (pos < currentPatterns.size)){
+ val p = currentPatterns[pos]
+ Log.d(DEBUG_TAG, "Setting patterns with pos $pos and p gtfsID ${p.pattern.code}")
+ setPatternAndReqStops(currentPatterns[pos])
+ }
+
+ }
+ }
+
+ viewModel.stopsForPatternLiveData.observe(viewLifecycleOwner){stops->
+ Log.d("BusTO-LinesFragment", "Setting stops from DB")
+ setCurrentStops(stops)
+ }
if(context!=null) {
- patternsAdapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_dropdown_item, ArrayList<String>())
+ patternsAdapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item, ArrayList<String>())
patternsSpinner.adapter = patternsAdapter
- linesAdapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_dropdown_item, ArrayList<String>())
+ linesAdapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item, ArrayList<String>())
linesSpinner.adapter = linesAdapter
-
+ if (linesSpinner.onItemSelectedListener != null){
+ Log.d(DEBUG_TAG, "linesSpinner listener != null")
+ }
linesSpinner.onItemSelectedListener = object: OnItemSelectedListener{
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, pos: Int, p3: Long) {
val selRoute = currentRoutes.get(pos)
@@ -130,7 +174,7 @@
routeDescriptionTextView.text = selRoute.longName
val oldRoute = viewModel.getRouteIDQueried()
val resetSpinner = (oldRoute != null) && (oldRoute.trim() != selRoute.gtfsId.trim())
- Log.d(DEBUG_TAG, "Selected route: ${selRoute.gtfsId}, reset spinner: $resetSpinner")
+ Log.d(DEBUG_TAG, "Selected route: ${selRoute.gtfsId}, reset spinner: $resetSpinner, oldRoute: $oldRoute")
//launch query for this gtfsID
viewModel.setRouteIDQuery(selRoute.gtfsId)
//reset spinner position
@@ -170,41 +214,16 @@
override fun onResume() {
super.onResume()
mListener?.readyGUIfor(FragmentKind.LINES)
+
+ Log.d(DEBUG_TAG, "Resuming lines fragment")
+ //Log.d(DEBUG_TAG, "OnResume, selected line spinner pos: ${linesSpinner.selectedItemPosition}")
+ //Log.d(DEBUG_TAG, "OnResume, selected patterns spinner pos: ${patternsSpinner.selectedItemPosition}")
}
- override fun onActivityCreated(savedInstanceState: Bundle?) {
- super.onActivityCreated(savedInstanceState)
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(LinesViewModel::class.java)
-
- //val lines = viewModel.();
- viewModel.routesGTTLiveData.observe(this) {
- setRoutes(it)
- }
-
- viewModel.patternsWithStopsByRouteLiveData.observe(this){
- patterns ->
- run {
- currentPatterns = patterns.sortedBy { p-> p.pattern.code }
- //patterns. //sortedBy {-1*it.stopsIndices.size}// "${p.pattern.directionId} - ${p.pattern.headsign}" }
- patternsAdapter?.let {
- it.clear()
- it.addAll(currentPatterns.map { p->"${p.pattern.directionId} - ${p.pattern.headsign}" })
- it.notifyDataSetChanged()
- }
-
- val pos = patternsSpinner.selectedItemPosition
- //might be possible that the selectedItem is different (larger than list size)
- if(pos!= INVALID_POSITION && pos >= 0 && (pos < currentPatterns.size)){
- setPatternAndReqStops(currentPatterns[pos])
- }
-
- }
- }
-
- viewModel.stopsForPatternLiveData.observe(this){stops->
- Log.d("BusTO-LinesFragment", "Setting stops from DB")
- setCurrentStops(stops)
- }
+ Log.d(DEBUG_TAG, "Fragment onCreate")
}
@@ -213,11 +232,42 @@
}
private fun setRoutes(routes: List<GtfsRoute>){
+ Log.d(DEBUG_TAG, "Resetting routes")
currentRoutes = routes.sortedWith<GtfsRoute>(linesComparator)
+ if (linesAdapter!=null){
+
+ var selGtfsRoute = viewModel.getRouteIDQueried()
+ var selPatternIndex = 0
+ if(selGtfsRoute == null){
+ selGtfsRoute =""
+ }
+ val adapter = linesAdapter!!
+
+ if (adapter.isEmpty) {
+ Log.d(DEBUG_TAG, "Lines adapter is empty")
+ }
+ else{
+ adapter.clear()
+
+ }
+ adapter.addAll(currentRoutes.map { r -> r.shortName })
+ adapter.notifyDataSetChanged()
+ for(j in 0 until currentRoutes.size){
+ val route = currentRoutes[j]
+ if (route.gtfsId == selGtfsRoute) {
+ selPatternIndex = j
+ Log.d(DEBUG_TAG, "Route $selGtfsRoute has index $j")
+ }
+ }
+ linesSpinner.setSelection(selPatternIndex)
+ //
+ }
+ /*
linesAdapter?.clear()
linesAdapter?.addAll(currentRoutes.map { r -> r.shortName })
linesAdapter?.notifyDataSetChanged()
+ */
}
private fun setCurrentStops(stops: List<Stop>){
@@ -227,7 +277,7 @@
val numStops = stopsSorted.size
Log.d(DEBUG_TAG, "RecyclerView adapter is: ${stopsRecyclerView.adapter}")
- var setNewAdapter = true;
+ var setNewAdapter = true
if(stopsRecyclerView.adapter is StopRecyclerAdapter){
val adapter = stopsRecyclerView.adapter as StopRecyclerAdapter
if(adapter.stops.size == stopsSorted.size && (adapter.stops.get(0).gtfsID == stopsSorted.get(0).gtfsID)
@@ -268,10 +318,9 @@
if (v.id == R.id.patternStopsRecyclerView) {
// if we aren't attached to activity, return null
if (activity == null) return
- val inflater = activity!!.menuInflater
+ val inflater = requireActivity().menuInflater
inflater.inflate(R.menu.menu_line_item, menu)
-
}
}
@@ -292,10 +341,52 @@
mListener!!.showMapCenteredOnStop(stop)
return true
} else if (acId == R.id.action_show_arrivals){
- mListener?.requestArrivalsForStopID(stop.ID);
+ mListener?.requestArrivalsForStopID(stop.ID)
return true
}
return false
}
+ override fun onStop() {
+ super.onStop()
+ Log.d(DEBUG_TAG, "Fragment stopped")
+
+ recyclerViewState = stopsRecyclerView.layoutManager?.onSaveInstanceState()
+ patternsSpinnerState = patternsSpinner.onSaveInstanceState()
+ }
+
+
+ override fun onStart() {
+ super.onStart()
+
+ Log.d(DEBUG_TAG, "OnStart, selected line spinner pos: ${linesSpinner.selectedItemPosition}")
+ Log.d(DEBUG_TAG, "OnStart, selected patterns spinner pos: ${patternsSpinner.selectedItemPosition}")
+
+ if (recyclerViewState!=null){
+ stopsRecyclerView.layoutManager?.onRestoreInstanceState(recyclerViewState)
+ }
+ if(patternsSpinnerState!=null){
+ patternsSpinner.onRestoreInstanceState(patternsSpinnerState)
+ }
+ }
+ /*
+ override fun onDestroyView() {
+ super.onDestroyView()
+ Log.d(DEBUG_TAG, "Fragment view destroyed")
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ Log.d(DEBUG_TAG, "Fragment destroyed")
+ }
+ */
+
+ override fun onViewStateRestored(savedInstanceState: Bundle?) {
+ super.onViewStateRestored(savedInstanceState)
+ Log.d(DEBUG_TAG, "OnViewStateRes, bundled saveinstancestate: $savedInstanceState")
+ Log.d(DEBUG_TAG, "OnViewStateRes, selected line spinner pos: ${linesSpinner.selectedItemPosition}")
+ Log.d(DEBUG_TAG, "OnViewStateRes, selected patterns spinner pos: ${patternsSpinner.selectedItemPosition}")
+ }
+
}
\ No newline at end of file
diff --git a/src/it/reyboz/bustorino/fragments/LinesViewModel.kt b/src/it/reyboz/bustorino/fragments/LinesViewModel.kt
--- a/src/it/reyboz/bustorino/fragments/LinesViewModel.kt
+++ b/src/it/reyboz/bustorino/fragments/LinesViewModel.kt
@@ -19,6 +19,8 @@
//val patternsByRouteLiveData: LiveData<List<MatoPattern>>
private val routeIDToSearch = MutableLiveData<String>()
+ private var lastShownPatternStops = ArrayList<String>()
+
val stopsForPatternLiveData = MutableLiveData<List<Stop>>()
val executor = Executors.newFixedThreadPool(2)
@@ -38,9 +40,6 @@
gtfsRepo.getPatternsWithStopsForRouteID(it)
}
- val routesName: LiveData<List<String>> = Transformations.map(routesGTTLiveData) {
- it.map { route -> route.longName }
- }
fun setRouteIDQuery(routeID: String){
routeIDToSearch.value = routeID
@@ -49,9 +48,13 @@
fun getRouteIDQueried(): String?{
return routeIDToSearch.value
}
- var shouldShowMessage = true;
+ var shouldShowMessage = true
- fun requestStopsForGTFSIDs(gtfsIDs: List<String>){
+ private fun requestStopsForGTFSIDs(gtfsIDs: List<String>){
+ if (gtfsIDs.equals(lastShownPatternStops)){
+ //nothing to do
+ return
+ }
oldRepo.requestStopsWithGtfsIDs(gtfsIDs) {
if (it.isSuccess) {
stopsForPatternLiveData.postValue(it.result)
@@ -60,6 +63,9 @@
it.exception?.printStackTrace()
}
}
+ lastShownPatternStops.clear()
+ for(id in gtfsIDs)
+ lastShownPatternStops.add(id)
}
fun requestStopsForPatternWithStops(patternStops: MatoPatternWithStops){
diff --git a/src/it/reyboz/bustorino/fragments/SettingsFragment.java b/src/it/reyboz/bustorino/fragments/SettingsFragment.java
--- a/src/it/reyboz/bustorino/fragments/SettingsFragment.java
+++ b/src/it/reyboz/bustorino/fragments/SettingsFragment.java
@@ -42,6 +42,8 @@
"androidx.preference.PreferenceFragment.DIALOG";
//private static final
Handler mHandler;
+ public final static String PREF_KEY_STARTUP_SCREEN="startup_screen_to_show";
+ private boolean setSummaryStartupPref = false;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -64,7 +66,15 @@
});
*/
- //ListPreference preference = findPreference(R.string.arrival_times)
+ ListPreference startupScreenPref = findPreference(PREF_KEY_STARTUP_SCREEN);
+ if(startupScreenPref !=null){
+ if (startupScreenPref.getValue()==null){
+ startupScreenPref.setSummary(getString(R.string.nav_arrivals_text));
+ setSummaryStartupPref = true;
+ }
+ }
+
+ //Log.d("BusTO-PrefFrag","startup screen pref is "+startupScreenPref.getValue());
Preference dbUpdateNow = findPreference("pref_db_update_now");
if (dbUpdateNow!=null)
@@ -94,6 +104,10 @@
Log.d(TAG,"Preference key "+key+" changed");
//sometimes this happens
if(getContext()==null) return;
+ if(key.equals(PREF_KEY_STARTUP_SCREEN) && setSummaryStartupPref && pref !=null){
+ ListPreference listPref = (ListPreference) pref;
+ pref.setSummary(listPref.getEntry());
+ }
/*
THIS CODE STAYS COMMENTED FOR FUTURE REFERENCES
if (key.equals(getString(R.string.pref_key_num_recents))){
@@ -128,7 +142,7 @@
private void convertStringPrefToIntIfNeeded(String preferenceKey, Context con){
if (con == null) return;
- SharedPreferences defaultSharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
+ SharedPreferences defaultSharedPref = PreferenceManager.getDefaultSharedPreferences(con);
try{
Integer val = defaultSharedPref.getInt(preferenceKey, 0);

File Metadata

Mime Type
text/plain
Expires
Tue, Oct 22, 06:57 (36 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
637521
Default Alt Text
D88.1729573038.diff (33 KB)

Event Timeline