Page Menu
Home
GitPull.it
Search
Configure Global Search
Log In
Files
F13278800
D136.1777493850.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
98 KB
Referenced Files
None
Subscribers
None
D136.1777493850.diff
View Options
diff --git a/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt b/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt
--- a/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt
+++ b/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt
@@ -3,9 +3,11 @@
import android.content.Intent
import android.os.Bundle
import android.util.Log
+import android.util.TypedValue
import android.view.View
import android.widget.ImageButton
import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.res.ResourcesCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
@@ -21,10 +23,12 @@
private lateinit var viewPager : ViewPager2
private lateinit var btnForward: ImageButton
private lateinit var btnBackward: ImageButton
+ private lateinit var closeBottomButton: ImageButton
private var restartMain = true
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intro)
@@ -32,6 +36,7 @@
viewPager = findViewById(R.id.viewPager)
btnBackward = findViewById(R.id.btnPrevious)
btnForward = findViewById(R.id.btnNext)
+ closeBottomButton = findViewById(R.id.btnCompactClose)
val extras = intent.extras
if(extras!=null){
@@ -56,6 +61,11 @@
btnBackward.setOnClickListener {
viewPager.setCurrentItem(viewPager.currentItem-1, true)
}
+ /*closeBottomButton.setOnClickListener {
+ closeIntroduction()
+ }
+
+ */
viewPager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
@@ -67,12 +77,30 @@
}
if(position == NUM_ITEMS-1){
btnForward.visibility = View.INVISIBLE
- } else{
- btnForward.visibility = View.VISIBLE
+ closeBottomButton.visibility = View.VISIBLE
+ }else if(position == NUM_ITEMS-2){
+ if(closeBottomButton.visibility == View.VISIBLE) {
+ closeBottomButton.visibility = View.INVISIBLE
+ btnForward.visibility = View.VISIBLE
+ }
+ //btnForward.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.arrow_forward_white, null))
+ //btnForward.setBackgroundColor(ResourcesCompat.getColor(resources,R.attr.colorAccent, theme))
+ /*val
+ GET THE COLOR VALUE OF THE THEMER
+ colo = TypedValue()
+ theme.resolveAttribute(R.attr.colorAccent,colo, true)
+ btnForward.backgroundTintList //(colo.data)
+
+ */
}
}
+
})
+
+ closeBottomButton.setOnClickListener {
+ closeIntroduction()
+ }
}
diff --git a/app/src/main/java/it/reyboz/bustorino/adapters/RouteAdapter.kt b/app/src/main/java/it/reyboz/bustorino/adapters/RouteAdapter.kt
--- a/app/src/main/java/it/reyboz/bustorino/adapters/RouteAdapter.kt
+++ b/app/src/main/java/it/reyboz/bustorino/adapters/RouteAdapter.kt
@@ -11,11 +11,11 @@
import java.lang.ref.WeakReference
class RouteAdapter(val routes: List<GtfsRoute>,
- click: onItemClick,
- private val layoutId: Int = R.layout.line_title_header) :
+ click: ItemClicker,
+ private val layoutId: Int = R.layout.line_title_header) :
RecyclerView.Adapter<RouteAdapter.ViewHolder>()
{
- val clickreference: WeakReference<onItemClick>
+ val clickreference: WeakReference<ItemClicker>
init {
clickreference = WeakReference(click)
}
@@ -53,7 +53,7 @@
}
}
- fun interface onItemClick{
+ fun interface ItemClicker{
fun onRouteItemClicked(gtfsRoute: GtfsRoute)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/it/reyboz/bustorino/adapters/RouteOnlyLineAdapter.kt b/app/src/main/java/it/reyboz/bustorino/adapters/RouteOnlyLineAdapter.kt
--- a/app/src/main/java/it/reyboz/bustorino/adapters/RouteOnlyLineAdapter.kt
+++ b/app/src/main/java/it/reyboz/bustorino/adapters/RouteOnlyLineAdapter.kt
@@ -7,10 +7,18 @@
import androidx.recyclerview.widget.RecyclerView
import it.reyboz.bustorino.R
import it.reyboz.bustorino.backend.Palina
+import java.lang.ref.WeakReference
-class RouteOnlyLineAdapter (val routeNames: List<String>) :
+class RouteOnlyLineAdapter (val routeNames: List<String>,
+ onItemClick: OnClick?) :
RecyclerView.Adapter<RouteOnlyLineAdapter.ViewHolder>() {
+
+ private val clickreference: WeakReference<OnClick>?
+ init {
+ clickreference = if(onItemClick!=null) WeakReference(onItemClick) else null
+ }
+
/**
* Provide a reference to the type of views that you are using
* (custom ViewHolder)
@@ -23,7 +31,7 @@
textView = view.findViewById(R.id.routeBallID)
}
}
- constructor(palina: Palina, showOnlyEmpty: Boolean): this(palina.routesNamesWithNoPassages)
+ constructor(palina: Palina, showOnlyEmpty: Boolean): this(palina.routesNamesWithNoPassages, null)
// Create new views (invoked by the layout manager)
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
@@ -40,9 +48,15 @@
// Get element from your dataset at this position and replace the
// contents of the view with that element
viewHolder.textView.text = routeNames[position]
+ viewHolder.itemView.setOnClickListener{
+ clickreference?.get()?.onItemClick(position, routeNames[position])
+ }
}
// Return the size of your dataset (invoked by the layout manager)
override fun getItemCount() = routeNames.size
+ fun interface OnClick{
+ fun onItemClick(index: Int, name: String)
+ }
}
diff --git a/app/src/main/java/it/reyboz/bustorino/data/GtfsRepository.kt b/app/src/main/java/it/reyboz/bustorino/data/GtfsRepository.kt
--- a/app/src/main/java/it/reyboz/bustorino/data/GtfsRepository.kt
+++ b/app/src/main/java/it/reyboz/bustorino/data/GtfsRepository.kt
@@ -35,4 +35,8 @@
fun getAllRoutes(): LiveData<List<GtfsRoute>>{
return gtfsDao.getAllRoutes()
}
+
+ fun getRouteFromGtfsId(gtfsId: String): LiveData<GtfsRoute>{
+ return gtfsDao.getRouteByGtfsID(gtfsId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/it/reyboz/bustorino/data/PreferencesHolder.java b/app/src/main/java/it/reyboz/bustorino/data/PreferencesHolder.java
--- a/app/src/main/java/it/reyboz/bustorino/data/PreferencesHolder.java
+++ b/app/src/main/java/it/reyboz/bustorino/data/PreferencesHolder.java
@@ -19,12 +19,16 @@
import android.content.Context;
import android.content.SharedPreferences;
+import android.util.Log;
import it.reyboz.bustorino.R;
import static android.content.Context.MODE_PRIVATE;
import androidx.preference.PreferenceManager;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* Static class for commonly used SharedPreference operations
*/
@@ -33,6 +37,8 @@
public static final String PREF_GTFS_DB_VERSION = "gtfs_db_version";
public static final String PREF_INTRO_ACTIVITY_RUN ="pref_intro_activity_run";
+ public static final String PREF_FAVORITE_LINES = "pref_favorite_lines";
+
public static SharedPreferences getMainSharedPreferences(Context context){
return context.getSharedPreferences(context.getString(R.string.mainSharedPreferences), MODE_PRIVATE);
}
@@ -59,4 +65,27 @@
final SharedPreferences pref = getMainSharedPreferences(con);
return pref.getBoolean(PREF_INTRO_ACTIVITY_RUN, false);
}
+
+ public static boolean addOrRemoveLineToFavorites(Context con, String gtfsLineId, boolean addToFavorites){
+ final SharedPreferences pref = getMainSharedPreferences(con);
+ final HashSet<String> favorites = new HashSet<>(pref.getStringSet(PREF_FAVORITE_LINES, new HashSet<>()));
+ boolean modified = true;
+ if(addToFavorites)
+ favorites.add(gtfsLineId);
+ else if(favorites.contains(gtfsLineId))
+ favorites.remove(gtfsLineId);
+ else
+ modified = false; // we are not changing anything
+ if(modified) {
+ final SharedPreferences.Editor editor = pref.edit();
+ editor.putStringSet(PREF_FAVORITE_LINES, favorites);
+ editor.apply();
+ }
+ return modified;
+ }
+
+ public static HashSet<String> getFavoritesLinesGtfsIDs(Context con){
+ final SharedPreferences pref = getMainSharedPreferences(con);
+ return new HashSet<>(pref.getStringSet(PREF_FAVORITE_LINES, new HashSet<>()));
+ }
}
diff --git a/app/src/main/java/it/reyboz/bustorino/data/gtfs/GtfsDBDao.kt b/app/src/main/java/it/reyboz/bustorino/data/gtfs/GtfsDBDao.kt
--- a/app/src/main/java/it/reyboz/bustorino/data/gtfs/GtfsDBDao.kt
+++ b/app/src/main/java/it/reyboz/bustorino/data/gtfs/GtfsDBDao.kt
@@ -26,8 +26,8 @@
@Query("SELECT * FROM "+GtfsRoute.DB_TABLE)
fun getAllRoutes() : LiveData<List<GtfsRoute>>
- @Query("SELECT * FROM ${GtfsRoute.DB_TABLE} WHERE ${GtfsRoute.COL_ROUTE_ID} IN (:routeGtfsIds)")
- fun getRoutesByIDs(routeGtfsIds: List<String>): LiveData<List<GtfsRoute>>
+ @Query("SELECT * FROM ${GtfsRoute.DB_TABLE} WHERE ${GtfsRoute.COL_ROUTE_ID} LIKE :gtfsId")
+ fun getRouteByGtfsID(gtfsId: String) : LiveData<GtfsRoute>
@Query("SELECT "+GtfsTrip.COL_TRIP_ID+" FROM "+GtfsTrip.DB_TABLE)
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/ArrivalsFragment.java b/app/src/main/java/it/reyboz/bustorino/fragments/ArrivalsFragment.java
--- a/app/src/main/java/it/reyboz/bustorino/fragments/ArrivalsFragment.java
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/ArrivalsFragment.java
@@ -409,7 +409,7 @@
final ArrayList<String> routesWithNoPassages = lastUpdatedPalina.getRoutesNamesWithNoPassages();
Collections.sort(routesWithNoPassages, new LinesNameSorter());
- noArrivalsAdapter = new RouteOnlyLineAdapter(routesWithNoPassages);
+ noArrivalsAdapter = new RouteOnlyLineAdapter(routesWithNoPassages, null);
if(noArrivalsRecyclerView!=null){
noArrivalsRecyclerView.setAdapter(noArrivalsAdapter);
//hide the views if there are no empty routes
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/IntroFragment.kt b/app/src/main/java/it/reyboz/bustorino/fragments/IntroFragment.kt
--- a/app/src/main/java/it/reyboz/bustorino/fragments/IntroFragment.kt
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/IntroFragment.kt
@@ -9,6 +9,7 @@
import android.view.View
import android.view.ViewGroup
import android.widget.Button
+import android.widget.ImageButton
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.Fragment
@@ -33,6 +34,7 @@
private lateinit var textView: TextView
+
private lateinit var listener: IntroListener
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -88,6 +90,7 @@
6-> {
setImageBitmap(imageHolder,R.drawable.tuto_menu)
setTextHtmlDescription(R.string.tutorial_menu)
+ //this is the cheapest trick ever lol
val closeButton = root.findViewById<Button>(R.id.closeAllButton)
closeButton.visibility = View.VISIBLE
closeButton.setOnClickListener {
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/LinesDetailFragment.kt b/app/src/main/java/it/reyboz/bustorino/fragments/LinesDetailFragment.kt
--- a/app/src/main/java/it/reyboz/bustorino/fragments/LinesDetailFragment.kt
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/LinesDetailFragment.kt
@@ -20,6 +20,7 @@
import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.content.Context
+import android.content.SharedPreferences
import android.graphics.Paint
import android.os.Bundle
import android.util.Log
@@ -45,6 +46,7 @@
import it.reyboz.bustorino.backend.gtfs.PolylineParser
import it.reyboz.bustorino.backend.utils
import it.reyboz.bustorino.data.MatoTripsDownloadWorker
+import it.reyboz.bustorino.data.PreferencesHolder
import it.reyboz.bustorino.data.gtfs.MatoPattern
import it.reyboz.bustorino.data.gtfs.MatoPatternWithStops
import it.reyboz.bustorino.data.gtfs.TripAndPatternWithStops
@@ -67,7 +69,7 @@
class LinesDetailFragment() : ScreenBaseFragment() {
- private lateinit var lineID: String
+ private var lineID = ""
private lateinit var patternsSpinner: Spinner
private var patternsAdapter: ArrayAdapter<String>? = null
@@ -83,7 +85,31 @@
private var firstInit = true
private var pausedFragment = false
private lateinit var switchButton: ImageButton
+
+ private var favoritesButton: ImageButton? = null
+ private var isLineInFavorite = false
+ private val lineSharedPrefMonitor = SharedPreferences.OnSharedPreferenceChangeListener { pref, keychanged ->
+ if(keychanged!=PreferencesHolder.PREF_FAVORITE_LINES || lineID.isEmpty()) return@OnSharedPreferenceChangeListener
+ val newFavorites = pref.getStringSet(PreferencesHolder.PREF_FAVORITE_LINES, HashSet())
+ newFavorites?.let {
+ isLineInFavorite = it.contains(lineID)
+ //if the button has been intialized, change the icon accordingly
+ favoritesButton?.let { button->
+ if(isLineInFavorite) {
+ button.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_star_filled, null))
+ Toast.makeText(context,R.string.favorites_line_add,Toast.LENGTH_SHORT).show()
+ } else {
+ button.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_star_outline, null))
+ Toast.makeText(context,R.string.favorites_line_remove,Toast.LENGTH_SHORT).show()
+ }
+
+
+ }
+ }
+ }
+
private lateinit var stopsRecyclerView: RecyclerView
+ private lateinit var descripTextView: TextView
//adapter for recyclerView
private val stopAdapterListener= object : StopAdapterListener {
override fun onTappedStop(stop: Stop?) {
@@ -93,7 +119,7 @@
viewModel.shouldShowMessage=false
}
stop?.let {
- fragmentListener?.requestArrivalsForStopID(it.ID)
+ fragmentListener.requestArrivalsForStopID(it.ID)
}
if(stop == null){
Log.e(DEBUG_TAG,"Passed wrong stop")
@@ -142,12 +168,27 @@
val rootView = inflater.inflate(R.layout.fragment_lines_detail, container, false)
lineID = requireArguments().getString(LINEID_KEY, "")
switchButton = rootView.findViewById(R.id.switchImageButton)
+ favoritesButton = rootView.findViewById(R.id.favoritesButton)
stopsRecyclerView = rootView.findViewById(R.id.patternStopsRecyclerView)
+ descripTextView = rootView.findViewById(R.id.lineDescripTextView)
+ descripTextView.visibility = View.INVISIBLE
val titleTextView = rootView.findViewById<TextView>(R.id.titleTextView)
-
titleTextView.text = getString(R.string.line)+" "+GtfsUtils.getLineNameFromGtfsID(lineID)
+ favoritesButton?.isClickable = true
+ favoritesButton?.setOnClickListener {
+ if(lineID.isNotEmpty())
+ PreferencesHolder.addOrRemoveLineToFavorites(requireContext(),lineID,!isLineInFavorite)
+ }
+ val preferences = PreferencesHolder.getMainSharedPreferences(requireContext())
+ val favorites = preferences.getStringSet(PreferencesHolder.PREF_FAVORITE_LINES, HashSet())
+ if(favorites!=null && favorites.contains(lineID)){
+ favoritesButton?.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_star_filled, null))
+ isLineInFavorite = true
+ }
+ preferences.registerOnSharedPreferenceChangeListener(lineSharedPrefMonitor)
+
patternsSpinner = rootView.findViewById(R.id.patternsSpinner)
patternsAdapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item, ArrayList<String>())
patternsSpinner.adapter = patternsAdapter
@@ -195,6 +236,10 @@
showStopsAsList(stops)
}
}
+ viewModel.gtfsRoute.observe(viewLifecycleOwner){route->
+ descripTextView.text = route.longName
+ descripTextView.visibility = View.VISIBLE
+ }
if(pausedFragment && viewModel.selectedPatternLiveData.value!=null){
val patt = viewModel.selectedPatternLiveData.value!!
Log.d(DEBUG_TAG, "Recreating views on resume, setting pattern: ${patt.pattern.code}")
@@ -310,7 +355,7 @@
// add ability to zoom with 2 fingers
it.setMultiTouchControls(true)
- it.minZoomLevel = 11.0
+ it.minZoomLevel = 12.0
//map controller setup
val mapController = it.controller
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/LinesGridShowingFragment.kt b/app/src/main/java/it/reyboz/bustorino/fragments/LinesGridShowingFragment.kt
--- a/app/src/main/java/it/reyboz/bustorino/fragments/LinesGridShowingFragment.kt
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/LinesGridShowingFragment.kt
@@ -15,7 +15,9 @@
import androidx.recyclerview.widget.RecyclerView
import it.reyboz.bustorino.R
import it.reyboz.bustorino.adapters.RouteAdapter
+import it.reyboz.bustorino.adapters.RouteOnlyLineAdapter
import it.reyboz.bustorino.backend.utils
+import it.reyboz.bustorino.data.PreferencesHolder
import it.reyboz.bustorino.data.gtfs.GtfsRoute
import it.reyboz.bustorino.middleware.AutoFitGridLayoutManager
import it.reyboz.bustorino.util.LinesNameSorter
@@ -29,11 +31,12 @@
private val viewModel: LinesGridShowingViewModel by viewModels()
//private lateinit var gridLayoutManager: AutoFitGridLayoutManager
-
+ private lateinit var favoritesRecyclerView: RecyclerView
private lateinit var urbanRecyclerView: RecyclerView
private lateinit var extraurbanRecyclerView: RecyclerView
private lateinit var touristRecyclerView: RecyclerView
+ private lateinit var favoritesTitle: TextView
private lateinit var urbanLinesTitle: TextView
private lateinit var extrurbanLinesTitle: TextView
private lateinit var touristLinesTitle: TextView
@@ -53,7 +56,7 @@
return@Comparator linesNameSorter.compare(a.shortName, b.shortName)
}
- private val routeClickListener = RouteAdapter.onItemClick {
+ private val routeClickListener = RouteAdapter.ItemClicker {
fragmentListener.showLineOnMap(it.gtfsId)
}
private val arrows = HashMap<String, ImageView>()
@@ -66,10 +69,12 @@
): View? {
val rootView = inflater.inflate(R.layout.fragment_lines_grid, container, false)
+ favoritesRecyclerView = rootView.findViewById(R.id.favoritesRecyclerView)
urbanRecyclerView = rootView.findViewById(R.id.urbanLinesRecyclerView)
extraurbanRecyclerView = rootView.findViewById(R.id.extraurbanLinesRecyclerView)
touristRecyclerView = rootView.findViewById(R.id.touristLinesRecyclerView)
+ favoritesTitle = rootView.findViewById(R.id.favoritesTitleView)
urbanLinesTitle = rootView.findViewById(R.id.urbanLinesTitleView)
extrurbanLinesTitle = rootView.findViewById(R.id.extraurbanLinesTitleView)
touristLinesTitle = rootView.findViewById(R.id.touristLinesTitleView)
@@ -77,6 +82,7 @@
arrows[AG_URBAN] = rootView.findViewById(R.id.arrowUrb)
arrows[AG_TOUR] = rootView.findViewById(R.id.arrowTourist)
arrows[AG_EXTRAURB] = rootView.findViewById(R.id.arrowExtraurban)
+ arrows[AG_FAV] = rootView.findViewById(R.id.arrowFavorites)
//show urban expanded by default
val recViews = listOf(urbanRecyclerView, extraurbanRecyclerView, touristRecyclerView)
@@ -87,6 +93,13 @@
)
recyView.layoutManager = gridLayoutManager
}
+ //init favorites recyclerview
+ val gridLayoutManager = AutoFitGridLayoutManager(
+ requireContext().applicationContext,
+ (utils.convertDipToPixels(context, 70f)).toInt()
+ )
+ favoritesRecyclerView.layoutManager = gridLayoutManager
+
viewModel.routesLiveData.observe(viewLifecycleOwner){
//routesList = ArrayList(it)
@@ -116,6 +129,15 @@
}
}
+ viewModel.favoritesLines.observe(viewLifecycleOwner){ routes->
+ val routesNames = routes.map { it.shortName }
+ //create new item click listener every time
+ val adapter = RouteOnlyLineAdapter(routesNames){ pos, _ ->
+ val r = routes[pos]
+ fragmentListener.showLineOnMap(r.gtfsId)
+ }
+ favoritesRecyclerView.adapter = adapter
+ }
//onClicks
urbanLinesTitle.setOnClickListener {
@@ -127,14 +149,33 @@
touristLinesTitle.setOnClickListener {
openLinesAndCloseOthersIfNeeded(AG_TOUR)
}
+ favoritesTitle.setOnClickListener {
+ closeOpenFavorites()
+ }
+ arrows[AG_FAV]?.setOnClickListener {
+ closeOpenFavorites()
+ }
//arrows onClicks
- for(k in arrows.keys){
+ for(k in Companion.AGENCIES){
//k is either AG_TOUR, AG_EXTRAURBAN, AG_URBAN
arrows[k]?.setOnClickListener { openLinesAndCloseOthersIfNeeded(k) }
}
+
return rootView
}
+ private fun closeOpenFavorites(){
+ if(favoritesRecyclerView.visibility == View.VISIBLE){
+ //close it
+ favoritesRecyclerView.visibility = View.GONE
+ setOpen(arrows[AG_FAV]!!, false)
+ viewModel.favoritesExpanded.value = false
+ } else{
+ favoritesRecyclerView.visibility = View.VISIBLE
+ setOpen(arrows[AG_FAV]!!, true)
+ viewModel.favoritesExpanded.value = true
+ }
+ }
private fun openLinesAndCloseOthersIfNeeded(agency: String){
if(openRecyclerView!="" && openRecyclerView!= agency) {
@@ -205,6 +246,20 @@
override fun onResume() {
super.onResume()
+ val pref = PreferencesHolder.getMainSharedPreferences(requireContext())
+ val res = pref.getStringSet(PreferencesHolder.PREF_FAVORITE_LINES, HashSet())
+ res?.let { viewModel.setFavoritesLinesIDs(HashSet(it))}
+ //restore state
+ viewModel.favoritesExpanded.value?.let {
+ if(!it){
+ //close it
+ favoritesRecyclerView.visibility = View.GONE
+ setOpen(arrows[AG_FAV]!!, false)
+ } else{
+ favoritesRecyclerView.visibility = View.VISIBLE
+ setOpen(arrows[AG_FAV]!!, true)
+ }
+ }
viewModel.isUrbanExpanded.value?.let {
if(it) {
urbanRecyclerView.visibility = View.VISIBLE
@@ -246,6 +301,7 @@
companion object {
private const val COLUMN_WIDTH_DP=200
+ private const val AG_FAV = "fav"
private const val AG_URBAN = "gtt:U"
private const val AG_EXTRAURB ="gtt:E"
private const val AG_TOUR ="gtt:T"
diff --git a/app/src/main/java/it/reyboz/bustorino/viewmodels/LinesGridShowingViewModel.kt b/app/src/main/java/it/reyboz/bustorino/viewmodels/LinesGridShowingViewModel.kt
--- a/app/src/main/java/it/reyboz/bustorino/viewmodels/LinesGridShowingViewModel.kt
+++ b/app/src/main/java/it/reyboz/bustorino/viewmodels/LinesGridShowingViewModel.kt
@@ -4,10 +4,11 @@
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
+import androidx.lifecycle.map
import it.reyboz.bustorino.data.GtfsRepository
-import it.reyboz.bustorino.data.NextGenDB
-import it.reyboz.bustorino.data.OldDataRepository
import it.reyboz.bustorino.data.gtfs.GtfsDatabase
+import it.reyboz.bustorino.data.gtfs.GtfsRoute
+import it.reyboz.bustorino.util.LinesNameSorter
class LinesGridShowingViewModel(application: Application) : AndroidViewModel(application) {
@@ -24,4 +25,27 @@
val isUrbanExpanded = MutableLiveData(true)
val isExtraUrbanExpanded = MutableLiveData(false)
val isTouristExpanded = MutableLiveData(false)
+ val favoritesExpanded = MutableLiveData(true)
+
+ val favoritesLinesIDs = MutableLiveData<HashSet<String>>()
+
+ private val linesNameSorter = LinesNameSorter()
+ private val linesComparator = Comparator<GtfsRoute> { a,b ->
+ return@Comparator linesNameSorter.compare(a.shortName, b.shortName)
+ }
+
+ fun setFavoritesLinesIDs(linesIds: HashSet<String>){
+ favoritesLinesIDs.value = linesIds
+ }
+
+ val favoritesLines = favoritesLinesIDs.map {lineIds ->
+ val linesList = ArrayList<GtfsRoute>()
+ if (lineIds.size == 0 || routesLiveData.value==null) return@map linesList
+ for(line in routesLiveData.value!!){
+ if(lineIds.contains(line.gtfsId))
+ linesList.add(line)
+ }
+ linesList.sortWith(linesComparator)
+ return@map linesList
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/it/reyboz/bustorino/viewmodels/LinesViewModel.kt b/app/src/main/java/it/reyboz/bustorino/viewmodels/LinesViewModel.kt
--- a/app/src/main/java/it/reyboz/bustorino/viewmodels/LinesViewModel.kt
+++ b/app/src/main/java/it/reyboz/bustorino/viewmodels/LinesViewModel.kt
@@ -52,6 +52,9 @@
gtfsRepo.getPatternsWithStopsForRouteID(it)
}
+ val gtfsRoute = routeIDToSearch.switchMap {
+ gtfsRepo.getRouteFromGtfsId(it)
+ }
fun setRouteIDQuery(routeID: String){
diff --git a/app/src/main/res/drawable-it-xhdpi/tuto_menu.webp b/app/src/main/res/drawable-it-xhdpi/tuto_menu.webp
index b59f82a74bdda235defb34c5f8d4b96349229be1..ed396e370caf5543c38a3147ac83b01f3009b50d
GIT binary patch
literal 14980
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
G0Qg_}Czk#I
literal 9318
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
MjFZEEzak+23lcm_ivR!s
diff --git a/app/src/main/res/drawable-xhdpi/tuto_menu.webp b/app/src/main/res/drawable-xhdpi/tuto_menu.webp
index 2354e373779f709328e2841d89b36056f1e5ce47..8d0dc2fa5f9953445882f884ac876f417f2b693e
GIT binary patch
literal 14280
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
D*9bj(
literal 9126
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
OS8Hwn0Lf<n;C}&2R@7$z
diff --git a/app/src/main/res/drawable/close_white_large.xml b/app/src/main/res/drawable/close_white_large.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/drawable/close_white_large.xml
@@ -0,0 +1,5 @@
+<vector android:height="32dp"
+ android:viewportHeight="24" android:viewportWidth="24"
+ android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="@color/white" android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_star_filled.xml b/app/src/main/res/drawable/ic_star_filled.xml
--- a/app/src/main/res/drawable/ic_star_filled.xml
+++ b/app/src/main/res/drawable/ic_star_filled.xml
@@ -1,6 +1,6 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
+ android:width="28dp"
+ android:height="28dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
diff --git a/app/src/main/res/drawable/ic_star_outline.xml b/app/src/main/res/drawable/ic_star_outline.xml
--- a/app/src/main/res/drawable/ic_star_outline.xml
+++ b/app/src/main/res/drawable/ic_star_outline.xml
@@ -1,6 +1,6 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
+ android:width="28dp"
+ android:height="28dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
diff --git a/app/src/main/res/layout/activity_intro.xml b/app/src/main/res/layout/activity_intro.xml
--- a/app/src/main/res/layout/activity_intro.xml
+++ b/app/src/main/res/layout/activity_intro.xml
@@ -26,6 +26,17 @@
android:contentDescription="@string/next"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent"/>
+
+ <ImageButton
+ android:src="@drawable/close_white_large"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:id="@+id/btnCompactClose"
+ android:backgroundTint="@color/red_dark"
+ android:textColor="@color/white"
+ app:circularflow_radiusInDP="5dp"
+ android:contentDescription="@string/next"
+ android:visibility="gone"
+ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent"/>
<androidx.viewpager2.widget.ViewPager2
android:layout_width="0dp"
android:layout_height="0dp"
diff --git a/app/src/main/res/layout/fragment_intro.xml b/app/src/main/res/layout/fragment_intro.xml
--- a/app/src/main/res/layout/fragment_intro.xml
+++ b/app/src/main/res/layout/fragment_intro.xml
@@ -20,7 +20,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/tutorialTextView"
app:layout_constraintTop_toBottomOf="@+id/image_tutorial"
- android:layout_marginTop="60dp"
+ android:layout_marginTop="30dp"
android:maxWidth="280dp"
android:textSize="18sp"
android:textAlignment="center"
diff --git a/app/src/main/res/layout/fragment_lines_detail.xml b/app/src/main/res/layout/fragment_lines_detail.xml
--- a/app/src/main/res/layout/fragment_lines_detail.xml
+++ b/app/src/main/res/layout/fragment_lines_detail.xml
@@ -20,18 +20,58 @@
android:layout_marginTop="8dp" android:gravity="center_horizontal|center_vertical"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp" android:layout_marginEnd="8dp"/>
+ <ImageButton
+ android:src="@drawable/ic_list_30"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:id="@+id/switchImageButton"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintRight_toRightOf="parent"
+ android:layout_margin="6dp"
+ android:backgroundTint="@color/blue_620"
+ />
+ <androidx.cardview.widget.CardView
+ android:layout_width="wrap_content" android:layout_height="30dp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@id/switchImageButton"
+ app:layout_constraintBottom_toBottomOf="@id/switchImageButton"
+ android:id="@+id/starCardView"
+ android:layout_marginStart="10dp"
+ android:minHeight="20sp"
+ android:elevation="10dp"
+ android:padding="5dp">
+ <ImageButton
+ android:id="@+id/favoritesButton"
+ android:layout_width="45dp"
+ android:layout_height="match_parent"
+ android:layout_gravity="end"
+ android:background="@android:color/transparent"
+ android:foreground="?attr/selectableItemBackground"
+ app:srcCompat="@drawable/ic_star_outline"
+ tools:ignore="OnClick"/>
+ </androidx.cardview.widget.CardView>
+ <TextView
+ android:text="DCCII"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:id="@+id/lineDescripTextView"
+ app:layout_constraintTop_toBottomOf="@id/titleTextView"
+ app:layout_constraintLeft_toLeftOf="@id/titleTextView"
+ app:layout_constraintRight_toRightOf="@id/titleTextView"
+ android:textColor="@color/grey_700"
+ android:textSize="16sp"
+ android:maxWidth="300sp"
+ android:layout_marginTop="8dp"/>
<Spinner
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/patternsSpinner"
- app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/routeDescrTextView"
- android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/titleTextView"
+ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/headingToTextView"
+ android:layout_marginTop="4dp" app:layout_constraintTop_toBottomOf="@+id/lineDescripTextView"
android:layout_marginStart="4dp"/>
<TextView
android:text="@string/direction_duep"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:id="@+id/routeDescrTextView"
+ android:id="@+id/headingToTextView"
app:layout_constraintStart_toStartOf="parent"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textColor="?android:attr/textColorPrimary"
@@ -79,16 +119,7 @@
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
/>-->
- <ImageButton
- android:src="@drawable/ic_list_30"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:id="@+id/switchImageButton"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintBottom_toTopOf="@id/patternsSpinner"
- android:layout_margin="6dp"
- android:backgroundTint="@color/blue_500"
- />
+
<View
android:id="@+id/divider"
diff --git a/app/src/main/res/layout/fragment_lines_grid.xml b/app/src/main/res/layout/fragment_lines_grid.xml
--- a/app/src/main/res/layout/fragment_lines_grid.xml
+++ b/app/src/main/res/layout/fragment_lines_grid.xml
@@ -15,6 +15,44 @@
android:layout_width="match_parent" android:layout_height="match_parent"
android:animateLayoutChanges="true"
>
+ <ImageView
+ android:src="@drawable/baseline_chevron_right_24"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:id="@+id/arrowFavorites"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintBottom_toBottomOf="@id/favoritesTitleView"
+ android:layout_margin="4dp"
+ android:layout_marginStart="16dp"
+ android:rotation="90"
+ />
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/favorites_lines"
+ android:textAppearance="@style/TextAppearance.AppCompat.Body2"
+ android:textSize="@dimen/subtitle_size"
+ android:layout_margin="4dp"
+ android:textColor="@color/black_900"
+ android:gravity="center"
+ android:id="@+id/favoritesTitleView"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintLeft_toRightOf="@id/arrowFavorites"
+ app:layout_constraintBottom_toTopOf="@id/favoritesRecyclerView"
+ android:layout_marginLeft="6dp"
+ app:layout_constraintVertical_bias="0.0"
+ app:layout_constraintVertical_chainStyle="packed"/>
+ <androidx.recyclerview.widget.RecyclerView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/favoritesRecyclerView"
+ android:layout_marginLeft="20dp"
+ android:layout_marginRight="20dp"
+ android:visibility="visible"
+ app:layout_constraintTop_toBottomOf="@id/favoritesTitleView"
+ app:layout_constraintBottom_toTopOf="@id/urbanLinesTitleView"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintVertical_bias="0.0"
+
+ />
<ImageView
android:src="@drawable/baseline_chevron_right_24"
android:layout_width="wrap_content"
@@ -34,12 +72,12 @@
android:textColor="@color/black_900"
android:gravity="center"
android:id="@+id/urbanLinesTitleView"
- app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/favoritesRecyclerView"
app:layout_constraintLeft_toRightOf="@id/arrowUrb"
app:layout_constraintBottom_toTopOf="@id/urbanLinesRecyclerView"
android:layout_marginLeft="6dp"
app:layout_constraintVertical_bias="0.0"
- app:layout_constraintVertical_chainStyle="packed"/>
+ />
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="0dp"
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -211,12 +211,15 @@
<string name="pref_shown_startup_def_desc">Tocca per cambiare</string>
<string name="positions_source_pref_title">Fonte posizioni in tempo reale di bus e tram</string>
-
<array name="positions_source_sel">
<item>MaTO (aggiornate più spesso, può non funzionare)</item>
<item>GTFS RT (più stabile)</item>
</array>
+ <string name="favorites_line_add">Linea aggiunta ai preferiti</string>
+ <string name="favorites_line_remove">Linea rimossa dai preferiti</string>
+ <string name="favorites_lines">Preferite</string>
+
<!-- lines -->
<string name="long_press_stop_4_options">Tocca a lungo la fermata per le opzioni</string>
<string name="remove_all_trips">Rimuovi tutti i trip GTFS</string>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -39,7 +39,7 @@
<string name="extraurban_lines">Extra urban lines</string>
<string name="turist_lines">Tourist lines</string>
- <string name="direction_duep">Heading to:</string>
+ <string name="direction_duep">Destination:</string>
<string name="lines_fill">Lines: %1$s</string>
<string name="line_fill">Line: %1$s</string>
<string name="no_passages">No timetable found</string>
@@ -55,6 +55,9 @@
<string name="action_author">Meet the author</string>
<string name="added_in_favorites">Bus stop is now in your favorites</string>
<string name="removed_from_favorites">Bus stop removed from your favorites</string>
+ <string name="favorites_line_add">Added line to favorites</string>
+ <string name="favorites_line_remove">Remove line from favorites</string>
+ <string name="favorites_lines">Favorites</string>
<string name="action_favorites">Favorites</string>
<string name="title_activity_favorites">Favorites</string>
<string name="title_activity_map">Map</string>
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Apr 29, 22:17 (5 h, 31 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1882446
Default Alt Text
D136.1777493850.diff (98 KB)
Attached To
Mode
D136: Add possibility to add line to favorites
Attached
Detach File
Event Timeline
Log In to Comment