├── .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 | 5 | -------------------------------------------------------------------------------- /.idea/copyright/Apache_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | --------------------------------------------------------------------------------