Page MenuHomeGitPull.it

D136.1729688282.diff
No OneTemporary

Size
100 KB
Referenced Files
None
Subscribers
None

D136.1729688282.diff

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="?colorAccent"
+ 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"
@@ -37,7 +37,9 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/tutorialTextView"
android:backgroundTint="?colorPrimaryDark"
+ android:fontFamily="@font/pitagon_semibold"
android:textColor="@color/white"
- app:layout_constraintEnd_toEndOf="@id/tutorialTextView" android:layout_marginTop="12dp"/>
+ app:layout_constraintEnd_toEndOf="@id/tutorialTextView"
+ android:layout_marginTop="18dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
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>
@@ -246,7 +249,7 @@
<![CDATA[Tutte queste funzioni si trovano nel menu laterale.<br>
Guarda nelle <b>Impostazioni</b> per personalizzare l\'app come preferisci, e su <b>Informazioni</b> per sapere di più sull\'app e il team di sviluppo.]]>
</string>
- <string name="close_tutorial">Chiudi</string>
+ <string name="close_tutorial">Capito, chiudi il tutorial</string>
</resources>
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>
@@ -281,6 +284,6 @@
<![CDATA[You can find all of this from the lateral menu.
Look in the <b>Settings</b> to customize the app behaviour, and in the <b>About the app</b> section if you want to know more about the app and the developers.]]>
</string>
- <string name="close_tutorial">Close</string>
+ <string name="close_tutorial">OK, close the tutorial</string>
</resources>

File Metadata

Mime Type
text/plain
Expires
Wed, Oct 23, 14:58 (5 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
641326
Default Alt Text
D136.1729688282.diff (100 KB)

Event Timeline