mirror of
https://gitlab.com/oeffi/oeffi.git
synced 2025-07-07 21:28:49 +00:00
Compare commits
72 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
f1198671b1 | ||
![]() |
2736bc82dd | ||
![]() |
cd6628088a | ||
![]() |
e7e8af6a10 | ||
![]() |
53c5ea26b6 | ||
![]() |
37949d2628 | ||
![]() |
90c3e70665 | ||
![]() |
d1c124478d | ||
![]() |
004f32b234 | ||
![]() |
e361a6fc06 | ||
![]() |
d76e357603 | ||
![]() |
2f158a9b5b | ||
![]() |
3dfa049ae2 | ||
![]() |
e17a2ff2dc | ||
![]() |
d8b885fca3 | ||
![]() |
71f315ac59 | ||
![]() |
ce7fedc76e | ||
![]() |
3b80a7a3b4 | ||
![]() |
0bd83c0125 | ||
![]() |
c5ee0db526 | ||
![]() |
99b737f237 | ||
![]() |
59168f51c4 | ||
![]() |
eb23268ebc | ||
![]() |
2a1cc53180 | ||
![]() |
b5dac623dd | ||
![]() |
2e00027604 | ||
![]() |
335fdea1f8 | ||
![]() |
75913e122a | ||
![]() |
4357b7a0df | ||
![]() |
40b468d354 | ||
![]() |
efa91b4c67 | ||
![]() |
562d118e79 | ||
![]() |
d4060f7589 | ||
![]() |
078b07340d | ||
![]() |
9197bdbe1a | ||
![]() |
558e1a6cc4 | ||
![]() |
e66388c60d | ||
![]() |
100fb5ab3a | ||
![]() |
abb468772d | ||
![]() |
5eda98e436 | ||
![]() |
05d3623c34 | ||
![]() |
4a17ef441f | ||
![]() |
b1e17c5795 | ||
![]() |
df63f54ab1 | ||
![]() |
b0ea770ba3 | ||
![]() |
d92615efd9 | ||
![]() |
0873bfa3de | ||
![]() |
23a1daf92b | ||
![]() |
30d2e47fc9 | ||
![]() |
c6dcce6049 | ||
![]() |
2c3249838a | ||
![]() |
f7f93c1a88 | ||
![]() |
47734279de | ||
![]() |
1a7e46a3af | ||
![]() |
afdd237cca | ||
![]() |
17727a1e3a | ||
![]() |
70c1ac5fa4 | ||
![]() |
71e68765cd | ||
![]() |
33284c92c2 | ||
![]() |
f4ce1d0e43 | ||
![]() |
8836b3df20 | ||
![]() |
ce6f3a8520 | ||
![]() |
4c8d26dee7 | ||
![]() |
5815a985f5 | ||
![]() |
cf332416b8 | ||
![]() |
bcf34c1de9 | ||
![]() |
4b710e1aad | ||
![]() |
488fbe19fd | ||
![]() |
2843f84b45 | ||
![]() |
332f0c06b8 | ||
![]() |
61c201eb2b | ||
![]() |
bae07f465f |
46 changed files with 357 additions and 465 deletions
|
@ -19,19 +19,6 @@ reference:
|
||||||
paths:
|
paths:
|
||||||
- build/**
|
- build/**
|
||||||
|
|
||||||
bullseye-jdk11:
|
|
||||||
image: debian:bullseye-backports
|
|
||||||
script:
|
|
||||||
- apt-get update
|
|
||||||
- apt-get -y install openjdk-11-jdk-headless gradle sdkmanager
|
|
||||||
- yes | sdkmanager --licenses >/dev/null || true
|
|
||||||
- gradle build --stacktrace
|
|
||||||
- gradle --version
|
|
||||||
artifacts:
|
|
||||||
name: oeffi-$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA
|
|
||||||
paths:
|
|
||||||
- oeffi/build/outputs/apk/**/*.apk
|
|
||||||
|
|
||||||
bookworm-jdk17:
|
bookworm-jdk17:
|
||||||
image: debian:bookworm-slim
|
image: debian:bookworm-slim
|
||||||
script:
|
script:
|
||||||
|
@ -44,29 +31,3 @@ bookworm-jdk17:
|
||||||
name: oeffi-$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA
|
name: oeffi-$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA
|
||||||
paths:
|
paths:
|
||||||
- oeffi/build/outputs/apk/**/*.apk
|
- oeffi/build/outputs/apk/**/*.apk
|
||||||
|
|
||||||
jammy-jdk11:
|
|
||||||
image: ubuntu:jammy
|
|
||||||
script:
|
|
||||||
- apt-get update
|
|
||||||
- apt-get -y install openjdk-11-jdk-headless gradle sdkmanager
|
|
||||||
- yes | sdkmanager --licenses >/dev/null || true
|
|
||||||
- gradle build --stacktrace
|
|
||||||
- gradle --version
|
|
||||||
artifacts:
|
|
||||||
name: oeffi-$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA
|
|
||||||
paths:
|
|
||||||
- oeffi/build/outputs/apk/**/*.apk
|
|
||||||
|
|
||||||
lunar-jdk17:
|
|
||||||
image: ubuntu:lunar
|
|
||||||
script:
|
|
||||||
- apt-get update
|
|
||||||
- apt-get -y install openjdk-17-jdk-headless gradle sdkmanager
|
|
||||||
- yes | sdkmanager --licenses >/dev/null || true
|
|
||||||
- gradle build --stacktrace
|
|
||||||
- gradle --version
|
|
||||||
artifacts:
|
|
||||||
name: oeffi-$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA
|
|
||||||
paths:
|
|
||||||
- oeffi/build/outputs/apk/**/*.apk
|
|
||||||
|
|
|
@ -14,12 +14,15 @@
|
||||||
# directory. Use `apksigner` to sign before installing via `adb install`.
|
# directory. Use `apksigner` to sign before installing via `adb install`.
|
||||||
#
|
#
|
||||||
|
|
||||||
FROM debian:bullseye-backports AS build-stage
|
FROM debian:bookworm-slim AS build-stage
|
||||||
|
|
||||||
# install debian packages
|
# install debian packages
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
RUN /usr/bin/apt-get update && \
|
RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \
|
||||||
/usr/bin/apt-get --yes install disorderfs openjdk-11-jdk-headless gradle sdkmanager && \
|
--mount=target=/var/cache/apt,type=cache,sharing=locked \
|
||||||
|
/bin/rm -f /etc/apt/apt.conf.d/docker-clean && \
|
||||||
|
/usr/bin/apt-get update && \
|
||||||
|
/usr/bin/apt-get --yes --no-install-recommends install disorderfs openjdk-17-jdk-headless gradle sdkmanager && \
|
||||||
/bin/ln -fs /usr/share/zoneinfo/CET /etc/localtime && \
|
/bin/ln -fs /usr/share/zoneinfo/CET /etc/localtime && \
|
||||||
/usr/sbin/dpkg-reconfigure --frontend noninteractive tzdata && \
|
/usr/sbin/dpkg-reconfigure --frontend noninteractive tzdata && \
|
||||||
/bin/ln -s /proc/self/mounts /etc/mtab && \
|
/bin/ln -s /proc/self/mounts /etc/mtab && \
|
||||||
|
@ -34,10 +37,13 @@ COPY --chown=builder / project/
|
||||||
|
|
||||||
# accept SDK licenses
|
# accept SDK licenses
|
||||||
ENV ANDROID_HOME /home/builder/android-sdk
|
ENV ANDROID_HOME /home/builder/android-sdk
|
||||||
RUN yes | /usr/bin/sdkmanager --licenses >/dev/null
|
RUN --mount=target=/home/builder/android-sdk,type=cache,uid=1000,gid=1000,sharing=locked \
|
||||||
|
yes | /usr/bin/sdkmanager --licenses >/dev/null
|
||||||
|
|
||||||
# build project
|
# build project
|
||||||
RUN if [ -e /dev/fuse ] ; \
|
RUN --mount=target=/home/builder/android-sdk,type=cache,uid=1000,gid=1000,sharing=locked \
|
||||||
|
--mount=target=/home/builder/.gradle,type=cache,uid=1000,gid=1000,sharing=locked \
|
||||||
|
if [ -e /dev/fuse ] ; \
|
||||||
then /bin/mv project project.u && /bin/mkdir project && \
|
then /bin/mv project project.u && /bin/mkdir project && \
|
||||||
/usr/bin/disorderfs --sort-dirents=yes --reverse-dirents=no project.u project ; \
|
/usr/bin/disorderfs --sort-dirents=yes --reverse-dirents=no project.u project ; \
|
||||||
fi && \
|
fi && \
|
||||||
|
@ -48,4 +54,4 @@ RUN if [ -e /dev/fuse ] ; \
|
||||||
|
|
||||||
# export build output
|
# export build output
|
||||||
FROM scratch AS export-stage
|
FROM scratch AS export-stage
|
||||||
COPY --from=build-stage /home/builder/project/oeffi/build/outputs/apk/*/release/oeffi-*-release-unsigned.apk /
|
COPY --from=build-stage /home/builder/project/oeffi/build/outputs/apk/release/oeffi-release-unsigned.apk /
|
||||||
|
|
|
@ -20,12 +20,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
package="de.schildbach.oeffi"
|
package="de.schildbach.oeffi"
|
||||||
android:versionCode="120115"
|
android:versionCode="130011"
|
||||||
android:versionName="12.1.15">
|
android:versionName="13.0.11">
|
||||||
|
|
||||||
<uses-sdk
|
<uses-sdk
|
||||||
android:minSdkVersion="21"
|
android:minSdkVersion="24"
|
||||||
android:targetSdkVersion="34" />
|
android:targetSdkVersion="35" />
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
@ -116,8 +116,8 @@
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:configChanges="keyboard|keyboardHidden"
|
android:configChanges="keyboard|keyboardHidden"
|
||||||
android:label="@string/station_details_activity_title"
|
android:label="@string/station_details_activity_title"
|
||||||
android:taskAffinity="de.schildbach.oeffi.stations">
|
android:taskAffinity="de.schildbach.oeffi.stations"
|
||||||
</activity>
|
android:showWhenLocked="true" />
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".stations.FavoriteStationsActivity"
|
android:name=".stations.FavoriteStationsActivity"
|
||||||
|
@ -181,6 +181,7 @@
|
||||||
<intent-filter android:label="@string/directions_intentfilter_title">
|
<intent-filter android:label="@string/directions_intentfilter_title">
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
<data android:scheme="geo" />
|
<data android:scheme="geo" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
@ -195,7 +196,8 @@
|
||||||
android:name=".directions.TripDetailsActivity"
|
android:name=".directions.TripDetailsActivity"
|
||||||
android:configChanges="keyboard|keyboardHidden"
|
android:configChanges="keyboard|keyboardHidden"
|
||||||
android:label="@string/trip_details_title"
|
android:label="@string/trip_details_title"
|
||||||
android:taskAffinity="de.schildbach.oeffi.directions" />
|
android:taskAffinity="de.schildbach.oeffi.directions"
|
||||||
|
android:showWhenLocked="true" />
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".directions.DirectionsShortcutActivity"
|
android:name=".directions.DirectionsShortcutActivity"
|
||||||
|
@ -242,7 +244,8 @@
|
||||||
android:configChanges="keyboard|keyboardHidden"
|
android:configChanges="keyboard|keyboardHidden"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop"
|
||||||
android:taskAffinity="de.schildbach.oeffi.plans"
|
android:taskAffinity="de.schildbach.oeffi.plans"
|
||||||
android:theme="@style/My.Theme.Fullscreen">
|
android:theme="@style/My.Theme.Fullscreen"
|
||||||
|
android:showWhenLocked="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.SEARCH" />
|
<action android:name="android.intent.action.SEARCH" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
|
@ -1,4 +1,31 @@
|
||||||
v12.1.15
|
v13.0.11
|
||||||
|
|
||||||
|
* Add region again: Poland (PKP)
|
||||||
|
|
||||||
|
v13.0.4-v13.0.10
|
||||||
|
|
||||||
|
* Target Android 15.
|
||||||
|
|
||||||
|
v13.0.3
|
||||||
|
|
||||||
|
* Remove regions: Czech Republic, Italy, Paris, Spain, Nicaragua
|
||||||
|
|
||||||
|
v13.0.2
|
||||||
|
|
||||||
|
* Remove region: Finland
|
||||||
|
|
||||||
|
v13.0-v13.0.1
|
||||||
|
|
||||||
|
* Running the app now requires Android 7.0 (Nougat) or higher.
|
||||||
|
* Building the app now requires OpenJDK 17.
|
||||||
|
* Remove `google` flavor.
|
||||||
|
* Git: rename `master` to `main` branch.
|
||||||
|
|
||||||
|
v12.1.18-v12.1.21
|
||||||
|
|
||||||
|
* Remove region: Belgium (SNCB)
|
||||||
|
|
||||||
|
v12.1.15-v12.1.17
|
||||||
|
|
||||||
* Migrate region Augsburg from EFA to Hafas
|
* Migrate region Augsburg from EFA to Hafas
|
||||||
|
|
||||||
|
|
|
@ -45,25 +45,10 @@ VVT|de-AT|Tirol|disabled
|
||||||
SVV|de-AT|Salzburg|disabled
|
SVV|de-AT|Salzburg|disabled
|
||||||
VMOBIL|de-AT|Vorarlberg;Bregenz|disabled
|
VMOBIL|de-AT|Vorarlberg;Bregenz|disabled
|
||||||
|
|
||||||
# CZ
|
|
||||||
CZECH_REPUBLIC|cs-CZ|Tschechien;Praha;Prag|beta
|
|
||||||
|
|
||||||
# CH
|
# CH
|
||||||
VBL|de-CH|Luzern
|
VBL|de-CH|Luzern
|
||||||
ZVV|de-CH|Zürich
|
ZVV|de-CH|Zürich
|
||||||
|
|
||||||
# IT
|
|
||||||
IT|it-IT|IT|alpha
|
|
||||||
|
|
||||||
# FR
|
|
||||||
PARIS|fr-FR|FR|alpha
|
|
||||||
|
|
||||||
# ES
|
|
||||||
SPAIN|es-ES|ES|alpha
|
|
||||||
|
|
||||||
# BE
|
|
||||||
SNCB|be-BE|BE|alpha
|
|
||||||
|
|
||||||
# LU
|
# LU
|
||||||
LU|lb-LU|LU;Luxemburg
|
LU|lb-LU|LU;Luxemburg
|
||||||
|
|
||||||
|
@ -76,13 +61,13 @@ DSB|da-DK|DK;København
|
||||||
# SE
|
# SE
|
||||||
SE|sv-SE|SE;Stockholm
|
SE|sv-SE|SE;Stockholm
|
||||||
|
|
||||||
# FI
|
|
||||||
FINLAND|fi-FI|FI;Helsinki|beta
|
|
||||||
|
|
||||||
# GB
|
# GB
|
||||||
TLEM|en-UK|GB;Greater London;Derbyshire;Leicestershire;Rutland;Northamptonshire;Nottinghamshire;Lincolnshire;Berkshire;Buckinghamshire;East Sussex;Hampshire;Isle of Wight;Kent;Oxfordshire;Surrey;West Sussex;Essex;Hertfordshire;Bedfordshire;Cambridgeshire;Norfolk;Suffolk;Somerset;Gloucestershire;Wiltshire;Dorset;Devon;Cornwall;West Devon;Stowford;Eastleigh;Swindon;Gloucester;Plymouth;Torbay;Bournemouth;Poole;Birmingham
|
TLEM|en-UK|GB;Greater London;Derbyshire;Leicestershire;Rutland;Northamptonshire;Nottinghamshire;Lincolnshire;Berkshire;Buckinghamshire;East Sussex;Hampshire;Isle of Wight;Kent;Oxfordshire;Surrey;West Sussex;Essex;Hertfordshire;Bedfordshire;Cambridgeshire;Norfolk;Suffolk;Somerset;Gloucestershire;Wiltshire;Dorset;Devon;Cornwall;West Devon;Stowford;Eastleigh;Swindon;Gloucester;Plymouth;Torbay;Bournemouth;Poole;Birmingham
|
||||||
MERSEY|en-UK|GB;Liverpool|beta
|
MERSEY|en-UK|GB;Liverpool|beta
|
||||||
|
|
||||||
|
# PL
|
||||||
|
PL|pl-PL|PL;Warschau
|
||||||
|
|
||||||
# AE
|
# AE
|
||||||
DUB|ae-AE|AE;Dubai|beta
|
DUB|ae-AE|AE;Dubai|beta
|
||||||
|
|
||||||
|
@ -94,6 +79,3 @@ CMTA|us-US|US;Texas;Austin|beta
|
||||||
# AU
|
# AU
|
||||||
SYDNEY|en-AU|AU;New South Wales;Sydney
|
SYDNEY|en-AU|AU;New South Wales;Sydney
|
||||||
MET|en-AU|AU;Victoria;Melbourne|disabled
|
MET|en-AU|AU;Victoria;Melbourne|disabled
|
||||||
|
|
||||||
# NI
|
|
||||||
NICARAGUA|es-NI|NI;Managua|beta
|
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
|
|
||||||
# de
|
# de
|
||||||
|
|
||||||
berlin_bsu_ab|52.520134,13.388018|2020-10-31|Berlin S+U-Bahn-Netz (AB)|Berliner Verkehrsbetriebe||BVG
|
berlin_bsu_ab|52.520134,13.388018|2022-12-11|Berlin S+U-Bahn-Netz (AB)|Berliner Verkehrsbetriebe||BVG
|
||||||
berlin_bsu_abc|52.520134,13.388018|2019-10-31|Berlin S+U-Bahn-Netz (ABC)|Berliner Verkehrsbetriebe||BVG
|
berlin_bsu_abc|52.520134,13.388018|2022-12-11|Berlin S+U-Bahn-Netz (ABC)|Berliner Verkehrsbetriebe||BVG
|
||||||
berlin_tram|52.521152,13.412832|2020-04-14|Berlin Tram-Netz|Berliner Verkehrsbetriebe||BVG
|
berlin_tram|52.521152,13.412832|2022-12-16|Berlin Tram-Netz|Berliner Verkehrsbetriebe||BVG
|
||||||
berlin_bus|52.5071378,13.3318680|2019-12-15|Berlin Bus-Netz|Berliner Verkehrsbetriebe||BVG
|
berlin_bus|52.5071378,13.3318680|2022-12-09|Berlin Bus-Netz|Berliner Verkehrsbetriebe||BVG
|
||||||
berlin_nacht|52.520134,13.388018|2020-10-31|Berlin Nachtverkehr (geografisch)|Berliner Verkehrsbetriebe||BVG
|
berlin_nacht|52.520134,13.388018|2022-12-09|Berlin Nachtverkehr (geografisch)|Berliner Verkehrsbetriebe||BVG
|
||||||
berlin_transitmap|52.520134,13.388018|2018-12-09|New Berlin rapid transit route map|berlintransitmap.de
|
berlin_transitmap|52.520134,13.388018|2018-12-09|New Berlin rapid transit route map|berlintransitmap.de
|
||||||
berlin_anbindung_ber|52.363127,13.50498|2020-11|BER (Flughafen Berlin Brandenburg) Anbindung|Robert Aehnelt, Creative Commons|https://upload.wikimedia.org/wikipedia/commons/e/e0/BER_Anbindung_2020.jpg
|
berlin_anbindung_ber|52.363127,13.50498|2020-11|BER (Flughafen Berlin Brandenburg) Anbindung|Robert Aehnelt, Creative Commons|https://upload.wikimedia.org/wikipedia/commons/e/e0/BER_Anbindung_2020.jpg
|
||||||
brandenburg_regionalverkehr|52.525578,13.369523|2019-12-15|Brandenburg Regionalverkehr|Verkehrsverbund Berlin-Brandenburg||VBB
|
brandenburg_regionalverkehr|52.525578,13.369523|2019-12-15|Brandenburg Regionalverkehr|Verkehrsverbund Berlin-Brandenburg||VBB
|
||||||
|
@ -32,6 +32,7 @@ leipzig_tag|51.345476,12.379382|2020-11-18|Leipzig Linien Tag|Leipziger Verkehrs
|
||||||
leipzig_nacht|51.345476,12.379382|2020-11-18|Leipzig Linien Nacht|Leipziger Verkehrsbetriebe GmbH
|
leipzig_nacht|51.345476,12.379382|2020-11-18|Leipzig Linien Nacht|Leipziger Verkehrsbetriebe GmbH
|
||||||
halle_tag|51.477347,11.985263|2020-08-27|Halle Linien Tag|SWH/HAVAG
|
halle_tag|51.477347,11.985263|2020-08-27|Halle Linien Tag|SWH/HAVAG
|
||||||
halle_nacht|51.477347,11.985263|2020-08-27|Halle Linien Nacht|SWH/HAVAG
|
halle_nacht|51.477347,11.985263|2020-08-27|Halle Linien Nacht|SWH/HAVAG
|
||||||
|
jena|50.9248984,11.587666|2024|Jena|Jenaer Nahverkehr GmbH
|
||||||
muenchen_schnellbahn|48.140377,11.560643|2019-12|München Schnellbahn|MVV
|
muenchen_schnellbahn|48.140377,11.560643|2019-12|München Schnellbahn|MVV
|
||||||
muenchen_tram_metrobus|48.140377,11.560643|2019-12-15|München Tram/MetroBus|MVV/MVG
|
muenchen_tram_metrobus|48.140377,11.560643|2019-12-15|München Tram/MetroBus|MVV/MVG
|
||||||
muenchen_nacht|48.140377,11.560643|2019-12-15|München Nachtnetz|MVG
|
muenchen_nacht|48.140377,11.560643|2019-12-15|München Nachtnetz|MVG
|
||||||
|
@ -42,10 +43,10 @@ augsburg|48.364936,10.893713|2018-12|Augsburg Innenraum|AVV GmbH
|
||||||
augsburg_nachtbus|48.364936,10.893713|2018-12|Augsburg Nachtbus|AVV GmbH
|
augsburg_nachtbus|48.364936,10.893713|2018-12|Augsburg Nachtbus|AVV GmbH
|
||||||
ulm_stadt|48.398610,9.983322|2018-12|Ulm / Neu-Ulm Stadtnetz|Donau-Iller-Nahverkehrsverbund GmbH
|
ulm_stadt|48.398610,9.983322|2018-12|Ulm / Neu-Ulm Stadtnetz|Donau-Iller-Nahverkehrsverbund GmbH
|
||||||
ulm_regional|48.398610,9.983322|2018-11-02|Ulm Regionalnetz|Donau-Iller-Nahverkehrsverbund GmbH
|
ulm_regional|48.398610,9.983322|2018-11-02|Ulm Regionalnetz|Donau-Iller-Nahverkehrsverbund GmbH
|
||||||
nuernberg_gesamtraum|49.445719,11.082618|2018-01-01|Nürnberg Schienennetz Gesamtraum|Verkehrsverbund Großraum Nürnberg||VGN
|
nuernberg_gesamtraum|49.445719,11.082618|2024-01-01|Nürnberg Schienennetz Gesamtraum|Verkehrsverbund Großraum Nürnberg||VGN
|
||||||
nuernberg_verkehrsnetz|49.445719,11.082618|2019-12-01|Nürnberg, Fürth, Stein Verkehrsnetz|Verkehrsverbund Großraum Nürnberg||VGN
|
nuernberg_verkehrsnetz|49.445719,11.082618|2023-12-10|Nürnberg-Fürth Liniennetz|Verkehrsverbund Großraum Nürnberg||VGN
|
||||||
nuernberg_schiene|49.445719,11.082618|2019-12-01|Nürnberg, Fürth Schienennetz|Verkehrsverbund Großraum Nürnberg||VGN
|
nuernberg_schiene|49.445719,11.082618|2023-12-10|Nürnberg-Fürth Schienennetz|Verkehrsverbund Großraum Nürnberg||VGN
|
||||||
nuernberg_nightliner|49.445719,11.082618|2019-12-01|Nürnberg, Fürth Nightliner|Verkehrsverbund Großraum Nürnberg||VGN
|
nuernberg_nightliner|49.445719,11.082618|2023-12|Nürnberg-Fürth Nightliner|Verkehrsverbund Großraum Nürnberg||VGN
|
||||||
fuerth_verkehrsnetz|49.469832,10.990178|2019-12-01|Fürth Verkehrsnetz|Verkehrsverbund Großraum Nürnberg||VGN
|
fuerth_verkehrsnetz|49.469832,10.990178|2019-12-01|Fürth Verkehrsnetz|Verkehrsverbund Großraum Nürnberg||VGN
|
||||||
fuerth_nightliner|49.469832,10.990178|2016-12-11|Fürth Nightliner|Verkehrsverbund Großraum Nürnberg||VGN
|
fuerth_nightliner|49.469832,10.990178|2016-12-11|Fürth Nightliner|Verkehrsverbund Großraum Nürnberg||VGN
|
||||||
erlangen_verkehrsnetz|49.595851,11.001701|2019-12-01|Erlangen Verkehrsnetz|Verkehrsverbund Großraum Nürnberg||VGN
|
erlangen_verkehrsnetz|49.595851,11.001701|2019-12-01|Erlangen Verkehrsnetz|Verkehrsverbund Großraum Nürnberg||VGN
|
||||||
|
@ -59,26 +60,26 @@ regensburg_nacht|49.011489,12.09971|2018-04-14|Regensburg Nachtbus|Regensburger
|
||||||
bremen|53.08319,8.81360|2020-03|Bremen Liniennetz|BSAG
|
bremen|53.08319,8.81360|2020-03|Bremen Liniennetz|BSAG
|
||||||
bremen_nacht|53.08319,8.81360||Bremen Nachtnetz|BSAG
|
bremen_nacht|53.08319,8.81360||Bremen Nachtnetz|BSAG
|
||||||
bremen_stadt|53.08319,8.81360|2020-02|Bremen Stadtnetz (geografisch)|BSAG
|
bremen_stadt|53.08319,8.81360|2020-02|Bremen Stadtnetz (geografisch)|BSAG
|
||||||
hamburg_usar|53.552946,10.006782|2022-01-01|Hamburg Schnellbahn/Regional|HVV
|
hamburg_usar|53.552946,10.006782|2023-12-10|Hamburg Schnellbahn/Regional|HVV
|
||||||
hamburg_metrobus_gross|53.552946,10.006782|2021-12-12|Hamburg MetroBus Liniennetz|HVV
|
hamburg_metrobus_gross|53.552946,10.006782|2023-12-10|Hamburg MetroBus Liniennetz|HVV
|
||||||
hamburg_region|53.552946,10.006782|2022-01-01|Hamburg Regionalverkehr|HVV
|
hamburg_region|53.552946,10.006782|2023-12-10|Hamburg Regionalverkehr|HVV
|
||||||
hamburg_weiss_bus|53.552946,10.006782|2021-12-12|Hamburg Busliniennetz|Lucas Weiss
|
hamburg_weiss_bus|53.552946,10.006782|2024-01-08|Hamburg Busliniennetz|Lucas Weiss
|
||||||
kiel_liniennetz|54.313282,10.132341|2019-12|Kiel Liniennetz|KVG
|
kiel_liniennetz|54.313282,10.132341|2023-12|Kiel Liniennetz|KVG
|
||||||
kiel_nacht|54.313282,10.132341|2019-12|Kiel Nachtliniennetz|KVG
|
kiel_nacht|54.313282,10.132341|2022-12|Kiel Nachtliniennetz|KVG
|
||||||
luebeck_region|53.858795,10.664646|2018-12-09|Lübeck Liniennetz Region|LVG, nah.sh, Stadtverkehr Lübeck||SH
|
luebeck_region|53.858795,10.664646|2018-12-09|Lübeck Liniennetz Region|LVG, nah.sh, Stadtverkehr Lübeck||SH
|
||||||
rostock_vvw_liniennetz|54.078139,12.131724|2022-08-05|Rostock Liniennetz|Verkehrsverbund Warnow
|
rostock_vvw_liniennetz|54.078139,12.131724|2023-08-28|Rostock Liniennetz|Verkehrsverbund Warnow
|
||||||
rostock_vvw_region|54.078139,12.131724|2022-01-01|Rostock Region|Verkehrsverbund Warnow
|
rostock_vvw_region|54.078139,12.131724|2023-08-28|Rostock Region|Verkehrsverbund Warnow
|
||||||
rostock_region|54.078139,12.131724|2022-08-15|Rostock und Umgebung|Lucas Weiss, CC-BY-NC-SA 4.0
|
rostock_region|54.078139,12.131724|2023-12-10|Rostock und Umgebung|Lucas Weiss, CC-BY-NC-SA 4.0
|
||||||
wismar|53.903943,11.391928||Wismar Stadtverkehr|NAHBUS Nordwestmecklenburg GmbH
|
wismar|53.903943,11.391928||Wismar Stadtverkehr|NAHBUS Nordwestmecklenburg GmbH
|
||||||
nordwestmecklenburg|53.903943,11.391928|2016-03-14|Nordwestmecklenburg Busnetz|NAHBUS Nordwestmecklenburg GmbH
|
nordwestmecklenburg|53.903943,11.391928|2016-03-14|Nordwestmecklenburg Busnetz|NAHBUS Nordwestmecklenburg GmbH
|
||||||
osnabrueck|52.272832,8.061726|2018-08-09|Osnabrück Liniennetz|Stadtwerke Osnabrück
|
osnabrueck|52.272832,8.061726|2018-08-09|Osnabrück Liniennetz|Stadtwerke Osnabrück
|
||||||
osnabrueck_nacht|52.272832,8.061726|2018-08-09|Osnabrück NachtBus-Netz|Stadtwerke Osnabrück
|
osnabrueck_nacht|52.272832,8.061726|2018-08-09|Osnabrück NachtBus-Netz|Stadtwerke Osnabrück
|
||||||
stuttgart_verbund|48.784068,9.181713|2018-12|Stuttgart Verbund-Liniennetz|Verkehrs- und Tarifverbund Stuttgart GmbH
|
stuttgart_verbund|48.784068,9.181713|2023-12|Stuttgart Verbund-Liniennetz|Verkehrs- und Tarifverbund Stuttgart GmbH
|
||||||
stuttgart_nacht|48.77861,9.179803|2018-12|Stuttgart Nachtverkehr|Verkehrs- und Tarifverbund Stuttgart GmbH
|
stuttgart_nacht|48.77861,9.179803|2023-12|Stuttgart Nachtverkehr|Verkehrs- und Tarifverbund Stuttgart GmbH
|
||||||
ringzug|48.113621,8.660603|2013-08|Ringzug|Zweckverband Ringzug
|
ringzug|48.113621,8.660603|2013-08|Ringzug|Zweckverband Ringzug
|
||||||
hannover_stadtbahn|52.376715,9.741168|2021-12|Hannover Stadtbahnnetz|GVH
|
hannover_stadtbahn|52.376715,9.741168|2023-12-10|Hannover Stadtbahnnetz|GVH
|
||||||
hannover_bus|52.376715,9.741168|2021-12|Hannover Busnetz|GVH
|
hannover_bus|52.376715,9.741168|2023-12-10|Hannover Busnetz|GVH
|
||||||
hannover_regional|52.376715,9.741168|2021-12|Hannover Regional- und S-Bahn-Linien|GVH
|
hannover_regional|52.376715,9.741168|2023-12-10|Hannover Regional- und S-Bahn-Linien|GVH
|
||||||
celle_stadt|52.620411,10.059814|2019-01|Celle Liniennetz Stadt|CeBus
|
celle_stadt|52.620411,10.059814|2019-01|Celle Liniennetz Stadt|CeBus
|
||||||
celle_region|52.620411,10.059814|2018-01|Celle Liniennetz Region|CeBus
|
celle_region|52.620411,10.059814|2018-01|Celle Liniennetz Region|CeBus
|
||||||
goettingen|51.536290,9.926981|2019-12-15|Göttingen Liniennetz|Göttinger Verkehrsbetriebe GmbH
|
goettingen|51.536290,9.926981|2019-12-15|Göttingen Liniennetz|Göttinger Verkehrsbetriebe GmbH
|
||||||
|
@ -89,16 +90,24 @@ bielefeld_netz|52.029241,8.532835|2018-06|Bielefeld Netzplan (geografisch)|moBie
|
||||||
essen_schiene|51.451355,7.014793|2015-06-14|Essen SchienenNetz|EVAG
|
essen_schiene|51.451355,7.014793|2015-06-14|Essen SchienenNetz|EVAG
|
||||||
essen_tag|51.451355,7.014793|2015-06-14|Essen TagNetz|EVAG
|
essen_tag|51.451355,7.014793|2015-06-14|Essen TagNetz|EVAG
|
||||||
essen_nacht|51.451355,7.014793|2013-06-09|Essen NachtNetz|EVAG
|
essen_nacht|51.451355,7.014793|2013-06-09|Essen NachtNetz|EVAG
|
||||||
krefeld_stadt|51.323714,6.565800|2013-06|Krefeld Liniennetz Stadt|SWK/VRR
|
dortmund_schiene|51.517843,7.459272|2023-01|Dortmund Schienennetz|DSW21
|
||||||
krefeld_stadt_nacht|51.323714,6.565800|2013-06|Krefeld Nachtnetz|SWK/VRR
|
dortmund_tag|51.517843,7.459272|2023-12|Dortmund Netzplan Tag|DSW21
|
||||||
|
dortmund_nacht|51.517843,7.459272|2021-01|Dortmund Netzplan Nacht|DSW21
|
||||||
|
krefeld_stadt|51.323714,6.565800|2021-05|Krefeld Liniennetz Stadt|SWK/VRR
|
||||||
|
krefeld_stadt_nacht|51.323714,6.565800|2021-05|Krefeld Nachtnetz|SWK/VRR
|
||||||
frankfurt_liniennetz|50.106318,8.662139|2020-12-13|Frankfurt am Main Liniennetz|traffiQ
|
frankfurt_liniennetz|50.106318,8.662139|2020-12-13|Frankfurt am Main Liniennetz|traffiQ
|
||||||
frankfurt_flughafen_bus|50.037936,8.559958|2020-12-13|Frankfurt Flughafen Buslinien|traffiQ
|
frankfurt_flughafen_bus|50.037936,8.559958|2020-12-13|Frankfurt Flughafen Buslinien|traffiQ
|
||||||
|
gelsenkirchen_linienplan_tag|51.504768,7.102298|2023-01|Gelsenkirchen Linienplan Tag|Vestische
|
||||||
|
gelsenkirchen_linienplan_nacht|51.504768,7.102298|2023-01|Gelsenkirchen Linienplan Nacht|Vestische
|
||||||
|
recklinghausen_linienplan|51.616096,7.203273|2023-06|Recklinghausen Linienplan|Vestische
|
||||||
|
waltrop_linienplan|51.622799,7.390409|2022-08|Waltrop Linienplan|Vestische
|
||||||
rmv_schnellbahn|50.106318,8.662139|2020-12-13|Rhein-Main Schnellbahn|RMV
|
rmv_schnellbahn|50.106318,8.662139|2020-12-13|Rhein-Main Schnellbahn|RMV
|
||||||
rmv_regional|50.106318,8.662139|2020-12-13|Rhein-Main Regional|RMV
|
rmv_regional|50.106318,8.662139|2020-12-13|Rhein-Main Regional|RMV
|
||||||
rmv_nacht|50.106318,8.662139|2020-12-13|Rhein-Main Nachtnetz|RMV
|
rmv_nacht|50.106318,8.662139|2020-12-13|Rhein-Main Nachtnetz|RMV
|
||||||
mainz|50.001395,8.258818|2019-12-15|Mainz Tag|Mainzer Verkehrsgesellschaft mbH
|
mainz|50.001395,8.258818|2019-12-15|Mainz Tag|Mainzer Verkehrsgesellschaft mbH
|
||||||
mainz_nacht|50.001395,8.258818|2019-12-15|Mainz Nacht|Mainzer Verkehrsgesellschaft mbH
|
mainz_nacht|50.001395,8.258818|2019-12-15|Mainz Nacht|Mainzer Verkehrsgesellschaft mbH
|
||||||
koeln_schnellverkehr|50.943579,6.95796|2019-12-15|Köln Schnellverkehr|Verkehrsverbund Rhein-Sieg GmbH
|
koeln_schnellverkehr|50.943579,6.95796|2019-12-15|Köln Schnellverkehr|Verkehrsverbund Rhein-Sieg GmbH
|
||||||
|
koeln_stadtbahn|50.943579,6.95796|2024-04-02|Köln Stadtbahn|Kölner Verkehrs-Betriebe AG
|
||||||
koeln_bus|50.943579,6.95796|2019-12-15|Köln Busnetz|Verkehrsverbund Rhein-Sieg GmbH
|
koeln_bus|50.943579,6.95796|2019-12-15|Köln Busnetz|Verkehrsverbund Rhein-Sieg GmbH
|
||||||
bonn_schnellverkehr|50.732784,7.096447|2019-12-15|Bonn Schnellverkehr|Verkehrsverbund Rhein-Sieg GmbH
|
bonn_schnellverkehr|50.732784,7.096447|2019-12-15|Bonn Schnellverkehr|Verkehrsverbund Rhein-Sieg GmbH
|
||||||
bonn_bus|50.732784,7.096447|2019-12-15|Bonn Busnetz|Verkehrsverbund Rhein-Sieg GmbH
|
bonn_bus|50.732784,7.096447|2019-12-15|Bonn Busnetz|Verkehrsverbund Rhein-Sieg GmbH
|
||||||
|
@ -106,29 +115,29 @@ leverkusen_bus|51.036197,6.994385|2019-12-15|Leverkusen Busnetz|Verkehrsverbund
|
||||||
nrw_regio|51.429807,6.775253|2016-12|NRW Busse & Bahnen|VRS
|
nrw_regio|51.429807,6.775253|2016-12|NRW Busse & Bahnen|VRS
|
||||||
aachen_schnellverkehr|50.768399,6.090705|2018-12|Aachen Schnellverkehr|Aachener Verkehrsverbund GmbH||AVV_AACHEN
|
aachen_schnellverkehr|50.768399,6.090705|2018-12|Aachen Schnellverkehr|Aachener Verkehrsverbund GmbH||AVV_AACHEN
|
||||||
aachen_region|50.768399,6.090705|2018-12|Aachen Region, Bus und Bahn|Aachener Verkehrsverbund GmbH||AVV_AACHEN
|
aachen_region|50.768399,6.090705|2018-12|Aachen Region, Bus und Bahn|Aachener Verkehrsverbund GmbH||AVV_AACHEN
|
||||||
darmstadt|49.872582,8.630916|2021-12-12|Darmstadt Stadt|Darmstadt-Dieburger Nahverkehrsorganisation
|
darmstadt|49.872582,8.630916|2023-12-10|Darmstadt Stadt|Darmstadt-Dieburger Nahverkehrsorganisation
|
||||||
darmstadt_nacht|49.872582,8.630916|2021-12-12|Darmstadt NightLiner|Darmstadt-Dieburger Nahverkehrsorganisation
|
darmstadt_nacht|49.872582,8.630916|2023-12-10|Darmstadt NightLiner|Darmstadt-Dieburger Nahverkehrsorganisation
|
||||||
darmstadt_region|49.872582,8.630916|2021-12-12|Darmstadt-Dieburg Region|Darmstadt-Dieburger Nahverkehrsorganisation
|
darmstadt_region|49.872582,8.630916|2023-12-10|Darmstadt-Dieburg Region|Darmstadt-Dieburger Nahverkehrsorganisation
|
||||||
duesseldorf|51.230794,6.769025|2018-08-29|Düsseldorf Liniennetz|Rheinbahn
|
duesseldorf|51.230794,6.769025|2024-01-07|Düsseldorf Liniennetz|Rheinbahn
|
||||||
duesseldorf_nacht|51.230794,6.769025|2018-08-29|Düsseldorf Nachtlinien|Rheinbahn
|
duesseldorf_nacht|51.230794,6.769025|2024-01-07|Düsseldorf Nachtlinien|Rheinbahn
|
||||||
duisburg|51.428813,6.772554|2018-03-01|Duisburg Liniennetz|DVG/VRR
|
duisburg|51.428813,6.772554|2018-03-01|Duisburg Liniennetz|DVG/VRR
|
||||||
schwerin|53.634476,11.407313|2018-07|Schwerin Liniennetz|Nahverkehr Schwerin GmbH
|
schwerin|53.634476,11.407313|2018-07|Schwerin Liniennetz|Nahverkehr Schwerin GmbH
|
||||||
magdeburg_tag|52.130783,11.627347|2021-12-24|Magdeburg Liniennetz|Magdeburger Verkehrsbetriebe GmbH & Co. KG
|
magdeburg_tag|52.130783,11.627347|2021-12-24|Magdeburg Liniennetz|Magdeburger Verkehrsbetriebe GmbH & Co. KG
|
||||||
magdeburg_nacht|52.130783,11.627347|2021-12-24|Magdeburg Nacht-Liniennetz|Magdeburger Verkehrsbetriebe GmbH & Co. KG
|
magdeburg_nacht|52.130783,11.627347|2021-12-24|Magdeburg Nacht-Liniennetz|Magdeburger Verkehrsbetriebe GmbH & Co. KG
|
||||||
magdeburg_verbund|52.130783,11.627347|2020-12|Magdeburg Verbund-Liniennetz|Nahverkehrsservice Sachsen-Anhalt GmbH
|
magdeburg_verbund|52.130783,11.627347|2020-12|Magdeburg Verbund-Liniennetz|Nahverkehrsservice Sachsen-Anhalt GmbH
|
||||||
hagen|51.362675,7.461087|2022-06-12|Hagen Liniennetz|Hagener Straßenbahn AG
|
hagen|51.362675,7.461087|2024-01-08|Hagen Liniennetz|Hagener Straßenbahn AG
|
||||||
hagen_nacht|51.362675,7.461087|2022-06-12|Hagen Nachtnetz|Hagener Straßenbahn AG
|
hagen_nacht|51.362675,7.461087|2024-01-08|Hagen Nachtnetz|Hagener Straßenbahn AG
|
||||||
braunschweig_gesamt|52.252187,10.539705|2021-04-11|Braunschweig Liniennetz|Braunschweiger Verkehrs-GmbH
|
braunschweig_gesamt|52.252187,10.539705|2024-03-18|Braunschweig Liniennetz|Braunschweiger Verkehrs-GmbH
|
||||||
braunschweig_nacht|52.252187,10.539705|2021-04-11|Braunschweig Nachtnetz|Braunschweiger Verkehrs-GmbH
|
braunschweig_nacht|52.252187,10.539705|2024-03-18|Braunschweig Nachtnetz|Braunschweiger Verkehrs-GmbH
|
||||||
salzgitter|52.15116,10.332488|2017-12|Salzgitter Liniennetz|KVG Braunschweig
|
salzgitter|52.15116,10.332488|2017-12|Salzgitter Liniennetz|KVG Braunschweig
|
||||||
wolfenbuettel|52.15898,10.532012|2021-10|Wolfenbüttel Liniennetz|KVG Braunschweig
|
wolfenbuettel|52.15898,10.532012|2021-10|Wolfenbüttel Liniennetz|KVG Braunschweig
|
||||||
helmstedt|52.222331,11.010690|2015-12|Helmstedt Liniennetz|KVG Braunschweig
|
helmstedt|52.222331,11.010690|2015-12|Helmstedt Liniennetz|KVG Braunschweig
|
||||||
harz|51.888518,10.554843|2018-06|Harz Liniennetz|KVG Braunschweig
|
harz|51.888518,10.554843|2018-06|Harz Liniennetz|KVG Braunschweig
|
||||||
wolfsburg|52.429484,10.788249|2018-08-09|Wolfsburg Liniennetz|WVG
|
wolfsburg|52.429484,10.788249|2018-08-09|Wolfsburg Liniennetz|WVG
|
||||||
karlsruhe_liniennetz|48.993988,8.400328|2021-12-12|Karlsruhe Liniennetz|Karlsruher Verkehrsverbund||KVV
|
karlsruhe_liniennetz|48.993988,8.400328|2022-12-11|Karlsruhe Liniennetz|Karlsruher Verkehrsverbund||KVV
|
||||||
karlsruhe_rolli|48.993988,8.400328|2021-12-12|Karlsruhe für mobilitätseingeschränkte Personen|Karlsruher Verkehrsverbund||KVV
|
karlsruhe_rolli|48.993988,8.400328|2021-12-12|Karlsruhe für mobilitätseingeschränkte Personen|Karlsruher Verkehrsverbund||KVV
|
||||||
karlsruhe_regio|48.993988,8.400328|2020-12-13|Karlsruhe Regionalverkehr|Karlsruher Verkehrsverbund||KVV
|
karlsruhe_regio|48.993988,8.400328|2020-12-13|Karlsruhe Regionalverkehr|Karlsruher Verkehrsverbund||KVV
|
||||||
karlsruhe_bus|49.009498,8.404073|2021-12-12|Karlsruhe Busnetz|Karlsruher Verkehrsverbund||KVV
|
karlsruhe_bus|49.009498,8.404073|2022-12-11|Karlsruhe Busnetz|Karlsruher Verkehrsverbund||KVV
|
||||||
karlsruhe_nightliner|49.009498,8.404073|2020-11-28|Karlsruhe Nightliner|Karlsruher Verkehrsverbund||KVV
|
karlsruhe_nightliner|49.009498,8.404073|2020-11-28|Karlsruhe Nightliner|Karlsruher Verkehrsverbund||KVV
|
||||||
badenbaden_busnetz|48.79014,8.19126|2021-02-18|Rastatt (Südlicher Landkreis) und Baden-Baden Busnetz|Karlsruher Verkehrsverbund||KVV
|
badenbaden_busnetz|48.79014,8.19126|2021-02-18|Rastatt (Südlicher Landkreis) und Baden-Baden Busnetz|Karlsruher Verkehrsverbund||KVV
|
||||||
rastatt_busnetz|48.86065,8.21525|2021-02-18|Karlsruhe (Südlicher Landkreis) und Rastatt (Nördlicher Landkreis) Busnetz|Karlsruher Verkehrsverbund||KVV
|
rastatt_busnetz|48.86065,8.21525|2021-02-18|Karlsruhe (Südlicher Landkreis) und Rastatt (Nördlicher Landkreis) Busnetz|Karlsruher Verkehrsverbund||KVV
|
||||||
|
@ -148,8 +157,8 @@ rhein_neckar_regio|49.481844,8.459115|2019-11|Rhein-Neckar Regionalverkehr|RNV G
|
||||||
|
|
||||||
# at
|
# at
|
||||||
|
|
||||||
linz|48.290893,14.291965|2018-10|Linz Verkehrslinienplan|Linz AG
|
linz|48.290893,14.291965|2024-01|Linz Verkehrslinienplan|Linz AG
|
||||||
linz_nacht|48.290893,14.291965|2016-12|Linz Nachtverkehr|Linz AG
|
linz_nacht|48.290893,14.291965|2024-01|Linz Nachtverkehr|Linz AG
|
||||||
innsbruck_liniennetz|47.26332,11.400951|2021|Innsbruck Liniennetz|Innsbrucker Verkehrsbetriebe GmbH
|
innsbruck_liniennetz|47.26332,11.400951|2021|Innsbruck Liniennetz|Innsbrucker Verkehrsbetriebe GmbH
|
||||||
innsbruck_tram|47.26332,11.400951|2012-12-15|Innsbruck Straßenbahn|Steve Stipsits|http://www.public-transport.at/netzplan_innsbruck_gross_aktuell.gif
|
innsbruck_tram|47.26332,11.400951|2012-12-15|Innsbruck Straßenbahn|Steve Stipsits|http://www.public-transport.at/netzplan_innsbruck_gross_aktuell.gif
|
||||||
graz|47.073371,15.416154|2018-09-08|Graz Liniennetz|Verbund Linie
|
graz|47.073371,15.416154|2018-09-08|Graz Liniennetz|Verbund Linie
|
||||||
|
@ -224,7 +233,7 @@ istanbul_rail|41.011939,28.984308|2015-09|Istanbul Rail Transit|Maximilian Dörr
|
||||||
|
|
||||||
# uk
|
# uk
|
||||||
|
|
||||||
london_tube|51.513507,-0.110264|2016-06|London Tube|TfL
|
london_tube|51.513507,-0.110264|2023-05|London Tube|TfL
|
||||||
london_overground|51.513507,-0.110264|2016-05|London Overground|TfL
|
london_overground|51.513507,-0.110264|2016-05|London Overground|TfL
|
||||||
london_rail|51.513507,-0.110264|2016-05|London Rail & Tube Services|TfL
|
london_rail|51.513507,-0.110264|2016-05|London Rail & Tube Services|TfL
|
||||||
london_bus|51.513507,-0.110264|2016|London Bus (geographical)|TfL
|
london_bus|51.513507,-0.110264|2016|London Bus (geographical)|TfL
|
||||||
|
@ -244,7 +253,7 @@ napoli_region|40.852780,14.271692||Napoli Region|Unico Campania
|
||||||
|
|
||||||
# fr
|
# fr
|
||||||
|
|
||||||
paris_metro_ratp|48.855414,2.34488|2014-01|Paris Metro|RATP
|
paris_metro_ratp|48.855414,2.34488|2022-12|Paris Metro|RATP
|
||||||
paris_metro|48.855414,2.34488|2012-12|Paris Metro|Nathan Kaufmann, Creative Commons
|
paris_metro|48.855414,2.34488|2012-12|Paris Metro|Nathan Kaufmann, Creative Commons
|
||||||
|
|
||||||
# po
|
# po
|
||||||
|
@ -280,7 +289,7 @@ losangeles_system|34.05427,-118.246715|2016-06|Los Angeles System|metro.net
|
||||||
losangeles_downtown|34.05427,-118.246715|2016-06|Los Angeles Downtown|metro.net
|
losangeles_downtown|34.05427,-118.246715|2016-06|Los Angeles Downtown|metro.net
|
||||||
losangeles_metro|34.05427,-118.246715|2016-05|Los Angeles Metro|metro.net|https://media.metro.net/riding_metro/maps/images/rail_map.gif
|
losangeles_metro|34.05427,-118.246715|2016-05|Los Angeles Metro|metro.net|https://media.metro.net/riding_metro/maps/images/rail_map.gif
|
||||||
losangeles_metro_metrolink|34.05427,-118.246715|2016-11|Los Angeles Metro & Rail|metro.net|https://media.metro.net/riding_metro/maps/images/metro_regionalrail_map.gif
|
losangeles_metro_metrolink|34.05427,-118.246715|2016-11|Los Angeles Metro & Rail|metro.net|https://media.metro.net/riding_metro/maps/images/metro_regionalrail_map.gif
|
||||||
newyork_subway|40.738452,-73.991919|2010-12|New York Subway (geographical)|MTA
|
newyork_subway|40.738452,-73.991919|2023-02|New York Subway (geographical)|MTA
|
||||||
philadelphia_regional|39.957386,-75.180488|2012-06|Philadelphia Regional Train & Rail Transit|SEPTA
|
philadelphia_regional|39.957386,-75.180488|2012-06|Philadelphia Regional Train & Rail Transit|SEPTA
|
||||||
chicago_downtown|41.878674,-87.640333|2016-02|Chicago Downtown|RTA Chicago
|
chicago_downtown|41.878674,-87.640333|2016-02|Chicago Downtown|RTA Chicago
|
||||||
chicago_trains|41.878674,-87.640333|2015-03|Chicago Train Connections|RTA Chicago
|
chicago_trains|41.878674,-87.640333|2015-03|Chicago Train Connections|RTA Chicago
|
||||||
|
|
|
@ -12,19 +12,22 @@ configurations {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation project(':public-transport-enabler')
|
implementation(project(':public-transport-enabler')) {
|
||||||
implementation 'androidx.annotation:annotation:1.7.0'
|
exclude group: 'org.slf4j', module: 'slf4j-api'
|
||||||
|
}
|
||||||
|
implementation 'androidx.annotation:annotation:1.8.2'
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.3.2'
|
implementation 'androidx.recyclerview:recyclerview:1.3.2'
|
||||||
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0'
|
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0'
|
||||||
implementation 'androidx.drawerlayout:drawerlayout:1.2.0'
|
implementation 'androidx.drawerlayout:drawerlayout:1.2.0'
|
||||||
implementation 'androidx.core:core:1.12.0'
|
implementation 'androidx.core:core:1.13.1'
|
||||||
implementation 'androidx.activity:activity:1.8.0'
|
implementation 'androidx.activity:activity:1.9.3'
|
||||||
//noinspection GradleDependency
|
//noinspection GradleDependency
|
||||||
implementation 'com.squareup.okhttp3:okhttp:3.12.13'
|
implementation 'com.squareup.okhttp3:okhttp:3.12.13'
|
||||||
//noinspection GradleDependency
|
//noinspection GradleDependency
|
||||||
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13'
|
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13'
|
||||||
implementation 'com.google.guava:guava:32.1.3-android'
|
implementation 'com.google.guava:guava:33.4.0-android'
|
||||||
implementation 'org.osmdroid:osmdroid-android:6.1.17'
|
implementation 'org.osmdroid:osmdroid-android:6.1.20'
|
||||||
|
//noinspection GradleDependency
|
||||||
implementation 'org.slf4j:slf4j-api:2.0.9'
|
implementation 'org.slf4j:slf4j-api:2.0.9'
|
||||||
implementation 'com.github.tony19:logback-android:3.0.0'
|
implementation 'com.github.tony19:logback-android:3.0.0'
|
||||||
testImplementation 'junit:junit:4.13.2'
|
testImplementation 'junit:junit:4.13.2'
|
||||||
|
@ -32,7 +35,7 @@ dependencies {
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 'android-34'
|
compileSdkVersion 'android-34'
|
||||||
buildToolsVersion '34.0.0'
|
buildToolsVersion '35.0.0'
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
generatedDensities = ['hdpi', 'xhdpi']
|
generatedDensities = ['hdpi', 'xhdpi']
|
||||||
|
@ -50,18 +53,6 @@ android {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
flavorDimensions 'flavor'
|
|
||||||
productFlavors {
|
|
||||||
aosp {
|
|
||||||
dimension 'flavor'
|
|
||||||
versionNameSuffix '-aosp'
|
|
||||||
}
|
|
||||||
google {
|
|
||||||
dimension 'flavor'
|
|
||||||
versionNameSuffix '-google'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
main {
|
main {
|
||||||
manifest.srcFile 'AndroidManifest.xml'
|
manifest.srcFile 'AndroidManifest.xml'
|
||||||
|
@ -72,12 +63,6 @@ android {
|
||||||
test {
|
test {
|
||||||
java.srcDirs = ['test']
|
java.srcDirs = ['test']
|
||||||
}
|
}
|
||||||
aosp {
|
|
||||||
java.srcDirs = ['src-aosp']
|
|
||||||
}
|
|
||||||
google {
|
|
||||||
java.srcDirs = ['src-google']
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
-dontwarn androidx.lifecycle.SavedStateHandle
|
-dontwarn androidx.lifecycle.SavedStateHandle
|
||||||
-dontwarn androidx.activity.Api34Impl
|
-dontwarn androidx.activity.Api34Impl
|
||||||
-dontwarn androidx.activity.BackEventCompat
|
-dontwarn androidx.activity.BackEventCompat
|
||||||
|
-dontnote androidx.activity.ImmLeaksCleaner$Companion$**
|
||||||
-dontwarn androidx.core.view.accessibility.AccessibilityNodeInfoCompat$AccessibilityActionCompat
|
-dontwarn androidx.core.view.accessibility.AccessibilityNodeInfoCompat$AccessibilityActionCompat
|
||||||
-dontwarn androidx.**$Api34Impl,androidx.**$Api34Impl$**
|
-dontwarn androidx.**$Api34Impl,androidx.**$Api34Impl$**
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.8 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.5 KiB |
|
@ -4,6 +4,7 @@
|
||||||
android:id="@+id/plans_layout"
|
android:id="@+id/plans_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:background="@color/bg_plan"
|
||||||
android:inAnimation="@android:anim/fade_in"
|
android:inAnimation="@android:anim/fade_in"
|
||||||
android:outAnimation="@android:anim/fade_out">
|
android:outAnimation="@android:anim/fade_out">
|
||||||
|
|
||||||
|
@ -24,7 +25,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="8dp"
|
android:paddingTop="8dp"
|
||||||
android:text="@string/plan_progress_loading"
|
android:text="@string/plan_progress_loading"
|
||||||
android:textColor="@color/fg_significant_on_dark"
|
android:textColor="@color/fg_significant_on_light"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -81,20 +81,10 @@
|
||||||
<string name="network_stv_comment">Lokal- und Regionalverkehr</string>
|
<string name="network_stv_comment">Lokal- und Regionalverkehr</string>
|
||||||
<string name="network_vmobil_label">Bregenz & Vorarlberg</string>
|
<string name="network_vmobil_label">Bregenz & Vorarlberg</string>
|
||||||
<string name="network_vmobil_comment">Nicht verfügbar, weil der VVV ausdrücklich darum gebeten hat, nicht in Öffi enthalten zu sein. Du kannst stattdessen die ÖBB verwenden, das funktioniert für Vorarlberg auch gut.</string>
|
<string name="network_vmobil_comment">Nicht verfügbar, weil der VVV ausdrücklich darum gebeten hat, nicht in Öffi enthalten zu sein. Du kannst stattdessen die ÖBB verwenden, das funktioniert für Vorarlberg auch gut.</string>
|
||||||
<string name="network_czech_republic_label">Prag</string>
|
|
||||||
<string name="network_czech_republic_comment">Lokal- und Regionalverkehr</string>
|
|
||||||
<string name="network_vbl_label">Luzern</string>
|
<string name="network_vbl_label">Luzern</string>
|
||||||
<string name="network_vbl_comment">nur Tram und Bus</string>
|
<string name="network_vbl_comment">nur Tram und Bus</string>
|
||||||
<string name="network_zvv_label">Zürich</string>
|
<string name="network_zvv_label">Zürich</string>
|
||||||
<string name="network_zvv_comment">Lokal- und Regionalverkehr</string>
|
<string name="network_zvv_comment">Lokal- und Regionalverkehr</string>
|
||||||
<string name="network_it_label">Italien</string>
|
|
||||||
<string name="network_it_comment">Fern-, Regional und Lokalverkehr (z.B. Mailand, Rom, Neapel)</string>
|
|
||||||
<string name="network_paris_label">Paris</string>
|
|
||||||
<string name="network_paris_comment">Lokal- und Regionalverkehr</string>
|
|
||||||
<string name="network_spain_label">Spanien</string>
|
|
||||||
<string name="network_spain_comment">Lokal- und Regionalverkehr (z.B. Barcelona)</string>
|
|
||||||
<string name="network_sncb_label">Belgien</string>
|
|
||||||
<string name="network_sncb_comment">Fern-, Regional und Lokalverkehr (z.B. Antwerpen, Gent, Charleroi, Brüssel)</string>
|
|
||||||
<string name="network_lu_label">Luxemburg</string>
|
<string name="network_lu_label">Luxemburg</string>
|
||||||
<string name="network_lu_comment">Lokal- und Regionalverkehr</string>
|
<string name="network_lu_comment">Lokal- und Regionalverkehr</string>
|
||||||
<string name="network_ns_label">Niederlande</string>
|
<string name="network_ns_label">Niederlande</string>
|
||||||
|
@ -103,12 +93,12 @@
|
||||||
<string name="network_dsb_comment">Fern-, Regional und Lokalverkehr (z.B. Kopenhagen)</string>
|
<string name="network_dsb_comment">Fern-, Regional und Lokalverkehr (z.B. Kopenhagen)</string>
|
||||||
<string name="network_se_label">Schweden</string>
|
<string name="network_se_label">Schweden</string>
|
||||||
<string name="network_se_comment">Fern-, Regional und Lokalverkehr (z.B. Stockholm)</string>
|
<string name="network_se_comment">Fern-, Regional und Lokalverkehr (z.B. Stockholm)</string>
|
||||||
<string name="network_finland_label">Finnland</string>
|
|
||||||
<string name="network_finland_comment">Fern-, Regional und Lokalverkehr (z.B. Helsinki)</string>
|
|
||||||
<string name="network_tlem_label">England, Schottland & Wales.</string>
|
<string name="network_tlem_label">England, Schottland & Wales.</string>
|
||||||
<string name="network_tlem_comment">Lokal- und Regionalverkehr (z.B. London, Birmingham)</string>
|
<string name="network_tlem_comment">Lokal- und Regionalverkehr (z.B. London, Birmingham)</string>
|
||||||
<string name="network_mersey_label">Liverpool</string>
|
<string name="network_mersey_label">Liverpool</string>
|
||||||
<string name="network_mersey_comment">Lokal- und Regionalverkehr</string>
|
<string name="network_mersey_comment">Lokal- und Regionalverkehr</string>
|
||||||
|
<string name="network_pl_label">Polen</string>
|
||||||
|
<string name="network_pl_comment">Fern-, Regional und Lokalverkehr (z.B. Warschau)</string>
|
||||||
<string name="network_dub_label">Dubai</string>
|
<string name="network_dub_label">Dubai</string>
|
||||||
<string name="network_dub_comment">Lokalverkehr</string>
|
<string name="network_dub_comment">Lokalverkehr</string>
|
||||||
<string name="network_bart_label">San Francisco</string>
|
<string name="network_bart_label">San Francisco</string>
|
||||||
|
@ -119,8 +109,6 @@
|
||||||
<string name="network_cmta_comment">Lokal- und Regionalverkehr</string>
|
<string name="network_cmta_comment">Lokal- und Regionalverkehr</string>
|
||||||
<string name="network_sydney_label">Sydney</string>
|
<string name="network_sydney_label">Sydney</string>
|
||||||
<string name="network_sydney_comment">Lokal- und Regionalverkehr</string>
|
<string name="network_sydney_comment">Lokal- und Regionalverkehr</string>
|
||||||
<string name="network_nicaragua_label">Nicaragua</string>
|
|
||||||
<string name="network_nicaragua_comment">nationale und städtische Buslinien</string>
|
|
||||||
<string name="network_met_label">Melbourne</string>
|
<string name="network_met_label">Melbourne</string>
|
||||||
<string name="network_met_comment">Nicht mehr verfügbar, da der PTV keine EFA-API mehr anbietet.</string>
|
<string name="network_met_comment">Nicht mehr verfügbar, da der PTV keine EFA-API mehr anbietet.</string>
|
||||||
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<!-- background -->
|
|
||||||
<color name="bg_status_bar">@android:color/transparent</color>
|
|
||||||
<color name="bg_navigation_bar">@android:color/transparent</color>
|
|
||||||
<color name="bg_navigation_bar_fullscreen">@android:color/transparent</color>
|
|
||||||
|
|
||||||
</resources>
|
|
|
@ -23,7 +23,6 @@
|
||||||
<color name="bg_delayed">#444444</color>
|
<color name="bg_delayed">#444444</color>
|
||||||
<color name="bg_current_time">#ffff00</color>
|
<color name="bg_current_time">#ffff00</color>
|
||||||
<color name="bg_position">#bbbbbb</color>
|
<color name="bg_position">#bbbbbb</color>
|
||||||
<color name="bg_status_bar">#44000000</color>
|
|
||||||
|
|
||||||
<item name="alpha_bright_white" format="float" type="dimen">0.8</item>
|
<item name="alpha_bright_white" format="float" type="dimen">0.8</item>
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,6 @@
|
||||||
|
|
||||||
<style name="My.Theme" parent="@android:style/Theme.Material.NoActionBar">
|
<style name="My.Theme" parent="@android:style/Theme.Material.NoActionBar">
|
||||||
<item name="android:windowBackground">@color/bg_level0</item>
|
<item name="android:windowBackground">@color/bg_level0</item>
|
||||||
<item name="android:statusBarColor">@color/bg_status_bar</item>
|
|
||||||
<item name="android:navigationBarColor">@color/bg_navigation_bar</item>
|
|
||||||
<item name="android:textViewStyle">@style/My.Widget.TextView</item>
|
<item name="android:textViewStyle">@style/My.Widget.TextView</item>
|
||||||
<item name="android:autoCompleteTextViewStyle">@style/My.Widget.AutoCompleteTextView</item>
|
<item name="android:autoCompleteTextViewStyle">@style/My.Widget.AutoCompleteTextView</item>
|
||||||
<item name="android:dropDownListViewStyle">@style/My.Widget.ListView.DropDown</item>
|
<item name="android:dropDownListViewStyle">@style/My.Widget.ListView.DropDown</item>
|
||||||
|
@ -17,8 +15,6 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="My.Theme.Preference" parent="@android:style/Theme.Material">
|
<style name="My.Theme.Preference" parent="@android:style/Theme.Material">
|
||||||
<item name="android:statusBarColor">@color/bg_action_bar</item>
|
|
||||||
<item name="android:navigationBarColor">@color/bg_level0</item>
|
|
||||||
<item name="android:actionBarStyle">@style/My.Widget.ActionBar</item>
|
<item name="android:actionBarStyle">@style/My.Widget.ActionBar</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
|
|
||||||
<style name="My.Theme.DarkDefault" parent="@android:style/Theme.Material.Light.NoActionBar">
|
<style name="My.Theme.DarkDefault" parent="@android:style/Theme.Material.Light.NoActionBar">
|
||||||
<item name="android:windowBackground">@color/bg_level0_darkdefault</item>
|
<item name="android:windowBackground">@color/bg_level0_darkdefault</item>
|
||||||
<item name="android:statusBarColor">@color/bg_status_bar</item>
|
|
||||||
<item name="android:navigationBarColor">@color/bg_navigation_bar</item>
|
|
||||||
<item name="android:textViewStyle">@style/My.Widget.TextView.DarkDefault</item>
|
<item name="android:textViewStyle">@style/My.Widget.TextView.DarkDefault</item>
|
||||||
<item name="android:imageButtonStyle">@style/My.Widget.ImageButton</item>
|
<item name="android:imageButtonStyle">@style/My.Widget.ImageButton</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<!-- background -->
|
|
||||||
<color name="bg_status_bar">@android:color/transparent</color>
|
|
||||||
<color name="bg_navigation_bar">@android:color/transparent</color>
|
|
||||||
<color name="bg_navigation_bar_fullscreen">@android:color/transparent</color>
|
|
||||||
|
|
||||||
</resources>
|
|
|
@ -37,9 +37,7 @@
|
||||||
<color name="bg_position">#757575</color>
|
<color name="bg_position">#757575</color>
|
||||||
<color name="bg_position_darkdefault">#bbbbbb</color>
|
<color name="bg_position_darkdefault">#bbbbbb</color>
|
||||||
<color name="bg_highlighted_darkdefault">#ff4444</color>
|
<color name="bg_highlighted_darkdefault">#ff4444</color>
|
||||||
<color name="bg_status_bar">#44000000</color>
|
<color name="bg_plan">#ffd8d8d8</color>
|
||||||
<color name="bg_navigation_bar">@android:color/black</color>
|
|
||||||
<color name="bg_navigation_bar_fullscreen">#44000000</color>
|
|
||||||
|
|
||||||
<item name="alpha_bright_white" format="float" type="dimen">1</item>
|
<item name="alpha_bright_white" format="float" type="dimen">1</item>
|
||||||
|
|
||||||
|
|
|
@ -81,20 +81,10 @@
|
||||||
<string name="network_stv_comment">local and regional</string>
|
<string name="network_stv_comment">local and regional</string>
|
||||||
<string name="network_vmobil_label">Bregenz & Vorarlberg</string>
|
<string name="network_vmobil_label">Bregenz & Vorarlberg</string>
|
||||||
<string name="network_vmobil_comment">Not available, because the VVV explicitly desires not to be included in Offi. You can use the ÖBB instead, it works well for Vorarlberg too.</string>
|
<string name="network_vmobil_comment">Not available, because the VVV explicitly desires not to be included in Offi. You can use the ÖBB instead, it works well for Vorarlberg too.</string>
|
||||||
<string name="network_czech_republic_label">Prague</string>
|
|
||||||
<string name="network_czech_republic_comment">local and regional</string>
|
|
||||||
<string name="network_vbl_label">Lucerne</string>
|
<string name="network_vbl_label">Lucerne</string>
|
||||||
<string name="network_vbl_comment">tram and bus only</string>
|
<string name="network_vbl_comment">tram and bus only</string>
|
||||||
<string name="network_zvv_label">Zurich</string>
|
<string name="network_zvv_label">Zurich</string>
|
||||||
<string name="network_zvv_comment">local and regional</string>
|
<string name="network_zvv_comment">local and regional</string>
|
||||||
<string name="network_it_label">Italy</string>
|
|
||||||
<string name="network_it_comment">long-distance, regional and local (e.g. Milan, Rome, Naples)</string>
|
|
||||||
<string name="network_paris_label">Paris</string>
|
|
||||||
<string name="network_paris_comment">local and regional</string>
|
|
||||||
<string name="network_spain_label">Spain</string>
|
|
||||||
<string name="network_spain_comment">local and regional (e.g. Barcelona)</string>
|
|
||||||
<string name="network_sncb_label">Belgium</string>
|
|
||||||
<string name="network_sncb_comment">long-distance, regional and local (e.g. Antwerp, Ghent, Charleroi, Brussels)</string>
|
|
||||||
<string name="network_lu_label">Luxembourg</string>
|
<string name="network_lu_label">Luxembourg</string>
|
||||||
<string name="network_lu_comment">local and regional</string>
|
<string name="network_lu_comment">local and regional</string>
|
||||||
<string name="network_ns_label">Netherlands</string>
|
<string name="network_ns_label">Netherlands</string>
|
||||||
|
@ -103,12 +93,12 @@
|
||||||
<string name="network_dsb_comment">long-distance, regional and local (e.g. Copenhagen)</string>
|
<string name="network_dsb_comment">long-distance, regional and local (e.g. Copenhagen)</string>
|
||||||
<string name="network_se_label">Sweden</string>
|
<string name="network_se_label">Sweden</string>
|
||||||
<string name="network_se_comment">long-distance, regional and local (e.g. Stockholm)</string>
|
<string name="network_se_comment">long-distance, regional and local (e.g. Stockholm)</string>
|
||||||
<string name="network_finland_label">Finland</string>
|
|
||||||
<string name="network_finland_comment">long-distance, regional and local (e.g. Helsinki)</string>
|
|
||||||
<string name="network_tlem_label">England, Scotland & Wales</string>
|
<string name="network_tlem_label">England, Scotland & Wales</string>
|
||||||
<string name="network_tlem_comment">local and regional (e.g. London, Birmingham)</string>
|
<string name="network_tlem_comment">local and regional (e.g. London, Birmingham)</string>
|
||||||
<string name="network_mersey_label">Liverpool</string>
|
<string name="network_mersey_label">Liverpool</string>
|
||||||
<string name="network_mersey_comment">local and regional</string>
|
<string name="network_mersey_comment">local and regional</string>
|
||||||
|
<string name="network_pl_label">Poland</string>
|
||||||
|
<string name="network_pl_comment">long-distance, regional and local (e.g. Warsaw)</string>
|
||||||
<string name="network_dub_label">Dubai</string>
|
<string name="network_dub_label">Dubai</string>
|
||||||
<string name="network_dub_comment">local</string>
|
<string name="network_dub_comment">local</string>
|
||||||
<string name="network_bart_label">San Francisco</string>
|
<string name="network_bart_label">San Francisco</string>
|
||||||
|
@ -119,8 +109,6 @@
|
||||||
<string name="network_cmta_comment">local and regional</string>
|
<string name="network_cmta_comment">local and regional</string>
|
||||||
<string name="network_sydney_label">Sydney</string>
|
<string name="network_sydney_label">Sydney</string>
|
||||||
<string name="network_sydney_comment">local and regional</string>
|
<string name="network_sydney_comment">local and regional</string>
|
||||||
<string name="network_nicaragua_label">Nicaragua</string>
|
|
||||||
<string name="network_nicaragua_comment">national and urban buses</string>
|
|
||||||
<string name="network_met_label">Melbourne</string>
|
<string name="network_met_label">Melbourne</string>
|
||||||
<string name="network_met_comment">Not available, because the PTV does not offer an EFA API any more.</string>
|
<string name="network_met_comment">Not available, because the PTV does not offer an EFA API any more.</string>
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
<!-- preferences about -->
|
<!-- preferences about -->
|
||||||
<string name="about_title">About Offi</string>
|
<string name="about_title">About Offi</string>
|
||||||
<string name="about_copyright_title">Copyright</string>
|
<string name="about_copyright_title">Copyright</string>
|
||||||
<string name="about_copyright_summary">© 2010-2023, the Öffi developers</string>
|
<string name="about_copyright_summary">© 2010-2025, the Öffi developers</string>
|
||||||
<string name="about_license_title">License</string>
|
<string name="about_license_title">License</string>
|
||||||
<string name="about_privacy_policy_title">Privacy Policy</string>
|
<string name="about_privacy_policy_title">Privacy Policy</string>
|
||||||
<string name="about_privacy_policy_url">https://oeffi.schildbach.de/privacy_policy.txt</string>
|
<string name="about_privacy_policy_url">https://oeffi.schildbach.de/privacy_policy.txt</string>
|
||||||
|
|
|
@ -5,8 +5,6 @@
|
||||||
|
|
||||||
<style name="My.Theme" parent="@android:style/Theme.Material.Light.NoActionBar">
|
<style name="My.Theme" parent="@android:style/Theme.Material.Light.NoActionBar">
|
||||||
<item name="android:windowBackground">@color/bg_level0</item>
|
<item name="android:windowBackground">@color/bg_level0</item>
|
||||||
<item name="android:statusBarColor">@color/bg_status_bar</item>
|
|
||||||
<item name="android:navigationBarColor">@color/bg_navigation_bar</item>
|
|
||||||
<item name="android:textViewStyle">@style/My.Widget.TextView</item>
|
<item name="android:textViewStyle">@style/My.Widget.TextView</item>
|
||||||
<item name="android:autoCompleteTextViewStyle">@style/My.Widget.AutoCompleteTextView</item>
|
<item name="android:autoCompleteTextViewStyle">@style/My.Widget.AutoCompleteTextView</item>
|
||||||
<item name="android:dropDownListViewStyle">@style/My.Widget.ListView.DropDown</item>
|
<item name="android:dropDownListViewStyle">@style/My.Widget.ListView.DropDown</item>
|
||||||
|
@ -18,8 +16,6 @@
|
||||||
|
|
||||||
<style name="My.Theme.DarkDefault" parent="@android:style/Theme.Material.NoActionBar">
|
<style name="My.Theme.DarkDefault" parent="@android:style/Theme.Material.NoActionBar">
|
||||||
<item name="android:windowBackground">@color/bg_level0_darkdefault</item>
|
<item name="android:windowBackground">@color/bg_level0_darkdefault</item>
|
||||||
<item name="android:statusBarColor">@color/bg_status_bar</item>
|
|
||||||
<item name="android:navigationBarColor">@color/bg_navigation_bar</item>
|
|
||||||
<item name="android:textViewStyle">@style/My.Widget.TextView.DarkDefault</item>
|
<item name="android:textViewStyle">@style/My.Widget.TextView.DarkDefault</item>
|
||||||
<item name="android:imageButtonStyle">@style/My.Widget.ImageButton</item>
|
<item name="android:imageButtonStyle">@style/My.Widget.ImageButton</item>
|
||||||
</style>
|
</style>
|
||||||
|
@ -27,13 +23,10 @@
|
||||||
<style name="My.Theme.Fullscreen" parent="@android:style/Theme.Material.Light.NoActionBar.Fullscreen">
|
<style name="My.Theme.Fullscreen" parent="@android:style/Theme.Material.Light.NoActionBar.Fullscreen">
|
||||||
<item name="android:windowBackground">@android:color/black</item>
|
<item name="android:windowBackground">@android:color/black</item>
|
||||||
<item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="27">shortEdges</item>
|
<item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="27">shortEdges</item>
|
||||||
<item name="android:navigationBarColor">@color/bg_navigation_bar_fullscreen</item>
|
|
||||||
<item name="android:textViewStyle">@style/My.Widget.TextView</item>
|
<item name="android:textViewStyle">@style/My.Widget.TextView</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="My.Theme.Preference" parent="@android:style/Theme.Material.Light.DarkActionBar">
|
<style name="My.Theme.Preference" parent="@android:style/Theme.Material.Light.DarkActionBar">
|
||||||
<item name="android:statusBarColor">@color/bg_action_bar</item>
|
|
||||||
<item name="android:navigationBarColor">@color/bg_level0</item>
|
|
||||||
<item name="android:actionBarStyle">@style/My.Widget.ActionBar</item>
|
<item name="android:actionBarStyle">@style/My.Widget.ActionBar</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
|
@ -10,12 +10,12 @@
|
||||||
|
|
||||||
<!-- This is the hall of shame: public transport authorities which still do not support HTTPS. -->
|
<!-- This is the hall of shame: public transport authorities which still do not support HTTPS. -->
|
||||||
<domain-config cleartextTrafficPermitted="true">
|
<domain-config cleartextTrafficPermitted="true">
|
||||||
<domain includeSubdomains="false">www.belgianrail.be</domain><!-- SNCB/NMBS -->
|
|
||||||
<domain includeSubdomains="false">android.vrsinfo.de</domain><!-- VRS -->
|
<domain includeSubdomains="false">android.vrsinfo.de</domain><!-- VRS -->
|
||||||
<domain includeSubdomains="false">wojhati.rta.ae</domain><!-- RTA Dubai -->
|
<domain includeSubdomains="false">wojhati.rta.ae</domain><!-- RTA Dubai -->
|
||||||
<domain includeSubdomains="false">appefa10.verbundlinie.at</domain><!-- STV -->
|
<domain includeSubdomains="false">appefa10.verbundlinie.at</domain><!-- STV -->
|
||||||
<domain includeSubdomains="false">railteam.hafas.eu</domain><!-- Railteam -->
|
<domain includeSubdomains="false">railteam.hafas.eu</domain><!-- Railteam -->
|
||||||
<domain includeSubdomains="false">mobil.vbl.ch</domain><!-- VBL -->
|
<domain includeSubdomains="false">mobil.vbl.ch</domain><!-- VBL -->
|
||||||
|
<domain includeSubdomains="false">mobil.rozklad-pkp.pl</domain><!-- PKP -->
|
||||||
</domain-config>
|
</domain-config>
|
||||||
|
|
||||||
</network-security-config>
|
</network-security-config>
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright the original author or authors.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.schildbach.oeffi;
|
|
||||||
|
|
||||||
public class Variants {
|
|
||||||
public static final boolean ENABLE_DONATE = true;
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright the original author or authors.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.schildbach.oeffi;
|
|
||||||
|
|
||||||
public class Variants {
|
|
||||||
public static final boolean ENABLE_DONATE = false;
|
|
||||||
}
|
|
|
@ -91,18 +91,6 @@ public class Application extends android.app.Application {
|
||||||
for (final File file : getFilesDir().listFiles(filter))
|
for (final File file : getFilesDir().listFiles(filter))
|
||||||
file.delete();
|
file.delete();
|
||||||
|
|
||||||
// 2021-09-18: migrate SBB to use RT
|
|
||||||
final String SBB = "SBB";
|
|
||||||
migrateSelectedNetwork(SBB, NetworkId.RT);
|
|
||||||
FavoriteStationsProvider.deleteFavoriteStations(this, SBB);
|
|
||||||
QueryHistoryProvider.deleteQueryHistory(this, SBB);
|
|
||||||
|
|
||||||
// 2022-09-12: migrate PL to use RT
|
|
||||||
final String PL = "PL";
|
|
||||||
migrateSelectedNetwork(PL, NetworkId.RT);
|
|
||||||
FavoriteStationsProvider.deleteFavoriteStations(this, PL);
|
|
||||||
QueryHistoryProvider.deleteQueryHistory(this, PL);
|
|
||||||
|
|
||||||
// 2023-01-09: migrate VMS to use VVO
|
// 2023-01-09: migrate VMS to use VVO
|
||||||
final String VMS = "VMS";
|
final String VMS = "VMS";
|
||||||
migrateSelectedNetwork(VMS, NetworkId.VVO);
|
migrateSelectedNetwork(VMS, NetworkId.VVO);
|
||||||
|
@ -121,6 +109,52 @@ public class Application extends android.app.Application {
|
||||||
FavoriteStationsProvider.deleteFavoriteStations(this, AVV);
|
FavoriteStationsProvider.deleteFavoriteStations(this, AVV);
|
||||||
QueryHistoryProvider.deleteQueryHistory(this, AVV);
|
QueryHistoryProvider.deleteQueryHistory(this, AVV);
|
||||||
|
|
||||||
|
// 2023-12-17: migrate SNCB to use RT
|
||||||
|
final String SNCB = "SNCB";
|
||||||
|
migrateSelectedNetwork(SNCB, NetworkId.RT);
|
||||||
|
FavoriteStationsProvider.deleteFavoriteStations(this, SNCB);
|
||||||
|
QueryHistoryProvider.deleteQueryHistory(this, SNCB);
|
||||||
|
|
||||||
|
// 2024-04-27: EFA-ID migration of MVV
|
||||||
|
FavoriteStationsProvider.migrateFavoriteStationIds(this, NetworkId.MVV, "0", "10000", 91000000);
|
||||||
|
QueryHistoryProvider.migrateQueryHistoryIds(this, NetworkId.MVV, "0", "10000", 91000000);
|
||||||
|
|
||||||
|
// 2024-08-09: migrate Finland to use RT
|
||||||
|
final String FINLAND = "FINLAND";
|
||||||
|
migrateSelectedNetwork(FINLAND, NetworkId.RT);
|
||||||
|
FavoriteStationsProvider.deleteFavoriteStations(this, FINLAND);
|
||||||
|
QueryHistoryProvider.deleteQueryHistory(this, FINLAND);
|
||||||
|
|
||||||
|
// 2024-08-30: migrate Czech Republic to use RT
|
||||||
|
final String CZECH_REPUBLIC = "CZECH_REPUBLIC";
|
||||||
|
migrateSelectedNetwork(CZECH_REPUBLIC, NetworkId.RT);
|
||||||
|
FavoriteStationsProvider.deleteFavoriteStations(this, CZECH_REPUBLIC);
|
||||||
|
QueryHistoryProvider.deleteQueryHistory(this, CZECH_REPUBLIC);
|
||||||
|
|
||||||
|
// 2024-08-30: migrate Italy to use RT
|
||||||
|
final String IT = "IT";
|
||||||
|
migrateSelectedNetwork(IT, NetworkId.RT);
|
||||||
|
FavoriteStationsProvider.deleteFavoriteStations(this, IT);
|
||||||
|
QueryHistoryProvider.deleteQueryHistory(this, IT);
|
||||||
|
|
||||||
|
// 2024-08-30: migrate Paris to use RT
|
||||||
|
final String PARIS = "PARIS";
|
||||||
|
migrateSelectedNetwork(PARIS, NetworkId.RT);
|
||||||
|
FavoriteStationsProvider.deleteFavoriteStations(this, PARIS);
|
||||||
|
QueryHistoryProvider.deleteQueryHistory(this, PARIS);
|
||||||
|
|
||||||
|
// 2024-08-30: migrate Spain to use RT
|
||||||
|
final String SPAIN = "SPAIN";
|
||||||
|
migrateSelectedNetwork(SPAIN, NetworkId.RT);
|
||||||
|
FavoriteStationsProvider.deleteFavoriteStations(this, SPAIN);
|
||||||
|
QueryHistoryProvider.deleteQueryHistory(this, SPAIN);
|
||||||
|
|
||||||
|
// 2024-08-30: migrate Nicaragua to use RT
|
||||||
|
final String NICARAGUA = "NICARAGUA";
|
||||||
|
migrateSelectedNetwork(NICARAGUA, NetworkId.RT);
|
||||||
|
FavoriteStationsProvider.deleteFavoriteStations(this, NICARAGUA);
|
||||||
|
QueryHistoryProvider.deleteQueryHistory(this, NICARAGUA);
|
||||||
|
|
||||||
log.info("Migrations took {}", watch);
|
log.info("Migrations took {}", watch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,13 +233,4 @@ public class Application extends android.app.Application {
|
||||||
public static final int versionCode(final Application application) {
|
public static final int versionCode(final Application application) {
|
||||||
return application.packageInfo().versionCode;
|
return application.packageInfo().versionCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final String versionFlavor(final Application application) {
|
|
||||||
final String applicationVersion = versionName(application);
|
|
||||||
final int applicationVersionSplit = applicationVersion.indexOf('-');
|
|
||||||
if (applicationVersionSplit >= 0)
|
|
||||||
return applicationVersion.substring(applicationVersionSplit + 1);
|
|
||||||
else
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,9 @@
|
||||||
|
|
||||||
package de.schildbach.oeffi;
|
package de.schildbach.oeffi;
|
||||||
|
|
||||||
|
import android.graphics.Color;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
|
import androidx.activity.SystemBarStyle;
|
||||||
import okhttp3.HttpUrl;
|
import okhttp3.HttpUrl;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
@ -65,4 +67,6 @@ public class Constants {
|
||||||
public static final String DESTINATION_ARROW_PREFIX = Character.toString(Constants.CHAR_RIGHTWARDS_ARROW)
|
public static final String DESTINATION_ARROW_PREFIX = Character.toString(Constants.CHAR_RIGHTWARDS_ARROW)
|
||||||
+ Constants.CHAR_THIN_SPACE;
|
+ Constants.CHAR_THIN_SPACE;
|
||||||
public static final String DESTINATION_ARROW_INVISIBLE_PREFIX = " ";
|
public static final String DESTINATION_ARROW_INVISIBLE_PREFIX = " ";
|
||||||
|
|
||||||
|
public static final SystemBarStyle STATUS_BAR_STYLE = SystemBarStyle.dark(Color.TRANSPARENT);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,12 +17,11 @@
|
||||||
|
|
||||||
package de.schildbach.oeffi;
|
package de.schildbach.oeffi;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
|
||||||
import android.app.ActivityManager.TaskDescription;
|
import android.app.ActivityManager.TaskDescription;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
|
@ -31,6 +30,7 @@ import android.view.ViewGroup;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.activity.ComponentActivity;
|
import androidx.activity.ComponentActivity;
|
||||||
|
import androidx.activity.EdgeToEdge;
|
||||||
import de.schildbach.oeffi.network.NetworkResources;
|
import de.schildbach.oeffi.network.NetworkResources;
|
||||||
import de.schildbach.oeffi.util.ErrorReporter;
|
import de.schildbach.oeffi.util.ErrorReporter;
|
||||||
import de.schildbach.pte.NetworkId;
|
import de.schildbach.pte.NetworkId;
|
||||||
|
@ -46,12 +46,12 @@ public abstract class OeffiActivity extends ComponentActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(final Bundle savedInstanceState) {
|
protected void onCreate(final Bundle savedInstanceState) {
|
||||||
|
EdgeToEdge.enable(this, Constants.STATUS_BAR_STYLE);
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
this.application = (Application) getApplication();
|
this.application = (Application) getApplication();
|
||||||
this.prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
this.prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
|
||||||
ErrorReporter.getInstance().check(this, applicationVersionCode(), applicationVersionFlavor(),
|
ErrorReporter.getInstance().check(this, applicationVersionCode(), application.okHttpClient());
|
||||||
application.okHttpClient());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateFragments(final int listFrameResId, final int mapFrameResId) {
|
protected void updateFragments(final int listFrameResId, final int mapFrameResId) {
|
||||||
|
@ -100,10 +100,6 @@ public abstract class OeffiActivity extends ComponentActivity {
|
||||||
return Application.versionCode(application);
|
return Application.versionCode(application);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final String applicationVersionFlavor() {
|
|
||||||
return Application.versionFlavor(application);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final long applicationFirstInstallTime() {
|
protected final long applicationFirstInstallTime() {
|
||||||
return application.packageInfo().firstInstallTime;
|
return application.packageInfo().firstInstallTime;
|
||||||
}
|
}
|
||||||
|
@ -157,10 +153,4 @@ public abstract class OeffiActivity extends ComponentActivity {
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
@TargetApi(24)
|
|
||||||
@Override
|
|
||||||
public boolean isInMultiWindowMode() {
|
|
||||||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && super.isInMultiWindowMode();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,8 +130,6 @@ public abstract class OeffiMainActivity extends OeffiActivity {
|
||||||
directionsItem.setChecked(OeffiMainActivity.this instanceof DirectionsActivity);
|
directionsItem.setChecked(OeffiMainActivity.this instanceof DirectionsActivity);
|
||||||
final MenuItem plansItem = menu.findItem(R.id.global_options_plans);
|
final MenuItem plansItem = menu.findItem(R.id.global_options_plans);
|
||||||
plansItem.setChecked(OeffiMainActivity.this instanceof PlansPickerActivity);
|
plansItem.setChecked(OeffiMainActivity.this instanceof PlansPickerActivity);
|
||||||
final MenuItem donateItem = menu.findItem(R.id.global_options_donate);
|
|
||||||
donateItem.setVisible(Variants.ENABLE_DONATE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -174,8 +172,7 @@ public abstract class OeffiMainActivity extends OeffiActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
case R.id.global_options_donate: {
|
case R.id.global_options_donate: {
|
||||||
if (Variants.ENABLE_DONATE)
|
PreferenceActivity.start(OeffiMainActivity.this, DonateFragment.class.getName());
|
||||||
PreferenceActivity.start(OeffiMainActivity.this, DonateFragment.class.getName());
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,18 +341,11 @@ public abstract class OeffiMainActivity extends OeffiActivity {
|
||||||
|
|
||||||
private void downloadAndProcessMessages(final String network) {
|
private void downloadAndProcessMessages(final String network) {
|
||||||
final HttpUrl.Builder remoteUrl = Constants.MESSAGES_BASE_URL.newBuilder();
|
final HttpUrl.Builder remoteUrl = Constants.MESSAGES_BASE_URL.newBuilder();
|
||||||
final StringBuilder remoteFileName = new StringBuilder("messages");
|
remoteUrl.addPathSegment("messages.txt");
|
||||||
final String flavor = applicationVersionFlavor();
|
|
||||||
if (flavor != null)
|
|
||||||
remoteFileName.append('-').append(flavor);
|
|
||||||
remoteFileName.append(".txt");
|
|
||||||
remoteUrl.addPathSegment(remoteFileName.toString());
|
|
||||||
final String installerPackageName = Installer.installerPackageName(this);
|
final String installerPackageName = Installer.installerPackageName(this);
|
||||||
if (installerPackageName != null)
|
if (installerPackageName != null)
|
||||||
remoteUrl.addEncodedQueryParameter("installer", installerPackageName);
|
remoteUrl.addEncodedQueryParameter("installer", installerPackageName);
|
||||||
remoteUrl.addQueryParameter("version", Integer.toString(versionCode));
|
remoteUrl.addQueryParameter("version", Integer.toString(versionCode));
|
||||||
if (flavor != null)
|
|
||||||
remoteUrl.addQueryParameter("flavor", flavor);
|
|
||||||
remoteUrl.addQueryParameter("sdk", Integer.toString(Build.VERSION.SDK_INT));
|
remoteUrl.addQueryParameter("sdk", Integer.toString(Build.VERSION.SDK_INT));
|
||||||
remoteUrl.addQueryParameter("task", taskName());
|
remoteUrl.addQueryParameter("task", taskName());
|
||||||
final File localFile = new File(getFilesDir(), "messages.txt");
|
final File localFile = new File(getFilesDir(), "messages.txt");
|
||||||
|
|
|
@ -63,7 +63,9 @@ import androidx.activity.result.contract.ActivityResultContract;
|
||||||
import androidx.activity.result.contract.ActivityResultContracts;
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
|
@ -307,10 +309,11 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor
|
||||||
backgroundHandler = new Handler(backgroundThread.getLooper());
|
backgroundHandler = new Handler(backgroundThread.getLooper());
|
||||||
|
|
||||||
setContentView(R.layout.directions_content);
|
setContentView(R.layout.directions_content);
|
||||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
|
final View contentView = findViewById(android.R.id.content);
|
||||||
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> {
|
||||||
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(insets.left, 0, insets.right, 0);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
final MyActionBar actionBar = getMyActionBar();
|
final MyActionBar actionBar = getMyActionBar();
|
||||||
|
@ -456,10 +459,11 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor
|
||||||
viewQueryHistoryList.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
|
viewQueryHistoryList.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
|
||||||
queryHistoryListAdapter = new QueryHistoryAdapter(this, network, this, this);
|
queryHistoryListAdapter = new QueryHistoryAdapter(this, network, this, this);
|
||||||
viewQueryHistoryList.setAdapter(queryHistoryListAdapter);
|
viewQueryHistoryList.setAdapter(queryHistoryListAdapter);
|
||||||
viewQueryHistoryList.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(viewQueryHistoryList, (v, windowInsets) -> {
|
||||||
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(),
|
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(),
|
||||||
insets.getSystemWindowInsetBottom());
|
insets.bottom);
|
||||||
return insets;
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
viewQueryHistoryEmpty = findViewById(R.id.directions_query_history_empty);
|
viewQueryHistoryEmpty = findViewById(R.id.directions_query_history_empty);
|
||||||
|
@ -546,15 +550,17 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor
|
||||||
});
|
});
|
||||||
final TextView mapDisclaimerView = findViewById(R.id.directions_map_disclaimer);
|
final TextView mapDisclaimerView = findViewById(R.id.directions_map_disclaimer);
|
||||||
mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice());
|
mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice());
|
||||||
mapDisclaimerView.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(mapDisclaimerView, (v, windowInsets) -> {
|
||||||
v.setPadding(0,0,0, insets.getSystemWindowInsetBottom());
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(0, 0, 0, insets.bottom);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
final ZoomControls zoom = findViewById(R.id.directions_map_zoom);
|
final ZoomControls zoom = findViewById(R.id.directions_map_zoom);
|
||||||
zoom.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(zoom, (v, windowInsets) -> {
|
||||||
v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(0, 0, 0, insets.bottom);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
mapView.setZoomControls(zoom);
|
mapView.setZoomControls(zoom);
|
||||||
|
|
||||||
|
|
|
@ -44,13 +44,15 @@ import android.util.DisplayMetrics;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.PopupMenu;
|
import android.widget.PopupMenu;
|
||||||
import android.widget.TableLayout;
|
import android.widget.TableLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
import de.schildbach.oeffi.Constants;
|
import de.schildbach.oeffi.Constants;
|
||||||
import de.schildbach.oeffi.LocationAware;
|
import de.schildbach.oeffi.LocationAware;
|
||||||
|
@ -187,10 +189,11 @@ public class TripDetailsActivity extends OeffiActivity implements LocationListen
|
||||||
scheduleTripIntent = scheduleTripIntent(trip);
|
scheduleTripIntent = scheduleTripIntent(trip);
|
||||||
|
|
||||||
setContentView(R.layout.directions_trip_details_content);
|
setContentView(R.layout.directions_trip_details_content);
|
||||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
|
final View contentView = findViewById(android.R.id.content);
|
||||||
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> {
|
||||||
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(insets.left, 0, insets.right, 0);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
final MyActionBar actionBar = getMyActionBar();
|
final MyActionBar actionBar = getMyActionBar();
|
||||||
|
@ -283,9 +286,11 @@ public class TripDetailsActivity extends OeffiActivity implements LocationListen
|
||||||
((TextView) findViewById(R.id.directions_trip_details_footer))
|
((TextView) findViewById(R.id.directions_trip_details_footer))
|
||||||
.setText(Html.fromHtml(getString(R.string.directions_trip_details_realtime)));
|
.setText(Html.fromHtml(getString(R.string.directions_trip_details_realtime)));
|
||||||
|
|
||||||
findViewById(R.id.directions_trip_details_disclaimer_group).setOnApplyWindowInsetsListener((v, insets) -> {
|
final View disclaimerView = findViewById(R.id.directions_trip_details_disclaimer_group);
|
||||||
v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());
|
ViewCompat.setOnApplyWindowInsetsListener(disclaimerView, (v, windowInsets) -> {
|
||||||
return insets;
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
v.setPadding(0, 0, 0, insets.bottom);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
final TextView disclaimerSourceView = findViewById(R.id.directions_trip_details_disclaimer_source);
|
final TextView disclaimerSourceView = findViewById(R.id.directions_trip_details_disclaimer_source);
|
||||||
updateDisclaimerSource(disclaimerSourceView, network.name(), null);
|
updateDisclaimerSource(disclaimerSourceView, network.name(), null);
|
||||||
|
@ -314,9 +319,10 @@ public class TripDetailsActivity extends OeffiActivity implements LocationListen
|
||||||
});
|
});
|
||||||
final TextView mapDisclaimerView = findViewById(R.id.directions_trip_details_map_disclaimer);
|
final TextView mapDisclaimerView = findViewById(R.id.directions_trip_details_map_disclaimer);
|
||||||
mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice());
|
mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice());
|
||||||
mapDisclaimerView.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(mapDisclaimerView, (v, windowInsets) -> {
|
||||||
v.setPadding(0,0,0, insets.getSystemWindowInsetBottom());
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(0, 0, 0, insets.bottom);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,11 +372,6 @@ public class TripDetailsActivity extends OeffiActivity implements LocationListen
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttachedToWindow() {
|
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfigurationChanged(final Configuration config) {
|
public void onConfigurationChanged(final Configuration config) {
|
||||||
super.onConfigurationChanged(config);
|
super.onConfigurationChanged(config);
|
||||||
|
|
|
@ -31,6 +31,9 @@ import android.text.format.DateUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import com.google.common.collect.ComparisonChain;
|
import com.google.common.collect.ComparisonChain;
|
||||||
import com.google.common.collect.Ordering;
|
import com.google.common.collect.Ordering;
|
||||||
import com.google.common.util.concurrent.Uninterruptibles;
|
import com.google.common.util.concurrent.Uninterruptibles;
|
||||||
|
@ -130,10 +133,11 @@ public class TripsOverviewActivity extends OeffiActivity {
|
||||||
final Uri historyUri = historyUriStr != null ? Uri.parse(historyUriStr) : null;
|
final Uri historyUri = historyUriStr != null ? Uri.parse(historyUriStr) : null;
|
||||||
|
|
||||||
setContentView(R.layout.directions_trip_overview_content);
|
setContentView(R.layout.directions_trip_overview_content);
|
||||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
|
final View contentView = findViewById(android.R.id.content);
|
||||||
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> {
|
||||||
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(insets.left, 0, insets.right, 0);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
final MyActionBar actionBar = getMyActionBar();
|
final MyActionBar actionBar = getMyActionBar();
|
||||||
|
@ -164,9 +168,11 @@ public class TripsOverviewActivity extends OeffiActivity {
|
||||||
});
|
});
|
||||||
barView.setOnScrollListener(() -> handler.post(checkMoreRunnable));
|
barView.setOnScrollListener(() -> handler.post(checkMoreRunnable));
|
||||||
|
|
||||||
findViewById(R.id.directions_trip_overview_disclaimer_group).setOnApplyWindowInsetsListener((v, insets) -> {
|
final View disclaimerView = findViewById(R.id.directions_trip_overview_disclaimer_group);
|
||||||
v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());
|
ViewCompat.setOnApplyWindowInsetsListener(disclaimerView, (v, windowInsets) -> {
|
||||||
return insets;
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
v.setPadding(0, 0, 0, insets.bottom);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
processResult(result, dep);
|
processResult(result, dep);
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
package de.schildbach.oeffi.network;
|
package de.schildbach.oeffi.network;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.annotation.TargetApi;
|
|
||||||
import android.app.ActivityManager.TaskDescription;
|
import android.app.ActivityManager.TaskDescription;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
@ -26,10 +25,10 @@ import android.content.SharedPreferences;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.location.Address;
|
import android.location.Address;
|
||||||
import android.location.Criteria;
|
import android.location.Criteria;
|
||||||
import android.location.LocationManager;
|
import android.location.LocationManager;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
|
@ -40,9 +39,13 @@ import android.view.View;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.activity.ComponentActivity;
|
import androidx.activity.ComponentActivity;
|
||||||
|
import androidx.activity.EdgeToEdge;
|
||||||
import androidx.activity.result.ActivityResultLauncher;
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
import androidx.activity.result.contract.ActivityResultContracts;
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import de.schildbach.oeffi.AreaAware;
|
import de.schildbach.oeffi.AreaAware;
|
||||||
|
@ -58,7 +61,6 @@ import de.schildbach.oeffi.network.list.NetworksAdapter;
|
||||||
import de.schildbach.oeffi.util.DividerItemDecoration;
|
import de.schildbach.oeffi.util.DividerItemDecoration;
|
||||||
import de.schildbach.oeffi.util.GeocoderThread;
|
import de.schildbach.oeffi.util.GeocoderThread;
|
||||||
import de.schildbach.oeffi.util.LocationHelper;
|
import de.schildbach.oeffi.util.LocationHelper;
|
||||||
import de.schildbach.pte.AbstractNavitiaProvider;
|
|
||||||
import de.schildbach.pte.NetworkId;
|
import de.schildbach.pte.NetworkId;
|
||||||
import de.schildbach.pte.NetworkProvider;
|
import de.schildbach.pte.NetworkProvider;
|
||||||
import de.schildbach.pte.dto.Location;
|
import de.schildbach.pte.dto.Location;
|
||||||
|
@ -112,6 +114,7 @@ public class NetworkPickerActivity extends ComponentActivity implements Location
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(final Bundle savedInstanceState) {
|
protected void onCreate(final Bundle savedInstanceState) {
|
||||||
|
EdgeToEdge.enable(this, Constants.STATUS_BAR_STYLE);
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
@ -123,10 +126,11 @@ public class NetworkPickerActivity extends ComponentActivity implements Location
|
||||||
backgroundHandler = new Handler(backgroundThread.getLooper());
|
backgroundHandler = new Handler(backgroundThread.getLooper());
|
||||||
|
|
||||||
setContentView(R.layout.network_picker_content);
|
setContentView(R.layout.network_picker_content);
|
||||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
|
final View contentView = findViewById(android.R.id.content);
|
||||||
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> {
|
||||||
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(insets.left, 0, insets.right, 0);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
actionBar = findViewById(R.id.action_bar);
|
actionBar = findViewById(R.id.action_bar);
|
||||||
|
@ -139,18 +143,19 @@ public class NetworkPickerActivity extends ComponentActivity implements Location
|
||||||
final String network = prefsGetNetwork();
|
final String network = prefsGetNetwork();
|
||||||
listAdapter = new NetworksAdapter(this, network, this, this);
|
listAdapter = new NetworksAdapter(this, network, this, this);
|
||||||
listView.setAdapter(listAdapter);
|
listView.setAdapter(listAdapter);
|
||||||
listView.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(listView, (v, windowInsets) -> {
|
||||||
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(),
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
insets.getSystemWindowInsetBottom());
|
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), insets.bottom);
|
||||||
return insets;
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
mapView = findViewById(R.id.network_picker_map);
|
mapView = findViewById(R.id.network_picker_map);
|
||||||
final TextView mapDisclaimerView = findViewById(R.id.network_picker_map_disclaimer);
|
final TextView mapDisclaimerView = findViewById(R.id.network_picker_map_disclaimer);
|
||||||
mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice());
|
mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice());
|
||||||
mapDisclaimerView.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(mapDisclaimerView, (v, windowInsets) -> {
|
||||||
v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(0, 0, 0, insets.bottom);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (network != null) {
|
if (network != null) {
|
||||||
|
@ -477,10 +482,6 @@ public class NetworkPickerActivity extends ComponentActivity implements Location
|
||||||
|
|
||||||
final NetworkProvider networkProvider = NetworkProviderFactory.provider(NetworkId.valueOf(network.id));
|
final NetworkProvider networkProvider = NetworkProviderFactory.provider(NetworkId.valueOf(network.id));
|
||||||
|
|
||||||
// workaround, because of network access for navitia
|
|
||||||
if (AbstractNavitiaProvider.class.isAssignableFrom(networkProvider.getClass()))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
boolean inArea = false;
|
boolean inArea = false;
|
||||||
|
|
||||||
final Point[] area = getArea(networkProvider);
|
final Point[] area = getArea(networkProvider);
|
||||||
|
@ -571,10 +572,4 @@ public class NetworkPickerActivity extends ComponentActivity implements Location
|
||||||
actionBar.setBackgroundColor(color);
|
actionBar.setBackgroundColor(color);
|
||||||
setTaskDescription(new TaskDescription(null, null, color));
|
setTaskDescription(new TaskDescription(null, null, color));
|
||||||
}
|
}
|
||||||
|
|
||||||
@TargetApi(24)
|
|
||||||
@Override
|
|
||||||
public boolean isInMultiWindowMode() {
|
|
||||||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && super.isInMultiWindowMode();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,15 +27,12 @@ import de.schildbach.pte.BayernProvider;
|
||||||
import de.schildbach.pte.BsvagProvider;
|
import de.schildbach.pte.BsvagProvider;
|
||||||
import de.schildbach.pte.BvgProvider;
|
import de.schildbach.pte.BvgProvider;
|
||||||
import de.schildbach.pte.CmtaProvider;
|
import de.schildbach.pte.CmtaProvider;
|
||||||
import de.schildbach.pte.CzechRepublicProvider;
|
|
||||||
import de.schildbach.pte.DbProvider;
|
import de.schildbach.pte.DbProvider;
|
||||||
import de.schildbach.pte.DingProvider;
|
import de.schildbach.pte.DingProvider;
|
||||||
import de.schildbach.pte.DsbProvider;
|
import de.schildbach.pte.DsbProvider;
|
||||||
import de.schildbach.pte.DubProvider;
|
import de.schildbach.pte.DubProvider;
|
||||||
import de.schildbach.pte.FinlandProvider;
|
|
||||||
import de.schildbach.pte.GvhProvider;
|
import de.schildbach.pte.GvhProvider;
|
||||||
import de.schildbach.pte.InvgProvider;
|
import de.schildbach.pte.InvgProvider;
|
||||||
import de.schildbach.pte.ItalyProvider;
|
|
||||||
import de.schildbach.pte.KvvProvider;
|
import de.schildbach.pte.KvvProvider;
|
||||||
import de.schildbach.pte.LinzProvider;
|
import de.schildbach.pte.LinzProvider;
|
||||||
import de.schildbach.pte.LuProvider;
|
import de.schildbach.pte.LuProvider;
|
||||||
|
@ -45,18 +42,15 @@ import de.schildbach.pte.MvvProvider;
|
||||||
import de.schildbach.pte.NasaProvider;
|
import de.schildbach.pte.NasaProvider;
|
||||||
import de.schildbach.pte.NetworkId;
|
import de.schildbach.pte.NetworkId;
|
||||||
import de.schildbach.pte.NetworkProvider;
|
import de.schildbach.pte.NetworkProvider;
|
||||||
import de.schildbach.pte.NicaraguaProvider;
|
|
||||||
import de.schildbach.pte.NsProvider;
|
import de.schildbach.pte.NsProvider;
|
||||||
import de.schildbach.pte.NvbwProvider;
|
import de.schildbach.pte.NvbwProvider;
|
||||||
import de.schildbach.pte.NvvProvider;
|
import de.schildbach.pte.NvvProvider;
|
||||||
import de.schildbach.pte.OebbProvider;
|
import de.schildbach.pte.OebbProvider;
|
||||||
import de.schildbach.pte.ParisProvider;
|
import de.schildbach.pte.PlProvider;
|
||||||
import de.schildbach.pte.RtProvider;
|
import de.schildbach.pte.RtProvider;
|
||||||
import de.schildbach.pte.RtaChicagoProvider;
|
import de.schildbach.pte.RtaChicagoProvider;
|
||||||
import de.schildbach.pte.SeProvider;
|
import de.schildbach.pte.SeProvider;
|
||||||
import de.schildbach.pte.ShProvider;
|
import de.schildbach.pte.ShProvider;
|
||||||
import de.schildbach.pte.SncbProvider;
|
|
||||||
import de.schildbach.pte.SpainProvider;
|
|
||||||
import de.schildbach.pte.StvProvider;
|
import de.schildbach.pte.StvProvider;
|
||||||
import de.schildbach.pte.SydneyProvider;
|
import de.schildbach.pte.SydneyProvider;
|
||||||
import de.schildbach.pte.TlemProvider;
|
import de.schildbach.pte.TlemProvider;
|
||||||
|
@ -84,8 +78,7 @@ public final class NetworkProviderFactory {
|
||||||
private static Map<NetworkId, NetworkProvider> providerCache = new HashMap<>();
|
private static Map<NetworkId, NetworkProvider> providerCache = new HashMap<>();
|
||||||
private static final BaseEncoding BASE64 = BaseEncoding.base64();
|
private static final BaseEncoding BASE64 = BaseEncoding.base64();
|
||||||
|
|
||||||
private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54";
|
private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0";
|
||||||
private static final String NAVITIA_AUTHORIZATION = "577e5781-23ee-4ff0-a5b3-92e5b04887e5"; // oeffi@schildbach.de
|
|
||||||
private static final byte[] VRS_CLIENT_CERTIFICATE = BASE64.decode("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");
|
private static final byte[] VRS_CLIENT_CERTIFICATE = BASE64.decode("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");
|
||||||
|
|
||||||
public static synchronized NetworkProvider provider(final NetworkId networkId) {
|
public static synchronized NetworkProvider provider(final NetworkId networkId) {
|
||||||
|
@ -94,7 +87,8 @@ public final class NetworkProviderFactory {
|
||||||
return cachedNetworkProvider;
|
return cachedNetworkProvider;
|
||||||
|
|
||||||
final AbstractNetworkProvider networkProvider = forId(networkId);
|
final AbstractNetworkProvider networkProvider = forId(networkId);
|
||||||
networkProvider.setUserAgent(USER_AGENT);
|
if (networkId != NetworkId.PL)
|
||||||
|
networkProvider.setUserAgent(USER_AGENT);
|
||||||
providerCache.put(networkId, networkProvider);
|
providerCache.put(networkId, networkProvider);
|
||||||
return networkProvider;
|
return networkProvider;
|
||||||
}
|
}
|
||||||
|
@ -103,8 +97,7 @@ public final class NetworkProviderFactory {
|
||||||
if (networkId.equals(NetworkId.RT))
|
if (networkId.equals(NetworkId.RT))
|
||||||
return new RtProvider();
|
return new RtProvider();
|
||||||
else if (networkId.equals(NetworkId.DB))
|
else if (networkId.equals(NetworkId.DB))
|
||||||
return new DbProvider("{\"type\":\"AID\",\"aid\":\"n91dB8Z77MLdoR0K\"}",
|
return new DbProvider();
|
||||||
"bdI8UVj40K5fvxwf".getBytes(Charsets.UTF_8));
|
|
||||||
else if (networkId.equals(NetworkId.BVG))
|
else if (networkId.equals(NetworkId.BVG))
|
||||||
return new BvgProvider("{\"aid\":\"1Rxs112shyHLatUX4fofnmdxK\",\"type\":\"AID\"}");
|
return new BvgProvider("{\"aid\":\"1Rxs112shyHLatUX4fofnmdxK\",\"type\":\"AID\"}");
|
||||||
else if (networkId.equals(NetworkId.VBB))
|
else if (networkId.equals(NetworkId.VBB))
|
||||||
|
@ -130,7 +123,7 @@ public final class NetworkProviderFactory {
|
||||||
else if (networkId.equals(NetworkId.SH))
|
else if (networkId.equals(NetworkId.SH))
|
||||||
return new ShProvider("{\"aid\":\"r0Ot9FLFNAFxijLW\",\"type\":\"AID\"}");
|
return new ShProvider("{\"aid\":\"r0Ot9FLFNAFxijLW\",\"type\":\"AID\"}");
|
||||||
else if (networkId.equals(NetworkId.GVH))
|
else if (networkId.equals(NetworkId.GVH))
|
||||||
return new GvhProvider(HttpUrl.parse("https://gvh.efa.de/app_oeffi/"));
|
return new GvhProvider();
|
||||||
else if (networkId.equals(NetworkId.BSVAG))
|
else if (networkId.equals(NetworkId.BSVAG))
|
||||||
return new BsvagProvider();
|
return new BsvagProvider();
|
||||||
else if (networkId.equals(NetworkId.VBN))
|
else if (networkId.equals(NetworkId.VBN))
|
||||||
|
@ -171,20 +164,10 @@ public final class NetworkProviderFactory {
|
||||||
return new LinzProvider();
|
return new LinzProvider();
|
||||||
else if (networkId.equals(NetworkId.STV))
|
else if (networkId.equals(NetworkId.STV))
|
||||||
return new StvProvider();
|
return new StvProvider();
|
||||||
else if (networkId.equals(NetworkId.CZECH_REPUBLIC))
|
|
||||||
return new CzechRepublicProvider(NAVITIA_AUTHORIZATION);
|
|
||||||
else if (networkId.equals(NetworkId.VBL))
|
else if (networkId.equals(NetworkId.VBL))
|
||||||
return new VblProvider();
|
return new VblProvider();
|
||||||
else if (networkId.equals(NetworkId.ZVV))
|
else if (networkId.equals(NetworkId.ZVV))
|
||||||
return new ZvvProvider("{\"type\":\"AID\",\"aid\":\"hf7mcf9bv3nv8g5f\"}");
|
return new ZvvProvider("{\"type\":\"AID\",\"aid\":\"hf7mcf9bv3nv8g5f\"}");
|
||||||
else if (networkId.equals(NetworkId.IT))
|
|
||||||
return new ItalyProvider(NAVITIA_AUTHORIZATION);
|
|
||||||
else if (networkId.equals(NetworkId.PARIS))
|
|
||||||
return new ParisProvider(NAVITIA_AUTHORIZATION);
|
|
||||||
else if (networkId.equals(NetworkId.SPAIN))
|
|
||||||
return new SpainProvider(NAVITIA_AUTHORIZATION);
|
|
||||||
else if (networkId.equals(NetworkId.SNCB))
|
|
||||||
return new SncbProvider("{\"type\":\"AID\",\"aid\":\"sncb-mobi\"}");
|
|
||||||
else if (networkId.equals(NetworkId.LU))
|
else if (networkId.equals(NetworkId.LU))
|
||||||
return new LuProvider("{\"type\":\"AID\",\"aid\":\"SkC81GuwuzL4e0\"}");
|
return new LuProvider("{\"type\":\"AID\",\"aid\":\"SkC81GuwuzL4e0\"}");
|
||||||
else if (networkId.equals(NetworkId.NS))
|
else if (networkId.equals(NetworkId.NS))
|
||||||
|
@ -193,12 +176,12 @@ public final class NetworkProviderFactory {
|
||||||
return new DsbProvider("{\"type\":\"AID\",\"aid\":\"irkmpm9mdznstenr-android\"}");
|
return new DsbProvider("{\"type\":\"AID\",\"aid\":\"irkmpm9mdznstenr-android\"}");
|
||||||
else if (networkId.equals(NetworkId.SE))
|
else if (networkId.equals(NetworkId.SE))
|
||||||
return new SeProvider("{\"type\":\"AID\",\"aid\":\"h5o3n7f4t2m8l9x1\"}");
|
return new SeProvider("{\"type\":\"AID\",\"aid\":\"h5o3n7f4t2m8l9x1\"}");
|
||||||
else if (networkId.equals(NetworkId.FINLAND))
|
|
||||||
return new FinlandProvider(NAVITIA_AUTHORIZATION);
|
|
||||||
else if (networkId.equals(NetworkId.TLEM))
|
else if (networkId.equals(NetworkId.TLEM))
|
||||||
return new TlemProvider();
|
return new TlemProvider();
|
||||||
else if (networkId.equals(NetworkId.MERSEY))
|
else if (networkId.equals(NetworkId.MERSEY))
|
||||||
return new MerseyProvider();
|
return new MerseyProvider();
|
||||||
|
else if (networkId.equals(NetworkId.PL))
|
||||||
|
return new PlProvider("{\"type\":\"AID\",\"aid\":\"DrxJYtYZQpEBCtcb\"}");
|
||||||
else if (networkId.equals(NetworkId.DUB))
|
else if (networkId.equals(NetworkId.DUB))
|
||||||
return new DubProvider();
|
return new DubProvider();
|
||||||
else if (networkId.equals(NetworkId.BART))
|
else if (networkId.equals(NetworkId.BART))
|
||||||
|
@ -209,8 +192,6 @@ public final class NetworkProviderFactory {
|
||||||
return new CmtaProvider("{\"type\":\"AID\",\"aid\":\"web9j2nak29uz41irb\"}");
|
return new CmtaProvider("{\"type\":\"AID\",\"aid\":\"web9j2nak29uz41irb\"}");
|
||||||
else if (networkId.equals(NetworkId.SYDNEY))
|
else if (networkId.equals(NetworkId.SYDNEY))
|
||||||
return new SydneyProvider();
|
return new SydneyProvider();
|
||||||
else if (networkId.equals(NetworkId.NICARAGUA))
|
|
||||||
return new NicaraguaProvider(NAVITIA_AUTHORIZATION);
|
|
||||||
else
|
else
|
||||||
throw new IllegalArgumentException(networkId.name());
|
throw new IllegalArgumentException(networkId.name());
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,19 +23,21 @@ import android.content.Intent;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.view.animation.Animation;
|
import android.view.animation.Animation;
|
||||||
import android.view.animation.AnimationUtils;
|
import android.view.animation.AnimationUtils;
|
||||||
import android.widget.PopupMenu;
|
import android.widget.PopupMenu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.ViewAnimator;
|
import android.widget.ViewAnimator;
|
||||||
import androidx.activity.ComponentActivity;
|
import androidx.activity.ComponentActivity;
|
||||||
|
import androidx.activity.EdgeToEdge;
|
||||||
|
import androidx.activity.SystemBarStyle;
|
||||||
import com.google.common.util.concurrent.FutureCallback;
|
import com.google.common.util.concurrent.FutureCallback;
|
||||||
import com.google.common.util.concurrent.Futures;
|
import com.google.common.util.concurrent.Futures;
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
@ -83,6 +85,9 @@ public class PlanActivity extends ComponentActivity {
|
||||||
public static final String INTENT_EXTRA_PLAN_ID = "plan_id"; // Used in launcher shortcuts
|
public static final String INTENT_EXTRA_PLAN_ID = "plan_id"; // Used in launcher shortcuts
|
||||||
private static final String INTENT_EXTRA_SELECTED_STATION_ID = PlanActivity.class.getName()
|
private static final String INTENT_EXTRA_SELECTED_STATION_ID = PlanActivity.class.getName()
|
||||||
+ ".selected_station_id";
|
+ ".selected_station_id";
|
||||||
|
// plan backgrounds are always white, so force navigation bar to light mode
|
||||||
|
private static final SystemBarStyle NAVIGATION_BAR_STYLE = SystemBarStyle.light(Color.TRANSPARENT,
|
||||||
|
Color.TRANSPARENT);
|
||||||
|
|
||||||
public static Intent intent(final Context context, final String planId, final String selectedStationId) {
|
public static Intent intent(final Context context, final String planId, final String selectedStationId) {
|
||||||
final Intent intent = new Intent(Intent.ACTION_VIEW, null, context, PlanActivity.class);
|
final Intent intent = new Intent(Intent.ACTION_VIEW, null, context, PlanActivity.class);
|
||||||
|
@ -117,6 +122,7 @@ public class PlanActivity extends ComponentActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(final Bundle savedInstanceState) {
|
protected void onCreate(final Bundle savedInstanceState) {
|
||||||
|
EdgeToEdge.enable(this, Constants.STATUS_BAR_STYLE, NAVIGATION_BAR_STYLE);
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
this.application = (Application) getApplication();
|
this.application = (Application) getApplication();
|
||||||
|
|
||||||
|
@ -126,7 +132,6 @@ public class PlanActivity extends ComponentActivity {
|
||||||
backgroundHandler = new Handler(backgroundThread.getLooper());
|
backgroundHandler = new Handler(backgroundThread.getLooper());
|
||||||
|
|
||||||
setContentView(R.layout.plans_content);
|
setContentView(R.layout.plans_content);
|
||||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
|
|
||||||
|
|
||||||
final Animation zoomControlsAnimation = AnimationUtils.loadAnimation(this, R.anim.zoom_controls);
|
final Animation zoomControlsAnimation = AnimationUtils.loadAnimation(this, R.anim.zoom_controls);
|
||||||
zoomControlsAnimation.setFillAfter(true); // workaround: set through code because XML does not work
|
zoomControlsAnimation.setFillAfter(true); // workaround: set through code because XML does not work
|
||||||
|
@ -255,11 +260,6 @@ public class PlanActivity extends ComponentActivity {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttachedToWindow() {
|
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onSearchRequested() {
|
public boolean onSearchRequested() {
|
||||||
if (!stations.isEmpty())
|
if (!stations.isEmpty())
|
||||||
|
|
|
@ -38,7 +38,10 @@ import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.core.content.pm.ShortcutInfoCompat;
|
import androidx.core.content.pm.ShortcutInfoCompat;
|
||||||
import androidx.core.content.pm.ShortcutManagerCompat;
|
import androidx.core.content.pm.ShortcutManagerCompat;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
import androidx.core.graphics.drawable.IconCompat;
|
import androidx.core.graphics.drawable.IconCompat;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.google.common.util.concurrent.FutureCallback;
|
import com.google.common.util.concurrent.FutureCallback;
|
||||||
|
@ -110,10 +113,11 @@ public class PlansPickerActivity extends OeffiMainActivity implements LocationHe
|
||||||
thumbCache = new Cache(cacheDir, THUMB_CACHE_SIZE);
|
thumbCache = new Cache(cacheDir, THUMB_CACHE_SIZE);
|
||||||
|
|
||||||
setContentView(R.layout.plans_picker_content);
|
setContentView(R.layout.plans_picker_content);
|
||||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
|
final View contentView = findViewById(android.R.id.content);
|
||||||
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> {
|
||||||
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(insets.left, 0, insets.right, 0);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
actionBar = getMyActionBar();
|
actionBar = getMyActionBar();
|
||||||
|
@ -131,10 +135,10 @@ public class PlansPickerActivity extends OeffiMainActivity implements LocationHe
|
||||||
listView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
|
listView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
|
||||||
listAdapter = new PlansAdapter(this, cursor, thumbCache, this, this, application.okHttpClient());
|
listAdapter = new PlansAdapter(this, cursor, thumbCache, this, this, application.okHttpClient());
|
||||||
listView.setAdapter(listAdapter);
|
listView.setAdapter(listAdapter);
|
||||||
listView.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(listView, (v, windowInsets) -> {
|
||||||
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(),
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
insets.getSystemWindowInsetBottom());
|
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), insets.bottom);
|
||||||
return insets;
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
connectivityWarningView = findViewById(R.id.plans_picker_connectivity_warning_box);
|
connectivityWarningView = findViewById(R.id.plans_picker_connectivity_warning_box);
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
|
|
||||||
package de.schildbach.oeffi.preference;
|
package de.schildbach.oeffi.preference;
|
||||||
|
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceFragment;
|
import android.preference.PreferenceFragment;
|
||||||
import de.schildbach.oeffi.R;
|
import de.schildbach.oeffi.R;
|
||||||
|
@ -25,13 +24,11 @@ import de.schildbach.oeffi.R;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class CommonFragment extends PreferenceFragment {
|
public class CommonFragment extends PreferenceFragment {
|
||||||
private static final String KEY_BATTERY_OPTIMIZATIONS = "battery_optimizations";
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
addPreferencesFromResource(R.xml.preference_common);
|
addPreferencesFromResource(R.xml.preference_common);
|
||||||
findPreference(KEY_BATTERY_OPTIMIZATIONS).setEnabled(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,13 @@ package de.schildbach.oeffi.preference;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import de.schildbach.oeffi.R;
|
import de.schildbach.oeffi.R;
|
||||||
import de.schildbach.oeffi.Variants;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -36,11 +40,21 @@ public class PreferenceActivity extends android.preference.PreferenceActivity {
|
||||||
activity.startActivity(intent);
|
activity.startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(final Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
final View contentView = findViewById(android.R.id.content);
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> {
|
||||||
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
v.setPadding(v.getPaddingLeft(), insets.top, v.getPaddingRight(), v.getPaddingBottom());
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBuildHeaders(final List<Header> target) {
|
public void onBuildHeaders(final List<Header> target) {
|
||||||
loadHeadersFromResource(R.xml.preference_headers, target);
|
loadHeadersFromResource(R.xml.preference_headers, target);
|
||||||
if (Variants.ENABLE_DONATE)
|
loadHeadersFromResource(R.xml.preference_headers_donate, target);
|
||||||
loadHeadersFromResource(R.xml.preference_headers_donate, target);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -59,6 +73,6 @@ public class PreferenceActivity extends android.preference.PreferenceActivity {
|
||||||
return CommonFragment.class.getName().equals(fragmentName)
|
return CommonFragment.class.getName().equals(fragmentName)
|
||||||
|| DirectionsFragment.class.getName().equals(fragmentName)
|
|| DirectionsFragment.class.getName().equals(fragmentName)
|
||||||
|| AboutFragment.class.getName().equals(fragmentName)
|
|| AboutFragment.class.getName().equals(fragmentName)
|
||||||
|| (Variants.ENABLE_DONATE && DonateFragment.class.getName().equals(fragmentName));
|
|| DonateFragment.class.getName().equals(fragmentName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,9 @@ import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.ViewAnimator;
|
import android.widget.ViewAnimator;
|
||||||
import androidx.activity.result.contract.ActivityResultContract;
|
import androidx.activity.result.contract.ActivityResultContract;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import de.schildbach.oeffi.MyActionBar;
|
import de.schildbach.oeffi.MyActionBar;
|
||||||
|
@ -84,10 +87,11 @@ public class FavoriteStationsActivity extends OeffiActivity
|
||||||
network = (NetworkId) intent.getSerializableExtra(INTENT_EXTRA_NETWORK);
|
network = (NetworkId) intent.getSerializableExtra(INTENT_EXTRA_NETWORK);
|
||||||
|
|
||||||
setContentView(R.layout.favorites_content);
|
setContentView(R.layout.favorites_content);
|
||||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
|
final View contentView = findViewById(android.R.id.content);
|
||||||
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> {
|
||||||
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(insets.left, 0, insets.right, 0);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
final MyActionBar actionBar = getMyActionBar();
|
final MyActionBar actionBar = getMyActionBar();
|
||||||
|
@ -102,10 +106,10 @@ public class FavoriteStationsActivity extends OeffiActivity
|
||||||
listView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
|
listView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
|
||||||
adapter = new FavoriteStationsAdapter(this, network, this, network == null ? this : null);
|
adapter = new FavoriteStationsAdapter(this, network, this, network == null ? this : null);
|
||||||
listView.setAdapter(adapter);
|
listView.setAdapter(adapter);
|
||||||
listView.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(listView, (v, windowInsets) -> {
|
||||||
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(),
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
insets.getSystemWindowInsetBottom());
|
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), insets.bottom);
|
||||||
return insets;
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
updateGUI();
|
updateGUI();
|
||||||
|
|
|
@ -34,10 +34,12 @@ import android.text.format.DateUtils;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.ViewAnimator;
|
import android.widget.ViewAnimator;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.google.common.base.Joiner;
|
import com.google.common.base.Joiner;
|
||||||
|
@ -138,10 +140,11 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa
|
||||||
backgroundHandler = new Handler(backgroundThread.getLooper());
|
backgroundHandler = new Handler(backgroundThread.getLooper());
|
||||||
|
|
||||||
setContentView(R.layout.stations_station_details_content);
|
setContentView(R.layout.stations_station_details_content);
|
||||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
|
final View contentView = findViewById(android.R.id.content);
|
||||||
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> {
|
||||||
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(insets.left, 0, insets.right, 0);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
actionBar = getMyActionBar();
|
actionBar = getMyActionBar();
|
||||||
|
@ -175,19 +178,21 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa
|
||||||
listView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
|
listView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
|
||||||
listAdapter = new DeparturesAdapter(this);
|
listAdapter = new DeparturesAdapter(this);
|
||||||
listView.setAdapter(listAdapter);
|
listView.setAdapter(listAdapter);
|
||||||
listView.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(listView, (v, windowInsets) -> {
|
||||||
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(),
|
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(),
|
||||||
insets.getSystemWindowInsetBottom() + (int)(48 * getResources().getDisplayMetrics().density));
|
insets.bottom + (int) (48 * getResources().getDisplayMetrics().density));
|
||||||
return insets;
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
mapView = findViewById(R.id.stations_station_details_map);
|
mapView = findViewById(R.id.stations_station_details_map);
|
||||||
mapView.setStationsAware(this);
|
mapView.setStationsAware(this);
|
||||||
final TextView mapDisclaimerView = findViewById(R.id.stations_station_details_map_disclaimer);
|
final TextView mapDisclaimerView = findViewById(R.id.stations_station_details_map_disclaimer);
|
||||||
mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice());
|
mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice());
|
||||||
mapDisclaimerView.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(mapDisclaimerView, (v, windowInsets) -> {
|
||||||
v.setPadding(0,0,0, insets.getSystemWindowInsetBottom());
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(0, 0, 0, insets.bottom);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
resultStatusView = findViewById(R.id.stations_station_details_result_status);
|
resultStatusView = findViewById(R.id.stations_station_details_result_status);
|
||||||
|
@ -203,9 +208,11 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa
|
||||||
favoriteButton
|
favoriteButton
|
||||||
.setChecked(selectedFavState != null && selectedFavState == FavoriteStationsProvider.TYPE_FAVORITE);
|
.setChecked(selectedFavState != null && selectedFavState == FavoriteStationsProvider.TYPE_FAVORITE);
|
||||||
|
|
||||||
findViewById(R.id.stations_station_details_disclaimer_group).setOnApplyWindowInsetsListener((v, insets) -> {
|
final View disclaimerView = findViewById(R.id.stations_station_details_disclaimer_group);
|
||||||
v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());
|
ViewCompat.setOnApplyWindowInsetsListener(disclaimerView, (v, windowInsets) -> {
|
||||||
return insets;
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
v.setPadding(0, 0, 0, insets.bottom);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
disclaimerSourceView = findViewById(R.id.stations_station_details_disclaimer_source);
|
disclaimerSourceView = findViewById(R.id.stations_station_details_disclaimer_source);
|
||||||
updateDisclaimerSource(disclaimerSourceView, selectedNetwork.name(), null);
|
updateDisclaimerSource(disclaimerSourceView, selectedNetwork.name(), null);
|
||||||
|
@ -258,11 +265,6 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttachedToWindow() {
|
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfigurationChanged(final Configuration config) {
|
public void onConfigurationChanged(final Configuration config) {
|
||||||
super.onConfigurationChanged(config);
|
super.onConfigurationChanged(config);
|
||||||
|
@ -431,9 +433,8 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
final List<Departure> selectedDepartures = StationDetailsActivity.this.selectedDepartures;
|
final List<Departure> selectedDepartures = StationDetailsActivity.this.selectedDepartures;
|
||||||
if (selectedDepartures == null || selectedDepartures.isEmpty())
|
final int numDepartures = selectedDepartures != null ? selectedDepartures.size() : 0;
|
||||||
return 1;
|
return numDepartures + 1; // account for header
|
||||||
return selectedDepartures.size();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -56,6 +56,9 @@ import android.widget.ViewAnimator;
|
||||||
import androidx.activity.result.ActivityResultLauncher;
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
import androidx.activity.result.contract.ActivityResultContracts;
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
@ -184,10 +187,11 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware
|
||||||
res = getResources();
|
res = getResources();
|
||||||
|
|
||||||
setContentView(R.layout.stations_content);
|
setContentView(R.layout.stations_content);
|
||||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
|
final View contentView = findViewById(android.R.id.content);
|
||||||
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> {
|
||||||
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(insets.left, 0, insets.right, 0);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
actionBar = getMyActionBar();
|
actionBar = getMyActionBar();
|
||||||
|
@ -266,22 +270,26 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware
|
||||||
mapView.setLocationAware(this);
|
mapView.setLocationAware(this);
|
||||||
final TextView mapDisclaimerView = findViewById(R.id.stations_map_disclaimer);
|
final TextView mapDisclaimerView = findViewById(R.id.stations_map_disclaimer);
|
||||||
mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice());
|
mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice());
|
||||||
mapDisclaimerView.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(mapDisclaimerView, (v, windowInsets) -> {
|
||||||
v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(0, 0, 0, insets.bottom);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
|
|
||||||
final ZoomControls zoom = findViewById(R.id.stations_map_zoom);
|
final ZoomControls zoom = findViewById(R.id.stations_map_zoom);
|
||||||
zoom.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(zoom, (v, windowInsets) -> {
|
||||||
v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
return insets;
|
v.setPadding(0, 0, 0, insets.bottom);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
mapView.setZoomControls(zoom);
|
mapView.setZoomControls(zoom);
|
||||||
|
|
||||||
connectivityWarningView = findViewById(R.id.stations_connectivity_warning_box);
|
connectivityWarningView = findViewById(R.id.stations_connectivity_warning_box);
|
||||||
findViewById(R.id.stations_disclaimer_group).setOnApplyWindowInsetsListener((v, insets) -> {
|
final View disclaimerView = findViewById(R.id.stations_disclaimer_group);
|
||||||
v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom());
|
ViewCompat.setOnApplyWindowInsetsListener(disclaimerView, (v, windowInsets) -> {
|
||||||
return insets;
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
v.setPadding(0, 0, 0, insets.bottom);
|
||||||
|
return windowInsets;
|
||||||
});
|
});
|
||||||
disclaimerSourceView = findViewById(R.id.stations_disclaimer_source);
|
disclaimerSourceView = findViewById(R.id.stations_disclaimer_source);
|
||||||
|
|
||||||
|
@ -415,10 +423,11 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware
|
||||||
stationList.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
|
stationList.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
|
||||||
stationListAdapter = new StationsAdapter(this, maxDeparturesPerStation, products, this, this);
|
stationListAdapter = new StationsAdapter(this, maxDeparturesPerStation, products, this, this);
|
||||||
stationList.setAdapter(stationListAdapter);
|
stationList.setAdapter(stationListAdapter);
|
||||||
stationList.setOnApplyWindowInsetsListener((v, insets) -> {
|
ViewCompat.setOnApplyWindowInsetsListener(stationList, (v, windowInsets) -> {
|
||||||
|
final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(),
|
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(),
|
||||||
insets.getSystemWindowInsetBottom() + (int)(48 * res.getDisplayMetrics().density));
|
insets.bottom + (int) (48 * res.getDisplayMetrics().density));
|
||||||
return insets;
|
return windowInsets;
|
||||||
});
|
});
|
||||||
stationList.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
stationList.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -181,8 +181,7 @@ public class ErrorReporter implements Thread.UncaughtExceptionHandler {
|
||||||
report.append("Manufacturer: " + Build.MANUFACTURER + "\n");
|
report.append("Manufacturer: " + Build.MANUFACTURER + "\n");
|
||||||
report.append("Phone Model: " + Build.MODEL + "\n");
|
report.append("Phone Model: " + Build.MODEL + "\n");
|
||||||
report.append("Android Version: " + Build.VERSION.RELEASE + "\n");
|
report.append("Android Version: " + Build.VERSION.RELEASE + "\n");
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
|
report.append("Android security patch level: ").append(Build.VERSION.SECURITY_PATCH).append("\n");
|
||||||
report.append("Android security patch level: ").append(Build.VERSION.SECURITY_PATCH).append("\n");
|
|
||||||
report.append("ABIs: ").append(Joiner.on(", ").skipNulls().join(Strings.emptyToNull(Build.CPU_ABI),
|
report.append("ABIs: ").append(Joiner.on(", ").skipNulls().join(Strings.emptyToNull(Build.CPU_ABI),
|
||||||
Strings.emptyToNull(Build.CPU_ABI2))).append("\n");
|
Strings.emptyToNull(Build.CPU_ABI2))).append("\n");
|
||||||
report.append("Board: " + Build.BOARD + "\n");
|
report.append("Board: " + Build.BOARD + "\n");
|
||||||
|
@ -315,15 +314,12 @@ public class ErrorReporter implements Thread.UncaughtExceptionHandler {
|
||||||
|
|
||||||
private final static Pattern PATTERN_VERSION = Pattern.compile("<dt id=\"(\\d+)\">([^<]*)</dt>");
|
private final static Pattern PATTERN_VERSION = Pattern.compile("<dt id=\"(\\d+)\">([^<]*)</dt>");
|
||||||
|
|
||||||
public void check(final Context context, final int applicationVersionCode, final String applicationVersionFlavor,
|
public void check(final Context context, final int applicationVersionCode, final OkHttpClient okHttpClient) {
|
||||||
final OkHttpClient okHttpClient) {
|
|
||||||
if (!stackTraceFile.exists())
|
if (!stackTraceFile.exists())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
final HttpUrl.Builder url = HttpUrl.parse(context.getString(R.string.about_changelog_summary)).newBuilder();
|
final HttpUrl.Builder url = HttpUrl.parse(context.getString(R.string.about_changelog_summary)).newBuilder();
|
||||||
url.addQueryParameter("version", Integer.toString(applicationVersionCode));
|
url.addQueryParameter("version", Integer.toString(applicationVersionCode));
|
||||||
if (applicationVersionFlavor != null)
|
|
||||||
url.addQueryParameter("flavor", applicationVersionFlavor);
|
|
||||||
url.addQueryParameter("sdk", Integer.toString(Build.VERSION.SDK_INT));
|
url.addQueryParameter("sdk", Integer.toString(Build.VERSION.SDK_INT));
|
||||||
url.addQueryParameter("check", null);
|
url.addQueryParameter("check", null);
|
||||||
final Request.Builder request = new Request.Builder().url(url.build());
|
final Request.Builder request = new Request.Builder().url(url.build());
|
||||||
|
|
|
@ -18,9 +18,6 @@
|
||||||
package de.schildbach.oeffi.util;
|
package de.schildbach.oeffi.util;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.PorterDuff;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import de.schildbach.oeffi.R;
|
|
||||||
|
|
||||||
public class Toast {
|
public class Toast {
|
||||||
private final Context context;
|
private final Context context;
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 323610558ee71380df004565d2eb73da3dab0113
|
Subproject commit c7f77ac4c89b9dbb31625998b9de1dd3d617d68a
|
|
@ -9,8 +9,7 @@ if (GradleVersion.current() < minGradleVersion || GradleVersion.current() >= max
|
||||||
throw new GradleScriptException("build requires Gradle between ${minGradleVersion.version} (including) and ${maxGradleVersion.version} (excluding)", null)
|
throw new GradleScriptException("build requires Gradle between ${minGradleVersion.version} (including) and ${maxGradleVersion.version} (excluding)", null)
|
||||||
|
|
||||||
gradle.startParameter.excludedTaskNames << "lint"
|
gradle.startParameter.excludedTaskNames << "lint"
|
||||||
gradle.startParameter.excludedTaskNames << ":oeffi:lintVitalAospRelease"
|
gradle.startParameter.excludedTaskNames << ":oeffi:lintVitalRelease"
|
||||||
gradle.startParameter.excludedTaskNames << ":oeffi:lintVitalGoogleRelease"
|
|
||||||
|
|
||||||
include 'oeffi'
|
include 'oeffi'
|
||||||
include 'public-transport-enabler'
|
include 'public-transport-enabler'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue