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.
This commit is contained in:
Andreas Schildbach 2024-10-19 20:55:04 +02:00
parent b5dac623dd
commit 2a1cc53180
17 changed files with 12 additions and 44 deletions

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- background -->
<color name="bg_status_bar">@android:color/transparent</color>
<color name="bg_navigation_bar">@android:color/transparent</color>
<color name="bg_navigation_bar_fullscreen">@android:color/transparent</color>
</resources>

View file

@ -23,7 +23,6 @@
<color name="bg_delayed">#444444</color> <color name="bg_delayed">#444444</color>
<color name="bg_current_time">#ffff00</color> <color name="bg_current_time">#ffff00</color>
<color name="bg_position">#bbbbbb</color> <color name="bg_position">#bbbbbb</color>
<color name="bg_status_bar">#44000000</color>
<item name="alpha_bright_white" format="float" type="dimen">0.8</item> <item name="alpha_bright_white" format="float" type="dimen">0.8</item>

View file

@ -5,8 +5,6 @@
<style name="My.Theme" parent="@android:style/Theme.Material.NoActionBar"> <style name="My.Theme" parent="@android:style/Theme.Material.NoActionBar">
<item name="android:windowBackground">@color/bg_level0</item> <item name="android:windowBackground">@color/bg_level0</item>
<item name="android:statusBarColor">@color/bg_status_bar</item>
<item name="android:navigationBarColor">@color/bg_navigation_bar</item>
<item name="android:textViewStyle">@style/My.Widget.TextView</item> <item name="android:textViewStyle">@style/My.Widget.TextView</item>
<item name="android:autoCompleteTextViewStyle">@style/My.Widget.AutoCompleteTextView</item> <item name="android:autoCompleteTextViewStyle">@style/My.Widget.AutoCompleteTextView</item>
<item name="android:dropDownListViewStyle">@style/My.Widget.ListView.DropDown</item> <item name="android:dropDownListViewStyle">@style/My.Widget.ListView.DropDown</item>
@ -17,8 +15,6 @@
</style> </style>
<style name="My.Theme.Preference" parent="@android:style/Theme.Material"> <style name="My.Theme.Preference" parent="@android:style/Theme.Material">
<item name="android:statusBarColor">@color/bg_action_bar</item>
<item name="android:navigationBarColor">@color/bg_level0</item>
<item name="android:actionBarStyle">@style/My.Widget.ActionBar</item> <item name="android:actionBarStyle">@style/My.Widget.ActionBar</item>
</style> </style>

View file

@ -4,8 +4,6 @@
<style name="My.Theme.DarkDefault" parent="@android:style/Theme.Material.Light.NoActionBar"> <style name="My.Theme.DarkDefault" parent="@android:style/Theme.Material.Light.NoActionBar">
<item name="android:windowBackground">@color/bg_level0_darkdefault</item> <item name="android:windowBackground">@color/bg_level0_darkdefault</item>
<item name="android:statusBarColor">@color/bg_status_bar</item>
<item name="android:navigationBarColor">@color/bg_navigation_bar</item>
<item name="android:textViewStyle">@style/My.Widget.TextView.DarkDefault</item> <item name="android:textViewStyle">@style/My.Widget.TextView.DarkDefault</item>
<item name="android:imageButtonStyle">@style/My.Widget.ImageButton</item> <item name="android:imageButtonStyle">@style/My.Widget.ImageButton</item>
</style> </style>

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- background -->
<color name="bg_status_bar">@android:color/transparent</color>
<color name="bg_navigation_bar">@android:color/transparent</color>
<color name="bg_navigation_bar_fullscreen">@android:color/transparent</color>
</resources>

View file

@ -37,9 +37,6 @@
<color name="bg_position">#757575</color> <color name="bg_position">#757575</color>
<color name="bg_position_darkdefault">#bbbbbb</color> <color name="bg_position_darkdefault">#bbbbbb</color>
<color name="bg_highlighted_darkdefault">#ff4444</color> <color name="bg_highlighted_darkdefault">#ff4444</color>
<color name="bg_status_bar">#44000000</color>
<color name="bg_navigation_bar">@android:color/black</color>
<color name="bg_navigation_bar_fullscreen">#44000000</color>
<item name="alpha_bright_white" format="float" type="dimen">1</item> <item name="alpha_bright_white" format="float" type="dimen">1</item>

View file

@ -5,8 +5,6 @@
<style name="My.Theme" parent="@android:style/Theme.Material.Light.NoActionBar"> <style name="My.Theme" parent="@android:style/Theme.Material.Light.NoActionBar">
<item name="android:windowBackground">@color/bg_level0</item> <item name="android:windowBackground">@color/bg_level0</item>
<item name="android:statusBarColor">@color/bg_status_bar</item>
<item name="android:navigationBarColor">@color/bg_navigation_bar</item>
<item name="android:textViewStyle">@style/My.Widget.TextView</item> <item name="android:textViewStyle">@style/My.Widget.TextView</item>
<item name="android:autoCompleteTextViewStyle">@style/My.Widget.AutoCompleteTextView</item> <item name="android:autoCompleteTextViewStyle">@style/My.Widget.AutoCompleteTextView</item>
<item name="android:dropDownListViewStyle">@style/My.Widget.ListView.DropDown</item> <item name="android:dropDownListViewStyle">@style/My.Widget.ListView.DropDown</item>
@ -18,8 +16,6 @@
<style name="My.Theme.DarkDefault" parent="@android:style/Theme.Material.NoActionBar"> <style name="My.Theme.DarkDefault" parent="@android:style/Theme.Material.NoActionBar">
<item name="android:windowBackground">@color/bg_level0_darkdefault</item> <item name="android:windowBackground">@color/bg_level0_darkdefault</item>
<item name="android:statusBarColor">@color/bg_status_bar</item>
<item name="android:navigationBarColor">@color/bg_navigation_bar</item>
<item name="android:textViewStyle">@style/My.Widget.TextView.DarkDefault</item> <item name="android:textViewStyle">@style/My.Widget.TextView.DarkDefault</item>
<item name="android:imageButtonStyle">@style/My.Widget.ImageButton</item> <item name="android:imageButtonStyle">@style/My.Widget.ImageButton</item>
</style> </style>
@ -27,13 +23,10 @@
<style name="My.Theme.Fullscreen" parent="@android:style/Theme.Material.Light.NoActionBar.Fullscreen"> <style name="My.Theme.Fullscreen" parent="@android:style/Theme.Material.Light.NoActionBar.Fullscreen">
<item name="android:windowBackground">@android:color/black</item> <item name="android:windowBackground">@android:color/black</item>
<item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="27">shortEdges</item> <item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="27">shortEdges</item>
<item name="android:navigationBarColor">@color/bg_navigation_bar_fullscreen</item>
<item name="android:textViewStyle">@style/My.Widget.TextView</item> <item name="android:textViewStyle">@style/My.Widget.TextView</item>
</style> </style>
<style name="My.Theme.Preference" parent="@android:style/Theme.Material.Light.DarkActionBar"> <style name="My.Theme.Preference" parent="@android:style/Theme.Material.Light.DarkActionBar">
<item name="android:statusBarColor">@color/bg_action_bar</item>
<item name="android:navigationBarColor">@color/bg_level0</item>
<item name="android:actionBarStyle">@style/My.Widget.ActionBar</item> <item name="android:actionBarStyle">@style/My.Widget.ActionBar</item>
</style> </style>

View file

@ -20,6 +20,7 @@ package de.schildbach.oeffi;
import android.app.ActivityManager.TaskDescription; import android.app.ActivityManager.TaskDescription;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
@ -29,6 +30,8 @@ import android.view.ViewGroup;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.activity.ComponentActivity; import androidx.activity.ComponentActivity;
import androidx.activity.EdgeToEdge;
import androidx.activity.SystemBarStyle;
import de.schildbach.oeffi.network.NetworkResources; import de.schildbach.oeffi.network.NetworkResources;
import de.schildbach.oeffi.util.ErrorReporter; import de.schildbach.oeffi.util.ErrorReporter;
import de.schildbach.pte.NetworkId; import de.schildbach.pte.NetworkId;
@ -44,6 +47,7 @@ public abstract class OeffiActivity extends ComponentActivity {
@Override @Override
protected void onCreate(final Bundle savedInstanceState) { protected void onCreate(final Bundle savedInstanceState) {
EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT));
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
this.application = (Application) getApplication(); this.application = (Application) getApplication();
this.prefs = PreferenceManager.getDefaultSharedPreferences(this); this.prefs = PreferenceManager.getDefaultSharedPreferences(this);

View file

@ -307,7 +307,6 @@ public class DirectionsActivity extends OeffiMainActivity implements QueryHistor
backgroundHandler = new Handler(backgroundThread.getLooper()); backgroundHandler = new Handler(backgroundThread.getLooper());
setContentView(R.layout.directions_content); setContentView(R.layout.directions_content);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
return insets; return insets;

View file

@ -186,7 +186,6 @@ public class TripDetailsActivity extends OeffiActivity implements LocationListen
scheduleTripIntent = scheduleTripIntent(trip); scheduleTripIntent = scheduleTripIntent(trip);
setContentView(R.layout.directions_trip_details_content); setContentView(R.layout.directions_trip_details_content);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
return insets; return insets;

View file

@ -130,7 +130,6 @@ public class TripsOverviewActivity extends OeffiActivity {
final Uri historyUri = historyUriStr != null ? Uri.parse(historyUriStr) : null; final Uri historyUri = historyUriStr != null ? Uri.parse(historyUriStr) : null;
setContentView(R.layout.directions_trip_overview_content); setContentView(R.layout.directions_trip_overview_content);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
return insets; return insets;

View file

@ -25,6 +25,7 @@ import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Color;
import android.location.Address; import android.location.Address;
import android.location.Criteria; import android.location.Criteria;
import android.location.LocationManager; import android.location.LocationManager;
@ -38,6 +39,8 @@ import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.activity.ComponentActivity; import androidx.activity.ComponentActivity;
import androidx.activity.EdgeToEdge;
import androidx.activity.SystemBarStyle;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
@ -109,6 +112,7 @@ public class NetworkPickerActivity extends ComponentActivity implements Location
@Override @Override
protected void onCreate(final Bundle savedInstanceState) { protected void onCreate(final Bundle savedInstanceState) {
EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT));
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
prefs = PreferenceManager.getDefaultSharedPreferences(this); prefs = PreferenceManager.getDefaultSharedPreferences(this);

View file

@ -23,6 +23,7 @@ import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
@ -35,6 +36,8 @@ import android.widget.PopupMenu;
import android.widget.TextView; import android.widget.TextView;
import android.widget.ViewAnimator; import android.widget.ViewAnimator;
import androidx.activity.ComponentActivity; import androidx.activity.ComponentActivity;
import androidx.activity.EdgeToEdge;
import androidx.activity.SystemBarStyle;
import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
@ -116,6 +119,7 @@ public class PlanActivity extends ComponentActivity {
@Override @Override
protected void onCreate(final Bundle savedInstanceState) { protected void onCreate(final Bundle savedInstanceState) {
EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT));
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
this.application = (Application) getApplication(); this.application = (Application) getApplication();
@ -125,7 +129,6 @@ public class PlanActivity extends ComponentActivity {
backgroundHandler = new Handler(backgroundThread.getLooper()); backgroundHandler = new Handler(backgroundThread.getLooper());
setContentView(R.layout.plans_content); setContentView(R.layout.plans_content);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
final Animation zoomControlsAnimation = AnimationUtils.loadAnimation(this, R.anim.zoom_controls); final Animation zoomControlsAnimation = AnimationUtils.loadAnimation(this, R.anim.zoom_controls);
zoomControlsAnimation.setFillAfter(true); // workaround: set through code because XML does not work zoomControlsAnimation.setFillAfter(true); // workaround: set through code because XML does not work

View file

@ -110,7 +110,6 @@ public class PlansPickerActivity extends OeffiMainActivity implements LocationHe
thumbCache = new Cache(cacheDir, THUMB_CACHE_SIZE); thumbCache = new Cache(cacheDir, THUMB_CACHE_SIZE);
setContentView(R.layout.plans_picker_content); setContentView(R.layout.plans_picker_content);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
return insets; return insets;

View file

@ -22,7 +22,6 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.view.View;
import android.widget.ViewAnimator; import android.widget.ViewAnimator;
import androidx.activity.result.contract.ActivityResultContract; import androidx.activity.result.contract.ActivityResultContract;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
@ -84,7 +83,6 @@ public class FavoriteStationsActivity extends OeffiActivity
network = (NetworkId) intent.getSerializableExtra(INTENT_EXTRA_NETWORK); network = (NetworkId) intent.getSerializableExtra(INTENT_EXTRA_NETWORK);
setContentView(R.layout.favorites_content); setContentView(R.layout.favorites_content);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
return insets; return insets;

View file

@ -137,7 +137,6 @@ public class StationDetailsActivity extends OeffiActivity implements StationsAwa
backgroundHandler = new Handler(backgroundThread.getLooper()); backgroundHandler = new Handler(backgroundThread.getLooper());
setContentView(R.layout.stations_station_details_content); setContentView(R.layout.stations_station_details_content);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
return insets; return insets;

View file

@ -184,7 +184,6 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware
res = getResources(); res = getResources();
setContentView(R.layout.stations_content); setContentView(R.layout.stations_content);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> { findViewById(android.R.id.content).setOnApplyWindowInsetsListener((v, insets) -> {
v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0); v.setPadding(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), 0);
return insets; return insets;