diff --git a/WordPress/src/main/AndroidManifest.xml b/WordPress/src/main/AndroidManifest.xml
index 7778eb43a657..77659933ab1f 100644
--- a/WordPress/src/main/AndroidManifest.xml
+++ b/WordPress/src/main/AndroidManifest.xml
@@ -535,7 +535,7 @@
= Build.VERSION_CODES.VANILLA_ICE_CREAM) &&
- (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM)
+ // apply insets for Android 15+ edge-to-edge
+ if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) &&
+ excludedActivities.contains(this.localClassName).not()
) {
applyInsetOffsets()
}
@@ -50,142 +44,47 @@ open class BaseAppCompatActivity : AppCompatActivity() {
@RequiresApi(Build.VERSION_CODES.R)
private fun applyInsetOffsets() {
- val excludedActivity = excludedActivities[this.localClassName]
- val applyTopOffset = excludedActivity?.applyTopOffset ?: true
- val applyBottomOffset = excludedActivity?.applyBottomOffset ?: true
+ ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { view, insets ->
+ val innerPadding = insets.getInsets(
+ WindowInsetsCompat.Type.systemBars()
+ or WindowInsetsCompat.Type.displayCutout()
+ )
- if (applyTopOffset || applyBottomOffset) {
- ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { view, insets ->
- val innerPadding = insets.getInsets(
- WindowInsetsCompat.Type.systemBars()
- or WindowInsetsCompat.Type.displayCutout()
- )
+ view.setPadding(
+ innerPadding.left,
+ innerPadding.top,
+ innerPadding.right,
+ innerPadding.bottom
+ )
- view.setPadding(
- innerPadding.left,
- if (applyTopOffset) innerPadding.top else 0,
- innerPadding.right,
- if (applyBottomOffset) innerPadding.bottom else 0
- )
-
- insets
- }
+ WindowInsetsCompat.CONSUMED
}
}
-
- private class ActivityOffsets(
- var applyTopOffset: Boolean,
- var applyBottomOffset: Boolean,
- )
-
- /**
- * Activities that are excluded from the edge-to-edge top offset, bottom offset, or both. Activities not listed
- * here will have both offsets applied. Note that many of these excluded activities are Compose-based because
- * Compose automatically adjusts for edge-to-edge insets. We may want to revisit this approach as we add more
- * Compose-based activities to the project.
- */
- private val excludedActivities: HashMap = hashMapOf(
- // apply neither top nor bottom offset
- BlazeCampaignParentActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- BloggingPromptsListActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- DebugSharedPreferenceFlagsActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- DesignSystemActivity::class.java.name to ActivityOffsets
- (
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- DomainManagementActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- EditJetpackSocialShareMessageActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- ExperimentalFeaturesActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- FeedbackFormActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- JetpackFullPluginInstallActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- JetpackRemoteInstallActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- JetpackStaticPosterActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- MediaPreviewActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- MenuActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- NewDomainSearchActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- PersonalizationActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- PurchaseDomainActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- SelfHostedUsersActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- SiteMonitorParentActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
- SupportWebViewActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = false
- ),
-
- // apply bottom offset only
- MediaSettingsActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = true
- ),
- PagesActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = true
- ),
- PostsListActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = true
- ),
- StatsActivity::class.java.name to ActivityOffsets(
- applyTopOffset = false,
- applyBottomOffset = true
- ),
-
- // apply top offset only
- WPMainActivity::class.java.name to ActivityOffsets(
- applyTopOffset = true,
- applyBottomOffset = false
- ),
- )
}
+
+/**
+ * Activities that are excluded from the edge-to-edge offset. Note that many of these excluded activities are
+ * Compose-based because Compose automatically adjusts for edge-to-edge insets. We may want to revisit this
+ * approach as we add more Compose-based activities to the project.
+ */
+private val excludedActivities = listOf(
+ BlazeCampaignParentActivity::class.java.name,
+ BloggingPromptsListActivity::class.java.name,
+ DebugSharedPreferenceFlagsActivity::class.java.name,
+ DesignSystemActivity::class.java.name,
+ DomainManagementActivity::class.java.name,
+ EditJetpackSocialShareMessageActivity::class.java.name,
+ ExperimentalFeaturesActivity::class.java.name,
+ FeedbackFormActivity::class.java.name,
+ JetpackFullPluginInstallActivity::class.java.name,
+ JetpackRemoteInstallActivity::class.java.name,
+ JetpackStaticPosterActivity::class.java.name,
+ MediaPreviewActivity::class.java.name,
+ MenuActivity::class.java.name,
+ NewDomainSearchActivity::class.java.name,
+ PersonalizationActivity::class.java.name,
+ PurchaseDomainActivity::class.java.name,
+ SelfHostedUsersActivity::class.java.name,
+ SiteMonitorParentActivity::class.java.name,
+ SupportWebViewActivity::class.java.name
+)
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostDetailFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostDetailFragment.kt
index 68a92507ba0b..67a7cc66ecd9 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostDetailFragment.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostDetailFragment.kt
@@ -403,7 +403,6 @@ class ReaderPostDetailFragment : ViewPagerFragment(),
}
}
- @Suppress("DEPRECATION")
private fun initAppBar(view: View) {
appBar = view.findViewById(R.id.appbar_with_collapsing_toolbar_layout)
toolBar = appBar.findViewById(R.id.toolbar_main)
@@ -412,11 +411,11 @@ class ReaderPostDetailFragment : ViewPagerFragment(),
// Fixes collapsing toolbar layout being obscured by the status bar when drawn behind it
ViewCompat.setOnApplyWindowInsetsListener(appBar) { _: View, insets: WindowInsetsCompat ->
- val insetTop = insets.systemWindowInsetTop
+ val insetTop = insets.getInsets(WindowInsetsCompat. Type. systemBars()).top
if (insetTop > 0) {
toolBar.setPadding(0, insetTop, 0, 0)
}
- insets.consumeSystemWindowInsets()
+ WindowInsetsCompat.CONSUMED
}
// Fixes viewpager not displaying menu items for first fragment
@@ -488,21 +487,6 @@ class ReaderPostDetailFragment : ViewPagerFragment(),
params.behavior = HideBottomViewOnScrollBehavior()
}
layoutFooterBinding.root.isInvisible = true
-
- // on SDK 35+ edge-to-edge is enabled so we want to avoid covering the navigation bar icons by
- // taking the nav bar height into account (nav height will be 0 when gesture nav is enabled)
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
- layoutFooterBinding.root.findViewById(R.id.reader_detail_footer_button_container)
- ?.let { footerContainer ->
- footerContainer.setOnApplyWindowInsetsListener { _, insets ->
- val navigationBarInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars())
- val addedMargin = resources.getDimensionPixelSize(R.dimen.margin_small)
- (footerContainer.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin =
- addedMargin + navigationBarInsets.bottom
- insets
- }
- }
- }
}
}.also { stub ->
stub.inflate()
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 71fc60b50dd9..64e3620b331b 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -58,7 +58,7 @@ fladle = '0.17.5'
google-autoservice = '1.1.1'
google-dagger = '2.55'
google-exoplayer = '2.13.3'
-google-firebase-bom = '33.9.0'
+google-firebase-bom = '33.10.0'
google-firebase-iid = '21.1.0'
google-flexboxlayout = '3.0.0'
google-gson = '2.12.1'
@@ -92,7 +92,7 @@ mockito-kotlin = '4.1.0'
mpandroidchart = 'v3.1.0'
photoview = '2.3.0'
robolectric = '4.14.1'
-sentry = '5.2.0'
+sentry = '5.3.0'
squareup-java-poet = '1.13.0'
squareup-kotlin-poet = '1.18.1'
squareup-okhttp3 = '4.12.0'