Changeset View
Changeset View
Standalone View
Standalone View
src/it/reyboz/bustorino/fragments/LinesFragment.kt
Show All 30 Lines | |||||
import it.reyboz.bustorino.adapters.NameCapitalize | import it.reyboz.bustorino.adapters.NameCapitalize | ||||
import it.reyboz.bustorino.adapters.StopAdapterListener | import it.reyboz.bustorino.adapters.StopAdapterListener | ||||
import it.reyboz.bustorino.adapters.StopRecyclerAdapter | import it.reyboz.bustorino.adapters.StopRecyclerAdapter | ||||
import it.reyboz.bustorino.backend.Stop | import it.reyboz.bustorino.backend.Stop | ||||
import it.reyboz.bustorino.data.gtfs.GtfsRoute | import it.reyboz.bustorino.data.gtfs.GtfsRoute | ||||
import it.reyboz.bustorino.data.gtfs.MatoPatternWithStops | import it.reyboz.bustorino.data.gtfs.MatoPatternWithStops | ||||
import it.reyboz.bustorino.data.gtfs.PatternStop | import it.reyboz.bustorino.data.gtfs.PatternStop | ||||
import it.reyboz.bustorino.util.LinesNameSorter | import it.reyboz.bustorino.util.LinesNameSorter | ||||
import it.reyboz.bustorino.util.PatternWithStopsSorter | |||||
class LinesFragment : ScreenBaseFragment() { | class LinesFragment : ScreenBaseFragment() { | ||||
companion object { | companion object { | ||||
fun newInstance(){ | fun newInstance(){ | ||||
val fragment = LinesFragment() | val fragment = LinesFragment() | ||||
} | } | ||||
const val DEBUG_TAG="BusTO-LinesFragment" | const val DEBUG_TAG="BusTO-LinesFragment" | ||||
const val FRAGMENT_TAG="LinesFragment" | const val FRAGMENT_TAG="LinesFragment" | ||||
val patternStopsComparator = PatternWithStopsSorter() | |||||
} | } | ||||
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 currentPatterns: List<MatoPatternWithStops> | ||||
private lateinit var currentPatternStops: List<PatternStop> | 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 | ||||
private val linesNameSorter = LinesNameSorter() | private val linesNameSorter = LinesNameSorter() | ||||
private val linesComparator = Comparator<GtfsRoute> { a,b -> | private val linesComparator = Comparator<GtfsRoute> { a,b -> | ||||
return@Comparator linesNameSorter.compare(a.shortName, b.shortName) | return@Comparator linesNameSorter.compare(a.shortName, b.shortName) | ||||
} | } | ||||
private var firstClick = true; | |||||
private val adapterListener = object : StopAdapterListener { | private val adapterListener = object : StopAdapterListener { | ||||
override fun onTappedStop(stop: Stop?) { | override fun onTappedStop(stop: Stop?) { | ||||
//var r = "" | //var r = "" | ||||
//stop?.let { r= it.stopDisplayName.toString() } | //stop?.let { r= it.stopDisplayName.toString() } | ||||
Toast.makeText(context,R.string.long_press_for_options,Toast.LENGTH_SHORT).show() | if(viewModel.shouldShowMessage) { | ||||
Toast.makeText(context, R.string.long_press_stop_4_options, Toast.LENGTH_SHORT).show() | |||||
viewModel.shouldShowMessage=false | |||||
} | |||||
stop?.let { | |||||
mListener?.requestArrivalsForStopID(it.ID) | |||||
} | |||||
if(stop == null){ | |||||
Log.e(DEBUG_TAG,"Passed wrong stop") | |||||
} | |||||
if(mListener == null){ | |||||
Log.e(DEBUG_TAG, "Listener is null") | |||||
} | |||||
} | } | ||||
override fun onLongPressOnStop(stop: Stop?): Boolean { | override fun onLongPressOnStop(stop: Stop?): Boolean { | ||||
Log.d("BusTO-LinesFrag", "LongPressOnStop") | Log.d(DEBUG_TAG, "LongPressOnStop") | ||||
return true | return true | ||||
} | } | ||||
} | } | ||||
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) | ||||
/* | |||||
Stop busStop = (Stop) parent.getItemAtPosition(position); | |||||
if(mListener!=null){ | |||||
mListener.requestArrivalsForStopID(busStop.ID); | |||||
} | |||||
}); | |||||
*/ | |||||
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) | ||||
if(context!=null) { | if(context!=null) { | ||||
patternsAdapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_dropdown_item, ArrayList<String>()) | patternsAdapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_dropdown_item, ArrayList<String>()) | ||||
patternsSpinner.adapter = patternsAdapter | patternsSpinner.adapter = patternsAdapter | ||||
linesAdapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_dropdown_item, ArrayList<String>()) | linesAdapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_dropdown_item, ArrayList<String>()) | ||||
linesSpinner.adapter = linesAdapter | linesSpinner.adapter = linesAdapter | ||||
linesSpinner.onItemSelectedListener = object: OnItemSelectedListener{ | linesSpinner.onItemSelectedListener = object: OnItemSelectedListener{ | ||||
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, pos: Int, p3: Long) { | override fun onItemSelected(p0: AdapterView<*>?, p1: View?, pos: Int, p3: Long) { | ||||
val selRoute = currentRoutes.get(pos) | val selRoute = currentRoutes.get(pos) | ||||
routeDescriptionTextView.text = selRoute.longName | 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") | |||||
//launch query for this gtfsID | |||||
viewModel.setRouteIDQuery(selRoute.gtfsId) | viewModel.setRouteIDQuery(selRoute.gtfsId) | ||||
//reset spinner position | |||||
if(resetSpinner) patternsSpinner.setSelection(0) | |||||
} | } | ||||
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 = currentPatterns.get(position) | ||||
// | |||||
setPatternAndReqStops(patternWithStops) | setPatternAndReqStops(patternWithStops) | ||||
} | } | ||||
override fun onNothingSelected(p0: AdapterView<*>?) { | override fun onNothingSelected(p0: AdapterView<*>?) { | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Show All 21 Lines | override fun onActivityCreated(savedInstanceState: Bundle?) { | ||||
//val lines = viewModel.(); | //val lines = viewModel.(); | ||||
viewModel.routesGTTLiveData.observe(this) { | viewModel.routesGTTLiveData.observe(this) { | ||||
setRoutes(it) | setRoutes(it) | ||||
} | } | ||||
viewModel.patternsWithStopsByRouteLiveData.observe(this){ | viewModel.patternsWithStopsByRouteLiveData.observe(this){ | ||||
patterns -> | patterns -> | ||||
run { | run { | ||||
currentPatterns = patterns.sortedBy { p->"${p.pattern.directionId} - ${p.pattern.headsign}" } | currentPatterns = patterns.sortedBy { p-> p.pattern.code } | ||||
//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(currentPatterns.map { p->"${p.pattern.directionId} - ${p.pattern.headsign}" }) | ||||
it.notifyDataSetChanged() | it.notifyDataSetChanged() | ||||
} | } | ||||
val pos = patternsSpinner.selectedItemPosition | val pos = patternsSpinner.selectedItemPosition | ||||
if(pos!= INVALID_POSITION){ | //might be possible that the selectedItem is different (larger than list size) | ||||
if(pos!= INVALID_POSITION && pos >= 0 && (pos < currentPatterns.size)){ | |||||
setPatternAndReqStops(currentPatterns[pos]) | setPatternAndReqStops(currentPatterns[pos]) | ||||
} | } | ||||
} | } | ||||
} | } | ||||
viewModel.stopsForPatternLiveData.observe(this){stops-> | viewModel.stopsForPatternLiveData.observe(this){stops-> | ||||
Log.d("BusTO-LinesFragment", "Setting stops from DB") | Log.d("BusTO-LinesFragment", "Setting stops from DB") | ||||
▲ Show 20 Lines • Show All 66 Lines • ▼ Show 20 Lines | override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenu.ContextMenuInfo?) { | ||||
inflater.inflate(R.menu.menu_line_item, menu) | inflater.inflate(R.menu.menu_line_item, menu) | ||||
} | } | ||||
} | } | ||||
override fun onContextItemSelected(item: MenuItem): Boolean { | override fun onContextItemSelected(item: MenuItem): Boolean { | ||||
val info = item.getMenuInfo(); | |||||
if (stopsRecyclerView.getAdapter() !is StopRecyclerAdapter) return false | if (stopsRecyclerView.getAdapter() !is StopRecyclerAdapter) return false | ||||
val adapter =stopsRecyclerView.adapter as StopRecyclerAdapter | val adapter =stopsRecyclerView.adapter as StopRecyclerAdapter | ||||
val stop = adapter.stops.get(adapter.getPosition()) | val stop = adapter.stops.get(adapter.getPosition()) | ||||
val acId = item.itemId | val acId = item.itemId | ||||
if(acId == R.id.action_view_on_map){ | if(acId == R.id.action_view_on_map){ | ||||
// view on the map | // view on the map | ||||
if ((stop.latitude == null) or (stop.longitude == null) or (mListener == null) ) { | if ((stop.latitude == null) or (stop.longitude == null) or (mListener == null) ) { | ||||
Toast.makeText(context, R.string.cannot_show_on_map_no_position, Toast.LENGTH_SHORT).show() | Toast.makeText(context, R.string.cannot_show_on_map_no_position, Toast.LENGTH_SHORT).show() | ||||
return true | return true | ||||
} | } | ||||
mListener!!.showMapCenteredOnStop(stop) | mListener!!.showMapCenteredOnStop(stop) | ||||
return true | return true | ||||
} else if (acId == R.id.action_show_arrivals){ | } else if (acId == R.id.action_show_arrivals){ | ||||
mListener?.requestArrivalsForStopID(stop.ID); | mListener?.requestArrivalsForStopID(stop.ID); | ||||
return true | return true | ||||
} | } | ||||
return false | return false | ||||
} | } | ||||
} | } | ||||
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