ref: fruchtfleisch
app/src/main/java/xyz/apiote/bimba/czwek/repo/Vehicle.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
package xyz.apiote.bimba.czwek.repo import android.content.Context import xyz.apiote.bimba.czwek.R import xyz.apiote.bimba.czwek.api.CongestionLevelV1 import xyz.apiote.bimba.czwek.api.OccupancyStatusV1 import xyz.apiote.bimba.czwek.api.VehicleV1 import xyz.apiote.bimba.czwek.api.VehicleV2 enum class CongestionLevel { UNKNOWN, SMOOTH, STOP_AND_GO, SIGNIFICANT, SEVERE; fun toString(context: Context): String { return when (this) { UNKNOWN -> context.getString(R.string.congestion_unknown) SMOOTH -> context.getString(R.string.congestion_smooth) STOP_AND_GO -> context.getString(R.string.congestion_stop_and_go) SIGNIFICANT -> context.getString(R.string.congestion_congestion) SEVERE -> context.getString(R.string.congestion_jams) } } companion object { fun of(type: CongestionLevelV1): CongestionLevel { return when (type) { CongestionLevelV1.UNKNOWN -> valueOf("UNKNOWN") CongestionLevelV1.SMOOTH -> valueOf("SMOOTH") CongestionLevelV1.STOP_AND_GO -> valueOf("STOP_AND_GO") CongestionLevelV1.SIGNIFICANT -> valueOf("SIGNIFICANT") CongestionLevelV1.SEVERE -> valueOf("SEVERE") } } } } enum class OccupancyStatus { UNKNOWN, EMPTY, MANY_AVAILABLE, FEW_AVAILABLE, STANDING_ONLY, CRUSHED, FULL, NOT_ACCEPTING; fun toString(context: Context):String { return when (this) { UNKNOWN -> context.getString(R.string.occupancy_unknown) EMPTY -> context.getString(R.string.occupancy_empty) MANY_AVAILABLE -> context.getString(R.string.occupancy_many_seats) FEW_AVAILABLE -> context.getString(R.string.occupancy_few_seats) STANDING_ONLY -> context.getString(R.string.occupancy_standing_only) CRUSHED -> context.getString(R.string.occupancy_crowded) FULL -> context.getString(R.string.occupancy_full) NOT_ACCEPTING -> context.getString(R.string.occupancy_wont_let) } } companion object { fun of(type: OccupancyStatusV1): OccupancyStatus { return when (type) { OccupancyStatusV1.UNKNOWN -> valueOf("UNKNOWN") OccupancyStatusV1.EMPTY -> valueOf("EMPTY") OccupancyStatusV1.MANY_AVAILABLE -> valueOf("MANY_AVAILABLE") OccupancyStatusV1.FEW_AVAILABLE -> valueOf("FEW_AVAILABLE") OccupancyStatusV1.STANDING_ONLY -> valueOf("STANDING_ONLY") OccupancyStatusV1.CRUSHED -> valueOf("CRUSHED") OccupancyStatusV1.FULL -> valueOf("FULL") OccupancyStatusV1.NOT_ACCEPTING -> valueOf("NOT_ACCEPTING") } } } } data class Vehicle( val ID: String, val Position: Position, val Capabilities: UShort, val Speed: Float, val Line: LineStub, val Headsign: String, val congestionLevel: CongestionLevel, val occupancyStatus: OccupancyStatus ) : Locatable { constructor(v: VehicleV1) : this( v.ID, Position(v.Position), v.Capabilities, v.Speed, LineStub(v.Line), v.Headsign, CongestionLevel.of(v.CongestionLevel), OccupancyStatus.of(v.OccupancyStatus) ) constructor(v: VehicleV2) : this( v.ID, Position(v.Position), v.Capabilities, v.Speed, LineStub(v.Line), v.Headsign, CongestionLevel.of(v.CongestionLevel), OccupancyStatus.of(v.OccupancyStatus) ) enum class Capability(val bit: UShort) { RAMP(0b0001u), LOW_FLOOR(0b0010u), LOW_ENTRY(0b0001_0000_0000u), AC(0b0100u), BIKE(0b1000u), VOICE( 0b0001_0000u ), TICKET_MACHINE(0b0010_0000u), TICKET_DRIVER(0b0100_0000u), USB_CHARGING(0b1000_0000u) } override fun icon(context: Context, scale: Float) = Line.icon(context, scale) override fun location(): Position = Position override fun id(): String = ID fun congestion(context: Context) = congestionLevel.toString(context) fun occupancy(context: Context)= occupancyStatus.toString(context) fun getCapability(field: Capability): Boolean { return Capabilities.and(field.bit) != (0).toUShort() } } |