From ef11a8d98db677c0785b4e5f484ebbd43c09a9a2 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 16 Feb 2023 10:01:14 -0400 Subject: [PATCH] Fix navbar flashing on transform. --- .../mediapreview/MediaPreviewV2Activity.kt | 3 ++ .../mediapreview/MediaPreviewV2Fragment.kt | 2 +- .../securesms/util/FullscreenHelper.java | 44 +++++++------------ 3 files changed, 19 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt index 22259498a..e7e935409 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt @@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaController import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaControllerOwner import org.thoughtcrime.securesms.util.LifecycleDisposable +import org.thoughtcrime.securesms.util.WindowUtil class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner { @@ -123,6 +124,8 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr val systemBarColor = ContextCompat.getColor(this, R.color.signal_dark_colorSurface) window.statusBarColor = systemBarColor window.navigationBarColor = systemBarColor + WindowUtil.clearLightStatusBar(window) + WindowUtil.clearLightNavigationBar(window) if (savedInstanceState == null) { val bundle = Bundle() diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt index ac5d11d99..4041c0538 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt @@ -92,7 +92,7 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v override fun onAttach(context: Context) { super.onAttach(context) - fullscreenHelper = FullscreenHelper(requireActivity()) + fullscreenHelper = FullscreenHelper(requireActivity(), true) individualItemWidth = context.resources.getDimension(R.dimen.media_rail_item_size).roundToInt() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FullscreenHelper.java b/app/src/main/java/org/thoughtcrime/securesms/util/FullscreenHelper.java index 9c3bbb4bc..33454e2e8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FullscreenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FullscreenHelper.java @@ -1,12 +1,7 @@ package org.thoughtcrime.securesms.util; -import android.annotation.SuppressLint; import android.app.Activity; -import android.content.pm.ActivityInfo; -import android.content.res.Configuration; -import android.content.res.Resources; import android.os.Build; -import android.view.Surface; import android.view.View; import android.view.ViewGroup; import android.view.Window; @@ -17,6 +12,9 @@ import androidx.core.graphics.Insets; import androidx.core.view.DisplayCutoutCompat; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import androidx.core.view.WindowInsetsControllerCompat; + +import org.signal.core.util.logging.Log; /** * Encapsulates logic to properly show/hide system UI/chrome in a full screen setting. Also @@ -27,13 +25,24 @@ public final class FullscreenHelper { @NonNull private final Activity activity; public FullscreenHelper(@NonNull Activity activity) { + this(activity, false); + } + + /** + * @param activity The activity we are controlling + * @param suppressShowSystemUI Suppresses the initial 'show system ui' call, which can cause the status and navbar to flash + * during some animations. + */ + public FullscreenHelper(@NonNull Activity activity, boolean suppressShowSystemUI) { this.activity = activity; if (Build.VERSION.SDK_INT >= 28) { activity.getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; } - showSystemUI(); + if (!suppressShowSystemUI) { + showSystemUI(); + } } public void configureToolbarLayout(@NonNull View spacer, @NonNull View toolbar) { @@ -71,29 +80,6 @@ public final class FullscreenHelper { spacer.setVisibility(View.VISIBLE); } - @SuppressLint("SwitchIntDef") - private static int[] makePaddingValuesForAPI19(@NonNull Activity activity) { - int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); - if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) { - return new int[]{0, 0}; - } - - Resources resources = activity.getResources(); - int statusBarHeightId = resources.getIdentifier("status_bar_height", "dimen", "android"); - int navBarHeightId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); - int statusBarHeight = resources.getDimensionPixelSize(statusBarHeightId); - int navBarHeight = resources.getDimensionPixelSize(navBarHeightId); - - switch (rotation) { - case Surface.ROTATION_90: - return new int[]{statusBarHeight, navBarHeight}; - case Surface.ROTATION_270: - return new int[]{navBarHeight, statusBarHeight}; - default: - return new int[]{0, 0}; - } - } - private static int[] makePaddingValues(WindowInsetsCompat insets) { Insets tappable = insets.getTappableElementInsets(); DisplayCutoutCompat cutout = insets.getDisplayCutout();