Fix edge-to-edge issue on receipt screen.

This commit is contained in:
Greyson Parrelli
2026-09-02 16:11:23 -03:00
committed by Alex Hart
parent 507045e85a
commit c5271a6dae
5 changed files with 27 additions and 3 deletions
@@ -55,6 +55,12 @@ abstract class DSLSettingsFragment(
*/
protected open val listAvoidsKeyboard: Boolean = false
/**
* Cleared by layouts that anchor another view below the list, like a bottom action button. That view carries
* the navigation bar inset instead, so the list must not pad for it as well.
*/
protected open val listClearsNavigationBar: Boolean = true
@CallSuper
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
toolbar = view.findViewById(R.id.toolbar)
@@ -120,7 +126,7 @@ abstract class DSLSettingsFragment(
}
recyclerView?.let { recycler ->
val insetTypes = WindowInsetsCompat.Type.navigationBars() or
val insetTypes = (if (listClearsNavigationBar) WindowInsetsCompat.Type.navigationBars() else 0) or
(if (listScrollsBehindToolbar) WindowInsetsCompat.Type.statusBars() else 0) or
(if (listAvoidsKeyboard) WindowInsetsCompat.Type.ime() else 0)
@@ -128,8 +134,10 @@ abstract class DSLSettingsFragment(
recycler.updatePadding(top = recycler.paddingTop + resources.getDimensionPixelSize(R.dimen.signal_m3_toolbar_height))
}
recycler.clipToPadding = false
SystemWindowInsetsSetter.attach(recycler, viewLifecycleOwner, insetTypes)
if (insetTypes != 0) {
recycler.clipToPadding = false
SystemWindowInsetsSetter.attach(recycler, viewLifecycleOwner, insetTypes)
}
}
}
@@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.components.settings.app.subscription.receipts.detail
import android.content.Intent
import androidx.core.view.WindowInsetsCompat
import androidx.fragment.app.viewModels
import com.google.android.material.button.MaterialButton
import org.thoughtcrime.securesms.R
@@ -15,6 +16,7 @@ import org.thoughtcrime.securesms.components.settings.models.SplashImage
import org.thoughtcrime.securesms.database.model.InAppPaymentReceiptRecord
import org.thoughtcrime.securesms.payments.FiatMoneyUtil
import org.thoughtcrime.securesms.util.DateUtils
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
import java.util.Locale
import org.signal.core.ui.R as CoreUiR
@@ -23,6 +25,8 @@ class DonationReceiptDetailFragment : DSLSettingsFragment(layoutId = R.layout.do
private lateinit var progressDialog: SignalProgressDialog
override val listClearsNavigationBar: Boolean = false
private val viewModel: DonationReceiptDetailViewModel by viewModels(
factoryProducer = {
DonationReceiptDetailViewModel.Factory(
@@ -38,6 +42,8 @@ class DonationReceiptDetailFragment : DSLSettingsFragment(layoutId = R.layout.do
val sharePngButton: MaterialButton = requireView().findViewById(R.id.share_png)
sharePngButton.isEnabled = false
SystemWindowInsetsSetter.attach(sharePngButton, viewLifecycleOwner, WindowInsetsCompat.Type.navigationBars(), SystemWindowInsetsSetter.ApplyMode.MARGIN)
viewModel.state.observe(viewLifecycleOwner) { state ->
if (state.inAppPaymentReceiptRecord != null) {
val subscriptionName = InAppDonations.resolveLabel(requireContext(), state.inAppPaymentReceiptRecord)
@@ -3,13 +3,16 @@ package org.thoughtcrime.securesms.components.settings.app.subscription.receipts
import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.core.view.WindowInsetsCompat
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.tabs.TabLayoutMediator
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.BoldSelectionTabItem
import org.thoughtcrime.securesms.components.ControllableTabLayout
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
class DonationReceiptListFragment : Fragment(R.layout.donation_receipt_list_fragment) {
@@ -22,6 +25,8 @@ class DonationReceiptListFragment : Fragment(R.layout.donation_receipt_list_frag
findNavController().popBackStack()
}
SystemWindowInsetsSetter.attach(view.findViewById<AppBarLayout>(R.id.app_bar), viewLifecycleOwner, WindowInsetsCompat.Type.statusBars())
pager.adapter = DonationReceiptListPageAdapter(this)
BoldSelectionTabItem.registerListeners(tabs)
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.components.settings.app.subscription.receipts
import android.os.Bundle
import android.view.View
import androidx.constraintlayout.widget.Group
import androidx.core.view.WindowInsetsCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
@@ -13,6 +14,7 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsText
import org.thoughtcrime.securesms.components.settings.TextPreference
import org.thoughtcrime.securesms.database.model.InAppPaymentReceiptRecord
import org.thoughtcrime.securesms.util.StickyHeaderDecoration
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil
import org.thoughtcrime.securesms.util.navigation.safeNavigate
import org.thoughtcrime.securesms.util.visible
@@ -44,6 +46,8 @@ class DonationReceiptListPageFragment : Fragment(R.layout.donation_receipt_list_
view.findViewById<RecyclerView>(R.id.recycler).apply {
this.adapter = adapter
addItemDecoration(StickyHeaderDecoration(adapter, false, true, 0))
clipToPadding = false
SystemWindowInsetsSetter.attach(this, viewLifecycleOwner, WindowInsetsCompat.Type.navigationBars())
}
emptyStateGroup = view.findViewById(R.id.empty_state)
@@ -8,6 +8,7 @@
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/signal_background_primary">