kopia lustrzana https://github.com/ryukoposting/Signal-Android
rodzic
48d7228ae7
commit
e4f69c0b6f
|
@ -139,7 +139,7 @@ public final class AvatarPreviewActivity extends PassphraseRequiredActivity {
|
|||
|
||||
findViewById(android.R.id.content).setOnClickListener(v -> fullscreenHelper.toggleUiVisibility());
|
||||
|
||||
fullscreenHelper.configureToolbarSpacer(findViewById(R.id.toolbar_cutout_spacer));
|
||||
fullscreenHelper.configureToolbarLayout(findViewById(R.id.toolbar_cutout_spacer), toolbar);
|
||||
|
||||
fullscreenHelper.showAndHideWithSystemUI(getWindow(), findViewById(R.id.toolbar_layout));
|
||||
}
|
||||
|
|
|
@ -288,7 +288,7 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity
|
|||
|
||||
anchorMarginsToBottomInsets(detailsContainer);
|
||||
|
||||
fullscreenHelper.configureToolbarSpacer(findViewById(R.id.toolbar_cutout_spacer));
|
||||
fullscreenHelper.configureToolbarLayout(findViewById(R.id.toolbar_cutout_spacer), findViewById(R.id.toolbar));
|
||||
|
||||
fullscreenHelper.showAndHideWithSystemUI(getWindow(), detailsContainer, toolbarLayout);
|
||||
}
|
||||
|
|
|
@ -1,18 +1,26 @@
|
|||
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;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.DisplayCutoutCompat;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
|
||||
/**
|
||||
* Encapsulates logic to properly show/hide system UI/chrome in a full screen setting. Also
|
||||
* handles adjusting to notched devices as long as you call {@link #configureToolbarSpacer(View)}.
|
||||
* handles adjusting to notched devices as long as you call {@link #configureToolbarLayout(View, View)}.
|
||||
*/
|
||||
public final class FullscreenHelper {
|
||||
|
||||
|
@ -28,9 +36,11 @@ public final class FullscreenHelper {
|
|||
showSystemUI();
|
||||
}
|
||||
|
||||
public void configureToolbarSpacer(@NonNull View spacer) {
|
||||
public void configureToolbarLayout(@NonNull View spacer, @NonNull View toolbar) {
|
||||
if (Build.VERSION.SDK_INT == 19) {
|
||||
setSpacerHeight(spacer, ViewUtil.getStatusBarHeight(spacer));
|
||||
int[] padding = makePaddingValuesForAPI19();
|
||||
toolbar.setPadding(padding[0], 0, padding[1], 0);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -38,6 +48,12 @@ public final class FullscreenHelper {
|
|||
setSpacerHeight(view, insets.getSystemWindowInsetTop());
|
||||
return insets;
|
||||
});
|
||||
|
||||
ViewCompat.setOnApplyWindowInsetsListener(toolbar, (view, insets) -> {
|
||||
int[] padding = makePaddingValues(insets);
|
||||
toolbar.setPadding(padding[0], 0, padding[1], 0);
|
||||
return insets;
|
||||
});
|
||||
}
|
||||
|
||||
private void setSpacerHeight(@NonNull View spacer, int height) {
|
||||
|
@ -49,6 +65,41 @@ public final class FullscreenHelper {
|
|||
spacer.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@SuppressLint("SwitchIntDef")
|
||||
private int[] makePaddingValuesForAPI19() {
|
||||
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 int[] makePaddingValues(WindowInsetsCompat insets) {
|
||||
Insets tappable = insets.getTappableElementInsets();
|
||||
DisplayCutoutCompat cutout = insets.getDisplayCutout();
|
||||
|
||||
int leftPad = cutout == null ? tappable.left
|
||||
: Math.max(tappable.left, cutout.getSafeInsetLeft());
|
||||
int rightPad = cutout == null ? tappable.right
|
||||
: Math.max(tappable.right, cutout.getSafeInsetRight());
|
||||
|
||||
return new int[]{leftPad, rightPad};
|
||||
}
|
||||
|
||||
public void showAndHideWithSystemUI(@NonNull Window window, @NonNull View... views) {
|
||||
window.getDecorView().setOnSystemUiVisibilityChangeListener(visibility -> {
|
||||
boolean hide = (visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0;
|
||||
|
|
Ładowanie…
Reference in New Issue