Page Menu
Home
GitPull.it
Search
Configure Global Search
Log In
Files
F2441429
D88.1729573038.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
33 KB
Referenced Files
None
Subscribers
None
D88.1729573038.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D88: Allow setting the first screen to show on app startup
Attached
Detach File
Event Timeline
Log In to Comment