Bimba.git

commit 9350b4f6d0c5d6738d02c750262cf4599309947b

Author: Adam Pioterek <adam.pioterek@protonmail.ch>

lowFloor and tickets infos from VM on favourite

%!v(PANIC=String method: strings: negative Repeat count)


diff --git a/app/src/main/java/ml/adamsprogs/bimba/datasources/VmService.kt b/app/src/main/java/ml/adamsprogs/bimba/datasources/VmService.kt
index 3169b7e37c91bba5d727db03e85f8a23e3677185..856ad8efe316e522ee30732c26d9e02a85f0545f 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/datasources/VmService.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/datasources/VmService.kt
@@ -113,6 +113,7 @@             downloadVM(it.key)
         }
     }
 
+    @Synchronized
     private suspend fun downloadVM(stopCode: String) {
         if (!NetworkStateReceiver.isNetworkAvailable()) {
             vms[stopCode] = emptySet()
@@ -148,13 +149,13 @@                 departures[thisPlateId] = HashSet()
             val departureDay = (it["departure"].asString).split("T")[0].split("-")[2]
             val departureTime = calendarFromIso(it["departure"].asString).secondsAfterMidnight()
             var ticketMachine = Departure.TICKET_MACHINE_NONE
-            if (it.has("ticketMachine")) {
-                if (it["ticketMachine"].asBoolean)
-                    ticketMachine = Departure.TICKET_MACHINE_AUTOMAT
-            }
             if (it.has("driversTicketMachine")) {
                 if (it["driversTicketMachine"].asBoolean)
                     ticketMachine = Departure.TICKET_MACHINE_DRIVER
+            }
+            if (it.has("ticketMachine")) {
+                if (it["ticketMachine"].asBoolean)
+                    ticketMachine = Departure.TICKET_MACHINE_AUTOMAT
             }
             val lowFloor = if (it.has("lowFloorBus")) it["lowFloorBus"].asBoolean else false
             val departure = Departure(thisLine, listOf(-1), departureTime, lowFloor,




diff --git a/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouritesAdapter.kt b/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouritesAdapter.kt
index 3762d36f92937345fefd52ea89c97aa608d52b2e..1f1a1a174e5e1b149d16121b6347234d207b8a85 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouritesAdapter.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouritesAdapter.kt
@@ -16,6 +16,7 @@ import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 import ml.adamsprogs.bimba.R
 import ml.adamsprogs.bimba.collections.FavouriteStorage
+import ml.adamsprogs.bimba.models.Departure
 import ml.adamsprogs.bimba.models.Favourite
 import java.util.*
 
@@ -89,10 +90,19 @@             }
             holder.timeTextView.text = nextDepartureText
             holder.lineTextView.text = nextDepartureLineText
             if (nextDeparture != null) {
-                if (nextDeparture.vm)
+                if (nextDeparture.vm || nextDeparture.onStop)
                     holder.typeIcon.setImageDrawable(ResourcesCompat.getDrawable(appContext.resources, R.drawable.ic_departure_vm, appContext.theme))
                 else
                     holder.typeIcon.setImageDrawable(ResourcesCompat.getDrawable(appContext.resources, R.drawable.ic_departure_timetable, appContext.theme))
+                if (nextDeparture.lowFloor)
+                    holder.floorIcon.visibility = View.VISIBLE
+                if (nextDeparture.ticketMachine != Departure.TICKET_MACHINE_NONE) {
+                    holder.ticketIcon.visibility = View.VISIBLE
+                    if (nextDeparture.ticketMachine == Departure.TICKET_MACHINE_DRIVER)
+                        holder.ticketIcon.setImageDrawable(ResourcesCompat.getDrawable(appContext.resources, R.drawable.ic_ticket, appContext.theme))
+                    if (nextDeparture.ticketMachine == Departure.TICKET_MACHINE_AUTOMAT)
+                        holder.ticketIcon.setImageDrawable(ResourcesCompat.getDrawable(appContext.resources, R.drawable.ic_ticket_machine, appContext.theme))
+                }
             }
         }
     }
@@ -128,6 +138,8 @@         val timeTextView: TextView = itemView.findViewById(R.id.favourite_time)
         val lineTextView: TextView = itemView.findViewById(R.id.favourite_line)
         val moreButton: ImageView = itemView.findViewById(R.id.favourite_more_button)
         val typeIcon: ImageView = itemView.findViewById(R.id.departureTypeIcon)
+        val floorIcon: ImageView = itemView.findViewById(R.id.departureFloorIcon)
+        val ticketIcon: ImageView = itemView.findViewById(R.id.ticketMachineIcon)
 
         init {
             itemView.setOnClickListener(this)




diff --git a/app/src/main/res/drawable/ic_ticket_machine.xml b/app/src/main/res/drawable/ic_ticket_machine.xml
index eda4f0ebdc6e496fca3819318a2b8ca3464feffa..7172345b1a4d243339f0ce2c04574f476254b29e 100644
--- a/app/src/main/res/drawable/ic_ticket_machine.xml
+++ b/app/src/main/res/drawable/ic_ticket_machine.xml
@@ -4,7 +4,7 @@     android:height="24dp"
     android:viewportWidth="24"
     android:viewportHeight="24">
   <path
-      android:pathData="M5,4h14v16h-14z"
+      android:pathData="M3.25,2l17.5,0l0,20l-17.5,0z"
       android:strokeAlpha="1"
       android:strokeLineJoin="round"
       android:strokeWidth="0.93728513"
@@ -13,18 +13,18 @@       android:strokeColor="#00000000"
       android:fillAlpha="1"
       android:strokeLineCap="round"/>
   <path
-      android:pathData="m13.3687,6.4594c-1.0892,0 -1.9738,0.8846 -1.9738,1.9738 0,1.0892 0.8846,1.9738 1.9738,1.9738 0.2029,0 0.3956,-0.039 0.5798,-0.096v-0.7889c-0.0899,0.051 -0.1893,0.092 -0.3017,0.113v0.3775h-0.5259v-0.3809c-0.3374,-0.071 -0.6239,-0.2879 -0.6456,-0.6709h0.386c0.0197,0.2073 0.1614,0.3675 0.5225,0.3675 0.3868,0 0.4736,-0.193 0.4736,-0.3135 0,-0.1637 -0.0859,-0.3168 -0.5259,-0.4214 -0.4894,-0.1189 -0.8242,-0.3202 -0.8242,-0.7248 0,-0.3393 0.2742,-0.5606 0.6135,-0.6338v-0.3809h0.5259v0.386c0.1238,0.03 0.2192,0.087 0.3017,0.1534v-0.8378c-0.1843,-0.057 -0.3769,-0.096 -0.5798,-0.096zM13.3839,7.5398c-0.296,0 -0.472,0.1342 -0.472,0.3236 0,0.1658 0.1273,0.2732 0.5259,0.3759 0.1803,0.046 0.3611,0.1123 0.5107,0.2107v-0.5411h-0.1264c-0.0098,-0.2189 -0.1265,-0.3691 -0.4382,-0.3691z"
+      android:pathData="m13.7109,5.0742c-1.3615,0 -2.4673,1.1057 -2.4673,2.4672 0,1.3615 1.1057,2.4672 2.4673,2.4672 0.2537,0 0.4944,-0.0488 0.7248,-0.12l0,-0.9861c-0.1124,0.0637 -0.2367,0.115 -0.3771,0.1412l0,0.4719l-0.6574,0l0,-0.4761c-0.4218,-0.0888 -0.7798,-0.3599 -0.807,-0.8386l0.4825,0c0.0247,0.2591 0.2018,0.4594 0.6532,0.4594 0.4834,0 0.5921,-0.2413 0.5921,-0.3919 0,-0.2046 -0.1073,-0.396 -0.6574,-0.5268 -0.6117,-0.1486 -1.0303,-0.4002 -1.0303,-0.906 0,-0.4241 0.3427,-0.7007 0.7669,-0.7923l0,-0.4761l0.6574,0l0,0.4825c0.1547,0.0375 0.274,0.1088 0.3771,0.1918l0,-1.0473c-0.2304,-0.0712 -0.4711,-0.12 -0.7248,-0.12zM13.7298,6.4247c-0.37,0 -0.59,0.1678 -0.59,0.4045 0,0.2072 0.1591,0.3415 0.6574,0.4699 0.2254,0.0575 0.4514,0.1404 0.6384,0.2634l0,-0.6764l-0.158,0c-0.0123,-0.2736 -0.1581,-0.4614 -0.5478,-0.4614z"
       android:strokeWidth="0.19732159"
       android:fillColor="#000000"/>
   <path
-      android:pathData="M13.9132,5.4797h0.8348v5.9176h-0.8348z"
+      android:pathData="M14.3915,3.8496l1.0435,0l0,7.397l-1.0435,0z"
       android:strokeAlpha="1"
       android:strokeWidth="0"
       android:fillColor="#000000"
       android:strokeColor="#000000"
       android:fillAlpha="1"/>
   <path
-      android:pathData="M7.6166,13.6294h8.7667v1.6582h-8.7667z"
+      android:pathData="M6.5208,14.0367l10.9584,0l0,2.0727l-10.9584,0z"
       android:strokeAlpha="1"
       android:strokeLineJoin="round"
       android:strokeWidth="0.88379633"
@@ -33,7 +33,7 @@       android:strokeColor="#00000000"
       android:fillAlpha="1"
       android:strokeLineCap="round"/>
   <path
-      android:pathData="M5,4V20H19V4ZM6,5H18V19H6Z"
+      android:pathData="M3.25,2L3.25,22L20.75,22L20.75,2ZM4.5,3.25L19.5,3.25L19.5,20.75L4.5,20.75Z"
       android:strokeAlpha="1"
       android:strokeLineJoin="round"
       android:strokeWidth="1.00509846"
@@ -42,7 +42,7 @@       android:strokeColor="#00000000"
       android:fillAlpha="1"
       android:strokeLineCap="round"/>
   <group>
-    <clip-path android:pathData="M0,0h24v24L0,24z M 0,0"/>
+    <clip-path android:pathData="M-3,-3l30,0l0,30L-3,27z M 0,0"/>
     <path
         android:fillColor="#FF000000"
         android:pathData="m 9.8554688,14.806641 v 3.580078 c 0,0.294849 0.2422602,0.537109 0.5371092,0.537109 h 1.072266 c 0,-0.294849 0.240307,-0.537109 0.535156,-0.537109 0.294849,0 0.535156,0.24226 0.535156,0.537109 h 1.072266 c 0.29753,0 0.537109,-0.24226 0.537109,-0.537109 v -3.580078 z m 0.6699222,1.167968 H 11.0625 v 0.535157 h -0.537109 z m 1.207031,0 h 0.535156 v 0.535157 h -0.535156 z m 1.205078,0 h 0.537109 v 0.535157 H 12.9375 Z"




diff --git a/app/src/main/res/layout/row_favourite.xml b/app/src/main/res/layout/row_favourite.xml
index 9d517fa29196b630844733f97b029388999f784f..755603b55160822dfd2e436e7d0c124f4db38493 100644
--- a/app/src/main/res/layout/row_favourite.xml
+++ b/app/src/main/res/layout/row_favourite.xml
@@ -48,8 +48,8 @@                      android:id="@+id/favourite_line"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginBottom="16dp"
             android:layout_marginStart="16dp"
+            android:layout_marginBottom="16dp"
             android:text=""
             android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
             app:layout_constraintBottom_toBottomOf="parent"
@@ -62,11 +62,34 @@                      android:id="@+id/departureTypeIcon"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginBottom="16dp"
             android:layout_marginEnd="16dp"
+            android:layout_marginBottom="16dp"
             android:contentDescription="@string/departure_type_icon_description"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent" />
+
+        <ImageView
+            android:id="@+id/departureFloorIcon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="8dp"
+            android:layout_marginBottom="16dp"
+            android:contentDescription="@string/departure_floor"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toStartOf="@+id/departureTypeIcon"
+            app:srcCompat="@drawable/ic_low_floor" />
+
+        <ImageView
+            android:id="@+id/ticketMachineIcon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="8dp"
+            android:layout_marginBottom="16dp"
+            android:contentDescription="@string/ticket_machine_icon"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toStartOf="@+id/departureFloorIcon" />
 
         <ImageView
             android:id="@+id/favourite_more_button"