From 8f5182e63639909a2dcb5ee772da460ded5ab69f Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 12 Apr 2021 13:25:50 +0200 Subject: [PATCH 001/218] build.gradle: Don't generate hdpi and xhdpi launcher icons any more. --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index b7179ae..266d43c 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -101,7 +101,7 @@ android { task svgToPng(type: fr.avianey.androidsvgdrawable.gradle.SvgDrawableTask) { from = files('graphics') to = file('res') - targetedDensities = ['hdpi', 'xhdpi', 'xxhdpi', 'xxxhdpi'] + targetedDensities = ['xxhdpi', 'xxxhdpi'] outputFormat = 'PNG' outputType = 'mipmap' } From 437f8b398fb66a2e0e9cb6ba020b57e610b94db2 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 11 Aug 2021 16:48:10 +0200 Subject: [PATCH 002/218] build.gradle: Update AndroidX RecyclerView to 1.2.1. --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 266d43c..a68895b 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation project(':public-transport-enabler') implementation 'de.schildbach.wallet:integration-android:2.0' implementation 'androidx.annotation:annotation:1.2.0' - implementation 'androidx.recyclerview:recyclerview:1.2.0' + implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' implementation 'androidx.core:core:1.3.2' From 5e95dc3fa9d7f8654cb7d88a215e5e9bd7e5f812 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 11 Aug 2021 16:50:59 +0200 Subject: [PATCH 003/218] build.gradle: Update AndroidX Core to 1.6.0. --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index a68895b..3ffe9e8 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -17,7 +17,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' - implementation 'androidx.core:core:1.3.2' + implementation 'androidx.core:core:1.6.0' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency From 15aa0e3d67b2527095f8e82be2f8157d479d5b7b Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 11 Aug 2021 16:55:31 +0200 Subject: [PATCH 004/218] 12.0.11 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 7aa3dc0..f221d51 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120011" + android:versionName="12.0.11"> Date: Sat, 18 Sep 2021 13:24:21 +0200 Subject: [PATCH 005/218] Adapt to: SBB: Remove provider for Switzerland. --- oeffi/assets/networks.txt | 1 - oeffi/res/values-de/networks.xml | 2 -- oeffi/res/values/networks.xml | 2 -- oeffi/src/de/schildbach/oeffi/Application.java | 6 ++++++ .../de/schildbach/oeffi/network/NetworkProviderFactory.java | 3 --- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/oeffi/assets/networks.txt b/oeffi/assets/networks.txt index a963e1f..5fe780e 100644 --- a/oeffi/assets/networks.txt +++ b/oeffi/assets/networks.txt @@ -50,7 +50,6 @@ VMOBIL|de-AT|Vorarlberg;Bregenz|disabled CZECH_REPUBLIC|cs-CZ|Tschechien;Praha;Prag|beta # CH -SBB|de-CH|CH VBL|de-CH|Luzern ZVV|de-CH|Zürich diff --git a/oeffi/res/values-de/networks.xml b/oeffi/res/values-de/networks.xml index 4f1d316..5ec93de 100644 --- a/oeffi/res/values-de/networks.xml +++ b/oeffi/res/values-de/networks.xml @@ -85,8 +85,6 @@ 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. Prag Lokal- und Regionalverkehr - Schweiz - Fern- und Regionalverkehr (z.B. Genf, Basel, Bern) Luzern nur Tram und Bus Zürich diff --git a/oeffi/res/values/networks.xml b/oeffi/res/values/networks.xml index e2631b0..8a2eca1 100644 --- a/oeffi/res/values/networks.xml +++ b/oeffi/res/values/networks.xml @@ -85,8 +85,6 @@ 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. Prague local and regional - long-distance and regional (e.g. Geneva, Basel, Bern) - Switzerland Lucerne tram and bus only Zurich diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index 6a6f9ef..a69fcab 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -114,6 +114,12 @@ public class Application extends android.app.Application { for (final File file : getFilesDir().listFiles(filter)) 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); + log.info("Migrations took {}", watch); initNotificationManager(); diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 102218a..c76ca61 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -53,7 +53,6 @@ import de.schildbach.pte.ParisProvider; import de.schildbach.pte.PlProvider; import de.schildbach.pte.RtProvider; import de.schildbach.pte.RtaChicagoProvider; -import de.schildbach.pte.SbbProvider; import de.schildbach.pte.SeProvider; import de.schildbach.pte.ShProvider; import de.schildbach.pte.SncbProvider; @@ -176,8 +175,6 @@ public final class NetworkProviderFactory { return new StvProvider(); else if (networkId.equals(NetworkId.CZECH_REPUBLIC)) return new CzechRepublicProvider(NAVITIA_AUTHORIZATION); - else if (networkId.equals(NetworkId.SBB)) - return new SbbProvider(); else if (networkId.equals(NetworkId.VBL)) return new VblProvider(); else if (networkId.equals(NetworkId.ZVV)) From fcb543c342f386d0f98453b53198da539d43dbaa Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 18 Sep 2021 13:14:41 +0200 Subject: [PATCH 006/218] build.gradle: Update SLF4J to 1.7.32. --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 3ffe9e8..c9536ae 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' implementation 'com.google.guava:guava:30.1-android' implementation 'org.osmdroid:osmdroid-android:6.1.8' - implementation 'org.slf4j:slf4j-api:1.7.30' + implementation 'org.slf4j:slf4j-api:1.7.32' implementation 'com.github.tony19:logback-android:2.0.0' testImplementation 'junit:junit:4.13.1' } From 6ffbfa55ee3c286912a8eba7ff794c37ad520a47 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 18 Sep 2021 13:15:34 +0200 Subject: [PATCH 007/218] build.gradle: Update JUnit to 4.13.2. --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index c9536ae..e47afe7 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation 'org.osmdroid:osmdroid-android:6.1.8' implementation 'org.slf4j:slf4j-api:1.7.32' implementation 'com.github.tony19:logback-android:2.0.0' - testImplementation 'junit:junit:4.13.1' + testImplementation 'junit:junit:4.13.2' } android { From cbb1f626369cd3cc486377e1413ebf1da1db1165 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 18 Sep 2021 13:16:02 +0200 Subject: [PATCH 008/218] build.gradle: Update Guava to 30.1.1-android. --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index e47afe7..115ba4f 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' - implementation 'com.google.guava:guava:30.1-android' + implementation 'com.google.guava:guava:30.1.1-android' implementation 'org.osmdroid:osmdroid-android:6.1.8' implementation 'org.slf4j:slf4j-api:1.7.32' implementation 'com.github.tony19:logback-android:2.0.0' From 06278a24f9cbed54222b58f6549ead9aefce042f Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 18 Sep 2021 13:24:48 +0200 Subject: [PATCH 009/218] build.gradle: Update osmdroid to 6.1.11. --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 115ba4f..2f7d2ee 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -23,7 +23,7 @@ dependencies { //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' implementation 'com.google.guava:guava:30.1.1-android' - implementation 'org.osmdroid:osmdroid-android:6.1.8' + implementation 'org.osmdroid:osmdroid-android:6.1.11' implementation 'org.slf4j:slf4j-api:1.7.32' implementation 'com.github.tony19:logback-android:2.0.0' testImplementation 'junit:junit:4.13.2' From 357cd922f59e000482aeefa475140fb5bb442e46 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 18 Sep 2021 13:31:22 +0200 Subject: [PATCH 010/218] 12.0.12 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index f221d51..f7b7716 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120012" + android:versionName="12.0.12"> Date: Wed, 15 Sep 2021 12:00:32 +0200 Subject: [PATCH 011/218] .gitlab-ci.yml: Set up GitLab CI. --- .gitlab-ci.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..c2380b4 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,22 @@ +image: ubuntu:focal + +variables: + GIT_SUBMODULE_STRATEGY: recursive + ANDROID_HOME: $PWD/android-sdk + ANDROID_SDK_TOOLS: 7583922_latest + ANDROID_SDK_LICENSE_HASH: 24333f8a63b6825ea9c5514f83c2829b004d1fee + +before_script: + - apt-get update + - apt-get -y upgrade + - apt-get -y install openjdk-8-jdk + - apt-get -y install wget gradle + - wget --quiet --output-document=commandlinetools-linux.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}.zip + - mkdir -p ${ANDROID_HOME} + - unzip -d ${ANDROID_HOME} commandlinetools-linux.zip + - mkdir -p ${ANDROID_HOME}/licenses + - echo -e "\n${ANDROID_SDK_LICENSE_HASH}" >> ${ANDROID_HOME}/licenses/android-sdk-license + +build: + script: + - gradle build --stacktrace From fb4da3b20e676b5aac301734da43559173c85577 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 18 Sep 2021 15:32:49 +0200 Subject: [PATCH 012/218] gradle.properties: Enable D8 bytecode desugaring. This is mainly to work around this issue: https://issuetracker.google.com/u/0/issues/72872257 --- gradle.properties | 1 + oeffi/proguard.cfg | 2 ++ 2 files changed, 3 insertions(+) diff --git a/gradle.properties b/gradle.properties index b3c7a03..af6b7f1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1,2 @@ org.gradle.jvmargs=-Xmx2048M +android.enableD8.desugaring=true diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index 3467962..9376e30 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -32,6 +32,8 @@ public static ; } +-dontwarn java.lang.invoke.** + # serializable -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; From e459b6265bca031ac891242e7a2a27e3591a4dbd Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 18 Sep 2021 14:15:55 +0200 Subject: [PATCH 013/218] .gitlab-ci.yml: Also run CI with OpenJDK 11. --- .gitlab-ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c2380b4..86bab0b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,7 +9,7 @@ variables: before_script: - apt-get update - apt-get -y upgrade - - apt-get -y install openjdk-8-jdk + - apt-get -y install ${JDK_PACKAGE} - apt-get -y install wget gradle - wget --quiet --output-document=commandlinetools-linux.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}.zip - mkdir -p ${ANDROID_HOME} @@ -18,5 +18,8 @@ before_script: - echo -e "\n${ANDROID_SDK_LICENSE_HASH}" >> ${ANDROID_HOME}/licenses/android-sdk-license build: + parallel: + matrix: + - JDK_PACKAGE: [ openjdk-8-jdk, openjdk-11-jdk ] script: - gradle build --stacktrace From 116869f34c78b0fb4bc2061b390833d2b6d66db0 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 19 Sep 2021 22:16:38 +0200 Subject: [PATCH 014/218] network_security_config.xml: Remove unused domains. --- oeffi/res/xml/network_security_config.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/oeffi/res/xml/network_security_config.xml b/oeffi/res/xml/network_security_config.xml index 320e39d..7f0db28 100644 --- a/oeffi/res/xml/network_security_config.xml +++ b/oeffi/res/xml/network_security_config.xml @@ -18,8 +18,6 @@ mobil.vbl.ch efa.vvo-online.de mobil.rozklad-pkp.pl - efa.mobilitaetsverbund.de - fahrplan.sbb.ch From afe6c2d2a1bfd5883f29563d6541cec8608afc79 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 6 Oct 2021 14:01:55 +0200 Subject: [PATCH 015/218] build.gradle: update Guava to 31.0.1-android --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 2f7d2ee..5045f3e 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' - implementation 'com.google.guava:guava:30.1.1-android' + implementation 'com.google.guava:guava:31.0.1-android' implementation 'org.osmdroid:osmdroid-android:6.1.11' implementation 'org.slf4j:slf4j-api:1.7.32' implementation 'com.github.tony19:logback-android:2.0.0' From 0e331ed723758a02e233f44e849f2225712feeb9 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 6 Oct 2021 14:12:23 +0200 Subject: [PATCH 016/218] 12.0.13 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index f7b7716..d3022ef 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120013" + android:versionName="12.0.13"> Date: Mon, 18 Oct 2021 01:35:33 +0200 Subject: [PATCH 017/218] 12.0.14 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index d3022ef..34bc7b9 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120014" + android:versionName="12.0.14"> Date: Tue, 2 Nov 2021 13:23:40 +0100 Subject: [PATCH 018/218] preference_about.xml: link to privacy policy --- oeffi/res/values-de/strings.xml | 2 ++ oeffi/res/values/strings.xml | 2 ++ oeffi/res/xml/preference_about.xml | 7 +++++++ 3 files changed, 11 insertions(+) diff --git a/oeffi/res/values-de/strings.xml b/oeffi/res/values-de/strings.xml index 9a9c10d..f89554e 100644 --- a/oeffi/res/values-de/strings.xml +++ b/oeffi/res/values-de/strings.xml @@ -48,6 +48,8 @@ Urheberrecht © 2010-2019, die Öffi-Entwickler Lizenz + Datenschutz-Bestimmungen + https://oeffi.schildbach.de/privacy_policy_de.txt Quellcode Änderungshistorie anzeigen https://oeffi.schildbach.de/changelog_de.html diff --git a/oeffi/res/values/strings.xml b/oeffi/res/values/strings.xml index 8edc02a..96d47c0 100644 --- a/oeffi/res/values/strings.xml +++ b/oeffi/res/values/strings.xml @@ -48,6 +48,8 @@ Copyright © 2010-2021, the Öffi developers License + Privacy Policy + https://oeffi.schildbach.de/privacy_policy.txt Source code View Changelog https://oeffi.schildbach.de/changelog.html diff --git a/oeffi/res/xml/preference_about.xml b/oeffi/res/xml/preference_about.xml index d2ebe68..f0881b5 100644 --- a/oeffi/res/xml/preference_about.xml +++ b/oeffi/res/xml/preference_about.xml @@ -16,6 +16,13 @@ android:action="android.intent.action.VIEW" android:data="https://www.gnu.org/licenses/gpl-3.0.txt" /> + + + Date: Tue, 2 Nov 2021 13:43:23 +0100 Subject: [PATCH 019/218] 12.0.15 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 34bc7b9..022dccc 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120015" + android:versionName="12.0.15"> Date: Sat, 6 Nov 2021 23:09:11 +0100 Subject: [PATCH 020/218] 12.0.16 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 022dccc..e92c923 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120016" + android:versionName="12.0.16"> Date: Wed, 9 Feb 2022 16:15:53 +0100 Subject: [PATCH 021/218] build.gradle: update SLF4J to 1.7.36 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 5045f3e..116158c 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' implementation 'com.google.guava:guava:31.0.1-android' implementation 'org.osmdroid:osmdroid-android:6.1.11' - implementation 'org.slf4j:slf4j-api:1.7.32' + implementation 'org.slf4j:slf4j-api:1.7.36' implementation 'com.github.tony19:logback-android:2.0.0' testImplementation 'junit:junit:4.13.2' } From 329e6e5e81392a76658826e26fd5da3b616611c2 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 9 Feb 2022 16:18:44 +0100 Subject: [PATCH 022/218] build.gradle: update AndroidX Annotation to 1.3.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 116158c..fe735a7 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -13,7 +13,7 @@ configurations { dependencies { implementation project(':public-transport-enabler') implementation 'de.schildbach.wallet:integration-android:2.0' - implementation 'androidx.annotation:annotation:1.2.0' + implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' From dedae2266fb8e7ac1d7901ad37bfef179133213b Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 9 Feb 2022 16:22:05 +0100 Subject: [PATCH 023/218] build.gradle: update AndroidX CoordinatorLayout to 1.2.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index fe735a7..2fcc1d9 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -15,7 +15,7 @@ dependencies { implementation 'de.schildbach.wallet:integration-android:2.0' implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' + implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' implementation 'androidx.core:core:1.6.0' //noinspection GradleDependency From c14a230d9430f170ed8d523825c037c240cd45b5 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 9 Feb 2022 16:23:10 +0100 Subject: [PATCH 024/218] 12.0.17 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index e92c923..876e0af 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120017" + android:versionName="12.0.17"> Date: Tue, 1 Mar 2022 10:36:29 +0100 Subject: [PATCH 025/218] build.gradle: update Guava to 31.1-android --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 2fcc1d9..761d4c7 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' - implementation 'com.google.guava:guava:31.0.1-android' + implementation 'com.google.guava:guava:31.1-android' implementation 'org.osmdroid:osmdroid-android:6.1.11' implementation 'org.slf4j:slf4j-api:1.7.36' implementation 'com.github.tony19:logback-android:2.0.0' From c0248193a31c597601adde9342950832bccbc7c9 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 2 Apr 2022 12:17:58 +0200 Subject: [PATCH 026/218] build.gradle: don't exclude 'okhttp3/internal/publicsuffix/publicsuffixes.gz' from APK It's needed by OkHttp for cookies somehow. See https://github.com/square/okhttp/issues/3582 --- oeffi/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 761d4c7..71df129 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -94,7 +94,6 @@ android { exclude 'META-INF/proguard/**' exclude 'META-INF/*.kotlin_module' exclude 'kotlin/**' - exclude 'okhttp3/internal/publicsuffix/publicsuffixes.gz' } } From 286c375b3a0dee7d33e07e694bc945b8d89e16ab Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 2 Apr 2022 12:37:50 +0200 Subject: [PATCH 027/218] 12.0.18 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 876e0af..fab5cff 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120018" + android:versionName="12.0.18"> Date: Wed, 15 Jun 2022 20:03:43 +0200 Subject: [PATCH 028/218] StationContextMenu: remove support for specific external maps apps Just support the `geo:` URI scheme, it seems to work good enough. --- oeffi/res/menu/station_map_context.xml | 20 +------ oeffi/res/values-de/select_map.xml | 6 +- oeffi/res/values/select_map.xml | 6 +- .../oeffi/stations/StationContextMenu.java | 57 +++---------------- 4 files changed, 12 insertions(+), 77 deletions(-) diff --git a/oeffi/res/menu/station_map_context.xml b/oeffi/res/menu/station_map_context.xml index 2926ee0..f3458ad 100644 --- a/oeffi/res/menu/station_map_context.xml +++ b/oeffi/res/menu/station_map_context.xml @@ -3,24 +3,8 @@ xmlns:android="http://schemas.android.com/apk/res/android"> - - - - + android:title="@string/map_dialog_maps" /> diff --git a/oeffi/res/values-de/select_map.xml b/oeffi/res/values-de/select_map.xml index a352113..4ede69e 100644 --- a/oeffi/res/values-de/select_map.xml +++ b/oeffi/res/values-de/select_map.xml @@ -1,10 +1,6 @@ - Google Maps - Amazon Maps - OpenStreetMap - Street View - Navigation für Fußgänger + externe Karte diff --git a/oeffi/res/values/select_map.xml b/oeffi/res/values/select_map.xml index 9068e4e..663812e 100644 --- a/oeffi/res/values/select_map.xml +++ b/oeffi/res/values/select_map.xml @@ -1,10 +1,6 @@ - Google Maps - Amazon Maps - OpenStreetMap - Street View - Walking Directions + External map diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationContextMenu.java b/oeffi/src/de/schildbach/oeffi/stations/StationContextMenu.java index 21b780c..0b9ded6 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationContextMenu.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationContextMenu.java @@ -22,7 +22,6 @@ import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.view.LayoutInflater; @@ -121,54 +120,23 @@ public class StationContextMenu extends PopupMenu { public static void prepareMapMenu(final Context context, final Menu menu, final NetworkId network, final Location location) { new MenuInflater(context).inflate(R.menu.station_map_context, menu); - final MenuItem googleMapsItem = menu.findItem(R.id.station_map_context_google_maps); - final MenuItem amazonMapsItem = menu.findItem(R.id.station_map_context_amazon_maps); - final MenuItem openStreetMapItem = menu.findItem(R.id.station_map_context_openstreetmap); - final MenuItem googleStreetViewItem = menu.findItem(R.id.station_map_context_google_street_view); - final MenuItem googleNavigationItem = menu.findItem(R.id.station_map_context_google_navigation); + final MenuItem mapsItem = menu.findItem(R.id.station_map_context_maps); if (location.hasCoord()) { final double lat = location.getLatAsDouble(); final double lon = location.getLonAsDouble(); final String name = location.name; - final Intent googleMapsIntent = new Intent(Intent.ACTION_VIEW, + final Intent mapsIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(String.format(Locale.ENGLISH, "geo:%.6f,%.6f?q=%.6f,%.6f%s", lat, lon, lat, lon, name != null ? '(' + URLEncoder.encode(name.replaceAll("[()]", "")) + ')' : ""))); - googleMapsIntent.setComponent( - new ComponentName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity")); - prepareMapMenuItem(context, googleMapsItem, googleMapsIntent); - - final Intent amazonMapsIntent = new Intent(Intent.ACTION_VIEW, - Uri.parse(String.format(Locale.ENGLISH, "geo:%.6f,%.6f?q=%.6f,%.6f%s", lat, lon, lat, lon, - name != null ? '(' + URLEncoder.encode(name.replaceAll("[()]", "")) + ')' : ""))); - amazonMapsIntent.setComponent(new ComponentName("com.amazon.geo.client.maps", - "com.amazon.geo.client.renderer.MapsAppActivityDuke")); - prepareMapMenuItem(context, amazonMapsItem, amazonMapsIntent); - - final Intent openStreetMapIntent = new Intent(Intent.ACTION_VIEW, - Uri.parse(String.format(Locale.ENGLISH, "osmand.geo:%.6f,%.6f?q=%.6f,%.6f%s", lat, lon, lat, lon, - name != null ? '(' + URLEncoder.encode(name.replaceAll("[()]", "")) + ')' : ""))); - prepareMapMenuItem(context, openStreetMapItem, openStreetMapIntent); - - final Intent googleStreetViewIntent = new Intent(Intent.ACTION_VIEW, - Uri.parse(String.format(Locale.ENGLISH, "google.streetview:cbll=%.6f,%.6f", lat, lon))); - googleStreetViewIntent - .setComponent(new ComponentName("com.google.android.street", "com.google.android.street.Street")); - prepareMapMenuItem(context, googleStreetViewItem, googleStreetViewIntent); - - final Intent googleNavigationIntent = new Intent(Intent.ACTION_VIEW, - Uri.parse(String.format(Locale.ENGLISH, "google.navigation:ll=%.6f,%.6f&title=%s&mode=w", lat, lon, - name != null ? URLEncoder.encode(name) : ""))); - googleNavigationIntent.setComponent(new ComponentName("com.google.android.apps.maps", - "com.google.android.maps.driveabout.app.NavigationActivity")); - prepareMapMenuItem(context, googleNavigationItem, googleNavigationIntent); + mapsItem.setOnMenuItemClickListener(item -> { + context.startActivity(mapsIntent); + return true; + }); + mapsItem.setVisible(true); } else { - googleMapsItem.setVisible(false); - amazonMapsItem.setVisible(false); - openStreetMapItem.setVisible(false); - googleStreetViewItem.setVisible(false); - googleNavigationItem.setVisible(false); + mapsItem.setVisible(false); } final ContentResolver contentResolver = context.getContentResolver(); @@ -192,13 +160,4 @@ public class StationContextMenu extends PopupMenu { stationsCursor.close(); } } - - private static void prepareMapMenuItem(final Context context, final MenuItem item, final Intent intent) { - final PackageManager pm = context.getPackageManager(); - item.setVisible(pm.resolveActivity(intent, 0) != null); - item.setOnMenuItemClickListener(item1 -> { - context.startActivity(intent); - return true; - }); - } } From c021055fdb47c8650d1f47db9ebd91a227823eae Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 15 Jun 2022 20:35:56 +0200 Subject: [PATCH 029/218] 12.0.19 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index fab5cff..28e97b3 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120019" + android:versionName="12.0.19"> Date: Sat, 18 Jun 2022 14:42:16 +0200 Subject: [PATCH 030/218] 12.0.20 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 28e97b3..728b273 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120020" + android:versionName="12.0.20"> Date: Mon, 15 Aug 2022 17:45:56 +0200 Subject: [PATCH 031/218] AndroidManifest.xml: explicitly declare `exported` on all components with intent filters It's one of the requirements for targetSdkVersion 31. --- oeffi/AndroidManifest.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 728b273..6071e6d 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -86,6 +86,7 @@ @@ -206,6 +208,7 @@ @@ -236,6 +239,7 @@ @@ -257,6 +261,7 @@ @@ -511,6 +517,7 @@ Date: Mon, 15 Aug 2022 17:50:42 +0200 Subject: [PATCH 032/218] NearestFavoriteStationWidgetService: make all PendingIntents immutable Declaring the mutability is one of the requirements for targetSdkVersion 31. --- .../oeffi/stations/NearestFavoriteStationWidgetService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java index 086cda1..5db1406 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java +++ b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java @@ -135,7 +135,7 @@ public class NearestFavoriteStationWidgetService extends JobIntentService { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED)) { final PendingIntent intent = PendingIntent.getActivity(this, 0, new Intent(this, - NearestFavoriteStationsWidgetPermissionActivity.class), 0); + NearestFavoriteStationsWidgetPermissionActivity.class), PendingIntent.FLAG_IMMUTABLE); widgetsMessage(appWidgetIds, getString(R.string.nearest_favorite_station_widget_no_location_permission), intent); log.info("No location permission"); return; @@ -381,7 +381,7 @@ public class NearestFavoriteStationWidgetService extends JobIntentService { intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { appWidgetId }); intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); - return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); } private static class Favorite implements Comparable { From 95ea2d72f6758465b64bab1fccb70862e49c1043 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 15 Aug 2022 17:53:59 +0200 Subject: [PATCH 033/218] AndroidManifest.xml: target Android 12 This also raises the JDK requirement to OpenJDK 11. --- oeffi/AndroidManifest.xml | 2 +- oeffi/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 6071e6d..80a5d5b 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -24,7 +24,7 @@ + android:targetSdkVersion="31" /> diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 71df129..500ab2b 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -30,7 +30,7 @@ dependencies { } android { - compileSdkVersion 'android-30' + compileSdkVersion 'android-31' buildToolsVersion '30.0.3' defaultConfig { From a16e298047d1ca8e62c96c6b246f6efdc28b05ca Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 15 Aug 2022 17:56:30 +0200 Subject: [PATCH 034/218] 12.0.21 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 80a5d5b..be21a31 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120021" + android:versionName="12.0.21"> Date: Mon, 15 Aug 2022 21:45:57 +0200 Subject: [PATCH 035/218] DonateFragment: craft bitcoin URI by hand This lets us get rid of the `integration-android` artifact. --- oeffi/build.gradle | 1 - oeffi/res/values/strings.xml | 1 + oeffi/res/xml/preference_donate.xml | 6 +++++- oeffi/src/de/schildbach/oeffi/Constants.java | 2 -- .../de/schildbach/oeffi/preference/DonateFragment.java | 9 --------- 5 files changed, 6 insertions(+), 13 deletions(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 500ab2b..a515e7f 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -12,7 +12,6 @@ configurations { dependencies { implementation project(':public-transport-enabler') - implementation 'de.schildbach.wallet:integration-android:2.0' implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' diff --git a/oeffi/res/values/strings.xml b/oeffi/res/values/strings.xml index 96d47c0..de9c494 100644 --- a/oeffi/res/values/strings.xml +++ b/oeffi/res/values/strings.xml @@ -60,6 +60,7 @@ Donations Donate Bitcoins Bitcoin is an Internet currency. + bitcoin:bc1q8ruc8hanp7hrzfs48dvtuzz4ukmpe7cgsvvzrt Donate Euros https://oeffi.schildbach.de/donate.html diff --git a/oeffi/res/xml/preference_donate.xml b/oeffi/res/xml/preference_donate.xml index 78f34fb..dc906d1 100644 --- a/oeffi/res/xml/preference_donate.xml +++ b/oeffi/res/xml/preference_donate.xml @@ -5,7 +5,11 @@ + android:title="@string/about_donate_bitcoin_title"> + + { - BitcoinIntegration.request(getActivity(), Constants.BITCOIN_ADDRESS); - return true; - }); } } From 996a89a13339ebd5218f465ee41f1e19e8f0b72e Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 16 Aug 2022 16:09:28 +0200 Subject: [PATCH 036/218] NearestFavoriteStationWidgetProvider: immediately refresh app-widget on boot complete It takes annoyingly long for the regular app-widget update broadcast to arrive. --- oeffi/AndroidManifest.xml | 4 ++++ .../NearestFavoriteStationWidgetProvider.java | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index be21a31..6d73e11 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -34,6 +34,7 @@ + + + + diff --git a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetProvider.java b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetProvider.java index 709fe44..249370a 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetProvider.java +++ b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetProvider.java @@ -21,8 +21,24 @@ import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class NearestFavoriteStationWidgetProvider extends AppWidgetProvider { + + private static final Logger log = LoggerFactory.getLogger(NearestFavoriteStationWidgetProvider.class); + + @Override + public void onReceive(final Context context, final Intent intent) { + final String action = intent.getAction(); + log.info("got broadcast: {}", action); + + if (Intent.ACTION_BOOT_COMPLETED.equals(action)) + NearestFavoriteStationWidgetService.enqueueWork(context, new Intent()); + else + super.onReceive(context, intent); + } + @Override public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) { NearestFavoriteStationWidgetService.enqueueWork(context, new Intent()); From 34fd491c92b46b7acbb9f04d299485f88e7fb7c9 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 15 Aug 2022 21:52:24 +0200 Subject: [PATCH 037/218] build.gradle: update AndroidX Core to 1.8.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index a515e7f..c6e5f20 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -16,7 +16,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' - implementation 'androidx.core:core:1.6.0' + implementation 'androidx.core:core:1.8.0' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency From 1a40a3213e562a44e51f82e8001ba3a00f5df1d3 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 15 Aug 2022 21:56:12 +0200 Subject: [PATCH 038/218] build.gradle: update AndroidX Annotation to 1.4.0 --- oeffi/build.gradle | 2 +- oeffi/proguard.cfg | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index c6e5f20..23f3d6e 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -12,7 +12,7 @@ configurations { dependencies { implementation project(':public-transport-enabler') - implementation 'androidx.annotation:annotation:1.3.0' + implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index 9376e30..2158d22 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -47,8 +47,10 @@ # androidx -dontwarn androidx.core.** +-dontwarn module-info -dontnote androidx.core.** -dontnote androidx.versionedparcelable.VersionedParcel +-dontnote kotlin.** # OkHttp -dontwarn okio.DeflaterSink From d296a84934b0766faf5922b578f656f83db1bae2 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 15 Aug 2022 22:06:11 +0200 Subject: [PATCH 039/218] build.gradle: update SDK Build Tools to 33.0.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 23f3d6e..8d2d341 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -30,7 +30,7 @@ dependencies { android { compileSdkVersion 'android-31' - buildToolsVersion '30.0.3' + buildToolsVersion '33.0.0' defaultConfig { generatedDensities = ['hdpi', 'xhdpi'] From 5b119a5b3fbf8a022c0f11a91f27243d2dc21a64 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 16 Aug 2022 16:36:17 +0200 Subject: [PATCH 040/218] 12.0.22 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 6d73e11..a2e6313 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120022" + android:versionName="12.0.22"> Date: Tue, 23 Aug 2022 11:33:18 +0200 Subject: [PATCH 041/218] FavoriteStationsActivity: refresh app-widget if favorite is deleted --- .../de/schildbach/oeffi/stations/FavoriteStationsActivity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java index 86c3664..0463554 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java @@ -121,6 +121,7 @@ public class FavoriteStationsActivity extends OeffiActivity } else if (menuItemId == R.id.station_context_remove_favorite) { adapter.removeEntry(adapterPosition); updateGUI(); + FavoriteUtils.notifyFavoritesChanged(this); return true; } else { return false; From 619853a04a72bc8c1ddc3f9d09391c9f19f2af04 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 23 Aug 2022 13:49:15 +0200 Subject: [PATCH 042/218] NearestFavoriteStationsWidgetPermissionActivity: add logging for permission requests and grants --- ...FavoriteStationsWidgetPermissionActivity.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java index 0f9e752..8df94ea 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java @@ -19,20 +19,32 @@ package de.schildbach.oeffi.stations; import android.Manifest; import android.app.Activity; +import android.content.pm.PackageManager; import android.os.Bundle; import androidx.core.app.ActivityCompat; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; public class NearestFavoriteStationsWidgetPermissionActivity extends Activity { + private static final Logger log = LoggerFactory.getLogger(NearestFavoriteStationsWidgetPermissionActivity.class); + @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.ACCESS_BACKGROUND_LOCATION }, 0); + final String[] permissions = { Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_BACKGROUND_LOCATION }; + log.info("Requesting permissions: {}", Arrays.toString(permissions)); + ActivityCompat.requestPermissions(this, permissions, 0); } @Override public void onRequestPermissionsResult(final int requestCode, final String[] permissions, final int[] grantResults) { + for (int i = 0; i < permissions.length; i++) + log.info("{}{} granted", + permissions[i], grantResults[i] == PackageManager.PERMISSION_GRANTED ? "" : " " + "not"); FavoriteUtils.notifyFavoritesChanged(this); finish(); } From 7634c116ae19bd4b13dcb72bbe9d58ae449c630c Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 23 Aug 2022 14:23:39 +0200 Subject: [PATCH 043/218] NearestFavoriteStationsWidgetPermissionActivity: on Android 11+, request background location permission separate from location permission --- ...FavoriteStationsWidgetPermissionActivity.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java index 8df94ea..a32d0d6 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java @@ -20,12 +20,16 @@ package de.schildbach.oeffi.stations; import android.Manifest; import android.app.Activity; import android.content.pm.PackageManager; +import android.os.Build; import android.os.Bundle; import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; public class NearestFavoriteStationsWidgetPermissionActivity extends Activity { private static final Logger log = LoggerFactory.getLogger(NearestFavoriteStationsWidgetPermissionActivity.class); @@ -33,10 +37,14 @@ public class NearestFavoriteStationsWidgetPermissionActivity extends Activity { @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - final String[] permissions = { Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.ACCESS_BACKGROUND_LOCATION }; - log.info("Requesting permissions: {}", Arrays.toString(permissions)); - ActivityCompat.requestPermissions(this, permissions, 0); + final List permissions = new LinkedList<>(); + if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) + permissions.add(Manifest.permission.ACCESS_FINE_LOCATION); + if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R || permissions.isEmpty()) + permissions.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION); + log.info("Requesting permissions: {}", permissions); + ActivityCompat.requestPermissions(this, permissions.toArray(new String[0]), 0); } @Override From 2034119b7196540d1a2a02a770ccdfb3171aea91 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 23 Aug 2022 10:06:30 +0200 Subject: [PATCH 044/218] NearestFavoriteStationWidgetService: migrate periodic refresh from JobIntentService to JobScheduler * Receive MY_PACKAGE_REPLACED and MY_PACKAGE_UNSUSPENDED system broadcasts to schedule our job. * Remove the foreground notification, as it's not necessary any more. --- oeffi/AndroidManifest.xml | 6 ++ .../ic_stat_notify_sync_24dp.xml | 11 --- .../xml/nearest_favorite_station_widget.xml | 3 +- .../src/de/schildbach/oeffi/Application.java | 21 ----- .../stations/FavoriteStationsActivity.java | 2 +- .../oeffi/stations/FavoriteUtils.java | 17 ---- .../NearestFavoriteStationWidgetProvider.java | 12 +-- .../NearestFavoriteStationWidgetService.java | 88 ++++++++++++++----- ...oriteStationsWidgetPermissionActivity.java | 2 +- .../stations/StationDetailsActivity.java | 4 +- .../oeffi/stations/StationsActivity.java | 8 +- 11 files changed, 81 insertions(+), 93 deletions(-) delete mode 100644 oeffi/res/drawable-anydpi/ic_stat_notify_sync_24dp.xml diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index a2e6313..a213549 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -248,6 +248,12 @@ + + + + + + diff --git a/oeffi/res/drawable-anydpi/ic_stat_notify_sync_24dp.xml b/oeffi/res/drawable-anydpi/ic_stat_notify_sync_24dp.xml deleted file mode 100644 index 9e6222a..0000000 --- a/oeffi/res/drawable-anydpi/ic_stat_notify_sync_24dp.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/oeffi/res/xml/nearest_favorite_station_widget.xml b/oeffi/res/xml/nearest_favorite_station_widget.xml index 157e072..98b8c3c 100644 --- a/oeffi/res/xml/nearest_favorite_station_widget.xml +++ b/oeffi/res/xml/nearest_favorite_station_widget.xml @@ -6,5 +6,4 @@ android:minResizeHeight="55dp" android:minWidth="294dp" android:previewImage="@drawable/nearest_favorite_station_widget_preview" - android:resizeMode="horizontal|vertical" - android:updatePeriodMillis="1800000" /> + android:resizeMode="horizontal|vertical" /> diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index a69fcab..9493840 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -17,13 +17,9 @@ package de.schildbach.oeffi; -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; -import android.os.Build; import android.preference.PreferenceManager; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.LoggerContext; @@ -35,7 +31,6 @@ import ch.qos.logback.core.rolling.TimeBasedRollingPolicy; import com.google.common.base.Stopwatch; import de.schildbach.oeffi.directions.QueryHistoryProvider; import de.schildbach.oeffi.stations.FavoriteStationsProvider; -import de.schildbach.oeffi.stations.NearestFavoriteStationWidgetService; import de.schildbach.oeffi.util.ErrorReporter; import de.schildbach.pte.NetworkId; import okhttp3.OkHttpClient; @@ -121,8 +116,6 @@ public class Application extends android.app.Application { QueryHistoryProvider.deleteQueryHistory(this, SBB); log.info("Migrations took {}", watch); - - initNotificationManager(); } private void initLogging() { @@ -178,20 +171,6 @@ public class Application extends android.app.Application { config.setUserAgentValue(getPackageName()); } - private void initNotificationManager() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - final Stopwatch watch = Stopwatch.createStarted(); - final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - - final NotificationChannel appwidget = new NotificationChannel( - NearestFavoriteStationWidgetService.NOTIFICATION_CHANNEL_ID_APPWIDGET, - getString(R.string.notification_channel_appwidget_name), NotificationManager.IMPORTANCE_LOW); - nm.createNotificationChannel(appwidget); - - log.info("created notification channels, took {}", watch); - } - } - private void migrateSelectedNetwork(final String fromName, final NetworkId to) { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); diff --git a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java index 0463554..7151c3d 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java @@ -121,7 +121,7 @@ public class FavoriteStationsActivity extends OeffiActivity } else if (menuItemId == R.id.station_context_remove_favorite) { adapter.removeEntry(adapterPosition); updateGUI(); - FavoriteUtils.notifyFavoritesChanged(this); + NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget return true; } else { return false; diff --git a/oeffi/src/de/schildbach/oeffi/stations/FavoriteUtils.java b/oeffi/src/de/schildbach/oeffi/stations/FavoriteUtils.java index 489c5f3..4a15681 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/FavoriteUtils.java +++ b/oeffi/src/de/schildbach/oeffi/stations/FavoriteUtils.java @@ -17,12 +17,8 @@ package de.schildbach.oeffi.stations; -import android.appwidget.AppWidgetManager; -import android.appwidget.AppWidgetProviderInfo; import android.content.ContentResolver; import android.content.ContentValues; -import android.content.Context; -import android.content.Intent; import android.database.Cursor; import android.net.Uri; import de.schildbach.pte.NetworkId; @@ -71,17 +67,4 @@ public class FavoriteUtils { return favorites; } - public static void notifyFavoritesChanged(final Context context) { - // notify widgets - final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - for (final AppWidgetProviderInfo providerInfo : appWidgetManager.getInstalledProviders()) { - // limit to own widgets - if (providerInfo.provider.getPackageName().equals(context.getPackageName())) { - final Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); - intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, - appWidgetManager.getAppWidgetIds(providerInfo.provider)); - context.sendBroadcast(intent); - } - } - } } diff --git a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetProvider.java b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetProvider.java index 249370a..9c2ddfa 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetProvider.java +++ b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetProvider.java @@ -17,7 +17,6 @@ package de.schildbach.oeffi.stations; -import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; @@ -32,15 +31,6 @@ public class NearestFavoriteStationWidgetProvider extends AppWidgetProvider { public void onReceive(final Context context, final Intent intent) { final String action = intent.getAction(); log.info("got broadcast: {}", action); - - if (Intent.ACTION_BOOT_COMPLETED.equals(action)) - NearestFavoriteStationWidgetService.enqueueWork(context, new Intent()); - else - super.onReceive(context, intent); - } - - @Override - public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) { - NearestFavoriteStationWidgetService.enqueueWork(context, new Intent()); + NearestFavoriteStationWidgetService.schedulePeriodic(context); } } diff --git a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java index 5db1406..1add583 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java +++ b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java @@ -19,6 +19,10 @@ package de.schildbach.oeffi.stations; import android.Manifest; import android.app.PendingIntent; +import android.app.job.JobInfo; +import android.app.job.JobParameters; +import android.app.job.JobScheduler; +import android.app.job.JobService; import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.ContentResolver; @@ -38,10 +42,10 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Process; import android.text.format.DateFormat; +import android.text.format.DateUtils; import android.view.View; import android.widget.RemoteViews; -import androidx.core.app.JobIntentService; -import androidx.core.app.NotificationCompat; +import androidx.annotation.WorkerThread; import androidx.core.content.ContextCompat; import com.google.common.base.Throwables; import com.google.common.util.concurrent.SettableFuture; @@ -68,24 +72,59 @@ import java.util.Collections; import java.util.Date; import java.util.List; import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -public class NearestFavoriteStationWidgetService extends JobIntentService { +public class NearestFavoriteStationWidgetService extends JobService { private AppWidgetManager appWidgetManager; private LocationManager locationManager; private ContentResolver contentResolver; + private Executor executor = Executors.newFixedThreadPool(2); private HandlerThread backgroundThread; private Handler backgroundHandler; - private static final int JOB_ID = 1; - public static final String NOTIFICATION_CHANNEL_ID_APPWIDGET = "appwidget"; - private static final int NOTIFICATION_ID_APPWIDGET_UPDATE = 1; + private static final int JOB_ID_PERIODIC = 0; + private static final int JOB_ID_IMMEDIATE = 1; private static final Logger log = LoggerFactory.getLogger(NearestFavoriteStationWidgetService.class); - public static void enqueueWork(final Context context, final Intent work) { - enqueueWork(context, NearestFavoriteStationWidgetService.class, JOB_ID, work); + public static void schedulePeriodic(final Context context) { + final JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); + final ComponentName providerName = new ComponentName(context, NearestFavoriteStationWidgetProvider.class); + final boolean haveWidgets = AppWidgetManager.getInstance(context).getAppWidgetIds(providerName).length > 0; + if (haveWidgets) { + final JobInfo.Builder jobInfo = new JobInfo.Builder(JOB_ID_PERIODIC, new ComponentName(context, + NearestFavoriteStationWidgetService.class)); + jobInfo.setPeriodic(DateUtils.MINUTE_IN_MILLIS * 15); + jobInfo.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); + final JobInfo job = jobInfo.build(); + jobScheduler.schedule(job); + log.info("Scheduled periodic job: {}", job); + } else { + jobScheduler.cancelAll(); + } + } + + public static void scheduleImmediate(final Context context) { + final JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); + final ComponentName providerName = new ComponentName(context, NearestFavoriteStationWidgetProvider.class); + final boolean haveWidgets = AppWidgetManager.getInstance(context).getAppWidgetIds(providerName).length > 0; + if (haveWidgets) { + final JobInfo.Builder jobInfo = new JobInfo.Builder(JOB_ID_IMMEDIATE, new ComponentName(context, + NearestFavoriteStationWidgetService.class)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) + jobInfo.setExpedited(true); + else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) + jobInfo.setImportantWhileForeground(true); + jobInfo.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); + final JobInfo job = jobInfo.build(); + jobScheduler.schedule(job); + log.info("Scheduled immediate job: {}", job); + } else { + jobScheduler.cancelAll(); + } } @Override @@ -110,25 +149,28 @@ public class NearestFavoriteStationWidgetService extends JobIntentService { private RemoteViews views; @Override - protected void onHandleWork(final Intent intent) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - final NotificationCompat.Builder notification = new NotificationCompat.Builder(this, - NOTIFICATION_CHANNEL_ID_APPWIDGET); - notification.setSmallIcon(R.drawable.ic_stat_notify_sync_24dp); - notification.setWhen(System.currentTimeMillis()); - notification.setOngoing(true); - startForeground(NOTIFICATION_ID_APPWIDGET_UPDATE, notification.build()); - } - - handleIntent(); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) - stopForeground(true); + public boolean onStartJob(final JobParameters params) { + log.info("Job started: {}", params); + executor.execute(() -> { + runJob(); + jobFinished(params, false); + log.info("Job finished: {}", params); + }); + return true; } - private void handleIntent() { + @Override + public boolean onStopJob(final JobParameters params) { + log.info("Job stopped: {}", params); + return false; + } + + @WorkerThread + private void runJob() { final ComponentName providerName = new ComponentName(this, NearestFavoriteStationWidgetProvider.class); final int[] appWidgetIds = appWidgetManager.getAppWidgetIds(providerName); + if (appWidgetIds.length == 0) + return; views = new RemoteViews(getPackageName(), R.layout.station_widget_content); diff --git a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java index a32d0d6..7bc4648 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java @@ -53,7 +53,7 @@ public class NearestFavoriteStationsWidgetPermissionActivity extends Activity { for (int i = 0; i < permissions.length; i++) log.info("{}{} granted", permissions[i], grantResults[i] == PackageManager.PERMISSION_GRANTED ? "" : " " + "not"); - FavoriteUtils.notifyFavoritesChanged(this); + NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget finish(); } } diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java index c1d3c76..7bd2bce 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java @@ -157,13 +157,13 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa FavoriteStationsProvider.TYPE_FAVORITE, selectedNetwork, selectedStation); if (rowUri != null) { selectedFavState = FavoriteStationsProvider.TYPE_FAVORITE; - FavoriteUtils.notifyFavoritesChanged(StationDetailsActivity.this); + NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget } } else { final int numRows = FavoriteUtils.delete(getContentResolver(), selectedNetwork, selectedStation.id); if (numRows > 0) { selectedFavState = null; - FavoriteUtils.notifyFavoritesChanged(StationDetailsActivity.this); + NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget } } }); diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java index 45f4908..9ffdf9e 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java @@ -696,7 +696,7 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware if (rowUri != null) { favorites.put(location.id, FavoriteStationsProvider.TYPE_FAVORITE); postLoadNextVisible(0); - FavoriteUtils.notifyFavoritesChanged(this); + NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget return true; } else { return false; @@ -707,7 +707,7 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware final int numRows = FavoriteUtils.delete(getContentResolver(), network, location.id); if (numRows > 0) { favorites.remove(location.id); - FavoriteUtils.notifyFavoritesChanged(this); + NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget return true; } else { return false; @@ -719,7 +719,7 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware network, location); if (rowUriIgnored != null) { favorites.put(location.id, FavoriteStationsProvider.TYPE_IGNORE); - FavoriteUtils.notifyFavoritesChanged(this); + NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget return true; } else { return false; @@ -731,7 +731,7 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware if (numRowsIgnored > 0) { favorites.remove(location.id); postLoadNextVisible(0); - FavoriteUtils.notifyFavoritesChanged(this); + NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget return true; } else { return false; From ac639a635e5d8aa489f1cff9807bd174af5fbec4 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 23 Aug 2022 15:50:55 +0200 Subject: [PATCH 045/218] 12.0.23 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index a213549..07fb0f9 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120023" + android:versionName="12.0.23"> Date: Tue, 23 Aug 2022 19:01:35 +0200 Subject: [PATCH 046/218] DonateFragment: handle ActivityNotFoundException when clicking on bitcoin URI --- .../schildbach/oeffi/preference/DonateFragment.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/oeffi/src/de/schildbach/oeffi/preference/DonateFragment.java b/oeffi/src/de/schildbach/oeffi/preference/DonateFragment.java index 2362e20..4b29fc6 100644 --- a/oeffi/src/de/schildbach/oeffi/preference/DonateFragment.java +++ b/oeffi/src/de/schildbach/oeffi/preference/DonateFragment.java @@ -17,15 +17,28 @@ package de.schildbach.oeffi.preference; +import android.content.ActivityNotFoundException; import android.os.Bundle; +import android.preference.Preference; import android.preference.PreferenceFragment; import androidx.annotation.Nullable; import de.schildbach.oeffi.R; public class DonateFragment extends PreferenceFragment { + private static final String KEY_ABOUT_DONATE_BITCOIN = "about_donate_bitcoin"; + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference_donate); + final Preference donateBitcoinPreference = findPreference(KEY_ABOUT_DONATE_BITCOIN); + donateBitcoinPreference.setOnPreferenceClickListener(preference -> { + try { + startActivity(donateBitcoinPreference.getIntent()); + } catch (final ActivityNotFoundException x) { + donateBitcoinPreference.setEnabled(false); + } + return true; + }); } } From c8fc8f0ffb40df4fe32ded86016a6665fb2de53f Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 23 Aug 2022 16:57:13 +0200 Subject: [PATCH 047/218] strings.xml: remove left-over name of notification channel --- oeffi/res/values-de/strings.xml | 1 - oeffi/res/values/strings.xml | 1 - 2 files changed, 2 deletions(-) diff --git a/oeffi/res/values-de/strings.xml b/oeffi/res/values-de/strings.xml index f89554e..84e65fb 100644 --- a/oeffi/res/values-de/strings.xml +++ b/oeffi/res/values-de/strings.xml @@ -330,7 +330,6 @@ Senden Herunterladen Schließen - App-Widget-Aktivität Fernverkehr diff --git a/oeffi/res/values/strings.xml b/oeffi/res/values/strings.xml index de9c494..3be80cc 100644 --- a/oeffi/res/values/strings.xml +++ b/oeffi/res/values/strings.xml @@ -332,7 +332,6 @@ Send Download Dismiss - App-widget activity Highspeed From da08b96180d2f8ed045d831dc7759da414396ae6 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 23 Aug 2022 16:45:37 +0200 Subject: [PATCH 048/218] AndroidManifest.xml: remove filter for intents once thrown by Google Maps, Google Now and Google Calendar --- oeffi/AndroidManifest.xml | 201 ------------------ .../oeffi/util/LocationUriParser.java | 24 +-- .../oeffi/util/LocationUriParserTest.java | 87 -------- 3 files changed, 1 insertion(+), 311 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 07fb0f9..722936e 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -294,207 +294,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Date: Tue, 23 Aug 2022 16:55:28 +0200 Subject: [PATCH 049/218] AndroidManifest.xml: remove filter for intents once thrown by Google Navigation --- oeffi/AndroidManifest.xml | 6 -- .../oeffi/util/LocationUriParser.java | 29 +------ .../oeffi/util/LocationUriParserTest.java | 84 ------------------- 3 files changed, 1 insertion(+), 118 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 722936e..451d7ff 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -288,12 +288,6 @@ - - - - - - Date: Tue, 23 Aug 2022 17:03:54 +0200 Subject: [PATCH 050/218] build.gradle: update ProGuard to 6.2.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2706ca3..48ae808 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.1.4' - classpath 'net.sf.proguard:proguard-gradle:6.0.3' + classpath 'net.sf.proguard:proguard-gradle:6.2.2' classpath('fr.avianey.androidsvgdrawable:gradle-plugin:3.0.2') { exclude group: 'xerces' } From 8e0d9ef49c08d1c70eb590b5b64341899b2c825d Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 25 Aug 2022 09:44:12 +0200 Subject: [PATCH 051/218] 12.0.24 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 451d7ff..e3faeea 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120024" + android:versionName="12.0.24"> Date: Thu, 25 Aug 2022 10:25:43 +0200 Subject: [PATCH 052/218] .gitlab-ci.yml: remove OpenJDK 8 from build matrix --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 86bab0b..2d71b7e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,6 +20,6 @@ before_script: build: parallel: matrix: - - JDK_PACKAGE: [ openjdk-8-jdk, openjdk-11-jdk ] + - JDK_PACKAGE: [ openjdk-11-jdk ] script: - gradle build --stacktrace From b4fe055f8a6f2215ed997d3b922e24e1db3ed15e Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 25 Aug 2022 10:31:35 +0200 Subject: [PATCH 053/218] .gitlab-ci.yml: update build image to Ubuntu Jammy (22.04) --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2d71b7e..b1b16a9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: ubuntu:focal +image: ubuntu:jammy variables: GIT_SUBMODULE_STRATEGY: recursive From 7a609d0452280075edd62239daa5d23d5877b261 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 25 Aug 2022 10:58:34 +0200 Subject: [PATCH 054/218] .gitlab-ci.yml: use the headless variant of OpenJDK --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b1b16a9..cd537ce 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,6 +20,6 @@ before_script: build: parallel: matrix: - - JDK_PACKAGE: [ openjdk-11-jdk ] + - JDK_PACKAGE: [ openjdk-11-jdk-headless ] script: - gradle build --stacktrace From 3cf37274c0a872f1c4547202808d00bbef71421e Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 25 Aug 2022 11:09:20 +0200 Subject: [PATCH 055/218] .gitlab-ci.yml: update commandlinetools-linux to a recent version --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cd537ce..f88f3eb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,7 +3,7 @@ image: ubuntu:jammy variables: GIT_SUBMODULE_STRATEGY: recursive ANDROID_HOME: $PWD/android-sdk - ANDROID_SDK_TOOLS: 7583922_latest + ANDROID_SDK_TOOLS: 8512546_latest ANDROID_SDK_LICENSE_HASH: 24333f8a63b6825ea9c5514f83c2829b004d1fee before_script: From 52685204ffe3b8187ae52c20120d497fb857130c Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 25 Aug 2022 10:49:46 +0200 Subject: [PATCH 056/218] .gitlab-ci.yml: migrate to free sdkmanager for installing SDK packages --- .gitlab-ci.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f88f3eb..3eb36e1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,21 +1,18 @@ image: ubuntu:jammy variables: - GIT_SUBMODULE_STRATEGY: recursive - ANDROID_HOME: $PWD/android-sdk - ANDROID_SDK_TOOLS: 8512546_latest - ANDROID_SDK_LICENSE_HASH: 24333f8a63b6825ea9c5514f83c2829b004d1fee + GIT_SUBMODULE_STRATEGY: recursive + ANDROID_PLATFORM_VERSION_OEFFI: android-31 + ANDROID_BUILD_TOOLS_VERSION: 33.0.0 + ANDROID_HOME: $PWD/android-sdk before_script: - apt-get update - apt-get -y upgrade - apt-get -y install ${JDK_PACKAGE} - - apt-get -y install wget gradle - - wget --quiet --output-document=commandlinetools-linux.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}.zip - - mkdir -p ${ANDROID_HOME} - - unzip -d ${ANDROID_HOME} commandlinetools-linux.zip - - mkdir -p ${ANDROID_HOME}/licenses - - echo -e "\n${ANDROID_SDK_LICENSE_HASH}" >> ${ANDROID_HOME}/licenses/android-sdk-license + - apt-get -y install sdkmanager gradle + - yes | sdkmanager --licenses >/dev/null || true + - sdkmanager --install "platforms;$ANDROID_PLATFORM_VERSION_OEFFI" "build-tools;$ANDROID_BUILD_TOOLS_VERSION" build: parallel: From dd2e65721b4138d25d9fb4e2e2cf36b466f23d9d Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 25 Aug 2022 13:50:25 +0200 Subject: [PATCH 057/218] .gitlab-ci.yml: add Debian Bookworm as an environment to build with --- .gitlab-ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3eb36e1..3bcff6f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: ubuntu:jammy +image: ${DOCKER_IMAGE} variables: GIT_SUBMODULE_STRATEGY: recursive @@ -17,6 +17,7 @@ before_script: build: parallel: matrix: - - JDK_PACKAGE: [ openjdk-11-jdk-headless ] + - DOCKER_IMAGE: [ ubuntu:jammy, debian:bookworm-slim ] + JDK_PACKAGE: [ openjdk-11-jdk-headless ] script: - gradle build --stacktrace From 1b232b3ba56ca5a67738b8a4b154bb1407b35319 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 25 Aug 2022 18:42:49 +0200 Subject: [PATCH 058/218] .gitlab-ci.yml: don't pre-install SDK packages, let gradle install them lazily --- .gitlab-ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3bcff6f..edacf11 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,8 +2,6 @@ image: ${DOCKER_IMAGE} variables: GIT_SUBMODULE_STRATEGY: recursive - ANDROID_PLATFORM_VERSION_OEFFI: android-31 - ANDROID_BUILD_TOOLS_VERSION: 33.0.0 ANDROID_HOME: $PWD/android-sdk before_script: @@ -12,7 +10,6 @@ before_script: - apt-get -y install ${JDK_PACKAGE} - apt-get -y install sdkmanager gradle - yes | sdkmanager --licenses >/dev/null || true - - sdkmanager --install "platforms;$ANDROID_PLATFORM_VERSION_OEFFI" "build-tools;$ANDROID_BUILD_TOOLS_VERSION" build: parallel: From 02ec2b07cdc08bfc459a08cd05d7cc71a2de6aa7 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 29 Aug 2022 10:01:50 +0200 Subject: [PATCH 059/218] AndroidManifest.xml: remove another filter for intents once thrown by Google Navigation --- oeffi/AndroidManifest.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index e3faeea..c7c96f5 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -99,12 +99,6 @@ - - - - - - From 1f9ebdf32db272a4c73e3783b78e3a70f39a2ba3 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 23 Aug 2022 16:28:09 +0200 Subject: [PATCH 060/218] AndroidManifest.xml: target Android 13 --- oeffi/AndroidManifest.xml | 2 +- oeffi/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index c7c96f5..3629bb4 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -24,7 +24,7 @@ + android:targetSdkVersion="33" /> diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 8d2d341..1f51a6f 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -29,7 +29,7 @@ dependencies { } android { - compileSdkVersion 'android-31' + compileSdkVersion 'android-33' buildToolsVersion '33.0.0' defaultConfig { From ea43d90fb93e866d06681b630a9950b289cbe2be Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 29 Aug 2022 12:17:57 +0200 Subject: [PATCH 061/218] 12.0.25 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 3629bb4..29e40aa 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120025" + android:versionName="12.0.25"> Date: Sat, 3 Sep 2022 11:11:34 +0200 Subject: [PATCH 062/218] locale_config.xml: declare supported locales --- oeffi/AndroidManifest.xml | 1 + oeffi/res/xml/locale_config.xml | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 oeffi/res/xml/locale_config.xml diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 29e40aa..7109c81 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -62,6 +62,7 @@ android:allowBackup="true" android:icon="@mipmap/ic_oeffi_stations_color_48dp" android:label="@string/app_name" + android:localeConfig="@xml/locale_config" android:networkSecurityConfig="@xml/network_security_config" android:theme="@style/My.Theme"> diff --git a/oeffi/res/xml/locale_config.xml b/oeffi/res/xml/locale_config.xml new file mode 100644 index 0000000..cb544e7 --- /dev/null +++ b/oeffi/res/xml/locale_config.xml @@ -0,0 +1,5 @@ + + + + + From 4e2280d681c0f84fe669f4612477fc0f0931abf4 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 4 Sep 2022 00:12:35 +0200 Subject: [PATCH 063/218] AndroidManifest.xml: remove FOREGROUND_SERVICE permission We don't have a foreground service any more. JobScheduler runs in the background. --- oeffi/AndroidManifest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 7109c81..ac9a444 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -33,7 +33,6 @@ - From 1320282a228e08b7293439beced38231b8c44e1e Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 4 Sep 2022 00:14:27 +0200 Subject: [PATCH 064/218] AndroidManifest.xml: remove WAKE_LOCK permission JobScheduler keeps the CPU awake for us. --- oeffi/AndroidManifest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index ac9a444..2b1e500 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -32,7 +32,6 @@ - From 324d625d459b50e7493ccb2b931e62e29f9a6b4c Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 4 Sep 2022 00:18:10 +0200 Subject: [PATCH 065/218] AndroidManifest.xml: remove READ_CONTACTS permission The system contacts picker doesn't need this permission. --- oeffi/AndroidManifest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 2b1e500..2c5ed78 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -31,7 +31,6 @@ - From 8f095e929674b364436085b4836286f7962c7328 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 4 Sep 2022 11:00:24 +0200 Subject: [PATCH 066/218] 12.1 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 5 +++++ public-transport-enabler | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 2c5ed78..017391f 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120100" + android:versionName="12.1"> Date: Wed, 7 Sep 2022 21:14:08 +0200 Subject: [PATCH 067/218] DirectionsActivity: remove superfluous code for requesting READ_CONTACTS permission --- oeffi/res/values-de/directions.xml | 1 - oeffi/res/values/directions.xml | 1 - .../oeffi/directions/DirectionsActivity.java | 48 ++++++------------- 3 files changed, 14 insertions(+), 36 deletions(-) diff --git a/oeffi/res/values-de/directions.xml b/oeffi/res/values-de/directions.xml index f5dfe7c..7260277 100644 --- a/oeffi/res/values-de/directions.xml +++ b/oeffi/res/values-de/directions.xml @@ -4,7 +4,6 @@ Mein aktueller Standort Adresse aus Kontakt Haltestellen-Favorit - Berechtigungs-Problem:\n%1$s Verkehrsmittel auswählen diff --git a/oeffi/res/values/directions.xml b/oeffi/res/values/directions.xml index f61237c..b2155d2 100644 --- a/oeffi/res/values/directions.xml +++ b/oeffi/res/values/directions.xml @@ -5,7 +5,6 @@ My current location Contact address Favorite station - Permission problem:\n%1$s Pick means of transport diff --git a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java index 18bfce1..d5f26fc 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java @@ -167,9 +167,6 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom private static final int DIALOG_CLEAR_HISTORY = 1; - private static final int REQUEST_CODE_CONTACTS_PERMISSION_FROM = 1; - private static final int REQUEST_CODE_CONTACTS_PERMISSION_VIA = 2; - private static final int REQUEST_CODE_CONTACTS_PERMISSION_TO = 3; private static final int REQUEST_CODE_LOCATION_PERMISSION_FROM = 4; private static final int REQUEST_CODE_LOCATION_PERMISSION_VIA = 5; private static final int REQUEST_CODE_LOCATION_PERMISSION_TO = 6; @@ -201,16 +198,14 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom private class LocationContextMenuItemClickListener implements PopupMenu.OnMenuItemClickListener { private final LocationView locationView; - private final int contactsPermissionRequestCode; private final int locationPermissionRequestCode; private final int pickContactRequestCode; private final int pickStationRequestCode; public LocationContextMenuItemClickListener(final LocationView locationView, - final int contactsPermissionRequestCode, final int locationPermissionRequestCode, + final int locationPermissionRequestCode, final int pickContactRequestCode, final int pickStationRequestCode) { this.locationView = locationView; - this.contactsPermissionRequestCode = contactsPermissionRequestCode; this.locationPermissionRequestCode = locationPermissionRequestCode; this.pickContactRequestCode = pickContactRequestCode; this.pickStationRequestCode = pickStationRequestCode; @@ -226,12 +221,7 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, locationPermissionRequestCode); return true; } else if (item.getItemId() == R.id.directions_location_contact) { - if (ContextCompat.checkSelfPermission(DirectionsActivity.this, - Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) - startActivityForResult(INTENT_PICK_CONTACTS, pickContactRequestCode); - else - ActivityCompat.requestPermissions(DirectionsActivity.this, - new String[] { Manifest.permission.READ_CONTACTS }, contactsPermissionRequestCode); + startActivityForResult(INTENT_PICK_CONTACTS, pickContactRequestCode); return true; } else if (item.getItemId() == R.id.directions_location_favorite_station) { if (network != null) @@ -318,14 +308,14 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom viewFromLocation.setAdapter(autoCompleteAdapter); viewFromLocation.setListener(locationChangeListener); viewFromLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewFromLocation, - REQUEST_CODE_CONTACTS_PERMISSION_FROM, REQUEST_CODE_LOCATION_PERMISSION_FROM, + REQUEST_CODE_LOCATION_PERMISSION_FROM, REQUEST_CODE_PICK_CONTACT_FROM, REQUEST_CODE_PICK_STATION_FROM)); viewViaLocation = findViewById(R.id.directions_via); viewViaLocation.setAdapter(autoCompleteAdapter); viewViaLocation.setListener(locationChangeListener); viewViaLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewViaLocation, - REQUEST_CODE_CONTACTS_PERMISSION_VIA, REQUEST_CODE_LOCATION_PERMISSION_VIA, + REQUEST_CODE_LOCATION_PERMISSION_VIA, REQUEST_CODE_PICK_CONTACT_VIA, REQUEST_CODE_PICK_STATION_VIA)); viewToLocation = findViewById(R.id.directions_to); @@ -343,7 +333,7 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom } }); viewToLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewToLocation, - REQUEST_CODE_CONTACTS_PERMISSION_TO, REQUEST_CODE_LOCATION_PERMISSION_TO, + REQUEST_CODE_LOCATION_PERMISSION_TO, REQUEST_CODE_PICK_CONTACT_TO, REQUEST_CODE_PICK_STATION_TO)); viewProducts = findViewById(R.id.directions_products); @@ -1169,13 +1159,7 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom @Override public void onRequestPermissionsResult(final int requestCode, final String[] permissions, final int[] grantResults) { - if (requestCode == REQUEST_CODE_CONTACTS_PERMISSION_FROM) - startActivityForResult(INTENT_PICK_CONTACTS, REQUEST_CODE_PICK_CONTACT_FROM); - else if (requestCode == REQUEST_CODE_CONTACTS_PERMISSION_VIA) - startActivityForResult(INTENT_PICK_CONTACTS, REQUEST_CODE_PICK_CONTACT_VIA); - else if (requestCode == REQUEST_CODE_CONTACTS_PERMISSION_TO) - startActivityForResult(INTENT_PICK_CONTACTS, REQUEST_CODE_PICK_CONTACT_TO); - else if (requestCode == REQUEST_CODE_LOCATION_PERMISSION_FROM) + if (requestCode == REQUEST_CODE_LOCATION_PERMISSION_FROM) viewFromLocation.acquireLocation(); else if (requestCode == REQUEST_CODE_LOCATION_PERMISSION_VIA) viewViaLocation.acquireLocation(); @@ -1184,18 +1168,14 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom } private void resultPickContact(final Intent result, final LocationView targetLocationView) { - try { - final Cursor c = managedQuery(result.getData(), null, null, null, null); - if (c.moveToFirst()) { - final String data = c - .getString(c.getColumnIndexOrThrow(CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS)); - final Location location = new Location(LocationType.ADDRESS, null, null, data.replace("\n", " ")); - targetLocationView.setLocation(location); - log.info("Picked {} from contacts", location); - requestFocusFirst(); - } - } catch (final SecurityException x) { - new Toast(this).longToast(R.string.directions_location_choose_error_permission, x.getMessage()); + final Cursor c = managedQuery(result.getData(), null, null, null, null); + if (c.moveToFirst()) { + final String data = c + .getString(c.getColumnIndexOrThrow(CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS)); + final Location location = new Location(LocationType.ADDRESS, null, null, data.replace("\n", " ")); + targetLocationView.setLocation(location); + log.info("Picked {} from contacts", location); + requestFocusFirst(); } } From d67ee8807a5c8a586629a68e1ea94348af05ce6c Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 7 Sep 2022 21:47:01 +0200 Subject: [PATCH 068/218] DirectionsActivity: call super method in onActivityResult() --- .../oeffi/directions/DirectionsActivity.java | 37 +++++++------------ 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java index d5f26fc..8c3ab05 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java @@ -1124,35 +1124,26 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent result) { - if (result == null) - return; - - if (resultCode == Activity.RESULT_OK) { - switch (requestCode) { - case (REQUEST_CODE_PICK_CONTACT_FROM): + if (requestCode == REQUEST_CODE_PICK_CONTACT_FROM) { + if (resultCode == Activity.RESULT_OK && result != null) resultPickContact(result, viewFromLocation); - break; - - case (REQUEST_CODE_PICK_CONTACT_VIA): + } else if (requestCode == REQUEST_CODE_PICK_CONTACT_VIA) { + if (resultCode == Activity.RESULT_OK && result != null) resultPickContact(result, viewViaLocation); - break; - - case (REQUEST_CODE_PICK_CONTACT_TO): + } else if (requestCode == REQUEST_CODE_PICK_CONTACT_TO) { + if (resultCode == Activity.RESULT_OK && result != null) resultPickContact(result, viewToLocation); - break; - - case (REQUEST_CODE_PICK_STATION_FROM): + } else if (requestCode == REQUEST_CODE_PICK_STATION_FROM) { + if (resultCode == Activity.RESULT_OK && result != null) resultPickStation(result, viewFromLocation); - break; - - case (REQUEST_CODE_PICK_STATION_VIA): + } else if (requestCode == REQUEST_CODE_PICK_STATION_VIA) { + if (resultCode == Activity.RESULT_OK && result != null) resultPickStation(result, viewViaLocation); - break; - - case (REQUEST_CODE_PICK_STATION_TO): + } else if (requestCode == REQUEST_CODE_PICK_STATION_TO) { + if (resultCode == Activity.RESULT_OK && result != null) resultPickStation(result, viewToLocation); - break; - } + } else { + super.onActivityResult(requestCode, resultCode, result); } } From 1e265a61da79a9f8015e38b7ef54cafa75333dca Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 7 Sep 2022 20:05:12 +0200 Subject: [PATCH 069/218] OeffiActivity: make lifecycle available to all activities --- oeffi/build.gradle | 3 ++- oeffi/proguard.cfg | 3 ++- oeffi/src/de/schildbach/oeffi/OeffiActivity.java | 4 ++-- .../de/schildbach/oeffi/network/NetworkPickerActivity.java | 4 ++-- oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java | 4 ++-- .../de/schildbach/oeffi/stations/DecodeForeignActivity.java | 4 ++-- .../NearestFavoriteStationsWidgetPermissionActivity.java | 4 ++-- 7 files changed, 14 insertions(+), 12 deletions(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 1f51a6f..fbba455 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -7,7 +7,6 @@ configurations { all*.exclude group: 'org.json', module: 'json' all*.exclude group: 'net.sf.kxml', module: 'kxml2' all*.exclude group: 'androidx.legacy', module: 'legacy-support-core-ui' - all*.exclude group: 'androidx.lifecycle', module: 'lifecycle-runtime' } dependencies { @@ -17,6 +16,7 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' implementation 'androidx.core:core:1.8.0' + implementation 'androidx.activity:activity:1.5.1' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency @@ -92,6 +92,7 @@ android { exclude 'META-INF/*.version' exclude 'META-INF/proguard/**' exclude 'META-INF/*.kotlin_module' + exclude 'META-INF/com.android.tools/proguard/coroutines.pro' exclude 'kotlin/**' } } diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index 2158d22..2d1732a 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -46,11 +46,12 @@ } # androidx --dontwarn androidx.core.** +-dontwarn kotlinx.coroutines.** -dontwarn module-info -dontnote androidx.core.** -dontnote androidx.versionedparcelable.VersionedParcel -dontnote kotlin.** +-dontnote kotlinx.** # OkHttp -dontwarn okio.DeflaterSink diff --git a/oeffi/src/de/schildbach/oeffi/OeffiActivity.java b/oeffi/src/de/schildbach/oeffi/OeffiActivity.java index ede9d8e..8ab20f5 100644 --- a/oeffi/src/de/schildbach/oeffi/OeffiActivity.java +++ b/oeffi/src/de/schildbach/oeffi/OeffiActivity.java @@ -18,7 +18,6 @@ package de.schildbach.oeffi; import android.annotation.TargetApi; -import android.app.Activity; import android.app.ActivityManager.TaskDescription; import android.content.SharedPreferences; import android.content.res.Resources; @@ -31,6 +30,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.activity.ComponentActivity; import de.schildbach.oeffi.network.NetworkResources; import de.schildbach.oeffi.util.ErrorReporter; import de.schildbach.pte.NetworkId; @@ -38,7 +38,7 @@ import de.schildbach.pte.dto.ResultHeader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class OeffiActivity extends Activity { +public abstract class OeffiActivity extends ComponentActivity { protected Application application; protected SharedPreferences prefs; diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java index ecbde91..f6204fe 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java @@ -19,7 +19,6 @@ package de.schildbach.oeffi.network; import android.Manifest; import android.annotation.TargetApi; -import android.app.Activity; import android.app.ActivityManager.TaskDescription; import android.content.Context; import android.content.Intent; @@ -40,6 +39,7 @@ import android.view.KeyEvent; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.activity.ComponentActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; @@ -75,7 +75,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; -public class NetworkPickerActivity extends Activity implements ActivityCompat.OnRequestPermissionsResultCallback, +public class NetworkPickerActivity extends ComponentActivity implements ActivityCompat.OnRequestPermissionsResultCallback, LocationHelper.Callback, NetworkClickListener, NetworkContextMenuItemListener { public static void start(final Context context) { final Intent intent = new Intent(context, NetworkPickerActivity.class); diff --git a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java index 900fb72..f2ff948 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java +++ b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java @@ -17,7 +17,6 @@ package de.schildbach.oeffi.plans; -import android.app.Activity; import android.app.SearchManager; import android.content.Context; import android.content.Intent; @@ -36,6 +35,7 @@ import android.view.animation.AnimationUtils; import android.widget.PopupMenu; import android.widget.TextView; import android.widget.ViewAnimator; +import androidx.activity.ComponentActivity; import androidx.annotation.Nullable; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; @@ -79,7 +79,7 @@ import java.util.TreeSet; import static com.google.common.base.Preconditions.checkNotNull; -public class PlanActivity extends Activity { +public class PlanActivity extends ComponentActivity { 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() + ".selected_station_id"; diff --git a/oeffi/src/de/schildbach/oeffi/stations/DecodeForeignActivity.java b/oeffi/src/de/schildbach/oeffi/stations/DecodeForeignActivity.java index 58b020b..7728cde 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/DecodeForeignActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/DecodeForeignActivity.java @@ -17,11 +17,11 @@ package de.schildbach.oeffi.stations; -import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import androidx.activity.ComponentActivity; import de.schildbach.oeffi.Application; import de.schildbach.oeffi.R; import de.schildbach.oeffi.util.DialogBuilder; @@ -38,7 +38,7 @@ import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class DecodeForeignActivity extends Activity { +public class DecodeForeignActivity extends ComponentActivity { private static final Pattern PATTERN_META_REFRESH = Pattern .compile(" Date: Wed, 7 Sep 2022 19:58:55 +0200 Subject: [PATCH 070/218] NetworkPickerActivity, StationsActivity, DirectionsActivity, DirectionsShortcutActivity, PlansPickerActivity, NearestFavoriteStationsWidgetPermissionActivity: use activity result API for requesting permissions --- .../oeffi/directions/DirectionsActivity.java | 55 +++++++++---------- .../DirectionsShortcutActivity.java | 30 ++++------ .../oeffi/network/NetworkPickerActivity.java | 24 ++++---- .../oeffi/plans/PlansPickerActivity.java | 23 ++++---- ...oriteStationsWidgetPermissionActivity.java | 25 ++++----- .../oeffi/stations/StationsActivity.java | 20 +++---- 6 files changed, 80 insertions(+), 97 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java index 8c3ab05..05bb360 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java @@ -58,9 +58,10 @@ import android.widget.Filter; import android.widget.Filterable; import android.widget.PopupMenu; import android.widget.TextView; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.Nullable; import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.view.ViewCompat; import androidx.recyclerview.widget.LinearLayoutManager; @@ -132,8 +133,8 @@ import java.util.LinkedList; import java.util.List; import java.util.Set; -public class DirectionsActivity extends OeffiMainActivity implements ActivityCompat.OnRequestPermissionsResultCallback, - QueryHistoryClickListener, QueryHistoryContextMenuItemListener { +public class DirectionsActivity extends OeffiMainActivity implements QueryHistoryClickListener, + QueryHistoryContextMenuItemListener { private ConnectivityManager connectivityManager; private LocationManager locationManager; @@ -167,9 +168,6 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom private static final int DIALOG_CLEAR_HISTORY = 1; - private static final int REQUEST_CODE_LOCATION_PERMISSION_FROM = 4; - private static final int REQUEST_CODE_LOCATION_PERMISSION_VIA = 5; - private static final int REQUEST_CODE_LOCATION_PERMISSION_TO = 6; private static final int REQUEST_CODE_PICK_CONTACT_FROM = 7; private static final int REQUEST_CODE_PICK_CONTACT_VIA = 8; private static final int REQUEST_CODE_PICK_CONTACT_TO = 9; @@ -184,6 +182,22 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom private static final String INTENT_EXTRA_TIME_SPEC = DirectionsActivity.class.getName() + ".time_spec"; private static final Intent INTENT_PICK_CONTACTS = new Intent(Intent.ACTION_PICK, CommonDataKinds.StructuredPostal.CONTENT_URI); + private final ActivityResultLauncher requestLocationPermissionFromLauncher = + registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> { + if (granted) + viewFromLocation.acquireLocation(); + }); + private final ActivityResultLauncher requestLocationPermissionViaLauncher = + registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> { + if (granted) + viewViaLocation.acquireLocation(); + }); + private final ActivityResultLauncher requestLocationPermissionToLauncher = + registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> { + if (granted) + viewToLocation.acquireLocation(); + }); + public static void start(final Context context, @Nullable final Location fromLocation, @Nullable final Location toLocation, @Nullable final TimeSpec timeSpec, final int intentFlags) { final Intent intent = new Intent(context, DirectionsActivity.class).addFlags(intentFlags); @@ -198,15 +212,15 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom private class LocationContextMenuItemClickListener implements PopupMenu.OnMenuItemClickListener { private final LocationView locationView; - private final int locationPermissionRequestCode; + private final ActivityResultLauncher requestLocationPermissionLauncher; private final int pickContactRequestCode; private final int pickStationRequestCode; public LocationContextMenuItemClickListener(final LocationView locationView, - final int locationPermissionRequestCode, + final ActivityResultLauncher requestLocationPermissionLauncher, final int pickContactRequestCode, final int pickStationRequestCode) { this.locationView = locationView; - this.locationPermissionRequestCode = locationPermissionRequestCode; + this.requestLocationPermissionLauncher = requestLocationPermissionLauncher; this.pickContactRequestCode = pickContactRequestCode; this.pickStationRequestCode = pickStationRequestCode; } @@ -217,8 +231,7 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) locationView.acquireLocation(); else - ActivityCompat.requestPermissions(DirectionsActivity.this, - new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, locationPermissionRequestCode); + requestLocationPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION); return true; } else if (item.getItemId() == R.id.directions_location_contact) { startActivityForResult(INTENT_PICK_CONTACTS, pickContactRequestCode); @@ -308,15 +321,13 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom viewFromLocation.setAdapter(autoCompleteAdapter); viewFromLocation.setListener(locationChangeListener); viewFromLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewFromLocation, - REQUEST_CODE_LOCATION_PERMISSION_FROM, - REQUEST_CODE_PICK_CONTACT_FROM, REQUEST_CODE_PICK_STATION_FROM)); + requestLocationPermissionFromLauncher, REQUEST_CODE_PICK_CONTACT_FROM, REQUEST_CODE_PICK_STATION_FROM)); viewViaLocation = findViewById(R.id.directions_via); viewViaLocation.setAdapter(autoCompleteAdapter); viewViaLocation.setListener(locationChangeListener); viewViaLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewViaLocation, - REQUEST_CODE_LOCATION_PERMISSION_VIA, - REQUEST_CODE_PICK_CONTACT_VIA, REQUEST_CODE_PICK_STATION_VIA)); + requestLocationPermissionViaLauncher, REQUEST_CODE_PICK_CONTACT_VIA, REQUEST_CODE_PICK_STATION_VIA)); viewToLocation = findViewById(R.id.directions_to); viewToLocation.setAdapter(autoCompleteAdapter); @@ -333,8 +344,7 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom } }); viewToLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewToLocation, - REQUEST_CODE_LOCATION_PERMISSION_TO, - REQUEST_CODE_PICK_CONTACT_TO, REQUEST_CODE_PICK_STATION_TO)); + requestLocationPermissionToLauncher, REQUEST_CODE_PICK_CONTACT_TO, REQUEST_CODE_PICK_STATION_TO)); viewProducts = findViewById(R.id.directions_products); viewProductToggles.add(findViewById(R.id.directions_products_i)); @@ -1147,17 +1157,6 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom } } - @Override - public void onRequestPermissionsResult(final int requestCode, final String[] permissions, - final int[] grantResults) { - if (requestCode == REQUEST_CODE_LOCATION_PERMISSION_FROM) - viewFromLocation.acquireLocation(); - else if (requestCode == REQUEST_CODE_LOCATION_PERMISSION_VIA) - viewViaLocation.acquireLocation(); - else if (requestCode == REQUEST_CODE_LOCATION_PERMISSION_TO) - viewToLocation.acquireLocation(); - } - private void resultPickContact(final Intent result, final LocationView targetLocationView) { final Cursor c = managedQuery(result.getData(), null, null, null, null); if (c.moveToFirst()) { diff --git a/oeffi/src/de/schildbach/oeffi/directions/DirectionsShortcutActivity.java b/oeffi/src/de/schildbach/oeffi/directions/DirectionsShortcutActivity.java index ec659bd..7455469 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/DirectionsShortcutActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/DirectionsShortcutActivity.java @@ -30,7 +30,8 @@ import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Process; -import androidx.core.app.ActivityCompat; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.core.content.ContextCompat; import com.google.common.base.Throwables; import de.schildbach.oeffi.Constants; @@ -58,8 +59,7 @@ import org.slf4j.LoggerFactory; import javax.net.ssl.SSLException; import java.util.Set; -public class DirectionsShortcutActivity extends OeffiActivity - implements ActivityCompat.OnRequestPermissionsResultCallback, LocationHelper.Callback { +public class DirectionsShortcutActivity extends OeffiActivity implements LocationHelper.Callback { public static final String INTENT_EXTRA_NETWORK = "network"; public static final String INTENT_EXTRA_TYPE = "type"; public static final String INTENT_EXTRA_ID = "stationid"; @@ -76,10 +76,16 @@ public class DirectionsShortcutActivity extends OeffiActivity private final Handler handler = new Handler(); private QueryTripsRunnable queryTripsRunnable; - private static final int REQUEST_CODE_REQUEST_LOCATION_PERMISSION = 1; - private static final Logger log = LoggerFactory.getLogger(DirectionsShortcutActivity.class); + private final ActivityResultLauncher requestPermissionLauncher = + registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> { + if (granted) + maybeStartLocation(); + else + errorDialog(R.string.acquire_location_no_permission); + }); + @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -94,8 +100,7 @@ public class DirectionsShortcutActivity extends OeffiActivity Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) maybeStartLocation(); else - ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, - REQUEST_CODE_REQUEST_LOCATION_PERMISSION); + requestPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION); } @Override @@ -105,17 +110,6 @@ public class DirectionsShortcutActivity extends OeffiActivity super.onDestroy(); } - @Override - public void onRequestPermissionsResult(final int requestCode, final String[] permissions, - final int[] grantResults) { - if (requestCode == REQUEST_CODE_REQUEST_LOCATION_PERMISSION) { - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) - maybeStartLocation(); - else - errorDialog(R.string.acquire_location_no_permission); - } - } - public void maybeStartLocation() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java index f6204fe..f18c129 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java @@ -40,7 +40,8 @@ import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import androidx.activity.ComponentActivity; -import androidx.core.app.ActivityCompat; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -75,8 +76,8 @@ import java.util.List; import java.util.Locale; import java.util.Map; -public class NetworkPickerActivity extends ComponentActivity implements ActivityCompat.OnRequestPermissionsResultCallback, - LocationHelper.Callback, NetworkClickListener, NetworkContextMenuItemListener { +public class NetworkPickerActivity extends ComponentActivity implements LocationHelper.Callback, NetworkClickListener, + NetworkContextMenuItemListener { public static void start(final Context context) { final Intent intent = new Intent(context, NetworkPickerActivity.class); context.startActivity(intent); @@ -102,10 +103,13 @@ public class NetworkPickerActivity extends ComponentActivity implements Activity private static final String INDEX_FILENAME = "networks.txt"; private static final int MAX_LAST_NETWORKS = 3; - private static final int REQUEST_CODE_REQUEST_LOCATION_PERMISSION = 1; - private static final Logger log = LoggerFactory.getLogger(NetworkPickerActivity.class); + private final ActivityResultLauncher requestPermissionLauncher = + registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> { + maybeStartLocation(); + }); + @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -195,8 +199,7 @@ public class NetworkPickerActivity extends ComponentActivity implements Activity if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) - ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.ACCESS_COARSE_LOCATION }, - REQUEST_CODE_REQUEST_LOCATION_PERMISSION); + requestPermissionLauncher.launch(Manifest.permission.ACCESS_COARSE_LOCATION); } @Override @@ -233,13 +236,6 @@ public class NetworkPickerActivity extends ComponentActivity implements Activity super.onDestroy(); } - @Override - public void onRequestPermissionsResult(final int requestCode, final String[] permissions, - final int[] grantResults) { - if (requestCode == REQUEST_CODE_REQUEST_LOCATION_PERMISSION) - maybeStartLocation(); - } - public void maybeStartLocation() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) diff --git a/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java b/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java index 1c574a9..1ce67d9 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java @@ -33,8 +33,9 @@ import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.TextView; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.Nullable; -import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.content.pm.ShortcutInfoCompat; import androidx.core.content.pm.ShortcutManagerCompat; @@ -66,8 +67,8 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.net.HttpURLConnection; -public class PlansPickerActivity extends OeffiMainActivity implements ActivityCompat.OnRequestPermissionsResultCallback, - LocationHelper.Callback, PlanClickListener, PlanContextMenuItemListener { +public class PlansPickerActivity extends OeffiMainActivity implements LocationHelper.Callback, PlanClickListener, + PlanContextMenuItemListener { private ConnectivityManager connectivityManager; private LocationHelper locationHelper; @@ -84,11 +85,15 @@ public class PlansPickerActivity extends OeffiMainActivity implements ActivityCo private Cursor cursor; - private static final int REQUEST_CODE_REQUEST_LOCATION_PERMISSION = 1; private static final int THUMB_CACHE_SIZE = 2 * 1024 * 1024; private static final Logger log = LoggerFactory.getLogger(PlansPickerActivity.class); + private final ActivityResultLauncher requestPermissionLauncher = + registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> { + maybeStartLocation(); + }); + @Override protected String taskName() { return "plans"; @@ -154,8 +159,7 @@ public class PlansPickerActivity extends OeffiMainActivity implements ActivityCo if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) - ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.ACCESS_COARSE_LOCATION }, - REQUEST_CODE_REQUEST_LOCATION_PERMISSION); + requestPermissionLauncher.launch(Manifest.permission.ACCESS_COARSE_LOCATION); } @Override @@ -186,13 +190,6 @@ public class PlansPickerActivity extends OeffiMainActivity implements ActivityCo super.onDestroy(); } - @Override - public void onRequestPermissionsResult(final int requestCode, final String[] permissions, - final int[] grantResults) { - if (requestCode == REQUEST_CODE_REQUEST_LOCATION_PERMISSION) - maybeStartLocation(); - } - public void maybeStartLocation() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) diff --git a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java index daec387..bd52c48 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationsWidgetPermissionActivity.java @@ -22,18 +22,27 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import androidx.activity.ComponentActivity; -import androidx.core.app.ActivityCompat; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.core.content.ContextCompat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Arrays; import java.util.LinkedList; import java.util.List; +import java.util.Map; public class NearestFavoriteStationsWidgetPermissionActivity extends ComponentActivity { private static final Logger log = LoggerFactory.getLogger(NearestFavoriteStationsWidgetPermissionActivity.class); + private final ActivityResultLauncher requestPermissionsLauncher = + registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), results -> { + for (Map.Entry entry : results.entrySet()) + log.info("{} {}", entry.getKey(), entry.getValue() ? "granted" : "denied"); + NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget + finish(); + }); + @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -44,16 +53,6 @@ public class NearestFavoriteStationsWidgetPermissionActivity extends ComponentAc if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R || permissions.isEmpty()) permissions.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION); log.info("Requesting permissions: {}", permissions); - ActivityCompat.requestPermissions(this, permissions.toArray(new String[0]), 0); - } - - @Override - public void onRequestPermissionsResult(final int requestCode, final String[] permissions, - final int[] grantResults) { - for (int i = 0; i < permissions.length; i++) - log.info("{}{} granted", - permissions[i], grantResults[i] == PackageManager.PERMISSION_GRANTED ? "" : " " + "not"); - NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget - finish(); + requestPermissionsLauncher.launch(permissions.toArray(new String[0])); } } diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java index 9ffdf9e..fc0d0d8 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java @@ -53,8 +53,9 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import android.widget.ViewAnimator; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.Nullable; -import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; @@ -116,7 +117,7 @@ import java.util.Map; import java.util.Set; public class StationsActivity extends OeffiMainActivity implements StationsAware, LocationAware, - ActivityCompat.OnRequestPermissionsResultCallback, StationContextMenuItemListener { + StationContextMenuItemListener { private ConnectivityManager connectivityManager; private LocationManager locationManager; private SensorManager sensorManager; @@ -160,6 +161,11 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware private static final Logger log = LoggerFactory.getLogger(StationsActivity.class); + private final ActivityResultLauncher requestPermissionLauncher = + registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> { + startLocationProvider(); + }); + @Override protected String taskName() { return "stations"; @@ -244,8 +250,7 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware final Button locationPermissionRequestButton = findViewById( R.id.stations_location_permission_request_button); - locationPermissionRequestButton.setOnClickListener(v -> ActivityCompat.requestPermissions(StationsActivity.this, - new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, 0)); + locationPermissionRequestButton.setOnClickListener(v -> requestPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION)); final Button locationSettingsButton = findViewById(R.id.stations_list_location_settings); locationSettingsButton.setOnClickListener(v -> startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))); @@ -1342,13 +1347,6 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware return null; } - @Override - public void onRequestPermissionsResult(final int requestCode, final String[] permissions, - final int[] grantResults) { - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) - startLocationProvider(); - } - public boolean onStationContextMenuItemClick(final int adapterPosition, final NetworkId network, final Location station, final @Nullable List departures, final int menuItemId) { if (menuItemId == R.id.station_context_add_favorite) { From 16ddf861f301843fdf520a88a63580a8d0591fe3 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 7 Sep 2022 21:43:35 +0200 Subject: [PATCH 071/218] DirectionsActivity: use activity result API for picking contacts --- .../oeffi/directions/DirectionsActivity.java | 64 ++++++++++++------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java index 05bb360..c8b0f7c 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java @@ -59,6 +59,7 @@ import android.widget.Filterable; import android.widget.PopupMenu; import android.widget.TextView; import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContract; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.Nullable; import androidx.coordinatorlayout.widget.CoordinatorLayout; @@ -168,9 +169,6 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor private static final int DIALOG_CLEAR_HISTORY = 1; - private static final int REQUEST_CODE_PICK_CONTACT_FROM = 7; - private static final int REQUEST_CODE_PICK_CONTACT_VIA = 8; - private static final int REQUEST_CODE_PICK_CONTACT_TO = 9; private static final int REQUEST_CODE_PICK_STATION_FROM = 10; private static final int REQUEST_CODE_PICK_STATION_VIA = 11; private static final int REQUEST_CODE_PICK_STATION_TO = 12; @@ -180,7 +178,21 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor private static final String INTENT_EXTRA_FROM_LOCATION = DirectionsActivity.class.getName() + ".from_location"; private static final String INTENT_EXTRA_TO_LOCATION = DirectionsActivity.class.getName() + ".to_location"; private static final String INTENT_EXTRA_TIME_SPEC = DirectionsActivity.class.getName() + ".time_spec"; - private static final Intent INTENT_PICK_CONTACTS = new Intent(Intent.ACTION_PICK, CommonDataKinds.StructuredPostal.CONTENT_URI); + + private static class PickContact extends ActivityResultContract { + @Override + public Intent createIntent(final Context context, Void unused) { + return new Intent(Intent.ACTION_PICK, CommonDataKinds.StructuredPostal.CONTENT_URI); + } + + @Override + public Uri parseResult(final int resultCode, @Nullable final Intent intent) { + if (resultCode == Activity.RESULT_OK && intent != null) + return intent.getData(); + else + return null; + } + } private final ActivityResultLauncher requestLocationPermissionFromLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> { @@ -197,6 +209,21 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor if (granted) viewToLocation.acquireLocation(); }); + private final ActivityResultLauncher pickContactFromLauncher = + registerForActivityResult(new PickContact(), contentUri -> { + if (contentUri != null) + resultPickContact(contentUri, viewFromLocation); + }); + private final ActivityResultLauncher pickContactViaLauncher = + registerForActivityResult(new PickContact(), contentUri -> { + if (contentUri != null) + resultPickContact(contentUri, viewViaLocation); + }); + private final ActivityResultLauncher pickContactToLauncher = + registerForActivityResult(new PickContact(), contentUri -> { + if (contentUri != null) + resultPickContact(contentUri, viewToLocation); + }); public static void start(final Context context, @Nullable final Location fromLocation, @Nullable final Location toLocation, @Nullable final TimeSpec timeSpec, final int intentFlags) { @@ -213,15 +240,15 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor private class LocationContextMenuItemClickListener implements PopupMenu.OnMenuItemClickListener { private final LocationView locationView; private final ActivityResultLauncher requestLocationPermissionLauncher; - private final int pickContactRequestCode; + private final ActivityResultLauncher pickContactLauncher; private final int pickStationRequestCode; public LocationContextMenuItemClickListener(final LocationView locationView, final ActivityResultLauncher requestLocationPermissionLauncher, - final int pickContactRequestCode, final int pickStationRequestCode) { + final ActivityResultLauncher pickContactLauncher, final int pickStationRequestCode) { this.locationView = locationView; this.requestLocationPermissionLauncher = requestLocationPermissionLauncher; - this.pickContactRequestCode = pickContactRequestCode; + this.pickContactLauncher = pickContactLauncher; this.pickStationRequestCode = pickStationRequestCode; } @@ -234,7 +261,7 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor requestLocationPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION); return true; } else if (item.getItemId() == R.id.directions_location_contact) { - startActivityForResult(INTENT_PICK_CONTACTS, pickContactRequestCode); + pickContactLauncher.launch(null); return true; } else if (item.getItemId() == R.id.directions_location_favorite_station) { if (network != null) @@ -321,13 +348,13 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor viewFromLocation.setAdapter(autoCompleteAdapter); viewFromLocation.setListener(locationChangeListener); viewFromLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewFromLocation, - requestLocationPermissionFromLauncher, REQUEST_CODE_PICK_CONTACT_FROM, REQUEST_CODE_PICK_STATION_FROM)); + requestLocationPermissionFromLauncher, pickContactFromLauncher, REQUEST_CODE_PICK_STATION_FROM)); viewViaLocation = findViewById(R.id.directions_via); viewViaLocation.setAdapter(autoCompleteAdapter); viewViaLocation.setListener(locationChangeListener); viewViaLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewViaLocation, - requestLocationPermissionViaLauncher, REQUEST_CODE_PICK_CONTACT_VIA, REQUEST_CODE_PICK_STATION_VIA)); + requestLocationPermissionViaLauncher, pickContactViaLauncher, REQUEST_CODE_PICK_STATION_VIA)); viewToLocation = findViewById(R.id.directions_to); viewToLocation.setAdapter(autoCompleteAdapter); @@ -344,7 +371,7 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor } }); viewToLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewToLocation, - requestLocationPermissionToLauncher, REQUEST_CODE_PICK_CONTACT_TO, REQUEST_CODE_PICK_STATION_TO)); + requestLocationPermissionToLauncher, pickContactToLauncher, REQUEST_CODE_PICK_STATION_TO)); viewProducts = findViewById(R.id.directions_products); viewProductToggles.add(findViewById(R.id.directions_products_i)); @@ -1134,16 +1161,7 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent result) { - if (requestCode == REQUEST_CODE_PICK_CONTACT_FROM) { - if (resultCode == Activity.RESULT_OK && result != null) - resultPickContact(result, viewFromLocation); - } else if (requestCode == REQUEST_CODE_PICK_CONTACT_VIA) { - if (resultCode == Activity.RESULT_OK && result != null) - resultPickContact(result, viewViaLocation); - } else if (requestCode == REQUEST_CODE_PICK_CONTACT_TO) { - if (resultCode == Activity.RESULT_OK && result != null) - resultPickContact(result, viewToLocation); - } else if (requestCode == REQUEST_CODE_PICK_STATION_FROM) { + if (requestCode == REQUEST_CODE_PICK_STATION_FROM) { if (resultCode == Activity.RESULT_OK && result != null) resultPickStation(result, viewFromLocation); } else if (requestCode == REQUEST_CODE_PICK_STATION_VIA) { @@ -1157,8 +1175,8 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor } } - private void resultPickContact(final Intent result, final LocationView targetLocationView) { - final Cursor c = managedQuery(result.getData(), null, null, null, null); + private void resultPickContact(final Uri contentUri, final LocationView targetLocationView) { + final Cursor c = managedQuery(contentUri, null, null, null, null); if (c.moveToFirst()) { final String data = c .getString(c.getColumnIndexOrThrow(CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS)); From 5e7614d9f5c033d4855fd723dc420c25656005fe Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 7 Sep 2022 22:50:17 +0200 Subject: [PATCH 072/218] DirectionsActivity: use activity result API for picking favorite stations --- .../oeffi/directions/DirectionsActivity.java | 53 +++++++++---------- .../stations/FavoriteStationsActivity.java | 20 +++++-- 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java index c8b0f7c..ea0dbd9 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java @@ -169,10 +169,6 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor private static final int DIALOG_CLEAR_HISTORY = 1; - private static final int REQUEST_CODE_PICK_STATION_FROM = 10; - private static final int REQUEST_CODE_PICK_STATION_VIA = 11; - private static final int REQUEST_CODE_PICK_STATION_TO = 12; - private static final Logger log = LoggerFactory.getLogger(DirectionsActivity.class); private static final String INTENT_EXTRA_FROM_LOCATION = DirectionsActivity.class.getName() + ".from_location"; @@ -224,6 +220,21 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor if (contentUri != null) resultPickContact(contentUri, viewToLocation); }); + private final ActivityResultLauncher pickStationFromLauncher = + registerForActivityResult(new FavoriteStationsActivity.PickFavoriteStation(), contentUri -> { + if (contentUri != null) + resultPickStation(contentUri, viewFromLocation); + }); + private final ActivityResultLauncher pickStationViaLauncher = + registerForActivityResult(new FavoriteStationsActivity.PickFavoriteStation(), contentUri -> { + if (contentUri != null) + resultPickStation(contentUri, viewViaLocation); + }); + private final ActivityResultLauncher pickStationToLauncher = + registerForActivityResult(new FavoriteStationsActivity.PickFavoriteStation(), contentUri -> { + if (contentUri != null) + resultPickStation(contentUri, viewToLocation); + }); public static void start(final Context context, @Nullable final Location fromLocation, @Nullable final Location toLocation, @Nullable final TimeSpec timeSpec, final int intentFlags) { @@ -241,15 +252,15 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor private final LocationView locationView; private final ActivityResultLauncher requestLocationPermissionLauncher; private final ActivityResultLauncher pickContactLauncher; - private final int pickStationRequestCode; + private final ActivityResultLauncher pickStationLauncher; public LocationContextMenuItemClickListener(final LocationView locationView, final ActivityResultLauncher requestLocationPermissionLauncher, - final ActivityResultLauncher pickContactLauncher, final int pickStationRequestCode) { + final ActivityResultLauncher pickContactLauncher, final ActivityResultLauncher pickStationLauncher) { this.locationView = locationView; this.requestLocationPermissionLauncher = requestLocationPermissionLauncher; this.pickContactLauncher = pickContactLauncher; - this.pickStationRequestCode = pickStationRequestCode; + this.pickStationLauncher = pickStationLauncher; } public boolean onMenuItemClick(final MenuItem item) { @@ -265,7 +276,7 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor return true; } else if (item.getItemId() == R.id.directions_location_favorite_station) { if (network != null) - FavoriteStationsActivity.startForResult(DirectionsActivity.this, pickStationRequestCode, network); + pickStationLauncher.launch(network); return true; } else { return false; @@ -348,13 +359,13 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor viewFromLocation.setAdapter(autoCompleteAdapter); viewFromLocation.setListener(locationChangeListener); viewFromLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewFromLocation, - requestLocationPermissionFromLauncher, pickContactFromLauncher, REQUEST_CODE_PICK_STATION_FROM)); + requestLocationPermissionFromLauncher, pickContactFromLauncher, pickStationFromLauncher)); viewViaLocation = findViewById(R.id.directions_via); viewViaLocation.setAdapter(autoCompleteAdapter); viewViaLocation.setListener(locationChangeListener); viewViaLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewViaLocation, - requestLocationPermissionViaLauncher, pickContactViaLauncher, REQUEST_CODE_PICK_STATION_VIA)); + requestLocationPermissionViaLauncher, pickContactViaLauncher, pickStationViaLauncher)); viewToLocation = findViewById(R.id.directions_to); viewToLocation.setAdapter(autoCompleteAdapter); @@ -371,7 +382,7 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor } }); viewToLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewToLocation, - requestLocationPermissionToLauncher, pickContactToLauncher, REQUEST_CODE_PICK_STATION_TO)); + requestLocationPermissionToLauncher, pickContactToLauncher, pickStationToLauncher)); viewProducts = findViewById(R.id.directions_products); viewProductToggles.add(findViewById(R.id.directions_products_i)); @@ -1159,22 +1170,6 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor return super.onCreateDialog(id); } - @Override - protected void onActivityResult(final int requestCode, final int resultCode, final Intent result) { - if (requestCode == REQUEST_CODE_PICK_STATION_FROM) { - if (resultCode == Activity.RESULT_OK && result != null) - resultPickStation(result, viewFromLocation); - } else if (requestCode == REQUEST_CODE_PICK_STATION_VIA) { - if (resultCode == Activity.RESULT_OK && result != null) - resultPickStation(result, viewViaLocation); - } else if (requestCode == REQUEST_CODE_PICK_STATION_TO) { - if (resultCode == Activity.RESULT_OK && result != null) - resultPickStation(result, viewToLocation); - } else { - super.onActivityResult(requestCode, resultCode, result); - } - } - private void resultPickContact(final Uri contentUri, final LocationView targetLocationView) { final Cursor c = managedQuery(contentUri, null, null, null, null); if (c.moveToFirst()) { @@ -1187,8 +1182,8 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor } } - private void resultPickStation(final Intent result, final LocationView targetLocationView) { - final Cursor c = managedQuery(result.getData(), null, null, null, null); + private void resultPickStation(final Uri contentUri, final LocationView targetLocationView) { + final Cursor c = managedQuery(contentUri, null, null, null, null); if (c.moveToFirst()) { final Location location = FavoriteStationsProvider.getLocation(c); targetLocationView.setLocation(location); diff --git a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java index 7151c3d..37416e7 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java @@ -24,6 +24,7 @@ import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.ViewAnimator; +import androidx.activity.result.contract.ActivityResultContract; import androidx.annotation.Nullable; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -51,10 +52,21 @@ public class FavoriteStationsActivity extends OeffiActivity context.startActivity(intent); } - public static void startForResult(final Activity activity, final int requestCode, final NetworkId network) { - final Intent intent = new Intent(activity, FavoriteStationsActivity.class); - intent.putExtra(INTENT_EXTRA_NETWORK, checkNotNull(network)); - activity.startActivityForResult(intent, requestCode); + public static class PickFavoriteStation extends ActivityResultContract { + @Override + public Intent createIntent(final Context context, final NetworkId network) { + final Intent intent = new Intent(context, FavoriteStationsActivity.class); + intent.putExtra(INTENT_EXTRA_NETWORK, checkNotNull(network)); + return intent; + } + + @Override + public Uri parseResult(final int resultCode, @Nullable final Intent intent) { + if (resultCode == Activity.RESULT_OK && intent != null) + return intent.getData(); + else + return null; + } } @Nullable From 75594e29044dedf7a6607833354e772bcecdd5c4 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 9 Sep 2022 11:13:38 +0200 Subject: [PATCH 073/218] 12.1.1 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 017391f..e7e04b9 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120101" + android:versionName="12.1.1"> Date: Fri, 9 Sep 2022 19:30:44 +0200 Subject: [PATCH 074/218] OeffiMainActivity: migrate navigation drawer menu to MenuProvider --- .../schildbach/oeffi/OeffiMainActivity.java | 185 +++++++++--------- 1 file changed, 89 insertions(+), 96 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java b/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java index 37cd20d..73b32cd 100644 --- a/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java +++ b/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java @@ -34,9 +34,11 @@ import android.text.format.DateUtils; import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import androidx.annotation.Nullable; +import androidx.core.view.MenuProvider; import androidx.drawerlayout.widget.DrawerLayout; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -90,6 +92,7 @@ public abstract class OeffiMainActivity extends OeffiActivity { private DrawerLayout navigationDrawerLayout; private RecyclerView navigationDrawerListView; + private MenuProvider navigationDrawerMenuProvider; private View navigationDrawerFooterView; private View navigationDrawerFooterHeartView; @@ -113,6 +116,89 @@ public abstract class OeffiMainActivity extends OeffiActivity { versionCode = applicationVersionCode(); lastVersionCode = prefs.getInt(Constants.PREFS_KEY_LAST_VERSION, 0); + navigationDrawerMenuProvider = new MenuProvider() { + @Override + public void onCreateMenu(final Menu menu, final MenuInflater inflater) { + inflater.inflate(R.menu.global_options, menu); + } + + @Override + public void onPrepareMenu(final Menu menu) { + final MenuItem stationsItem = menu.findItem(R.id.global_options_stations); + stationsItem.setChecked(OeffiMainActivity.this instanceof StationsActivity); + final MenuItem directionsItem = menu.findItem(R.id.global_options_directions); + directionsItem.setChecked(OeffiMainActivity.this instanceof DirectionsActivity); + final MenuItem plansItem = menu.findItem(R.id.global_options_plans); + plansItem.setChecked(OeffiMainActivity.this instanceof PlansPickerActivity); + final MenuItem donateItem = menu.findItem(R.id.global_options_donate); + donateItem.setVisible(Variants.ENABLE_DONATE); + } + + @Override + public boolean onMenuItemSelected(final MenuItem item) { + switch (item.getItemId()) { + case R.id.global_options_stations: { + if (OeffiMainActivity.this instanceof StationsActivity) + return true; + final Intent intent = new Intent(OeffiMainActivity.this, StationsActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + finish(); + overridePendingTransition(R.anim.enter_from_left, R.anim.exit_to_right); + return true; + } + + case R.id.global_options_directions: { + if (OeffiMainActivity.this instanceof DirectionsActivity) + return true; + final Intent intent = new Intent(OeffiMainActivity.this, DirectionsActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + finish(); + if (OeffiMainActivity.this instanceof StationsActivity) + overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left); + else + overridePendingTransition(R.anim.enter_from_left, R.anim.exit_to_right); + return true; + } + + case R.id.global_options_plans: { + if (OeffiMainActivity.this instanceof PlansPickerActivity) + return true; + final Intent intent = new Intent(OeffiMainActivity.this, PlansPickerActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + finish(); + overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left); + return true; + } + + case R.id.global_options_donate: { + if (Variants.ENABLE_DONATE) + PreferenceActivity.start(OeffiMainActivity.this, DonateFragment.class.getName()); + return true; + } + + case R.id.global_options_report_bug: { + ErrorReporter.sendBugMail(OeffiMainActivity.this, application.packageInfo()); + return true; + } + + case R.id.global_options_preferences: { + PreferenceActivity.start(OeffiMainActivity.this); + return true; + } + + case R.id.global_options_about: { + PreferenceActivity.start(OeffiMainActivity.this, AboutFragment.class.getName()); + return true; + } + } + + return false; + } + }; + if (prefsGetNetwork() == null) { NetworkPickerActivity.start(this); @@ -177,13 +263,13 @@ public abstract class OeffiMainActivity extends OeffiActivity { final NavigationMenuAdapter menuAdapter = new NavigationMenuAdapter(this, item -> { - onOptionsItemSelected(item); + navigationDrawerMenuProvider.onMenuItemSelected(item); navigationDrawerLayout.closeDrawers(); return false; }); final Menu menu = menuAdapter.getMenu(); - onCreateOptionsMenu(menu); - onPrepareOptionsMenu(menu); + navigationDrawerMenuProvider.onCreateMenu(menu, getMenuInflater()); + navigationDrawerMenuProvider.onPrepareMenu(menu); navigationDrawerListView.setLayoutManager(new LinearLayoutManager(this)); navigationDrawerListView @@ -236,99 +322,6 @@ public abstract class OeffiMainActivity extends OeffiActivity { navigationDrawerLayout.closeDrawer(Gravity.LEFT); } - @Override - public boolean onCreateOptionsMenu(final Menu menu) { - getMenuInflater().inflate(R.menu.global_options, menu); - return true; - } - - @Override - public boolean onPrepareOptionsMenu(final Menu menu) { - final MenuItem stationsItem = menu.findItem(R.id.global_options_stations); - stationsItem.setChecked(this instanceof StationsActivity); - - final MenuItem directionsItem = menu.findItem(R.id.global_options_directions); - directionsItem.setChecked(this instanceof DirectionsActivity); - - final MenuItem plansItem = menu.findItem(R.id.global_options_plans); - plansItem.setChecked(this instanceof PlansPickerActivity); - - final MenuItem donateItem = menu.findItem(R.id.global_options_donate); - donateItem.setVisible(Variants.ENABLE_DONATE); - - return super.onPrepareOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(final MenuItem item) { - switch (item.getItemId()) { - case R.id.global_options_stations: { - if (this instanceof StationsActivity) - return true; - - final Intent intent = new Intent(this, StationsActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); - finish(); - overridePendingTransition(R.anim.enter_from_left, R.anim.exit_to_right); - - return true; - } - - case R.id.global_options_directions: { - if (this instanceof DirectionsActivity) - return true; - - final Intent intent = new Intent(this, DirectionsActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); - finish(); - if (this instanceof StationsActivity) - overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left); - else - overridePendingTransition(R.anim.enter_from_left, R.anim.exit_to_right); - - return true; - } - - case R.id.global_options_plans: { - if (this instanceof PlansPickerActivity) - return true; - - final Intent intent = new Intent(this, PlansPickerActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); - finish(); - overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left); - - return true; - } - - case R.id.global_options_donate: { - if (Variants.ENABLE_DONATE) - PreferenceActivity.start(this, DonateFragment.class.getName()); - return true; - } - - case R.id.global_options_report_bug: { - ErrorReporter.sendBugMail(this, application.packageInfo()); - return true; - } - - case R.id.global_options_preferences: { - PreferenceActivity.start(this); - return true; - } - - case R.id.global_options_about: { - PreferenceActivity.start(this, AboutFragment.class.getName()); - return true; - } - } - - return false; - } - @Override public boolean onKeyDown(final int keyCode, final KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { From 6e34a09531bd070ec1ab6012a3dfeb549c361f22 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 9 Sep 2022 20:58:54 +0200 Subject: [PATCH 075/218] build.gradle: update AndroidX Core to 1.9.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index fbba455..e9d69c5 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -15,7 +15,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' - implementation 'androidx.core:core:1.8.0' + implementation 'androidx.core:core:1.9.0' implementation 'androidx.activity:activity:1.5.1' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' From b7341bf810382a88d9774c2b20e34f9253efc379 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 9 Sep 2022 21:22:27 +0200 Subject: [PATCH 076/218] build.gradle: add more packaging excludes --- oeffi/build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index e9d69c5..9861608 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -91,8 +91,10 @@ android { packagingOptions { exclude 'META-INF/*.version' exclude 'META-INF/proguard/**' + exclude 'META-INF/services/**' exclude 'META-INF/*.kotlin_module' - exclude 'META-INF/com.android.tools/proguard/coroutines.pro' + exclude 'META-INF/**/coroutines.pro' + exclude 'DebugProbesKt.bin' exclude 'kotlin/**' } } From a5c17eaff2fb10f25a2ad9de1f9cd506a12b4369 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 10 Sep 2022 10:55:58 +0200 Subject: [PATCH 077/218] 12.1.2 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index e7e04b9..334861c 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120102" + android:versionName="12.1.2"> Date: Sat, 10 Sep 2022 16:11:44 +0200 Subject: [PATCH 078/218] MyActionBar, LineView: use setTooltipText() rather than our own CheatSheet --- .../src/de/schildbach/oeffi/MyActionBar.java | 11 +- .../schildbach/oeffi/stations/LineView.java | 17 ++- .../de/schildbach/oeffi/util/CheatSheet.java | 135 ------------------ 3 files changed, 17 insertions(+), 146 deletions(-) delete mode 100644 oeffi/src/de/schildbach/oeffi/util/CheatSheet.java diff --git a/oeffi/src/de/schildbach/oeffi/MyActionBar.java b/oeffi/src/de/schildbach/oeffi/MyActionBar.java index bf2600e..5d1ef79 100644 --- a/oeffi/src/de/schildbach/oeffi/MyActionBar.java +++ b/oeffi/src/de/schildbach/oeffi/MyActionBar.java @@ -19,6 +19,7 @@ package de.schildbach.oeffi; import android.content.Context; import android.content.res.Resources; +import android.os.Build; import android.os.Handler; import android.util.AttributeSet; import android.view.Gravity; @@ -33,7 +34,6 @@ import android.widget.ImageView.ScaleType; import android.widget.LinearLayout; import android.widget.PopupMenu; import android.widget.TextView; -import de.schildbach.oeffi.util.CheatSheet; import de.schildbach.oeffi.util.ToggleImageButton; public class MyActionBar extends LinearLayout { @@ -147,7 +147,8 @@ public class MyActionBar extends LinearLayout { if (descriptionRes != 0) { final String description = context.getString(descriptionRes); button.setContentDescription(description); - CheatSheet.setup(button, description); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + button.setTooltipText(description); } addView(button, BUTTON_INSERT_INDEX, buttonParams); @@ -166,7 +167,8 @@ public class MyActionBar extends LinearLayout { if (descriptionRes != 0) { final String description = context.getString(descriptionRes); button.setContentDescription(description); - CheatSheet.setup(button, description); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + button.setTooltipText(description); } addView(button, BUTTON_INSERT_INDEX, buttonParams); @@ -176,7 +178,8 @@ public class MyActionBar extends LinearLayout { public View addProgressButton() { progressAlwaysVisible = true; progressView.setVisibility(View.VISIBLE); - CheatSheet.setup(progressButton); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + progressButton.setTooltipText(progressButton.getContentDescription()); return getProgressButton(); } diff --git a/oeffi/src/de/schildbach/oeffi/stations/LineView.java b/oeffi/src/de/schildbach/oeffi/stations/LineView.java index 652d372..2fc9668 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/LineView.java +++ b/oeffi/src/de/schildbach/oeffi/stations/LineView.java @@ -28,6 +28,7 @@ import android.graphics.Paint.FontMetrics; import android.graphics.RectF; import android.graphics.Shader; import android.graphics.Typeface; +import android.os.Build; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.ReplacementSpan; @@ -36,7 +37,6 @@ import android.widget.TextView; import com.google.common.base.Joiner; import com.google.common.base.Strings; import de.schildbach.oeffi.R; -import de.schildbach.oeffi.util.CheatSheet; import de.schildbach.pte.Standard; import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Line.Attr; @@ -177,16 +177,19 @@ public class LineView extends TextView { "product_" + Character.toLowerCase(line.productCode()), "string", context.getPackageName()); final String sheet = Joiner.on('\n').skipNulls().join(line.name, productResId != 0 ? context.getString(productResId) : null, line.network); - if (Strings.emptyToNull(sheet) != null) - CheatSheet.setup(this, sheet); - else - CheatSheet.remove(this); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + if (Strings.emptyToNull(sheet) != null) + setTooltipText(sheet); + else + setTooltipText(null); } else { - CheatSheet.remove(this); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + setTooltipText(null); } } else { setText(null); - CheatSheet.remove(this); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + setTooltipText(null); } } diff --git a/oeffi/src/de/schildbach/oeffi/util/CheatSheet.java b/oeffi/src/de/schildbach/oeffi/util/CheatSheet.java deleted file mode 100644 index 6ad8c2d..0000000 --- a/oeffi/src/de/schildbach/oeffi/util/CheatSheet.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package de.schildbach.oeffi.util; - -import android.content.Context; -import android.graphics.Rect; -import android.text.TextUtils; -import android.view.Gravity; -import android.view.View; -import android.widget.Toast; - -/** - * Helper class for showing cheat sheets (tooltips) for icon-only UI elements on long-press. This is already - * default platform behavior for icon-only {@link android.app.ActionBar} items and tabs. This class provides - * this behavior for any other such UI element. - * - *

- * Based on the original action bar implementation in - * ActionMenuItemView.java. - */ -public class CheatSheet { - /** - * The estimated height of a toast, in dips (density-independent pixels). This is used to determine - * whether or not the toast should appear above or below the UI element. - */ - private static final int ESTIMATED_TOAST_HEIGHT_DIPS = 48; - - /** - * Sets up a cheat sheet (tooltip) for the given view by setting its - * {@link android.view.View.OnLongClickListener}. When the view is long-pressed, a {@link Toast} with the - * view's {@link android.view.View#getContentDescription() content description} will be shown either above - * (default) or below the view (if there isn't room above it). - * - * @param view - * The view to add a cheat sheet for. - */ - public static void setup(View view) { - view.setOnLongClickListener(v -> showCheatSheet(v, v.getContentDescription())); - } - - /** - * Sets up a cheat sheet (tooltip) for the given view by setting its - * {@link android.view.View.OnLongClickListener}. When the view is long-pressed, a {@link Toast} with the - * given text will be shown either above (default) or below the view (if there isn't room above it). - * - * @param view - * The view to add a cheat sheet for. - * @param textResId - * The string resource containing the text to show on long-press. - */ - public static void setup(View view, final int textResId) { - view.setOnLongClickListener(v -> showCheatSheet(v, v.getContext().getString(textResId))); - } - - /** - * Sets up a cheat sheet (tooltip) for the given view by setting its - * {@link android.view.View.OnLongClickListener}. When the view is long-pressed, a {@link Toast} with the - * given text will be shown either above (default) or below the view (if there isn't room above it). - * - * @param view - * The view to add a cheat sheet for. - * @param text - * The text to show on long-press. - */ - public static void setup(View view, final CharSequence text) { - view.setOnLongClickListener(v -> showCheatSheet(v, text)); - } - - /** - * Removes the cheat sheet for the given view by removing the view's - * {@link android.view.View.OnLongClickListener}. - * - * @param view - * The view whose cheat sheet should be removed. - */ - public static void remove(final View view) { - view.setOnLongClickListener(null); - } - - /** - * Internal helper method to show the cheat sheet toast. - */ - private static boolean showCheatSheet(View view, CharSequence text) { - if (TextUtils.isEmpty(text)) { - return false; - } - - final int[] screenPos = new int[2]; // origin is device display - final Rect displayFrame = new Rect(); // includes decorations (e.g. status bar) - view.getLocationOnScreen(screenPos); - view.getWindowVisibleDisplayFrame(displayFrame); - - final Context context = view.getContext(); - final int viewWidth = view.getWidth(); - final int viewHeight = view.getHeight(); - final int viewCenterX = screenPos[0] + viewWidth / 2; - final int screenWidth = context.getResources().getDisplayMetrics().widthPixels; - final int estimatedToastHeight = (int) (ESTIMATED_TOAST_HEIGHT_DIPS - * context.getResources().getDisplayMetrics().density); - - Toast cheatSheet = Toast.makeText(context, text, Toast.LENGTH_SHORT); - boolean showBelow = screenPos[1] < estimatedToastHeight; - if (showBelow) { - // Show below - // Offsets are after decorations (e.g. status bar) are factored in - cheatSheet.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, viewCenterX - screenWidth / 2, - screenPos[1] - displayFrame.top + viewHeight); - } else { - // Show above - // Offsets are after decorations (e.g. status bar) are factored in - // NOTE: We can't use Gravity.BOTTOM because when the keyboard is up - // its height isn't factored in. - cheatSheet.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, viewCenterX - screenWidth / 2, - screenPos[1] - displayFrame.top - estimatedToastHeight); - } - - cheatSheet.show(); - return true; - } -} From d70d84b8b9ee7165bfa1764d049bdbb9c9b560cd Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 12 Sep 2022 11:24:37 +0200 Subject: [PATCH 079/218] StationsActivity: fix missing braces for an if-block --- oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java index fc0d0d8..d72bae2 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java @@ -1496,11 +1496,12 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware try { final SuggestLocationsResult result = networkProvider.suggestLocations(query, EnumSet.of(LocationType.STATION), 0); - if (result.status == SuggestLocationsResult.Status.OK) + if (result.status == SuggestLocationsResult.Status.OK) { log.info("Got {}", result.toShortString()); for (final Location l : result.getLocations()) if (l.type == LocationType.STATION) stations.add(new Station(network, l)); + } } catch (final IOException x) { x.printStackTrace(); } From 4299a6fd41cf8105e235638a4eedb59cb24dd5bf Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 12 Sep 2022 11:35:27 +0200 Subject: [PATCH 080/218] FavoriteUtils: check location is really a station on persist() --- oeffi/src/de/schildbach/oeffi/stations/FavoriteUtils.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/oeffi/src/de/schildbach/oeffi/stations/FavoriteUtils.java b/oeffi/src/de/schildbach/oeffi/stations/FavoriteUtils.java index 4a15681..4edb9f2 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/FavoriteUtils.java +++ b/oeffi/src/de/schildbach/oeffi/stations/FavoriteUtils.java @@ -23,13 +23,17 @@ import android.database.Cursor; import android.net.Uri; import de.schildbach.pte.NetworkId; import de.schildbach.pte.dto.Location; +import de.schildbach.pte.dto.LocationType; import java.util.HashMap; import java.util.Map; +import static com.google.common.base.Preconditions.checkArgument; + public class FavoriteUtils { public static Uri persist(final ContentResolver contentResolver, final int type, final NetworkId networkId, final Location station) { + checkArgument(station.type == LocationType.STATION, "not a station: %s", station); final ContentValues values = new ContentValues(); values.put(FavoriteStationsProvider.KEY_TYPE, type); values.put(FavoriteStationsProvider.KEY_STATION_NETWORK, networkId.name()); From 0c894a541da6e26fae68c0c00dcde021b95a0995 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 12 Sep 2022 12:44:37 +0200 Subject: [PATCH 081/218] networks.txt: remove region Poland --- oeffi/assets/networks.txt | 3 --- oeffi/res/values-de/networks.xml | 2 -- oeffi/res/values/networks.xml | 2 -- oeffi/res/xml/network_security_config.xml | 1 - oeffi/src/de/schildbach/oeffi/Application.java | 6 ++++++ .../de/schildbach/oeffi/network/NetworkProviderFactory.java | 3 --- 6 files changed, 6 insertions(+), 11 deletions(-) diff --git a/oeffi/assets/networks.txt b/oeffi/assets/networks.txt index 5fe780e..4d55956 100644 --- a/oeffi/assets/networks.txt +++ b/oeffi/assets/networks.txt @@ -87,9 +87,6 @@ MERSEY|en-UK|GB;Liverpool|beta # IE TFI|ga-IE|IE;Dublin;GB;Belfast -# PL -PL|pl-PL|PL;Warschau - # AE DUB|ae-AE|AE;Dubai|beta diff --git a/oeffi/res/values-de/networks.xml b/oeffi/res/values-de/networks.xml index 5ec93de..42c4501 100644 --- a/oeffi/res/values-de/networks.xml +++ b/oeffi/res/values-de/networks.xml @@ -113,8 +113,6 @@ Lokal- und Regionalverkehr Irland & Nordirland Lokal- und Regionalverkehr - Polen - Fern-, Regional und Lokalverkehr (z.B. Warschau) Dubai Lokalverkehr San Francisco diff --git a/oeffi/res/values/networks.xml b/oeffi/res/values/networks.xml index 8a2eca1..41aa840 100644 --- a/oeffi/res/values/networks.xml +++ b/oeffi/res/values/networks.xml @@ -113,8 +113,6 @@ local and regional Ireland & Northern Ireland local and regional - Poland - long-distance, regional and local (e.g. Warsaw) Dubai local San Francisco diff --git a/oeffi/res/xml/network_security_config.xml b/oeffi/res/xml/network_security_config.xml index 7f0db28..fcaaaa5 100644 --- a/oeffi/res/xml/network_security_config.xml +++ b/oeffi/res/xml/network_security_config.xml @@ -17,7 +17,6 @@ railteam.hafas.eu mobil.vbl.ch efa.vvo-online.de - mobil.rozklad-pkp.pl diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index 9493840..f7f88cd 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -115,6 +115,12 @@ public class Application extends android.app.Application { 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); + log.info("Migrations took {}", watch); } diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index c76ca61..d7becb4 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -50,7 +50,6 @@ import de.schildbach.pte.NvbwProvider; import de.schildbach.pte.NvvProvider; import de.schildbach.pte.OebbProvider; import de.schildbach.pte.ParisProvider; -import de.schildbach.pte.PlProvider; import de.schildbach.pte.RtProvider; import de.schildbach.pte.RtaChicagoProvider; import de.schildbach.pte.SeProvider; @@ -203,8 +202,6 @@ public final class NetworkProviderFactory { return new MerseyProvider(); else if (networkId.equals(NetworkId.TFI)) return new TfiProvider(); - else if (networkId.equals(NetworkId.PL)) - return new PlProvider(); else if (networkId.equals(NetworkId.DUB)) return new DubProvider(); else if (networkId.equals(NetworkId.BART)) From d88d18f0253327bfd9a6ca40804c99836d471e48 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 12 Sep 2022 12:56:35 +0200 Subject: [PATCH 082/218] Application: remove a couple of old database migrations --- oeffi/src/de/schildbach/oeffi/Application.java | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index f7f88cd..deb59df 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -86,24 +86,6 @@ public class Application extends android.app.Application { final Stopwatch watch = Stopwatch.createStarted(); - // 2018-07-06: migrate IVB to use OEBB - final String IVB = "IVB"; - migrateSelectedNetwork(IVB, NetworkId.OEBB); - FavoriteStationsProvider.deleteFavoriteStations(this, IVB); - QueryHistoryProvider.deleteQueryHistory(this, IVB); - - // 2018-11-05: migrate NRI to use RT - final String NRI = "NRI"; - migrateSelectedNetwork(NRI, NetworkId.RT); - FavoriteStationsProvider.deleteFavoriteStations(this, NRI); - QueryHistoryProvider.deleteQueryHistory(this, NRI); - - // 2018-12-06: migrate VAGFR to use NVBW - final String VAGFR = "VAGFR"; - migrateSelectedNetwork(VAGFR, NetworkId.NVBW); - FavoriteStationsProvider.migrateFavoriteStations(this, VAGFR, NetworkId.NVBW); - QueryHistoryProvider.migrateQueryHistory(this, VAGFR, NetworkId.NVBW); - // 2020-11-22: delete unused downloaded station databases final FilenameFilter filter = (dir, name) -> name.endsWith(".db") || name.endsWith(".db.meta"); for (final File file : getFilesDir().listFiles(filter)) From 1e3ef244b79c7a734a8e798b08d8cf7d6216b219 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 12 Sep 2022 12:58:54 +0200 Subject: [PATCH 083/218] 12.1.3 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 334861c..6497de6 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120103" + android:versionName="12.1.3"> Date: Mon, 12 Sep 2022 17:44:05 +0200 Subject: [PATCH 084/218] dimens.xml: increase threshold for showing map from 420dp to 486dp --- oeffi/res/{values-w420dp => values-w486dp}/dimens.xml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename oeffi/res/{values-w420dp => values-w486dp}/dimens.xml (100%) diff --git a/oeffi/res/values-w420dp/dimens.xml b/oeffi/res/values-w486dp/dimens.xml similarity index 100% rename from oeffi/res/values-w420dp/dimens.xml rename to oeffi/res/values-w486dp/dimens.xml From 9830d9b5bc14d96f33724acdba4ebe7ba28aba4f Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 24 Oct 2022 15:55:47 +0200 Subject: [PATCH 085/218] build.gradle: update AndroidX Annotation to 1.5.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 9861608..dc11fb5 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -11,7 +11,7 @@ configurations { dependencies { implementation project(':public-transport-enabler') - implementation 'androidx.annotation:annotation:1.4.0' + implementation 'androidx.annotation:annotation:1.5.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' From ff3ae97c01b166a46630687e8e62d59fad0b1195 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 24 Oct 2022 16:01:00 +0200 Subject: [PATCH 086/218] build.gradle: update AndroidX Activity to 1.6.1 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index dc11fb5..b50a999 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -16,7 +16,7 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' implementation 'androidx.core:core:1.9.0' - implementation 'androidx.activity:activity:1.5.1' + implementation 'androidx.activity:activity:1.6.1' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency From d2d4cdb58ddda74ef3f57a09488b3360e2feba50 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 24 Oct 2022 17:28:45 +0200 Subject: [PATCH 087/218] plans-index.txt: sync plans metadata --- oeffi/assets/plans-index.txt | 71 ++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 40 deletions(-) diff --git a/oeffi/assets/plans-index.txt b/oeffi/assets/plans-index.txt index 2c4bf1b..43f896d 100644 --- a/oeffi/assets/plans-index.txt +++ b/oeffi/assets/plans-index.txt @@ -9,7 +9,7 @@ berlin_tram|52.521152,13.412832|2020-04-14|Berlin Tram-Netz|Berliner Verkehrsbet berlin_bus|52.5071378,13.3318680|2019-12-15|Berlin Bus-Netz|Berliner Verkehrsbetriebe||BVG berlin_nacht|52.520134,13.388018|2020-10-31|Berlin Nachtverkehr (geografisch)|Berliner Verkehrsbetriebe||BVG berlin_transitmap|52.520134,13.388018|2018-12-09|New Berlin rapid transit route map|berlintransitmap.de -# berlin_anbindung_ber|52.363127,13.50498|2011-10|Berlin Brandenburg Flughafen Anbindung|Robert Aehnelt, Creative Commons|https://upload.wikimedia.org/wikipedia/commons/d/d3/Anbindung_BER.png +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 potsdam_tag|52.390931,13.067171|2019-12-15|Potsdam Tagesliniennetz|Verkehrsverbund Berlin-Brandenburg||VBB potsdam_nacht|52.390931,13.067171|2019-12-15|Potsdam Nachtliniennetz|Verkehrsverbund Berlin-Brandenburg||VBB @@ -23,6 +23,7 @@ stettin|53.4182413,14.5494069|2019-12-09|Stettin|Zarząd Dróg i Transportu Miej dresden|51.050961,13.733239|2021-01-25|Dresden Liniennetz|Dresdner Verkehrsbetriebe AG dresden_rolli|51.050961,13.733239|2020|Dresden für mobilitätseingeschränkte Personen|Dresdner Verkehrsbetriebe AG dresden_nacht|51.050961,13.733239|2021-01-25|Dresden Nachtverkehr|Verkehrsverbund Oberelbe||VVO +dresden_tarif|51.050961,13.733239|2020-12-13|Dresden Tarifzonen|Verkehrsverbund Oberelbe||VVO chemnitz_tag|50.836227,12.919122|2018-02-26|Chemnitz Netzplan|Chemnitzer Verkehrs-AG chemnitz_nacht|50.836227,12.919122|2017-12-10|Chemnitz Nachtnetz|Chemnitzer Verkehrs-AG sachsen_spnv|50.925093,12.775949|2020-12-13|Sachsen SPNV-Netz @@ -58,15 +59,16 @@ regensburg_nacht|49.011489,12.09971|2018-04-14|Regensburg Nachtbus|Regensburger bremen|53.08319,8.81360|2020-03|Bremen Liniennetz|BSAG bremen_nacht|53.08319,8.81360||Bremen Nachtnetz|BSAG bremen_stadt|53.08319,8.81360|2020-02|Bremen Stadtnetz (geografisch)|BSAG -hamburg_usar|53.552946,10.006782|2020-12-13|Hamburg Schnellbahn/Regional|HVV -hamburg_metrobus_gross|53.552946,10.006782|2020-12-13|Hamburg MetroBus Großbereich|HVV -hamburg_region|53.552946,10.006782|2019-12-15|Hamburg Regionalverkehr|HVV +hamburg_usar|53.552946,10.006782|2022-01-01|Hamburg Schnellbahn/Regional|HVV +hamburg_metrobus_gross|53.552946,10.006782|2021-12-12|Hamburg MetroBus Liniennetz|HVV +hamburg_region|53.552946,10.006782|2022-01-01|Hamburg Regionalverkehr|HVV +hamburg_weiss_bus|53.552946,10.006782|2021-12-12|Hamburg Busliniennetz|Lucas Weiss kiel_liniennetz|54.313282,10.132341|2019-12|Kiel Liniennetz|KVG kiel_nacht|54.313282,10.132341|2019-12|Kiel Nachtliniennetz|KVG 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|2019-01-07|Rostock Liniennetz|Verkehrsverbund Warnow -rostock_vvw_region|54.078139,12.131724|2019-01-07|Rostock Region|Verkehrsverbund Warnow -rostock_region|54.078139,12.131724|2021-01-04|Rostock und Umgebung|Lucas Weiss, CC-BY-NC-SA 4.0 +rostock_vvw_liniennetz|54.078139,12.131724|2022-08-05|Rostock Liniennetz|Verkehrsverbund Warnow +rostock_vvw_region|54.078139,12.131724|2022-01-01|Rostock Region|Verkehrsverbund Warnow +rostock_region|54.078139,12.131724|2022-08-15|Rostock und Umgebung|Lucas Weiss, CC-BY-NC-SA 4.0 wismar|53.903943,11.391928||Wismar Stadtverkehr|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 @@ -74,9 +76,9 @@ osnabrueck_nacht|52.272832,8.061726|2018-08-09|Osnabrück NachtBus-Netz|Stadtwer stuttgart_verbund|48.784068,9.181713|2018-12|Stuttgart Verbund-Liniennetz|Verkehrs- und Tarifverbund Stuttgart GmbH stuttgart_nacht|48.77861,9.179803|2018-12|Stuttgart Nachtverkehr|Verkehrs- und Tarifverbund Stuttgart GmbH ringzug|48.113621,8.660603|2013-08|Ringzug|Zweckverband Ringzug -hannover_stadtbahn|52.376715,9.741168|2018-12|Hannover Stadtbahnnetz|GVH -hannover_bus|52.376715,9.741168|2018-12|Hannover Busnetz|GVH -hannover_regional|52.376715,9.741168|2018-12|Hannover Regional- und S-Bahn-Linien|GVH +hannover_stadtbahn|52.376715,9.741168|2021-12|Hannover Stadtbahnnetz|GVH +hannover_bus|52.376715,9.741168|2021-12|Hannover Busnetz|GVH +hannover_regional|52.376715,9.741168|2021-12|Hannover Regional- und S-Bahn-Linien|GVH celle_stadt|52.620411,10.059814|2019-01|Celle Liniennetz Stadt|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 @@ -104,29 +106,33 @@ leverkusen_bus|51.036197,6.994385|2019-12-15|Leverkusen Busnetz|Verkehrsverbund 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_region|50.768399,6.090705|2018-12|Aachen Region, Bus und Bahn|Aachener Verkehrsverbund GmbH||AVV_AACHEN -darmstadt|49.872582,8.630916|2020-12-13|Darmstadt Stadt|Darmstadt-Dieburger Nahverkehrsorganisation -darmstadt_nacht|49.872582,8.630916|2020-12-13|Darmstadt NightLiner|Darmstadt-Dieburger Nahverkehrsorganisation -darmstadt_region|49.872582,8.630916|2020-12-13|Darmstadt-Dieburg Region|Darmstadt-Dieburger Nahverkehrsorganisation +darmstadt|49.872582,8.630916|2021-12-12|Darmstadt Stadt|Darmstadt-Dieburger Nahverkehrsorganisation +darmstadt_nacht|49.872582,8.630916|2021-12-12|Darmstadt NightLiner|Darmstadt-Dieburger Nahverkehrsorganisation +darmstadt_region|49.872582,8.630916|2021-12-12|Darmstadt-Dieburg Region|Darmstadt-Dieburger Nahverkehrsorganisation duesseldorf|51.230794,6.769025|2018-08-29|Düsseldorf Liniennetz|Rheinbahn duesseldorf_nacht|51.230794,6.769025|2018-08-29|Düsseldorf Nachtlinien|Rheinbahn duisburg|51.428813,6.772554|2018-03-01|Duisburg Liniennetz|DVG/VRR schwerin|53.634476,11.407313|2018-07|Schwerin Liniennetz|Nahverkehr Schwerin GmbH -magdeburg_tag|52.130783,11.627347|2018-12-03|Magdeburg Liniennetz|Magdeburger Regionalverkehrsverbund -magdeburg_nacht|52.130783,11.627347|2018-12-03|Magdeburg Nacht-Liniennetz|Magdeburger Regionalverkehrsverbund -magdeburg_verbund|52.130783,11.627347|2018-12|Magdeburg Verbund-Liniennetz|Magdeburger Regionalverkehrsverbund -hagen|51.362675,7.461087|2019-12-15|Hagen Liniennetz|Hagener Straßenbahn AG -braunschweig_gesamt|52.252187,10.539705|2019-10-03|Braunschweig Liniennetz|Braunschweiger Verkehrs-GmbH -braunschweig_nacht|52.252187,10.539705|2019-10-03|Braunschweig Nachtnetz|Braunschweiger Verkehrs-GmbH +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_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_nacht|51.362675,7.461087|2022-06-12|Hagen Nachtnetz|Hagener Straßenbahn AG +braunschweig_gesamt|52.252187,10.539705|2021-04-11|Braunschweig Liniennetz|Braunschweiger Verkehrs-GmbH +braunschweig_nacht|52.252187,10.539705|2021-04-11|Braunschweig Nachtnetz|Braunschweiger Verkehrs-GmbH salzgitter|52.15116,10.332488|2017-12|Salzgitter Liniennetz|KVG Braunschweig -wolfenbuettel|52.15898,10.532012|2018-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 harz|51.888518,10.554843|2018-06|Harz Liniennetz|KVG Braunschweig wolfsburg|52.429484,10.788249|2018-08-09|Wolfsburg Liniennetz|WVG -karlsruhe_liniennetz|48.993988,8.400328|2020-12-13|Karlsruhe Liniennetz|Karlsruher Verkehrsverbund||KVV -karlsruhe_rolli|48.993988,8.400328|2020-12-18|Karlsruhe für mobilitätseingeschränkte Personen|Karlsruher Verkehrsverbund||KVV +karlsruhe_liniennetz|48.993988,8.400328|2021-12-12|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_regio|48.993988,8.400328|2020-12-13|Karlsruhe Regionalverkehr|Karlsruher Verkehrsverbund||KVV -karlsruhe_bus|49.009498,8.404073|2020-12-13|Karlsruhe Busnetz|Karlsruher Verkehrsverbund||KVV +karlsruhe_bus|49.009498,8.404073|2021-12-12|Karlsruhe Busnetz|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 +rastatt_busnetz|48.86065,8.21525|2021-02-18|Karlsruhe (Südlicher Landkreis) und Rastatt (Nördlicher Landkreis) Busnetz|Karlsruher Verkehrsverbund||KVV +bruchsal_busnetz|49.12428,8.59017|2021-02-18|Bruchsal (Nördlicher Landkreis) Busnetz|Karlsruher Verkehrsverbund||KVV freiburg_liniennetz|47.996556,7.840286|2019-11|Freiburg Liniennetz|Freiburger Verkehrs AG||VAGFR freiburg_nacht|47.996556,7.840286|2019-11|Freiburg Nachtbus|Freiburger Verkehrs AG||VAGFR freiburg_regio|47.996556,7.840286|2019-03|Freiburg Regio|RVF @@ -144,7 +150,7 @@ rhein_neckar_regio|49.481844,8.459115|2019-11|Rhein-Neckar Regionalverkehr|RNV G linz|48.290893,14.291965|2018-10|Linz Verkehrslinienplan|Linz AG linz_nacht|48.290893,14.291965|2016-12|Linz Nachtverkehr|Linz AG -innsbruck_liniennetz|47.26332,11.400951|2018|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 graz|47.073371,15.416154|2018-09-08|Graz Liniennetz|Verbund Linie graz_nightline|47.073371,15.416154|2018-09-08|Graz Nightline|Verbund Linie @@ -188,7 +194,7 @@ amsterdam_centre|52.378861,4.900392||Amsterdam City Centre (geographical)|GVB copenhagen_city|55.672717,12.562532||Copenhagen City|DOT copenhagen_region|55.672717,12.562532||Copenhagen Greater Area|DOT copenhagen_night|55.672717,12.562532|2015-02|Copenhagen Night Bus|DOT -aarhus_dag|56.149808,10.204283|2020-12-13|Aarhus Dag|Damian Leonhardt +aarhus_dag|56.149808,10.204283|2022-06-26|Aarhus Dag|Damian Leonhardt # se @@ -196,10 +202,6 @@ gothenburg_tram|57.708792,11.973538|2015-12-13|Göteborg Tram and Trunk Bus|väs gothenburg_commuter|57.708792,11.973538|2016-08-21|Göteborg Express Buses and Commuter Trains|västtrafik gothenburg_ferry|57.708792,11.973538|2015-12-13|Göteborg Tram and Ferry|västtrafik gothenburg_region|57.708792,11.973538|2016-01-03|Göteborg Region|västtågen -jonkoping_bus|57.784691,14.163508||Jonkoping Bus||http://transportmaps.free.fr/maps/Sweden/Jonkoping/map_Bus_Lines.jpg -jonkoping_map|57.784691,14.163508||Jonkoping Map (geographical)||http://transportmaps.free.fr/maps/Sweden/Jonkoping/map_Bus_Map.jpg -linkoping_bus|58.416129,15.626714|2009-06-14|Linkoping Bus||http://transportmaps.free.fr/maps/Sweden/Linkoping/map_Bus.jpg -stockholm_train|59.329875,18.057218||Stockholm Train|Storstockholms Lokaltrafik|http://transportmaps.free.fr/maps/Sweden/Stockholm/map_All_Trains.jpg # no @@ -230,13 +232,7 @@ london_night|51.513507,-0.110264|2016|London Night Bus|TfL london_tram|51.37937,-0.101759|2016-01|London Trams|TfL manchester_tram|53.479754,-2.24272|2019|Manchester Tram network|Transport for Greater Manchester|https://images.ctfassets.net/nv7y93idf4jq/ZQ9ZsaDtyEoUMiwISqm4c/97b5a9cf4c29b171aaa1b50424a2efba/Metrolink-Map-2019.jpg menchester_train|53.479754,-2.24272|2018-11|Manchester Train network|Transport for Greater Manchester|https://images.ctfassets.net/nv7y93idf4jq/6cNIqEFra0ke8YMqAkq6Cq/22e8549c97ff4fb852713be3699145e1/Combined_Rail_Metrolink_network_map_v17__free_bus_.jpg -bath_bus|51.377628,-2.357004||Bath Bus Network|FWT|http://transportmaps.free.fr/maps/United_Kingdom/Bath/map_Bus_Network.jpg -bath_bus_city_center|51.377628,-2.357004||Bath Bus City Zone 1|FWT|http://transportmaps.free.fr/maps/United_Kingdom/Bath/map_City_Center_Bus.jpg -leeds_bus|53.795649,-1.548003||Leeds Bus Network|FWT|http://transportmaps.free.fr/maps/United_Kingdom/Leeds/map_Bus.jpg newcastle_metro|54.972793,-1.604741||Newcastle Metro|Nexus -nottingham_bus_city_center|52.947042,-1.146276||Nottingham City Centre Bus/Tram|FWT|http://transportmaps.free.fr/maps/United_Kingdom/Nottingham/map_Bus_NCTX_Inner_City_Map.jpg -nottingham_bus_greater_area|52.947042,-1.146276||Nottingham Greater Area Bus||http://transportmaps.free.fr/maps/United_Kingdom/Nottingham/map_Greater_Nottingham_Buses.jpg -york|53.957911,-1.093061||York Bus||http://transportmaps.free.fr/maps/United_Kingdom/York/map_Bus.jpg westmidlands_rail|52.477785,-1.898184||West Midlands Rail Network| # it @@ -253,12 +249,7 @@ paris_metro|48.855414,2.34488|2012-12|Paris Metro|Nathan Kaufmann, Creative Comm # po -gdansk_tram|54.355338,18.644478|2008|Gdansk Tram|ZKM|http://transportmaps.free.fr/maps/Poland/Gdansk/map_Tram.jpg -krakow_tram|50.065365,19.947124|2010-03-01|Krakow Tram|KST|http://transportmaps.free.fr/maps/Poland/Krakow/map_Tram.jpg -poznan_tram|52.40144,16.91215||Poznan Tram|MPK|http://transportmaps.free.fr/maps/Poland/Poznan/map_Trams.jpg -poznan_night|52.40144,16.91215||Poznan Night Buses|MPK|http://transportmaps.free.fr/maps/Poland/Poznan/map_Night_Buses.jpg warsaw_rail|52.230515,21.010702|2011-12-01|Warsaw Rail Transport|ztm|https://www.ztm.waw.pl/mapa/duze/tramwaje.gif -warsaw_metro_tram|52.230515,21.010702||Warsaw Metro and Tram|zajcev|http://transportmaps.free.fr/maps/Poland/Warsaw/map_Subway_and_Tramway.jpg # cz From dc36ffe0a0ad8b114fe0d537a86c481a8c4a1c29 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 24 Oct 2022 17:29:04 +0200 Subject: [PATCH 088/218] 12.1.4 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 6497de6..9c71892 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120104" + android:versionName="12.1.4"> Date: Mon, 24 Oct 2022 18:52:36 +0200 Subject: [PATCH 089/218] strings.xml: update year of copyright --- oeffi/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/res/values/strings.xml b/oeffi/res/values/strings.xml index 3be80cc..164a1f5 100644 --- a/oeffi/res/values/strings.xml +++ b/oeffi/res/values/strings.xml @@ -46,7 +46,7 @@ About Offi Copyright - © 2010-2021, the Öffi developers + © 2010-2022, the Öffi developers License Privacy Policy https://oeffi.schildbach.de/privacy_policy.txt From 3ab7d4865925b3b28da5567adc9f2458185c2bb4 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 18 Dec 2022 18:32:25 +0100 Subject: [PATCH 090/218] build.gradle: update osmdroid to 6.1.14 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index b50a999..fbae269 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -22,7 +22,7 @@ dependencies { //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' implementation 'com.google.guava:guava:31.1-android' - implementation 'org.osmdroid:osmdroid-android:6.1.11' + implementation 'org.osmdroid:osmdroid-android:6.1.14' implementation 'org.slf4j:slf4j-api:1.7.36' implementation 'com.github.tony19:logback-android:2.0.0' testImplementation 'junit:junit:4.13.2' From fe6fe32d936eeb795d532530be39c9443b0acc51 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 18 Dec 2022 18:34:16 +0100 Subject: [PATCH 091/218] build.gradle: update logback-android to 2.0.1 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index fbae269..85d22b2 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'com.google.guava:guava:31.1-android' implementation 'org.osmdroid:osmdroid-android:6.1.14' implementation 'org.slf4j:slf4j-api:1.7.36' - implementation 'com.github.tony19:logback-android:2.0.0' + implementation 'com.github.tony19:logback-android:2.0.1' testImplementation 'junit:junit:4.13.2' } From e9aa9419a32c589ee4b6d4febf4843763d52524c Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 18 Dec 2022 18:35:46 +0100 Subject: [PATCH 092/218] 12.1.5 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 9c71892..cc4111c 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120105" + android:versionName="12.1.5"> Date: Sun, 1 Jan 2023 15:25:10 +0100 Subject: [PATCH 093/218] strings.xml: update year of copyright --- oeffi/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/res/values/strings.xml b/oeffi/res/values/strings.xml index 164a1f5..f74e815 100644 --- a/oeffi/res/values/strings.xml +++ b/oeffi/res/values/strings.xml @@ -46,7 +46,7 @@ About Offi Copyright - © 2010-2022, the Öffi developers + © 2010-2023, the Öffi developers License Privacy Policy https://oeffi.schildbach.de/privacy_policy.txt From d1c9c5d06c8d64db0ab5b08318c429f13172e3a9 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 2 Jan 2023 13:37:27 +0100 Subject: [PATCH 094/218] NetworkProviderFactory: update user agent --- .../src/de/schildbach/oeffi/network/NetworkProviderFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index d7becb4..ca22d31 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -84,7 +84,7 @@ import java.util.Map; public final class NetworkProviderFactory { private static Map providerCache = new HashMap<>(); - private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"; + 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 NAVITIA_AUTHORIZATION = "577e5781-23ee-4ff0-a5b3-92e5b04887e5"; // oeffi@schildbach.de public static synchronized NetworkProvider provider(final NetworkId networkId) { From 337e21ea2b38942d3b67229915fcd24d200aa6d1 Mon Sep 17 00:00:00 2001 From: Michael Dyrna Date: Mon, 2 Jan 2023 17:05:28 +0100 Subject: [PATCH 095/218] adapt to: VRS: support new endpoint with client certificate --- .../de/schildbach/oeffi/network/NetworkProviderFactory.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index ca22d31..75dd379 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -18,6 +18,7 @@ package de.schildbach.oeffi.network; import com.google.common.base.Charsets; +import com.google.common.io.BaseEncoding; import de.schildbach.pte.AbstractNetworkProvider; import de.schildbach.pte.AvvAachenProvider; import de.schildbach.pte.AvvProvider; @@ -83,9 +84,11 @@ import java.util.Map; public final class NetworkProviderFactory { private static Map providerCache = new HashMap<>(); + 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 NAVITIA_AUTHORIZATION = "577e5781-23ee-4ff0-a5b3-92e5b04887e5"; // oeffi@schildbach.de + private static final byte[] VRS_CLIENT_CERTIFICATE = BASE64.decode("MIILOQIBAzCCCv8GCSqGSIb3DQEHAaCCCvAEggrsMIIK6DCCBZ8GCSqGSIb3DQEHBqCCBZAwggWMAgEAMIIFhQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQITP1aoTF3ISwCAggAgIIFWBba5Nms7ssWBgCkVFboVo4EQSGNe6GvJLvlAIAPGBieMyQOeJJwDJgl422+dzIAr+wxYNTgXMBMf7ZwPpVLUyCECGcePHfbLKyAK5CqvP+zYdGYc8oHF5JcukK2wm0oCxt4sRvPKAimFjU1NWFVzX8HY8dTYia59nOF1dk7LmfA5wI8Jr2YURB71lycHLvm4KbBl23AZmEgaAGWPcHhzPFfslo8arlixKGJqc02Tq9gA0+ZY/nkvNtl7fEbVJkHXF7QP7D5O7N5T6D2THyad9rqVdS499VwQ16b5lBTgV5vWD5Ctf5riuewc4aUziGLnukBrHgWOHK8TfsAhtTOrUerAFLNVB2jF6nBKbgywBXKYOBDhKX3MdVmt3srkq0/Ta2+bxUHfwRt17EQKFzboiNuraALs2jXrbSHvuO+pV2yj0WP/sX8d6KXf3XMFejynv7Os7sD0mQTcllsN9bf2oGVUnSaHT97RAekYxaF7LX+q94rhXmhpFPH/ILQEt92lF+nk+XlmhlGT9SUhwUJ6AKysFRY7si/ofE+8V4ZFHDnyjoUNDhOUYC/Z4I7YpozuPECPKNReTbPdHXqlBIiEx243gutskl8duiGYEv7TzraAq0Nag6Xk8YcXoyMXGC8wrecU7Uts9Tm2OBErAqxvFWXL9eN/EsYV8SB745tmU+T4EqJDDZQZnRAerg7Ms4iSKSbPNj/OtwpIptv43NWAtyzEEc6NxwwQTIJZL0v9jwB0mUY7TgM4a+VwMTBHcBNZH5+x8dpwh1H8MYh91UaBOidbc2PJeLtT4pIxYlcyYGl9LJa68WgzBkc7uJmETNOfKfdJEazLvH/jIRsLBwzPj/pbJDPER82wC8l5mmbOyNa/vgjsSAvm2uYDsV1fo8xdik3q/SFRHseIf2vQtybDXrytafUb9D6/0puTycMo5IfXegHvuwIJVhYFcqoCDX8VkkebHHWdWelr7yPealzjksddiJ9a4mksc4js3g7if5cQwYkfiVNE2FQukkjJx1xhgRCsnTRv1K0n0t1g4D5CD4oYjTBiYzgF/t2CqH85wNAVKnJmKNyt0Weqcf6GQwu0oVC+9IqSAiy07KvEbLxjjqcBarQjGKPSLmJeQ0x9X+9KIaEKG3gdN5l8ptlfHhML2wZsn0cTCBU1otOdLcu4QmBGf6DSTSCXcH4GGvlWdxjxdQ7Docmdp3hQBh8wY7jRST+YWcp5zQWkOpClFjKIKx2s+0sG7XM+LNPr2zSJZTyLcPlqdc9aam9LL3nf3CUtUNVrDaiyfTYhgpBHkwc+4P8MIsaZy8gowfBhovsYvfE5aFzF3rfLf30r31/ju/jkcfnWW995X+AJb8pcQuC6R7xJ82lZyPRpyfs96eCmizjIcAcL6Wz+SQEsUE3zNuH/ctpqhD5gCKXhJTj6sXjdiGNkYqPyxKX3blw8fdh+nIe3kBdC9deaw4S+5QYNKPSmdmQAAaOxOyzLi+DKgR9bV6SzWUAO/kWCdRaCdCDy9WS+6CQ2AVsQOSYv1vBMWkZ0u5/EHqPsb6y1wtXvE0/s7T4KZi7taP/72dDclPgNHsWCW5HbSaeyx83efu3fpX7i8tsWmr+QeeRuLGJ5z0NOBKasIKhCe3XPWZGNzKNca0WJk7UWepYFfiPv57tFj6Y0zautFHFNRgP+iu0hX7nNNn0AVXjuFFiZ/fwhjFmXExSYG9xSzcR5aJha0GEJ+MQbIZD7/Ay8GRmPFrrN8x40svTfiWu71qpxqsfco+2sKhJtBxJoO/cnjRz5PrtCdnqi4dYHtvOAyjaaF/3hQvDyiEoiDuxTPIVyjCCBUEGCSqGSIb3DQEHAaCCBTIEggUuMIIFKjCCBSYGCyqGSIb3DQEMCgECoIIE7jCCBOowHAYKKoZIhvcNAQwBAzAOBAg71M5exZmMVQICCAAEggTIohxJ2uLoi9RYzxe7t0XOHkTBSI+/Rn3oQNecNuMe/YNpMMsRCQjSOJToWHGayBQJmwSkMd3NP4QnDfqWFIxHbgnfj3FLTIyfkDIObzpfHwLCOrYHQxK9Zr4t/0SfEy/34uH40ZEiPe7Mnn/iTTZy37ecZgLsvlr6wp5Gao3oBjhKZlxJM043Hy9Dk1vtRCRIFCFbdGXtcLnuVKASc+GVw6QJKoXLerImV0U5Pg6khh0huTALEULuvq5cEIlKBNqyZ37cfb3Cvf9mWSTferBcUymGyHtdh+mHtVPb3ZycprtFmKcGMR9bXK0FJ63fERmXRHBN1ZKVC0beWVgcGybDQKdx9Y26UQLtO3xdZK0Eb3Kn8jVJG3sEJi2u3CLS4wD533+jj+b1uuL8Uj/aZy2UvrbIez48JStZgBGg+IhLK5keW7KV1lHiOVwZuWERpxzbNx7jaZRWIUCwN+aMJts1d5aY+wYvlJ9uk2lQc8qpIDIHHXHvyUEnk7jxw88gQjNgo1lvUHewiQk6VBwXX7EII0kLxdNfEpBT9RAdqURqy8dpoQemoc2zwce0e14G+IElJ1ES1j2jMYkYuggjpfUJBc34QrQI2a7UQwloUMwkdoi9nwgnpeL5G3Jyvgfxxf+D9xSXh8auH5IsdO0/enDGo/Xo+ygQ3tgY3dGI02frzRF24i4hFp/FAdbLjytjgCF0KIEXbJylEweZX2g61jL/fJVowJIA3wXDSuIBq9YRdpEA2OhgCdpwcz69W9T5lVfuJBgKOKcFKSQgDm0sEEkcUV9WR4CWfC9lZ+haHvNcrJBsRkHg6KKsV8PwwbUs2WeXl3NvGnJ/kSQbqJOLfURPziY9w4phupuSTAqmQIc0D4MSZLEjDcXKjg3ifFi4NlGLy+iyzGBoC1YZk1OOlO3uhKxxSD8FG6ncRGHEr8OU+2Yj/qubqZMpckPLXPdWbZB24bQxPTKGeQjFGlgt95H3/aRK9FzmBLc1FOe4qnT9chzbewsAnuho+F7Rqe36hPCZHlIrND0RCOdTAw7buJg6yPIbpDA41SpvS1F/BdFuDepf4yd0NWt4N46zUHmpxavv+2zmDiAUG95ZQ7AmkAA39tc+XtQv3IhLK6Wa7joM61jtau34td3vi1RvN2fPY2jQqOvKA2/hTVw5SzWCI0Tl7le6+ol1/QeUJfpjBZl6Ai+ydgVycSXuyq+MXB/UUEWo8RmlX8R9+y2KtCGV0TQjfX/um1D77LzurRO430m2pggcxmdCiFyl4CRp+rXhw7W6nGwLqZfD2msKthh+tn2QxoNII1oGHHsF7fxE/E4wm54IGtqfLM5pV/5hrqgVfTetABMLFEbtIHrxEDms80SyvsP2/JgelFFrs90wZr9QkLVBBQtZpwmLu39u24HlGXhZflXX0fmlHT2vN1e/EH43Nl/iPgZPYTj6fGGJFdaKNm0QlLym2M0btN3MNMXHETUoLDOg17AomH3NRvSIARu92qa48rX+SeCdF0NJ3VmA2I3Fl4A47epkmMcCzF078UVPC2eQ9M2NtxIAsqQnfIFfxirTuSCdeVS06n8KbMi7PG4Luc7IUPr4W3SQ9mY8XjFgRjVl86QpExzE6P5WZ/RDrgaypcDED6BvMSUwIwYJKoZIhvcNAQkVMRYEFKkQDH5bs77hmpmQ899BQPMX5lIDMDEwITAJBgUrDgMCGgUABBSqWv+fwvAy3ohpbmU2hfBpJbEejAQIPczIVgsfvYECAggA"); public static synchronized NetworkProvider provider(final NetworkId networkId) { final NetworkProvider cachedNetworkProvider = providerCache.get(networkId); @@ -146,7 +149,7 @@ public final class NetworkProviderFactory { else if (networkId.equals(NetworkId.VRR)) return new VrrProvider(); else if (networkId.equals(NetworkId.VRS)) - return new VrsProvider(); + return new VrsProvider(VRS_CLIENT_CERTIFICATE); else if (networkId.equals(NetworkId.AVV_AACHEN)) return new AvvAachenProvider("{\"id\":\"AVV_AACHEN\",\"l\":\"vs_oeffi\",\"type\":\"WEB\"}", "{\"type\":\"AID\",\"aid\":\"4vV1AcH3N511icH\"}"); From e9d10f62b77071045c761abcb58d6ded686c93c8 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 2 Jan 2023 17:37:05 +0100 Subject: [PATCH 096/218] 12.1.6 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index cc4111c..868adca 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120106" + android:versionName="12.1.6"> Date: Mon, 2 Jan 2023 17:58:11 +0100 Subject: [PATCH 097/218] .gitlab-ci.yml: downgrade build to Debian bullseye-backports Debian bookworm doesn't seem to carry Java 11 any more. --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index edacf11..7cbfaed 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -14,7 +14,7 @@ before_script: build: parallel: matrix: - - DOCKER_IMAGE: [ ubuntu:jammy, debian:bookworm-slim ] + - DOCKER_IMAGE: [ ubuntu:jammy, debian:bullseye-backports ] JDK_PACKAGE: [ openjdk-11-jdk-headless ] script: - gradle build --stacktrace From 6696c8f293dd5c268775ae1c80eee0a3f0e84e86 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 9 Jan 2023 18:26:39 +0100 Subject: [PATCH 098/218] NetworkProviderFactory: migrate custom API base for VVO to HTTPS --- oeffi/res/xml/network_security_config.xml | 1 - .../src/de/schildbach/oeffi/network/NetworkProviderFactory.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/oeffi/res/xml/network_security_config.xml b/oeffi/res/xml/network_security_config.xml index fcaaaa5..c3d91c4 100644 --- a/oeffi/res/xml/network_security_config.xml +++ b/oeffi/res/xml/network_security_config.xml @@ -16,7 +16,6 @@ appefa10.verbundlinie.at railteam.hafas.eu mobil.vbl.ch - efa.vvo-online.de diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 75dd379..9c06713 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -143,7 +143,7 @@ public final class NetworkProviderFactory { else if (networkId.equals(NetworkId.VMT)) return new VmtProvider("{\"aid\":\"vj5d7i3g9m5d7e3\",\"type\":\"AID\"}"); else if (networkId.equals(NetworkId.VVO)) - return new VvoProvider(); + return new VvoProvider(HttpUrl.parse("https://efa.vvo-online.de/Oeffi/")); else if (networkId.equals(NetworkId.VMS)) return new VmsProvider(HttpUrl.parse("https://efa.vms.de/Oeffi/")); else if (networkId.equals(NetworkId.VRR)) From b10f240ea5824d5edc1dbaea58828baf18fb630d Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 9 Jan 2023 18:37:25 +0100 Subject: [PATCH 099/218] networks.txt: merge VMS into VVO --- oeffi/assets/networks.txt | 3 +-- .../res/drawable-anydpi/network_vms_logo.xml | 25 ------------------- oeffi/res/values-de/networks.xml | 4 +-- oeffi/res/values/networks.xml | 4 +-- .../src/de/schildbach/oeffi/Application.java | 6 +++++ .../oeffi/network/NetworkProviderFactory.java | 3 --- 6 files changed, 9 insertions(+), 36 deletions(-) delete mode 100644 oeffi/res/drawable-anydpi/network_vms_logo.xml diff --git a/oeffi/assets/networks.txt b/oeffi/assets/networks.txt index 4d55956..0294826 100644 --- a/oeffi/assets/networks.txt +++ b/oeffi/assets/networks.txt @@ -19,8 +19,7 @@ SH|de-DE|Schleswig-Holstein;Kiel;Lübeck;Hamburg GVH|de-DE|Niedersachsen;Hannover;Hamburg BSVAG|de-DE|Braunschweig;Wolfsburg VBN|de-DE|Niedersachsen;Hamburg;Bremen;Bremerhaven;Oldenburg (Oldenburg);Osnabrück;Göttingen;Rostock -VVO|de-DE|Sachsen;Dresden -VMS|de-DE|Mittelsachsen;Chemnitz +VVO|de-DE|Sachsen;Dresden;Mittelsachsen;Chemnitz NASA|de-DE|Sachsen;Leipzig;Sachsen-Anhalt;Magdeburg;Halle VMT|de-DE|Thüringen;Mittelthüringen;Erfurt;Jena;Gera;Weimar;Gotha VRR|de-DE|Nordrhein-Westfalen;Essen;Dortmund;Düsseldorf;Münster;Paderborn;Höxter;Bielefeld diff --git a/oeffi/res/drawable-anydpi/network_vms_logo.xml b/oeffi/res/drawable-anydpi/network_vms_logo.xml deleted file mode 100644 index 6f4e46d..0000000 --- a/oeffi/res/drawable-anydpi/network_vms_logo.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - diff --git a/oeffi/res/values-de/networks.xml b/oeffi/res/values-de/networks.xml index 42c4501..e792b42 100644 --- a/oeffi/res/values-de/networks.xml +++ b/oeffi/res/values-de/networks.xml @@ -40,9 +40,7 @@ Erfurt, Jena & Mittelthüringen Lokal- und Regionalverkehr Verkehrsverbund Oberelbe - Dresden, Lokal- und Regionalverkehr - Verkehrsverbund Mittelsachsen - Chemnitz & Mittelsachsen, Lokal- und Regionalverkehr + Dresden, Chemnitz & Mittelsachsen, Lokal- und Regionalverkehr Verkehrsverbund Rhein-Ruhr Nordrhein-Westfalen, Düsseldorf & Dortmund, Lokal- und Regionalverkehr Köln & Bonn diff --git a/oeffi/res/values/networks.xml b/oeffi/res/values/networks.xml index 41aa840..246d357 100644 --- a/oeffi/res/values/networks.xml +++ b/oeffi/res/values/networks.xml @@ -39,9 +39,7 @@ Erfurt, Jena & Central Thuringia local and regional Verkehrsverbund Oberelbe - Dresden, local and regional - Verkehrsverbund Mittelsachsen - Chemnitz & Mittelsachsen, local and regional + Dresden, Chemnitz & Mittelsachsen, local and regional Verkehrsverbund Rhein-Ruhr North Rhine-Westphalia, Düsseldorf & Dortmund, local and regional Cologne & Bonn diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index deb59df..b3e3796 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -103,6 +103,12 @@ public class Application extends android.app.Application { FavoriteStationsProvider.deleteFavoriteStations(this, PL); QueryHistoryProvider.deleteQueryHistory(this, PL); + // 2023-01-09: migrate VMS to use VVO + final String VMS = "VMS"; + migrateSelectedNetwork(VMS, NetworkId.VVO); + FavoriteStationsProvider.migrateFavoriteStations(this, VMS, NetworkId.VVO); + QueryHistoryProvider.migrateQueryHistory(this, VMS, NetworkId.VVO); + log.info("Migrations took {}", watch); } diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 9c06713..01242ba 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -65,7 +65,6 @@ import de.schildbach.pte.VbbProvider; import de.schildbach.pte.VblProvider; import de.schildbach.pte.VbnProvider; import de.schildbach.pte.VgnProvider; -import de.schildbach.pte.VmsProvider; import de.schildbach.pte.VmtProvider; import de.schildbach.pte.VmvProvider; import de.schildbach.pte.VrnProvider; @@ -144,8 +143,6 @@ public final class NetworkProviderFactory { return new VmtProvider("{\"aid\":\"vj5d7i3g9m5d7e3\",\"type\":\"AID\"}"); else if (networkId.equals(NetworkId.VVO)) return new VvoProvider(HttpUrl.parse("https://efa.vvo-online.de/Oeffi/")); - else if (networkId.equals(NetworkId.VMS)) - return new VmsProvider(HttpUrl.parse("https://efa.vms.de/Oeffi/")); else if (networkId.equals(NetworkId.VRR)) return new VrrProvider(); else if (networkId.equals(NetworkId.VRS)) From 696746c89409fbd17430b07906a03c6e3a7ce0a1 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 9 Jan 2023 19:07:06 +0100 Subject: [PATCH 100/218] 12.1.7 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 868adca..9148d73 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -19,8 +19,8 @@ + android:versionCode="120107" + android:versionName="12.1.7"> Date: Wed, 11 Jan 2023 15:32:26 +0100 Subject: [PATCH 101/218] networks.xml: relabel Verkehrsverbund Oberelbe to Saxony --- oeffi/res/values-de/networks.xml | 4 ++-- oeffi/res/values/networks.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/res/values-de/networks.xml b/oeffi/res/values-de/networks.xml index e792b42..16f6bc2 100644 --- a/oeffi/res/values-de/networks.xml +++ b/oeffi/res/values-de/networks.xml @@ -39,8 +39,8 @@ Lokal- und Regionalverkehr Erfurt, Jena & Mittelthüringen Lokal- und Regionalverkehr - Verkehrsverbund Oberelbe - Dresden, Chemnitz & Mittelsachsen, Lokal- und Regionalverkehr + Sachsen + Dresden & Chemnitz, Lokal- und Regionalverkehr Verkehrsverbund Rhein-Ruhr Nordrhein-Westfalen, Düsseldorf & Dortmund, Lokal- und Regionalverkehr Köln & Bonn diff --git a/oeffi/res/values/networks.xml b/oeffi/res/values/networks.xml index 246d357..d2b02f6 100644 --- a/oeffi/res/values/networks.xml +++ b/oeffi/res/values/networks.xml @@ -38,8 +38,8 @@ local and regional Erfurt, Jena & Central Thuringia local and regional - Verkehrsverbund Oberelbe - Dresden, Chemnitz & Mittelsachsen, local and regional + Saxony + Dresden & Chemnitz, local and regional Verkehrsverbund Rhein-Ruhr North Rhine-Westphalia, Düsseldorf & Dortmund, local and regional Cologne & Bonn From a9259cfe31c660dddd742b780b61e9961f4d24ca Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 20 Jan 2023 17:10:57 +0100 Subject: [PATCH 102/218] AndroidManifest.xml: get rid of unnecessary nodes merged from libraries --- oeffi/AndroidManifest.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 9148d73..fd5f6d4 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -18,6 +18,7 @@ @@ -357,4 +358,7 @@ android:exported="false" /> + + + From 2dc4cc5e16019d78f1dcd74a0c1aa06e768c9bff Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 20 Jan 2023 17:14:52 +0100 Subject: [PATCH 103/218] 12.1.8 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index fd5f6d4..5cfacf2 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120107" - android:versionName="12.1.7"> + android:versionCode="120108" + android:versionName="12.1.8"> Date: Thu, 2 Feb 2023 18:02:03 +0100 Subject: [PATCH 104/218] network_vvo_logo.xml: remove logo --- .../res/drawable-anydpi/network_vvo_logo.xml | 65 ------------------- 1 file changed, 65 deletions(-) delete mode 100644 oeffi/res/drawable-anydpi/network_vvo_logo.xml diff --git a/oeffi/res/drawable-anydpi/network_vvo_logo.xml b/oeffi/res/drawable-anydpi/network_vvo_logo.xml deleted file mode 100644 index b850b7d..0000000 --- a/oeffi/res/drawable-anydpi/network_vvo_logo.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - From 1098996918a51d5b801186cadd96225f525ac653 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 2 Feb 2023 18:58:03 +0100 Subject: [PATCH 105/218] settings.gradle: declare a maximum Gradle version --- settings.gradle | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/settings.gradle b/settings.gradle index 2ec54c4..eae264c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,10 +2,11 @@ import org.gradle.util.GradleVersion import org.gradle.api.GradleScriptException // required Gradle version -def minGradleVersion = GradleVersion.version("4.4") +def minGradleVersion = GradleVersion.version("4.4") // including +def maxGradleVersion = GradleVersion.version("7.0") // excluding -if (GradleVersion.current() < minGradleVersion) - throw new GradleScriptException("build requires Gradle ${minGradleVersion} or later", null) +if (GradleVersion.current() < minGradleVersion || GradleVersion.current() >= maxGradleVersion) + throw new GradleScriptException("build requires Gradle between ${minGradleVersion.version} (including) and ${maxGradleVersion.version} (excluding)", null) include 'oeffi' include 'public-transport-enabler' From 31a47148d4a9fe48d059c1488f58f760f29c0eaa Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 2 Feb 2023 19:08:54 +0100 Subject: [PATCH 106/218] build.gradle: exclude module `core-ktx` --- oeffi/build.gradle | 1 + oeffi/proguard.cfg | 1 + 2 files changed, 2 insertions(+) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 85d22b2..5a4af95 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -7,6 +7,7 @@ configurations { all*.exclude group: 'org.json', module: 'json' all*.exclude group: 'net.sf.kxml', module: 'kxml2' all*.exclude group: 'androidx.legacy', module: 'legacy-support-core-ui' + all*.exclude group: 'androidx.core', module: 'core-ktx' } dependencies { diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index 2d1732a..236ee08 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -52,6 +52,7 @@ -dontnote androidx.versionedparcelable.VersionedParcel -dontnote kotlin.** -dontnote kotlinx.** +-dontwarn androidx.lifecycle.SavedStateHandle # OkHttp -dontwarn okio.DeflaterSink From b757b94c55e6f2b3c9233df11713797004946e57 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 2 Feb 2023 18:03:34 +0100 Subject: [PATCH 107/218] 12.1.9 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 5cfacf2..3c55827 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120108" - android:versionName="12.1.8"> + android:versionCode="120109" + android:versionName="12.1.9"> Date: Sat, 25 Mar 2023 19:36:58 +0100 Subject: [PATCH 108/218] .gitlab-ci.yml: revise combinations of JDK and OS There are now 4 jobs: * using OpenJDK 11 on Debian Bullseye (our current reference), * using OpenJDK 17 on Debian Bookworm (our future reference), * using OpenJDK 11 on Ubuntu Jammy, and * using OpenJDK 17 on Ubuntu Lunar --- .gitlab-ci.yml | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7cbfaed..26bc698 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,20 +1,41 @@ -image: ${DOCKER_IMAGE} - variables: - GIT_SUBMODULE_STRATEGY: recursive - ANDROID_HOME: $PWD/android-sdk + GIT_SUBMODULE_STRATEGY: recursive + ANDROID_HOME: $PWD/android-sdk before_script: - apt-get update - - apt-get -y upgrade - - apt-get -y install ${JDK_PACKAGE} - - apt-get -y install sdkmanager gradle - - yes | sdkmanager --licenses >/dev/null || true -build: - parallel: - matrix: - - DOCKER_IMAGE: [ ubuntu:jammy, debian:bullseye-backports ] - JDK_PACKAGE: [ openjdk-11-jdk-headless ] +after_script: + - gradle --version + +bullseye-jdk11: + image: debian:bullseye-backports script: + - apt-get -y install openjdk-11-jdk-headless + - apt-get -y install sdkmanager gradle + - yes | sdkmanager --licenses >/dev/null || true + - gradle build --stacktrace + +bookworm-jdk17: + image: debian:bookworm-slim + script: + - apt-get -y install openjdk-17-jdk-headless + - apt-get -y install sdkmanager gradle + - yes | sdkmanager --licenses >/dev/null || true + - gradle build --stacktrace + +jammy-jdk11: + image: ubuntu:jammy + script: + - apt-get -y install openjdk-11-jdk-headless + - apt-get -y install sdkmanager gradle + - yes | sdkmanager --licenses >/dev/null || true + - gradle build --stacktrace + +lunar-jdk17: + image: ubuntu:lunar + script: + - apt-get -y install openjdk-17-jdk-headless + - apt-get -y install sdkmanager gradle + - yes | sdkmanager --licenses >/dev/null || true - gradle build --stacktrace From 271659d914cf21eb5ac1e7c7c94c6e16ca182ae6 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 25 Mar 2023 15:54:16 +0100 Subject: [PATCH 109/218] build.gradle: update SDK Build Tools to 33.0.2 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 5a4af95..cfbb8b3 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -31,7 +31,7 @@ dependencies { android { compileSdkVersion 'android-33' - buildToolsVersion '33.0.0' + buildToolsVersion '33.0.2' defaultConfig { generatedDensities = ['hdpi', 'xhdpi'] From d6b9e00937d615001c6da06f51ae18a6a942ffb7 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 25 Mar 2023 23:30:46 +0100 Subject: [PATCH 110/218] .gitlab-ci.yml: create job artifacts --- .gitlab-ci.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 26bc698..9a66944 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -15,6 +15,10 @@ bullseye-jdk11: - apt-get -y install sdkmanager gradle - yes | sdkmanager --licenses >/dev/null || true - gradle build --stacktrace + artifacts: + name: oeffi-$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA + paths: + - oeffi/build/outputs/apk/**/*.apk bookworm-jdk17: image: debian:bookworm-slim @@ -23,6 +27,10 @@ bookworm-jdk17: - apt-get -y install sdkmanager gradle - yes | sdkmanager --licenses >/dev/null || true - gradle build --stacktrace + artifacts: + name: oeffi-$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA + paths: + - oeffi/build/outputs/apk/**/*.apk jammy-jdk11: image: ubuntu:jammy @@ -31,6 +39,10 @@ jammy-jdk11: - apt-get -y install sdkmanager gradle - yes | sdkmanager --licenses >/dev/null || true - gradle build --stacktrace + 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 @@ -39,3 +51,7 @@ lunar-jdk17: - apt-get -y install sdkmanager gradle - yes | sdkmanager --licenses >/dev/null || true - gradle build --stacktrace + artifacts: + name: oeffi-$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA + paths: + - oeffi/build/outputs/apk/**/*.apk From 8f1c8f19862bc582ceaa50561c15fa06db99cb55 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 25 Mar 2023 16:13:58 +0100 Subject: [PATCH 111/218] build.gradle: update AndroidX RecyclerView to 1.3.0 --- oeffi/build.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index cfbb8b3..5f0c219 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -7,13 +7,12 @@ configurations { all*.exclude group: 'org.json', module: 'json' all*.exclude group: 'net.sf.kxml', module: 'kxml2' all*.exclude group: 'androidx.legacy', module: 'legacy-support-core-ui' - all*.exclude group: 'androidx.core', module: 'core-ktx' } dependencies { implementation project(':public-transport-enabler') implementation 'androidx.annotation:annotation:1.5.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'androidx.recyclerview:recyclerview:1.3.0' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' implementation 'androidx.core:core:1.9.0' From d4f9ab68f1cf3cdfaccf4ff78cb7c888d345558f Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 29 Mar 2023 10:33:22 +0200 Subject: [PATCH 112/218] build.gradle: update AndroidX Activity to 1.7.0 --- oeffi/build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 5f0c219..1f622aa 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -7,6 +7,8 @@ configurations { all*.exclude group: 'org.json', module: 'json' all*.exclude group: 'net.sf.kxml', module: 'kxml2' all*.exclude group: 'androidx.legacy', module: 'legacy-support-core-ui' + all*.exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk7' + all*.exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8' } dependencies { @@ -16,7 +18,7 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.1.1' implementation 'androidx.core:core:1.9.0' - implementation 'androidx.activity:activity:1.6.1' + implementation 'androidx.activity:activity:1.7.0' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency From b919448d01a1e3939a621a66a0a9b2c739e6c6a4 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 29 Mar 2023 10:34:45 +0200 Subject: [PATCH 113/218] build.gradle: update AndroidX DrawerLayout to 1.2.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 1f622aa..2bb80b3 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -16,7 +16,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.5.0' implementation 'androidx.recyclerview:recyclerview:1.3.0' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' - implementation 'androidx.drawerlayout:drawerlayout:1.1.1' + implementation 'androidx.drawerlayout:drawerlayout:1.2.0' implementation 'androidx.core:core:1.9.0' implementation 'androidx.activity:activity:1.7.0' //noinspection GradleDependency From 56bc7f5278a0700f41e637a07261da04312e3cff Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 29 Mar 2023 10:37:50 +0200 Subject: [PATCH 114/218] build.gradle: update logback-android to 3.0.0 --- oeffi/build.gradle | 2 +- oeffi/proguard.cfg | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 2bb80b3..fd99b25 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation 'com.google.guava:guava:31.1-android' implementation 'org.osmdroid:osmdroid-android:6.1.14' implementation 'org.slf4j:slf4j-api:1.7.36' - implementation 'com.github.tony19:logback-android:2.0.1' + implementation 'com.github.tony19:logback-android:3.0.0' testImplementation 'junit:junit:4.13.2' } diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index 236ee08..0c6bf6f 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -79,8 +79,9 @@ -dontnote dalvik.system.CloseGuard # slf4j --dontwarn org.slf4j.MDC --dontwarn org.slf4j.MarkerFactory +-dontwarn org.slf4j.spi.SLF4JServiceProvider +-dontwarn org.slf4j.LoggerFactory +-dontwarn ch.qos.logback.classic.Logger # logback-android -dontwarn javax.mail.** From 75e279bb2071bab718b4e4bfc1375649b5cb6ed9 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 29 Mar 2023 10:38:58 +0200 Subject: [PATCH 115/218] build.gradle: update SLF4J to 2.0.7 --- oeffi/build.gradle | 2 +- oeffi/proguard.cfg | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index fd99b25..47e7cf5 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' implementation 'com.google.guava:guava:31.1-android' implementation 'org.osmdroid:osmdroid-android:6.1.14' - implementation 'org.slf4j:slf4j-api:1.7.36' + implementation 'org.slf4j:slf4j-api:2.0.7' implementation 'com.github.tony19:logback-android:3.0.0' testImplementation 'junit:junit:4.13.2' } diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index 0c6bf6f..1566d6d 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -78,12 +78,8 @@ -dontnote com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper -dontnote dalvik.system.CloseGuard -# slf4j --dontwarn org.slf4j.spi.SLF4JServiceProvider --dontwarn org.slf4j.LoggerFactory --dontwarn ch.qos.logback.classic.Logger - -# logback-android +# SLF4J, logback-android +-keep class org.slf4j.impl.LoggerServiceProvider -dontwarn javax.mail.** -dontnote ch.qos.logback.core.android.AndroidContextUtil From 1ec70d18865dc2ca8072832af03de6142feb04b6 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 25 Mar 2023 16:06:40 +0100 Subject: [PATCH 116/218] Nullable: use annotation from `javax.annotation` --- oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java | 2 +- .../src/de/schildbach/oeffi/directions/DirectionsActivity.java | 2 +- oeffi/src/de/schildbach/oeffi/directions/LocationView.java | 2 +- .../de/schildbach/oeffi/directions/TripsGalleryAdapter.java | 2 +- .../de/schildbach/oeffi/directions/TripsOverviewActivity.java | 2 +- .../directions/list/QueryHistoryContextMenuItemListener.java | 3 ++- oeffi/src/de/schildbach/oeffi/network/NetworkResources.java | 2 +- .../de/schildbach/oeffi/network/list/NetworkViewHolder.java | 3 ++- oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java | 2 +- oeffi/src/de/schildbach/oeffi/plans/PlanContentProvider.java | 2 +- oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java | 2 +- oeffi/src/de/schildbach/oeffi/plans/list/PlanViewHolder.java | 2 +- oeffi/src/de/schildbach/oeffi/plans/list/PlansAdapter.java | 2 +- oeffi/src/de/schildbach/oeffi/preference/AboutFragment.java | 3 ++- oeffi/src/de/schildbach/oeffi/preference/CommonFragment.java | 3 ++- .../src/de/schildbach/oeffi/preference/DirectionsFragment.java | 3 ++- oeffi/src/de/schildbach/oeffi/preference/DonateFragment.java | 3 ++- .../de/schildbach/oeffi/stations/FavoriteStationsActivity.java | 2 +- oeffi/src/de/schildbach/oeffi/stations/Station.java | 2 +- .../de/schildbach/oeffi/stations/StationDetailsActivity.java | 2 +- oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java | 2 +- .../oeffi/stations/list/FavoriteStationsAdapter.java | 3 ++- .../oeffi/stations/list/StationContextMenuItemListener.java | 2 +- .../de/schildbach/oeffi/stations/list/StationViewHolder.java | 2 +- oeffi/src/de/schildbach/oeffi/util/Downloader.java | 2 +- 25 files changed, 32 insertions(+), 25 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java b/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java index 73b32cd..fbab782 100644 --- a/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java +++ b/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java @@ -37,7 +37,6 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import androidx.annotation.Nullable; import androidx.core.view.MenuProvider; import androidx.drawerlayout.widget.DrawerLayout; import androidx.recyclerview.widget.LinearLayoutManager; @@ -72,6 +71,7 @@ import okhttp3.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; diff --git a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java index ea0dbd9..7d1b8a8 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java @@ -61,7 +61,6 @@ import android.widget.TextView; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContract; import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.Nullable; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.content.ContextCompat; import androidx.core.view.ViewCompat; @@ -118,6 +117,7 @@ import org.osmdroid.views.overlay.Overlay; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import javax.net.ssl.SSLException; import java.io.ByteArrayInputStream; import java.io.IOException; diff --git a/oeffi/src/de/schildbach/oeffi/directions/LocationView.java b/oeffi/src/de/schildbach/oeffi/directions/LocationView.java index da74771..7c14a5b 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/LocationView.java +++ b/oeffi/src/de/schildbach/oeffi/directions/LocationView.java @@ -41,7 +41,6 @@ import android.widget.FrameLayout; import android.widget.ListAdapter; import android.widget.PopupMenu; import android.widget.TextView.OnEditorActionListener; -import androidx.annotation.Nullable; import com.google.common.base.Strings; import de.schildbach.oeffi.Constants; import de.schildbach.oeffi.R; @@ -53,6 +52,7 @@ import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.Point; +import javax.annotation.Nullable; import java.util.Locale; public class LocationView extends FrameLayout implements LocationHelper.Callback { diff --git a/oeffi/src/de/schildbach/oeffi/directions/TripsGalleryAdapter.java b/oeffi/src/de/schildbach/oeffi/directions/TripsGalleryAdapter.java index 7d1d88c..01f314e 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/TripsGalleryAdapter.java +++ b/oeffi/src/de/schildbach/oeffi/directions/TripsGalleryAdapter.java @@ -41,7 +41,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.BaseAdapter; -import androidx.annotation.Nullable; import com.google.common.base.Preconditions; import de.schildbach.oeffi.R; import de.schildbach.pte.dto.Line; @@ -53,6 +52,7 @@ import de.schildbach.pte.dto.Trip.Individual; import de.schildbach.pte.dto.Trip.Leg; import de.schildbach.pte.dto.Trip.Public; +import javax.annotation.Nullable; import java.util.Collections; import java.util.Date; import java.util.List; diff --git a/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java b/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java index 59d544f..ad62ea8 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java @@ -31,7 +31,6 @@ import android.text.format.DateUtils; import android.view.View; import android.widget.AdapterView; import android.widget.TextView; -import androidx.annotation.Nullable; import com.google.common.collect.ComparisonChain; import com.google.common.collect.Ordering; import com.google.common.util.concurrent.Uninterruptibles; @@ -54,6 +53,7 @@ import de.schildbach.pte.exception.SessionExpiredException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import javax.net.ssl.SSLException; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/oeffi/src/de/schildbach/oeffi/directions/list/QueryHistoryContextMenuItemListener.java b/oeffi/src/de/schildbach/oeffi/directions/list/QueryHistoryContextMenuItemListener.java index 74d0179..a8a2f54 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/list/QueryHistoryContextMenuItemListener.java +++ b/oeffi/src/de/schildbach/oeffi/directions/list/QueryHistoryContextMenuItemListener.java @@ -17,9 +17,10 @@ package de.schildbach.oeffi.directions.list; -import androidx.annotation.Nullable; import de.schildbach.pte.dto.Location; +import javax.annotation.Nullable; + public interface QueryHistoryContextMenuItemListener { boolean onQueryHistoryContextMenuItemClick(int adapterPosition, Location from, Location to, @Nullable byte[] serializedSavedTrip, int menuItemId, @Nullable Location menuItemLocation); diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkResources.java b/oeffi/src/de/schildbach/oeffi/network/NetworkResources.java index a4b3f61..69e6e7d 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkResources.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkResources.java @@ -20,8 +20,8 @@ package de.schildbach.oeffi.network; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; -import androidx.annotation.Nullable; +import javax.annotation.Nullable; import java.util.Locale; import static com.google.common.base.Preconditions.checkNotNull; diff --git a/oeffi/src/de/schildbach/oeffi/network/list/NetworkViewHolder.java b/oeffi/src/de/schildbach/oeffi/network/list/NetworkViewHolder.java index e943777..62e3160 100644 --- a/oeffi/src/de/schildbach/oeffi/network/list/NetworkViewHolder.java +++ b/oeffi/src/de/schildbach/oeffi/network/list/NetworkViewHolder.java @@ -24,11 +24,12 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.PopupMenu; import android.widget.TextView; -import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; import de.schildbach.oeffi.R; import de.schildbach.oeffi.network.NetworkResources; +import javax.annotation.Nullable; + public class NetworkViewHolder extends RecyclerView.ViewHolder { private final Context context; private final Resources res; diff --git a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java index f2ff948..15a4591 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java +++ b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java @@ -36,7 +36,6 @@ import android.widget.PopupMenu; import android.widget.TextView; import android.widget.ViewAnimator; import androidx.activity.ComponentActivity; -import androidx.annotation.Nullable; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -68,6 +67,7 @@ import okhttp3.HttpUrl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.net.HttpURLConnection; diff --git a/oeffi/src/de/schildbach/oeffi/plans/PlanContentProvider.java b/oeffi/src/de/schildbach/oeffi/plans/PlanContentProvider.java index 3517dbc..058993d 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/PlanContentProvider.java +++ b/oeffi/src/de/schildbach/oeffi/plans/PlanContentProvider.java @@ -25,7 +25,6 @@ import android.database.CursorWrapper; import android.database.MatrixCursor; import android.net.Uri; import android.provider.BaseColumns; -import androidx.annotation.Nullable; import com.google.common.base.Objects; import com.google.common.base.Splitter; import com.google.common.base.Strings; @@ -42,6 +41,7 @@ import okhttp3.HttpUrl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; diff --git a/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java b/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java index 1ce67d9..58e29db 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java @@ -35,7 +35,6 @@ import android.view.View; import android.widget.TextView; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.core.content.pm.ShortcutInfoCompat; import androidx.core.content.pm.ShortcutManagerCompat; @@ -64,6 +63,7 @@ import okhttp3.HttpUrl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import java.io.File; import java.net.HttpURLConnection; diff --git a/oeffi/src/de/schildbach/oeffi/plans/list/PlanViewHolder.java b/oeffi/src/de/schildbach/oeffi/plans/list/PlanViewHolder.java index 57693fa..f539e8e 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/list/PlanViewHolder.java +++ b/oeffi/src/de/schildbach/oeffi/plans/list/PlanViewHolder.java @@ -29,12 +29,12 @@ import android.widget.ImageView; import android.widget.PopupMenu; import android.widget.ProgressBar; import android.widget.TextView; -import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; import de.schildbach.oeffi.R; import de.schildbach.oeffi.network.NetworkResources; import okhttp3.Call; +import javax.annotation.Nullable; import java.util.Date; public class PlanViewHolder extends RecyclerView.ViewHolder { diff --git a/oeffi/src/de/schildbach/oeffi/plans/list/PlansAdapter.java b/oeffi/src/de/schildbach/oeffi/plans/list/PlansAdapter.java index bbf2b66..4e5debd 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/list/PlansAdapter.java +++ b/oeffi/src/de/schildbach/oeffi/plans/list/PlansAdapter.java @@ -26,7 +26,6 @@ import android.os.Handler; import android.provider.BaseColumns; import android.view.LayoutInflater; import android.view.ViewGroup; -import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; import de.schildbach.oeffi.Constants; import de.schildbach.oeffi.R; @@ -39,6 +38,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; +import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.util.Date; diff --git a/oeffi/src/de/schildbach/oeffi/preference/AboutFragment.java b/oeffi/src/de/schildbach/oeffi/preference/AboutFragment.java index 9f30553..8fb27e2 100644 --- a/oeffi/src/de/schildbach/oeffi/preference/AboutFragment.java +++ b/oeffi/src/de/schildbach/oeffi/preference/AboutFragment.java @@ -24,11 +24,12 @@ import android.os.Build; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; -import androidx.annotation.Nullable; import de.schildbach.oeffi.Application; import de.schildbach.oeffi.R; import de.schildbach.oeffi.util.Installer; +import javax.annotation.Nullable; + public class AboutFragment extends PreferenceFragment { private static final String KEY_ABOUT_VERSION = "about_version"; private static final String KEY_ABOUT_MARKET_APP = "about_market_app"; diff --git a/oeffi/src/de/schildbach/oeffi/preference/CommonFragment.java b/oeffi/src/de/schildbach/oeffi/preference/CommonFragment.java index a1bc3ec..cd73015 100644 --- a/oeffi/src/de/schildbach/oeffi/preference/CommonFragment.java +++ b/oeffi/src/de/schildbach/oeffi/preference/CommonFragment.java @@ -20,9 +20,10 @@ package de.schildbach.oeffi.preference; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceFragment; -import androidx.annotation.Nullable; import de.schildbach.oeffi.R; +import javax.annotation.Nullable; + public class CommonFragment extends PreferenceFragment { private static final String KEY_BATTERY_OPTIMIZATIONS = "battery_optimizations"; diff --git a/oeffi/src/de/schildbach/oeffi/preference/DirectionsFragment.java b/oeffi/src/de/schildbach/oeffi/preference/DirectionsFragment.java index cdb06ac..2706ad3 100644 --- a/oeffi/src/de/schildbach/oeffi/preference/DirectionsFragment.java +++ b/oeffi/src/de/schildbach/oeffi/preference/DirectionsFragment.java @@ -19,9 +19,10 @@ package de.schildbach.oeffi.preference; import android.os.Bundle; import android.preference.PreferenceFragment; -import androidx.annotation.Nullable; import de.schildbach.oeffi.R; +import javax.annotation.Nullable; + public class DirectionsFragment extends PreferenceFragment { @Override public void onCreate(@Nullable Bundle savedInstanceState) { diff --git a/oeffi/src/de/schildbach/oeffi/preference/DonateFragment.java b/oeffi/src/de/schildbach/oeffi/preference/DonateFragment.java index 4b29fc6..890c797 100644 --- a/oeffi/src/de/schildbach/oeffi/preference/DonateFragment.java +++ b/oeffi/src/de/schildbach/oeffi/preference/DonateFragment.java @@ -21,9 +21,10 @@ import android.content.ActivityNotFoundException; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; -import androidx.annotation.Nullable; import de.schildbach.oeffi.R; +import javax.annotation.Nullable; + public class DonateFragment extends PreferenceFragment { private static final String KEY_ABOUT_DONATE_BITCOIN = "about_donate_bitcoin"; diff --git a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java index 37416e7..87ea4ed 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java @@ -25,7 +25,6 @@ import android.os.Bundle; import android.view.View; import android.widget.ViewAnimator; import androidx.activity.result.contract.ActivityResultContract; -import androidx.annotation.Nullable; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import de.schildbach.oeffi.MyActionBar; @@ -39,6 +38,7 @@ import de.schildbach.pte.NetworkId; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.Location; +import javax.annotation.Nullable; import java.util.List; import static com.google.common.base.Preconditions.checkNotNull; diff --git a/oeffi/src/de/schildbach/oeffi/stations/Station.java b/oeffi/src/de/schildbach/oeffi/stations/Station.java index 52b5c07..9853707 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/Station.java +++ b/oeffi/src/de/schildbach/oeffi/stations/Station.java @@ -17,7 +17,6 @@ package de.schildbach.oeffi.stations; -import androidx.annotation.Nullable; import de.schildbach.pte.NetworkId; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.LineDestination; @@ -25,6 +24,7 @@ import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.QueryDeparturesResult; +import javax.annotation.Nullable; import java.util.Date; import java.util.EnumSet; import java.util.List; diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java index 7bd2bce..c0c30e0 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java @@ -38,7 +38,6 @@ import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.ViewAnimator; -import androidx.annotation.Nullable; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.google.common.base.Joiner; @@ -65,6 +64,7 @@ import org.osmdroid.util.GeoPoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java index d72bae2..2596490 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java @@ -55,7 +55,6 @@ import android.widget.TextView; import android.widget.ViewAnimator; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; @@ -100,6 +99,7 @@ import org.osmdroid.util.GeoPoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; diff --git a/oeffi/src/de/schildbach/oeffi/stations/list/FavoriteStationsAdapter.java b/oeffi/src/de/schildbach/oeffi/stations/list/FavoriteStationsAdapter.java index 45619c1..ece643e 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/list/FavoriteStationsAdapter.java +++ b/oeffi/src/de/schildbach/oeffi/stations/list/FavoriteStationsAdapter.java @@ -24,13 +24,14 @@ import android.net.Uri; import android.provider.BaseColumns; import android.view.LayoutInflater; import android.view.ViewGroup; -import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; import de.schildbach.oeffi.R; import de.schildbach.oeffi.stations.FavoriteStationsProvider; import de.schildbach.pte.NetworkId; import de.schildbach.pte.dto.Location; +import javax.annotation.Nullable; + public class FavoriteStationsAdapter extends RecyclerView.Adapter { private final Context context; private final ContentResolver contentResolver; diff --git a/oeffi/src/de/schildbach/oeffi/stations/list/StationContextMenuItemListener.java b/oeffi/src/de/schildbach/oeffi/stations/list/StationContextMenuItemListener.java index 3902e63..051aace 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/list/StationContextMenuItemListener.java +++ b/oeffi/src/de/schildbach/oeffi/stations/list/StationContextMenuItemListener.java @@ -17,11 +17,11 @@ package de.schildbach.oeffi.stations.list; -import androidx.annotation.Nullable; import de.schildbach.pte.NetworkId; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.Location; +import javax.annotation.Nullable; import java.util.List; public interface StationContextMenuItemListener { diff --git a/oeffi/src/de/schildbach/oeffi/stations/list/StationViewHolder.java b/oeffi/src/de/schildbach/oeffi/stations/list/StationViewHolder.java index 015e467..3bfe3ea 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/list/StationViewHolder.java +++ b/oeffi/src/de/schildbach/oeffi/stations/list/StationViewHolder.java @@ -30,7 +30,6 @@ import android.view.WindowManager; import android.widget.ImageButton; import android.widget.PopupMenu; import android.widget.TextView; -import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; import com.google.common.base.Joiner; import de.schildbach.oeffi.Constants; @@ -50,6 +49,7 @@ import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.QueryDeparturesResult; +import javax.annotation.Nullable; import java.util.Date; import java.util.LinkedHashMap; import java.util.LinkedList; diff --git a/oeffi/src/de/schildbach/oeffi/util/Downloader.java b/oeffi/src/de/schildbach/oeffi/util/Downloader.java index d03b094..b35a6a1 100644 --- a/oeffi/src/de/schildbach/oeffi/util/Downloader.java +++ b/oeffi/src/de/schildbach/oeffi/util/Downloader.java @@ -17,7 +17,6 @@ package de.schildbach.oeffi.util; -import androidx.annotation.Nullable; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import com.google.common.util.concurrent.Striped; @@ -33,6 +32,7 @@ import okhttp3.ResponseBody; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; From 1d4fd6e102a621d6253684919821a1e038e233f9 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 29 Mar 2023 10:29:14 +0200 Subject: [PATCH 117/218] NetworkProviderFactory: update custom API base for GVH --- .../src/de/schildbach/oeffi/network/NetworkProviderFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 01242ba..2b16ff5 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -131,7 +131,7 @@ public final class NetworkProviderFactory { else if (networkId.equals(NetworkId.SH)) return new ShProvider("{\"aid\":\"r0Ot9FLFNAFxijLW\",\"type\":\"AID\"}"); else if (networkId.equals(NetworkId.GVH)) - return new GvhProvider(HttpUrl.parse("https://www.efa.de/app_oeffi/")); + return new GvhProvider(HttpUrl.parse("https://gvh.efa.de/app_oeffi/")); else if (networkId.equals(NetworkId.BSVAG)) return new BsvagProvider(); else if (networkId.equals(NetworkId.VBN)) From 766d5c01504c642e4a03982dd6924e1d5e01a906 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 29 Mar 2023 10:43:06 +0200 Subject: [PATCH 118/218] 12.1.10 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 3c55827..34493d4 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120109" - android:versionName="12.1.9"> + android:versionCode="120110" + android:versionName="12.1.10"> Date: Wed, 29 Mar 2023 14:17:05 +0200 Subject: [PATCH 119/218] .gitlab-ci.yml: merge `apt-get install` commands --- .gitlab-ci.yml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9a66944..00b27b2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -11,8 +11,7 @@ after_script: bullseye-jdk11: image: debian:bullseye-backports script: - - apt-get -y install openjdk-11-jdk-headless - - apt-get -y install sdkmanager gradle + - apt-get -y install openjdk-11-jdk-headless gradle sdkmanager - yes | sdkmanager --licenses >/dev/null || true - gradle build --stacktrace artifacts: @@ -23,8 +22,7 @@ bullseye-jdk11: bookworm-jdk17: image: debian:bookworm-slim script: - - apt-get -y install openjdk-17-jdk-headless - - apt-get -y install sdkmanager gradle + - apt-get -y install openjdk-17-jdk-headless gradle sdkmanager - yes | sdkmanager --licenses >/dev/null || true - gradle build --stacktrace artifacts: @@ -35,8 +33,7 @@ bookworm-jdk17: jammy-jdk11: image: ubuntu:jammy script: - - apt-get -y install openjdk-11-jdk-headless - - apt-get -y install sdkmanager gradle + - apt-get -y install openjdk-11-jdk-headless gradle sdkmanager - yes | sdkmanager --licenses >/dev/null || true - gradle build --stacktrace artifacts: @@ -47,8 +44,7 @@ jammy-jdk11: lunar-jdk17: image: ubuntu:lunar script: - - apt-get -y install openjdk-17-jdk-headless - - apt-get -y install sdkmanager gradle + - apt-get -y install openjdk-17-jdk-headless gradle sdkmanager - yes | sdkmanager --licenses >/dev/null || true - gradle build --stacktrace artifacts: From 1c353469cd5216d6bbabdbd61f2bcb78c67bab11 Mon Sep 17 00:00:00 2001 From: Julius Babies Date: Fri, 21 Apr 2023 08:56:22 +0000 Subject: [PATCH 120/218] StationDetailsActivity: use german translation "Gleis" only for trains, otherwise use "Steig" --- oeffi/res/values-de/strings.xml | 3 ++- oeffi/res/values/strings.xml | 1 + .../oeffi/stations/StationDetailsActivity.java | 16 +++++++++++++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/oeffi/res/values-de/strings.xml b/oeffi/res/values-de/strings.xml index 84e65fb..127f511 100644 --- a/oeffi/res/values-de/strings.xml +++ b/oeffi/res/values-de/strings.xml @@ -355,6 +355,7 @@ %1$dh %2$02d min - Gleis %s + Gleis %s + Steig %s diff --git a/oeffi/res/values/strings.xml b/oeffi/res/values/strings.xml index f74e815..5280af0 100644 --- a/oeffi/res/values/strings.xml +++ b/oeffi/res/values/strings.xml @@ -357,6 +357,7 @@ %1$dh %2$02d min + platform %s platform %s diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java index c0c30e0..3036182 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java @@ -58,6 +58,7 @@ import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.LineDestination; import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; +import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.StationDepartures; import org.osmdroid.util.GeoPoint; @@ -69,6 +70,7 @@ import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; +import java.util.EnumSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; @@ -693,9 +695,17 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa itemView.setOnClickListener(null); } - // position - positionView.setText(departure.position != null ? Constants.DESTINATION_ARROW_INVISIBLE_PREFIX - + context.getString(R.string.position_platform, departure.position) : null); + // position: use german translation "Gleis" only for trains, otherwise use "Steig" + boolean isTrain = departure.line.product != null && + EnumSet.of(Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, + Product.SUBWAY).contains(departure.line.product); + positionView.setText(departure.position != null ? + Constants.DESTINATION_ARROW_INVISIBLE_PREFIX + + context.getString(isTrain ? + R.string.position_platform_train : + R.string.position_platform, + departure.position) : + null); // capacity final int[] capacity = departure.capacity; From a866d66f6cd46e4569e055e9cc22a9b3a4608d2e Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 29 Aug 2023 19:04:42 +0200 Subject: [PATCH 121/218] settings.gradle: disable lint for good --- oeffi/build.gradle | 1 - settings.gradle | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 47e7cf5..442772a 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -87,7 +87,6 @@ android { lintOptions { abortOnError false - disable 'MissingTranslation' } packagingOptions { diff --git a/settings.gradle b/settings.gradle index eae264c..930ac5a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -8,5 +8,9 @@ def maxGradleVersion = GradleVersion.version("7.0") // excluding if (GradleVersion.current() < minGradleVersion || GradleVersion.current() >= maxGradleVersion) throw new GradleScriptException("build requires Gradle between ${minGradleVersion.version} (including) and ${maxGradleVersion.version} (excluding)", null) +gradle.startParameter.excludedTaskNames << "lint" +gradle.startParameter.excludedTaskNames << ":oeffi:lintVitalAospRelease" +gradle.startParameter.excludedTaskNames << ":oeffi:lintVitalGoogleRelease" + include 'oeffi' include 'public-transport-enabler' From 89fa32ef567f05344cb68c319d30789bbcd39d15 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 7 Jan 2022 15:35:53 +0100 Subject: [PATCH 122/218] build.Containerfile: reproducible reference build via docker/podman --- .dockerignore | 5 +++++ build.Containerfile | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 .dockerignore create mode 100644 build.Containerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..63ab206 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +**/.* +**/build.Containerfile +**/local.properties +**/build +**/*.iml diff --git a/build.Containerfile b/build.Containerfile new file mode 100644 index 0000000..45c9cb5 --- /dev/null +++ b/build.Containerfile @@ -0,0 +1,39 @@ +# +# Reproducible reference build +# +# Usage: +# docker build --file build.Containerfile --output . +# or +# podman build --file build.Containerfile --output . +# +# The unsigned APKs are written to the specified output directory. +# Use `apksigner` to sign before installing via `adb install`. +# + +FROM debian:bullseye-backports AS build-stage + +# install debian packages +ENV DEBIAN_FRONTEND noninteractive +RUN /usr/bin/apt-get update && \ + /usr/bin/apt-get --yes install openjdk-11-jdk-headless gradle sdkmanager && \ + /bin/ln -fs /usr/share/zoneinfo/CET /etc/localtime && \ + /usr/sbin/dpkg-reconfigure --frontend noninteractive tzdata && \ + /usr/sbin/adduser --disabled-login --gecos "" builder + +# give up privileges +USER builder + +# copy source code +WORKDIR /home/builder +COPY --chown=builder / . + +# accept SDK licenses +ENV ANDROID_HOME /home/builder/android-sdk +RUN yes | /usr/bin/sdkmanager --licenses >/dev/null + +# build +RUN /usr/bin/gradle --no-build-cache --no-daemon --no-parallel clean :oeffi:assembleRelease + +# export build output +FROM scratch AS export-stage +COPY --from=build-stage /home/builder/oeffi/build/outputs/apk/*/release/oeffi-*-release-unsigned.apk / From ed00894f882328fd0472a3820d36e94a65c9fa04 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 29 Aug 2023 23:06:21 +0200 Subject: [PATCH 123/218] 12.1.11 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 34493d4..8daa75f 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120110" - android:versionName="12.1.10"> + android:versionCode="120111" + android:versionName="12.1.11"> Date: Thu, 31 Aug 2023 13:29:43 +0200 Subject: [PATCH 124/218] build.Containerfile: use a project subdirectory --- build.Containerfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.Containerfile b/build.Containerfile index 45c9cb5..4a03556 100644 --- a/build.Containerfile +++ b/build.Containerfile @@ -23,17 +23,17 @@ RUN /usr/bin/apt-get update && \ # give up privileges USER builder -# copy source code +# copy project source code WORKDIR /home/builder -COPY --chown=builder / . +COPY --chown=builder / project/ # accept SDK licenses ENV ANDROID_HOME /home/builder/android-sdk RUN yes | /usr/bin/sdkmanager --licenses >/dev/null -# build -RUN /usr/bin/gradle --no-build-cache --no-daemon --no-parallel clean :oeffi:assembleRelease +# build project +RUN /usr/bin/gradle --project-dir project/ --no-build-cache --no-daemon --no-parallel clean :oeffi:assembleRelease # export build output FROM scratch AS export-stage -COPY --from=build-stage /home/builder/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 / From 843edcb001fea22045df35e17d47dde8e3d3acc1 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 4 Sep 2023 01:03:16 +0200 Subject: [PATCH 125/218] build.Containerfile: use disorderfs to improve build reproducibility --- build.Containerfile | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/build.Containerfile b/build.Containerfile index 4a03556..0774630 100644 --- a/build.Containerfile +++ b/build.Containerfile @@ -1,13 +1,17 @@ # -# Reproducible reference build -# # Usage: +# # docker build --file build.Containerfile --output . # or # podman build --file build.Containerfile --output . # -# The unsigned APKs are written to the specified output directory. -# Use `apksigner` to sign before installing via `adb install`. +# For improved reproducibility, the project directory entries can be ordered +# like this: +# +# buildah build --cap-add=sys_admin --device /dev/fuse --file build.Containerfile --output . +# +# In any case, the unsigned APKs are written to the specified output +# directory. Use `apksigner` to sign before installing via `adb install`. # FROM debian:bullseye-backports AS build-stage @@ -15,9 +19,10 @@ FROM debian:bullseye-backports AS build-stage # install debian packages ENV DEBIAN_FRONTEND noninteractive RUN /usr/bin/apt-get update && \ - /usr/bin/apt-get --yes install openjdk-11-jdk-headless gradle sdkmanager && \ + /usr/bin/apt-get --yes install disorderfs openjdk-11-jdk-headless gradle sdkmanager && \ /bin/ln -fs /usr/share/zoneinfo/CET /etc/localtime && \ /usr/sbin/dpkg-reconfigure --frontend noninteractive tzdata && \ + /bin/ln -s /proc/self/mounts /etc/mtab && \ /usr/sbin/adduser --disabled-login --gecos "" builder # give up privileges @@ -32,7 +37,14 @@ ENV ANDROID_HOME /home/builder/android-sdk RUN yes | /usr/bin/sdkmanager --licenses >/dev/null # build project -RUN /usr/bin/gradle --project-dir project/ --no-build-cache --no-daemon --no-parallel clean :oeffi:assembleRelease +RUN if [ -e /dev/fuse ] ; \ + then /bin/mv project project.u && /bin/mkdir project && \ + /usr/bin/disorderfs --sort-dirents=yes --reverse-dirents=no project.u project ; \ + fi && \ + /usr/bin/gradle --project-dir project/ --no-build-cache --no-daemon --no-parallel clean :oeffi:assembleRelease && \ + if [ -e /dev/fuse ] ; \ + then /bin/fusermount -u project | true && /bin/rmdir project && /bin/mv project.u project ; \ + fi # export build output FROM scratch AS export-stage From 5c6aef0591bf9d89627af740cc96afca2742d131 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 31 Aug 2023 15:44:31 +0200 Subject: [PATCH 126/218] proguard.cfg: remove an option that is the default anyway --- oeffi/proguard.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index 1566d6d..e568fbd 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -1,4 +1,3 @@ --dontskipnonpubliclibraryclasses -dontoptimize -dontpreverify -dontobfuscate From 4bdb3598c38b639a15f63bb3daa4bf0e268740c9 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 31 Aug 2023 15:50:36 +0200 Subject: [PATCH 127/218] proguard.cfg: declare this is an Android project --- oeffi/proguard.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index e568fbd..265fb16 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -1,3 +1,4 @@ +-android -dontoptimize -dontpreverify -dontobfuscate From 18415177bd9b3b2e535f590489b6f689429c7e8a Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 4 Sep 2023 11:36:24 +0200 Subject: [PATCH 128/218] 12.1.12 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 8daa75f..a2aac62 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120111" - android:versionName="12.1.11"> + android:versionCode="120112" + android:versionName="12.1.12"> Date: Mon, 4 Sep 2023 20:43:16 +0200 Subject: [PATCH 129/218] build.gradle: update AndroidX Activity to 1.7.2 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 442772a..48d687c 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' implementation 'androidx.core:core:1.9.0' - implementation 'androidx.activity:activity:1.7.0' + implementation 'androidx.activity:activity:1.7.2' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency From ef47708d0bf8ad1cab9a65f7a1d630ad0a19096e Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 4 Sep 2023 20:44:36 +0200 Subject: [PATCH 130/218] build.gradle: update AndroidX RecyclerView to 1.3.2 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 48d687c..6f17c88 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -14,7 +14,7 @@ configurations { dependencies { implementation project(':public-transport-enabler') implementation 'androidx.annotation:annotation:1.5.0' - implementation 'androidx.recyclerview:recyclerview:1.3.0' + implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' implementation 'androidx.core:core:1.9.0' From 5e3204c796113745e3fb8d3f0838a62d2b0b0fcc Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 31 Oct 2023 12:34:35 +0100 Subject: [PATCH 131/218] build.gradle: update AndroidX Activity to 1.8.0 --- oeffi/build.gradle | 2 +- oeffi/proguard.cfg | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 6f17c88..03b013d 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' implementation 'androidx.core:core:1.9.0' - implementation 'androidx.activity:activity:1.7.2' + implementation 'androidx.activity:activity:1.8.0' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index 265fb16..ef8b6c0 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -53,6 +53,9 @@ -dontnote kotlin.** -dontnote kotlinx.** -dontwarn androidx.lifecycle.SavedStateHandle +-dontwarn androidx.activity.Api34Impl +-dontwarn androidx.activity.BackEventCompat +-dontwarn androidx.**$Api34Impl$** # OkHttp -dontwarn okio.DeflaterSink From 45e213b14a4ecb5697dfd38f4fa562f451eb86ec Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 31 Oct 2023 12:36:41 +0100 Subject: [PATCH 132/218] build.gradle: update AndroidX Annotation to 1.7.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 03b013d..7b8990b 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -13,7 +13,7 @@ configurations { dependencies { implementation project(':public-transport-enabler') - implementation 'androidx.annotation:annotation:1.5.0' + implementation 'androidx.annotation:annotation:1.7.0' implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' From 7ac8f6280cfa1362c1907db076574171e5c5d244 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 31 Oct 2023 12:49:51 +0100 Subject: [PATCH 133/218] build.gradle: update AndroidX Core to 1.12.0 --- oeffi/build.gradle | 2 +- oeffi/proguard.cfg | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 7b8990b..55ba4b4 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -17,7 +17,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' - implementation 'androidx.core:core:1.9.0' + implementation 'androidx.core:core:1.12.0' implementation 'androidx.activity:activity:1.8.0' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index ef8b6c0..5ca66d9 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -55,7 +55,8 @@ -dontwarn androidx.lifecycle.SavedStateHandle -dontwarn androidx.activity.Api34Impl -dontwarn androidx.activity.BackEventCompat --dontwarn androidx.**$Api34Impl$** +-dontwarn androidx.core.view.accessibility.AccessibilityNodeInfoCompat$AccessibilityActionCompat +-dontwarn androidx.**$Api34Impl,androidx.**$Api34Impl$** # OkHttp -dontwarn okio.DeflaterSink From b4503f1decef038988ba888ffe4cb620b12ce269 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 31 Oct 2023 12:51:38 +0100 Subject: [PATCH 134/218] build.gradle: update SLF4J to 2.0.9 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 55ba4b4..4fff936 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' implementation 'com.google.guava:guava:31.1-android' implementation 'org.osmdroid:osmdroid-android:6.1.14' - implementation 'org.slf4j:slf4j-api:2.0.7' + implementation 'org.slf4j:slf4j-api:2.0.9' implementation 'com.github.tony19:logback-android:3.0.0' testImplementation 'junit:junit:4.13.2' } From 54ce45291a2bf5d439e14ccaa8b74e305ac01c84 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 31 Oct 2023 16:12:17 +0100 Subject: [PATCH 135/218] build.gradle: update SDK Build Tools to 34.0.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 4fff936..c4ae1a7 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -32,7 +32,7 @@ dependencies { android { compileSdkVersion 'android-33' - buildToolsVersion '33.0.2' + buildToolsVersion '34.0.0' defaultConfig { generatedDensities = ['hdpi', 'xhdpi'] From a4a57747780bd3d5dd29d91d3dad0d0dac3e1360 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 31 Oct 2023 16:45:56 +0100 Subject: [PATCH 136/218] .gitlab-ci.yml: inline `before_script` and `after_script` into `script` blocks --- .gitlab-ci.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 00b27b2..36aae19 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,18 +2,14 @@ variables: GIT_SUBMODULE_STRATEGY: recursive ANDROID_HOME: $PWD/android-sdk -before_script: - - apt-get update - -after_script: - - gradle --version - 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: @@ -22,9 +18,11 @@ bullseye-jdk11: bookworm-jdk17: image: debian:bookworm-slim 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: @@ -33,9 +31,11 @@ bookworm-jdk17: 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: @@ -44,9 +44,11 @@ jammy-jdk11: 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: From 9524f77e1024760493ed7cf4f2a7e407b18dc7d7 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 31 Oct 2023 16:49:43 +0100 Subject: [PATCH 137/218] .gitlab-ci.yml: add job for reference build --- .gitlab-ci.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 36aae19..f04863e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,6 +2,23 @@ variables: GIT_SUBMODULE_STRATEGY: recursive ANDROID_HOME: $PWD/android-sdk +reference: + image: debian:bookworm-slim + before_script: + - apt-get update + - apt-get -y install ca-certificates buildah + # switch to iptables legacy, as GitLab CI doesn't support nftables + - apt-get -y install --no-install-recommends iptables + - update-alternatives --set iptables /usr/sbin/iptables-legacy + script: + - buildah build --file build.Containerfile --output build . + after_script: + - sha256sum build/* + artifacts: + name: oeffi-$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA + paths: + - build/** + bullseye-jdk11: image: debian:bullseye-backports script: From 7c09e85f76685176e721388832ce4cf483491a62 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 31 Oct 2023 17:02:13 +0100 Subject: [PATCH 138/218] 12.1.13 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index a2aac62..909e51d 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120112" - android:versionName="12.1.12"> + android:versionCode="120113" + android:versionName="12.1.13"> Date: Wed, 1 Nov 2023 14:06:09 +0100 Subject: [PATCH 139/218] AndroidManifest.xml: target Android 14 --- oeffi/AndroidManifest.xml | 2 +- oeffi/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 909e51d..ddf7587 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -25,7 +25,7 @@ + android:targetSdkVersion="34" /> diff --git a/oeffi/build.gradle b/oeffi/build.gradle index c4ae1a7..1a376d2 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -31,7 +31,7 @@ dependencies { } android { - compileSdkVersion 'android-33' + compileSdkVersion 'android-34' buildToolsVersion '34.0.0' defaultConfig { From 1eda102dc023d831c3ac724afe25c0b864eac0e2 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 5 Nov 2023 21:40:22 +0100 Subject: [PATCH 140/218] networks.txt: remove TFI (Ireland) --- oeffi/assets/networks.txt | 3 --- oeffi/res/values-de/networks.xml | 2 -- oeffi/res/values/networks.xml | 2 -- oeffi/src/de/schildbach/oeffi/Application.java | 6 ++++++ .../de/schildbach/oeffi/network/NetworkProviderFactory.java | 3 --- 5 files changed, 6 insertions(+), 10 deletions(-) diff --git a/oeffi/assets/networks.txt b/oeffi/assets/networks.txt index 0294826..dca04bd 100644 --- a/oeffi/assets/networks.txt +++ b/oeffi/assets/networks.txt @@ -83,9 +83,6 @@ FINLAND|fi-FI|FI;Helsinki|beta 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 -# IE -TFI|ga-IE|IE;Dublin;GB;Belfast - # AE DUB|ae-AE|AE;Dubai|beta diff --git a/oeffi/res/values-de/networks.xml b/oeffi/res/values-de/networks.xml index 16f6bc2..0852204 100644 --- a/oeffi/res/values-de/networks.xml +++ b/oeffi/res/values-de/networks.xml @@ -109,8 +109,6 @@ Lokal- und Regionalverkehr (z.B. London, Birmingham) Liverpool Lokal- und Regionalverkehr - Irland & Nordirland - Lokal- und Regionalverkehr Dubai Lokalverkehr San Francisco diff --git a/oeffi/res/values/networks.xml b/oeffi/res/values/networks.xml index d2b02f6..d546bcc 100644 --- a/oeffi/res/values/networks.xml +++ b/oeffi/res/values/networks.xml @@ -109,8 +109,6 @@ local and regional (e.g. London, Birmingham) Liverpool local and regional - Ireland & Northern Ireland - local and regional Dubai local San Francisco diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index b3e3796..492c138 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -109,6 +109,12 @@ public class Application extends android.app.Application { FavoriteStationsProvider.migrateFavoriteStations(this, VMS, NetworkId.VVO); QueryHistoryProvider.migrateQueryHistory(this, VMS, NetworkId.VVO); + // 2023-11-05: migrate TFI to use RT + final String TFI = "TFI"; + migrateSelectedNetwork(TFI, NetworkId.RT); + FavoriteStationsProvider.deleteFavoriteStations(this, TFI); + QueryHistoryProvider.deleteQueryHistory(this, TFI); + log.info("Migrations took {}", watch); } diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 2b16ff5..83c6e76 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -59,7 +59,6 @@ import de.schildbach.pte.SncbProvider; import de.schildbach.pte.SpainProvider; import de.schildbach.pte.StvProvider; import de.schildbach.pte.SydneyProvider; -import de.schildbach.pte.TfiProvider; import de.schildbach.pte.TlemProvider; import de.schildbach.pte.VbbProvider; import de.schildbach.pte.VblProvider; @@ -200,8 +199,6 @@ public final class NetworkProviderFactory { return new TlemProvider(); else if (networkId.equals(NetworkId.MERSEY)) return new MerseyProvider(); - else if (networkId.equals(NetworkId.TFI)) - return new TfiProvider(); else if (networkId.equals(NetworkId.DUB)) return new DubProvider(); else if (networkId.equals(NetworkId.BART)) From 80daf5c5c6f2e90101b1e13e7a4221ce86914795 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 5 Nov 2023 21:51:25 +0100 Subject: [PATCH 141/218] build.gradle: update Guava to 32.1.3-android --- oeffi/build.gradle | 2 +- oeffi/proguard.cfg | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 1a376d2..0f038e4 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' - implementation 'com.google.guava:guava:31.1-android' + implementation 'com.google.guava:guava:32.1.3-android' implementation 'org.osmdroid:osmdroid-android:6.1.14' implementation 'org.slf4j:slf4j-api:2.0.9' implementation 'com.github.tony19:logback-android:3.0.0' diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index 5ca66d9..8253ee2 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -71,15 +71,16 @@ # Guava -dontwarn sun.misc.Unsafe --dontwarn java.lang.ClassValue --dontwarn com.google.errorprone.annotations.** --dontwarn afu.org.checkerframework.checker.**,org.checkerframework.checker.** +-dontwarn javax.lang.model.element.Modifier +-dontwarn com.google.common.reflect.Invokable,com.google.common.reflect.Invokable$** +-dontwarn java.lang.reflect.AnnotatedType -dontnote com.google.common.reflect.** -dontnote com.google.appengine.** -dontnote com.google.apphosting.** -dontnote com.google.common.cache.Striped64,com.google.common.cache.Striped64$Cell -dontnote com.google.common.hash.Striped64,com.google.common.hash.Striped64$Cell -dontnote com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper +-dontnote com.google.common.io.TempFileCreator,com.google.common.io.TempFileCreator$** -dontnote dalvik.system.CloseGuard # SLF4J, logback-android From 2754077ccb89258b098a6fd23d8ba81fcc80a9bb Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 5 Nov 2023 21:54:00 +0100 Subject: [PATCH 142/218] build.gradle: update osmdroid to 6.1.17 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 0f038e4..f01ecd7 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -24,7 +24,7 @@ dependencies { //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' implementation 'com.google.guava:guava:32.1.3-android' - implementation 'org.osmdroid:osmdroid-android:6.1.14' + implementation 'org.osmdroid:osmdroid-android:6.1.17' implementation 'org.slf4j:slf4j-api:2.0.9' implementation 'com.github.tony19:logback-android:3.0.0' testImplementation 'junit:junit:4.13.2' From 81a89ec9394108b91cdcb8ae65ac143ce1d621aa Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 10 Nov 2023 10:26:44 +0100 Subject: [PATCH 143/218] 12.1.14 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index ddf7587..2401590 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120113" - android:versionName="12.1.13"> + android:versionCode="120114" + android:versionName="12.1.14"> Date: Tue, 14 Nov 2023 21:39:19 +0100 Subject: [PATCH 144/218] StationDetailsActivity, DecodeForeignActivity: remove deep links from QR codes and NDEF messages Android 12 doesn't support this any more for domains you don't own. --- oeffi/AndroidManifest.xml | 98 -------------- oeffi/res/values-de/strings.xml | 1 - oeffi/res/values/strings.xml | 1 - .../oeffi/stations/DecodeForeignActivity.java | 125 ------------------ .../stations/StationDetailsActivity.java | 88 +----------- 5 files changed, 6 insertions(+), 307 deletions(-) delete mode 100644 oeffi/src/de/schildbach/oeffi/stations/DecodeForeignActivity.java diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 2401590..6021c8a 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -117,104 +117,6 @@ android:configChanges="keyboard|keyboardHidden" android:label="@string/station_details_activity_title" android:taskAffinity="de.schildbach.oeffi.stations"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Keine Haltestellen gefunden - Abfahrtszeiten an dieser Haltestelle Favorit Lade Abfahrtszeiten… Keine Abfahrten diff --git a/oeffi/res/values/strings.xml b/oeffi/res/values/strings.xml index 5280af0..4e41937 100644 --- a/oeffi/res/values/strings.xml +++ b/oeffi/res/values/strings.xml @@ -136,7 +136,6 @@ No stations found - Departure times of this station Favorite Loading departures… No departures diff --git a/oeffi/src/de/schildbach/oeffi/stations/DecodeForeignActivity.java b/oeffi/src/de/schildbach/oeffi/stations/DecodeForeignActivity.java deleted file mode 100644 index 7728cde..0000000 --- a/oeffi/src/de/schildbach/oeffi/stations/DecodeForeignActivity.java +++ /dev/null @@ -1,125 +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 . - */ - -package de.schildbach.oeffi.stations; - -import android.app.ProgressDialog; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import androidx.activity.ComponentActivity; -import de.schildbach.oeffi.Application; -import de.schildbach.oeffi.R; -import de.schildbach.oeffi.util.DialogBuilder; -import de.schildbach.pte.NetworkId; -import de.schildbach.pte.dto.Location; -import de.schildbach.pte.dto.LocationType; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.HttpUrl; -import okhttp3.Request; -import okhttp3.Response; - -import java.io.IOException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class DecodeForeignActivity extends ComponentActivity { - private static final Pattern PATTERN_META_REFRESH = Pattern - .compile(" finish()); - progressDialog.setCanceledOnTouchOutside(false); - - final Request.Builder request = new Request.Builder(); - request.url(HttpUrl.parse(uri.toString())); - final Call call = application.okHttpClient().newCall(request.build()); - call.enqueue(new Callback() { - public void onResponse(final Call call, final Response r) throws IOException { - try (final Response response = r) { - if (response.isSuccessful()) { - final Matcher mRefresh = PATTERN_META_REFRESH.matcher(response.body().string()); - if (mRefresh.find()) { - final Uri refreshUri = Uri.parse(mRefresh.group(1)); - - runOnUiThread(() -> { - progressDialog.dismiss(); - if ("mobil.rmv.de".equals(refreshUri.getHost()) - && "/mobile".equals(refreshUri.getPath())) { - final String id = refreshUri.getQueryParameter("id"); - StationDetailsActivity.start(DecodeForeignActivity.this, - NetworkId.NVV, new Location(LocationType.STATION, id)); - finish(); - } else { - errorDialog(R.string.stations_decode_foreign_failed); - } - }); - } else { - onFail(); - } - } else { - onFail(); - } - } - } - - public void onFailure(final Call call, final IOException x) { - onFail(); - } - - private void onFail() { - runOnUiThread(() -> { - progressDialog.dismiss(); - errorDialog(R.string.stations_decode_foreign_failed); - }); - } - }); - } else { - throw new IllegalArgumentException("cannot handle path: '" + path + "'"); - } - } else { - throw new IllegalArgumentException("cannot handle host: '" + host + "'"); - } - } - } - - private void errorDialog(final int resId) { - final DialogBuilder builder = DialogBuilder.warn(this, 0); - builder.setMessage(resId); - builder.setPositiveButton("Ok", (dialog, which) -> finish()); - builder.setOnCancelListener(dialog -> finish()); - builder.show(); - } -} diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java index 3036182..4ff6e10 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java @@ -75,8 +75,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; @@ -195,86 +193,12 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa resultStatusView = findViewById(R.id.stations_station_details_result_status); final Intent intent = getIntent(); - final Uri uri = intent.getData(); - - if (uri != null && uri.getScheme().equals("http")) { - log.info("Got intent: {}", intent); - - final String host = uri.getHost(); - final String path = uri.getPath().trim(); - - if ("oeffi.schildbach.de".equals(host)) { - final NetworkId network = NetworkId.valueOf(uri.getQueryParameter("network").toUpperCase()); - final String stationId = uri.getQueryParameter("id"); - selectStation(new Station(network, new Location(LocationType.STATION, stationId, null, null))); - } else if ("qr.bvg.de".equals(host)) { - final Matcher m = Pattern.compile("/h(\\d+)").matcher(path); - if (m.matches()) { - final NetworkId network = NetworkId.BVG; - String stationId = bvgStationIdNfcToQr(m.group(1)); - if (stationId.length() <= 6) // mast - stationId = '~' + stationId; - selectStation(new Station(network, new Location(LocationType.STATION, stationId, null, null))); - } else { - throw new IllegalArgumentException("could not parse path: '" + path + "'"); - } - } else if ("mobil.s-bahn-berlin.de".equals(host)) { - if ("/".equals(path)) { - final NetworkId network = NetworkId.VBB; - final String qr = uri.getQueryParameter("QR"); - final String stationId = qr != null ? qr : uri.getQueryParameter("qr"); - selectStation(new Station(network, new Location(LocationType.STATION, stationId, null, null))); - } else { - throw new IllegalArgumentException("could not parse path: '" + path + "'"); - } - } else if ("www.mvg-live.de".equals(host)) { - final Matcher m = Pattern.compile("/qr/(\\d+)-\\d*-\\d*").matcher(path); - if (m.matches()) { - final NetworkId network = NetworkId.MVV; - final String stationId = m.group(1); - selectStation(new Station(network, new Location(LocationType.STATION, stationId, null, null))); - } else { - throw new IllegalArgumentException("could not parse path: '" + path + "'"); - } - } else if ("wap.rmv.de".equals(host)) { - final NetworkId network = NetworkId.NVV; - final String stationId = uri.getQueryParameter("id"); - selectStation(new Station(network, new Location(LocationType.STATION, stationId, null, null))); - } else if ("m.vrn.de".equals(host)) { - final Matcher m = Pattern.compile("/(\\d+)").matcher(path); - if (m.matches()) { - final NetworkId network = NetworkId.VRN; - final String stationId = Integer.toString(Integer.parseInt(m.group(1)) + 6000000); - selectStation(new Station(network, new Location(LocationType.STATION, stationId, null, null))); - } else { - throw new IllegalArgumentException("could not parse path: '" + path + "'"); - } - } else if ("www.rheinbahn.de".equals(host)) { - final Matcher m = Pattern.compile("/QRBarcode/HS/(\\d+)_\\d*.html").matcher(path); - if (m.matches()) { - final NetworkId network = NetworkId.VRR; - final String stationId = Integer.toString(Integer.parseInt(m.group(1)) + 20000000); - selectStation(new Station(network, new Location(LocationType.STATION, stationId, null, null))); - } else { - throw new IllegalArgumentException("could not parse path: '" + path + "'"); - } - } else if ("mobil.vvs.de".equals(host)) { - final NetworkId network = NetworkId.VVS; - final int stationId = Integer.parseInt(uri.getQueryParameter("name_dm")); - // final String lineId = uri.getQueryParameter("line"); - selectStation(new Station(network, new Location(LocationType.STATION, - Integer.toString(stationId < 10000 ? stationId + 5000000 : stationId), null, null))); - } else { - throw new RuntimeException("cannot handle host: '" + host + "'"); - } - } else { - final NetworkId network = (NetworkId) checkNotNull(getIntent().getSerializableExtra(INTENT_EXTRA_NETWORK)); - final Station station = new Station(network, (Location) intent.getSerializableExtra(INTENT_EXTRA_STATION)); - if (intent.hasExtra(INTENT_EXTRA_DEPARTURES)) - station.departures = (List) intent.getSerializableExtra(INTENT_EXTRA_DEPARTURES); - selectStation(station); - statusMessage(getString(R.string.stations_station_details_progress)); - } + final NetworkId network = (NetworkId) checkNotNull(intent.getSerializableExtra(INTENT_EXTRA_NETWORK)); + final Station station = new Station(network, (Location) intent.getSerializableExtra(INTENT_EXTRA_STATION)); + if (intent.hasExtra(INTENT_EXTRA_DEPARTURES)) + station.departures = (List) intent.getSerializableExtra(INTENT_EXTRA_DEPARTURES); + selectStation(station); + statusMessage(getString(R.string.stations_station_details_progress)); favoriteButton .setChecked(selectedFavState != null && selectedFavState == FavoriteStationsProvider.TYPE_FAVORITE); From 843ed0fa7eb349261dcf9a6d9033fdee017f286b Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 16 Nov 2023 16:29:58 +0100 Subject: [PATCH 145/218] networks.txt: migrate `AVV` (EFA) to `AVV_AUGSBURG` (Hafas) --- oeffi/assets/networks.txt | 2 +- oeffi/res/values-de/networks.xml | 4 ++-- oeffi/res/values/networks.xml | 4 ++-- oeffi/src/de/schildbach/oeffi/Application.java | 6 ++++++ .../de/schildbach/oeffi/network/NetworkProviderFactory.java | 6 +++--- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/oeffi/assets/networks.txt b/oeffi/assets/networks.txt index dca04bd..d13c8b3 100644 --- a/oeffi/assets/networks.txt +++ b/oeffi/assets/networks.txt @@ -8,7 +8,7 @@ DB|de-DE|DE BVG|de-DE|Brandenburg;Berlin VBB|de-DE|Brandenburg BAYERN|de-DE|Bayern;Würzburg;Regensburg -AVV|de-DE|Augsburg +AVV_AUGSBURG|de-DE|Augsburg MVV|de-DE|Bayern;München INVG|de-DE|Ingolstadt VGN|de-DE|Nürnberg;Fürth;Erlangen diff --git a/oeffi/res/values-de/networks.xml b/oeffi/res/values-de/networks.xml index 0852204..750b7e3 100644 --- a/oeffi/res/values-de/networks.xml +++ b/oeffi/res/values-de/networks.xml @@ -19,8 +19,8 @@ Lokal- und Regionalverkehr Ingolstadt Lokal- und Regionalverkehr - Augsburg - nur Tram und Bus + Augsburg + nur Tram und Bus Verkehrsverbund Großraum Nürnberg Nürnberg, Fürth & Erlangen, Lokal- und Regionalverkehr Mittelschwaben (Krumbach, Günzburg, …) diff --git a/oeffi/res/values/networks.xml b/oeffi/res/values/networks.xml index d546bcc..c4202a5 100644 --- a/oeffi/res/values/networks.xml +++ b/oeffi/res/values/networks.xml @@ -18,8 +18,8 @@ local and regional Ingolstadt local and regional - Augsburg - tram and bus only + Augsburg + tram and bus only Verkehrsverbund Großraum Nürnberg Nuremberg, Fürth & Erlangen, local and regional Mittelschwaben (Krumbach, Günzburg, …) diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index 492c138..c64db6e 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -115,6 +115,12 @@ public class Application extends android.app.Application { FavoriteStationsProvider.deleteFavoriteStations(this, TFI); QueryHistoryProvider.deleteQueryHistory(this, TFI); + // 2023-11-16: migrate AVV to use AVV_AUGSBURG + final String AVV = "AVV"; + migrateSelectedNetwork(AVV, NetworkId.AVV_AUGSBURG); + FavoriteStationsProvider.deleteFavoriteStations(this, AVV); + QueryHistoryProvider.deleteQueryHistory(this, AVV); + log.info("Migrations took {}", watch); } diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 83c6e76..787cba3 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -21,7 +21,7 @@ import com.google.common.base.Charsets; import com.google.common.io.BaseEncoding; import de.schildbach.pte.AbstractNetworkProvider; import de.schildbach.pte.AvvAachenProvider; -import de.schildbach.pte.AvvProvider; +import de.schildbach.pte.AvvAugsburgProvider; import de.schildbach.pte.BartProvider; import de.schildbach.pte.BayernProvider; import de.schildbach.pte.BsvagProvider; @@ -119,8 +119,8 @@ public final class NetworkProviderFactory { else if (networkId.equals(NetworkId.INVG)) return new InvgProvider("{\"type\":\"AID\",\"aid\":\"GITvwi3BGOmTQ2a5\"}", "ERxotxpwFT7uYRsI".getBytes(Charsets.UTF_8)); - else if (networkId.equals(NetworkId.AVV)) - return new AvvProvider(); + else if (networkId.equals(NetworkId.AVV_AUGSBURG)) + return new AvvAugsburgProvider("{\"type\":\"AID\",\"aid\":\"jK91AVVZU77xY5oH\"}"); else if (networkId.equals(NetworkId.VGN)) return new VgnProvider(HttpUrl.parse("https://efa.vgn.de/vgnExt_oeffi/")); else if (networkId.equals(NetworkId.VVM)) From ab93873c0e412c8874c7ee96a82db397b166a429 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 16 Nov 2023 16:38:42 +0100 Subject: [PATCH 146/218] 12.1.15 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 6021c8a..4c1348c 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120114" - android:versionName="12.1.14"> + android:versionCode="120115" + android:versionName="12.1.15"> Date: Thu, 16 Nov 2023 17:25:27 +0100 Subject: [PATCH 147/218] build.gradle: update AndroidX Activity to 1.8.1 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index f01ecd7..13d4afa 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' implementation 'androidx.core:core:1.12.0' - implementation 'androidx.activity:activity:1.8.0' + implementation 'androidx.activity:activity:1.8.1' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency From 61c201eb2b7e176374031ddfcbf5d2e1fdddc9c5 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 18 Nov 2023 13:18:21 +0100 Subject: [PATCH 148/218] AndroidManifest.xml: add `BROWSABLE` category to `geo` intent filter --- oeffi/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 4c1348c..28fa2d1 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -181,6 +181,7 @@ + From 332f0c06b8691f704dd3bad449217928a495a95b Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 3 Dec 2023 14:27:47 +0100 Subject: [PATCH 149/218] NetworkProviderFactory: remove custom API base for GVH --- .../src/de/schildbach/oeffi/network/NetworkProviderFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 787cba3..6a6a6d7 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -130,7 +130,7 @@ public final class NetworkProviderFactory { else if (networkId.equals(NetworkId.SH)) return new ShProvider("{\"aid\":\"r0Ot9FLFNAFxijLW\",\"type\":\"AID\"}"); 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)) return new BsvagProvider(); else if (networkId.equals(NetworkId.VBN)) From 2843f84b45e2faf5bc32f4dd9f7218a66dd787cd Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 3 Dec 2023 16:36:48 +0100 Subject: [PATCH 150/218] 12.1.16 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 28fa2d1..816791a 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120115" - android:versionName="12.1.15"> + android:versionCode="120116" + android:versionName="12.1.16"> Date: Sat, 16 Dec 2023 20:42:12 +0100 Subject: [PATCH 151/218] build.gradle: update AndroidX Annotation to 1.7.1 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 13d4afa..6f7ae73 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -13,7 +13,7 @@ configurations { dependencies { implementation project(':public-transport-enabler') - implementation 'androidx.annotation:annotation:1.7.0' + implementation 'androidx.annotation:annotation:1.7.1' implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' From 4b710e1aad23767d8db55c8d1e27efd475ab12ad Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 16 Dec 2023 20:46:22 +0100 Subject: [PATCH 152/218] build.gradle: update AndroidX Activity to 1.8.2 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 6f7ae73..ebb28f1 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' implementation 'androidx.core:core:1.12.0' - implementation 'androidx.activity:activity:1.8.1' + implementation 'androidx.activity:activity:1.8.2' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency From bcf34c1de9c56a63c346576069fb50b2112dd303 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 16 Dec 2023 20:48:55 +0100 Subject: [PATCH 153/218] 12.1.17 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 816791a..da34bed 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120116" - android:versionName="12.1.16"> + android:versionCode="120117" + android:versionName="12.1.17"> Date: Mon, 18 Dec 2023 00:00:17 +0100 Subject: [PATCH 154/218] networks.txt: remove SNCB (Belgium) --- oeffi/assets/networks.txt | 3 --- oeffi/res/drawable-xhdpi/network_sncb_icon.png | Bin 1427 -> 0 bytes oeffi/res/values-de/networks.xml | 2 -- oeffi/res/values/networks.xml | 2 -- oeffi/res/xml/network_security_config.xml | 1 - oeffi/src/de/schildbach/oeffi/Application.java | 6 ++++++ .../oeffi/network/NetworkProviderFactory.java | 3 --- 7 files changed, 6 insertions(+), 11 deletions(-) delete mode 100644 oeffi/res/drawable-xhdpi/network_sncb_icon.png diff --git a/oeffi/assets/networks.txt b/oeffi/assets/networks.txt index d13c8b3..538933b 100644 --- a/oeffi/assets/networks.txt +++ b/oeffi/assets/networks.txt @@ -61,9 +61,6 @@ PARIS|fr-FR|FR|alpha # ES SPAIN|es-ES|ES|alpha -# BE -SNCB|be-BE|BE|alpha - # LU LU|lb-LU|LU;Luxemburg diff --git a/oeffi/res/drawable-xhdpi/network_sncb_icon.png b/oeffi/res/drawable-xhdpi/network_sncb_icon.png deleted file mode 100644 index 67edda3db943acc68ad2b81e191c08eea461225f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1427 zcmV;E1#J3>P)dpn+a&e{3BXYV=hE4*Jgf4uMeyFB0X z{GQ))`Tf9$4<9~!`0(MwN1CCxw%`ire(lgtdY^Qy4s&XTKpKUw;Q>ZU0CW(?DFA9I zkuYdCJrr_E9GE3LZQ?&n3DBvF$mb6V2vbIngh8JrKsLp4%Ig~FBCF4f^K>$W9n1q@ zB$u7gz#tndd4W;efWD@i^aWu3O`q;!3RvR9EXjloC<15+tC+)O8D&6qJWT*}5@v9} zjqj0$v}!;Bp3tq@L=AHZurs;%0!OWfU=s0Rjc(M6fo`__EulQEW-kjFZ#^#t(4o3Y zFX%_HQ!0WU;&$V?7xO%iM0%I%c1eLkAkjamt63NGp`1EGG>{K8lTR(B(i!Ph!Y*=c z&VPavx$AKdz#BFR zD6-i@;{Qy@G%C8`2R8QxYo0(iK?&Q9Mt6Hg{8t!eDtU-^)0spJD+dB+6o zM57S`@|Oe{#U9tCAFTB$XJithGN#3Wj8hn|TXdpnk{O7}298k(KpPdZ2|(+3)CEm! zppf%)u$6t%mN?0Y$)fZzYJ2N8a#;}+Mi6p!QT;{(FLPQ+Yc~LQ$ zv#wL9mm*TrfIye);$N2{g;bZ2G;*+a7!J8apj{_P9M@)8O;ZFt!PivN#jmt5!Pt77 z!#7-@g>`-FMaJd8zP?b4_{Akn6iIzb1Y!uCq`(ydS0yi%Z8R3kT++bq)cim!=D0*) zgHr@n0@rEGIDs8~ccRn@%mxaXNH#kuWH9-h%m{%Y`lAfoh!wJ!CA<2De%g`rTx{S4 zm)UgDBLm-s;?gSMRhE#GMgqkgkW?I*F@@pGXJeX#UoDkJ`M?0ghxC={kIM9TiKU|f zfxugi3%--yBG<9_rcc#8u~y0rrH`VBpu1Cq)uy~IDs$z9UyXT!~~sEXmZHm^p&#)t1uaj zeVpNa&;Vm>jC9GYO6@2C4ahY8j8@JOWGU0><~Vz0rS*9sZN@h6H}{z}blMLfH-33^ zL|w+|4fmQ2?-M;Fhg~6%G}I`e#;ECVX)_x$qqPMwzg1>@$dOqMKRR0BX#x@kX$PtkHVJy#1|t9S0Qciaz1?c h@ZrOU4<9}Z@gETEdf*i5`~?62002ovPDHLkV1ivnpxpof diff --git a/oeffi/res/values-de/networks.xml b/oeffi/res/values-de/networks.xml index 750b7e3..73c1612 100644 --- a/oeffi/res/values-de/networks.xml +++ b/oeffi/res/values-de/networks.xml @@ -93,8 +93,6 @@ Lokal- und Regionalverkehr Spanien Lokal- und Regionalverkehr (z.B. Barcelona) - Belgien - Fern-, Regional und Lokalverkehr (z.B. Antwerpen, Gent, Charleroi, Brüssel) Luxemburg Lokal- und Regionalverkehr Niederlande diff --git a/oeffi/res/values/networks.xml b/oeffi/res/values/networks.xml index c4202a5..c9035c3 100644 --- a/oeffi/res/values/networks.xml +++ b/oeffi/res/values/networks.xml @@ -93,8 +93,6 @@ local and regional Spain local and regional (e.g. Barcelona) - Belgium - long-distance, regional and local (e.g. Antwerp, Ghent, Charleroi, Brussels) Luxembourg local and regional Netherlands diff --git a/oeffi/res/xml/network_security_config.xml b/oeffi/res/xml/network_security_config.xml index c3d91c4..d2d41f7 100644 --- a/oeffi/res/xml/network_security_config.xml +++ b/oeffi/res/xml/network_security_config.xml @@ -10,7 +10,6 @@ - www.belgianrail.be android.vrsinfo.de wojhati.rta.ae appefa10.verbundlinie.at diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index c64db6e..50599d5 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -121,6 +121,12 @@ public class Application extends android.app.Application { FavoriteStationsProvider.deleteFavoriteStations(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); + log.info("Migrations took {}", watch); } diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 6a6a6d7..2d16419 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -55,7 +55,6 @@ import de.schildbach.pte.RtProvider; import de.schildbach.pte.RtaChicagoProvider; import de.schildbach.pte.SeProvider; import de.schildbach.pte.ShProvider; -import de.schildbach.pte.SncbProvider; import de.schildbach.pte.SpainProvider; import de.schildbach.pte.StvProvider; import de.schildbach.pte.SydneyProvider; @@ -183,8 +182,6 @@ public final class NetworkProviderFactory { 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)) return new LuProvider("{\"type\":\"AID\",\"aid\":\"SkC81GuwuzL4e0\"}"); else if (networkId.equals(NetworkId.NS)) From 5815a985f52f3fd2131610575ec0d8b2b3d86ea4 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 18 Dec 2023 00:04:17 +0100 Subject: [PATCH 155/218] network_nri_icon.png, network_pl_icon.png, network_tfi_icon.png: remove some icons which were orphaned a while ago --- oeffi/res/drawable-xhdpi/network_nri_icon.png | Bin 1803 -> 0 bytes oeffi/res/drawable-xhdpi/network_pl_icon.png | Bin 1416 -> 0 bytes oeffi/res/drawable-xhdpi/network_tfi_icon.png | Bin 1509 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 oeffi/res/drawable-xhdpi/network_nri_icon.png delete mode 100644 oeffi/res/drawable-xhdpi/network_pl_icon.png delete mode 100644 oeffi/res/drawable-xhdpi/network_tfi_icon.png diff --git a/oeffi/res/drawable-xhdpi/network_nri_icon.png b/oeffi/res/drawable-xhdpi/network_nri_icon.png deleted file mode 100644 index 0b5115be676d5b9b5aba290943d686f637a89af3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1803 zcmV+m2lV)fP)3$g6vuxvEiIJV7D1FEyMm%f0%0k*9Sk6#hzc$QjS4P+qAVid5;cMgQAq$33@9Li zMl@_LX!Izp3JDrOAfOUuFBT}!f$kkY^wG|=uhZ#t`re&{^I_6^?>leK|DN-|_uOR) z7bH5O5$bu3F}|A)uPFD>MD>KH>oLImt100ar|~mVz5wmaUZ5{qrPN>#XyxZL{^St~ z87W`rRA3VTo4H6E845rFK_}=aK{MzGyh|eMbPN;J!(m__w{nIe?FQ;KE`+oNbBN=5 z>7stRpriw{SjJ(pxQ$c58P;(lZTXu^NG45uW&v2meH3yPLzzb=1Aqh4PWRH8Ozz+$ z0Dag}p)iz8d}0uQ9<--~wX9|fGiVNc!UD2@WBBL<9H)r%0F^`1MiI9-pr}XD%F%us z18E18GMDB6B#{NcrE~(IMUeS$xvmzsNUW`hXFmw~nxOM_F{KP^?#nSYMPq>&(h$Z^I4 z@!ZTd=7*XIJPjN`sjOlMFr6M8VM;9uH;`2sDB6ZUX$*jmKNu)yT?ipv$^8J_&F6Gw zcgTl#O1EnI`7{Pjk;cQa)X@;qB>h!0*ku(z1iq<7<*-fNe*n^qVXU=Rif^#apG;rI z(i%S=AO&b!i^fMbbvJCize&o_DpgEVtOt$Yf@l<2b3{qs4 zgW0G8ERY?*Q@|1WL6G?{UZ&SXWo=gl5WLQEN7HFRf25~H+NKl+HTqdd8+L=tC)ZXz zxmwLz?00NMrf@eeGniqlq(Dk_E{~BC2td5$>6pS8n|S|@;Zoq{nmCnNT+0+jvw%s! zg7Oihva58QSbmZfoUm#~G7o^yWDo_Bd~Nhbq49L$7am|eW69BEUaivZXLW$LhS8Ke zIL243r;I6l4ieGVMsXCHgc)t*R=N&x%pA>fR-o2SJ9r`^ppb7W3;py^ChYL8KI#h z3L&JqG@&2aas;#ynS8(^pqNJFNlHT}yYcnz|KFG>E3MLVyaDt9kOciSvT?;x52%M0 zl4Jdy$_e7EhH)$roRDaaLI>H#AQFHh(%PvVj%cP5T}dGUfI;e%{ZUP)x6&Dasj|zt zJ*KF6KxbO!!*=KTKS}@;;B9`giZ69;RWdT*!6I&k8 z(x6aO89?lCKmp2v-trE_5CB1E28H2YvcXvZo_c#Am$ZP2?(C3Q@qm_hKybcUGFrc=hu01p=9 zibNhly@_K|KzVK^0lC7D8TYQ}DcetgZlvXcW?TN;njBOnOw( z-SI$VqtHq6s+^?v!X@!U6#ZTb2)xUaBQ4zm;H|s)0$BuKMLGbnJ~@- z+oOgAu(XEz%+)1TZ#K{alE;@}&*I9H#sScW8CD1V5r*YL3Q3%;O9zPGuu&*%27n*0 z_|-TP`vOi~YV+PI#kduj)+L0BCBZNfEBNaJ-vka6vb7E@FmN6y<2b*Dshw{i0AMZ| zVf1Yo@6bVw1Tcx~!T?Y#Q#tAWu7t;CDcLAwo|#V$ZGqqE>Av}P9Dv>-H8QPrKnD}d zw-2Fx;$d=)8f~rpX(QHSwg4nsFSGeMNI7x;W3nuzBkR~@1_0ZsNIzz@P4z$0@%&A6 zO%|W~X++K2D)zrEec$2;AU+UNJ)j6$MAiQ&;NX4e`f>n}1ZHzEpz@ToR$>HzB`?qo tAAaBrPfIg3BxLF=+S`P^hYMn^{14(u;}piIt!e-O002ovPDHLkV1ftsKF9z7 diff --git a/oeffi/res/drawable-xhdpi/network_pl_icon.png b/oeffi/res/drawable-xhdpi/network_pl_icon.png deleted file mode 100644 index 58f18d457c0a1c4d8024e07fcedccecfc427d925..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1416 zcmV;31$X+1P)1i$6vuyWX(>xfp-|buLMc?BRjC4sM+Z!JMI*DypcWTACt0KZOj2lgl>}bO1mHu$9Si46NZC z(2F8Dr9=6Esn>qLL=ESuwGcB|b0=)R~X5Tu!#WAs z+{BtfC&n?GsSHe7teHg_hb;rBm%A9wG>XYdadLjyK^sND521hd@W=(4vggU zcF{F?>PPozm&5s!e>rDRzMMjidaMC7aK)&Uzgsl79UkDaQ2<4Bu>>I1>@^DDiD(AtQPc z53yN$*#jstrlj=S11K;Apppg~04h9Y2*5y6>{y_;F)7^<8x~NHl(EtffE{wdGJu4@ zkX#4`tIbVZg&F~{lq`Dy2bjhV0|0Wd7Y8InJ*7t2pv9gAkdPr|&D)x33jnC)q5()gn4X^xdB+1B+40icib zE+PJAO0@FBqT~FUXQU-|rk5b;SVD3@=dg|;39-gi9*~&bK?gd}I*LKDn&NT%`ySqr z<*^4kklRQ(Ke4UDVe1oC$1~99gyVP~E-;$D9e6}FPfA0))s7?52iZ+F05vqw&(h67 zrpTZ14RtO(u4E@oz%h#XF6wG;uY(+m_ceZ}<}X2AK`I55$Ul0L(TpGi4{((|jKxO= zaG29nQb>Rax7cVXovDj=vp6R8kwu!Ex)%7>@)GbfKk_k?>B@`rU?qE`R{IlRCV9Md zV?6{Yl0eb{+Tg5ZHC~2sqBS&W4yjb#oZ;wtmfzR|qoSW#zYR;M&Ggeb!URTMpFT+Y z=KVU#*+3T1lOdcn%>rI&xjFTSQ1NwQ1dCXJk32cUohlusTQvn&u3Wit<;s;Sr}ZCD W(_L9FCiB_=0000jO^8d{m?rkk77ZSUJ3ds$Owoy+r_&3Jz>*m=(TJm>qn|DNA@ z4kRf_NlH?Zt}Rldt2vxvH@J<8PPb066M$SMv!57koaGc%(o;0h zZWLO~L1H*KKnpoE0uU!(PUufWsbM_POD1lW`@KFZ)r#lvC!@1)^0>J$H^%SB)~ zP;|w-q4We3QkV>+UpAbQkbjMSp?_UvYLULv158M#uqgr8J2gsn_dD^MzTrcbuIYXT zwg;MhkGEWHgMl@HW)Ify>D`S!pcB{;c#$*ok$C7DNGQI-z*0Hx1sgF4f0!Q9IE};u zF4f93iFJbsX*D++Stx^YBD^ohLuEjrgeMurKtPFdM_@n5m5?>iUI9JJ53&ukl+6Jb z%$GmAt(?|UHWLrH`bt^UU9}LD84%9MZb)PbkgYE=$;5`jO-43dPWRJt78_d2RYjHR zL&h0${&Lstpc=A`31f_yW z5msF?+*fM#99b-48dc1qC9q$$QpS2F%1+Y^yvkfMx(JSw*kUjkG)WeyL)=}D!ix!I z@*oSi`-<^xM#DfIfVi%wyhyH)>Mr1$rt9qO$fnD$)LMl8C`Xw?jaYah^i8O&@M zt(AS%U;mXd8cQ?2TCk6 zkZRS56$<%=ZOpO8K!#@8&%{xhX{EtZO_V36ZL95qI9;T(Gvt`S?;XBp20Dt}`3z?$ zQI4~ZPo+xR%%nuMS5E)yW9!Ulpc`Iv>vUe{Z7=V%+$lH|4JbIoj5=|>cosz@khnG( zjzVoAYCs`_Cc_LMPG}ksDDDYWc#z=N+c=uKFij{kasJ2Pu9#xlyau9F-yV=-T>g#X z!-@UofeDPhpERmNe+b?3*2&S z2&Ju}xAGk|%#-aphCvLVjU$xslmQQjiLYZ)UVUJXIG{rS#Ue|Da~73;2%CU?Uf3B3DOnpP`r&0a}TZ2HZ$K$1G_;ppuP1lw4o|1qQ&!nL#a+ zB~5xUlXP+X!gps7H+6*2hr|g~^E^y8V5*rkH0F#0@uDF^`H_Zt`!CInOYD8MsTuuNj6 zOvaZ91t{Hq<1uzi1J=l$2@L~IbX*;D{i z41C2(ewM@LiUZpWWYfSivO=?2&PmqG?_67?=_DyhNlH?Z{y+3LZ)AasprVb000000 LNkvXXu0mjfqMx%b From 4c8d26dee7024f2e6bbcd69c4ab3c8faf3ace393 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 18 Dec 2023 00:23:42 +0100 Subject: [PATCH 156/218] 12.1.18 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index da34bed..64f5674 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120117" - android:versionName="12.1.17"> + android:versionCode="120118" + android:versionName="12.1.18"> Date: Mon, 1 Jan 2024 20:38:50 +0100 Subject: [PATCH 157/218] strings.xml: update year of copyright --- oeffi/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/res/values/strings.xml b/oeffi/res/values/strings.xml index 4e41937..e4d1657 100644 --- a/oeffi/res/values/strings.xml +++ b/oeffi/res/values/strings.xml @@ -46,7 +46,7 @@ About Offi Copyright - © 2010-2023, the Öffi developers + © 2010-2024, the Öffi developers License Privacy Policy https://oeffi.schildbach.de/privacy_policy.txt From 8836b3df20c7903a39fa5843c994a447eb06c7fe Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 27 Apr 2024 10:33:41 +0200 Subject: [PATCH 158/218] plans-index.txt: sync plans metadata --- oeffi/assets/plans-index.txt | 85 +++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 39 deletions(-) diff --git a/oeffi/assets/plans-index.txt b/oeffi/assets/plans-index.txt index 43f896d..8a86281 100644 --- a/oeffi/assets/plans-index.txt +++ b/oeffi/assets/plans-index.txt @@ -3,11 +3,11 @@ # de -berlin_bsu_ab|52.520134,13.388018|2020-10-31|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_tram|52.521152,13.412832|2020-04-14|Berlin Tram-Netz|Berliner Verkehrsbetriebe||BVG -berlin_bus|52.5071378,13.3318680|2019-12-15|Berlin Bus-Netz|Berliner Verkehrsbetriebe||BVG -berlin_nacht|52.520134,13.388018|2020-10-31|Berlin Nachtverkehr (geografisch)|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|2022-12-11|Berlin S+U-Bahn-Netz (ABC)|Berliner Verkehrsbetriebe||BVG +berlin_tram|52.521152,13.412832|2022-12-16|Berlin Tram-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|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_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 @@ -42,10 +42,10 @@ augsburg|48.364936,10.893713|2018-12|Augsburg Innenraum|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_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_verkehrsnetz|49.445719,11.082618|2019-12-01|Nürnberg, Fürth, Stein Verkehrsnetz|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_nightliner|49.445719,11.082618|2019-12-01|Nürnberg, Fürth Nightliner|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|2023-12-10|Nürnberg-Fürth Liniennetz|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|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_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 @@ -59,26 +59,26 @@ regensburg_nacht|49.011489,12.09971|2018-04-14|Regensburg Nachtbus|Regensburger bremen|53.08319,8.81360|2020-03|Bremen Liniennetz|BSAG bremen_nacht|53.08319,8.81360||Bremen Nachtnetz|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_metrobus_gross|53.552946,10.006782|2021-12-12|Hamburg MetroBus Liniennetz|HVV -hamburg_region|53.552946,10.006782|2022-01-01|Hamburg Regionalverkehr|HVV -hamburg_weiss_bus|53.552946,10.006782|2021-12-12|Hamburg Busliniennetz|Lucas Weiss +hamburg_usar|53.552946,10.006782|2023-12-10|Hamburg Schnellbahn/Regional|HVV +hamburg_metrobus_gross|53.552946,10.006782|2023-12-10|Hamburg MetroBus Liniennetz|HVV +hamburg_region|53.552946,10.006782|2023-12-10|Hamburg Regionalverkehr|HVV +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_nacht|54.313282,10.132341|2019-12|Kiel Nachtliniennetz|KVG 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_region|54.078139,12.131724|2022-01-01|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_vvw_liniennetz|54.078139,12.131724|2023-08-28|Rostock Liniennetz|Verkehrsverbund Warnow +rostock_vvw_region|54.078139,12.131724|2023-08-28|Rostock Region|Verkehrsverbund Warnow +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 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_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_nacht|48.77861,9.179803|2018-12|Stuttgart Nachtverkehr|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|2023-12|Stuttgart Nachtverkehr|Verkehrs- und Tarifverbund Stuttgart GmbH ringzug|48.113621,8.660603|2013-08|Ringzug|Zweckverband Ringzug -hannover_stadtbahn|52.376715,9.741168|2021-12|Hannover Stadtbahnnetz|GVH -hannover_bus|52.376715,9.741168|2021-12|Hannover Busnetz|GVH -hannover_regional|52.376715,9.741168|2021-12|Hannover Regional- und S-Bahn-Linien|GVH +hannover_stadtbahn|52.376715,9.741168|2023-12-10|Hannover Stadtbahnnetz|GVH +hannover_bus|52.376715,9.741168|2023-12-10|Hannover Busnetz|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_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 @@ -89,10 +89,17 @@ 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_tag|51.451355,7.014793|2015-06-14|Essen TagNetz|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 -krefeld_stadt_nacht|51.323714,6.565800|2013-06|Krefeld Nachtnetz|SWK/VRR +dortmund_schiene|51.517843,7.459272|2023-01|Dortmund Schienennetz|DSW21 +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_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_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 @@ -106,29 +113,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 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 -darmstadt|49.872582,8.630916|2021-12-12|Darmstadt Stadt|Darmstadt-Dieburger Nahverkehrsorganisation -darmstadt_nacht|49.872582,8.630916|2021-12-12|Darmstadt NightLiner|Darmstadt-Dieburger Nahverkehrsorganisation -darmstadt_region|49.872582,8.630916|2021-12-12|Darmstadt-Dieburg Region|Darmstadt-Dieburger Nahverkehrsorganisation -duesseldorf|51.230794,6.769025|2018-08-29|Düsseldorf Liniennetz|Rheinbahn -duesseldorf_nacht|51.230794,6.769025|2018-08-29|Düsseldorf Nachtlinien|Rheinbahn +darmstadt|49.872582,8.630916|2023-12-10|Darmstadt Stadt|Darmstadt-Dieburger Nahverkehrsorganisation +darmstadt_nacht|49.872582,8.630916|2023-12-10|Darmstadt NightLiner|Darmstadt-Dieburger Nahverkehrsorganisation +darmstadt_region|49.872582,8.630916|2023-12-10|Darmstadt-Dieburg Region|Darmstadt-Dieburger Nahverkehrsorganisation +duesseldorf|51.230794,6.769025|2024-01-07|Düsseldorf Liniennetz|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 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_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 -hagen|51.362675,7.461087|2022-06-12|Hagen Liniennetz|Hagener Straßenbahn AG -hagen_nacht|51.362675,7.461087|2022-06-12|Hagen Nachtnetz|Hagener Straßenbahn AG -braunschweig_gesamt|52.252187,10.539705|2021-04-11|Braunschweig Liniennetz|Braunschweiger Verkehrs-GmbH -braunschweig_nacht|52.252187,10.539705|2021-04-11|Braunschweig Nachtnetz|Braunschweiger Verkehrs-GmbH +hagen|51.362675,7.461087|2024-01-08|Hagen Liniennetz|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|2024-03-18|Braunschweig Liniennetz|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 wolfenbuettel|52.15898,10.532012|2021-10|Wolfenbüttel 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 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_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 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 @@ -148,8 +155,8 @@ rhein_neckar_regio|49.481844,8.459115|2019-11|Rhein-Neckar Regionalverkehr|RNV G # at -linz|48.290893,14.291965|2018-10|Linz Verkehrslinienplan|Linz AG -linz_nacht|48.290893,14.291965|2016-12|Linz Nachtverkehr|Linz AG +linz|48.290893,14.291965|2024-01|Linz Verkehrslinienplan|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_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 @@ -224,7 +231,7 @@ istanbul_rail|41.011939,28.984308|2015-09|Istanbul Rail Transit|Maximilian Dörr # 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_rail|51.513507,-0.110264|2016-05|London Rail & Tube Services|TfL london_bus|51.513507,-0.110264|2016|London Bus (geographical)|TfL @@ -244,7 +251,7 @@ napoli_region|40.852780,14.271692||Napoli Region|Unico Campania # 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 # po @@ -280,7 +287,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_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 -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 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 From f4ce1d0e4384d97126a0940b99654d03859d21dd Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 27 Apr 2024 12:22:12 +0200 Subject: [PATCH 159/218] build.gradle: update Guava to 33.1.0-android --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index ebb28f1..b40c31c 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' - implementation 'com.google.guava:guava:32.1.3-android' + implementation 'com.google.guava:guava:33.1.0-android' implementation 'org.osmdroid:osmdroid-android:6.1.17' implementation 'org.slf4j:slf4j-api:2.0.9' implementation 'com.github.tony19:logback-android:3.0.0' From 33284c92c2a26d066b66153e82d2a28c2ac29c26 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 27 Apr 2024 12:32:41 +0200 Subject: [PATCH 160/218] build.gradle: update AndroidX Core to 1.13.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index b40c31c..5e68c4d 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -17,7 +17,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' - implementation 'androidx.core:core:1.12.0' + implementation 'androidx.core:core:1.13.0' implementation 'androidx.activity:activity:1.8.2' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' From 71e68765cda72e4b0c4b61831b54012ad09a2610 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 27 Apr 2024 12:34:21 +0200 Subject: [PATCH 161/218] build.gradle: update AndroidX Activity to 1.9.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 5e68c4d..52a3ff0 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' implementation 'androidx.core:core:1.13.0' - implementation 'androidx.activity:activity:1.8.2' + implementation 'androidx.activity:activity:1.9.0' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency From 70c1ac5fa4c1bd777a9aa41adda5cfc56337c314 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 27 Apr 2024 12:45:13 +0200 Subject: [PATCH 162/218] build.gradle: lock SLF4J to 2.0.9 --- oeffi/build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 52a3ff0..0e9fbad 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -12,7 +12,9 @@ configurations { } dependencies { - implementation project(':public-transport-enabler') + implementation(project(':public-transport-enabler')) { + exclude group: 'org.slf4j', module: 'slf4j-api' + } implementation 'androidx.annotation:annotation:1.7.1' implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' @@ -25,6 +27,7 @@ dependencies { implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' implementation 'com.google.guava:guava:33.1.0-android' implementation 'org.osmdroid:osmdroid-android:6.1.17' + //noinspection GradleDependency implementation 'org.slf4j:slf4j-api:2.0.9' implementation 'com.github.tony19:logback-android:3.0.0' testImplementation 'junit:junit:4.13.2' From 17727a1e3a1939f442024ed144dbd7abe978ba2d Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 27 Apr 2024 10:29:54 +0200 Subject: [PATCH 163/218] Application: migrate MVV to new station IDs --- oeffi/src/de/schildbach/oeffi/Application.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index 50599d5..124da79 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -127,6 +127,10 @@ public class Application extends android.app.Application { 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); + log.info("Migrations took {}", watch); } From afdd237cca3828da63aa4c512c019b160d9ebed9 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 27 Apr 2024 12:50:28 +0200 Subject: [PATCH 164/218] Application: remove a couple of old database migrations --- oeffi/src/de/schildbach/oeffi/Application.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index 124da79..ab271df 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -91,18 +91,6 @@ public class Application extends android.app.Application { for (final File file : getFilesDir().listFiles(filter)) 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 final String VMS = "VMS"; migrateSelectedNetwork(VMS, NetworkId.VVO); From 1a7e46a3af0d80940ab680f9b1eaa8498e6b801d Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 27 Apr 2024 12:53:00 +0200 Subject: [PATCH 165/218] 12.1.19 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 64f5674..77bd2c9 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120118" - android:versionName="12.1.18"> + android:versionCode="120119" + android:versionName="12.1.19"> Date: Fri, 3 May 2024 10:08:28 +0200 Subject: [PATCH 166/218] build.gradle: update Guava to 33.2.0-android --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 0e9fbad..24e3715 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' - implementation 'com.google.guava:guava:33.1.0-android' + implementation 'com.google.guava:guava:33.2.0-android' implementation 'org.osmdroid:osmdroid-android:6.1.17' //noinspection GradleDependency implementation 'org.slf4j:slf4j-api:2.0.9' From f7f93c1a889b8804200eaa5cc63ddc8883912a2f Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 3 May 2024 15:49:36 +0200 Subject: [PATCH 167/218] 12.1.20 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 77bd2c9..fc20b4d 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120119" - android:versionName="12.1.19"> + android:versionCode="120120" + android:versionName="12.1.20"> Date: Thu, 30 May 2024 17:05:38 +0200 Subject: [PATCH 168/218] build.gradle: update AndroidX Core to 1.13.1 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 24e3715..95ccf9d 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' - implementation 'androidx.core:core:1.13.0' + implementation 'androidx.core:core:1.13.1' implementation 'androidx.activity:activity:1.9.0' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' From c6dcce604965ccd7068ccf75ee67b7c3aa81cb5c Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 1 Jun 2024 13:05:15 +0200 Subject: [PATCH 169/218] build.gradle: update Guava to 33.2.1-android --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 95ccf9d..c57a613 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' - implementation 'com.google.guava:guava:33.2.0-android' + implementation 'com.google.guava:guava:33.2.1-android' implementation 'org.osmdroid:osmdroid-android:6.1.17' //noinspection GradleDependency implementation 'org.slf4j:slf4j-api:2.0.9' From 30d2e47fc942f5d3c7f806c808f9a753d9549a78 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 6 Jun 2024 11:28:37 +0200 Subject: [PATCH 170/218] build.gradle: update AndroidX Annotation to 1.8.0 --- oeffi/build.gradle | 2 +- oeffi/proguard.cfg | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index c57a613..dd91d5f 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -15,7 +15,7 @@ dependencies { implementation(project(':public-transport-enabler')) { exclude group: 'org.slf4j', module: 'slf4j-api' } - implementation 'androidx.annotation:annotation:1.7.1' + implementation 'androidx.annotation:annotation:1.8.0' implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' diff --git a/oeffi/proguard.cfg b/oeffi/proguard.cfg index 8253ee2..8df31dd 100644 --- a/oeffi/proguard.cfg +++ b/oeffi/proguard.cfg @@ -55,6 +55,7 @@ -dontwarn androidx.lifecycle.SavedStateHandle -dontwarn androidx.activity.Api34Impl -dontwarn androidx.activity.BackEventCompat +-dontnote androidx.activity.ImmLeaksCleaner$Companion$** -dontwarn androidx.core.view.accessibility.AccessibilityNodeInfoCompat$AccessibilityActionCompat -dontwarn androidx.**$Api34Impl,androidx.**$Api34Impl$** From 23a1daf92b779577b0518584e38259f19cb5fc96 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 6 Jun 2024 11:31:01 +0200 Subject: [PATCH 171/218] 12.1.21 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index fc20b4d..0986153 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120120" - android:versionName="12.1.20"> + android:versionCode="120121" + android:versionName="12.1.21"> Date: Wed, 12 Jun 2024 18:07:00 +0200 Subject: [PATCH 172/218] Toast: remove stray imports --- oeffi/src/de/schildbach/oeffi/util/Toast.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/util/Toast.java b/oeffi/src/de/schildbach/oeffi/util/Toast.java index e823108..35388d8 100644 --- a/oeffi/src/de/schildbach/oeffi/util/Toast.java +++ b/oeffi/src/de/schildbach/oeffi/util/Toast.java @@ -18,9 +18,6 @@ package de.schildbach.oeffi.util; import android.content.Context; -import android.graphics.PorterDuff; -import android.widget.TextView; -import de.schildbach.oeffi.R; public class Toast { private final Context context; From d92615efd9ac4bab89fa1ee354495adb43aadfd5 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 12 Jun 2024 17:50:22 +0200 Subject: [PATCH 173/218] OeffiMainActivity, PreferenceActivity: always show donate option --- oeffi/src-aosp/de/schildbach/oeffi/Variants.java | 1 - oeffi/src-google/de/schildbach/oeffi/Variants.java | 1 - oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java | 5 +---- .../de/schildbach/oeffi/preference/PreferenceActivity.java | 6 ++---- 4 files changed, 3 insertions(+), 10 deletions(-) diff --git a/oeffi/src-aosp/de/schildbach/oeffi/Variants.java b/oeffi/src-aosp/de/schildbach/oeffi/Variants.java index 8f26f91..0fbc2a1 100644 --- a/oeffi/src-aosp/de/schildbach/oeffi/Variants.java +++ b/oeffi/src-aosp/de/schildbach/oeffi/Variants.java @@ -18,5 +18,4 @@ package de.schildbach.oeffi; public class Variants { - public static final boolean ENABLE_DONATE = true; } diff --git a/oeffi/src-google/de/schildbach/oeffi/Variants.java b/oeffi/src-google/de/schildbach/oeffi/Variants.java index 3fe9f90..0fbc2a1 100644 --- a/oeffi/src-google/de/schildbach/oeffi/Variants.java +++ b/oeffi/src-google/de/schildbach/oeffi/Variants.java @@ -18,5 +18,4 @@ package de.schildbach.oeffi; public class Variants { - public static final boolean ENABLE_DONATE = false; } diff --git a/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java b/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java index fbab782..8a648ac 100644 --- a/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java +++ b/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java @@ -130,8 +130,6 @@ public abstract class OeffiMainActivity extends OeffiActivity { directionsItem.setChecked(OeffiMainActivity.this instanceof DirectionsActivity); final MenuItem plansItem = menu.findItem(R.id.global_options_plans); plansItem.setChecked(OeffiMainActivity.this instanceof PlansPickerActivity); - final MenuItem donateItem = menu.findItem(R.id.global_options_donate); - donateItem.setVisible(Variants.ENABLE_DONATE); } @Override @@ -174,8 +172,7 @@ public abstract class OeffiMainActivity extends OeffiActivity { } 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; } diff --git a/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java b/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java index ff08703..182a1c0 100644 --- a/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java +++ b/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java @@ -21,7 +21,6 @@ import android.app.Activity; import android.content.Intent; import android.view.MenuItem; import de.schildbach.oeffi.R; -import de.schildbach.oeffi.Variants; import java.util.List; @@ -39,8 +38,7 @@ public class PreferenceActivity extends android.preference.PreferenceActivity { @Override public void onBuildHeaders(final List

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 @@ -59,6 +57,6 @@ public class PreferenceActivity extends android.preference.PreferenceActivity { return CommonFragment.class.getName().equals(fragmentName) || DirectionsFragment.class.getName().equals(fragmentName) || AboutFragment.class.getName().equals(fragmentName) - || (Variants.ENABLE_DONATE && DonateFragment.class.getName().equals(fragmentName)); + || DonateFragment.class.getName().equals(fragmentName); } } From b0ea770ba3e0811753fcbffb6d3e5f1f6af0e726 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 12 Jun 2024 17:53:44 +0200 Subject: [PATCH 174/218] build.gradle: remove product flavors --- build.Containerfile | 2 +- oeffi/build.gradle | 18 ---------------- .../de/schildbach/oeffi/Variants.java | 21 ------------------- .../de/schildbach/oeffi/Variants.java | 21 ------------------- .../src/de/schildbach/oeffi/Application.java | 9 -------- .../de/schildbach/oeffi/OeffiActivity.java | 7 +------ .../schildbach/oeffi/OeffiMainActivity.java | 9 +------- .../schildbach/oeffi/util/ErrorReporter.java | 5 +---- settings.gradle | 3 +-- 9 files changed, 5 insertions(+), 90 deletions(-) delete mode 100644 oeffi/src-aosp/de/schildbach/oeffi/Variants.java delete mode 100644 oeffi/src-google/de/schildbach/oeffi/Variants.java diff --git a/build.Containerfile b/build.Containerfile index 0774630..a33b6a7 100644 --- a/build.Containerfile +++ b/build.Containerfile @@ -48,4 +48,4 @@ RUN if [ -e /dev/fuse ] ; \ # export build output 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 / diff --git a/oeffi/build.gradle b/oeffi/build.gradle index dd91d5f..9672ca7 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -53,18 +53,6 @@ android { } } - flavorDimensions 'flavor' - productFlavors { - aosp { - dimension 'flavor' - versionNameSuffix '-aosp' - } - google { - dimension 'flavor' - versionNameSuffix '-google' - } - } - sourceSets { main { manifest.srcFile 'AndroidManifest.xml' @@ -75,12 +63,6 @@ android { test { java.srcDirs = ['test'] } - aosp { - java.srcDirs = ['src-aosp'] - } - google { - java.srcDirs = ['src-google'] - } } compileOptions { diff --git a/oeffi/src-aosp/de/schildbach/oeffi/Variants.java b/oeffi/src-aosp/de/schildbach/oeffi/Variants.java deleted file mode 100644 index 0fbc2a1..0000000 --- a/oeffi/src-aosp/de/schildbach/oeffi/Variants.java +++ /dev/null @@ -1,21 +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 . - */ - -package de.schildbach.oeffi; - -public class Variants { -} diff --git a/oeffi/src-google/de/schildbach/oeffi/Variants.java b/oeffi/src-google/de/schildbach/oeffi/Variants.java deleted file mode 100644 index 0fbc2a1..0000000 --- a/oeffi/src-google/de/schildbach/oeffi/Variants.java +++ /dev/null @@ -1,21 +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 . - */ - -package de.schildbach.oeffi; - -public class Variants { -} diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index ab271df..6196856 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -197,13 +197,4 @@ public class Application extends android.app.Application { public static final int versionCode(final Application application) { 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; - } } diff --git a/oeffi/src/de/schildbach/oeffi/OeffiActivity.java b/oeffi/src/de/schildbach/oeffi/OeffiActivity.java index 8ab20f5..04c5e2b 100644 --- a/oeffi/src/de/schildbach/oeffi/OeffiActivity.java +++ b/oeffi/src/de/schildbach/oeffi/OeffiActivity.java @@ -50,8 +50,7 @@ public abstract class OeffiActivity extends ComponentActivity { this.application = (Application) getApplication(); this.prefs = PreferenceManager.getDefaultSharedPreferences(this); - ErrorReporter.getInstance().check(this, applicationVersionCode(), applicationVersionFlavor(), - application.okHttpClient()); + ErrorReporter.getInstance().check(this, applicationVersionCode(), application.okHttpClient()); } protected void updateFragments(final int listFrameResId, final int mapFrameResId) { @@ -100,10 +99,6 @@ public abstract class OeffiActivity extends ComponentActivity { return Application.versionCode(application); } - protected final String applicationVersionFlavor() { - return Application.versionFlavor(application); - } - protected final long applicationFirstInstallTime() { return application.packageInfo().firstInstallTime; } diff --git a/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java b/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java index 8a648ac..1d3bba0 100644 --- a/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java +++ b/oeffi/src/de/schildbach/oeffi/OeffiMainActivity.java @@ -341,18 +341,11 @@ public abstract class OeffiMainActivity extends OeffiActivity { private void downloadAndProcessMessages(final String network) { final HttpUrl.Builder remoteUrl = Constants.MESSAGES_BASE_URL.newBuilder(); - final StringBuilder remoteFileName = new StringBuilder("messages"); - final String flavor = applicationVersionFlavor(); - if (flavor != null) - remoteFileName.append('-').append(flavor); - remoteFileName.append(".txt"); - remoteUrl.addPathSegment(remoteFileName.toString()); + remoteUrl.addPathSegment("messages.txt"); final String installerPackageName = Installer.installerPackageName(this); if (installerPackageName != null) remoteUrl.addEncodedQueryParameter("installer", installerPackageName); remoteUrl.addQueryParameter("version", Integer.toString(versionCode)); - if (flavor != null) - remoteUrl.addQueryParameter("flavor", flavor); remoteUrl.addQueryParameter("sdk", Integer.toString(Build.VERSION.SDK_INT)); remoteUrl.addQueryParameter("task", taskName()); final File localFile = new File(getFilesDir(), "messages.txt"); diff --git a/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java b/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java index 4ffd60e..a7cc80a 100644 --- a/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java +++ b/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java @@ -315,15 +315,12 @@ public class ErrorReporter implements Thread.UncaughtExceptionHandler { private final static Pattern PATTERN_VERSION = Pattern.compile("
([^<]*)
"); - public void check(final Context context, final int applicationVersionCode, final String applicationVersionFlavor, - final OkHttpClient okHttpClient) { + public void check(final Context context, final int applicationVersionCode, final OkHttpClient okHttpClient) { if (!stackTraceFile.exists()) return; final HttpUrl.Builder url = HttpUrl.parse(context.getString(R.string.about_changelog_summary)).newBuilder(); url.addQueryParameter("version", Integer.toString(applicationVersionCode)); - if (applicationVersionFlavor != null) - url.addQueryParameter("flavor", applicationVersionFlavor); url.addQueryParameter("sdk", Integer.toString(Build.VERSION.SDK_INT)); url.addQueryParameter("check", null); final Request.Builder request = new Request.Builder().url(url.build()); diff --git a/settings.gradle b/settings.gradle index 930ac5a..7fe5e56 100644 --- a/settings.gradle +++ b/settings.gradle @@ -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) gradle.startParameter.excludedTaskNames << "lint" -gradle.startParameter.excludedTaskNames << ":oeffi:lintVitalAospRelease" -gradle.startParameter.excludedTaskNames << ":oeffi:lintVitalGoogleRelease" +gradle.startParameter.excludedTaskNames << ":oeffi:lintVitalRelease" include 'oeffi' include 'public-transport-enabler' From df63f54ab1dec09b1d6dac2e3e6dc471eb33995e Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 12 Jun 2024 18:17:18 +0200 Subject: [PATCH 175/218] build.Containerfile: reference build to use OpenJDK 17 --- build.Containerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.Containerfile b/build.Containerfile index a33b6a7..39577c6 100644 --- a/build.Containerfile +++ b/build.Containerfile @@ -14,12 +14,12 @@ # 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 ENV DEBIAN_FRONTEND noninteractive RUN /usr/bin/apt-get update && \ - /usr/bin/apt-get --yes install disorderfs openjdk-11-jdk-headless gradle sdkmanager && \ + /usr/bin/apt-get --yes install disorderfs openjdk-17-jdk-headless gradle sdkmanager && \ /bin/ln -fs /usr/share/zoneinfo/CET /etc/localtime && \ /usr/sbin/dpkg-reconfigure --frontend noninteractive tzdata && \ /bin/ln -s /proc/self/mounts /etc/mtab && \ From b1e17c5795f47c9033ecef4ab680c1fa2a169d40 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 12 Jun 2024 18:43:41 +0200 Subject: [PATCH 176/218] .gitlab-ci.yml: remove builds based on OpenJDK 11 or on Ubuntu The reference build is now using OpenJDK 17 on Debian Bookworm. --- .gitlab-ci.yml | 39 --------------------------------------- 1 file changed, 39 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f04863e..69b5f38 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -19,19 +19,6 @@ reference: paths: - 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: image: debian:bookworm-slim script: @@ -44,29 +31,3 @@ bookworm-jdk17: name: oeffi-$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA paths: - 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 From 4a17ef441f6ca29bfef11714fb13cf1d087b93e4 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 12 Jun 2024 19:14:36 +0200 Subject: [PATCH 177/218] AndroidManifest.xml: require Android 7.0 (Nougat) --- oeffi/AndroidManifest.xml | 2 +- oeffi/src/de/schildbach/oeffi/OeffiActivity.java | 8 -------- .../schildbach/oeffi/network/NetworkPickerActivity.java | 8 -------- .../de/schildbach/oeffi/preference/CommonFragment.java | 3 --- oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java | 3 +-- 5 files changed, 2 insertions(+), 22 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 0986153..ac194ca 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -24,7 +24,7 @@ android:versionName="12.1.21"> diff --git a/oeffi/src/de/schildbach/oeffi/OeffiActivity.java b/oeffi/src/de/schildbach/oeffi/OeffiActivity.java index 04c5e2b..a4f76a1 100644 --- a/oeffi/src/de/schildbach/oeffi/OeffiActivity.java +++ b/oeffi/src/de/schildbach/oeffi/OeffiActivity.java @@ -17,12 +17,10 @@ package de.schildbach.oeffi; -import android.annotation.TargetApi; import android.app.ActivityManager.TaskDescription; import android.content.SharedPreferences; import android.content.res.Resources; import android.graphics.drawable.Drawable; -import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.text.format.DateUtils; @@ -152,10 +150,4 @@ public abstract class OeffiActivity extends ComponentActivity { return str; } - - @TargetApi(24) - @Override - public boolean isInMultiWindowMode() { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && super.isInMultiWindowMode(); - } } diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java index f18c129..ba5c8fd 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java @@ -18,7 +18,6 @@ package de.schildbach.oeffi.network; import android.Manifest; -import android.annotation.TargetApi; import android.app.ActivityManager.TaskDescription; import android.content.Context; import android.content.Intent; @@ -29,7 +28,6 @@ import android.content.res.Resources; import android.location.Address; import android.location.Criteria; import android.location.LocationManager; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; @@ -571,10 +569,4 @@ public class NetworkPickerActivity extends ComponentActivity implements Location actionBar.setBackgroundColor(color); setTaskDescription(new TaskDescription(null, null, color)); } - - @TargetApi(24) - @Override - public boolean isInMultiWindowMode() { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && super.isInMultiWindowMode(); - } } diff --git a/oeffi/src/de/schildbach/oeffi/preference/CommonFragment.java b/oeffi/src/de/schildbach/oeffi/preference/CommonFragment.java index cd73015..9486a15 100644 --- a/oeffi/src/de/schildbach/oeffi/preference/CommonFragment.java +++ b/oeffi/src/de/schildbach/oeffi/preference/CommonFragment.java @@ -17,7 +17,6 @@ package de.schildbach.oeffi.preference; -import android.os.Build; import android.os.Bundle; import android.preference.PreferenceFragment; import de.schildbach.oeffi.R; @@ -25,13 +24,11 @@ import de.schildbach.oeffi.R; import javax.annotation.Nullable; public class CommonFragment extends PreferenceFragment { - private static final String KEY_BATTERY_OPTIMIZATIONS = "battery_optimizations"; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference_common); - findPreference(KEY_BATTERY_OPTIMIZATIONS).setEnabled(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M); } } diff --git a/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java b/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java index a7cc80a..cbc90ce 100644 --- a/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java +++ b/oeffi/src/de/schildbach/oeffi/util/ErrorReporter.java @@ -181,8 +181,7 @@ public class ErrorReporter implements Thread.UncaughtExceptionHandler { report.append("Manufacturer: " + Build.MANUFACTURER + "\n"); report.append("Phone Model: " + Build.MODEL + "\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), Strings.emptyToNull(Build.CPU_ABI2))).append("\n"); report.append("Board: " + Build.BOARD + "\n"); From 05d3623c3440f6a960bffbd4b4574ca2221a2998 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 12 Jun 2024 21:33:58 +0200 Subject: [PATCH 178/218] 13.0 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index ac194ca..5196ee1 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="120121" - android:versionName="12.1.21"> + android:versionCode="130000" + android:versionName="13.0"> Date: Tue, 25 Jun 2024 18:44:06 +0200 Subject: [PATCH 179/218] plans-index.txt: sync plans metadata --- oeffi/assets/plans-index.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/oeffi/assets/plans-index.txt b/oeffi/assets/plans-index.txt index 8a86281..c4bb1a5 100644 --- a/oeffi/assets/plans-index.txt +++ b/oeffi/assets/plans-index.txt @@ -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 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 +jena|50.9248984,11.587666|2024|Jena|Jenaer Nahverkehr GmbH 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_nacht|48.140377,11.560643|2019-12-15|München Nachtnetz|MVG @@ -63,8 +64,8 @@ hamburg_usar|53.552946,10.006782|2023-12-10|Hamburg Schnellbahn/Regional|HVV hamburg_metrobus_gross|53.552946,10.006782|2023-12-10|Hamburg MetroBus Liniennetz|HVV hamburg_region|53.552946,10.006782|2023-12-10|Hamburg Regionalverkehr|HVV 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_nacht|54.313282,10.132341|2019-12|Kiel Nachtliniennetz|KVG +kiel_liniennetz|54.313282,10.132341|2023-12|Kiel Liniennetz|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 rostock_vvw_liniennetz|54.078139,12.131724|2023-08-28|Rostock Liniennetz|Verkehrsverbund Warnow rostock_vvw_region|54.078139,12.131724|2023-08-28|Rostock Region|Verkehrsverbund Warnow @@ -106,6 +107,7 @@ 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_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_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 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 From abb468772d5a5e8685c475b72b32f82631cc5bba Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 25 Jun 2024 18:54:05 +0200 Subject: [PATCH 180/218] 13.0.1 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 5196ee1..62f886f 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="130000" - android:versionName="13.0"> + android:versionCode="130001" + android:versionName="13.0.1"> Date: Fri, 12 Jul 2024 16:29:38 +0200 Subject: [PATCH 181/218] AndroidManifest.xml: use flag `android:showWhenLocked` to show activities in front of lock screen Previously, it was setting `FLAG_SHOW_WHEN_LOCKED` in code. --- oeffi/AndroidManifest.xml | 10 ++++++---- .../oeffi/directions/TripDetailsActivity.java | 6 ------ oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java | 6 ------ .../oeffi/stations/StationDetailsActivity.java | 6 ------ 4 files changed, 6 insertions(+), 22 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 62f886f..b5e9746 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -116,8 +116,8 @@ android:exported="true" android:configChanges="keyboard|keyboardHidden" android:label="@string/station_details_activity_title" - android:taskAffinity="de.schildbach.oeffi.stations"> - + android:taskAffinity="de.schildbach.oeffi.stations" + android:showWhenLocked="true" /> + android:taskAffinity="de.schildbach.oeffi.directions" + android:showWhenLocked="true" /> + android:theme="@style/My.Theme.Fullscreen" + android:showWhenLocked="true"> diff --git a/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java b/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java index 10b5f51..5d08c9b 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java @@ -44,7 +44,6 @@ import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.PopupMenu; @@ -366,11 +365,6 @@ public class TripDetailsActivity extends OeffiActivity implements LocationListen super.onDestroy(); } - @Override - public void onAttachedToWindow() { - getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); - } - @Override public void onConfigurationChanged(final Configuration config) { super.onConfigurationChanged(config); diff --git a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java index 15a4591..58d2bfd 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java +++ b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java @@ -29,7 +29,6 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Process; import android.view.View; -import android.view.WindowManager; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.PopupMenu; @@ -255,11 +254,6 @@ public class PlanActivity extends ComponentActivity { super.onDestroy(); } - @Override - public void onAttachedToWindow() { - getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); - } - @Override public boolean onSearchRequested() { if (!stations.isEmpty()) diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java index 4ff6e10..1f2ced8 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java @@ -34,7 +34,6 @@ import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.ViewAnimator; @@ -258,11 +257,6 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa super.onDestroy(); } - @Override - public void onAttachedToWindow() { - getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); - } - @Override public void onConfigurationChanged(final Configuration config) { super.onConfigurationChanged(config); From e66388c60d3963683c4c6855f45324ae60ca5000 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 9 Aug 2024 12:27:25 +0200 Subject: [PATCH 182/218] networks.txt: remove Finland --- oeffi/assets/networks.txt | 3 --- oeffi/res/values-de/networks.xml | 2 -- oeffi/res/values/networks.xml | 2 -- oeffi/src/de/schildbach/oeffi/Application.java | 6 ++++++ .../de/schildbach/oeffi/network/NetworkProviderFactory.java | 3 --- 5 files changed, 6 insertions(+), 10 deletions(-) diff --git a/oeffi/assets/networks.txt b/oeffi/assets/networks.txt index 538933b..9355a38 100644 --- a/oeffi/assets/networks.txt +++ b/oeffi/assets/networks.txt @@ -73,9 +73,6 @@ DSB|da-DK|DK;København # SE SE|sv-SE|SE;Stockholm -# FI -FINLAND|fi-FI|FI;Helsinki|beta - # 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 MERSEY|en-UK|GB;Liverpool|beta diff --git a/oeffi/res/values-de/networks.xml b/oeffi/res/values-de/networks.xml index 73c1612..9545206 100644 --- a/oeffi/res/values-de/networks.xml +++ b/oeffi/res/values-de/networks.xml @@ -101,8 +101,6 @@ Fern-, Regional und Lokalverkehr (z.B. Kopenhagen) Schweden Fern-, Regional und Lokalverkehr (z.B. Stockholm) - Finnland - Fern-, Regional und Lokalverkehr (z.B. Helsinki) England, Schottland & Wales. Lokal- und Regionalverkehr (z.B. London, Birmingham) Liverpool diff --git a/oeffi/res/values/networks.xml b/oeffi/res/values/networks.xml index c9035c3..8915363 100644 --- a/oeffi/res/values/networks.xml +++ b/oeffi/res/values/networks.xml @@ -101,8 +101,6 @@ long-distance, regional and local (e.g. Copenhagen) Sweden long-distance, regional and local (e.g. Stockholm) - Finland - long-distance, regional and local (e.g. Helsinki) England, Scotland & Wales local and regional (e.g. London, Birmingham) Liverpool diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index 6196856..bae1145 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -119,6 +119,12 @@ public class Application extends android.app.Application { 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); + log.info("Migrations took {}", watch); } diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 2d16419..03ce9e1 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -32,7 +32,6 @@ import de.schildbach.pte.DbProvider; import de.schildbach.pte.DingProvider; import de.schildbach.pte.DsbProvider; import de.schildbach.pte.DubProvider; -import de.schildbach.pte.FinlandProvider; import de.schildbach.pte.GvhProvider; import de.schildbach.pte.InvgProvider; import de.schildbach.pte.ItalyProvider; @@ -190,8 +189,6 @@ public final class NetworkProviderFactory { return new DsbProvider("{\"type\":\"AID\",\"aid\":\"irkmpm9mdznstenr-android\"}"); else if (networkId.equals(NetworkId.SE)) return new SeProvider("{\"type\":\"AID\",\"aid\":\"h5o3n7f4t2m8l9x1\"}"); - else if (networkId.equals(NetworkId.FINLAND)) - return new FinlandProvider(NAVITIA_AUTHORIZATION); else if (networkId.equals(NetworkId.TLEM)) return new TlemProvider(); else if (networkId.equals(NetworkId.MERSEY)) From 558e1a6cc489ee483b4597fe014a4f56c8a78657 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 29 Aug 2024 20:17:12 +0200 Subject: [PATCH 183/218] build.gradle: update SDK Build Tools to 35.0.0 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 9672ca7..1f33dc4 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -35,7 +35,7 @@ dependencies { android { compileSdkVersion 'android-34' - buildToolsVersion '34.0.0' + buildToolsVersion '35.0.0' defaultConfig { generatedDensities = ['hdpi', 'xhdpi'] From 9197bdbe1a23e1438abcc6ff1e974eed9e4ab0ed Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 29 Aug 2024 20:18:23 +0200 Subject: [PATCH 184/218] build.gradle: update AndroidX Annotation to 1.8.2 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 1f33dc4..64e36da 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -15,7 +15,7 @@ dependencies { implementation(project(':public-transport-enabler')) { exclude group: 'org.slf4j', module: 'slf4j-api' } - implementation 'androidx.annotation:annotation:1.8.0' + implementation 'androidx.annotation:annotation:1.8.2' implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' From 078b07340d28ff25b4fae573e701580199f00b73 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 29 Aug 2024 20:19:21 +0200 Subject: [PATCH 185/218] build.gradle: update AndroidX Activity to 1.9.1 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 64e36da..2164ae5 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -20,7 +20,7 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' implementation 'androidx.core:core:1.13.1' - implementation 'androidx.activity:activity:1.9.0' + implementation 'androidx.activity:activity:1.9.1' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency From d4060f75891ce3e19e3b5285321c335973631ecf Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 29 Aug 2024 20:22:42 +0200 Subject: [PATCH 186/218] build.gradle: update Guava to 33.3.0-android --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 2164ae5..01e4eab 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' - implementation 'com.google.guava:guava:33.2.1-android' + implementation 'com.google.guava:guava:33.3.0-android' implementation 'org.osmdroid:osmdroid-android:6.1.17' //noinspection GradleDependency implementation 'org.slf4j:slf4j-api:2.0.9' From 562d118e79bdab3371ca35c20dfd364beb8302e9 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 29 Aug 2024 20:24:00 +0200 Subject: [PATCH 187/218] build.gradle: update osmdroid to 6.1.20 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index 01e4eab..d59712e 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -26,7 +26,7 @@ dependencies { //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' implementation 'com.google.guava:guava:33.3.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 'com.github.tony19:logback-android:3.0.0' From efa91b4c67d5edcf81477c01995960e8f620b048 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 29 Aug 2024 20:32:33 +0200 Subject: [PATCH 188/218] 13.0.2 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index b5e9746..40af12e 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="130001" - android:versionName="13.0.1"> + android:versionCode="130002" + android:versionName="13.0.2"> Date: Fri, 30 Aug 2024 17:29:11 +0200 Subject: [PATCH 189/218] adapt to: AbstractNavitiaProvider: remove all providers based on Navitia --- oeffi/assets/networks.txt | 15 ---------- oeffi/res/values-de/networks.xml | 10 ------- oeffi/res/values/networks.xml | 10 ------- .../src/de/schildbach/oeffi/Application.java | 30 +++++++++++++++++++ .../oeffi/network/NetworkPickerActivity.java | 5 ---- .../oeffi/network/NetworkProviderFactory.java | 16 ---------- 6 files changed, 30 insertions(+), 56 deletions(-) diff --git a/oeffi/assets/networks.txt b/oeffi/assets/networks.txt index 9355a38..d66c4f9 100644 --- a/oeffi/assets/networks.txt +++ b/oeffi/assets/networks.txt @@ -45,22 +45,10 @@ VVT|de-AT|Tirol|disabled SVV|de-AT|Salzburg|disabled VMOBIL|de-AT|Vorarlberg;Bregenz|disabled -# CZ -CZECH_REPUBLIC|cs-CZ|Tschechien;Praha;Prag|beta - # CH VBL|de-CH|Luzern ZVV|de-CH|Zürich -# IT -IT|it-IT|IT|alpha - -# FR -PARIS|fr-FR|FR|alpha - -# ES -SPAIN|es-ES|ES|alpha - # LU LU|lb-LU|LU;Luxemburg @@ -88,6 +76,3 @@ CMTA|us-US|US;Texas;Austin|beta # AU SYDNEY|en-AU|AU;New South Wales;Sydney MET|en-AU|AU;Victoria;Melbourne|disabled - -# NI -NICARAGUA|es-NI|NI;Managua|beta diff --git a/oeffi/res/values-de/networks.xml b/oeffi/res/values-de/networks.xml index 9545206..591b3c3 100644 --- a/oeffi/res/values-de/networks.xml +++ b/oeffi/res/values-de/networks.xml @@ -81,18 +81,10 @@ Lokal- und Regionalverkehr Bregenz & Vorarlberg 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. - Prag - Lokal- und Regionalverkehr Luzern nur Tram und Bus Zürich Lokal- und Regionalverkehr - Italien - Fern-, Regional und Lokalverkehr (z.B. Mailand, Rom, Neapel) - Paris - Lokal- und Regionalverkehr - Spanien - Lokal- und Regionalverkehr (z.B. Barcelona) Luxemburg Lokal- und Regionalverkehr Niederlande @@ -115,8 +107,6 @@ Lokal- und Regionalverkehr Sydney Lokal- und Regionalverkehr - Nicaragua - nationale und städtische Buslinien Melbourne Nicht mehr verfügbar, da der PTV keine EFA-API mehr anbietet. diff --git a/oeffi/res/values/networks.xml b/oeffi/res/values/networks.xml index 8915363..e7a6def 100644 --- a/oeffi/res/values/networks.xml +++ b/oeffi/res/values/networks.xml @@ -81,18 +81,10 @@ local and regional Bregenz & Vorarlberg 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. - Prague - local and regional Lucerne tram and bus only Zurich local and regional - Italy - long-distance, regional and local (e.g. Milan, Rome, Naples) - Paris - local and regional - Spain - local and regional (e.g. Barcelona) Luxembourg local and regional Netherlands @@ -115,8 +107,6 @@ local and regional Sydney local and regional - Nicaragua - national and urban buses Melbourne Not available, because the PTV does not offer an EFA API any more. diff --git a/oeffi/src/de/schildbach/oeffi/Application.java b/oeffi/src/de/schildbach/oeffi/Application.java index bae1145..1b00c67 100644 --- a/oeffi/src/de/schildbach/oeffi/Application.java +++ b/oeffi/src/de/schildbach/oeffi/Application.java @@ -125,6 +125,36 @@ public class Application extends android.app.Application { 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); } diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java index ba5c8fd..cab21f6 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java @@ -56,7 +56,6 @@ import de.schildbach.oeffi.network.list.NetworksAdapter; import de.schildbach.oeffi.util.DividerItemDecoration; import de.schildbach.oeffi.util.GeocoderThread; import de.schildbach.oeffi.util.LocationHelper; -import de.schildbach.pte.AbstractNavitiaProvider; import de.schildbach.pte.NetworkId; import de.schildbach.pte.NetworkProvider; import de.schildbach.pte.dto.Location; @@ -475,10 +474,6 @@ public class NetworkPickerActivity extends ComponentActivity implements Location 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; final Point[] area = getArea(networkProvider); diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 03ce9e1..eb54880 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -27,14 +27,12 @@ import de.schildbach.pte.BayernProvider; import de.schildbach.pte.BsvagProvider; import de.schildbach.pte.BvgProvider; import de.schildbach.pte.CmtaProvider; -import de.schildbach.pte.CzechRepublicProvider; import de.schildbach.pte.DbProvider; import de.schildbach.pte.DingProvider; import de.schildbach.pte.DsbProvider; import de.schildbach.pte.DubProvider; import de.schildbach.pte.GvhProvider; import de.schildbach.pte.InvgProvider; -import de.schildbach.pte.ItalyProvider; import de.schildbach.pte.KvvProvider; import de.schildbach.pte.LinzProvider; import de.schildbach.pte.LuProvider; @@ -44,17 +42,14 @@ import de.schildbach.pte.MvvProvider; import de.schildbach.pte.NasaProvider; import de.schildbach.pte.NetworkId; import de.schildbach.pte.NetworkProvider; -import de.schildbach.pte.NicaraguaProvider; import de.schildbach.pte.NsProvider; import de.schildbach.pte.NvbwProvider; import de.schildbach.pte.NvvProvider; import de.schildbach.pte.OebbProvider; -import de.schildbach.pte.ParisProvider; import de.schildbach.pte.RtProvider; import de.schildbach.pte.RtaChicagoProvider; import de.schildbach.pte.SeProvider; import de.schildbach.pte.ShProvider; -import de.schildbach.pte.SpainProvider; import de.schildbach.pte.StvProvider; import de.schildbach.pte.SydneyProvider; import de.schildbach.pte.TlemProvider; @@ -83,7 +78,6 @@ public final class NetworkProviderFactory { 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 NAVITIA_AUTHORIZATION = "577e5781-23ee-4ff0-a5b3-92e5b04887e5"; // oeffi@schildbach.de private static final byte[] VRS_CLIENT_CERTIFICATE = BASE64.decode("MIILOQIBAzCCCv8GCSqGSIb3DQEHAaCCCvAEggrsMIIK6DCCBZ8GCSqGSIb3DQEHBqCCBZAwggWMAgEAMIIFhQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQITP1aoTF3ISwCAggAgIIFWBba5Nms7ssWBgCkVFboVo4EQSGNe6GvJLvlAIAPGBieMyQOeJJwDJgl422+dzIAr+wxYNTgXMBMf7ZwPpVLUyCECGcePHfbLKyAK5CqvP+zYdGYc8oHF5JcukK2wm0oCxt4sRvPKAimFjU1NWFVzX8HY8dTYia59nOF1dk7LmfA5wI8Jr2YURB71lycHLvm4KbBl23AZmEgaAGWPcHhzPFfslo8arlixKGJqc02Tq9gA0+ZY/nkvNtl7fEbVJkHXF7QP7D5O7N5T6D2THyad9rqVdS499VwQ16b5lBTgV5vWD5Ctf5riuewc4aUziGLnukBrHgWOHK8TfsAhtTOrUerAFLNVB2jF6nBKbgywBXKYOBDhKX3MdVmt3srkq0/Ta2+bxUHfwRt17EQKFzboiNuraALs2jXrbSHvuO+pV2yj0WP/sX8d6KXf3XMFejynv7Os7sD0mQTcllsN9bf2oGVUnSaHT97RAekYxaF7LX+q94rhXmhpFPH/ILQEt92lF+nk+XlmhlGT9SUhwUJ6AKysFRY7si/ofE+8V4ZFHDnyjoUNDhOUYC/Z4I7YpozuPECPKNReTbPdHXqlBIiEx243gutskl8duiGYEv7TzraAq0Nag6Xk8YcXoyMXGC8wrecU7Uts9Tm2OBErAqxvFWXL9eN/EsYV8SB745tmU+T4EqJDDZQZnRAerg7Ms4iSKSbPNj/OtwpIptv43NWAtyzEEc6NxwwQTIJZL0v9jwB0mUY7TgM4a+VwMTBHcBNZH5+x8dpwh1H8MYh91UaBOidbc2PJeLtT4pIxYlcyYGl9LJa68WgzBkc7uJmETNOfKfdJEazLvH/jIRsLBwzPj/pbJDPER82wC8l5mmbOyNa/vgjsSAvm2uYDsV1fo8xdik3q/SFRHseIf2vQtybDXrytafUb9D6/0puTycMo5IfXegHvuwIJVhYFcqoCDX8VkkebHHWdWelr7yPealzjksddiJ9a4mksc4js3g7if5cQwYkfiVNE2FQukkjJx1xhgRCsnTRv1K0n0t1g4D5CD4oYjTBiYzgF/t2CqH85wNAVKnJmKNyt0Weqcf6GQwu0oVC+9IqSAiy07KvEbLxjjqcBarQjGKPSLmJeQ0x9X+9KIaEKG3gdN5l8ptlfHhML2wZsn0cTCBU1otOdLcu4QmBGf6DSTSCXcH4GGvlWdxjxdQ7Docmdp3hQBh8wY7jRST+YWcp5zQWkOpClFjKIKx2s+0sG7XM+LNPr2zSJZTyLcPlqdc9aam9LL3nf3CUtUNVrDaiyfTYhgpBHkwc+4P8MIsaZy8gowfBhovsYvfE5aFzF3rfLf30r31/ju/jkcfnWW995X+AJb8pcQuC6R7xJ82lZyPRpyfs96eCmizjIcAcL6Wz+SQEsUE3zNuH/ctpqhD5gCKXhJTj6sXjdiGNkYqPyxKX3blw8fdh+nIe3kBdC9deaw4S+5QYNKPSmdmQAAaOxOyzLi+DKgR9bV6SzWUAO/kWCdRaCdCDy9WS+6CQ2AVsQOSYv1vBMWkZ0u5/EHqPsb6y1wtXvE0/s7T4KZi7taP/72dDclPgNHsWCW5HbSaeyx83efu3fpX7i8tsWmr+QeeRuLGJ5z0NOBKasIKhCe3XPWZGNzKNca0WJk7UWepYFfiPv57tFj6Y0zautFHFNRgP+iu0hX7nNNn0AVXjuFFiZ/fwhjFmXExSYG9xSzcR5aJha0GEJ+MQbIZD7/Ay8GRmPFrrN8x40svTfiWu71qpxqsfco+2sKhJtBxJoO/cnjRz5PrtCdnqi4dYHtvOAyjaaF/3hQvDyiEoiDuxTPIVyjCCBUEGCSqGSIb3DQEHAaCCBTIEggUuMIIFKjCCBSYGCyqGSIb3DQEMCgECoIIE7jCCBOowHAYKKoZIhvcNAQwBAzAOBAg71M5exZmMVQICCAAEggTIohxJ2uLoi9RYzxe7t0XOHkTBSI+/Rn3oQNecNuMe/YNpMMsRCQjSOJToWHGayBQJmwSkMd3NP4QnDfqWFIxHbgnfj3FLTIyfkDIObzpfHwLCOrYHQxK9Zr4t/0SfEy/34uH40ZEiPe7Mnn/iTTZy37ecZgLsvlr6wp5Gao3oBjhKZlxJM043Hy9Dk1vtRCRIFCFbdGXtcLnuVKASc+GVw6QJKoXLerImV0U5Pg6khh0huTALEULuvq5cEIlKBNqyZ37cfb3Cvf9mWSTferBcUymGyHtdh+mHtVPb3ZycprtFmKcGMR9bXK0FJ63fERmXRHBN1ZKVC0beWVgcGybDQKdx9Y26UQLtO3xdZK0Eb3Kn8jVJG3sEJi2u3CLS4wD533+jj+b1uuL8Uj/aZy2UvrbIez48JStZgBGg+IhLK5keW7KV1lHiOVwZuWERpxzbNx7jaZRWIUCwN+aMJts1d5aY+wYvlJ9uk2lQc8qpIDIHHXHvyUEnk7jxw88gQjNgo1lvUHewiQk6VBwXX7EII0kLxdNfEpBT9RAdqURqy8dpoQemoc2zwce0e14G+IElJ1ES1j2jMYkYuggjpfUJBc34QrQI2a7UQwloUMwkdoi9nwgnpeL5G3Jyvgfxxf+D9xSXh8auH5IsdO0/enDGo/Xo+ygQ3tgY3dGI02frzRF24i4hFp/FAdbLjytjgCF0KIEXbJylEweZX2g61jL/fJVowJIA3wXDSuIBq9YRdpEA2OhgCdpwcz69W9T5lVfuJBgKOKcFKSQgDm0sEEkcUV9WR4CWfC9lZ+haHvNcrJBsRkHg6KKsV8PwwbUs2WeXl3NvGnJ/kSQbqJOLfURPziY9w4phupuSTAqmQIc0D4MSZLEjDcXKjg3ifFi4NlGLy+iyzGBoC1YZk1OOlO3uhKxxSD8FG6ncRGHEr8OU+2Yj/qubqZMpckPLXPdWbZB24bQxPTKGeQjFGlgt95H3/aRK9FzmBLc1FOe4qnT9chzbewsAnuho+F7Rqe36hPCZHlIrND0RCOdTAw7buJg6yPIbpDA41SpvS1F/BdFuDepf4yd0NWt4N46zUHmpxavv+2zmDiAUG95ZQ7AmkAA39tc+XtQv3IhLK6Wa7joM61jtau34td3vi1RvN2fPY2jQqOvKA2/hTVw5SzWCI0Tl7le6+ol1/QeUJfpjBZl6Ai+ydgVycSXuyq+MXB/UUEWo8RmlX8R9+y2KtCGV0TQjfX/um1D77LzurRO430m2pggcxmdCiFyl4CRp+rXhw7W6nGwLqZfD2msKthh+tn2QxoNII1oGHHsF7fxE/E4wm54IGtqfLM5pV/5hrqgVfTetABMLFEbtIHrxEDms80SyvsP2/JgelFFrs90wZr9QkLVBBQtZpwmLu39u24HlGXhZflXX0fmlHT2vN1e/EH43Nl/iPgZPYTj6fGGJFdaKNm0QlLym2M0btN3MNMXHETUoLDOg17AomH3NRvSIARu92qa48rX+SeCdF0NJ3VmA2I3Fl4A47epkmMcCzF078UVPC2eQ9M2NtxIAsqQnfIFfxirTuSCdeVS06n8KbMi7PG4Luc7IUPr4W3SQ9mY8XjFgRjVl86QpExzE6P5WZ/RDrgaypcDED6BvMSUwIwYJKoZIhvcNAQkVMRYEFKkQDH5bs77hmpmQ899BQPMX5lIDMDEwITAJBgUrDgMCGgUABBSqWv+fwvAy3ohpbmU2hfBpJbEejAQIPczIVgsfvYECAggA"); public static synchronized NetworkProvider provider(final NetworkId networkId) { @@ -169,18 +163,10 @@ public final class NetworkProviderFactory { return new LinzProvider(); else if (networkId.equals(NetworkId.STV)) return new StvProvider(); - else if (networkId.equals(NetworkId.CZECH_REPUBLIC)) - return new CzechRepublicProvider(NAVITIA_AUTHORIZATION); else if (networkId.equals(NetworkId.VBL)) return new VblProvider(); else if (networkId.equals(NetworkId.ZVV)) 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.LU)) return new LuProvider("{\"type\":\"AID\",\"aid\":\"SkC81GuwuzL4e0\"}"); else if (networkId.equals(NetworkId.NS)) @@ -203,8 +189,6 @@ public final class NetworkProviderFactory { return new CmtaProvider("{\"type\":\"AID\",\"aid\":\"web9j2nak29uz41irb\"}"); else if (networkId.equals(NetworkId.SYDNEY)) return new SydneyProvider(); - else if (networkId.equals(NetworkId.NICARAGUA)) - return new NicaraguaProvider(NAVITIA_AUTHORIZATION); else throw new IllegalArgumentException(networkId.name()); } From 4357b7a0df446f0b66d82c14774388f479ba32f3 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 30 Aug 2024 20:20:36 +0200 Subject: [PATCH 190/218] 13.0.3 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 40af12e..17412f7 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="130002" - android:versionName="13.0.2"> + android:versionCode="130003" + android:versionName="13.0.3"> Date: Tue, 15 Oct 2024 21:22:57 +0200 Subject: [PATCH 191/218] AndroidManifest.xml: target Android 15 --- oeffi/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 17412f7..adb1641 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -25,7 +25,7 @@ + android:targetSdkVersion="35" /> From 335fdea1f803877185720534ae7a45daa6698b8f Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 15 Oct 2024 21:23:55 +0200 Subject: [PATCH 192/218] build.gradle: update AndroidX Activity to 1.9.2 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index d59712e..df5b2b2 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -20,7 +20,7 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' implementation 'androidx.core:core:1.13.1' - implementation 'androidx.activity:activity:1.9.1' + implementation 'androidx.activity:activity:1.9.2' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency From 2e00027604a40e484a534c61fe5a1a35c1da2999 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 16 Oct 2024 14:43:31 +0200 Subject: [PATCH 193/218] 13.0.4 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index adb1641..48bd4e2 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="130003" - android:versionName="13.0.3"> + android:versionCode="130004" + android:versionName="13.0.4"> Date: Sat, 19 Oct 2024 19:36:55 +0200 Subject: [PATCH 194/218] PreferenceActivity: fix broken edge-to-edge layout in settings --- .../oeffi/preference/PreferenceActivity.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java b/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java index 182a1c0..faf02a1 100644 --- a/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java +++ b/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java @@ -19,6 +19,7 @@ package de.schildbach.oeffi.preference; import android.app.Activity; import android.content.Intent; +import android.os.Bundle; import android.view.MenuItem; import de.schildbach.oeffi.R; @@ -35,6 +36,16 @@ public class PreferenceActivity extends android.preference.PreferenceActivity { activity.startActivity(intent); } + @Override + public void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { + v.setPadding(v.getPaddingLeft(), insets.getSystemWindowInsetTop(), v.getPaddingRight(), + v.getPaddingBottom()); + return insets; + }); + } + @Override public void onBuildHeaders(final List
target) { loadHeadersFromResource(R.xml.preference_headers, target); From 2a1cc53180abde367a6c0384556f29786424395d Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 19 Oct 2024 20:55:04 +0200 Subject: [PATCH 195/218] OeffiActivity: migrate to `EdgeToEdge` helper for enabling edge-to-edge layout Previously, we were enabling edge-to-edge via system UI layout flag and we were setting system bar colors via style attributes. --- oeffi/res/values-night-v29/colors.xml | 9 --------- oeffi/res/values-night/colors.xml | 1 - oeffi/res/values-night/styles.xml | 4 ---- oeffi/res/values-notnight-v29/styes.xml | 2 -- oeffi/res/values-v29/colors.xml | 9 --------- oeffi/res/values/colors.xml | 3 --- oeffi/res/values/styles.xml | 7 ------- oeffi/src/de/schildbach/oeffi/OeffiActivity.java | 4 ++++ .../schildbach/oeffi/directions/DirectionsActivity.java | 1 - .../schildbach/oeffi/directions/TripDetailsActivity.java | 1 - .../oeffi/directions/TripsOverviewActivity.java | 1 - .../schildbach/oeffi/network/NetworkPickerActivity.java | 4 ++++ oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java | 5 ++++- .../de/schildbach/oeffi/plans/PlansPickerActivity.java | 1 - .../oeffi/stations/FavoriteStationsActivity.java | 2 -- .../oeffi/stations/StationDetailsActivity.java | 1 - .../de/schildbach/oeffi/stations/StationsActivity.java | 1 - 17 files changed, 12 insertions(+), 44 deletions(-) delete mode 100644 oeffi/res/values-night-v29/colors.xml delete mode 100644 oeffi/res/values-v29/colors.xml diff --git a/oeffi/res/values-night-v29/colors.xml b/oeffi/res/values-night-v29/colors.xml deleted file mode 100644 index 1734f89..0000000 --- a/oeffi/res/values-night-v29/colors.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - @android:color/transparent - @android:color/transparent - @android:color/transparent - - diff --git a/oeffi/res/values-night/colors.xml b/oeffi/res/values-night/colors.xml index a0653fd..179b8b9 100644 --- a/oeffi/res/values-night/colors.xml +++ b/oeffi/res/values-night/colors.xml @@ -23,7 +23,6 @@ #444444 #ffff00 #bbbbbb - #44000000 0.8 diff --git a/oeffi/res/values-night/styles.xml b/oeffi/res/values-night/styles.xml index 4ef9f8d..f80397d 100644 --- a/oeffi/res/values-night/styles.xml +++ b/oeffi/res/values-night/styles.xml @@ -5,8 +5,6 @@ diff --git a/oeffi/res/values-notnight-v29/styes.xml b/oeffi/res/values-notnight-v29/styes.xml index 6cf7297..92f8177 100644 --- a/oeffi/res/values-notnight-v29/styes.xml +++ b/oeffi/res/values-notnight-v29/styes.xml @@ -4,8 +4,6 @@ diff --git a/oeffi/res/values-v29/colors.xml b/oeffi/res/values-v29/colors.xml deleted file mode 100644 index 1734f89..0000000 --- a/oeffi/res/values-v29/colors.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - @android:color/transparent - @android:color/transparent - @android:color/transparent - - diff --git a/oeffi/res/values/colors.xml b/oeffi/res/values/colors.xml index dd27815..255d6ee 100644 --- a/oeffi/res/values/colors.xml +++ b/oeffi/res/values/colors.xml @@ -37,9 +37,6 @@ #757575 #bbbbbb #ff4444 - #44000000 - @android:color/black - #44000000 1 diff --git a/oeffi/res/values/styles.xml b/oeffi/res/values/styles.xml index 727a1f6..8a913e7 100644 --- a/oeffi/res/values/styles.xml +++ b/oeffi/res/values/styles.xml @@ -5,8 +5,6 @@ @@ -27,13 +23,10 @@ diff --git a/oeffi/src/de/schildbach/oeffi/OeffiActivity.java b/oeffi/src/de/schildbach/oeffi/OeffiActivity.java index a4f76a1..2a6edc4 100644 --- a/oeffi/src/de/schildbach/oeffi/OeffiActivity.java +++ b/oeffi/src/de/schildbach/oeffi/OeffiActivity.java @@ -20,6 +20,7 @@ package de.schildbach.oeffi; import android.app.ActivityManager.TaskDescription; import android.content.SharedPreferences; import android.content.res.Resources; +import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.preference.PreferenceManager; @@ -29,6 +30,8 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import androidx.activity.ComponentActivity; +import androidx.activity.EdgeToEdge; +import androidx.activity.SystemBarStyle; import de.schildbach.oeffi.network.NetworkResources; import de.schildbach.oeffi.util.ErrorReporter; import de.schildbach.pte.NetworkId; @@ -44,6 +47,7 @@ public abstract class OeffiActivity extends ComponentActivity { @Override protected void onCreate(final Bundle savedInstanceState) { + EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT)); super.onCreate(savedInstanceState); this.application = (Application) getApplication(); this.prefs = PreferenceManager.getDefaultSharedPreferences(this); diff --git a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java index 7d1b8a8..4fcfd0a 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java @@ -307,7 +307,6 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor backgroundHandler = new Handler(backgroundThread.getLooper()); setContentView(R.layout.directions_content); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); return insets; diff --git a/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java b/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java index 5d08c9b..4345fd0 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java @@ -186,7 +186,6 @@ public class TripDetailsActivity extends OeffiActivity implements LocationListen scheduleTripIntent = scheduleTripIntent(trip); setContentView(R.layout.directions_trip_details_content); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); return insets; diff --git a/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java b/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java index ad62ea8..f90d1e9 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java @@ -130,7 +130,6 @@ public class TripsOverviewActivity extends OeffiActivity { final Uri historyUri = historyUriStr != null ? Uri.parse(historyUriStr) : null; setContentView(R.layout.directions_trip_overview_content); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); return insets; diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java index cab21f6..d01551f 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java @@ -25,6 +25,7 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources; +import android.graphics.Color; import android.location.Address; import android.location.Criteria; import android.location.LocationManager; @@ -38,6 +39,8 @@ import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import androidx.activity.ComponentActivity; +import androidx.activity.EdgeToEdge; +import androidx.activity.SystemBarStyle; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.core.content.ContextCompat; @@ -109,6 +112,7 @@ public class NetworkPickerActivity extends ComponentActivity implements Location @Override protected void onCreate(final Bundle savedInstanceState) { + EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT)); super.onCreate(savedInstanceState); prefs = PreferenceManager.getDefaultSharedPreferences(this); diff --git a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java index 58d2bfd..01d7efa 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java +++ b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java @@ -23,6 +23,7 @@ import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -35,6 +36,8 @@ import android.widget.PopupMenu; import android.widget.TextView; import android.widget.ViewAnimator; 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.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -116,6 +119,7 @@ public class PlanActivity extends ComponentActivity { @Override protected void onCreate(final Bundle savedInstanceState) { + EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT)); super.onCreate(savedInstanceState); this.application = (Application) getApplication(); @@ -125,7 +129,6 @@ public class PlanActivity extends ComponentActivity { backgroundHandler = new Handler(backgroundThread.getLooper()); 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); zoomControlsAnimation.setFillAfter(true); // workaround: set through code because XML does not work diff --git a/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java b/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java index 58e29db..e1bb2ef 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java @@ -110,7 +110,6 @@ public class PlansPickerActivity extends OeffiMainActivity implements LocationHe thumbCache = new Cache(cacheDir, THUMB_CACHE_SIZE); setContentView(R.layout.plans_picker_content); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); return insets; diff --git a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java index 87ea4ed..4e4d191 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java @@ -22,7 +22,6 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.view.View; import android.widget.ViewAnimator; import androidx.activity.result.contract.ActivityResultContract; import androidx.recyclerview.widget.LinearLayoutManager; @@ -84,7 +83,6 @@ public class FavoriteStationsActivity extends OeffiActivity network = (NetworkId) intent.getSerializableExtra(INTENT_EXTRA_NETWORK); setContentView(R.layout.favorites_content); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); return insets; diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java index 1f2ced8..78abb26 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java @@ -137,7 +137,6 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa backgroundHandler = new Handler(backgroundThread.getLooper()); setContentView(R.layout.stations_station_details_content); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); return insets; diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java index 2596490..0447cff 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java @@ -184,7 +184,6 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware res = getResources(); setContentView(R.layout.stations_content); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); return insets; From eb23268ebc83bc555810e6dcfcfafe3a65c81f5c Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 19 Oct 2024 21:36:29 +0200 Subject: [PATCH 196/218] 13.0.5 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 48bd4e2..bcc8202 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="130004" - android:versionName="13.0.4"> + android:versionCode="130005" + android:versionName="13.0.5"> Date: Sun, 20 Oct 2024 12:08:33 +0200 Subject: [PATCH 197/218] NetworkPickerActivity: remove setting of system UI layout flag This was overseen in the recent migration. --- oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java index d01551f..d5e579b 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java @@ -124,7 +124,6 @@ public class NetworkPickerActivity extends ComponentActivity implements Location backgroundHandler = new Handler(backgroundThread.getLooper()); setContentView(R.layout.network_picker_content); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); return insets; From 99b737f2378333bc4180b77ab6fa14b34606eb7c Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 20 Oct 2024 12:10:44 +0200 Subject: [PATCH 198/218] Constants: move status bar style as a constant from activities --- oeffi/src/de/schildbach/oeffi/Constants.java | 4 ++++ oeffi/src/de/schildbach/oeffi/OeffiActivity.java | 3 +-- .../de/schildbach/oeffi/network/NetworkPickerActivity.java | 3 +-- oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java | 3 +-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/Constants.java b/oeffi/src/de/schildbach/oeffi/Constants.java index 203d40f..3394e43 100644 --- a/oeffi/src/de/schildbach/oeffi/Constants.java +++ b/oeffi/src/de/schildbach/oeffi/Constants.java @@ -17,7 +17,9 @@ package de.schildbach.oeffi; +import android.graphics.Color; import android.text.format.DateUtils; +import androidx.activity.SystemBarStyle; import okhttp3.HttpUrl; import java.util.Locale; @@ -65,4 +67,6 @@ public class Constants { public static final String DESTINATION_ARROW_PREFIX = Character.toString(Constants.CHAR_RIGHTWARDS_ARROW) + Constants.CHAR_THIN_SPACE; public static final String DESTINATION_ARROW_INVISIBLE_PREFIX = " "; + + public static final SystemBarStyle STATUS_BAR_STYLE = SystemBarStyle.dark(Color.TRANSPARENT); } diff --git a/oeffi/src/de/schildbach/oeffi/OeffiActivity.java b/oeffi/src/de/schildbach/oeffi/OeffiActivity.java index 2a6edc4..5b66bc6 100644 --- a/oeffi/src/de/schildbach/oeffi/OeffiActivity.java +++ b/oeffi/src/de/schildbach/oeffi/OeffiActivity.java @@ -31,7 +31,6 @@ import android.widget.LinearLayout; import android.widget.TextView; import androidx.activity.ComponentActivity; import androidx.activity.EdgeToEdge; -import androidx.activity.SystemBarStyle; import de.schildbach.oeffi.network.NetworkResources; import de.schildbach.oeffi.util.ErrorReporter; import de.schildbach.pte.NetworkId; @@ -47,7 +46,7 @@ public abstract class OeffiActivity extends ComponentActivity { @Override protected void onCreate(final Bundle savedInstanceState) { - EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT)); + EdgeToEdge.enable(this, Constants.STATUS_BAR_STYLE); super.onCreate(savedInstanceState); this.application = (Application) getApplication(); this.prefs = PreferenceManager.getDefaultSharedPreferences(this); diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java index d5e579b..23e5757 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java @@ -40,7 +40,6 @@ import android.widget.LinearLayout; import android.widget.TextView; import androidx.activity.ComponentActivity; import androidx.activity.EdgeToEdge; -import androidx.activity.SystemBarStyle; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.core.content.ContextCompat; @@ -112,7 +111,7 @@ public class NetworkPickerActivity extends ComponentActivity implements Location @Override protected void onCreate(final Bundle savedInstanceState) { - EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT)); + EdgeToEdge.enable(this, Constants.STATUS_BAR_STYLE); super.onCreate(savedInstanceState); prefs = PreferenceManager.getDefaultSharedPreferences(this); diff --git a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java index 01d7efa..ec92162 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java +++ b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java @@ -37,7 +37,6 @@ import android.widget.TextView; import android.widget.ViewAnimator; 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.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -119,7 +118,7 @@ public class PlanActivity extends ComponentActivity { @Override protected void onCreate(final Bundle savedInstanceState) { - EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT)); + EdgeToEdge.enable(this, Constants.STATUS_BAR_STYLE); super.onCreate(savedInstanceState); this.application = (Application) getApplication(); From c5ee0db526b63aa69c165f520f568e147dc7461d Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 20 Oct 2024 12:20:03 +0200 Subject: [PATCH 199/218] PlanActivity: force navigation bar to light mode for plans The rationale being that plan backgrounds are always white. --- oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java index ec92162..1310d4d 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java +++ b/oeffi/src/de/schildbach/oeffi/plans/PlanActivity.java @@ -37,6 +37,7 @@ import android.widget.TextView; import android.widget.ViewAnimator; 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.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -84,6 +85,9 @@ public class PlanActivity extends ComponentActivity { 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() + ".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) { final Intent intent = new Intent(Intent.ACTION_VIEW, null, context, PlanActivity.class); @@ -118,7 +122,7 @@ public class PlanActivity extends ComponentActivity { @Override protected void onCreate(final Bundle savedInstanceState) { - EdgeToEdge.enable(this, Constants.STATUS_BAR_STYLE); + EdgeToEdge.enable(this, Constants.STATUS_BAR_STYLE, NAVIGATION_BAR_STYLE); super.onCreate(savedInstanceState); this.application = (Application) getApplication(); From 0bd83c012591c9f38497a0a1c548a376efedc808 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 20 Oct 2024 13:06:11 +0200 Subject: [PATCH 200/218] plans_content.xml: use a light gray background for plans The contrast used to be a bit too harsh. --- oeffi/res/layout/plans_content.xml | 3 ++- oeffi/res/values/colors.xml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/oeffi/res/layout/plans_content.xml b/oeffi/res/layout/plans_content.xml index cf96dae..58d2e48 100644 --- a/oeffi/res/layout/plans_content.xml +++ b/oeffi/res/layout/plans_content.xml @@ -4,6 +4,7 @@ android:id="@+id/plans_layout" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@color/bg_plan" android:inAnimation="@android:anim/fade_in" android:outAnimation="@android:anim/fade_out"> @@ -24,7 +25,7 @@ android:layout_height="wrap_content" android:paddingTop="8dp" android:text="@string/plan_progress_loading" - android:textColor="@color/fg_significant_on_dark" + android:textColor="@color/fg_significant_on_light" android:textStyle="bold" /> diff --git a/oeffi/res/values/colors.xml b/oeffi/res/values/colors.xml index 255d6ee..5f9c7e5 100644 --- a/oeffi/res/values/colors.xml +++ b/oeffi/res/values/colors.xml @@ -37,6 +37,7 @@ #757575 #bbbbbb #ff4444 + #ffd8d8d8 1 From 3b80a7a3b47bc708f0ca4ca36931d435bbd0f5b9 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 29 Oct 2024 16:07:08 +0100 Subject: [PATCH 201/218] build.gradle: update AndroidX Activity to 1.9.3 --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index df5b2b2..a62bfaf 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -20,7 +20,7 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' implementation 'androidx.core:core:1.13.1' - implementation 'androidx.activity:activity:1.9.2' + implementation 'androidx.activity:activity:1.9.3' //noinspection GradleDependency implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency From ce7fedc76e4d4bf4d44413ec0a5a620acbdb1b2e Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 29 Oct 2024 16:40:23 +0100 Subject: [PATCH 202/218] StationsActivity, StationDetailsActivity, FavoriteStationsActivity, DirectionsActivity, TripsOverviewActivity, TripDetailsActivity, PlansPickerActivity, NetworkPickerActivity, PreferenceActivity: use ViewCompat.setOnApplyWindowInsetsListener() rather than View.setOnApplyWindowInsetsListener() --- .../oeffi/directions/DirectionsActivity.java | 31 ++++++++------ .../oeffi/directions/TripDetailsActivity.java | 26 +++++++----- .../directions/TripsOverviewActivity.java | 19 ++++++--- .../oeffi/network/NetworkPickerActivity.java | 26 +++++++----- .../oeffi/plans/PlansPickerActivity.java | 19 +++++---- .../oeffi/preference/PreferenceActivity.java | 13 ++++-- .../stations/FavoriteStationsActivity.java | 20 ++++++---- .../stations/StationDetailsActivity.java | 33 +++++++++------ .../oeffi/stations/StationsActivity.java | 40 ++++++++++++------- 9 files changed, 145 insertions(+), 82 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java index 4fcfd0a..1da216c 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/DirectionsActivity.java @@ -63,7 +63,9 @@ import androidx.activity.result.contract.ActivityResultContract; import androidx.activity.result.contract.ActivityResultContracts; import androidx.coordinatorlayout.widget.CoordinatorLayout; 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.RecyclerView; import com.google.common.base.Throwables; @@ -307,9 +309,11 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor backgroundHandler = new Handler(backgroundThread.getLooper()); setContentView(R.layout.directions_content); - findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); - return insets; + final View contentView = findViewById(android.R.id.content); + ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, 0); + return windowInsets; }); final MyActionBar actionBar = getMyActionBar(); @@ -455,10 +459,11 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor viewQueryHistoryList.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); queryHistoryListAdapter = new QueryHistoryAdapter(this, network, this, this); 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(), - insets.getSystemWindowInsetBottom()); - return insets; + insets.bottom); + return windowInsets; }); viewQueryHistoryEmpty = findViewById(R.id.directions_query_history_empty); @@ -545,15 +550,17 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor }); final TextView mapDisclaimerView = findViewById(R.id.directions_map_disclaimer); mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice()); - mapDisclaimerView.setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(0,0,0, insets.getSystemWindowInsetBottom()); - return insets; + ViewCompat.setOnApplyWindowInsetsListener(mapDisclaimerView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(0, 0, 0, insets.bottom); + return windowInsets; }); final ZoomControls zoom = findViewById(R.id.directions_map_zoom); - zoom.setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom()); - return insets; + ViewCompat.setOnApplyWindowInsetsListener(zoom, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(0, 0, 0, insets.bottom); + return windowInsets; }); mapView.setZoomControls(zoom); diff --git a/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java b/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java index 4345fd0..8372c16 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/TripDetailsActivity.java @@ -50,6 +50,9 @@ import android.widget.PopupMenu; import android.widget.TableLayout; import android.widget.TextView; 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 de.schildbach.oeffi.Constants; import de.schildbach.oeffi.LocationAware; @@ -186,9 +189,11 @@ public class TripDetailsActivity extends OeffiActivity implements LocationListen scheduleTripIntent = scheduleTripIntent(trip); setContentView(R.layout.directions_trip_details_content); - findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); - return insets; + final View contentView = findViewById(android.R.id.content); + ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, 0); + return windowInsets; }); final MyActionBar actionBar = getMyActionBar(); @@ -281,9 +286,11 @@ public class TripDetailsActivity extends OeffiActivity implements LocationListen ((TextView) findViewById(R.id.directions_trip_details_footer)) .setText(Html.fromHtml(getString(R.string.directions_trip_details_realtime))); - findViewById(R.id.directions_trip_details_disclaimer_group).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom()); - return insets; + final View disclaimerView = findViewById(R.id.directions_trip_details_disclaimer_group); + ViewCompat.setOnApplyWindowInsetsListener(disclaimerView, (v, windowInsets) -> { + 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); updateDisclaimerSource(disclaimerSourceView, network.name(), null); @@ -312,9 +319,10 @@ public class TripDetailsActivity extends OeffiActivity implements LocationListen }); final TextView mapDisclaimerView = findViewById(R.id.directions_trip_details_map_disclaimer); mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice()); - mapDisclaimerView.setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(0,0,0, insets.getSystemWindowInsetBottom()); - return insets; + ViewCompat.setOnApplyWindowInsetsListener(mapDisclaimerView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(0, 0, 0, insets.bottom); + return windowInsets; }); } diff --git a/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java b/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java index f90d1e9..b0f8247 100644 --- a/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java +++ b/oeffi/src/de/schildbach/oeffi/directions/TripsOverviewActivity.java @@ -31,6 +31,9 @@ import android.text.format.DateUtils; import android.view.View; import android.widget.AdapterView; 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.Ordering; import com.google.common.util.concurrent.Uninterruptibles; @@ -130,9 +133,11 @@ public class TripsOverviewActivity extends OeffiActivity { final Uri historyUri = historyUriStr != null ? Uri.parse(historyUriStr) : null; setContentView(R.layout.directions_trip_overview_content); - findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); - return insets; + final View contentView = findViewById(android.R.id.content); + ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, 0); + return windowInsets; }); final MyActionBar actionBar = getMyActionBar(); @@ -163,9 +168,11 @@ public class TripsOverviewActivity extends OeffiActivity { }); barView.setOnScrollListener(() -> handler.post(checkMoreRunnable)); - findViewById(R.id.directions_trip_overview_disclaimer_group).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom()); - return insets; + final View disclaimerView = findViewById(R.id.directions_trip_overview_disclaimer_group); + ViewCompat.setOnApplyWindowInsetsListener(disclaimerView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(0, 0, 0, insets.bottom); + return windowInsets; }); processResult(result, dep); diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java index 23e5757..e5e49fc 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkPickerActivity.java @@ -43,6 +43,9 @@ import androidx.activity.EdgeToEdge; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; 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.RecyclerView; import de.schildbach.oeffi.AreaAware; @@ -123,9 +126,11 @@ public class NetworkPickerActivity extends ComponentActivity implements Location backgroundHandler = new Handler(backgroundThread.getLooper()); setContentView(R.layout.network_picker_content); - findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); - return insets; + final View contentView = findViewById(android.R.id.content); + ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, 0); + return windowInsets; }); actionBar = findViewById(R.id.action_bar); @@ -138,18 +143,19 @@ public class NetworkPickerActivity extends ComponentActivity implements Location final String network = prefsGetNetwork(); listAdapter = new NetworksAdapter(this, network, this, this); listView.setAdapter(listAdapter); - listView.setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), - insets.getSystemWindowInsetBottom()); - return insets; + ViewCompat.setOnApplyWindowInsetsListener(listView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), insets.bottom); + return windowInsets; }); mapView = findViewById(R.id.network_picker_map); final TextView mapDisclaimerView = findViewById(R.id.network_picker_map_disclaimer); mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice()); - mapDisclaimerView.setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom()); - return insets; + ViewCompat.setOnApplyWindowInsetsListener(mapDisclaimerView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(0, 0, 0, insets.bottom); + return windowInsets; }); if (network != null) { diff --git a/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java b/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java index e1bb2ef..1440601 100644 --- a/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java +++ b/oeffi/src/de/schildbach/oeffi/plans/PlansPickerActivity.java @@ -38,7 +38,10 @@ import androidx.activity.result.contract.ActivityResultContracts; import androidx.core.content.ContextCompat; import androidx.core.content.pm.ShortcutInfoCompat; import androidx.core.content.pm.ShortcutManagerCompat; +import androidx.core.graphics.Insets; 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.RecyclerView; import com.google.common.util.concurrent.FutureCallback; @@ -110,9 +113,11 @@ public class PlansPickerActivity extends OeffiMainActivity implements LocationHe thumbCache = new Cache(cacheDir, THUMB_CACHE_SIZE); setContentView(R.layout.plans_picker_content); - findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); - return insets; + final View contentView = findViewById(android.R.id.content); + ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, 0); + return windowInsets; }); actionBar = getMyActionBar(); @@ -130,10 +135,10 @@ public class PlansPickerActivity extends OeffiMainActivity implements LocationHe listView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); listAdapter = new PlansAdapter(this, cursor, thumbCache, this, this, application.okHttpClient()); listView.setAdapter(listAdapter); - listView.setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), - insets.getSystemWindowInsetBottom()); - return insets; + ViewCompat.setOnApplyWindowInsetsListener(listView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), insets.bottom); + return windowInsets; }); connectivityWarningView = findViewById(R.id.plans_picker_connectivity_warning_box); diff --git a/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java b/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java index faf02a1..2ee2611 100644 --- a/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java +++ b/oeffi/src/de/schildbach/oeffi/preference/PreferenceActivity.java @@ -21,6 +21,10 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; 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 java.util.List; @@ -39,10 +43,11 @@ public class PreferenceActivity extends android.preference.PreferenceActivity { @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(v.getPaddingLeft(), insets.getSystemWindowInsetTop(), v.getPaddingRight(), - v.getPaddingBottom()); - return insets; + 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; }); } diff --git a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java index 4e4d191..729d99f 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/FavoriteStationsActivity.java @@ -22,8 +22,12 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.view.View; import android.widget.ViewAnimator; 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.RecyclerView; import de.schildbach.oeffi.MyActionBar; @@ -83,9 +87,11 @@ public class FavoriteStationsActivity extends OeffiActivity network = (NetworkId) intent.getSerializableExtra(INTENT_EXTRA_NETWORK); setContentView(R.layout.favorites_content); - findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); - return insets; + final View contentView = findViewById(android.R.id.content); + ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, 0); + return windowInsets; }); final MyActionBar actionBar = getMyActionBar(); @@ -100,10 +106,10 @@ public class FavoriteStationsActivity extends OeffiActivity listView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); adapter = new FavoriteStationsAdapter(this, network, this, network == null ? this : null); listView.setAdapter(adapter); - listView.setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), - insets.getSystemWindowInsetBottom()); - return insets; + ViewCompat.setOnApplyWindowInsetsListener(listView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), insets.bottom); + return windowInsets; }); updateGUI(); diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java index 78abb26..b77f1ca 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java @@ -37,6 +37,9 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; 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.RecyclerView; import com.google.common.base.Joiner; @@ -137,9 +140,11 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa backgroundHandler = new Handler(backgroundThread.getLooper()); setContentView(R.layout.stations_station_details_content); - findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); - return insets; + final View contentView = findViewById(android.R.id.content); + ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, 0); + return windowInsets; }); actionBar = getMyActionBar(); @@ -173,19 +178,21 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa listView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); listAdapter = new DeparturesAdapter(this); 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(), - insets.getSystemWindowInsetBottom() + (int)(48 * getResources().getDisplayMetrics().density)); - return insets; + insets.bottom + (int) (48 * getResources().getDisplayMetrics().density)); + return windowInsets; }); mapView = findViewById(R.id.stations_station_details_map); mapView.setStationsAware(this); final TextView mapDisclaimerView = findViewById(R.id.stations_station_details_map_disclaimer); mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice()); - mapDisclaimerView.setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(0,0,0, insets.getSystemWindowInsetBottom()); - return insets; + ViewCompat.setOnApplyWindowInsetsListener(mapDisclaimerView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(0, 0, 0, insets.bottom); + return windowInsets; }); resultStatusView = findViewById(R.id.stations_station_details_result_status); @@ -201,9 +208,11 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa favoriteButton .setChecked(selectedFavState != null && selectedFavState == FavoriteStationsProvider.TYPE_FAVORITE); - findViewById(R.id.stations_station_details_disclaimer_group).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom()); - return insets; + final View disclaimerView = findViewById(R.id.stations_station_details_disclaimer_group); + ViewCompat.setOnApplyWindowInsetsListener(disclaimerView, (v, windowInsets) -> { + 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); updateDisclaimerSource(disclaimerSourceView, selectedNetwork.name(), null); diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java index 0447cff..9cfc18c 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java @@ -56,6 +56,9 @@ import android.widget.ViewAnimator; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; 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.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -184,9 +187,11 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware res = getResources(); setContentView(R.layout.stations_content); - findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); - return insets; + final View contentView = findViewById(android.R.id.content); + ViewCompat.setOnApplyWindowInsetsListener(contentView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, 0); + return windowInsets; }); actionBar = getMyActionBar(); @@ -265,22 +270,26 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware mapView.setLocationAware(this); final TextView mapDisclaimerView = findViewById(R.id.stations_map_disclaimer); mapDisclaimerView.setText(mapView.getTileProvider().getTileSource().getCopyrightNotice()); - mapDisclaimerView.setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom()); - return insets; + ViewCompat.setOnApplyWindowInsetsListener(mapDisclaimerView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(0, 0, 0, insets.bottom); + return windowInsets; }); final ZoomControls zoom = findViewById(R.id.stations_map_zoom); - zoom.setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom()); - return insets; + ViewCompat.setOnApplyWindowInsetsListener(zoom, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(0, 0, 0, insets.bottom); + return windowInsets; }); mapView.setZoomControls(zoom); connectivityWarningView = findViewById(R.id.stations_connectivity_warning_box); - findViewById(R.id.stations_disclaimer_group).setOnApplyWindowInsetsListener((v, insets) -> { - v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom()); - return insets; + final View disclaimerView = findViewById(R.id.stations_disclaimer_group); + ViewCompat.setOnApplyWindowInsetsListener(disclaimerView, (v, windowInsets) -> { + final Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(0, 0, 0, insets.bottom); + return windowInsets; }); disclaimerSourceView = findViewById(R.id.stations_disclaimer_source); @@ -414,10 +423,11 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware stationList.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); stationListAdapter = new StationsAdapter(this, maxDeparturesPerStation, products, this, this); 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(), - insets.getSystemWindowInsetBottom() + (int)(48 * res.getDisplayMetrics().density)); - return insets; + insets.bottom + (int) (48 * res.getDisplayMetrics().density)); + return windowInsets; }); stationList.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override From 71f315ac596ca6062217bd03561d842510890503 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 2 Nov 2024 12:25:24 +0100 Subject: [PATCH 203/218] 13.0.6 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index bcc8202..d7fb10d 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="130005" - android:versionName="13.0.5"> + android:versionCode="130006" + android:versionName="13.0.6"> Date: Sat, 14 Dec 2024 18:43:08 +0100 Subject: [PATCH 204/218] 13.0.7 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index d7fb10d..afa0a58 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="130006" - android:versionName="13.0.6"> + android:versionCode="130007" + android:versionName="13.0.7"> Date: Tue, 17 Dec 2024 09:46:05 +0100 Subject: [PATCH 205/218] 13.0.8 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index afa0a58..8eb5d4b 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="130007" - android:versionName="13.0.7"> + android:versionCode="130008" + android:versionName="13.0.8"> Date: Sun, 5 Jan 2025 12:37:20 +0100 Subject: [PATCH 206/218] strings.xml: update year of copyright --- oeffi/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/res/values/strings.xml b/oeffi/res/values/strings.xml index e4d1657..6720387 100644 --- a/oeffi/res/values/strings.xml +++ b/oeffi/res/values/strings.xml @@ -46,7 +46,7 @@ About Offi Copyright - © 2010-2024, the Öffi developers + © 2010-2025, the Öffi developers License Privacy Policy https://oeffi.schildbach.de/privacy_policy.txt From 2f158a9b5b9c0dca2193f9ae535a48812ab2e59b Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 11 Jan 2025 10:54:53 +0100 Subject: [PATCH 207/218] adapt to: DB: replace HCI-based implementation with new movas provider --- .../de/schildbach/oeffi/network/NetworkProviderFactory.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index eb54880..73f6d55 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -95,8 +95,7 @@ public final class NetworkProviderFactory { if (networkId.equals(NetworkId.RT)) return new RtProvider(); else if (networkId.equals(NetworkId.DB)) - return new DbProvider("{\"type\":\"AID\",\"aid\":\"n91dB8Z77MLdoR0K\"}", - "bdI8UVj40K5fvxwf".getBytes(Charsets.UTF_8)); + return new DbProvider(); else if (networkId.equals(NetworkId.BVG)) return new BvgProvider("{\"aid\":\"1Rxs112shyHLatUX4fofnmdxK\",\"type\":\"AID\"}"); else if (networkId.equals(NetworkId.VBB)) From d76e35760322a034915e91fb063d9f2d605dc3ae Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 11 Jan 2025 10:56:23 +0100 Subject: [PATCH 208/218] 13.0.9 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 8eb5d4b..e4b5dd2 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="130008" - android:versionName="13.0.8"> + android:versionCode="130009" + android:versionName="13.0.9"> Date: Sat, 11 Jan 2025 11:32:21 +0100 Subject: [PATCH 209/218] NetworkProviderFactory: update user agent --- .../src/de/schildbach/oeffi/network/NetworkProviderFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 73f6d55..969d7dc 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -77,7 +77,7 @@ public final class NetworkProviderFactory { private static Map providerCache = new HashMap<>(); 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 byte[] VRS_CLIENT_CERTIFICATE = BASE64.decode("MIILOQIBAzCCCv8GCSqGSIb3DQEHAaCCCvAEggrsMIIK6DCCBZ8GCSqGSIb3DQEHBqCCBZAwggWMAgEAMIIFhQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQITP1aoTF3ISwCAggAgIIFWBba5Nms7ssWBgCkVFboVo4EQSGNe6GvJLvlAIAPGBieMyQOeJJwDJgl422+dzIAr+wxYNTgXMBMf7ZwPpVLUyCECGcePHfbLKyAK5CqvP+zYdGYc8oHF5JcukK2wm0oCxt4sRvPKAimFjU1NWFVzX8HY8dTYia59nOF1dk7LmfA5wI8Jr2YURB71lycHLvm4KbBl23AZmEgaAGWPcHhzPFfslo8arlixKGJqc02Tq9gA0+ZY/nkvNtl7fEbVJkHXF7QP7D5O7N5T6D2THyad9rqVdS499VwQ16b5lBTgV5vWD5Ctf5riuewc4aUziGLnukBrHgWOHK8TfsAhtTOrUerAFLNVB2jF6nBKbgywBXKYOBDhKX3MdVmt3srkq0/Ta2+bxUHfwRt17EQKFzboiNuraALs2jXrbSHvuO+pV2yj0WP/sX8d6KXf3XMFejynv7Os7sD0mQTcllsN9bf2oGVUnSaHT97RAekYxaF7LX+q94rhXmhpFPH/ILQEt92lF+nk+XlmhlGT9SUhwUJ6AKysFRY7si/ofE+8V4ZFHDnyjoUNDhOUYC/Z4I7YpozuPECPKNReTbPdHXqlBIiEx243gutskl8duiGYEv7TzraAq0Nag6Xk8YcXoyMXGC8wrecU7Uts9Tm2OBErAqxvFWXL9eN/EsYV8SB745tmU+T4EqJDDZQZnRAerg7Ms4iSKSbPNj/OtwpIptv43NWAtyzEEc6NxwwQTIJZL0v9jwB0mUY7TgM4a+VwMTBHcBNZH5+x8dpwh1H8MYh91UaBOidbc2PJeLtT4pIxYlcyYGl9LJa68WgzBkc7uJmETNOfKfdJEazLvH/jIRsLBwzPj/pbJDPER82wC8l5mmbOyNa/vgjsSAvm2uYDsV1fo8xdik3q/SFRHseIf2vQtybDXrytafUb9D6/0puTycMo5IfXegHvuwIJVhYFcqoCDX8VkkebHHWdWelr7yPealzjksddiJ9a4mksc4js3g7if5cQwYkfiVNE2FQukkjJx1xhgRCsnTRv1K0n0t1g4D5CD4oYjTBiYzgF/t2CqH85wNAVKnJmKNyt0Weqcf6GQwu0oVC+9IqSAiy07KvEbLxjjqcBarQjGKPSLmJeQ0x9X+9KIaEKG3gdN5l8ptlfHhML2wZsn0cTCBU1otOdLcu4QmBGf6DSTSCXcH4GGvlWdxjxdQ7Docmdp3hQBh8wY7jRST+YWcp5zQWkOpClFjKIKx2s+0sG7XM+LNPr2zSJZTyLcPlqdc9aam9LL3nf3CUtUNVrDaiyfTYhgpBHkwc+4P8MIsaZy8gowfBhovsYvfE5aFzF3rfLf30r31/ju/jkcfnWW995X+AJb8pcQuC6R7xJ82lZyPRpyfs96eCmizjIcAcL6Wz+SQEsUE3zNuH/ctpqhD5gCKXhJTj6sXjdiGNkYqPyxKX3blw8fdh+nIe3kBdC9deaw4S+5QYNKPSmdmQAAaOxOyzLi+DKgR9bV6SzWUAO/kWCdRaCdCDy9WS+6CQ2AVsQOSYv1vBMWkZ0u5/EHqPsb6y1wtXvE0/s7T4KZi7taP/72dDclPgNHsWCW5HbSaeyx83efu3fpX7i8tsWmr+QeeRuLGJ5z0NOBKasIKhCe3XPWZGNzKNca0WJk7UWepYFfiPv57tFj6Y0zautFHFNRgP+iu0hX7nNNn0AVXjuFFiZ/fwhjFmXExSYG9xSzcR5aJha0GEJ+MQbIZD7/Ay8GRmPFrrN8x40svTfiWu71qpxqsfco+2sKhJtBxJoO/cnjRz5PrtCdnqi4dYHtvOAyjaaF/3hQvDyiEoiDuxTPIVyjCCBUEGCSqGSIb3DQEHAaCCBTIEggUuMIIFKjCCBSYGCyqGSIb3DQEMCgECoIIE7jCCBOowHAYKKoZIhvcNAQwBAzAOBAg71M5exZmMVQICCAAEggTIohxJ2uLoi9RYzxe7t0XOHkTBSI+/Rn3oQNecNuMe/YNpMMsRCQjSOJToWHGayBQJmwSkMd3NP4QnDfqWFIxHbgnfj3FLTIyfkDIObzpfHwLCOrYHQxK9Zr4t/0SfEy/34uH40ZEiPe7Mnn/iTTZy37ecZgLsvlr6wp5Gao3oBjhKZlxJM043Hy9Dk1vtRCRIFCFbdGXtcLnuVKASc+GVw6QJKoXLerImV0U5Pg6khh0huTALEULuvq5cEIlKBNqyZ37cfb3Cvf9mWSTferBcUymGyHtdh+mHtVPb3ZycprtFmKcGMR9bXK0FJ63fERmXRHBN1ZKVC0beWVgcGybDQKdx9Y26UQLtO3xdZK0Eb3Kn8jVJG3sEJi2u3CLS4wD533+jj+b1uuL8Uj/aZy2UvrbIez48JStZgBGg+IhLK5keW7KV1lHiOVwZuWERpxzbNx7jaZRWIUCwN+aMJts1d5aY+wYvlJ9uk2lQc8qpIDIHHXHvyUEnk7jxw88gQjNgo1lvUHewiQk6VBwXX7EII0kLxdNfEpBT9RAdqURqy8dpoQemoc2zwce0e14G+IElJ1ES1j2jMYkYuggjpfUJBc34QrQI2a7UQwloUMwkdoi9nwgnpeL5G3Jyvgfxxf+D9xSXh8auH5IsdO0/enDGo/Xo+ygQ3tgY3dGI02frzRF24i4hFp/FAdbLjytjgCF0KIEXbJylEweZX2g61jL/fJVowJIA3wXDSuIBq9YRdpEA2OhgCdpwcz69W9T5lVfuJBgKOKcFKSQgDm0sEEkcUV9WR4CWfC9lZ+haHvNcrJBsRkHg6KKsV8PwwbUs2WeXl3NvGnJ/kSQbqJOLfURPziY9w4phupuSTAqmQIc0D4MSZLEjDcXKjg3ifFi4NlGLy+iyzGBoC1YZk1OOlO3uhKxxSD8FG6ncRGHEr8OU+2Yj/qubqZMpckPLXPdWbZB24bQxPTKGeQjFGlgt95H3/aRK9FzmBLc1FOe4qnT9chzbewsAnuho+F7Rqe36hPCZHlIrND0RCOdTAw7buJg6yPIbpDA41SpvS1F/BdFuDepf4yd0NWt4N46zUHmpxavv+2zmDiAUG95ZQ7AmkAA39tc+XtQv3IhLK6Wa7joM61jtau34td3vi1RvN2fPY2jQqOvKA2/hTVw5SzWCI0Tl7le6+ol1/QeUJfpjBZl6Ai+ydgVycSXuyq+MXB/UUEWo8RmlX8R9+y2KtCGV0TQjfX/um1D77LzurRO430m2pggcxmdCiFyl4CRp+rXhw7W6nGwLqZfD2msKthh+tn2QxoNII1oGHHsF7fxE/E4wm54IGtqfLM5pV/5hrqgVfTetABMLFEbtIHrxEDms80SyvsP2/JgelFFrs90wZr9QkLVBBQtZpwmLu39u24HlGXhZflXX0fmlHT2vN1e/EH43Nl/iPgZPYTj6fGGJFdaKNm0QlLym2M0btN3MNMXHETUoLDOg17AomH3NRvSIARu92qa48rX+SeCdF0NJ3VmA2I3Fl4A47epkmMcCzF078UVPC2eQ9M2NtxIAsqQnfIFfxirTuSCdeVS06n8KbMi7PG4Luc7IUPr4W3SQ9mY8XjFgRjVl86QpExzE6P5WZ/RDrgaypcDED6BvMSUwIwYJKoZIhvcNAQkVMRYEFKkQDH5bs77hmpmQ899BQPMX5lIDMDEwITAJBgUrDgMCGgUABBSqWv+fwvAy3ohpbmU2hfBpJbEejAQIPczIVgsfvYECAggA"); public static synchronized NetworkProvider provider(final NetworkId networkId) { From 004f32b2346aac1215668698df9f7f466660d371 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 12 Jan 2025 19:19:21 +0100 Subject: [PATCH 210/218] StationDetailsActivity: fix adapter cutting off one item at the end This bug was reported by "Traines". --- .../de/schildbach/oeffi/stations/StationDetailsActivity.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java index b77f1ca..7c57fe6 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationDetailsActivity.java @@ -433,9 +433,8 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa @Override public int getItemCount() { final List selectedDepartures = StationDetailsActivity.this.selectedDepartures; - if (selectedDepartures == null || selectedDepartures.isEmpty()) - return 1; - return selectedDepartures.size(); + final int numDepartures = selectedDepartures != null ? selectedDepartures.size() : 0; + return numDepartures + 1; // account for header } @Override From d1c124478d5e4ac3456df708b4b82ee1c3339feb Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 13 Jan 2025 12:45:08 +0100 Subject: [PATCH 211/218] 13.0.10 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 2 +- public-transport-enabler | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index e4b5dd2..9c31937 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="130009" - android:versionName="13.0.9"> + android:versionCode="130010" + android:versionName="13.0.10"> Date: Tue, 4 Feb 2025 13:52:31 +0100 Subject: [PATCH 212/218] build.gradle: update Guava to 33.4.0-android --- oeffi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oeffi/build.gradle b/oeffi/build.gradle index a62bfaf..2356b7b 100644 --- a/oeffi/build.gradle +++ b/oeffi/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:3.12.13' //noinspection GradleDependency implementation 'com.squareup.okhttp3:logging-interceptor:3.12.13' - implementation 'com.google.guava:guava:33.3.0-android' + implementation 'com.google.guava:guava:33.4.0-android' implementation 'org.osmdroid:osmdroid-android:6.1.20' //noinspection GradleDependency implementation 'org.slf4j:slf4j-api:2.0.9' From 37949d2628e0de65861ecb94fb06067e49b8efee Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 8 Feb 2025 01:06:08 +0100 Subject: [PATCH 213/218] build.Containerfile: only install Debian packages that are strictly necessary --- build.Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.Containerfile b/build.Containerfile index 39577c6..34ac0a1 100644 --- a/build.Containerfile +++ b/build.Containerfile @@ -19,7 +19,7 @@ FROM debian:bookworm-slim AS build-stage # install debian packages ENV DEBIAN_FRONTEND noninteractive RUN /usr/bin/apt-get update && \ - /usr/bin/apt-get --yes install disorderfs openjdk-17-jdk-headless gradle sdkmanager && \ + /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 && \ /usr/sbin/dpkg-reconfigure --frontend noninteractive tzdata && \ /bin/ln -s /proc/self/mounts /etc/mtab && \ From 53c5ea26b6646f9ef0d1ee2365098641b4091dfd Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 4 Feb 2025 13:52:45 +0100 Subject: [PATCH 214/218] build.Containerfile: use cache for Debian packages --- build.Containerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build.Containerfile b/build.Containerfile index 34ac0a1..0de6cc3 100644 --- a/build.Containerfile +++ b/build.Containerfile @@ -18,7 +18,10 @@ FROM debian:bookworm-slim AS build-stage # install debian packages ENV DEBIAN_FRONTEND noninteractive -RUN /usr/bin/apt-get update && \ +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --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 && \ /usr/sbin/dpkg-reconfigure --frontend noninteractive tzdata && \ From e7e8af6a10bfddd6bb812a48ca514177445b7a4c Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 4 Feb 2025 13:54:52 +0100 Subject: [PATCH 215/218] build.Containerfile: use cache for the Android SDK --- build.Containerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/build.Containerfile b/build.Containerfile index 0de6cc3..d01c7d3 100644 --- a/build.Containerfile +++ b/build.Containerfile @@ -37,10 +37,12 @@ COPY --chown=builder / project/ # accept SDK licenses 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 -RUN if [ -e /dev/fuse ] ; \ +RUN --mount=target=/home/builder/android-sdk,type=cache,uid=1000,gid=1000,sharing=locked \ + if [ -e /dev/fuse ] ; \ then /bin/mv project project.u && /bin/mkdir project && \ /usr/bin/disorderfs --sort-dirents=yes --reverse-dirents=no project.u project ; \ fi && \ From cd6628088a08dc127db53c1f0b9d4014f19cd635 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 4 Feb 2025 13:57:45 +0100 Subject: [PATCH 216/218] build.Containerfile: use cache for Gradle/Maven build artifacts --- build.Containerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/build.Containerfile b/build.Containerfile index d01c7d3..a52d6b8 100644 --- a/build.Containerfile +++ b/build.Containerfile @@ -42,6 +42,7 @@ RUN --mount=target=/home/builder/android-sdk,type=cache,uid=1000,gid=1000,sharin # build project 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 && \ /usr/bin/disorderfs --sort-dirents=yes --reverse-dirents=no project.u project ; \ From 2736bc82dd08937aebebf26a582949cc6a8c3205 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 10 Feb 2025 14:48:02 +0100 Subject: [PATCH 217/218] PL: re-add region Poland This more or less reverts commit 0c894a541da6e26fae68c0c00dcde021b95a0995. --- oeffi/assets/networks.txt | 3 +++ oeffi/res/values-de/networks.xml | 2 ++ oeffi/res/values/networks.xml | 2 ++ oeffi/res/xml/network_security_config.xml | 1 + .../de/schildbach/oeffi/network/NetworkProviderFactory.java | 6 +++++- 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/oeffi/assets/networks.txt b/oeffi/assets/networks.txt index d66c4f9..367e768 100644 --- a/oeffi/assets/networks.txt +++ b/oeffi/assets/networks.txt @@ -65,6 +65,9 @@ SE|sv-SE|SE;Stockholm 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 +# PL +PL|pl-PL|PL;Warschau + # AE DUB|ae-AE|AE;Dubai|beta diff --git a/oeffi/res/values-de/networks.xml b/oeffi/res/values-de/networks.xml index 591b3c3..af68f7f 100644 --- a/oeffi/res/values-de/networks.xml +++ b/oeffi/res/values-de/networks.xml @@ -97,6 +97,8 @@ Lokal- und Regionalverkehr (z.B. London, Birmingham) Liverpool Lokal- und Regionalverkehr + Polen + Fern-, Regional und Lokalverkehr (z.B. Warschau) Dubai Lokalverkehr San Francisco diff --git a/oeffi/res/values/networks.xml b/oeffi/res/values/networks.xml index e7a6def..936d8db 100644 --- a/oeffi/res/values/networks.xml +++ b/oeffi/res/values/networks.xml @@ -97,6 +97,8 @@ local and regional (e.g. London, Birmingham) Liverpool local and regional + Poland + long-distance, regional and local (e.g. Warsaw) Dubai local San Francisco diff --git a/oeffi/res/xml/network_security_config.xml b/oeffi/res/xml/network_security_config.xml index d2d41f7..0bd486a 100644 --- a/oeffi/res/xml/network_security_config.xml +++ b/oeffi/res/xml/network_security_config.xml @@ -15,6 +15,7 @@ appefa10.verbundlinie.at railteam.hafas.eu mobil.vbl.ch + mobil.rozklad-pkp.pl diff --git a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java index 969d7dc..886733c 100644 --- a/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java +++ b/oeffi/src/de/schildbach/oeffi/network/NetworkProviderFactory.java @@ -46,6 +46,7 @@ import de.schildbach.pte.NsProvider; import de.schildbach.pte.NvbwProvider; import de.schildbach.pte.NvvProvider; import de.schildbach.pte.OebbProvider; +import de.schildbach.pte.PlProvider; import de.schildbach.pte.RtProvider; import de.schildbach.pte.RtaChicagoProvider; import de.schildbach.pte.SeProvider; @@ -86,7 +87,8 @@ public final class NetworkProviderFactory { return cachedNetworkProvider; final AbstractNetworkProvider networkProvider = forId(networkId); - networkProvider.setUserAgent(USER_AGENT); + if (networkId != NetworkId.PL) + networkProvider.setUserAgent(USER_AGENT); providerCache.put(networkId, networkProvider); return networkProvider; } @@ -178,6 +180,8 @@ public final class NetworkProviderFactory { return new TlemProvider(); else if (networkId.equals(NetworkId.MERSEY)) return new MerseyProvider(); + else if (networkId.equals(NetworkId.PL)) + return new PlProvider("{\"type\":\"AID\",\"aid\":\"DrxJYtYZQpEBCtcb\"}"); else if (networkId.equals(NetworkId.DUB)) return new DubProvider(); else if (networkId.equals(NetworkId.BART)) From f1198671b1d0a9d433d094d9eae7e758e54cb482 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 16 Jun 2025 21:15:06 +0200 Subject: [PATCH 218/218] 13.0.11 --- oeffi/AndroidManifest.xml | 4 ++-- oeffi/CHANGES | 4 ++++ public-transport-enabler | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oeffi/AndroidManifest.xml b/oeffi/AndroidManifest.xml index 9c31937..b68ae87 100644 --- a/oeffi/AndroidManifest.xml +++ b/oeffi/AndroidManifest.xml @@ -20,8 +20,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="de.schildbach.oeffi" - android:versionCode="130010" - android:versionName="13.0.10"> + android:versionCode="130011" + android:versionName="13.0.11">