Changeset View
Changeset View
Standalone View
Standalone View
src/it/reyboz/bustorino/fragments/LinesFragment.kt
Show First 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | class LinesFragment : ScreenBaseFragment() { | ||||
private lateinit var viewModel: LinesViewModel | private lateinit var viewModel: LinesViewModel | ||||
private lateinit var linesSpinner: Spinner | private lateinit var linesSpinner: Spinner | ||||
private lateinit var patternsSpinner: Spinner | private lateinit var patternsSpinner: Spinner | ||||
private lateinit var currentRoutes: List<GtfsRoute> | private lateinit var currentRoutes: List<GtfsRoute> | ||||
private lateinit var currentPatterns: List<MatoPatternWithStops> | private lateinit var selectedPatterns: List<MatoPatternWithStops> | ||||
private lateinit var currentPatternStops: List<PatternStop> | |||||
private lateinit var routeDescriptionTextView: TextView | private lateinit var routeDescriptionTextView: TextView | ||||
private lateinit var stopsRecyclerView: RecyclerView | private lateinit var stopsRecyclerView: RecyclerView | ||||
private var linesAdapter: ArrayAdapter<String>? = null | private var linesAdapter: ArrayAdapter<String>? = null | ||||
private var patternsAdapter: ArrayAdapter<String>? = null | private var patternsAdapter: ArrayAdapter<String>? = null | ||||
private var mListener: CommonFragmentListener? = null | private var mListener: CommonFragmentListener? = null | ||||
Show All 27 Lines | private val adapterListener = object : StopAdapterListener { | ||||
override fun onLongPressOnStop(stop: Stop?): Boolean { | override fun onLongPressOnStop(stop: Stop?): Boolean { | ||||
Log.d(DEBUG_TAG, "LongPressOnStop") | Log.d(DEBUG_TAG, "LongPressOnStop") | ||||
return true | return true | ||||
} | } | ||||
} | } | ||||
override fun onSaveInstanceState(outState: Bundle) { | override fun onSaveInstanceState(outState: Bundle) { | ||||
super.onSaveInstanceState(outState) | super.onSaveInstanceState(outState) | ||||
Log.d(DEBUG_TAG, "saveInstanceState bundle: $outState") | Log.d(DEBUG_TAG, "saveInstanceState bundle: $outState") | ||||
} | } | ||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, | override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, | ||||
savedInstanceState: Bundle?): View? { | savedInstanceState: Bundle?): View? { | ||||
val rootView = inflater.inflate(R.layout.fragment_lines, container, false) | val rootView = inflater.inflate(R.layout.fragment_lines, container, false) | ||||
linesSpinner = rootView.findViewById(R.id.linesSpinner) | linesSpinner = rootView.findViewById(R.id.linesSpinner) | ||||
patternsSpinner = rootView.findViewById(R.id.patternsSpinner) | patternsSpinner = rootView.findViewById(R.id.patternsSpinner) | ||||
routeDescriptionTextView = rootView.findViewById(R.id.routeDescriptionTextView) | routeDescriptionTextView = rootView.findViewById(R.id.routeDescriptionTextView) | ||||
stopsRecyclerView = rootView.findViewById(R.id.patternStopsRecyclerView) | stopsRecyclerView = rootView.findViewById(R.id.patternStopsRecyclerView) | ||||
val llManager = LinearLayoutManager(context) | val llManager = LinearLayoutManager(context) | ||||
llManager.orientation = LinearLayoutManager.VERTICAL | llManager.orientation = LinearLayoutManager.VERTICAL | ||||
stopsRecyclerView.layoutManager = llManager | stopsRecyclerView.layoutManager = llManager | ||||
//allow the context menu to be opened | //allow the context menu to be opened | ||||
registerForContextMenu(stopsRecyclerView) | registerForContextMenu(stopsRecyclerView) | ||||
Log.d(DEBUG_TAG, "Called onCreateView for LinesFragment") | 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 line spinner pos: ${linesSpinner.selectedItemPosition}") | ||||
Log.d(DEBUG_TAG, "OnCreateView, selected patterns spinner pos: ${patternsSpinner.selectedItemPosition}") | Log.d(DEBUG_TAG, "OnCreateView, selected patterns spinner pos: ${patternsSpinner.selectedItemPosition}") | ||||
//set requests | //set requests | ||||
viewModel.routesGTTLiveData.observe(viewLifecycleOwner) { | viewModel.routesGTTLiveData.observe(viewLifecycleOwner) { | ||||
setRoutes(it) | setRoutes(it) | ||||
} | } | ||||
viewModel.patternsWithStopsByRouteLiveData.observe(viewLifecycleOwner){ | viewModel.patternsWithStopsByRouteLiveData.observe(viewLifecycleOwner){ | ||||
patterns -> | patterns -> | ||||
run { | run { | ||||
currentPatterns = patterns.sortedBy { p-> p.pattern.code } | selectedPatterns = patterns.sortedBy { p-> p.pattern.code } | ||||
//patterns. //sortedBy {-1*it.stopsIndices.size}// "${p.pattern.directionId} - ${p.pattern.headsign}" } | //patterns. //sortedBy {-1*it.stopsIndices.size}// "${p.pattern.directionId} - ${p.pattern.headsign}" } | ||||
patternsAdapter?.let { | patternsAdapter?.let { | ||||
it.clear() | it.clear() | ||||
it.addAll(currentPatterns.map { p->"${p.pattern.directionId} - ${p.pattern.headsign}" }) | it.addAll(selectedPatterns.map { p->"${p.pattern.directionId} - ${p.pattern.headsign}" }) | ||||
it.notifyDataSetChanged() | it.notifyDataSetChanged() | ||||
} | } | ||||
viewModel.selectedPatternLiveData.value?.let { | |||||
setSelectedPattern(it) | |||||
} | |||||
val pos = patternsSpinner.selectedItemPosition | val pos = patternsSpinner.selectedItemPosition | ||||
//might be possible that the selectedItem is different (larger than list size) | //might be possible that the selectedItem is different (larger than list size) | ||||
if(pos!= INVALID_POSITION && pos >= 0 && (pos < currentPatterns.size)){ | if(pos!= INVALID_POSITION && pos >= 0 && (pos < selectedPatterns.size)){ | ||||
val p = currentPatterns[pos] | val p = selectedPatterns[pos] | ||||
Log.d(DEBUG_TAG, "Setting patterns with pos $pos and p gtfsID ${p.pattern.code}") | Log.d(DEBUG_TAG, "Setting patterns with pos $pos and p gtfsID ${p.pattern.code}") | ||||
setPatternAndReqStops(currentPatterns[pos]) | setPatternAndReqStops(selectedPatterns[pos]) | ||||
} | } | ||||
} | } | ||||
} | } | ||||
viewModel.stopsForPatternLiveData.observe(viewLifecycleOwner){stops-> | viewModel.stopsForPatternLiveData.observe(viewLifecycleOwner){stops-> | ||||
Log.d("BusTO-LinesFragment", "Setting stops from DB") | Log.d("BusTO-LinesFragment", "Setting stops from DB") | ||||
setCurrentStops(stops) | setCurrentStops(stops) | ||||
Show All 26 Lines | override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, | ||||
override fun onNothingSelected(p0: AdapterView<*>?) { | override fun onNothingSelected(p0: AdapterView<*>?) { | ||||
} | } | ||||
} | } | ||||
patternsSpinner.onItemSelectedListener = object : OnItemSelectedListener{ | patternsSpinner.onItemSelectedListener = object : OnItemSelectedListener{ | ||||
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, position: Int, p3: Long) { | override fun onItemSelected(p0: AdapterView<*>?, p1: View?, position: Int, p3: Long) { | ||||
val patternWithStops = currentPatterns.get(position) | val patternWithStops = selectedPatterns.get(position) | ||||
// | // | ||||
setPatternAndReqStops(patternWithStops) | setPatternAndReqStops(patternWithStops) | ||||
//viewModel.currentPositionInPatterns.value = position | |||||
} | } | ||||
override fun onNothingSelected(p0: AdapterView<*>?) { | override fun onNothingSelected(p0: AdapterView<*>?) { | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Show All 23 Lines | override fun onCreate(savedInstanceState: Bundle?) { | ||||
Log.d(DEBUG_TAG, "Fragment onCreate") | Log.d(DEBUG_TAG, "Fragment onCreate") | ||||
} | } | ||||
override fun getBaseViewForSnackBar(): View? { | override fun getBaseViewForSnackBar(): View? { | ||||
return null | return null | ||||
} | } | ||||
private fun setSelectedPattern(patternWs: MatoPatternWithStops){ | |||||
Log.d(DEBUG_TAG, "Finding pattern to show: ${patternWs.pattern.code}") | |||||
var pos = -2 | |||||
val code = patternWs.pattern.code.trim() | |||||
for(k in selectedPatterns.indices){ | |||||
if(selectedPatterns[k].pattern.code.trim() == code){ | |||||
pos = k | |||||
break | |||||
} | |||||
} | |||||
Log.d(DEBUG_TAG, "Found pattern $code in position: $pos") | |||||
if(pos>=0){ | |||||
patternsSpinner.setSelection(pos) | |||||
} | |||||
} | |||||
private fun setRoutes(routes: List<GtfsRoute>){ | private fun setRoutes(routes: List<GtfsRoute>){ | ||||
Log.d(DEBUG_TAG, "Resetting routes") | Log.d(DEBUG_TAG, "Resetting routes") | ||||
currentRoutes = routes.sortedWith<GtfsRoute>(linesComparator) | currentRoutes = routes.sortedWith<GtfsRoute>(linesComparator) | ||||
if (linesAdapter!=null){ | if (linesAdapter!=null){ | ||||
var selGtfsRoute = viewModel.getRouteIDQueried() | var selGtfsRoute = viewModel.getRouteIDQueried() | ||||
var selPatternIndex = 0 | var selRouteIdx = 0 | ||||
if(selGtfsRoute == null){ | if(selGtfsRoute == null){ | ||||
selGtfsRoute ="" | selGtfsRoute ="" | ||||
} | } | ||||
Log.d(DEBUG_TAG, "Setting routes, selected route gtfsID: $selGtfsRoute") | |||||
val adapter = linesAdapter!! | val adapter = linesAdapter!! | ||||
if (adapter.isEmpty) { | if (adapter.isEmpty) { | ||||
Log.d(DEBUG_TAG, "Lines adapter is empty") | Log.d(DEBUG_TAG, "Lines adapter is empty") | ||||
} | } | ||||
else{ | else{ | ||||
adapter.clear() | adapter.clear() | ||||
} | } | ||||
adapter.addAll(currentRoutes.map { r -> r.shortName }) | adapter.addAll(currentRoutes.map { r -> r.shortName }) | ||||
adapter.notifyDataSetChanged() | adapter.notifyDataSetChanged() | ||||
for(j in 0 until currentRoutes.size){ | for(j in currentRoutes.indices){ | ||||
val route = currentRoutes[j] | val route = currentRoutes[j] | ||||
if (route.gtfsId == selGtfsRoute) { | if (route.gtfsId == selGtfsRoute) { | ||||
selPatternIndex = j | selRouteIdx = j | ||||
Log.d(DEBUG_TAG, "Route $selGtfsRoute has index $j") | Log.d(DEBUG_TAG, "Route $selGtfsRoute has index $j") | ||||
} | } | ||||
} | } | ||||
linesSpinner.setSelection(selPatternIndex) | linesSpinner.setSelection(selRouteIdx) | ||||
// | // | ||||
} | } | ||||
/* | /* | ||||
linesAdapter?.clear() | linesAdapter?.clear() | ||||
linesAdapter?.addAll(currentRoutes.map { r -> r.shortName }) | linesAdapter?.addAll(currentRoutes.map { r -> r.shortName }) | ||||
linesAdapter?.notifyDataSetChanged() | linesAdapter?.notifyDataSetChanged() | ||||
*/ | */ | ||||
} | } | ||||
private fun setCurrentStops(stops: List<Stop>){ | private fun setCurrentStops(stops: List<Stop>){ | ||||
val orderBy = currentPatternStops.withIndex().associate{it.value.stopGtfsId to it.index} | Log.d(DEBUG_TAG, "Setting stops from: "+viewModel.currentPatternStops.value) | ||||
val orderBy = viewModel.currentPatternStops.value!!.withIndex().associate{it.value.stopGtfsId to it.index} | |||||
val stopsSorted = stops.sortedBy { s -> orderBy[s.gtfsID] } | val stopsSorted = stops.sortedBy { s -> orderBy[s.gtfsID] } | ||||
val numStops = stopsSorted.size | val numStops = stopsSorted.size | ||||
Log.d(DEBUG_TAG, "RecyclerView adapter is: ${stopsRecyclerView.adapter}") | Log.d(DEBUG_TAG, "RecyclerView adapter is: ${stopsRecyclerView.adapter}") | ||||
var setNewAdapter = true | var setNewAdapter = true | ||||
if(stopsRecyclerView.adapter is StopRecyclerAdapter){ | if(stopsRecyclerView.adapter is StopRecyclerAdapter){ | ||||
val adapter = stopsRecyclerView.adapter as StopRecyclerAdapter | val adapter = stopsRecyclerView.adapter as StopRecyclerAdapter | ||||
if(adapter.stops.size == stopsSorted.size && (adapter.stops.get(0).gtfsID == stopsSorted.get(0).gtfsID) | if(adapter.stops.size == stopsSorted.size && (adapter.stops.get(0).gtfsID == stopsSorted.get(0).gtfsID) | ||||
Show All 12 Lines | private fun setCurrentStops(stops: List<Stop>){ | ||||
if(setNewAdapter){ | if(setNewAdapter){ | ||||
stopsRecyclerView.adapter = StopRecyclerAdapter( | stopsRecyclerView.adapter = StopRecyclerAdapter( | ||||
stopsSorted, adapterListener, StopRecyclerAdapter.Use.LINES, | stopsSorted, adapterListener, StopRecyclerAdapter.Use.LINES, | ||||
NameCapitalize.FIRST | NameCapitalize.FIRST | ||||
) | ) | ||||
} | } | ||||
} | } | ||||
private fun setPatternAndReqStops(patternWithStops: MatoPatternWithStops){ | private fun setPatternAndReqStops(patternWithStops: MatoPatternWithStops){ | ||||
Log.d(DEBUG_TAG, "Requesting stops for pattern ${patternWithStops.pattern.code}") | Log.d(DEBUG_TAG, "Requesting stops for pattern ${patternWithStops.pattern.code}") | ||||
currentPatternStops = patternWithStops.stopsIndices.sortedBy { i-> i.order } | //currentPatternStops = patternWithStops.stopsIndices.sortedBy { i-> i.order } | ||||
viewModel.currentPatternStops.value = patternWithStops.stopsIndices.sortedBy { i-> i.order } | |||||
viewModel.selectedPatternLiveData.value = patternWithStops | |||||
viewModel.requestStopsForPatternWithStops(patternWithStops) | viewModel.requestStopsForPatternWithStops(patternWithStops) | ||||
} | } | ||||
override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenu.ContextMenuInfo?) { | override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenu.ContextMenuInfo?) { | ||||
super.onCreateContextMenu(menu, v, menuInfo) | super.onCreateContextMenu(menu, v, menuInfo) | ||||
Log.d("BusTO-LinesFragment", "Creating context menu ") | Log.d("BusTO-LinesFragment", "Creating context menu ") | ||||
▲ Show 20 Lines • Show All 67 Lines • ▼ Show 20 Lines | class LinesFragment : ScreenBaseFragment() { | ||||
override fun onViewStateRestored(savedInstanceState: Bundle?) { | override fun onViewStateRestored(savedInstanceState: Bundle?) { | ||||
super.onViewStateRestored(savedInstanceState) | super.onViewStateRestored(savedInstanceState) | ||||
Log.d(DEBUG_TAG, "OnViewStateRes, bundled saveinstancestate: $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 line spinner pos: ${linesSpinner.selectedItemPosition}") | ||||
Log.d(DEBUG_TAG, "OnViewStateRes, selected patterns spinner pos: ${patternsSpinner.selectedItemPosition}") | Log.d(DEBUG_TAG, "OnViewStateRes, selected patterns spinner pos: ${patternsSpinner.selectedItemPosition}") | ||||
} | } | ||||
} | } | ||||
No newline at end of file | No newline at end of file |
Public contents are in Creative Commons Attribution-ShareAlike 4.0 (CC-BY-SA) or GNU Free Documentation License (at your option) unless otherwise noted. · Contact / Register