diff --git a/app/build.gradle b/app/build.gradle index 77f809e077..dd19e4f8bc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -267,6 +267,8 @@ dependencies { implementation "androidx.car.app:app:1.7.0" /** Third-party libraries **/ + implementation 'org.lsposed.hiddenapibypass:hiddenapibypass:6.1' + // HTML parser implementation "org.jsoup:jsoup:1.14.3" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 73f63fa818..0759c024cd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,7 +53,6 @@ android:logo="@mipmap/ic_launcher" android:theme="@style/OpeningTheme" android:resizeableActivity="true" - android:enableOnBackInvokedCallback="false" tools:ignore="AllowBackup"> sortedVideoStreams; private int selectedVideoStreamIndex = -1; - private int statusBarInset; private BottomSheetBehavior bottomSheetBehavior; private BroadcastReceiver broadcastReceiver; @@ -807,20 +803,6 @@ protected void initListeners() { }); setupBottomPlayer(); - final View bottomSheetLayout = activity.findViewById(R.id.fragment_player_holder); - ViewCompat.setOnApplyWindowInsetsListener(bottomSheetLayout, (v, insets) -> { - final int statusBarHeight = insets.getInsets( - WindowInsetsCompat.Type.statusBars()).top; - statusBarInset = insets.getInsetsIgnoringVisibility( - WindowInsetsCompat.Type.statusBars()).top; - final int topPadding = isPlayerAvailable() && player.isFullscreen() - ? 0 : statusBarHeight; - v.setPadding(v.getPaddingLeft(), topPadding, - v.getPaddingRight(), v.getPaddingBottom()); - updateBottomSheetPeekHeight(); - return insets; - }); - ViewCompat.requestApplyInsets(bottomSheetLayout); if (!playerHolder.isBound()) { setHeightThumbnail(); } else { @@ -2278,14 +2260,6 @@ public void onFullscreenStateChanged(final boolean fullscreen) { scrollToTop(); addVideoPlayerView(); - final View bottomSheetLayout = requireActivity().findViewById(R.id.fragment_player_holder); - if (fullscreen) { - bottomSheetLayout.setPadding(bottomSheetLayout.getPaddingLeft(), 0, - bottomSheetLayout.getPaddingRight(), bottomSheetLayout.getPaddingBottom()); - } else { - bottomSheetLayout.setPadding(bottomSheetLayout.getPaddingLeft(), statusBarInset, - bottomSheetLayout.getPaddingRight(), bottomSheetLayout.getPaddingBottom()); - } } @Override @@ -2356,11 +2330,6 @@ private void showSystemUi() { WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT; } activity.getWindow().getDecorView().setSystemUiVisibility(0); - final WindowInsetsControllerCompat controller = ViewCompat.getWindowInsetsController( - activity.getWindow().getDecorView()); - if (controller != null) { - controller.show(WindowInsetsCompat.Type.systemBars()); - } activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); activity.getWindow().setStatusBarColor(ThemeHelper.resolveColorFromAttr( requireContext(), android.R.attr.colorPrimary)); @@ -2393,24 +2362,19 @@ private void hideSystemUi() { visibility |= View.SYSTEM_UI_FLAG_FULLSCREEN; } activity.getWindow().getDecorView().setSystemUiVisibility(visibility); - final WindowInsetsControllerCompat controller = ViewCompat.getWindowInsetsController( - activity.getWindow().getDecorView()); - if (controller != null) { - controller.setSystemBarsBehavior( - WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); - controller.hide(WindowInsetsCompat.Type.systemBars()); - } if (isInMultiWindow || isPlayerAvailable() && player.isFullscreen()) { activity.getWindow().setStatusBarColor(Color.TRANSPARENT); activity.getWindow().setNavigationBarColor(Color.TRANSPARENT); } - activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } // Listener implementation public void hideSystemUiIfNeeded() { - if (isPlayerAvailable() && player.isFullscreen()) { + if (isPlayerAvailable() + && player.isFullscreen() + && bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) { hideSystemUi(); } } @@ -2618,13 +2582,6 @@ private void manageSpaceAtTheBottom(final boolean showMore) { newBottomPadding); } - private void updateBottomSheetPeekHeight() { - final int peekHeight = getResources().getDimensionPixelSize(R.dimen.mini_player_height) - + statusBarInset; - bottomSheetBehavior.setPeekHeight(bottomSheetState == BottomSheetBehavior.STATE_HIDDEN - ? 0 : peekHeight); - } - private void setupBottomPlayer() { final CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) binding.appBarLayout.getLayoutParams(); @@ -2633,9 +2590,10 @@ private void setupBottomPlayer() { final FrameLayout bottomSheetLayout = activity.findViewById(R.id.fragment_player_holder); bottomSheetBehavior = BottomSheetBehavior.from(bottomSheetLayout); bottomSheetBehavior.setState(bottomSheetState); + final int peekHeight = getResources().getDimensionPixelSize(R.dimen.mini_player_height); if (bottomSheetState != BottomSheetBehavior.STATE_HIDDEN) { manageSpaceAtTheBottom(false); - updateBottomSheetPeekHeight(); + bottomSheetBehavior.setPeekHeight(peekHeight); if (bottomSheetState == BottomSheetBehavior.STATE_COLLAPSED) { binding.overlayLayout.setAlpha(MAX_OVERLAY_ALPHA); } else if (bottomSheetState == BottomSheetBehavior.STATE_EXPANDED) { @@ -2663,7 +2621,7 @@ public void onStateChanged(@NonNull final View bottomSheet, final int newState) moveFocusToMainFragment(false); manageSpaceAtTheBottom(false); - updateBottomSheetPeekHeight(); + bottomSheetBehavior.setPeekHeight(peekHeight); // Disable click because overlay buttons located on top of buttons // from the player setOverlayElementsClickable(false); @@ -2689,7 +2647,7 @@ && isPlayerAvailable() moveFocusToMainFragment(true); manageSpaceAtTheBottom(false); - updateBottomSheetPeekHeight(); + bottomSheetBehavior.setPeekHeight(peekHeight); // Re-enable clicks setOverlayElementsClickable(true); diff --git a/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java b/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java index d2512e0c09..7fa03e806b 100644 --- a/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java +++ b/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java @@ -9,7 +9,6 @@ import android.os.IBinder; import android.provider.Settings; import android.util.Log; -import android.util.TypedValue; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -18,11 +17,8 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.ItemTouchHelper; -import com.google.android.material.appbar.AppBarLayout; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -82,36 +78,6 @@ protected void onCreate(final Bundle savedInstanceState) { setSupportActionBar(queueControlBinding.toolbar); - queueControlBinding.appbar.setStatusBarForeground(null); - getWindow().setStatusBarColor(android.graphics.Color.TRANSPARENT); - - WindowInsetsHelper.applyStatusBarInsets(this, queueControlBinding.toolbar); - - ViewCompat.setOnApplyWindowInsetsListener(queueControlBinding.getRoot(), (v, insets) -> { - final int navBarHeight = insets.getInsets( - WindowInsetsCompat.Type.navigationBars()).bottom; - final int twelveDp = (int) (12 * getResources() - .getDisplayMetrics().density + 0.5f); - - if (queueControlBinding.playbackControls != null) { - final ViewGroup.MarginLayoutParams controlsParams = - (ViewGroup.MarginLayoutParams) queueControlBinding - .playbackControls.getLayoutParams(); - controlsParams.bottomMargin = twelveDp + navBarHeight; - queueControlBinding.playbackControls.setLayoutParams(controlsParams); - } - - if (queueControlBinding.playbackControlsBottom != null) { - queueControlBinding.playbackControlsBottom.setPadding( - queueControlBinding.playbackControlsBottom.getPaddingLeft(), - queueControlBinding.playbackControlsBottom.getPaddingTop(), - queueControlBinding.playbackControlsBottom.getPaddingRight(), - navBarHeight); - } - - return insets; - }); - if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle(R.string.title_activity_play_queue); diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java index 53b8e54bb9..612a3eaedf 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -500,7 +500,6 @@ public void setupFromView(@NonNull final PlayerBinding playerBinding) { private void initViews(@NonNull final PlayerBinding playerBinding) { binding = playerBinding; - updatePlaybackControlInsetsMode(); setupSubtitleView(); binding.resizeTextView @@ -1388,7 +1387,6 @@ private void onBroadcastReceived(final Intent intent) { // and thus enlarging the whole player. // This causes the seekbar to be ouf the visible area. updateEndScreenThumbnail(); - updatePlaybackControlInsetsMode(); break; case Intent.ACTION_SCREEN_ON: // Interrupt playback only when screen turns on @@ -2251,10 +2249,6 @@ private void showOrHideButtons() { private void showSystemUIPartially() { final AppCompatActivity activity = getParentActivity(); if (isFullscreen && activity != null) { - if (!service.isLandscape()) { - hideSystemUIIfNeeded(); - return; - } activity.getWindow().setStatusBarColor(Color.TRANSPARENT); activity.getWindow().setNavigationBarColor(Color.TRANSPARENT); final int visibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE @@ -4716,7 +4710,6 @@ public void toggleFullscreen() { } isFullscreen = !isFullscreen; - updatePlaybackControlInsetsMode(); if (!isFullscreen) { // Apply window insets because Android will not do it when orientation changes // from landscape to portrait (open vertical video to reproduce) @@ -4744,14 +4737,6 @@ public void toggleFullscreen() { setupScreenRotationButton(); } - private void updatePlaybackControlInsetsMode() { - final boolean fitSystemWindows = isFullscreen && service.isLandscape(); - binding.playbackControlRoot.setFitsSystemWindows(fitSystemWindows); - if (!fitSystemWindows) { - binding.playbackControlRoot.setPadding(0, 0, 0, 0); - } - } - public void checkLandscape() { final AppCompatActivity parent = getParentActivity(); final boolean videoInLandscapeButNotInFullscreen = diff --git a/app/src/main/java/org/schabi/newpipe/settings/BaseFilterListActivity.java b/app/src/main/java/org/schabi/newpipe/settings/BaseFilterListActivity.java index e77493a39b..5c1b3749bb 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/BaseFilterListActivity.java +++ b/app/src/main/java/org/schabi/newpipe/settings/BaseFilterListActivity.java @@ -12,7 +12,6 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SearchView; -import androidx.appcompat.widget.Toolbar; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -24,7 +23,6 @@ import org.schabi.newpipe.R; import org.schabi.newpipe.util.ServiceHelper; import org.schabi.newpipe.util.ThemeHelper; -import org.schabi.newpipe.util.WindowInsetsHelper; import java.util.ArrayList; import java.util.HashSet; @@ -49,10 +47,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_filter_list); - final Toolbar toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - WindowInsetsHelper.applyStatusBarInsets(this, toolbar); + setSupportActionBar(findViewById(R.id.toolbar)); if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle(getActivityTitle()); @@ -63,8 +58,6 @@ protected void onCreate(Bundle savedInstanceState) { recyclerView = findViewById(R.id.filter_list); recyclerView.setLayoutManager(new LinearLayoutManager(this)); - // Edge-to-edge (targetSdk 35+): keep the bottom of the filter list above the nav bar. - WindowInsetsHelper.applyNavigationBarInsets(recyclerView); sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); loadFilterItems(); diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java index 09b77f444f..3ff93d79cf 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java @@ -9,7 +9,6 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; import android.widget.EditText; import androidx.annotation.IdRes; @@ -35,7 +34,6 @@ import org.schabi.newpipe.settings.preferencesearch.PreferenceSearchResultListener; import org.schabi.newpipe.settings.preferencesearch.PreferenceSearcher; import org.schabi.newpipe.util.DeviceUtils; -import org.schabi.newpipe.util.WindowInsetsHelper; import org.schabi.newpipe.util.KeyboardUtil; import org.schabi.newpipe.util.ReleaseVersionUtil; import org.schabi.newpipe.util.ThemeHelper; @@ -103,13 +101,6 @@ protected void onCreate(final Bundle savedInstanceBundle) { setSupportActionBar(settingsLayoutBinding.settingsToolbarLayout.toolbar); - WindowInsetsHelper.applyStatusBarInsets(this, - settingsLayoutBinding.settingsToolbarLayout.toolbar, - settingsLayoutBinding.settingsFragmentHolder); - // Edge-to-edge (targetSdk 35+): keep the last preference entry on long, scrollable - // settings pages above the system navigation bar. - WindowInsetsHelper.applyNavigationBarInsets(settingsLayoutBinding.settingsFragmentHolder); - if (restored) { // Restore state if (this.wasSearchActive) { diff --git a/app/src/main/java/org/schabi/newpipe/util/EdgeToEdgeWorkaround.java b/app/src/main/java/org/schabi/newpipe/util/EdgeToEdgeWorkaround.java new file mode 100644 index 0000000000..c938d0b4cb --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/EdgeToEdgeWorkaround.java @@ -0,0 +1,33 @@ +package org.schabi.newpipe.util; + +import android.os.Build; +import android.util.Log; + +import org.lsposed.hiddenapibypass.HiddenApiBypass; + +import java.util.Collections; + +public final class EdgeToEdgeWorkaround { + private static final String TAG = EdgeToEdgeWorkaround.class.getSimpleName(); + private static final long ENFORCE_EDGE_TO_EDGE = 309578419L; + + private EdgeToEdgeWorkaround() { + } + + public static void apply() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM) { + return; + } + + try { + final Class changeConfigClass = + Class.forName("android.compat.Compatibility$ChangeConfig"); + final Object changeConfig = HiddenApiBypass.newInstance(changeConfigClass, + Collections.emptySet(), Collections.singleton(ENFORCE_EDGE_TO_EDGE)); + final Class compatibilityClass = Class.forName("android.compat.Compatibility"); + HiddenApiBypass.invoke(compatibilityClass, null, "setOverrides", changeConfig); + } catch (final Throwable throwable) { + Log.e(TAG, "Unable to disable edge-to-edge enforcement", throwable); + } + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/StatusBarHelper.java b/app/src/main/java/org/schabi/newpipe/util/StatusBarHelper.java deleted file mode 100644 index bafdf56e0d..0000000000 --- a/app/src/main/java/org/schabi/newpipe/util/StatusBarHelper.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.schabi.newpipe.util; - -import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; - -import androidx.annotation.NonNull; - -public final class StatusBarHelper { - private static int portraitHeight; - private static int landscapeHeight; - - private StatusBarHelper() { - } - - public static void init(@NonNull final Context context) { - final Resources resources = context.getResources(); - portraitHeight = getInternalDimensionPixelSize(resources, "status_bar_height_portrait"); - landscapeHeight = getInternalDimensionPixelSize(resources, "status_bar_height_landscape"); - - final int fallbackHeight = getInternalDimensionPixelSize(resources, "status_bar_height"); - if (portraitHeight == 0) { - portraitHeight = fallbackHeight; - } - if (landscapeHeight == 0) { - landscapeHeight = fallbackHeight; - } - } - - public static int get(@NonNull final Context context) { - return context.getResources().getConfiguration().orientation - == Configuration.ORIENTATION_LANDSCAPE ? landscapeHeight : portraitHeight; - } - - private static int getInternalDimensionPixelSize(@NonNull final Resources resources, - @NonNull final String name) { - final int resourceId = resources.getIdentifier(name, "dimen", "android"); - if (resourceId == 0) { - return 0; - } - return resources.getDimensionPixelSize(resourceId); - } -} diff --git a/app/src/main/java/org/schabi/newpipe/util/WindowInsetsHelper.java b/app/src/main/java/org/schabi/newpipe/util/WindowInsetsHelper.java deleted file mode 100644 index c77446f437..0000000000 --- a/app/src/main/java/org/schabi/newpipe/util/WindowInsetsHelper.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.schabi.newpipe.util; - -import android.util.TypedValue; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import androidx.core.graphics.Insets; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; - -public final class WindowInsetsHelper { - - private WindowInsetsHelper() { - } - - public static void applyStatusBarInsets(@NonNull final AppCompatActivity activity, - @NonNull final Toolbar toolbar) { - final int initialLeft = toolbar.getPaddingLeft(); - final int initialTop = toolbar.getPaddingTop(); - final int initialRight = toolbar.getPaddingRight(); - final int initialBottom = toolbar.getPaddingBottom(); - final int actionBarSize = getActionBarSize(activity); - - ViewCompat.setOnApplyWindowInsetsListener(toolbar, (view, insets) -> { - final Insets statusBars = insets.getInsets(WindowInsetsCompat.Type.statusBars()); - view.setPadding(initialLeft, initialTop + statusBars.top, initialRight, initialBottom); - - final ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); - layoutParams.height = actionBarSize + initialTop + statusBars.top + initialBottom; - view.setLayoutParams(layoutParams); - - return insets; - }); - } - - public static void applyStatusBarInsets(@NonNull final AppCompatActivity activity, - @NonNull final Toolbar toolbar, - @NonNull final View content) { - final ViewGroup.MarginLayoutParams layoutParams = - (ViewGroup.MarginLayoutParams) content.getLayoutParams(); - final int initialTopMargin = layoutParams.topMargin; - - applyStatusBarInsets(activity, toolbar, insets -> { - layoutParams.topMargin = initialTopMargin + insets.top; - content.setLayoutParams(layoutParams); - }); - } - - public static void applyStatusBarInsets(@NonNull final AppCompatActivity activity, - @NonNull final Toolbar toolbar, - @NonNull final InsetsConsumer insetsConsumer) { - final int initialLeft = toolbar.getPaddingLeft(); - final int initialTop = toolbar.getPaddingTop(); - final int initialRight = toolbar.getPaddingRight(); - final int initialBottom = toolbar.getPaddingBottom(); - final int actionBarSize = getActionBarSize(activity); - - ViewCompat.setOnApplyWindowInsetsListener(toolbar, (view, insets) -> { - final Insets statusBars = insets.getInsets(WindowInsetsCompat.Type.statusBars()); - view.setPadding(initialLeft, initialTop + statusBars.top, initialRight, initialBottom); - - final ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); - layoutParams.height = actionBarSize + initialTop + statusBars.top + initialBottom; - view.setLayoutParams(layoutParams); - - insetsConsumer.accept(statusBars); - return insets; - }); - } - - /** - * Pads the bottom of a content view by the navigation-bar inset, so its last items stay above - * the system navigation bar in edge-to-edge (targetSdk 35+). Used on the main fragment holder - * so feed/search/channel/playlist lists are not drawn behind the nav bar. - */ - public static void applyNavigationBarInsets(@NonNull final View content) { - final int initialLeft = content.getPaddingLeft(); - final int initialTop = content.getPaddingTop(); - final int initialRight = content.getPaddingRight(); - final int initialBottom = content.getPaddingBottom(); - - ViewCompat.setOnApplyWindowInsetsListener(content, (view, insets) -> { - final Insets navBars = insets.getInsets(WindowInsetsCompat.Type.navigationBars()); - view.setPadding(initialLeft, initialTop, initialRight, initialBottom + navBars.bottom); - return insets; - }); - } - - private static int getActionBarSize(@NonNull final AppCompatActivity activity) { - final TypedValue typedValue = new TypedValue(); - if (activity.getTheme().resolveAttribute(android.R.attr.actionBarSize, typedValue, true)) { - return TypedValue.complexToDimensionPixelSize( - typedValue.data, activity.getResources().getDisplayMetrics()); - } - return 0; - } - - public interface InsetsConsumer { - void accept(@NonNull Insets insets); - } -} diff --git a/app/src/main/java/org/schabi/newpipe/views/BaseLoginWebViewActivity.java b/app/src/main/java/org/schabi/newpipe/views/BaseLoginWebViewActivity.java index 6ebb3ee245..b08afa4ebe 100644 --- a/app/src/main/java/org/schabi/newpipe/views/BaseLoginWebViewActivity.java +++ b/app/src/main/java/org/schabi/newpipe/views/BaseLoginWebViewActivity.java @@ -7,7 +7,6 @@ import android.webkit.WebViewClient; import androidx.appcompat.app.AppCompatActivity; import org.schabi.newpipe.R; -import org.schabi.newpipe.util.WindowInsetsHelper; public abstract class BaseLoginWebViewActivity extends AppCompatActivity { @@ -19,8 +18,6 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.login_webview); webView = findViewById(R.id.login_webview); - // Edge-to-edge (targetSdk 35+): keep the bottom of the login page above the nav bar. - WindowInsetsHelper.applyNavigationBarInsets(webView); configureWebView(); webView.setWebViewClient(createWebViewClient()); loadLoginUrl(); diff --git a/app/src/main/java/org/schabi/newpipe/views/FocusAwareCoordinator.java b/app/src/main/java/org/schabi/newpipe/views/FocusAwareCoordinator.java index fbca132874..798d08c729 100644 --- a/app/src/main/java/org/schabi/newpipe/views/FocusAwareCoordinator.java +++ b/app/src/main/java/org/schabi/newpipe/views/FocusAwareCoordinator.java @@ -101,9 +101,7 @@ public WindowInsets dispatchApplyWindowInsets(final WindowInsets insets) { protected boolean fitSystemWindows(final Rect insets) { final ViewGroup controls = findViewById(R.id.playbackControlRoot); if (controls != null) { - controls.setPadding(insets.left, - controls.getFitsSystemWindows() ? insets.top : 0, - insets.right, insets.bottom); + controls.setPadding(insets.left, insets.top, insets.right, insets.bottom); } return super.fitSystemWindows(insets); } diff --git a/app/src/main/res/layout-land/activity_player_queue_control.xml b/app/src/main/res/layout-land/activity_player_queue_control.xml index e23743475e..b77e1b6aae 100644 --- a/app/src/main/res/layout-land/activity_player_queue_control.xml +++ b/app/src/main/res/layout-land/activity_player_queue_control.xml @@ -5,6 +5,7 @@ android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" + android:fitsSystemWindows="true" tools:context="org.schabi.newpipe.player.PlayQueueActivity"> diff --git a/app/src/main/res/layout/activity_player_queue_control.xml b/app/src/main/res/layout/activity_player_queue_control.xml index 47fb7002ac..48c7787ccb 100644 --- a/app/src/main/res/layout/activity_player_queue_control.xml +++ b/app/src/main/res/layout/activity_player_queue_control.xml @@ -5,6 +5,7 @@ android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" + android:fitsSystemWindows="true" tools:context="org.schabi.newpipe.player.PlayQueueActivity"> diff --git a/app/src/main/res/values-v29/styles.xml b/app/src/main/res/values-v29/styles.xml index 89d423d5dd..24ebf5d2b5 100644 --- a/app/src/main/res/values-v29/styles.xml +++ b/app/src/main/res/values-v29/styles.xml @@ -3,7 +3,7 @@