From 8a42e4612aafa4736531e4e7f7ed707ae643e626 Mon Sep 17 00:00:00 2001 From: Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> Date: Sun, 15 Jun 2025 17:30:48 -0400 Subject: [PATCH] New method: BaseActivity.setMargins. --- .../activities/BaseActivity.java | 24 ++++++++ .../activities/MainActivity.java | 61 ++++++++++--------- 2 files changed, 55 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/BaseActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/BaseActivity.java index 52dddb2a..9f7505c9 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/BaseActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/BaseActivity.java @@ -62,6 +62,8 @@ import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.utils.Utils; public abstract class BaseActivity extends AppCompatActivity implements CustomFontReceiver { + public static final int IGNORE_MARGIN = -1; + private boolean immersiveInterface; private boolean changeStatusBarIconColor; private boolean transparentStatusBarAfterToolbarCollapsed; @@ -337,6 +339,28 @@ public abstract class BaseActivity extends AppCompatActivity implements CustomFo return result; } + public static void setMargins(T view, int left, int top, int right, int bottom) { + ViewGroup.LayoutParams lp = view.getLayoutParams(); + if (lp instanceof ViewGroup.MarginLayoutParams) { + ViewGroup.MarginLayoutParams marginParams = (ViewGroup.MarginLayoutParams) lp; + + if (top >= 0) { + marginParams.topMargin = top; + } + if (bottom >= 0) { + marginParams.bottomMargin = bottom; + } + if (left >= 0) { + marginParams.setMarginStart(left); + } + if (right >= 0) { + marginParams.setMarginEnd(right); + } + + view.setLayoutParams(marginParams); + } + } + protected void setTransparentStatusBarAfterToolbarCollapsed() { this.transparentStatusBarAfterToolbarCollapsed = true; } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java index 41a107c0..ca185ce8 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java @@ -272,35 +272,37 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb if (navigationWrapper.navigationRailView == null) { if (navigationWrapper.bottomAppBar.getVisibility() != View.VISIBLE) { - ViewGroup.MarginLayoutParams fabParams = (ViewGroup.MarginLayoutParams) - navigationWrapper.floatingActionButton.getLayoutParams(); - fabParams.bottomMargin = (int) Utils.convertDpToPixel(16, MainActivity.this) + allInsets.bottom; - fabParams.rightMargin = (int) Utils.convertDpToPixel(16, MainActivity.this) + allInsets.right; - navigationWrapper.floatingActionButton.setLayoutParams(fabParams); + setMargins(navigationWrapper.floatingActionButton, + BaseActivity.IGNORE_MARGIN, + BaseActivity.IGNORE_MARGIN, + (int) Utils.convertDpToPixel(16, MainActivity.this) + allInsets.right, + (int) Utils.convertDpToPixel(16, MainActivity.this) + allInsets.bottom); } else { - ViewGroup.MarginLayoutParams fabParams = (ViewGroup.MarginLayoutParams) - navigationWrapper.floatingActionButton.getLayoutParams(); - fabParams.bottomMargin = allInsets.bottom; - navigationWrapper.floatingActionButton.setLayoutParams(fabParams); + setMargins(navigationWrapper.floatingActionButton, + BaseActivity.IGNORE_MARGIN, + BaseActivity.IGNORE_MARGIN, + BaseActivity.IGNORE_MARGIN, + allInsets.bottom); } } else { if (navigationWrapper.navigationRailView.getVisibility() != View.VISIBLE) { - ViewGroup.MarginLayoutParams fabParams = (ViewGroup.MarginLayoutParams) - navigationWrapper.floatingActionButton.getLayoutParams(); - fabParams.bottomMargin = (int) Utils.convertDpToPixel(16, MainActivity.this) + allInsets.bottom; - fabParams.rightMargin = (int) Utils.convertDpToPixel(16, MainActivity.this) + allInsets.right; - navigationWrapper.floatingActionButton.setLayoutParams(fabParams); + setMargins(navigationWrapper.floatingActionButton, + BaseActivity.IGNORE_MARGIN, + BaseActivity.IGNORE_MARGIN, + (int) Utils.convertDpToPixel(16, MainActivity.this) + allInsets.right, + (int) Utils.convertDpToPixel(16, MainActivity.this) + allInsets.bottom); binding.includedAppBar.viewPagerMainActivity.setPadding(allInsets.left, 0, allInsets.right, 0); } else { - ViewGroup.MarginLayoutParams navRailParams = (ViewGroup.MarginLayoutParams) - navigationWrapper.navigationRailView.getLayoutParams(); - navRailParams.bottomMargin = allInsets.bottom; - navRailParams.setMarginStart(allInsets.left); - navigationWrapper.navigationRailView.setLayoutParams(navRailParams); navigationWrapper.navigationRailView.setFitsSystemWindows(false); navigationWrapper.navigationRailView.setPadding(0, 0, 0, 0); + setMargins(navigationWrapper.navigationRailView, + allInsets.left, + BaseActivity.IGNORE_MARGIN, + BaseActivity.IGNORE_MARGIN, + allInsets.bottom); + binding.includedAppBar.viewPagerMainActivity.setPadding(0, 0, allInsets.right, 0); } } @@ -314,18 +316,17 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb ); } - View toolbar = binding.includedAppBar.toolbar; - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams(); - params.topMargin = allInsets.top; - params.setMarginStart(allInsets.left); - params.setMarginEnd(allInsets.right); - toolbar.setLayoutParams(params); + setMargins(binding.includedAppBar.toolbar, + allInsets.left, + allInsets.top, + allInsets.right, + BaseActivity.IGNORE_MARGIN); - ViewGroup.MarginLayoutParams navRailParams = (ViewGroup.MarginLayoutParams) - binding.includedAppBar.tabLayoutMainActivity.getLayoutParams(); - navRailParams.setMarginStart(allInsets.left); - navRailParams.setMarginEnd(allInsets.right); - binding.includedAppBar.tabLayoutMainActivity.setLayoutParams(navRailParams); + setMargins(binding.includedAppBar.tabLayoutMainActivity, + allInsets.left, + BaseActivity.IGNORE_MARGIN, + allInsets.right, + BaseActivity.IGNORE_MARGIN); return WindowInsetsCompat.CONSUMED; }