├── .github
└── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── .gitignore
├── .idea
├── codeStyles
│ ├── Project.xml
│ └── codeStyleConfig.xml
├── copyright
│ └── Apache_2_0.xml
├── gradle.xml
├── jarRepositories.xml
└── runConfigurations
│ └── app_community.xml
├── CONTRIBUTING.md
├── LICENSE
├── MAINTAINERS.md
├── README.md
├── ROADMAP.md
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── modules
├── app-community
│ ├── build.gradle
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── de
│ │ │ └── deutschebahn
│ │ │ └── bahnhoflive
│ │ │ └── community
│ │ │ └── CommunityApplication.kt
│ │ └── res
│ │ └── values
│ │ └── config_strings.xml
└── core
│ ├── .gitignore
│ ├── build.gradle
│ ├── multidex-config.pro
│ ├── proguard-rules.pro
│ └── src
│ ├── debug
│ └── res
│ │ └── values
│ │ └── strings.xml
│ ├── main
│ ├── AndroidManifest.xml
│ ├── assets
│ │ ├── 3rdparty.html
│ │ ├── lizenzen.html
│ │ ├── opening_hours+deps.min.js
│ │ └── osm_opening_hours.html
│ ├── java
│ │ └── de
│ │ │ └── deutschebahn
│ │ │ └── bahnhoflive
│ │ │ ├── BaseActivity.kt
│ │ │ ├── BaseApplication.kt
│ │ │ ├── IconMapper.java
│ │ │ ├── MarkerFilterable.java
│ │ │ ├── analytics
│ │ │ ├── ConsentState.kt
│ │ │ ├── IssueTracker.kt
│ │ │ ├── SentryIssueTracker.kt
│ │ │ ├── StationTrackingManager.java
│ │ │ ├── TaloTracing.kt
│ │ │ ├── Trackable.java
│ │ │ ├── TrackingDelegate.kt
│ │ │ ├── TrackingHttpStack.java
│ │ │ ├── TrackingManager.kt
│ │ │ └── UncriticalIssueException.kt
│ │ │ ├── backend
│ │ │ ├── BaseJsonArrayRequest.java
│ │ │ ├── BaseJsonObjectRequest.java
│ │ │ ├── BaseRequest.kt
│ │ │ ├── BaseRestListener.java
│ │ │ ├── CappingHttpStack.java
│ │ │ ├── CoroutineResultRestListener.kt
│ │ │ ├── Countable.java
│ │ │ ├── CountingHttpStack.java
│ │ │ ├── DefaultAppRetryPolicy.kt
│ │ │ ├── DetailedVolleyError.kt
│ │ │ ├── ForcedCacheEntryFactory.java
│ │ │ ├── FrequencyCap.java
│ │ │ ├── GsonRequest.java
│ │ │ ├── GsonResponseParser.java
│ │ │ ├── GsonTypeResponseParser.java
│ │ │ ├── HafasStopX.kt
│ │ │ ├── HttpStackDecorator.java
│ │ │ ├── LoadListener.java
│ │ │ ├── LoggingHttpStack.java
│ │ │ ├── RequestCounter.java
│ │ │ ├── RequestX.kt
│ │ │ ├── RestConstants.java
│ │ │ ├── RestErrorListener.java
│ │ │ ├── RestHelper.java
│ │ │ ├── RestHelperX.kt
│ │ │ ├── RestListener.kt
│ │ │ ├── SingleRequestRestListener.java
│ │ │ ├── StopPlaceX.kt
│ │ │ ├── TroubleSimulator.java
│ │ │ ├── VolleyRestListener.kt
│ │ │ ├── VolleyX.kt
│ │ │ ├── db
│ │ │ │ ├── DbAuthorizationTool.kt
│ │ │ │ ├── DbRequest.kt
│ │ │ │ ├── MultiHeaderDbAuthorizationTool.kt
│ │ │ │ ├── ZoneId.kt
│ │ │ │ ├── fasta2
│ │ │ │ │ ├── FacilityEquipmentStatusRequest.kt
│ │ │ │ │ ├── FacilityStatusRequest.java
│ │ │ │ │ ├── Fasta2Request.java
│ │ │ │ │ ├── FastaConstants.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ └── FacilityStatus.java
│ │ │ │ ├── newsapi
│ │ │ │ │ ├── GroupId.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── Group.kt
│ │ │ │ │ │ ├── News.kt
│ │ │ │ │ │ ├── NewsResponse.kt
│ │ │ │ │ │ └── OptionalData.kt
│ │ │ │ ├── parkinginformation
│ │ │ │ │ ├── JSONParkingCapacityConverter.kt
│ │ │ │ │ ├── JSONParkingFacilityConverter.kt
│ │ │ │ │ ├── ParkingCapacityRequest.kt
│ │ │ │ │ ├── ParkingFacilitiesRequest.kt
│ │ │ │ │ ├── ParkingFacilityConstants.java
│ │ │ │ │ ├── ParkingInformationRequest.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── Address.kt
│ │ │ │ │ │ └── Allocation.kt
│ │ │ │ ├── publictrainstation
│ │ │ │ │ ├── DistanceCalculator.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── Address.kt
│ │ │ │ │ │ ├── Availability.kt
│ │ │ │ │ │ ├── AvailabilityEntry.kt
│ │ │ │ │ │ ├── Constants.kt
│ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ ├── EmbeddedStopPlacesList.kt
│ │ │ │ │ │ ├── EmbeddedTravelCenter.kt
│ │ │ │ │ │ ├── Identifier.kt
│ │ │ │ │ │ ├── Link.kt
│ │ │ │ │ │ ├── Location.kt
│ │ │ │ │ │ ├── Neighbour.kt
│ │ │ │ │ │ ├── StopPlace.kt
│ │ │ │ │ │ ├── StopPlaceEmbeddings.kt
│ │ │ │ │ │ ├── StopPlacesPage.kt
│ │ │ │ │ │ └── TripleSCenter.kt
│ │ │ │ └── ris
│ │ │ │ │ ├── RISJourneysByRelationRequest.kt
│ │ │ │ │ ├── RISJourneysEventbasedRequest.kt
│ │ │ │ │ ├── RISJourneysRequest.kt
│ │ │ │ │ ├── RISPlatformsRequest.kt
│ │ │ │ │ ├── RISStationsLocalServicesRequest.kt
│ │ │ │ │ ├── RISStationsRequest.kt
│ │ │ │ │ ├── RISStationsStationEquipmentsRequest.kt
│ │ │ │ │ ├── RISStationsStationEquipmentsResponseParser.kt
│ │ │ │ │ ├── RISStationsStationRequest.kt
│ │ │ │ │ ├── RISStationsStopPlacesGroupRequest.kt
│ │ │ │ │ ├── RISStationsStopPlacesRequest.kt
│ │ │ │ │ ├── RISStationsStopPlacesRequestByEvaId.kt
│ │ │ │ │ ├── RISTransportsAdminWagonOrderRequest.kt
│ │ │ │ │ ├── RISTransportsRequest.kt
│ │ │ │ │ ├── locker
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── EquipmentLocker.kt
│ │ │ │ │ │ ├── EquipmentLockers.kt
│ │ │ │ │ │ ├── Locker.kt
│ │ │ │ │ │ ├── LockerDimension.kt
│ │ │ │ │ │ └── LockerFee.kt
│ │ │ │ │ └── model
│ │ │ │ │ ├── AccessibilityStatus.kt
│ │ │ │ │ ├── AddressWithWeb.kt
│ │ │ │ │ ├── ArrivalDepartureEvent.kt
│ │ │ │ │ ├── Contact.kt
│ │ │ │ │ ├── Coordinate2D.kt
│ │ │ │ │ ├── DepartureMatch.kt
│ │ │ │ │ ├── DepartureMatches.kt
│ │ │ │ │ ├── EventType.kt
│ │ │ │ │ ├── ExcludedStadaIds.kt
│ │ │ │ │ ├── JourneyEventBased.kt
│ │ │ │ │ ├── LocalService.kt
│ │ │ │ │ ├── LocalServices.kt
│ │ │ │ │ ├── PhoneNumber.kt
│ │ │ │ │ ├── PhoneNumberType.kt
│ │ │ │ │ ├── Platform.kt
│ │ │ │ │ ├── RISStation.kt
│ │ │ │ │ ├── StationCategory.kt
│ │ │ │ │ ├── StationShort.kt
│ │ │ │ │ ├── StopPlace.kt
│ │ │ │ │ ├── StopPlaceName.kt
│ │ │ │ │ ├── StopPlaces.kt
│ │ │ │ │ ├── TimeType.kt
│ │ │ │ │ └── TransportType.kt
│ │ │ ├── einkaufsbahnhof
│ │ │ │ └── model
│ │ │ │ │ ├── ExtraFields.java
│ │ │ │ │ ├── LocalizedVenue.java
│ │ │ │ │ ├── LocalizedVenueCategory.java
│ │ │ │ │ ├── OpeningTime.java
│ │ │ │ │ ├── Station.java
│ │ │ │ │ ├── StationList.java
│ │ │ │ │ ├── StationResponse.java
│ │ │ │ │ └── Store.java
│ │ │ ├── hafas
│ │ │ │ ├── Filter.java
│ │ │ │ ├── HafasDepartures.kt
│ │ │ │ ├── HafasRequest.kt
│ │ │ │ ├── LimitingFilter.java
│ │ │ │ ├── LocalTransportFilter.java
│ │ │ │ └── model
│ │ │ │ │ ├── HafasDetail.java
│ │ │ │ │ ├── HafasDetailReference.kt
│ │ │ │ │ ├── HafasEvent.kt
│ │ │ │ │ ├── HafasEventProduct.java
│ │ │ │ │ ├── HafasNote.java
│ │ │ │ │ ├── HafasNotes.java
│ │ │ │ │ ├── HafasStation.kt
│ │ │ │ │ ├── HafasStationProduct.java
│ │ │ │ │ ├── HafasStop.kt
│ │ │ │ │ ├── HafasTimetable.java
│ │ │ │ │ ├── ProductCategory.java
│ │ │ │ │ └── StopExtId.java
│ │ │ ├── local
│ │ │ │ └── model
│ │ │ │ │ ├── ComplaintableStation.kt
│ │ │ │ │ ├── DailyOpeningHours.kt
│ │ │ │ │ ├── EcoStation.kt
│ │ │ │ │ ├── EvaIds.java
│ │ │ │ │ ├── OpeningHour.kt
│ │ │ │ │ ├── RrtPoint.kt
│ │ │ │ │ ├── ServiceContent.kt
│ │ │ │ │ ├── ServiceContentType.java
│ │ │ │ │ └── TimeRange.java
│ │ │ ├── rimap
│ │ │ │ ├── RimapConfig.java
│ │ │ │ └── model
│ │ │ │ │ ├── LevelMapping.kt
│ │ │ │ │ ├── MenuMapping.kt
│ │ │ │ │ ├── OpeningTime.kt
│ │ │ │ │ ├── RimapPOI.kt
│ │ │ │ │ ├── RimapRrtPoint.kt
│ │ │ │ │ ├── RimapRrtPointsResponse.kt
│ │ │ │ │ ├── RimapStation.kt
│ │ │ │ │ ├── RimapStationInfo.java
│ │ │ │ │ ├── StationFeature.java
│ │ │ │ │ ├── StationFeatureCollection.java
│ │ │ │ │ └── StationProperties.java
│ │ │ ├── ris
│ │ │ │ ├── CurrentHourTool.kt
│ │ │ │ └── model
│ │ │ │ │ ├── Message.java
│ │ │ │ │ ├── RISTimetable.java
│ │ │ │ │ ├── RimapMessageCodes.kt
│ │ │ │ │ ├── TrainEvent.java
│ │ │ │ │ ├── TrainInfo.java
│ │ │ │ │ └── TrainMovementInfo.java
│ │ │ └── wagenstand
│ │ │ │ ├── WagenstandAlarm.java
│ │ │ │ ├── WagenstandAlarmManager.java
│ │ │ │ ├── WagenstandDataMergeFactory.java
│ │ │ │ ├── WagenstandRequestManager.kt
│ │ │ │ ├── istwr
│ │ │ │ ├── RepositoryConverter.kt
│ │ │ │ └── model
│ │ │ │ │ ├── RisAdminWagonOrders.kt
│ │ │ │ │ ├── WagenstandAllFahrzeugData.java
│ │ │ │ │ ├── WagenstandAllFahrzeugausstattungData.java
│ │ │ │ │ ├── WagenstandAllSectorData.java
│ │ │ │ │ ├── WagenstandDataData.java
│ │ │ │ │ ├── WagenstandFahrzeugData.java
│ │ │ │ │ ├── WagenstandHaltData.java
│ │ │ │ │ ├── WagenstandIstInformationData.java
│ │ │ │ │ ├── WagenstandIstResponseData.java
│ │ │ │ │ ├── WagenstandMetaData.java
│ │ │ │ │ ├── WagenstandPositionAmGleisData.java
│ │ │ │ │ └── WagenstandPositionAmhaltData.java
│ │ │ │ ├── models
│ │ │ │ ├── FeatureStatus.java
│ │ │ │ ├── Status.java
│ │ │ │ ├── Track.java
│ │ │ │ ├── WaggonFeature.java
│ │ │ │ └── WaggonFeatureLabelTemplate.java
│ │ │ │ └── receiver
│ │ │ │ └── WagenstandAlarmReceiver.java
│ │ │ ├── debug
│ │ │ ├── BhfLiveUtilHandler.kt
│ │ │ ├── InMemoryDbProvider.kt
│ │ │ └── InMemoryDbProviderInterface.kt
│ │ │ ├── location
│ │ │ ├── BaseLocationListener.java
│ │ │ ├── GPSLocationManager.java
│ │ │ └── LocationSmoother.java
│ │ │ ├── model
│ │ │ └── parking
│ │ │ │ ├── Capacity.kt
│ │ │ │ ├── Duration.kt
│ │ │ │ ├── FeatureTag.kt
│ │ │ │ ├── LiveCapacity.kt
│ │ │ │ ├── ParkingFacility.kt
│ │ │ │ ├── ParkingStatus.kt
│ │ │ │ └── Price.kt
│ │ │ ├── permission
│ │ │ └── Permission.kt
│ │ │ ├── persistence
│ │ │ ├── EvaIdsJsonDeserializer.java
│ │ │ ├── FavoriteStationsStore.java
│ │ │ ├── HafasStationItemAdapter.java
│ │ │ ├── InternalStationItemAdapter.java
│ │ │ ├── LegacyHafasStationItemAdapter.java
│ │ │ ├── RecentContentQueriesStore.kt
│ │ │ └── RecentSearchesStore.kt
│ │ │ ├── push
│ │ │ ├── FacilityFirebaseService.kt
│ │ │ ├── FacilityPushManager.kt
│ │ │ └── NotificationChannelManager.kt
│ │ │ ├── repository
│ │ │ ├── ApplicationServices.kt
│ │ │ ├── AssetDocumentBroker.kt
│ │ │ ├── DbCompanionRepository.kt
│ │ │ ├── ElevatorsResource.java
│ │ │ ├── EvaIdsProvider.kt
│ │ │ ├── FontRepository.kt
│ │ │ ├── HafasStationResource.java
│ │ │ ├── HafasStationsResource.kt
│ │ │ ├── HafasTimetableResource.kt
│ │ │ ├── InternalStation.java
│ │ │ ├── LifecycleResourceClient.java
│ │ │ ├── LoadingStatus.java
│ │ │ ├── MapConsentRepository.kt
│ │ │ ├── MediatorResource.java
│ │ │ ├── MergedStation.kt
│ │ │ ├── PlatformLevelResource.kt
│ │ │ ├── RemoteResource.kt
│ │ │ ├── RepositoryHolder.kt
│ │ │ ├── Resource.kt
│ │ │ ├── ResourceClient.java
│ │ │ ├── RimapPOIListResource.kt
│ │ │ ├── RimapRRTResource.kt
│ │ │ ├── RimapStationFeatureCollectionResource.java
│ │ │ ├── RimapStationWrapper.java
│ │ │ ├── RisServiceAndCategoryResource.java
│ │ │ ├── ShopsResource.kt
│ │ │ ├── Station.java
│ │ │ ├── StationOccupancyResource.kt
│ │ │ ├── StationPositions.kt
│ │ │ ├── StationResource.kt
│ │ │ ├── StationResourceProvider.kt
│ │ │ ├── VenueFeature.java
│ │ │ ├── VolleyRestListenerX.kt
│ │ │ ├── accessibility
│ │ │ │ ├── AccessibilityFeature.kt
│ │ │ │ └── AccessibilityFeaturesResource.kt
│ │ │ ├── elevator
│ │ │ │ ├── ElevatorStatusRepository.kt
│ │ │ │ └── Fasta2ElevatorStatusRepository.kt
│ │ │ ├── feedback
│ │ │ │ └── WhatsAppFeeback.kt
│ │ │ ├── localtransport
│ │ │ │ ├── AnyLocalTransportInitialPoi.kt
│ │ │ │ └── LocalTransportRepository.kt
│ │ │ ├── locker
│ │ │ │ ├── AnyLockerInitialPoi.kt
│ │ │ │ ├── LockerInfoLockerRepository.kt
│ │ │ │ ├── LockerRepository.kt
│ │ │ │ ├── LockerResource.kt
│ │ │ │ ├── LockersViewModel.kt
│ │ │ │ └── UiLocker.kt
│ │ │ ├── map
│ │ │ │ └── MapRepository.kt
│ │ │ ├── news
│ │ │ │ └── NewsRepository.kt
│ │ │ ├── occupancy
│ │ │ │ ├── OccupancyRepository.kt
│ │ │ │ └── model
│ │ │ │ │ ├── DailyOccupancy.kt
│ │ │ │ │ ├── HourlyOccupancy.kt
│ │ │ │ │ └── Occupancy.kt
│ │ │ ├── parking
│ │ │ │ ├── LiveCapacityResource.kt
│ │ │ │ ├── ParkingInfoParkingRepository.kt
│ │ │ │ ├── ParkingRepository.kt
│ │ │ │ ├── ParkingsResource.java
│ │ │ │ └── ViewModelParking.kt
│ │ │ ├── poisearch
│ │ │ │ ├── PoiSearchConfiguration.kt
│ │ │ │ └── PoiSearchConfigurationProvider.kt
│ │ │ ├── station
│ │ │ │ ├── OfficialStationRepository.kt
│ │ │ │ ├── StationRepository.kt
│ │ │ │ └── UpdatedStationRepository.kt
│ │ │ ├── stationsearch
│ │ │ │ └── NearbyStopPlacesResource.kt
│ │ │ ├── timetable
│ │ │ │ ├── Constants.kt
│ │ │ │ ├── CyclicTimetableCollector.kt
│ │ │ │ ├── RawTimetable.kt
│ │ │ │ ├── RisTimetableRepository.kt
│ │ │ │ ├── Timetable.kt
│ │ │ │ ├── TimetableChanges.kt
│ │ │ │ ├── TimetableCollector.kt
│ │ │ │ ├── TimetableHour.kt
│ │ │ │ └── TimetableRepository.kt
│ │ │ ├── trainformation
│ │ │ │ ├── Train.kt
│ │ │ │ ├── TrainFormation.kt
│ │ │ │ └── Waggon.kt
│ │ │ └── wagonorder
│ │ │ │ ├── OfficialRisTransportRepository.kt
│ │ │ │ ├── OfficialRisTransportsAdminRepository.kt
│ │ │ │ ├── RisTransportRepository.kt
│ │ │ │ └── RisTransportsAdminRepository.kt
│ │ │ ├── stream
│ │ │ └── livedata
│ │ │ │ ├── MergedLiveData.kt
│ │ │ │ └── OneShotLiveData.kt
│ │ │ ├── tutorial
│ │ │ ├── Tutorial.kt
│ │ │ ├── TutorialManager.kt
│ │ │ ├── TutorialPreferenceStore.kt
│ │ │ └── TutorialView.kt
│ │ │ ├── ui
│ │ │ ├── AvailabilityRenderer.kt
│ │ │ ├── BahnPictoView.java
│ │ │ ├── DbStationWrapper.java
│ │ │ ├── FragmentArgs.java
│ │ │ ├── ImprintFragment.java
│ │ │ ├── LoadingContentDecorationViewHolder.kt
│ │ │ ├── MBTextView.java
│ │ │ ├── RecyclerFragment.kt
│ │ │ ├── ServiceContentFragment.java
│ │ │ ├── StadaStationCacheViewModel.kt
│ │ │ ├── StationWrapper.java
│ │ │ ├── Status.java
│ │ │ ├── TimetableItemOverviewViewHolder.kt
│ │ │ ├── ToolbarViewHolder.kt
│ │ │ ├── ViewHolder.kt
│ │ │ ├── WagenstandSectionIndicator.java
│ │ │ ├── WebViewActivity.java
│ │ │ ├── accessibility
│ │ │ │ └── SpokenFeedbackAccessibilityLiveData.kt
│ │ │ ├── consent
│ │ │ │ ├── ConsentActivity.kt
│ │ │ │ └── ConsentFragment.kt
│ │ │ ├── dbcompanion
│ │ │ │ └── DBCompanionPermissionRequestBuilder.kt
│ │ │ ├── feedback
│ │ │ │ ├── ComplaintUserInterface.kt
│ │ │ │ ├── Tools.kt
│ │ │ │ ├── WhatsAppInstallation.kt
│ │ │ │ └── WhatsAppViewModel.kt
│ │ │ ├── hub
│ │ │ │ ├── DbDeparturesViewHolder.kt
│ │ │ │ ├── DeparturesViewHolder.kt
│ │ │ │ ├── DistanceViewHolder.kt
│ │ │ │ ├── FavoritesAdapter.kt
│ │ │ │ ├── FavoritesFragment.kt
│ │ │ │ ├── HafasStationWrapper.java
│ │ │ │ ├── HubActivity.java
│ │ │ │ ├── HubCoreFragment.kt
│ │ │ │ ├── HubFragment.kt
│ │ │ │ ├── HubViewModel.kt
│ │ │ │ ├── LocationFragment.java
│ │ │ │ ├── NearbyDbDeparturesViewHolder.kt
│ │ │ │ ├── NearbyDbStationItem.kt
│ │ │ │ ├── NearbyDeparturesAdapter.kt
│ │ │ │ ├── NearbyDeparturesFragment.kt
│ │ │ │ ├── NearbyDeparturesViewHolder.kt
│ │ │ │ ├── NearbyHafasStationItem.kt
│ │ │ │ ├── SearchStarterFragment.kt
│ │ │ │ ├── SplashFragment.java
│ │ │ │ ├── StationImageResolver.java
│ │ │ │ └── TransitionViewProvider.java
│ │ │ ├── map
│ │ │ │ ├── CommonFlyoutViewHolder.kt
│ │ │ │ ├── Content.kt
│ │ │ │ ├── DbStationFlyoutViewHolder.java
│ │ │ │ ├── DrawableBitmapDescriptorFactory.kt
│ │ │ │ ├── ElevatorFlyoutViewHolder.kt
│ │ │ │ ├── FacilityStatusMarkerContent.java
│ │ │ │ ├── FilterFragment.java
│ │ │ │ ├── FlyoutLinearSnapHelper.java
│ │ │ │ ├── FlyoutOverlayViewHolder.java
│ │ │ │ ├── FlyoutStatus.java
│ │ │ │ ├── FlyoutViewHolder.kt
│ │ │ │ ├── FlyoutsAdapter.kt
│ │ │ │ ├── GoogleMapsMapInterface.java
│ │ │ │ ├── HafasMarkerContent.java
│ │ │ │ ├── InitialPoiManager.kt
│ │ │ │ ├── LockerFlyoutViewHolder.kt
│ │ │ │ ├── MapActivity.java
│ │ │ │ ├── MapConsentDialogFragment.kt
│ │ │ │ ├── MapInterface.java
│ │ │ │ ├── MapLevelPicker.kt
│ │ │ │ ├── MapOverlayFragment.java
│ │ │ │ ├── MapPresetProvider.java
│ │ │ │ ├── MapViewModel.kt
│ │ │ │ ├── MarkerBinder.java
│ │ │ │ ├── MarkerContent.java
│ │ │ │ ├── ParkingFacilityMarkerContent.kt
│ │ │ │ ├── RailReplacementFlyoutViewHolder.kt
│ │ │ │ ├── RimapMarkerContent.kt
│ │ │ │ ├── RrtPointMarkerContent.kt
│ │ │ │ ├── StationActivityStarter.kt
│ │ │ │ ├── StationFlyoutViewHolder.java
│ │ │ │ ├── StationMarkerContent.kt
│ │ │ │ ├── StatusFlyoutViewHolder.kt
│ │ │ │ ├── TrackFlyoutViewHolder.kt
│ │ │ │ ├── VectorBitmapDescriptorFactory.java
│ │ │ │ ├── ZoomChangeMonitor.java
│ │ │ │ └── content
│ │ │ │ │ ├── BackgroundLayer.java
│ │ │ │ │ ├── IndoorLayer.java
│ │ │ │ │ ├── MapConstants.java
│ │ │ │ │ ├── MapHelper.java
│ │ │ │ │ ├── MapIntent.java
│ │ │ │ │ ├── MapType.java
│ │ │ │ │ ├── rimap
│ │ │ │ │ ├── Filter.java
│ │ │ │ │ ├── RimapFilter.java
│ │ │ │ │ └── Track.kt
│ │ │ │ │ └── tiles
│ │ │ │ │ ├── DbTileProviderStations.kt
│ │ │ │ │ ├── GroundTileProvider.java
│ │ │ │ │ ├── HttpTileProvider.kt
│ │ │ │ │ └── IndoorTileProvider.kt
│ │ │ ├── search
│ │ │ │ ├── HafasStationSearchResult.java
│ │ │ │ ├── PureLocalTransportFilter.java
│ │ │ │ ├── QueryRecorder.kt
│ │ │ │ ├── SearchItemPickedListener.kt
│ │ │ │ ├── SearchResult.java
│ │ │ │ ├── SearchResultResource.kt
│ │ │ │ ├── StationSearchActivity.java
│ │ │ │ ├── StationSearchAdapter.kt
│ │ │ │ ├── StationSearchException.kt
│ │ │ │ ├── StationSearchFragment.java
│ │ │ │ ├── StationSearchResult.java
│ │ │ │ ├── StationSearchViewHolder.kt
│ │ │ │ ├── StationSearchViewModel.kt
│ │ │ │ ├── StopPlaceSearchResult.kt
│ │ │ │ └── StoredStationSearchResult.java
│ │ │ ├── station
│ │ │ │ ├── BhfliveNextFragment.kt
│ │ │ │ ├── Category.java
│ │ │ │ ├── CategoryAdapter.kt
│ │ │ │ ├── CategorySelectionFragment.java
│ │ │ │ ├── CategoryViewHolder.kt
│ │ │ │ ├── CommonDetailsCardViewHolder.kt
│ │ │ │ ├── ElevatorIssuesLoaderFragment.java
│ │ │ │ ├── HistoryFragment.java
│ │ │ │ ├── HistoyFragmentX.kt
│ │ │ │ ├── LoaderFragment.java
│ │ │ │ ├── NewsAdapter.kt
│ │ │ │ ├── NewsDetailsFragment.kt
│ │ │ │ ├── NewsViewHolder.kt
│ │ │ │ ├── NewsViewManager.kt
│ │ │ │ ├── ServiceContents.java
│ │ │ │ ├── SimpleCategory.kt
│ │ │ │ ├── SpecialCategoryFactory.kt
│ │ │ │ ├── StaticInfoCollection.java
│ │ │ │ ├── StaticInfoJsonFormat.java
│ │ │ │ ├── StationActivity.kt
│ │ │ │ ├── StationDetailCard.kt
│ │ │ │ ├── StationDetailCardCoordinator.kt
│ │ │ │ ├── StationFragment.java
│ │ │ │ ├── StationNavigation.kt
│ │ │ │ ├── StationProvider.kt
│ │ │ │ ├── StationViewModel.kt
│ │ │ │ ├── SummaryBadge.java
│ │ │ │ ├── accessibility
│ │ │ │ │ ├── AccessibilityFragment.kt
│ │ │ │ │ ├── AccessibilityKeyFragment.kt
│ │ │ │ │ ├── AccessibilityViewHolder.kt
│ │ │ │ │ └── PlatformSelectionFragment.kt
│ │ │ │ ├── elevators
│ │ │ │ │ ├── AccessibilityDialog.kt
│ │ │ │ │ ├── BookmarkedElevatorStatusFragment.kt
│ │ │ │ │ ├── ElevatorStatusAdapter.kt
│ │ │ │ │ ├── ElevatorStatusListsFragment.kt
│ │ │ │ │ ├── FacilityStatusViewHolder.kt
│ │ │ │ │ ├── OnDeleteAllFacilityStatusSubscriptionsClickListener.java
│ │ │ │ │ └── OverviewElevatorStatusFragment.kt
│ │ │ │ ├── features
│ │ │ │ │ ├── AccessibilityLink.kt
│ │ │ │ │ ├── Availability.java
│ │ │ │ │ ├── Link.java
│ │ │ │ │ ├── LockerLink.kt
│ │ │ │ │ ├── MapLink.java
│ │ │ │ │ ├── MapOrInfoLink.java
│ │ │ │ │ ├── RISServicesAndCategory.kt
│ │ │ │ │ ├── ServicesAndCategory.kt
│ │ │ │ │ ├── StationFeature.kt
│ │ │ │ │ ├── StationFeatureDefinition.kt
│ │ │ │ │ ├── StationFeatureTemplate.kt
│ │ │ │ │ ├── StationFeatureViewHolder.kt
│ │ │ │ │ ├── StationFeaturesAdapter.kt
│ │ │ │ │ └── StationFeaturesFragment.kt
│ │ │ │ ├── info
│ │ │ │ │ ├── BahnhofLiveNextInfoFragment.kt
│ │ │ │ │ ├── DbActionButton.kt
│ │ │ │ │ ├── DbActionButtonParser.kt
│ │ │ │ │ ├── FundserviceContentElement.java
│ │ │ │ │ ├── InfoAndServicesLiveData.kt
│ │ │ │ │ ├── InfoCategorySelectionFragment.kt
│ │ │ │ │ ├── RailReplacementAdapter.kt
│ │ │ │ │ ├── RailReplacementCompanionHelpFragment.kt
│ │ │ │ │ ├── RailReplacementCompanionViewHolder.kt
│ │ │ │ │ ├── RailReplacementFragment.kt
│ │ │ │ │ ├── RailReplacementStopInfoViewHolder.kt
│ │ │ │ │ ├── ServiceContentViewHolder.kt
│ │ │ │ │ ├── ServiceNumbersLiveData.kt
│ │ │ │ │ ├── SimpleDynamicCategory.kt
│ │ │ │ │ ├── StaticInfo.java
│ │ │ │ │ ├── StaticInfoDescriptionPart.kt
│ │ │ │ │ ├── StationComplaintServiceContentViewHolder.kt
│ │ │ │ │ ├── StationInfoAdapter.kt
│ │ │ │ │ ├── StationInfoDetailsFragment.kt
│ │ │ │ │ └── ThreeButtonsViewHolder.java
│ │ │ │ ├── localtransport
│ │ │ │ │ ├── LocalTransportFragment.kt
│ │ │ │ │ ├── LocalTransportViewHolder.kt
│ │ │ │ │ ├── LocalTransportViewModel.kt
│ │ │ │ │ └── LocalTransportsAdapter.kt
│ │ │ │ ├── locker
│ │ │ │ │ └── LockerFragment.kt
│ │ │ │ ├── news
│ │ │ │ │ ├── CouponAdapter.kt
│ │ │ │ │ ├── CouponListFragment.kt
│ │ │ │ │ ├── CouponViewHolder.kt
│ │ │ │ │ └── NewsGroupPresentation.kt
│ │ │ │ ├── occupancy
│ │ │ │ │ ├── DailyOccupancyAdapter.kt
│ │ │ │ │ ├── DailyOccupancyViewHolder.kt
│ │ │ │ │ ├── GraphViewBinder.kt
│ │ │ │ │ ├── OccupancyExplanationFragment.kt
│ │ │ │ │ └── OccupancyViewBinder.kt
│ │ │ │ ├── parking
│ │ │ │ │ ├── BahnparkSiteDetailsFragment.java
│ │ │ │ │ ├── ButtonClickListener.kt
│ │ │ │ │ ├── DescriptionRenderer.kt
│ │ │ │ │ ├── ExternalLinks.java
│ │ │ │ │ ├── ParkingListFragment.kt
│ │ │ │ │ └── ParkingLotAdapter.kt
│ │ │ │ ├── railreplacement
│ │ │ │ │ ├── SEV_Static_Nuernberg.kt
│ │ │ │ │ └── SEV_Static_Riedbahn.kt
│ │ │ │ ├── search
│ │ │ │ │ ├── ContentSearchFragment.kt
│ │ │ │ │ ├── ContentSearchResult.kt
│ │ │ │ │ ├── ContentSearchResultViewHolder.kt
│ │ │ │ │ ├── ContentSearchResultsAdapter.kt
│ │ │ │ │ ├── QueryPart.kt
│ │ │ │ │ └── ResultSetType.kt
│ │ │ │ ├── settings
│ │ │ │ │ ├── SectionAdapter.kt
│ │ │ │ │ ├── SettingsFragment.kt
│ │ │ │ │ ├── StationSettingsFavoritesAdapter.kt
│ │ │ │ │ ├── StationSettingsPushAdapter.kt
│ │ │ │ │ └── StationSettingsTutorialAdapter.kt
│ │ │ │ ├── shop
│ │ │ │ │ ├── CategorizedShops.java
│ │ │ │ │ ├── OpenHour.java
│ │ │ │ │ ├── OpenStatusResolver.java
│ │ │ │ │ ├── RimapShop.kt
│ │ │ │ │ ├── Shop.java
│ │ │ │ │ ├── ShopAdapter.kt
│ │ │ │ │ ├── ShopCategory.java
│ │ │ │ │ ├── ShopCategorySelectionFragment.kt
│ │ │ │ │ ├── ShopListFragment.kt
│ │ │ │ │ ├── ShopViewHolder.kt
│ │ │ │ │ └── ShoppingViewHolder.kt
│ │ │ │ └── timetable
│ │ │ │ │ ├── DbTimetableAdapter.kt
│ │ │ │ │ ├── DbTimetableFragment.kt
│ │ │ │ │ ├── FilterDialogFragment.java
│ │ │ │ │ ├── FilterSummary.kt
│ │ │ │ │ ├── IssueIndicatorBinder.kt
│ │ │ │ │ ├── IssueSeverity.kt
│ │ │ │ │ ├── IssuesBinder.kt
│ │ │ │ │ ├── OnWagonOrderClickListener.java
│ │ │ │ │ ├── ReducedTrainInfoOverviewViewHolder.kt
│ │ │ │ │ ├── TimetableTrailingItemViewHolder.kt
│ │ │ │ │ ├── TimetableViewHelper.kt
│ │ │ │ │ ├── TimetablesFragment.java
│ │ │ │ │ ├── TrackDepartureSummaryViewHolder.kt
│ │ │ │ │ ├── TrackingSelectionListener.java
│ │ │ │ │ ├── TrainInfoOverviewViewHolder.kt
│ │ │ │ │ ├── TrainInfoViewHolder.kt
│ │ │ │ │ ├── TrainMessages.kt
│ │ │ │ │ ├── TwoAlternateButtonsViewHolder.java
│ │ │ │ │ └── TwoTabsFragment.kt
│ │ │ ├── timetable
│ │ │ │ ├── HafasRouteStop.kt
│ │ │ │ ├── WagenstandAdapter.java
│ │ │ │ ├── WagenstandFragment.java
│ │ │ │ ├── journey
│ │ │ │ │ ├── FullJourneyContentFragment.kt
│ │ │ │ │ ├── HafasRouteItemViewHolder.kt
│ │ │ │ │ ├── JourneyAdapter.kt
│ │ │ │ │ ├── JourneyCoreFragment.kt
│ │ │ │ │ ├── JourneyFragment.kt
│ │ │ │ │ ├── JourneyItemViewHolder.kt
│ │ │ │ │ ├── JourneyPlatformInformationFragment.kt
│ │ │ │ │ ├── JourneyRecyclerBinder.kt
│ │ │ │ │ ├── JourneyStop.kt
│ │ │ │ │ ├── JourneyStopEvent.kt
│ │ │ │ │ ├── JourneyViewModel.kt
│ │ │ │ │ ├── ReducedJourneyAdapter.kt
│ │ │ │ │ ├── ReducedJourneyItemViewHolder.kt
│ │ │ │ │ └── RegularJourneyContentFragment.kt
│ │ │ │ └── localtransport
│ │ │ │ │ ├── DeparturesActivity.java
│ │ │ │ │ ├── DetailedHafasEvent.java
│ │ │ │ │ ├── HafasDeparturesAdapter.kt
│ │ │ │ │ ├── HafasDeparturesFragment.kt
│ │ │ │ │ ├── HafasEventOverviewViewHolder.kt
│ │ │ │ │ ├── HafasEventViewHolder.kt
│ │ │ │ │ ├── HafasFilterDialogFragment.java
│ │ │ │ │ ├── HafasJourneyFragment.kt
│ │ │ │ │ ├── HafasTimetableViewModel.kt
│ │ │ │ │ ├── ReducedDbDeparturesViewHolder.java
│ │ │ │ │ └── ReducedHafasDeparturesViewHolder.java
│ │ │ └── tutorial
│ │ │ │ └── TutorialFragment.java
│ │ │ ├── util
│ │ │ ├── AlertX.kt
│ │ │ ├── ArrayListFactory.java
│ │ │ ├── AssetX.kt
│ │ │ ├── BooleanX.kt
│ │ │ ├── BundleX.kt
│ │ │ ├── Cancellable.kt
│ │ │ ├── CollectionX.kt
│ │ │ ├── Collections.java
│ │ │ ├── ComputeIfNull.kt
│ │ │ ├── ContextX.kt
│ │ │ ├── CustomDelegates.kt
│ │ │ ├── DateUtil.java
│ │ │ ├── DebugX.kt
│ │ │ ├── DimensionX.kt
│ │ │ ├── EmptyLiveData.kt
│ │ │ ├── Extensions.kt
│ │ │ ├── GeneralPurposeMillisecondsTimer.kt
│ │ │ ├── ImageHelper.java
│ │ │ ├── ImeCloser.kt
│ │ │ ├── IntentX.kt
│ │ │ ├── Iso8601Duration.kt
│ │ │ ├── JSONHelper.java
│ │ │ ├── KeyboardX.kt
│ │ │ ├── ListHelper.java
│ │ │ ├── LiveDataX.kt
│ │ │ ├── LoadImage.java
│ │ │ ├── MailUri.kt
│ │ │ ├── ManagedObserver.java
│ │ │ ├── MapContentPreserver.java
│ │ │ ├── MapX.kt
│ │ │ ├── MathX.kt
│ │ │ ├── MessageBox.kt
│ │ │ ├── NumberAwareCollator.java
│ │ │ ├── ParcelX.kt
│ │ │ ├── PhoneIntent.java
│ │ │ ├── PrefUtil.kt
│ │ │ ├── ProxyLiveData.kt
│ │ │ ├── Sequences.kt
│ │ │ ├── StringX.kt
│ │ │ ├── Tag.kt
│ │ │ ├── TextUtil.java
│ │ │ ├── TextViewImageGetter.java
│ │ │ ├── TextViewX.kt
│ │ │ ├── TimeX.kt
│ │ │ ├── Token.java
│ │ │ ├── UnwrappingJsonAdapter.java
│ │ │ ├── VersionManager.kt
│ │ │ ├── ViewGroupX.kt
│ │ │ ├── ViewX.kt
│ │ │ ├── accessibility
│ │ │ │ └── AccessibilityUtilities.kt
│ │ │ ├── font
│ │ │ │ └── FontUtil.java
│ │ │ ├── json
│ │ │ │ ├── JSONArrayX.kt
│ │ │ │ ├── JSONObjectX.kt
│ │ │ │ ├── JsonArrayObjectIterator.kt
│ │ │ │ └── JsonArrayStringIterator.kt
│ │ │ ├── openhours
│ │ │ │ └── OpenHoursParser.kt
│ │ │ ├── system
│ │ │ │ └── RuntimeInfo.kt
│ │ │ ├── time
│ │ │ │ ├── EpochParser.kt
│ │ │ │ ├── InstantEpochParser.kt
│ │ │ │ └── SimpleDateFormatEpochParser.kt
│ │ │ └── volley
│ │ │ │ ├── CancellableContinuationVolleyRestListener.kt
│ │ │ │ ├── TLSSocketFactory.java
│ │ │ │ └── VolleyRequestCancellable.kt
│ │ │ ├── view
│ │ │ ├── BackHandlingFragment.java
│ │ │ ├── BaseAnimatorListener.java
│ │ │ ├── BaseItemCallback.kt
│ │ │ ├── BaseListAdapter.kt
│ │ │ ├── BaseOnTabSelectedListener.java
│ │ │ ├── BaseTextWatcher.java
│ │ │ ├── BottomMarginLinker.java
│ │ │ ├── CardButton.java
│ │ │ ├── CompoundButtonChecker.kt
│ │ │ ├── ConfirmationDialog.kt
│ │ │ ├── DecoratedCard.java
│ │ │ ├── DecorationFrameLayout.java
│ │ │ ├── FullBottomSheetDialog.java
│ │ │ ├── FullBottomSheetDialogFragment.kt
│ │ │ ├── InterceptedURLSpan.kt
│ │ │ ├── ItemClickListener.kt
│ │ │ ├── ListViewHolderDelegate.kt
│ │ │ ├── LongClickSelectableItemViewHolder.kt
│ │ │ ├── OptionalAdapter.kt
│ │ │ ├── OptionalSingleItemAdapter.kt
│ │ │ ├── ProgrammaticHorozontalScrollView.kt
│ │ │ ├── SelectableItemViewHolder.kt
│ │ │ ├── SimpleAdapter.kt
│ │ │ ├── SimpleViewHolder.kt
│ │ │ ├── SimpleViewHolderAdapter.kt
│ │ │ ├── SingleItemAdapter.kt
│ │ │ ├── SingleSelectionManager.java
│ │ │ ├── StatusPreviewButton.java
│ │ │ ├── TextDrawable.kt
│ │ │ ├── VerticalStackDrawable.kt
│ │ │ ├── Views.java
│ │ │ └── Views.kt
│ │ │ └── widgets
│ │ │ └── CeCheckableImageButton.kt
│ └── res
│ │ ├── color
│ │ ├── journey_track_selectable.xml
│ │ ├── page_indicator.xml
│ │ ├── selectable_platform.xml
│ │ └── selectable_route_stop.xml
│ │ ├── drawable-xhdpi
│ │ ├── pushicon.png
│ │ ├── station_header_default.jpg
│ │ ├── wagenstand_train_back.png
│ │ ├── wagenstand_train_both.png
│ │ └── wagenstand_train_head.png
│ │ ├── drawable
│ │ ├── app_abfahrt_ankunft.xml
│ │ ├── app_abfahrt_ankunft_aktiv.xml
│ │ ├── app_abfahrt_ankunft_inaktiv.xml
│ │ ├── app_app_bewerten.xml
│ │ ├── app_aufzug.xml
│ │ ├── app_aufzug_h1.xml
│ │ ├── app_bahnhof.xml
│ │ ├── app_bahnhof_aktiv.xml
│ │ ├── app_bahnhof_inaktiv.xml
│ │ ├── app_bahnhofsuche_aktiv.xml
│ │ ├── app_bahnhofsuche_default.xml
│ │ ├── app_bahnhofsuche_inaktiv.xml
│ │ ├── app_bookmark.xml
│ │ ├── app_bus.xml
│ │ ├── app_bus_klein.xml
│ │ ├── app_check.xml
│ │ ├── app_check_large.xml
│ │ ├── app_check_old.xml
│ │ ├── app_complaint.xml
│ │ ├── app_details.xml
│ │ ├── app_einstellung.xml
│ │ ├── app_error.xml
│ │ ├── app_extern_link.xml
│ │ ├── app_faehre_klein.xml
│ │ ├── app_favorit_aktiv.xml
│ │ ├── app_favorit_deaktiv.xml
│ │ ├── app_favorit_default.xml
│ │ ├── app_filter.xml
│ │ ├── app_filter_aktiv.xml
│ │ ├── app_fussweg.xml
│ │ ├── app_get_position.xml
│ │ ├── app_info.xml
│ │ ├── app_info_aktiv.xml
│ │ ├── app_info_inaktiv.xml
│ │ ├── app_information.xml
│ │ ├── app_kreuz.xml
│ │ ├── app_link.xml
│ │ ├── app_loeschen.xml
│ │ ├── app_lupe.xml
│ │ ├── app_lupe_aktiv.xml
│ │ ├── app_mail.xml
│ │ ├── app_mail_corrected.xml
│ │ ├── app_mietwagen.xml
│ │ ├── app_nachoben_pfeil.xml
│ │ ├── app_nachoben_pfeil_deaktiv.xml
│ │ ├── app_nachunten_pfeil.xml
│ │ ├── app_nachunten_pfeil_deaktiv.xml
│ │ ├── app_notavailable.xml
│ │ ├── app_position.xml
│ │ ├── app_position_aktiv.xml
│ │ ├── app_probleme_app_melden.xml
│ │ ├── app_rate.xml
│ │ ├── app_reportbug.xml
│ │ ├── app_sbahn.xml
│ │ ├── app_sbahn_klein.xml
│ │ ├── app_schliessen.xml
│ │ ├── app_service_rufnummern.xml
│ │ ├── app_service_rufnummern_corrected.xml
│ │ ├── app_shop.xml
│ │ ├── app_shop_aktiv.xml
│ │ ├── app_shop_h1.xml
│ │ ├── app_shop_inaktiv.xml
│ │ ├── app_sprechblase.xml
│ │ ├── app_taxi.xml
│ │ ├── app_tipp_hinweise.xml
│ │ ├── app_tram.xml
│ │ ├── app_tram_klein.xml
│ │ ├── app_ubahn.xml
│ │ ├── app_ubahn_klein.xml
│ │ ├── app_verschmutzungmelden.xml
│ │ ├── app_wagenreihung_grau.xml
│ │ ├── app_wagenreihung_weiss.xml
│ │ ├── app_warndreieck.xml
│ │ ├── app_warndreieck_dunkelgrau.xml
│ │ ├── app_warndreieck_dunkelgrau_40.xml
│ │ ├── app_wc.xml
│ │ ├── bahnhofsausstattung_db_info.xml
│ │ ├── bahnhofsausstattung_db_reisezentrum.xml
│ │ ├── bahnhofsausstattung_fahrradstellplatz.xml
│ │ ├── bahnhofsausstattung_mietwagen.xml
│ │ ├── bahnhofsausstattung_taxi.xml
│ │ ├── bahnhofsausstattung_wc.xml
│ │ ├── btn_down.xml
│ │ ├── btn_up.xml
│ │ ├── checkable_departure_arrival.xml
│ │ ├── checkable_favorite_search.xml
│ │ ├── checkable_filter.xml
│ │ ├── checkable_info.xml
│ │ ├── checkable_search.xml
│ │ ├── checkable_shop.xml
│ │ ├── checkable_station.xml
│ │ ├── ebenenswitch_aktiv.xml
│ │ ├── ebenenswitch_aktiv_small.xml
│ │ ├── ebenenswitch_inaktiv.xml
│ │ ├── ebenenswitch_inaktiv_small.xml
│ │ ├── ic_cancel_solid.xml
│ │ ├── ic_check_circle_solid.xml
│ │ ├── ic_push_icon.xml
│ │ ├── ic_rimap_aufzug_aktiv.xml
│ │ ├── ic_rimap_aufzug_inaktiv.xml
│ │ ├── ic_star.xml
│ │ ├── ic_star_outline.xml
│ │ ├── ic_tips_icon.xml
│ │ ├── ic_unknown.xml
│ │ ├── legacy_gradient_shape.xml
│ │ ├── legacy_redbutton_rectangle.xml
│ │ ├── legacy_second_half_wagon_shape.xml
│ │ ├── legacy_waggon_shape.xml
│ │ ├── level_ground.xml
│ │ ├── level_ordinary.xml
│ │ ├── rimap_aufzug.xml
│ │ ├── rimap_aufzug_aktiv.xml
│ │ ├── rimap_aufzug_aktiv_grau.xml
│ │ ├── rimap_aufzug_grau.xml
│ │ ├── rimap_aufzug_inaktiv.xml
│ │ ├── rimap_aufzug_inaktiv_grau.xml
│ │ ├── schraege_linie.xml
│ │ ├── shape_background_occupancy_day_of_week_indicator.xml
│ │ ├── shape_background_occupancy_day_of_week_popup.xml
│ │ ├── shape_badge_issue.xml
│ │ ├── shape_badge_ok.xml
│ │ ├── shape_button_open_close.xml
│ │ ├── shape_circle_button.xml
│ │ ├── shape_divider.xml
│ │ ├── shape_divider_occupancy.xml
│ │ ├── shape_divider_tiny.xml
│ │ ├── shape_flyout_track_divider.xml
│ │ ├── shape_gradient_background.xml
│ │ ├── shape_graph_bar.xml
│ │ ├── shape_graph_bar_highlight.xml
│ │ ├── shape_graph_divider.xml
│ │ ├── shape_journey_stop.xml
│ │ ├── shape_journey_track.xml
│ │ ├── shape_journey_track_highlighted.xml
│ │ ├── shape_page_indicator_news.xml
│ │ ├── shape_page_indicator_tutorial.xml
│ │ ├── shape_round_button_grey.xml
│ │ ├── shape_round_button_neutral.xml
│ │ ├── shape_round_button_neutral_white.xml
│ │ ├── shape_rounded_rectangle.xml
│ │ ├── shape_rounded_rectangle_default.xml
│ │ ├── shape_route_line.xml
│ │ ├── shape_route_stop.xml
│ │ ├── shape_station_image_contrast_overlay.xml
│ │ ├── shape_tab_background.xml
│ │ ├── shape_tab_track.xml
│ │ ├── shape_toggle_thumb.xml
│ │ ├── shape_toggle_track.xml
│ │ ├── shape_upper_journey_track.xml
│ │ ├── switch_ios_selector.xml
│ │ ├── switch_ios_track.xml
│ │ ├── tab_favorite.xml
│ │ ├── tab_lupe.xml
│ │ ├── tab_position.xml
│ │ └── wagenstand_train_head_with_space.xml
│ │ ├── layout-w400dp
│ │ ├── card_ar_teaser.xml
│ │ └── item_news.xml
│ │ ├── layout
│ │ ├── activity_consent.xml
│ │ ├── activity_db_companion_video_call.xml
│ │ ├── activity_departures.xml
│ │ ├── activity_departures_hafas.xml
│ │ ├── activity_hub.xml
│ │ ├── activity_map.xml
│ │ ├── activity_station.xml
│ │ ├── activity_station_search.xml
│ │ ├── bhflive_next_info.xml
│ │ ├── bottom_sheet_overlay_track_flyout.xml
│ │ ├── button_filter.xml
│ │ ├── card_ar_teaser.xml
│ │ ├── card_ar_teaser_nev.xml
│ │ ├── card_category_selection.xml
│ │ ├── card_chatbot_teaser.xml
│ │ ├── card_db_companion_teaser.xml
│ │ ├── card_db_companion_teaser_nev.xml
│ │ ├── card_departures.xml
│ │ ├── card_eco_teaser.xml
│ │ ├── card_expandable_complaint.xml
│ │ ├── card_expandable_coupon.xml
│ │ ├── card_expandable_facility_status.xml
│ │ ├── card_expandable_hafas_event.xml
│ │ ├── card_expandable_parking_occupancy.xml
│ │ ├── card_expandable_rail_replacement_companion.xml
│ │ ├── card_expandable_rail_replacement_stop_info.xml
│ │ ├── card_expandable_setting_push.xml
│ │ ├── card_expandable_setting_station.xml
│ │ ├── card_expandable_setting_tutorial.xml
│ │ ├── card_expandable_station_info.xml
│ │ ├── card_expandable_timetable_db.xml
│ │ ├── card_expandable_venue.xml
│ │ ├── card_nearby_departures.xml
│ │ ├── card_station_suggestion.xml
│ │ ├── common_detail_overview.xml
│ │ ├── decoration_card.xml
│ │ ├── decoration_card_button.xml
│ │ ├── decoration_status_preview_button.xml
│ │ ├── dialog_accessibility_elevator.xml
│ │ ├── dialog_map_consent.xml
│ │ ├── dynamic_card_layout.xml
│ │ ├── fake_map.xml
│ │ ├── fake_map2.xml
│ │ ├── flyout_elevator.xml
│ │ ├── flyout_generic.xml
│ │ ├── flyout_lockers.xml
│ │ ├── flyout_rail_replacement.xml
│ │ ├── flyout_station.xml
│ │ ├── flyout_track.xml
│ │ ├── fragment_accessibility.xml
│ │ ├── fragment_accessibility_key.xml
│ │ ├── fragment_bahnpark_site_details.xml
│ │ ├── fragment_bhflive_next.xml
│ │ ├── fragment_bookmarked_elevators.xml
│ │ ├── fragment_complaint.xml
│ │ ├── fragment_consent.xml
│ │ ├── fragment_content_search.xml
│ │ ├── fragment_db_companion_help.xml
│ │ ├── fragment_favorites.xml
│ │ ├── fragment_filter.xml
│ │ ├── fragment_hafas_journey.xml
│ │ ├── fragment_history.xml
│ │ ├── fragment_hub.xml
│ │ ├── fragment_journey.xml
│ │ ├── fragment_journey_issue.xml
│ │ ├── fragment_journey_platform_information.xml
│ │ ├── fragment_journey_regular_content.xml
│ │ ├── fragment_journey_regular_content_old.xml
│ │ ├── fragment_local_transport.xml
│ │ ├── fragment_locker.xml
│ │ ├── fragment_map_overlay.xml
│ │ ├── fragment_nearby_departures.xml
│ │ ├── fragment_news_details.xml
│ │ ├── fragment_occupancy_explanation.xml
│ │ ├── fragment_platform_selection.xml
│ │ ├── fragment_rail_replacement.xml
│ │ ├── fragment_recycler_grid.xml
│ │ ├── fragment_recycler_linear.xml
│ │ ├── fragment_search_starter.xml
│ │ ├── fragment_servicecontent.xml
│ │ ├── fragment_splash.xml
│ │ ├── fragment_station.xml
│ │ ├── fragment_station_db_companion.xml
│ │ ├── fragment_station_features.xml
│ │ ├── fragment_station_search.xml
│ │ ├── fragment_timetable_db.xml
│ │ ├── fragment_timetable_filter.xml
│ │ ├── fragment_timetable_filter_local.xml
│ │ ├── fragment_tutorial.xml
│ │ ├── fragment_two_tabs.xml
│ │ ├── fragment_wagenstand_detail.xml
│ │ ├── fragment_webview.xml
│ │ ├── header_flyout.xml
│ │ ├── header_timetable_db.xml
│ │ ├── header_timetable_local.xml
│ │ ├── include_accessibility_elevator_link.xml
│ │ ├── include_accessibility_header.xml
│ │ ├── include_complaint.xml
│ │ ├── include_description_button_part.xml
│ │ ├── include_description_link_part.xml
│ │ ├── include_description_opening_hours.xml
│ │ ├── include_description_text_part.xml
│ │ ├── include_divider.xml
│ │ ├── include_empty.xml
│ │ ├── include_empty_no_station_found.xml
│ │ ├── include_error.xml
│ │ ├── include_favorites_empty.xml
│ │ ├── include_graph.xml
│ │ ├── include_graph_bar.xml
│ │ ├── include_graph_bar_highlight.xml
│ │ ├── include_graph_slot.xml
│ │ ├── include_item_locker.xml
│ │ ├── include_item_rail_replacement.xml
│ │ ├── include_journey_recycler.xml
│ │ ├── include_occupancy.xml
│ │ ├── include_occupancy_graph_inter_slot.xml
│ │ ├── include_occupancy_time_label.xml
│ │ ├── include_platforms.xml
│ │ ├── include_progress.xml
│ │ ├── include_progress_and_error.xml
│ │ ├── include_progress_and_error_and_empty.xml
│ │ ├── include_station_search_error.xml
│ │ ├── include_track_flyout_header.xml
│ │ ├── include_tutorial_image.xml
│ │ ├── item_accessibility_status.xml
│ │ ├── item_bhflive_next_h0.xml
│ │ ├── item_bhflive_next_h0_2025.xml
│ │ ├── item_content_search.xml
│ │ ├── item_filter_category.xml
│ │ ├── item_filter_item.xml
│ │ ├── item_journey.xml
│ │ ├── item_journey_detailed.xml
│ │ ├── item_journey_filter_remove.xml
│ │ ├── item_key.xml
│ │ ├── item_local_transport_header.xml
│ │ ├── item_local_transport_info.xml
│ │ ├── item_local_transport_station.xml
│ │ ├── item_message.xml
│ │ ├── item_news.xml
│ │ ├── item_news_headline.xml
│ │ ├── item_news_old.xml
│ │ ├── item_occupancy_day_of_week.xml
│ │ ├── item_progress.xml
│ │ ├── item_route_stop.xml
│ │ ├── item_section_title.xml
│ │ ├── item_service_tripleitemrow.xml
│ │ ├── item_timetable_overview.xml
│ │ ├── item_track_timetable_overview.xml
│ │ ├── item_train_both.xml
│ │ ├── item_train_head.xml
│ │ ├── item_train_tail.xml
│ │ ├── item_train_waggon.xml
│ │ ├── item_train_waggon_half.xml
│ │ ├── item_wagenstand_section.xml
│ │ ├── layout_maplevel_picker.xml
│ │ ├── link_with_text.xml
│ │ ├── list_departures.xml
│ │ ├── popup_occupancy_day_of_week.xml
│ │ ├── recycler_linear.xml
│ │ ├── recycler_linear_refreshable_hafas.xml
│ │ ├── row_station_feature.xml
│ │ ├── row_wagon_order_overview.xml
│ │ ├── stationcard_common.xml
│ │ ├── test_card_layout.xml
│ │ ├── titlebar_common.xml
│ │ ├── titlebar_static.xml
│ │ ├── tutorial_page.xml
│ │ ├── tutorial_view.xml
│ │ ├── wagenstand_section_indicator.xml
│ │ ├── wagenstand_symbol_image.xml
│ │ └── wagenstand_symbol_tag.xml
│ │ ├── raw
│ │ ├── filterconfig.json
│ │ ├── mapconfig.json
│ │ ├── poi_search.json
│ │ └── static_info.json
│ │ ├── values-sw600dp
│ │ └── dimens.xml
│ │ ├── values-v21
│ │ ├── dimens.xml
│ │ └── themes.xml
│ │ ├── values-v23
│ │ └── themes.xml
│ │ ├── values
│ │ ├── arrays.xml
│ │ ├── attrs.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── integers.xml
│ │ ├── plurals.xml
│ │ ├── refs.xml
│ │ ├── screen_reader.xml
│ │ ├── strings.xml
│ │ ├── styles.xml
│ │ ├── themes.xml
│ │ └── vpi__attrs.xml
│ │ └── xml
│ │ └── network_security_config.xml
│ └── test
│ └── java
│ ├── Iso8601DurationTest.kt
│ ├── PlatformTests.kt
│ └── RISStationsStationEquipmentsResponseParserTest.kt
└── settings.gradle
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Built application files
2 | /**/build/
3 |
4 | # Crashlytics configuations
5 | com_crashlytics_export_strings.xml
6 |
7 | # Local configuration file (sdk path, etc)
8 | local.properties
9 |
10 | # Gradle generated files
11 | .gradle/
12 |
13 | # Signing files
14 | .signing/
15 |
16 | # User-specific configurations
17 | .idea/libraries/
18 | .idea/workspace.xml
19 | .idea/tasks.xml
20 | .idea/.name
21 | .idea/compiler.xml
22 | .idea/copyright/profiles_settings.xml
23 | .idea/encodings.xml
24 | .idea/misc.xml
25 | .idea/modules.xml
26 | .idea/scopes/scope_settings.xml
27 | .idea/vcs.xml
28 | .idea/assetWizardSettings.xml
29 | .idea/caches/
30 | *.iml
31 |
32 | .DS_Store
33 | /captures
34 | *.apk
35 |
36 | **/src/*/assets/crashlytics-build.properties
37 | /*.hprof
38 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/copyright/Apache_2_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/MAINTAINERS.md:
--------------------------------------------------------------------------------
1 | DB Bahnhof live ist eine Applikation der DB Station&Service AG.
2 | Die Weiterentwicklung und den Betrieb der Applikation uebernimmt die Scholz & Volkmer GmbH.
3 |
4 | Folgende Nutzer haben die Maintainer-Rolle fuer das jeweilige Repository inne:
5 |
6 | [@mrcodeelements](https://www.github.com/mrcodeelements/) (Android)
7 |
8 | [@Hminning](https://www.github.com/hminning/) (iOS)
9 |
10 | [@SuVpmoran](https://www.github.com/suvpmoran) (allgemein)
11 |
12 | Das Projektteam freut sich auf Fragen, Anmerkungen oder Feedback allgemeiner Art unter der E-Mailadresse: bahnhoflive-opensource@deutschebahn.com
13 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Tue Nov 03 07:09:04 CET 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
7 |
--------------------------------------------------------------------------------
/modules/app-community/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/app-community/src/main/java/de/deutschebahn/bahnhoflive/community/CommunityApplication.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.community
8 |
9 | import de.deutschebahn.bahnhoflive.BaseApplication
10 |
11 | class CommunityApplication : BaseApplication(BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)
--------------------------------------------------------------------------------
/modules/app-community/src/main/res/values/config_strings.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | Please acquire zour own kez
9 |
--------------------------------------------------------------------------------
/modules/core/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | *.active
3 | /output
--------------------------------------------------------------------------------
/modules/core/multidex-config.pro:
--------------------------------------------------------------------------------
1 | -keep class io.sentry.android.core.SentryAndroidOptions
2 | -keep class io.sentry.android.ndk.SentryNdk
--------------------------------------------------------------------------------
/modules/core/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/thkus/Library/Android/sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/modules/core/src/debug/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | Bahnhof live CE (debug)
9 |
--------------------------------------------------------------------------------
/modules/core/src/main/assets/3rdparty.html:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/assets/3rdparty.html
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/MarkerFilterable.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive;
8 |
9 | public interface MarkerFilterable {
10 | boolean isFiltered(Object filter, boolean fallback);
11 | }
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/analytics/ConsentState.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.analytics
2 |
3 | enum class ConsentState(
4 | val trackingAllowed: Boolean = false
5 | ) {
6 | PENDING,
7 | CONSENTED(true),
8 | DISSENTED;
9 |
10 | companion object {
11 | val VALUES = ConsentState.values()
12 | }
13 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/analytics/Trackable.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.analytics;
8 |
9 | import java.util.Map;
10 |
11 | public interface Trackable {
12 | String getTrackingTag();
13 |
14 | Map getTrackingContextVariables();
15 | }
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/analytics/TrackingDelegate.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.analytics
8 |
9 | import android.app.Activity
10 |
11 | open class TrackingDelegate {
12 | open fun trackAction(tag: String, contextVariables: Map) {
13 | }
14 |
15 | open fun trackState(tag: String, contextVariables: Map) {
16 | }
17 |
18 | open fun collectLifecycleData(activity: Activity) {
19 | }
20 |
21 | open fun pauseCollectingLifecycleData() {
22 | }
23 |
24 | open var consentState: ConsentState = ConsentState.PENDING
25 |
26 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/CoroutineResultRestListener.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend
2 |
3 | import com.android.volley.VolleyError
4 | import kotlin.coroutines.Continuation
5 |
6 | class CoroutineResultRestListener(
7 | protected val continuation: Continuation
8 | ) : BaseRestListener() {
9 | override fun onSuccess(payload: T) {
10 | super.onSuccess(payload)
11 |
12 | continuation.resumeWith(Result.success(payload))
13 | }
14 |
15 | override fun onFail(reason: VolleyError) {
16 | super.onFail(reason)
17 |
18 | continuation.resumeWith(Result.failure(reason))
19 | }
20 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/Countable.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend;
8 |
9 | import androidx.annotation.Nullable;
10 |
11 | public interface Countable {
12 | @Nullable
13 | String getCountKey();
14 | }
15 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/DefaultAppRetryPolicy.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend
2 |
3 | import com.android.volley.DefaultRetryPolicy
4 | import com.android.volley.Request
5 |
6 | object DefaultAppRetryPolicy {
7 | fun create() = DefaultRetryPolicy(4000, 3, 1.2f)
8 | }
9 |
10 | fun Request.defaultRetryPolicy() {
11 | retryPolicy = DefaultAppRetryPolicy.create()
12 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/DetailedVolleyError.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend
8 |
9 | import com.android.volley.Request
10 | import com.android.volley.VolleyError
11 |
12 | class DetailedVolleyError(
13 | val request: Request<*>,
14 | cause: Throwable?
15 | ) : VolleyError(
16 | (cause as? VolleyError)?.let { volleyError ->
17 | "Status code ${volleyError.networkResponse?.statusCode}: ${request.url}"
18 | } ?: "Failed: ${request.url}",
19 | cause)
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/HafasStopX.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend
8 |
9 | import de.deutschebahn.bahnhoflive.backend.hafas.model.HafasStation
10 | import de.deutschebahn.bahnhoflive.backend.hafas.model.HafasStop
11 |
12 | fun HafasStop.toHafasStation(): HafasStation =
13 | HafasStation(true).also { hafasStation ->
14 | hafasStation.extId = extId
15 | hafasStation.evaIds = null
16 | hafasStation.latitude = latitude
17 | hafasStation.longitude = longitude
18 | hafasStation.name = name
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/LoadListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend;
8 |
9 | public interface LoadListener {
10 | void onLoadingDone(T data, int errorCount);
11 | }
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/RequestX.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend
2 |
3 | import com.android.volley.NetworkResponse
4 | import com.android.volley.Request
5 | import com.android.volley.Response
6 |
7 | fun Request.parse(
8 | response: NetworkResponse,
9 | parser: (networkResponse: NetworkResponse) -> T
10 | ): Response = runCatching {
11 | parser(response)
12 | }.fold(
13 | {
14 | val forcedCacheEntryFactory =
15 | ForcedCacheEntryFactory(ForcedCacheEntryFactory.DAY_IN_MILLISECONDS)
16 |
17 | Response.success(it, forcedCacheEntryFactory.createCacheEntry(response))
18 | },
19 | {
20 | Response.error(DetailedVolleyError(this, it))
21 | }
22 | )
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/RestErrorListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend;
8 |
9 | import com.android.volley.Response;
10 | import com.android.volley.VolleyError;
11 |
12 | public class RestErrorListener implements Response.ErrorListener {
13 | private final VolleyRestListener listener;
14 |
15 | public RestErrorListener(VolleyRestListener listener) {
16 | this.listener = listener;
17 | }
18 |
19 | @Override
20 | public void onErrorResponse(VolleyError error) {
21 | listener.onFail(error);
22 | }
23 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/RestHelperX.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend
2 |
3 | import com.android.volley.Request
4 | import kotlinx.coroutines.suspendCancellableCoroutine
5 |
6 | suspend fun RestHelper.addAsCancellableCoroutine(requestFactory: (listener: VolleyRestListener) -> Request) =
7 | suspendCancellableCoroutine { continuation ->
8 | add(requestFactory(CoroutineResultRestListener(continuation))).also { request ->
9 | continuation.invokeOnCancellation {
10 | cancel(request)
11 | }
12 | }
13 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/RestListener.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 | package de.deutschebahn.bahnhoflive.backend
7 |
8 | import com.android.volley.Response
9 |
10 | interface RestListener {
11 | fun onSuccess(payload: T)
12 | fun onFail(reason: E)
13 | }
14 |
15 | fun RestListener.volleyResponseListener() = Response.Listener { onSuccess(it) }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/VolleyRestListener.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 | package de.deutschebahn.bahnhoflive.backend
7 |
8 | import com.android.volley.VolleyError
9 |
10 | interface VolleyRestListener : RestListener
11 |
12 | fun VolleyRestListener.errorListener() = RestErrorListener(this)
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/VolleyX.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend
8 |
9 | import com.android.volley.VolleyError
10 |
11 | fun Exception.asVolleyError() = if (this is VolleyError) this else VolleyError(this)
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ZoneId.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db
2 |
3 | fun String.formatZoneId() = padStart(4, '0')
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/fasta2/FastaConstants.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.fasta2
2 |
3 | object FastaConstants {
4 | const val BASE_URL = "https://apis.deutschebahn.com/db-api-marketplace/apis/fasta/v2/"
5 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/newsapi/GroupId.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.newsapi
8 |
9 | import de.deutschebahn.bahnhoflive.backend.db.newsapi.model.News
10 |
11 | // should be in sync with NewsGroupPresentation
12 | enum class GroupId {
13 | COUPON,
14 | STATION_ISSUE,
15 | SURVEY,
16 | PRODUCTS_AND_SERVICES,
17 | MAJOR_DISRUPTION,
18 | REPLACEMENT_ANNOUNCEMENT,
19 | REPLACEMENT,
20 | BHFLIVE_NEXT
21 | ;
22 |
23 | fun appliesTo(news: News): Boolean = news.group.id == id
24 |
25 | val id get() = ordinal + 1
26 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/newsapi/model/Group.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.newsapi.model
8 |
9 | class Group {
10 | var id: Int = -1
11 |
12 | lateinit var title: String
13 |
14 | var optionalData: String? = null
15 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/newsapi/model/NewsResponse.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.newsapi.model
8 |
9 | class NewsResponse {
10 | var count = 0
11 |
12 | var offset = 0
13 |
14 | var limit = 0
15 |
16 | lateinit var news: List
17 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/newsapi/model/OptionalData.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.newsapi.model
8 |
9 | class OptionalData {
10 |
11 | var link: String? = null
12 | set(value) {
13 | field = value?.takeUnless { it.isBlank() }
14 | }
15 |
16 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/parkinginformation/model/Address.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2022 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.parkinginformation.model
8 |
9 | class Address
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/parkinginformation/model/Allocation.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2022 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.parkinginformation.model
8 |
9 | class Allocation {
10 |
11 | var validData: Boolean? = null
12 |
13 | var timestamp: String? = null
14 |
15 | var timeSegment: String? = null
16 |
17 | var occupancy: Int? = null
18 |
19 | var vacancy: Int? = null
20 |
21 | var capacity: Int? = null
22 |
23 | var percentage: Int? = null
24 |
25 | var category: Int? = null
26 |
27 | var text: String? = null
28 |
29 | var belowThreshold: Boolean? = null
30 |
31 | var isUsedForPrognosis: Boolean? = null
32 |
33 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/publictrainstation/model/Address.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.publictrainstation.model
8 |
9 | class Address {
10 | var city: String? = null
11 |
12 | var postalCode: String? = null
13 |
14 | var street: String? = null
15 |
16 | var state: String? = null
17 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/publictrainstation/model/Availability.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.publictrainstation.model
8 |
9 | class Availability {
10 | var availability: List? = null
11 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/publictrainstation/model/AvailabilityEntry.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.publictrainstation.model
8 |
9 | class AvailabilityEntry {
10 | var day: String? = null
11 | var openTime: String? = null
12 | var closeTime: String? = null
13 |
14 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/publictrainstation/model/Constants.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.publictrainstation.model
8 |
9 | object IdentifierType {
10 | const val EVA = "EVA"
11 | const val STADA = "STADA"
12 | }
13 |
14 | object LinkKey {
15 | const val SELF = "self"
16 | }
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/publictrainstation/model/EmbeddedStopPlacesList.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.publictrainstation.model
8 |
9 | class EmbeddedStopPlacesList {
10 | var stopPlaceList: List? = null
11 | }
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/publictrainstation/model/Identifier.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.publictrainstation.model
8 |
9 | class Identifier {
10 |
11 | var type = ""
12 |
13 | var value = ""
14 |
15 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/publictrainstation/model/Link.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.publictrainstation.model
8 |
9 | class Link {
10 | var href: String? = null
11 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/publictrainstation/model/Location.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.publictrainstation.model
8 |
9 | class Location {
10 | var latitude = 0.0
11 | var longitude = 0.0
12 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/publictrainstation/model/StopPlaceEmbeddings.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.publictrainstation.model
8 |
9 | class StopPlaceEmbeddings {
10 | var neighbours: List? = null
11 | var tripleSCenter: TripleSCenter? = null
12 | var travelCenters: List? = null
13 | }
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/publictrainstation/model/StopPlacesPage.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.publictrainstation.model
8 |
9 | class StopPlacesPage {
10 |
11 | var _embedded: EmbeddedStopPlacesList? = null
12 |
13 | val stopPlaces get() = _embedded?.stopPlaceList
14 |
15 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/publictrainstation/model/TripleSCenter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.publictrainstation.model
8 |
9 | class TripleSCenter {
10 |
11 | var identifier: Int = -1
12 |
13 | var name: String? = null
14 |
15 | var publicPhoneNumber: String? = null
16 | var publicFaxNumber: String? = null
17 | var internalPhoneNumber: String? = null
18 | var internalFaxNumber: String? = null
19 |
20 | var address: Address? = null
21 |
22 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/RISStationsRequest.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris
2 |
3 | import de.deutschebahn.bahnhoflive.backend.VolleyRestListener
4 | import de.deutschebahn.bahnhoflive.backend.db.DbAuthorizationTool
5 | import de.deutschebahn.bahnhoflive.backend.db.DbRequest
6 |
7 | abstract class RISStationsRequest(
8 | urlSuffix: String,
9 | apiKeyDbAuthorizationTool: DbAuthorizationTool,
10 | restListener: VolleyRestListener
11 | ) :
12 | DbRequest(
13 | Method.GET,
14 | "https://apis.deutschebahn.com/db/apis/ris-stations/v1/$urlSuffix",
15 | apiKeyDbAuthorizationTool,
16 | restListener,
17 | "db-api-key"
18 | ) {
19 |
20 | override fun getCountKey(): String? = null
21 |
22 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/locker/model/EquipmentLocker.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.ris.locker.model
8 |
9 | class EquipmentLocker {
10 |
11 | var equipmentID: String? = null
12 | var stationID: String? = null
13 | var lockers: List? = null
14 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/locker/model/EquipmentLockers.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.ris.locker.model
8 |
9 | class EquipmentLockers {
10 |
11 | var lockerList: List? = null
12 |
13 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/locker/model/Locker.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 | package de.deutschebahn.bahnhoflive.backend.db.ris.locker.model
7 |
8 |
9 | class Locker {
10 | var amount: Int? = null
11 | var dimension: LockerDimension? = null
12 | var fee: LockerFee? = null
13 | var maxLeaseDuration: String? = null
14 | var paymentTypes: MutableList? = null
15 | var size: String = ""
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/locker/model/LockerDimension.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.ris.locker.model
8 |
9 | class LockerDimension {
10 | var depth: Int? = null
11 | var height: Int? = null
12 | var width: Int? = null
13 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/locker/model/LockerFee.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.db.ris.locker.model
8 |
9 | class LockerFee {
10 | var fee: Int? = null
11 | var feePeriod: String? = null
12 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/AccessibilityStatus.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | enum class AccessibilityStatus {
4 | AVAILABLE,
5 | NOT_AVAILABLE,
6 | PARTIAL,
7 | NOT_APPLICABLE,
8 | UNKNOWN
9 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/AddressWithWeb.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | class AddressWithWeb {
4 | var street: String? = null
5 | var houseNumber: String? = null
6 | var postalCode: String? = null
7 | var city: String? = null
8 | var state: String? = null
9 | var country: String? = null
10 | var website: String? = null
11 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/Contact.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | class Contact {
4 | var phoneNumbers: List? = null
5 | var email: String? = null
6 | var url: String? = null
7 | }
8 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/Coordinate2D.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | import com.google.android.gms.maps.model.LatLng
4 |
5 | class Coordinate2D {
6 |
7 | private var longitude: Double = 0.0
8 | private var latitude: Double = 0.0
9 |
10 | fun toLatLng() = LatLng(latitude, longitude)
11 |
12 | fun getLatitude() : Double = latitude
13 |
14 | @SuppressWarnings("unused")
15 | fun setLatitude(value:Double?) = if(value!=null) latitude=value else latitude=0.0
16 |
17 | fun getLongitude() : Double = longitude
18 | @SuppressWarnings("unused")
19 | fun setLongitude(value:Double?) = if(value!=null) longitude=value else longitude=0.0
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/DepartureMatch.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | class DepartureTransportAdministration {
4 | val administrationID : String = ""
5 | val operatorCode : String = ""
6 | val operatorName : String = ""
7 | }
8 |
9 | class DepartureTransport {
10 | val administration: DepartureTransportAdministration = DepartureTransportAdministration()
11 | val category: String = "" //"ICE",
12 | val journeyNumber: Int = 0 // 857,
13 | val label: String = "" //
14 | val type: String = "" //HIGH_SPEED_TRAIN"
15 | }
16 |
17 | class DepartureInfo {
18 | val transportAtStart: DepartureTransport = DepartureTransport()
19 |
20 | }
21 |
22 | class DepartureMatch(
23 | val info : DepartureInfo = DepartureInfo(),
24 | val journeyID: String
25 | )
26 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/DepartureMatches.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | class DepartureMatches(
4 | val journeys: List
5 | )
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/EventType.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | /**
4 | * @param key Backend model value, save from refactorings
5 | */
6 | enum class EventType(
7 | val key: String
8 | ) {
9 | ARRIVAL("ARRIVAL"),
10 | DEPARTURE("DEPARTURE");
11 |
12 | companion object {
13 | val VALUES = values()
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/ExcludedStadaIds.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | object ExcludedStadaIds {
4 | val ids = setOf(
5 | "5274",
6 | "5530",
7 | "6192",
8 | "519",
9 | "6762",
10 | "4424",
11 | "8309",
12 | "424",
13 | "2698",
14 | "4399",
15 | "6235",
16 | )
17 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/JourneyEventBased.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | class JourneyEventBased(
4 | var journeyID: String,
5 | var administrationID : String,
6 | val events: List
7 | )
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/PhoneNumber.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | class PhoneNumber {
4 | var type: PhoneNumberType? = null
5 | var number: String? = null
6 | }
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/PhoneNumberType.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | enum class PhoneNumberType {
4 | BUSINESS, MOBILE, FAX
5 | }
6 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/RISStation.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | import com.google.android.gms.maps.model.LatLng
4 |
5 | class RISStation {
6 | var stationID: String? = null
7 |
8 | var stationCategory: String? = null
9 |
10 | var position: Coordinate2D? = null
11 |
12 | val category: Int = stationCategory?.let {
13 | kotlin.runCatching { StationCategory.valueOf(it).ordinal + 1 }.getOrNull()
14 | } ?: -1
15 |
16 |
17 | val location by lazy {
18 | position?.let {
19 | LatLng(it.getLatitude(), it.getLongitude())
20 | }
21 | }
22 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/StationCategory.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | enum class StationCategory {
4 | CATEGORY_1,
5 | CATEGORY_2,
6 | CATEGORY_3,
7 | CATEGORY_4,
8 | CATEGORY_5,
9 | CATEGORY_6,
10 | CATEGORY_7,
11 | }
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/StationShort.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | class StationShort(
4 | val evaNumber: String,
5 | val name: String
6 | )
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/StopPlaceName.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | class StopPlaceName {
4 | var nameLong: String? = null
5 |
6 | var nameShort: String? = null
7 |
8 | var nameLocal: String? = null
9 |
10 | var speechLong: String? = null
11 |
12 | var speechShort: String? = null
13 |
14 | var symbol: String? = null
15 | }
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/StopPlaces.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
7 |
8 |
9 | class StopPlaces {
10 |
11 | var stopPlaces: List? = null
12 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/db/ris/model/TimeType.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.db.ris.model
2 |
3 | enum class TimeType {
4 | PREVIEW, SCHEDULE, REAL
5 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/einkaufsbahnhof/model/LocalizedVenueCategory.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.einkaufsbahnhof.model;
8 |
9 | import com.google.gson.annotations.SerializedName;
10 |
11 | public class LocalizedVenueCategory {
12 |
13 | public final String name;
14 |
15 | @SerializedName("category_id")
16 | public final int id;
17 |
18 | public final String locale;
19 |
20 | public LocalizedVenueCategory(String name, int id, String locale) {
21 | this.name = name;
22 | this.id = id;
23 | this.locale = locale;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/einkaufsbahnhof/model/OpeningTime.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.einkaufsbahnhof.model;
8 |
9 | import com.google.gson.annotations.SerializedName;
10 |
11 | public class OpeningTime {
12 |
13 | @SerializedName("day-range")
14 | public final String dayRange;
15 |
16 | @SerializedName("time-from")
17 | public final String timeFrom;
18 |
19 | @SerializedName("time-to")
20 | public final String timeTo;
21 |
22 | public OpeningTime(String dayRange, String timeFrom, String timeTo) {
23 | this.dayRange = dayRange;
24 | this.timeFrom = timeFrom;
25 | this.timeTo = timeTo;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/einkaufsbahnhof/model/Station.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.einkaufsbahnhof.model;
8 |
9 | import com.google.gson.annotations.SerializedName;
10 |
11 | public class Station {
12 |
13 | @SerializedName("station_id")
14 | public final long id;
15 |
16 | @SerializedName("station_name")
17 | public final String name;
18 |
19 | public Station(long id, String name) {
20 | this.name = name;
21 | this.id = id;
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/einkaufsbahnhof/model/StationList.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.einkaufsbahnhof.model;
8 |
9 | import java.util.List;
10 |
11 | public class StationList {
12 | public int status;
13 |
14 | public int numberOfStations;
15 |
16 | public List stations;
17 | }
18 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/einkaufsbahnhof/model/StationResponse.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.einkaufsbahnhof.model;
8 |
9 | import java.util.List;
10 |
11 | public class StationResponse {
12 | public final int status;
13 |
14 | public final Station station;
15 |
16 | public final List stores;
17 |
18 | public StationResponse(int status, Station station, List stores) {
19 | this.status = status;
20 | this.station = station;
21 | this.stores = stores;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/hafas/Filter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.hafas;
8 |
9 | import java.util.List;
10 |
11 | public interface Filter {
12 | int getLimit();
13 |
14 | List filter(List input);
15 | }
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/hafas/LimitingFilter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.hafas;
8 |
9 | import java.util.List;
10 |
11 | public class LimitingFilter implements Filter {
12 | private final int limit;
13 |
14 | public LimitingFilter(int limit) {
15 | this.limit = limit;
16 | }
17 |
18 | @Override
19 | public int getLimit() {
20 | return limit;
21 | }
22 |
23 | @Override
24 | public List filter(List input) {
25 | return input.subList(0, Math.min(input.size(), getLimit()));
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/local/model/DailyOpeningHours.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.local.model
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | @Parcelize
7 | data class DailyOpeningHours(
8 | val dayOfWeek: Int,
9 | val timestamp: Long,
10 | val list: List
11 | ) : Parcelable
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/local/model/OpeningHour.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.local.model
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | @Parcelize
7 | data class OpeningHour(
8 | val dayOfWeek: Int,
9 | val fromMinuteOfDay: Int,
10 | val toMinuteOfDay: Int,
11 | val note: String? = null
12 | ) : Parcelable
13 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/local/model/RrtPoint.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.local.model
2 |
3 | import android.os.Parcelable
4 | import com.google.android.gms.maps.model.LatLng
5 | import kotlinx.parcelize.Parcelize
6 |
7 | @Parcelize
8 | data class RrtPoint(
9 | val id: String?,
10 | val zoneID: String?,
11 | val walkDescription: String?,
12 | val name: String? = null,
13 | val text: String? = null,
14 | val evaNumber: String? = null,
15 | // val labelPosition: String? = null,
16 | // val dhid: String? = null,
17 | val coordinates: LatLng? = null
18 | ) : Parcelable
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/rimap/model/OpeningTime.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.rimap.model
2 |
3 | import de.deutschebahn.bahnhoflive.util.json.toStringList
4 | import org.json.JSONObject
5 |
6 | class OpeningTime(
7 | val days: String,
8 | val openTimes: List?,
9 | val closeTimes: List?
10 | )
11 |
12 | fun JSONObject.openingTime() = try {
13 | OpeningTime(
14 | getString("days"),
15 | getJSONArray("openTimes").toStringList(),
16 | optJSONArray("closeTimes")?.toStringList()
17 | )
18 | } catch (e: Exception) {
19 | null
20 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/rimap/model/RimapRrtPointsResponse.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.rimap.model
2 |
3 | data class RimapRrtPointsResponse(
4 | val rrtPoints: List,
5 | // val viewPort: ...
6 | )
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/rimap/model/RimapStation.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.rimap.model
2 |
3 | class RimapStation(
4 | val name: String,
5 | val zoneId: String,
6 | val evaNumber: Int?,
7 | val categoryDisplay: String,
8 | val levelInit: Int,
9 | val levels: Set
10 | ) {
11 | val maxLevel by lazy { levels.maxOrNull() ?: levelInit }
12 |
13 | val minLevel by lazy { levels.minOrNull() ?: levelInit }
14 |
15 | val levelCount: Int
16 | get() = levels.size
17 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/rimap/model/StationFeature.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.rimap.model;
8 |
9 | public class StationFeature {
10 | public final StationProperties properties;
11 |
12 | public StationFeature(StationProperties properties) {
13 | this.properties = properties;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/rimap/model/StationFeatureCollection.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.rimap.model;
8 |
9 | import java.util.List;
10 |
11 | public class StationFeatureCollection {
12 | public final List features;
13 |
14 | public StationFeatureCollection(List features) {
15 | this.features = features;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/rimap/model/StationProperties.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.rimap.model;
8 |
9 | public class StationProperties {
10 | public String name;
11 | public String zoneid;
12 | public String evanr;
13 |
14 | public Double lon;
15 | public Double lat;
16 |
17 | public Integer level_b4;
18 | public Integer level_b3;
19 | public Integer level_b2;
20 | public Integer level_b1;
21 | public Integer level_l0;
22 | public Integer level_l1;
23 | public Integer level_l2;
24 | public Integer level_l3;
25 | public Integer level_l4;
26 |
27 | public String level_init;
28 | }
29 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/ris/CurrentHourTool.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.backend.ris
2 |
3 | import de.deutschebahn.bahnhoflive.util.DateUtil
4 | import java.util.*
5 |
6 | fun getCurrentHour(): Long {
7 | val cal = Calendar.getInstance(Locale.GERMANY)
8 | cal.timeZone = DateUtil.getGermanTimezone()
9 | return cal.timeInMillis
10 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/wagenstand/istwr/model/WagenstandAllFahrzeugausstattungData.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.wagenstand.istwr.model;
8 |
9 | public class WagenstandAllFahrzeugausstattungData {
10 |
11 | public String anzahl; // "anzahl":"",
12 | public String ausstattungsart; // "ausstattungsart":"ROLLSTUHLTOILETTE",
13 | public String bezeichnung; // "bezeichnung":"",
14 | public String status; // "status":"UNDEFINIERT"
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/wagenstand/istwr/model/WagenstandAllSectorData.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.wagenstand.istwr.model;
8 |
9 | public class WagenstandAllSectorData {
10 |
11 | public WagenstandPositionAmGleisData positionamgleis; //"positionamgleis":{},
12 | public String sektorbezeichnung; // "sektorbezeichnung":"A"
13 | }
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/wagenstand/istwr/model/WagenstandDataData.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.wagenstand.istwr.model;
8 |
9 | public class WagenstandDataData {
10 |
11 | public WagenstandIstInformationData istformation;
12 | }
13 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/wagenstand/istwr/model/WagenstandIstResponseData.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.wagenstand.istwr.model;
8 |
9 | public class WagenstandIstResponseData {
10 |
11 | public WagenstandMetaData meta;
12 | public WagenstandDataData data;
13 | }
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/wagenstand/istwr/model/WagenstandMetaData.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.wagenstand.istwr.model;
8 |
9 | public class WagenstandMetaData {
10 |
11 | public String id; //"id" = "50A8CA8423FF4F2BBE2B66D415719155",
12 | public String owner; // "owner":"vz",
13 | public String format; // "format":"JSON",
14 | public String version; // "version":"0.1.37",
15 | public String[] correlation; // "correlation":[],
16 | public String created; // "created":"2017-01-12T16:52:24.435",
17 | public int sequence; // "sequence":9}
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/wagenstand/istwr/model/WagenstandPositionAmGleisData.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.wagenstand.istwr.model;
8 |
9 | public class WagenstandPositionAmGleisData {
10 |
11 | public String endemeter;//"endemeter":"89.2",
12 | public String endeprozent;// "endeprozent":"22",
13 | public String startmeter;// "startmeter":"0",
14 | public String startprozent;// "startprozent":"0"
15 | }
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/backend/wagenstand/istwr/model/WagenstandPositionAmhaltData.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.backend.wagenstand.istwr.model;
8 |
9 | public class WagenstandPositionAmhaltData {
10 |
11 | public String endemeter; //"endemeter":"237.2",
12 | public String endeprozent; //"endeprozent":"59",
13 | public String startmeter; //"startmeter":"209.3",
14 | public String startprozent; //"startprozent":"52"
15 | }
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/model/parking/Capacity.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.model.parking
8 |
9 | import android.os.Parcelable
10 | import kotlinx.parcelize.Parcelize
11 |
12 | @Parcelize
13 | data class Capacity(
14 | val type: String,
15 | val total: Int
16 | ) : Parcelable
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/model/parking/FeatureTag.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.model.parking
8 |
9 | import androidx.annotation.StringRes
10 | import de.deutschebahn.bahnhoflive.R
11 |
12 | enum class FeatureTag(@StringRes val label: Int) {
13 | HAS_CHARGING_STATION(R.string.parking_feature_charging_station),
14 | IS_LIGHTED(R.string.parking_feature_lighted),
15 | HAS_PARENT_CHILD_PLACES(R.string.parking_feature_family_places),
16 | HAS_LIFT(R.string.parking_feature_lift),
17 | HAS_TOILETS(R.string.parking_feature_toilets),
18 | HAS_WOMEN_PLACES(R.string.parking_feature_women_places),
19 | HAS_DISABLED_PLACES(R.string.parking_feature_disabled_places)
20 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/model/parking/LiveCapacity.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.model.parking
8 |
9 | import android.os.Parcelable
10 | import kotlinx.parcelize.Parcelize
11 |
12 | @Parcelize
13 | data class LiveCapacity(
14 | val facilityId: String,
15 | val parkingStatus: ParkingStatus
16 | ) : Parcelable
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/model/parking/Price.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.model.parking
8 |
9 | import android.os.Parcelable
10 | import kotlinx.parcelize.Parcelize
11 |
12 | @Parcelize
13 | data class Price(
14 | val price: Float,
15 | val duration: Duration,
16 | val period: String?,
17 | val group: String?
18 | ) : Parcelable
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/persistence/LegacyHafasStationItemAdapter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.persistence;
8 |
9 | import de.deutschebahn.bahnhoflive.backend.hafas.model.HafasStation;
10 |
11 | public class LegacyHafasStationItemAdapter extends HafasStationItemAdapter {
12 | @Override
13 | public String getId(HafasStation item) {
14 | return item.id;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/DbCompanionRepository.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.repository
2 |
3 | import android.content.Context
4 |
5 | open class DbCompanionRepository {
6 | open fun showWebViewActivity(ctx: Context) {}
7 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/EvaIdsProvider.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.repository
2 |
3 | import de.deutschebahn.bahnhoflive.backend.local.model.EvaIds
4 |
5 | typealias EvaIdsProvider = suspend Station.() -> EvaIds?
6 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/FontRepository.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.repository
2 |
3 | import android.graphics.Typeface
4 |
5 | open class FontRepository {
6 | open val defaultFont: Typeface? = null
7 | }
8 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/LoadingStatus.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository;
8 |
9 | public enum LoadingStatus {
10 | IDLE, BUSY
11 | }
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/MapConsentRepository.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.repository
2 |
3 | import androidx.lifecycle.MutableLiveData
4 |
5 | class MapConsentRepository {
6 |
7 | val consented = MutableLiveData(false)
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/Station.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository;
8 |
9 |
10 | import androidx.annotation.Nullable;
11 |
12 | import com.google.android.gms.maps.model.LatLng;
13 |
14 | import de.deutschebahn.bahnhoflive.backend.db.ris.model.Coordinate2D;
15 | import de.deutschebahn.bahnhoflive.backend.local.model.EvaIds;
16 |
17 |
18 | public interface Station {
19 | String getId();
20 |
21 | String getTitle();
22 |
23 | @Nullable
24 | LatLng getLocation();
25 |
26 | void setPosition(Coordinate2D position);
27 |
28 | @Nullable
29 | EvaIds getEvaIds();
30 |
31 | void addEvaIds(EvaIds ids);
32 | }
33 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/StationPositions.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository
8 |
9 | import com.google.android.gms.maps.model.LatLng
10 |
11 | object StationPositions {
12 |
13 | val data by lazy {
14 | mapOf(
15 | "8325" to LatLng(48.791128, 11.406021), //Ingolstadt Audi
16 | "7433" to LatLng(48.473378, 8.482925) //Dornstetten-Aach
17 | )
18 | }
19 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/StationResourceProvider.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository
8 |
9 | interface StationResourceProvider {
10 | fun getStationResource(id: String): StationResource
11 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/VolleyRestListenerX.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository
8 |
9 | import com.android.volley.VolleyError
10 | import de.deutschebahn.bahnhoflive.backend.VolleyRestListener
11 | import de.deutschebahn.bahnhoflive.util.Cancellable
12 |
13 | fun VolleyRestListener.fail(): Cancellable? {
14 | onFail(VolleyError("Missing implementation"))
15 | return null
16 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/feedback/WhatsAppFeeback.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.repository.feedback
2 |
3 | import de.deutschebahn.bahnhoflive.backend.local.model.ComplaintableStation
4 |
5 | object WhatsAppFeeback {
6 |
7 | val stadaIds get() = ComplaintableStation.ids
8 |
9 | const val phoneNumber = "4915792397402"
10 |
11 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/localtransport/AnyLocalTransportInitialPoi.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.repository.localtransport
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | @Parcelize
7 | object AnyLocalTransportInitialPoi : Parcelable
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/locker/AnyLockerInitialPoi.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.repository.locker
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | @Parcelize
7 | object AnyLockerInitialPoi : Parcelable
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/locker/LockerRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 | package de.deutschebahn.bahnhoflive.repository.locker
7 |
8 | import de.deutschebahn.bahnhoflive.backend.VolleyRestListener
9 | import de.deutschebahn.bahnhoflive.backend.db.ris.locker.model.Locker
10 | import de.deutschebahn.bahnhoflive.repository.fail
11 |
12 | open class LockerRepository {
13 |
14 | open fun queryLocker(
15 | stationId: String,
16 | listener: VolleyRestListener>
17 | ) {
18 | listener.fail()
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/news/NewsRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository.news
8 |
9 | import de.deutschebahn.bahnhoflive.backend.VolleyRestListener
10 | import de.deutschebahn.bahnhoflive.backend.db.newsapi.model.News
11 | import de.deutschebahn.bahnhoflive.repository.fail
12 |
13 | open class NewsRepository {
14 |
15 | open fun queryNews(stationId: String, listener: VolleyRestListener>) {
16 | listener.fail()
17 | }
18 |
19 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/occupancy/OccupancyRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository.occupancy
8 |
9 | import com.android.volley.VolleyError
10 | import de.deutschebahn.bahnhoflive.backend.VolleyRestListener
11 | import de.deutschebahn.bahnhoflive.repository.occupancy.model.Occupancy
12 |
13 | open class OccupancyRepository {
14 |
15 | open fun queryOccupancy(stationId: String, listener: VolleyRestListener) {
16 | listener.onFail(VolleyError("Missing implementation"))
17 | }
18 |
19 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/occupancy/model/DailyOccupancy.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository.occupancy.model
8 |
9 | class DailyOccupancy(
10 | val dayOfWeek: Int,
11 | val hourlyOccupancies: List
12 | )
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/occupancy/model/Occupancy.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository.occupancy.model
8 |
9 | import java.util.*
10 |
11 | class Occupancy(
12 | val max: Int,
13 | val dailyOccupancies: List
14 | ) {
15 |
16 | fun getCurrentHourlyOccupancy() = Calendar.getInstance(Locale.GERMANY).let { calendar ->
17 | calendar.add(Calendar.HOUR_OF_DAY, -1)
18 | dailyOccupancies[(calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7]
19 | .hourlyOccupancies.getOrNull(calendar.get(Calendar.HOUR_OF_DAY))
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/timetable/Constants.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository.timetable
8 |
9 | object Constants {
10 | const val HOUR_LIMIT = 12
11 | const val PRELOAD_HOURS = 2
12 | const val TIMETABLE_REFRESH_INTERVAL_MILLISECONDS = 90L*1000L
13 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/timetable/RawTimetable.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.repository.timetable
2 |
3 | class RawTimetable {
4 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/timetable/TimetableChanges.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository.timetable
8 |
9 | import de.deutschebahn.bahnhoflive.backend.ris.model.TrainInfo
10 |
11 | class TimetableChanges(
12 | val evaId: String,
13 | val trainInfos: List
14 | )
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/timetable/TimetableCollector.kt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/timetable/TimetableCollector.kt
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/timetable/TimetableHour.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.repository.timetable
8 |
9 | import de.deutschebahn.bahnhoflive.backend.ris.model.TrainInfo
10 |
11 | class TimetableHour(
12 | val hour: Long,
13 | val evaId: String,
14 | val trainInfos: List
15 | )
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/wagonorder/RisTransportRepository.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.repository.wagonorder
2 |
3 | import de.deutschebahn.bahnhoflive.backend.VolleyRestListener
4 | import de.deutschebahn.bahnhoflive.backend.wagenstand.istwr.model.WagenstandIstResponseData
5 | import de.deutschebahn.bahnhoflive.repository.fail
6 |
7 | open class RisTransportRepository() {
8 | open fun queryWagonOrder(
9 | evaId: String,
10 | trainNumber: String,
11 | trainCategory : String?,
12 | dateTime: String?,
13 | listener: VolleyRestListener
14 | ) {
15 | listener.fail()
16 | }
17 | }
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/repository/wagonorder/RisTransportsAdminRepository.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.repository.wagonorder
2 |
3 | import de.deutschebahn.bahnhoflive.backend.VolleyRestListener
4 | import de.deutschebahn.bahnhoflive.backend.wagenstand.istwr.model.RisAdminWagonOrders
5 | import de.deutschebahn.bahnhoflive.repository.fail
6 |
7 | open class RisTransportsAdminRepository {
8 |
9 | open fun queryAdminWagonOrders(
10 | listener: VolleyRestListener
11 | ) {
12 | listener.fail()
13 | }
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/stream/livedata/MergedLiveData.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.stream.livedata
8 |
9 | import androidx.lifecycle.LiveData
10 | import androidx.lifecycle.MediatorLiveData
11 |
12 | abstract class MergedLiveData() : MediatorLiveData() {
13 |
14 | constructor(initialValue: T) : this() {
15 | value = initialValue
16 | }
17 |
18 | fun addSource(source: LiveData<*>): MergedLiveData {
19 | addSource(source) {
20 | onSourceChanged(source)
21 | }
22 | return this
23 | }
24 |
25 | protected abstract fun onSourceChanged(source: LiveData<*>)
26 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/stream/livedata/OneShotLiveData.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.stream.livedata
8 |
9 | import androidx.lifecycle.LiveData
10 | import de.deutschebahn.bahnhoflive.util.Token
11 |
12 | class OneShotLiveData(
13 | val action: (receiver: (T) -> Unit) -> Unit
14 | ) : LiveData() {
15 |
16 | private val token = Token()
17 |
18 | override fun onActive() {
19 | super.onActive()
20 |
21 | if (token.take()) {
22 | action {
23 | value = it
24 | }
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/StationWrapper.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui;
8 |
9 | import androidx.annotation.NonNull;
10 |
11 | import de.deutschebahn.bahnhoflive.ui.search.SearchResult;
12 |
13 | public interface StationWrapper extends SearchResult {
14 |
15 | boolean equals(Object o);
16 |
17 | long getFavoriteTimestamp();
18 |
19 | boolean wraps(Object o);
20 |
21 | @NonNull
22 | T getWrappedStation();
23 | }
24 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/consent/ConsentActivity.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.ui.consent
2 |
3 | import android.content.Context
4 | import android.content.Intent
5 | import android.os.Bundle
6 | import androidx.appcompat.app.AppCompatActivity
7 | import de.deutschebahn.bahnhoflive.R
8 |
9 | class ConsentActivity : AppCompatActivity() {
10 | override fun onCreate(savedInstanceState: Bundle?) {
11 | super.onCreate(savedInstanceState)
12 | setContentView(R.layout.activity_consent)
13 | }
14 |
15 | companion object {
16 | fun createIntent(context: Context) = Intent(context, ConsentActivity::class.java)
17 | }
18 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/feedback/WhatsAppInstallation.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.ui.feedback
2 |
3 | import android.content.Context
4 | import androidx.lifecycle.LiveData
5 |
6 | class WhatsAppInstallation(context: Context) : LiveData() {
7 |
8 | private val packageManager = context.applicationContext.packageManager
9 |
10 | override fun onActive() {
11 | super.onActive()
12 |
13 | try {
14 | value = packageManager.getPackageInfo("com.whatsapp", 0).applicationInfo.enabled
15 | } catch (e: Exception) {
16 | value = false
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/feedback/WhatsAppViewModel.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.ui.feedback
2 |
3 | import android.app.Application
4 | import androidx.lifecycle.AndroidViewModel
5 |
6 | class WhatsAppViewModel(application: Application) : AndroidViewModel(application) {
7 |
8 | val whatsAppInstallation = WhatsAppInstallation(application)
9 | }
10 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/hub/HubCoreFragment.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.ui.hub
2 |
3 | import androidx.fragment.app.Fragment
4 |
5 | open class HubCoreFragment : Fragment() {
6 |
7 | private var fragmentIsVisible : Boolean = false
8 | open fun onFragmentVisible() {
9 | }
10 |
11 | fun setFragmentVisible(visible : Boolean ) {
12 | fragmentIsVisible=visible
13 | if(fragmentIsVisible)
14 | onFragmentVisible()
15 | }
16 |
17 | fun isFragmentVisible() : Boolean {
18 | return fragmentIsVisible
19 | }
20 |
21 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/hub/TransitionViewProvider.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.hub;
8 |
9 | import android.view.View;
10 |
11 | public interface TransitionViewProvider {
12 | View getPinView();
13 |
14 | View getHomeLogoView();
15 | }
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/map/MapPresetProvider.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.map;
8 |
9 | import android.content.Intent;
10 |
11 | import androidx.annotation.NonNull;
12 |
13 | public interface MapPresetProvider {
14 | /**
15 | * @param intent implementations should add data to the given map intent
16 | * @return true
if the intent was actually prepared, false
to give other candidates a chance to perform preparation
17 | */
18 | boolean prepareMapIntent(@NonNull Intent intent);
19 | }
20 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/map/MapViewModel.kt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/map/MapViewModel.kt
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/map/RimapMarkerContent.kt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/map/RimapMarkerContent.kt
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/map/content/MapConstants.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.map.content;
8 |
9 | public class MapConstants {
10 |
11 | public final static float defaultZoomVenueList = 17.9f;
12 | public final static float defaultZoomVenueDetails = 17.9f;
13 | public final static float defaultZoomVenueCategoryList = 17.9f;
14 | public static final float defaultZoomVenueFacilitiesList = 17.9f;
15 |
16 | public static final float minimumZoomForIndoorMarkers = 17;
17 | public static final float minimumZoomForMarkers = 14;
18 |
19 | public static final int NOT_A_LEVELNUMBER = 100000;
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/map/content/MapHelper.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.map.content;
8 |
9 | public class MapHelper {
10 |
11 |
12 | public static int mapBackspinLevelsToGmaps(int backspinLevelIndex) {
13 | switch (backspinLevelIndex) {
14 | case 1:
15 | return 1; //firstFloorLevels
16 | case 2:
17 | case 3:
18 | case -1:
19 | case 4: return 0;
20 | default: return 9999;
21 | }
22 | }
23 |
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/map/content/MapType.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.map.content;
8 |
9 | public enum MapType {
10 | UNDEFINED(), OSM(),
11 | @Deprecated GOOGLE_MAPS();
12 |
13 | public int getValue() {
14 | return ordinal();
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/map/content/rimap/Filter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.map.content.rimap;
8 |
9 | public interface Filter {
10 | boolean getChecked();
11 | }
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/map/content/tiles/IndoorTileProvider.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 | package de.deutschebahn.bahnhoflive.ui.map.content.tiles
7 |
8 | open class IndoorTileProvider(
9 | protected val tileWidth: Int,
10 | protected val tileHeight: Int
11 | ) :
12 | HttpTileProvider(
13 | tileWidth, tileHeight
14 | ) {
15 |
16 | open var level: Int = 0
17 |
18 | companion object {
19 | const val MAP_SIZE = 20037508.34789244 * 2
20 | const val TILE_ORIGIN_X = -20037508.34789244
21 | const val TILE_ORIGIN_Y = 20037508.34789244
22 | }
23 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/search/SearchItemPickedListener.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.search
8 |
9 | interface SearchItemPickedListener {
10 | fun onSearchItemPicked()
11 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/search/SearchResult.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.search;
8 |
9 | import android.content.Context;
10 |
11 | import androidx.annotation.DrawableRes;
12 |
13 | public interface SearchResult {
14 | CharSequence getTitle();
15 |
16 | boolean isFavorite();
17 |
18 | void setFavorite(boolean favorite);
19 |
20 | void onClick(Context context, boolean details);
21 |
22 | @DrawableRes
23 | int getIcon();
24 |
25 | boolean isLocal();
26 | }
27 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/search/StationSearchException.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.search
8 |
9 | class StationSearchException(
10 | message: String?,
11 | cause: Throwable?
12 | ) : Exception(message, cause)
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/search/StationSearchViewModel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.search
8 |
9 | import androidx.lifecycle.ViewModel
10 | import de.deutschebahn.bahnhoflive.BaseApplication
11 |
12 | class StationSearchViewModel : ViewModel() {
13 |
14 | val timetableCollectorFactory = BaseApplication.get().repositories.timetableRepository
15 |
16 | val searchResource = SearchResultResource()
17 |
18 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/Category.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station;
8 |
9 | import androidx.annotation.NonNull;
10 |
11 | import de.deutschebahn.bahnhoflive.view.CardButton;
12 |
13 | public interface Category {
14 | @NonNull
15 | CategorySelectionListener getSelectionListener();
16 |
17 | void bind(CardButton cardButton);
18 |
19 | String getTrackingTag();
20 |
21 | interface CategorySelectionListener {
22 | void onCategorySelected(@NonNull Category category);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/HistoyFragmentX.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.ui.station
2 |
3 | import androidx.fragment.app.Fragment
4 |
5 | fun Fragment.push(fragment: Fragment) {
6 | HistoryFragment.parentOf(this).push(fragment)
7 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/NewsViewHolder.kt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/NewsViewHolder.kt
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/SpecialCategoryFactory.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station
8 |
9 | import android.view.ViewGroup
10 | import de.deutschebahn.bahnhoflive.ui.ViewHolder
11 |
12 | abstract class SpecialCategoryFactory {
13 | abstract fun createSpecialCard(parent: ViewGroup, viewType: Int): ViewHolder?
14 | abstract fun getViewType(portrait: Boolean): Int
15 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/StaticInfoJsonFormat.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station;
8 |
9 | import java.util.List;
10 |
11 | import de.deutschebahn.bahnhoflive.ui.station.info.StaticInfo;
12 |
13 | class StaticInfoJsonFormat {
14 |
15 | final List staticInfo;
16 |
17 | public StaticInfoJsonFormat(List staticInfo) {
18 | this.staticInfo = staticInfo;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/StationProvider.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 | package de.deutschebahn.bahnhoflive.ui.station
7 |
8 | import de.deutschebahn.bahnhoflive.repository.Station
9 |
10 | interface StationProvider {
11 | val station: Station?
12 | }
13 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/features/AccessibilityLink.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 | package de.deutschebahn.bahnhoflive.ui.station.features
7 |
8 | import android.content.Context
9 | import de.deutschebahn.bahnhoflive.ui.station.accessibility.AccessibilityFragment
10 |
11 | class AccessibilityLink(@Suppress("UNUSED_PARAMETER") trackingTag: String) :
12 | Link() {
13 |
14 | override fun createServiceContentFragment(
15 | context: Context,
16 | stationFeature: StationFeature
17 | ) = AccessibilityFragment()
18 |
19 | override fun isAvailable(
20 | context: Context,
21 | stationFeature: StationFeature
22 | ): Boolean {
23 | return true
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/features/Availability.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station.features;
8 |
9 | import androidx.annotation.NonNull;
10 | import androidx.annotation.Nullable;
11 |
12 | public interface Availability {
13 |
14 | @Nullable
15 | Boolean isAvailable(ServicesAndCategory servicesAndCategory, StationFeature stationFeature);
16 |
17 | boolean isVisible(@NonNull ServicesAndCategory servicesAndCategory, StationFeature stationFeature);
18 | }
19 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/features/LockerLink.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2022 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station.features
8 |
9 | import android.content.Context
10 | import de.deutschebahn.bahnhoflive.ui.station.locker.LockerFragment
11 |
12 | class LockerLink :
13 | Link() {
14 |
15 | override fun createServiceContentFragment(
16 | context: Context,
17 | stationFeature: StationFeature
18 | ) = LockerFragment()
19 |
20 | override fun isAvailable(
21 | context: Context,
22 | stationFeature: StationFeature
23 | ): Boolean {
24 | return true
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/features/ServicesAndCategory.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.ui.station.features
2 |
3 | interface ServicesAndCategory {
4 | val hasSzentrale: Boolean
5 | val hasMobilityService: Boolean
6 | val hasRailwayMission: Boolean
7 | val hasMobileService: Boolean
8 | val hasTaxiRank: Boolean
9 | val hasLostAndFound: Boolean
10 | val hasCarRental: Boolean
11 | val hasBicycleParking: Boolean
12 | val hasParking: Boolean
13 | val hasTravelNecessities: Boolean
14 | val hasDbLounge: Boolean
15 | val hasTravelCenter: Boolean
16 | val hasDbInformation: Boolean
17 | val hasLockerSystem: Boolean
18 | val hasWifi: Boolean
19 | val hasPublicFacilities: Boolean
20 | val category: Int
21 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/features/StationFeatureTemplate.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station.features
8 |
9 | class StationFeatureTemplate(
10 | val definition: StationFeatureDefinition,
11 | val link: Link? = null,
12 | val fallbackLink : Link? = null
13 | )
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/info/DbActionButton.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station.info
8 |
9 | import android.util.Log
10 |
11 | data class DbActionButton(
12 | val type: Type = Type.LEGACY,
13 | val data: String? = null,
14 | val label: String? = null
15 | ) {
16 |
17 | init {
18 | Log.d(DbActionButton::class.java.simpleName, "Creating action button $label: $type = $data")
19 | }
20 |
21 | enum class Type {
22 | LEGACY,
23 | HREF,
24 | ACTION
25 | }
26 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/info/RailReplacementCompanionHelpFragment.kt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/info/RailReplacementCompanionHelpFragment.kt
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/info/RailReplacementFragment.kt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/info/RailReplacementFragment.kt
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/info/StaticInfo.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station.info;
8 |
9 | public class StaticInfo {
10 |
11 | public final String type, title, descriptionText;
12 |
13 | public StaticInfo(String type, String title, String descriptionText) {
14 | this.type = type;
15 | this.title = title;
16 | this.descriptionText = descriptionText;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/info/StaticInfoDescriptionPart.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station.info
8 |
9 | class StaticInfoDescriptionPart private constructor(
10 | val text: String? = null,
11 | val button: DbActionButton? = null
12 | ) {
13 |
14 | constructor(text: String) : this(text, null)
15 | constructor(button: DbActionButton) : this(null, button)
16 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/parking/ButtonClickListener.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 | package de.deutschebahn.bahnhoflive.ui.station.parking
7 |
8 | import android.content.Context
9 | import de.deutschebahn.bahnhoflive.model.parking.ParkingFacility
10 |
11 | interface ButtonClickListener {
12 | fun onButtonClick(context: Context?, parkingFacility: ParkingFacility?)
13 | }
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/search/ContentSearchResult.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station.search
8 |
9 | import android.view.View
10 | import androidx.annotation.DrawableRes
11 |
12 | class ContentSearchResult(
13 | val text: CharSequence,
14 | @DrawableRes val icon: Int,
15 | val query: String?,
16 | val onClickListener: View.OnClickListener?,
17 | val timestamp: Long? = null,
18 | val trackingTag: String = text.toString()
19 | )
20 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/search/QueryPart.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station.search
8 |
9 | class QueryPart(val phrase: String) {
10 | val predicate: (String) -> Boolean = if (phrase.length == 1 && !phrase[0].isDigit())
11 | { candidate ->
12 | candidate.startsWith(phrase, true)
13 | }
14 | else
15 | { candidate ->
16 | candidate.contains(phrase, true)
17 | }
18 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/search/ResultSetType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station.search
8 |
9 | import de.deutschebahn.bahnhoflive.R
10 |
11 | enum class ResultSetType(
12 | val label: Int,
13 | val showClearHistory: Boolean = false
14 | ) {
15 | SUGGESTIONS(R.string.title_content_search_suggestions),
16 | HISTORY(R.string.title_content_search_history, true),
17 | GENUINE(R.string.title_content_search_genuine);
18 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/timetable/FilterSummary.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station.timetable
8 |
9 | import de.deutschebahn.bahnhoflive.backend.ris.model.TrainEvent
10 |
11 | data class FilterSummary(
12 | val track: String? = null,
13 | val trainCategory: String? = null,
14 | val trainEvent: TrainEvent = TrainEvent.DEPARTURE,
15 | val matchCount: Int,
16 | val endTime: Long,
17 | val isMayLoadMore: Boolean = false
18 | )
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/timetable/OnWagonOrderClickListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.ui.station.timetable;
8 |
9 | import de.deutschebahn.bahnhoflive.backend.ris.model.TrainEvent;
10 | import de.deutschebahn.bahnhoflive.backend.ris.model.TrainInfo;
11 |
12 | public interface OnWagonOrderClickListener {
13 | void onWagonOrderClick(TrainInfo trainInfo, TrainEvent trainEvent);
14 | }
15 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/station/timetable/ReducedTrainInfoOverviewViewHolder.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.ui.station.timetable
2 |
3 | import android.view.View
4 | import de.deutschebahn.bahnhoflive.backend.ris.model.TrainEvent
5 | import de.deutschebahn.bahnhoflive.backend.ris.model.TrainInfo
6 |
7 | open class ReducedTrainInfoOverviewViewHolder(view: View, provider: TrainEvent.Provider) :
8 | TrainInfoOverviewViewHolder(view, provider) {
9 |
10 | override fun onBind(item: TrainInfo?) {
11 | super.onBind(item)
12 |
13 | issueIndicator?.contentDescription = item?.let {
14 | TrainMessages(
15 |
16 | it,
17 | provider.trainEvent.movementRetriever.getTrainMovementInfo(it)
18 | ).renderContentDescription(itemView.resources)
19 | }
20 | }
21 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/timetable/journey/JourneyFragment.kt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/timetable/journey/JourneyFragment.kt
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/timetable/journey/RegularJourneyContentFragment.kt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/timetable/journey/RegularJourneyContentFragment.kt
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/timetable/localtransport/HafasEventOverviewViewHolder.kt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/java/de/deutschebahn/bahnhoflive/ui/timetable/localtransport/HafasEventOverviewViewHolder.kt
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/ArrayListFactory.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util;
8 |
9 | import java.util.ArrayList;
10 |
11 | public class ArrayListFactory implements MapContentPreserver.Factory> {
12 | @Override
13 | public ArrayList create(K key) {
14 | return new ArrayList<>();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/BooleanX.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util
8 |
9 | infix fun Boolean.then(action: () -> T) = if (this) action() else null
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/Cancellable.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util
8 |
9 | interface Cancellable {
10 | fun cancel()
11 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/CollectionX.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util
2 |
3 | fun Collection.intersects(other: Collection) = any {
4 | other.contains(it)
5 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/Collections.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util;
8 |
9 | import java.util.Collection;
10 | import java.util.Map;
11 |
12 | public class Collections {
13 | private Collections() {
14 | }
15 |
16 | public static int size(Collection collection) {
17 | return collection == null ? 0 : collection.size();
18 | }
19 |
20 | public static boolean hasContent(Collection collection) {
21 | return collection != null && !collection.isEmpty();
22 | }
23 |
24 | public static boolean hasContent(Map map) {
25 | return map != null && ! map.isEmpty();
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/ComputeIfNull.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util
2 |
3 | import kotlin.properties.ReadWriteProperty
4 | import kotlin.reflect.KProperty
5 |
6 | class ComputeIfNull(
7 | val computation: () -> T?
8 | ) : ReadWriteProperty {
9 |
10 | private var cache: T? = null
11 |
12 | override fun setValue(thisRef: Any, property: KProperty<*>, value: T?) {
13 | cache = value
14 | }
15 |
16 | override fun getValue(thisRef: Any, property: KProperty<*>): T? =
17 | cache ?: computation().also {
18 | cache = it
19 | }
20 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/CustomDelegates.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util
2 |
3 | import kotlin.properties.ObservableProperty
4 | import kotlin.properties.ReadWriteProperty
5 | import kotlin.reflect.KProperty
6 |
7 | object CustomDelegates {
8 |
9 | public inline fun observable(initialValue: T, crossinline onChange: (newValue: T) -> Unit):
10 | ReadWriteProperty =
11 | object : ObservableProperty(initialValue) {
12 | override fun beforeChange(property: KProperty<*>, oldValue: T, newValue: T): Boolean =
13 | oldValue != newValue
14 |
15 | override fun afterChange(property: KProperty<*>, oldValue: T, newValue: T) =
16 | onChange(newValue)
17 | }
18 |
19 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/DimensionX.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util
2 |
3 | import android.content.res.Resources
4 | import android.util.TypedValue
5 |
6 |
7 | object DimensionX {
8 |
9 | fun dp2px(resource: Resources, dp: Int): Int {
10 | return TypedValue.applyDimension(
11 | TypedValue.COMPLEX_UNIT_DIP,
12 | dp.toFloat(), resource.displayMetrics
13 | ).toInt()
14 | }
15 |
16 |
17 | fun px2dp(resource: Resources, px: Float): Float {
18 | return TypedValue.applyDimension(
19 | TypedValue.COMPLEX_UNIT_PX,
20 | px,
21 | resource.displayMetrics
22 | )
23 | }
24 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/EmptyLiveData.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util
2 |
3 | import androidx.lifecycle.LiveData
4 |
5 | class EmptyLiveData : LiveData(null) {
6 | companion object {
7 | val INSTANCE = EmptyLiveData()
8 | }
9 | }
10 |
11 | @Suppress("UNCHECKED_CAST")
12 | inline fun emptyLiveData(): LiveData = EmptyLiveData.INSTANCE as LiveData
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/Extensions.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util
8 |
9 | /**
10 | * Calls the specified function [block] with `this` value as its receiver only if it is not `null` and finally returns `null`.
11 | */
12 | inline fun T?.destroy(block: T.() -> Unit): T? {
13 | this?.block()
14 | return null
15 | }
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/ImeCloser.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util
8 |
9 | import android.content.Context
10 |
11 |
12 | //fun Context?.closeIme() {
13 | // this?.let { context ->
14 | //
15 | // }
16 | //}
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/ManagedObserver.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util;
8 |
9 | import androidx.lifecycle.LiveData;
10 | import androidx.lifecycle.Observer;
11 |
12 | public abstract class ManagedObserver implements Observer {
13 | private final LiveData liveData;
14 |
15 | public ManagedObserver(LiveData liveData) {
16 | this.liveData = liveData;
17 | liveData.observeForever(this);
18 | }
19 |
20 | public void destroy() {
21 | liveData.removeObserver(this);
22 | }
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/MathX.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util
2 |
3 | fun Double.isZero() : Boolean = this>-0.0000001 && this<0.0000001
4 | fun Double.isNotZero() : Boolean = !isZero()
5 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/PhoneIntent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util;
8 |
9 | import android.content.Intent;
10 | import android.net.Uri;
11 |
12 | public class PhoneIntent extends Intent {
13 | public PhoneIntent(String phoneNumber) {
14 | super(Intent.ACTION_DIAL, Uri.parse("tel://" + phoneNumber.trim()));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/ProxyLiveData.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MediatorLiveData
5 |
6 | class ProxyLiveData(
7 | source: LiveData? = null
8 | ) : MediatorLiveData() {
9 |
10 | var source = source
11 | set(newSource) {
12 | if (field != newSource) {
13 | field?.also { oldSource ->
14 | removeSource(oldSource)
15 | }
16 | field = newSource
17 | field?.also {
18 | addSource(it) { newValue ->
19 | value = newValue
20 | }
21 | }
22 | }
23 | }
24 |
25 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/Sequences.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util
8 |
9 | fun Sequence.append(nextSequence: Sequence?) = nextSequence?.let { plus(it) } ?: this
10 |
11 | fun Sequence.append(element: T?) = element?.let { plus(it) } ?: this
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/Tag.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util
8 |
9 | val Any.TAG get() = this.javaClass.simpleName
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/Token.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util;
8 |
9 | public class Token {
10 | private boolean available = true;
11 |
12 | public boolean take() {
13 | if (available) {
14 | available = false;
15 | return true;
16 | }
17 | return false;
18 | }
19 |
20 | public void enable() {
21 | available = true;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/ViewGroupX.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util
2 |
3 | import android.view.InflateException
4 | import android.view.LayoutInflater
5 | import android.view.View
6 | import android.view.ViewGroup
7 | import androidx.annotation.LayoutRes
8 |
9 |
10 | @Throws(InflateException::class)
11 | fun ViewGroup.inflateLayout(@LayoutRes layout: Int) : View
12 | {
13 | return LayoutInflater.from(this.context).inflate(layout, this, false)
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/json/JSONArrayX.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util.json
8 |
9 | import org.json.JSONArray
10 | import org.json.JSONObject
11 |
12 | fun JSONArray.asJSONObjectSequence(nullHandler: ((Any) -> Unit)? = null): Sequence =
13 | Sequence { JsonArrayObjectIterator(this, nullHandler) }
14 |
15 | fun JSONArray.toStringList(): List = ArrayList(length())
16 | .also {
17 | JsonArrayStringIterator(this)
18 | .asSequence()
19 | .filterNotNull()
20 | .toCollection(it)
21 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/system/RuntimeInfo.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util.system
2 |
3 | object RuntimeInfo {
4 |
5 | private val runtime: Runtime = Runtime.getRuntime()
6 |
7 |
8 | val usedMemInMB = (runtime.totalMemory() - runtime.freeMemory()) / 1048576L
9 | val maxHeapSizeInMB = runtime.maxMemory() / 1048576L
10 | val availHeapSizeInMB = maxHeapSizeInMB - usedMemInMB
11 |
12 | fun getFreeHeapMemInBytes() : Long {
13 | val usedMemInB = (runtime.totalMemory() - runtime.freeMemory())
14 | val maxHeapSizeInB = runtime.maxMemory()
15 | val availHeapSizeInB = maxHeapSizeInB - usedMemInB
16 |
17 | return availHeapSizeInB
18 | }
19 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/time/EpochParser.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util.time
2 |
3 | import android.os.Build
4 |
5 | interface EpochParser {
6 | fun parse(text: String): Long?
7 |
8 | companion object {
9 | fun getInstance(): EpochParser =
10 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
11 | InstantEpochParser()
12 | } else {
13 | SimpleDateFormatEpochParser()
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/time/InstantEpochParser.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util.time
2 |
3 | import android.os.Build
4 | import androidx.annotation.RequiresApi
5 | import java.time.Instant
6 | import java.time.format.DateTimeFormatter
7 |
8 | @RequiresApi(Build.VERSION_CODES.O)
9 | class InstantEpochParser : EpochParser {
10 |
11 | override fun parse(text: String): Long? =
12 | kotlin.runCatching {
13 | DateTimeFormatter.ISO_DATE_TIME.parse(text).let {
14 | Instant.from(it).toEpochMilli()
15 | }
16 | }.getOrNull()
17 |
18 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/time/SimpleDateFormatEpochParser.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.util.time
2 |
3 | import java.text.SimpleDateFormat
4 |
5 | class SimpleDateFormatEpochParser : EpochParser {
6 |
7 | private val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
8 |
9 | override fun parse(text: String): Long? =
10 | kotlin.runCatching {
11 | simpleDateFormat.parse(text)?.time
12 | }.getOrNull()
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/util/volley/VolleyRequestCancellable.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.util.volley
8 |
9 | import com.android.volley.Request
10 | import de.deutschebahn.bahnhoflive.util.Cancellable
11 |
12 | class VolleyRequestCancellable(val request: Request) : Cancellable {
13 | override fun cancel() {
14 | request.cancel()
15 | }
16 | }
17 |
18 | fun Request.cancellable() = VolleyRequestCancellable(this)
19 |
20 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/BackHandlingFragment.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.view;
8 |
9 | public interface BackHandlingFragment {
10 | boolean onBackPressed();
11 | }
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/BaseAnimatorListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.view;
8 |
9 | import android.animation.Animator;
10 |
11 | /**
12 | * Convenience stub implementation
13 | */
14 | public class BaseAnimatorListener implements Animator.AnimatorListener {
15 | @Override
16 | public void onAnimationStart(Animator animation) {
17 |
18 | }
19 |
20 | @Override
21 | public void onAnimationEnd(Animator animation) {
22 |
23 | }
24 |
25 | @Override
26 | public void onAnimationCancel(Animator animation) {
27 |
28 | }
29 |
30 | @Override
31 | public void onAnimationRepeat(Animator animation) {
32 |
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/BaseItemCallback.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.view
2 |
3 | import androidx.recyclerview.widget.DiffUtil
4 |
5 | open class BaseItemCallback : DiffUtil.ItemCallback() {
6 |
7 | override fun areItemsTheSame(
8 | oldItem: T & Any,
9 | newItem: T & Any
10 | ): Boolean = oldItem == newItem
11 |
12 | override fun areContentsTheSame(
13 | oldItem: T & Any,
14 | newItem: T & Any
15 | ) = true
16 |
17 |
18 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/BaseOnTabSelectedListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.view;
8 |
9 | import com.google.android.material.tabs.TabLayout;
10 |
11 | public class BaseOnTabSelectedListener implements TabLayout.OnTabSelectedListener {
12 | @Override
13 | public void onTabSelected(TabLayout.Tab tab) {
14 |
15 | }
16 |
17 | @Override
18 | public void onTabUnselected(TabLayout.Tab tab) {
19 |
20 | }
21 |
22 | @Override
23 | public void onTabReselected(TabLayout.Tab tab) {
24 |
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/BaseTextWatcher.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.view;
8 |
9 | import android.text.Editable;
10 | import android.text.TextWatcher;
11 |
12 | public class BaseTextWatcher implements TextWatcher {
13 | @Override
14 | public void beforeTextChanged(CharSequence s, int start, int count, int after) {
15 |
16 | }
17 |
18 | @Override
19 | public void onTextChanged(CharSequence s, int start, int before, int count) {
20 |
21 | }
22 |
23 | @Override
24 | public void afterTextChanged(Editable s) {
25 |
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/ConfirmationDialog.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.view
8 |
9 | import android.view.View
10 | import androidx.core.content.ContextCompat
11 | import com.google.android.material.snackbar.Snackbar
12 | import de.deutschebahn.bahnhoflive.R
13 |
14 | class ConfirmationDialog(targetView: View, message: String, confirmedAction: View.OnClickListener) {
15 | init {
16 | val snackbar = Snackbar.make(targetView, message, Snackbar.LENGTH_SHORT)
17 | snackbar.setAction("Ja", confirmedAction)
18 | snackbar.view.setBackgroundColor(ContextCompat.getColor(snackbar.context, R.color.white))
19 | snackbar.show()
20 | }
21 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/FullBottomSheetDialogFragment.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 | package de.deutschebahn.bahnhoflive.view
7 |
8 | import android.app.Dialog
9 | import android.os.Bundle
10 | import androidx.appcompat.app.AppCompatDialogFragment
11 |
12 | open class FullBottomSheetDialogFragment : AppCompatDialogFragment() {
13 | override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
14 | return FullBottomSheetDialog(requireContext(), theme)
15 | }
16 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/ItemClickListener.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.view
8 |
9 | typealias ItemClickListener = (item: T, adapterPosition: Int) -> Unit
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/ListViewHolderDelegate.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.view
2 |
3 | import android.view.ViewGroup
4 | import androidx.recyclerview.widget.RecyclerView
5 |
6 | interface ListViewHolderDelegate {
7 | fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH
8 | fun onBindViewHolder(holder: VH, item: T, position: Int)
9 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/OptionalAdapter.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.view
2 |
3 | import android.view.View
4 | import kotlin.properties.Delegates
5 |
6 | class OptionalAdapter(
7 | view: View,
8 | enabled: Boolean = true
9 | ) : SimpleAdapter(view) {
10 |
11 | var enabled by Delegates.observable(enabled) { _, oldValue, newValue ->
12 | if (newValue != oldValue) {
13 | if (newValue) {
14 | notifyItemInserted(0)
15 | } else {
16 | notifyItemRemoved(0)
17 | }
18 | }
19 | }
20 |
21 | override fun getItemCount(): Int = if (enabled) 1 else 0
22 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/OptionalSingleItemAdapter.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.view
2 |
3 | abstract class OptionalSingleItemAdapter(
4 | initialItem: T? = null
5 | ) : SingleItemAdapter(initialItem) {
6 | override fun getItemCount(): Int = if (item == null) 0 else 1
7 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/SimpleAdapter.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.view
2 |
3 | import android.view.View
4 | import android.view.ViewGroup
5 | import androidx.recyclerview.widget.RecyclerView
6 |
7 | open class SimpleAdapter(val view: View) : RecyclerView.Adapter() {
8 |
9 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = SimpleViewHolder(view)
10 |
11 | override fun onBindViewHolder(holder: SimpleViewHolder, position: Int) = Unit
12 |
13 | override fun getItemCount() = 1
14 |
15 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/SimpleViewHolder.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.view
2 |
3 | import android.view.View
4 | import androidx.recyclerview.widget.RecyclerView
5 |
6 | class SimpleViewHolder(view: View) : RecyclerView.ViewHolder(view)
7 |
8 | fun View.toViewHolder() = SimpleViewHolder(this)
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/SimpleViewHolderAdapter.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.view
2 |
3 | import android.view.ViewGroup
4 | import androidx.recyclerview.widget.RecyclerView
5 |
6 | class SimpleViewHolderAdapter(
7 | val viewHolderFactory: (parent: ViewGroup, viewType: Int) -> VH
8 | ) : RecyclerView.Adapter() {
9 |
10 | var count: Int = 1
11 | set(value) {
12 | if (field != value) {
13 | field = value
14 | notifyDataSetChanged()
15 | }
16 | }
17 |
18 | override fun getItemCount(): Int = count
19 |
20 | override fun onBindViewHolder(holder: VH, position: Int) {}
21 |
22 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
23 | viewHolderFactory(parent, viewType)
24 |
25 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/SingleItemAdapter.kt:
--------------------------------------------------------------------------------
1 | package de.deutschebahn.bahnhoflive.view
2 |
3 | import androidx.recyclerview.widget.RecyclerView
4 | import de.deutschebahn.bahnhoflive.ui.ViewHolder
5 |
6 | abstract class SingleItemAdapter(
7 | var item: T
8 | ) : RecyclerView.Adapter>() {
9 |
10 | override fun onBindViewHolder(holder: ViewHolder, position: Int) {
11 | holder.bind(item)
12 | }
13 |
14 | override fun getItemCount(): Int = 1
15 |
16 | }
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/Views.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.view;
8 |
9 | import android.view.LayoutInflater;
10 | import android.view.View;
11 | import android.view.ViewGroup;
12 |
13 | import androidx.annotation.LayoutRes;
14 | import androidx.annotation.NonNull;
15 |
16 | public final class Views {
17 | @NonNull
18 | public static View inflate(@NonNull ViewGroup parent, @LayoutRes int layout) {
19 | return LayoutInflater.from(parent.getContext()).inflate(layout, parent, false);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/modules/core/src/main/java/de/deutschebahn/bahnhoflive/view/Views.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2020 DB Station&Service AG
3 | *
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package de.deutschebahn.bahnhoflive.view
8 |
9 | import android.view.LayoutInflater
10 | import android.view.View
11 | import android.view.ViewGroup
12 | import androidx.annotation.LayoutRes
13 |
14 | fun ViewGroup.inflate(@LayoutRes layout: Int): View =
15 | inflater.inflate(layout, this, false)
16 |
17 | val View.inflater: LayoutInflater get() = LayoutInflater.from(context)
--------------------------------------------------------------------------------
/modules/core/src/main/res/color/journey_track_selectable.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/color/page_indicator.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/color/selectable_platform.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/color/selectable_route_stop.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable-xhdpi/pushicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/res/drawable-xhdpi/pushicon.png
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable-xhdpi/station_header_default.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/res/drawable-xhdpi/station_header_default.jpg
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable-xhdpi/wagenstand_train_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/res/drawable-xhdpi/wagenstand_train_back.png
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable-xhdpi/wagenstand_train_both.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/res/drawable-xhdpi/wagenstand_train_both.png
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable-xhdpi/wagenstand_train_head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dbbahnhoflive/dbbahnhoflive-android/364d2a3c8e215e1ae8f146575d0ab610e6b71515/modules/core/src/main/res/drawable-xhdpi/wagenstand_train_head.png
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_app_bewerten.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
14 |
18 |
19 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_check.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_check_old.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
14 |
18 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_extern_link.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_favorit_aktiv.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
15 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_favorit_deaktiv.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_favorit_default.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
15 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_filter.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_filter_aktiv.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_mail.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
16 |
19 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_mail_corrected.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_nachoben_pfeil.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_nachoben_pfeil_deaktiv.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_nachunten_pfeil.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_nachunten_pfeil_deaktiv.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_position_aktiv.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
15 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_schliessen.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
18 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_service_rufnummern_corrected.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_sprechblase.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
19 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_ubahn.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
15 |
18 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/app_ubahn_klein.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
15 |
18 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/btn_down.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/btn_up.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/checkable_departure_arrival.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/checkable_favorite_search.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/checkable_filter.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/checkable_info.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/checkable_search.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/checkable_shop.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/checkable_station.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/ic_cancel_solid.xml:
--------------------------------------------------------------------------------
1 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/ic_check_circle_solid.xml:
--------------------------------------------------------------------------------
1 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/legacy_gradient_shape.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
10 |
14 |
15 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/legacy_redbutton_rectangle.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
10 |
12 |
13 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/legacy_second_half_wagon_shape.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/legacy_waggon_shape.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/level_ground.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/level_ordinary.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_background_occupancy_day_of_week_popup.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | -
9 |
10 |
11 |
12 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_badge_issue.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
10 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_badge_ok.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
10 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_button_open_close.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
13 |
14 |
15 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_circle_button.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_divider.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_divider_occupancy.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_divider_tiny.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_flyout_track_divider.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_gradient_background.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_graph_bar.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_graph_bar_highlight.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_graph_divider.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_journey_stop.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_journey_track.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_journey_track_highlighted.xml:
--------------------------------------------------------------------------------
1 |
6 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_page_indicator_news.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_page_indicator_tutorial.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | -
9 |
10 |
11 |
12 |
13 |
14 | -
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_round_button_grey.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | -
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_round_button_neutral.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | -
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_round_button_neutral_white.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | -
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_rounded_rectangle.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | -
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_rounded_rectangle_default.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | -
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_route_line.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_route_stop.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_station_image_contrast_overlay.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_tab_background.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_tab_track.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | -
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_toggle_thumb.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | -
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_toggle_track.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | -
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/shape_upper_journey_track.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/tab_favorite.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/tab_lupe.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/tab_position.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/drawable/wagenstand_train_head_with_space.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/activity_consent.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/activity_db_companion_video_call.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/activity_hub.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/activity_station_search.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/card_category_selection.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/decoration_card.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
11 |
12 |
19 |
20 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/fake_map.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
10 |
11 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/fake_map2.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
10 |
11 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/fragment_history.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/fragment_recycler_linear.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/fragment_station_db_companion.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
18 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_description_text_part.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
19 |
20 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_divider.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_empty.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
13 |
14 |
22 |
23 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_empty_no_station_found.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
13 |
14 |
22 |
23 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_favorites_empty.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
16 |
17 |
22 |
23 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_graph_bar.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_graph_bar_highlight.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_occupancy_time_label.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
15 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_progress.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
15 |
16 |
21 |
22 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_progress_and_error.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_progress_and_error_and_empty.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/include_tutorial_image.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
19 |
20 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/item_filter_category.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/item_filter_item.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/item_journey_filter_remove.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/item_occupancy_day_of_week.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/item_progress.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/item_section_title.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/layout/titlebar_common.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
17 |
18 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/values-v21/dimens.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | 24dp
9 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/values-v21/themes.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/values-v23/themes.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
14 |
15 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/values/arrays.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/values/integers.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 | 1
9 | 2
10 |
--------------------------------------------------------------------------------
/modules/core/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'Bahnhof Live Community'
2 |
3 | include ':modules:core'
4 | include ':modules:app-community'
5 |
--------------------------------------------------------------------------------