diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt index 75713b6ef..f97285cfe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt @@ -45,6 +45,7 @@ import org.thoughtcrime.securesms.stories.settings.create.CreateStoryWithViewers import org.thoughtcrime.securesms.stories.settings.hide.HideStoryFromDialogFragment import org.thoughtcrime.securesms.util.BottomSheetUtil import org.thoughtcrime.securesms.util.FeatureFlags +import org.thoughtcrime.securesms.util.FullscreenHelper import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.util.fragments.findListener @@ -125,14 +126,19 @@ class MultiselectForwardFragment : val container = callback.getContainer() val title: TextView? = container.findViewById(R.id.title) - val bottomBar = LayoutInflater.from(requireContext()).inflate(R.layout.multiselect_forward_fragment_bottom_bar, container, false) + val bottomBarAndSpacer = LayoutInflater.from(requireContext()).inflate(R.layout.multiselect_forward_fragment_bottom_bar_and_spacer, container, false) + val bottomBar: ViewGroup = bottomBarAndSpacer.findViewById(R.id.bottom_bar) + val bottomBarSpacer: View = bottomBarAndSpacer.findViewById(R.id.bottom_bar_spacer) val shareSelectionRecycler: RecyclerView = bottomBar.findViewById(R.id.selected_list) val shareSelectionAdapter = ShareSelectionAdapter() val sendButtonFrame: View = bottomBar.findViewById(R.id.share_confirm_frame) val sendButton: View = bottomBar.findViewById(R.id.share_confirm) val backgroundHelper: View = bottomBar.findViewById(R.id.background_helper) + FullscreenHelper.configureBottomBarLayout(requireActivity(), bottomBarSpacer, bottomBar) + backgroundHelper.setBackgroundColor(callback.getDialogBackgroundColor()) + bottomBarSpacer.setBackgroundColor(callback.getDialogBackgroundColor()) title?.setText(requireArguments().getInt(ARG_TITLE)) @@ -171,7 +177,7 @@ class MultiselectForwardFragment : bottomBar.visible = false - container.addView(bottomBar) + container.addView(bottomBarAndSpacer) contactSearchMediator.getSelectionState().observe(viewLifecycleOwner) { contactSelection -> shareSelectionAdapter.submitList(contactSelection.mapIndexed { index, key -> ShareSelectionMappingModel(key.requireShareContact(), index == 0) }) 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 314140906..1657003b9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FullscreenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FullscreenHelper.java @@ -39,7 +39,7 @@ public final class FullscreenHelper { public void configureToolbarLayout(@NonNull View spacer, @NonNull View toolbar) { if (Build.VERSION.SDK_INT == 19) { setSpacerHeight(spacer, ViewUtil.getStatusBarHeight(spacer)); - int[] padding = makePaddingValuesForAPI19(); + int[] padding = makePaddingValuesForAPI19(activity); toolbar.setPadding(padding[0], 0, padding[1], 0); return; } @@ -56,7 +56,27 @@ public final class FullscreenHelper { }); } - private void setSpacerHeight(@NonNull View spacer, int height) { + public static void configureBottomBarLayout(@NonNull Activity activity, @NonNull View spacer, @NonNull View bottomBar) { + if (Build.VERSION.SDK_INT == 19) { + setSpacerHeight(spacer, ViewUtil.getNavigationBarHeight(spacer)); + int[] padding = makePaddingValuesForAPI19(activity); + bottomBar.setPadding(padding[0], 0, padding[1], 0); + return; + } + + ViewCompat.setOnApplyWindowInsetsListener(spacer, (view, insets) -> { + setSpacerHeight(view, insets.getSystemWindowInsetBottom()); + return insets; + }); + + ViewCompat.setOnApplyWindowInsetsListener(bottomBar, (view, insets) -> { + int[] padding = makePaddingValues(insets); + bottomBar.setPadding(padding[0], 0, padding[1], 0); + return insets; + }); + } + + private static void setSpacerHeight(@NonNull View spacer, int height) { ViewGroup.LayoutParams params = spacer.getLayoutParams(); params.height = height; @@ -66,7 +86,7 @@ public final class FullscreenHelper { } @SuppressLint("SwitchIntDef") - private int[] makePaddingValuesForAPI19() { + 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}; @@ -88,7 +108,7 @@ public final class FullscreenHelper { } } - private int[] makePaddingValues(WindowInsetsCompat insets) { + private static int[] makePaddingValues(WindowInsetsCompat insets) { Insets tappable = insets.getTappableElementInsets(); DisplayCutoutCompat cutout = insets.getDisplayCutout(); diff --git a/app/src/main/res/layout/multiselect_forward_fragment_bottom_bar.xml b/app/src/main/res/layout/multiselect_forward_fragment_bottom_bar.xml index a9f2939c7..b91b372b4 100644 --- a/app/src/main/res/layout/multiselect_forward_fragment_bottom_bar.xml +++ b/app/src/main/res/layout/multiselect_forward_fragment_bottom_bar.xml @@ -2,6 +2,7 @@ diff --git a/app/src/main/res/layout/multiselect_forward_fragment_bottom_bar_and_spacer.xml b/app/src/main/res/layout/multiselect_forward_fragment_bottom_bar_and_spacer.xml new file mode 100644 index 000000000..e7248250c --- /dev/null +++ b/app/src/main/res/layout/multiselect_forward_fragment_bottom_bar_and_spacer.xml @@ -0,0 +1,14 @@ + + + + + + +