From 75913e122ae293d29f2db7d2edfae19b0d5bfbc6 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 15 Oct 2024 21:22:57 +0200 Subject: [PATCH 01/28] 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 02/28] 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 03/28] 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 04/28] 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 05/28] 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 06/28] 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 07/28] 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 08/28] 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 09/28] 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 10/28] 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 11/28] 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 12/28] 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 13/28] 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 14/28] 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 15/28] 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 16/28] 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 17/28] 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 18/28] 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 19/28] 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("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"); 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 20/28] 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 21/28] 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 22/28] 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 23/28] 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 24/28] 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 25/28] 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 26/28] 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 27/28] 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 28/28] 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">