From d3f83001ce8b4cd235e0b0464dc9ad02267aad0a Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Tue, 23 Dec 2025 10:13:06 -0500 Subject: [PATCH 1/3] Target SDK 36 --- app/build.gradle | 2 +- app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt | 5 +++-- .../main/java/io/heckel/ntfy/ui/DetailSettingsActivity.kt | 5 +++-- app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt | 5 +++-- app/src/main/java/io/heckel/ntfy/ui/SettingsActivity.kt | 5 +++-- app/src/main/java/io/heckel/ntfy/ui/ShareActivity.kt | 5 +++-- 6 files changed, 16 insertions(+), 11 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8fdd9f14..81cf062b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,7 +15,7 @@ android { defaultConfig { applicationId "io.heckel.ntfy" minSdkVersion 26 - targetSdkVersion 35 + targetSdkVersion 36 versionCode 52 versionName "1.19.4" diff --git a/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt index 2a3af052..37ff3e84 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt @@ -14,6 +14,7 @@ import android.view.MenuItem import android.view.View import android.widget.TextView import android.widget.Toast +import androidx.activity.enableEdgeToEdge import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ActionMode @@ -115,6 +116,7 @@ class DetailActivity : AppCompatActivity(), NotificationFragment.NotificationSet } override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) setContentView(R.layout.activity_detail) @@ -137,8 +139,7 @@ class DetailActivity : AppCompatActivity(), NotificationFragment.NotificationSet toolbar.overflowIcon?.setTint(toolbarTextColor) setSupportActionBar(toolbar) - // Set system status bar color and appearance - window.statusBarColor = statusBarColor + // Set system status bar appearance WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = Colors.shouldUseLightStatusBar(dynamicColors, darkMode) diff --git a/app/src/main/java/io/heckel/ntfy/ui/DetailSettingsActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/DetailSettingsActivity.kt index 8120e14d..ae2b0509 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/DetailSettingsActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/DetailSettingsActivity.kt @@ -10,6 +10,7 @@ import android.os.Bundle import android.provider.Settings import android.text.TextUtils import android.widget.Toast +import androidx.activity.enableEdgeToEdge import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity @@ -45,6 +46,7 @@ class DetailSettingsActivity : AppCompatActivity() { private var subscriptionId: Long = 0 override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) setContentView(R.layout.activity_settings) @@ -79,8 +81,7 @@ class DetailSettingsActivity : AppCompatActivity() { toolbar.overflowIcon?.setTint(toolbarTextColor) setSupportActionBar(toolbar) - // Set system status bar color and appearance - window.statusBarColor = statusBarColor + // Set system status bar appearance WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = Colors.shouldUseLightStatusBar(dynamicColors, darkMode) diff --git a/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt index 102ef812..2c1d0f7d 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt @@ -19,6 +19,7 @@ import android.view.View import android.widget.Button import android.widget.TextView import android.widget.Toast +import androidx.activity.enableEdgeToEdge import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate @@ -126,6 +127,7 @@ class MainActivity : AppCompatActivity(), AddFragment.SubscribeListener, Notific } override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -152,8 +154,7 @@ class MainActivity : AppCompatActivity(), AddFragment.SubscribeListener, Notific setSupportActionBar(toolbar) title = getString(R.string.main_action_bar_title) - // Set system status bar color and appearance - window.statusBarColor = statusBarColor + // Set system status bar appearance WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = Colors.shouldUseLightStatusBar(dynamicColors, darkMode) diff --git a/app/src/main/java/io/heckel/ntfy/ui/SettingsActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/SettingsActivity.kt index b523c5b6..d007d2f5 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/SettingsActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/SettingsActivity.kt @@ -14,6 +14,7 @@ import android.text.TextUtils import android.view.View import android.widget.Button import android.widget.Toast +import androidx.activity.enableEdgeToEdge import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.Keep import androidx.appcompat.app.AppCompatActivity @@ -58,6 +59,7 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere private lateinit var serviceManager: SubscriberServiceManager override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) setContentView(R.layout.activity_settings) @@ -83,8 +85,7 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere toolbar.overflowIcon?.setTint(toolbarTextColor) setSupportActionBar(toolbar) - // Set system status bar color and appearance - window.statusBarColor = statusBarColor + // Set system status bar appearance WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = Colors.shouldUseLightStatusBar(dynamicColors, darkMode) diff --git a/app/src/main/java/io/heckel/ntfy/ui/ShareActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/ShareActivity.kt index 076e0cca..04c2335c 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/ShareActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/ShareActivity.kt @@ -8,6 +8,7 @@ import android.text.Editable import android.text.TextWatcher import android.view.* import android.widget.* +import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.WindowInsetsControllerCompat import androidx.lifecycle.lifecycleScope @@ -51,6 +52,7 @@ class ShareActivity : AppCompatActivity() { private lateinit var errorImage: ImageView override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) setContentView(R.layout.activity_share) @@ -72,8 +74,7 @@ class ShareActivity : AppCompatActivity() { setSupportActionBar(toolbar) title = getString(R.string.share_title) - // Set system status bar color and appearance - window.statusBarColor = statusBarColor + // Set system status bar appearance WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = Colors.shouldUseLightStatusBar(dynamicColors, darkMode) From 4a8311430b0941c826f93262186c9eb7cf48770a Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Tue, 23 Dec 2025 12:28:21 -0500 Subject: [PATCH 2/3] Do not cover content with nav bar --- app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt | 11 +++++++++++ app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt index 37ff3e84..85c1531e 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt @@ -19,8 +19,11 @@ import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ActionMode import androidx.core.content.ContextCompat +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat import androidx.core.view.isVisible +import androidx.core.view.updatePadding import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView @@ -281,6 +284,14 @@ class DetailActivity : AppCompatActivity(), NotificationFragment.NotificationSet adapter = DetailAdapter(this, lifecycleScope, repository, onNotificationClick, onNotificationLongClick) mainList = findViewById(R.id.detail_notification_list) mainList.adapter = adapter + + // Apply window insets to ensure content is not covered by navigation bar + mainList.clipToPadding = false + ViewCompat.setOnApplyWindowInsetsListener(mainList) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding(bottom = systemBars.bottom) + insets + } viewModel.list(subscriptionId).observe(this) { it?.let { diff --git a/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt index 2c1d0f7d..c8d1bcd6 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt @@ -31,6 +31,7 @@ import androidx.core.text.HtmlCompat import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat +import androidx.core.view.updatePadding import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.RecyclerView @@ -194,6 +195,14 @@ class MainActivity : AppCompatActivity(), AddFragment.SubscribeListener, Notific Colors.onPrimary(this) ) mainList.adapter = adapter + + // Apply window insets to ensure content is not covered by navigation bar + mainList.clipToPadding = false + ViewCompat.setOnApplyWindowInsetsListener(mainList) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding(bottom = systemBars.bottom) + insets + } viewModel.list().observe(this) { it?.let { subscriptions -> From ad197f3445b2c74b0df753cf0e0207b1cbbbb040 Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Tue, 23 Dec 2025 12:30:18 -0500 Subject: [PATCH 3/3] Bump version --- fastlane/metadata/android/en-US/changelog/NEXT.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/fastlane/metadata/android/en-US/changelog/NEXT.txt b/fastlane/metadata/android/en-US/changelog/NEXT.txt index e62df1f9..dc32384d 100644 --- a/fastlane/metadata/android/en-US/changelog/NEXT.txt +++ b/fastlane/metadata/android/en-US/changelog/NEXT.txt @@ -1,2 +1,3 @@ Maintenance + bug fixes: +* Updated target SDK version to 36 * Updated dependencies, minimum SDK version to 26, clean up legacy code, upgrade Gradle (ntfy-android#140, thanks to @cyb3rko)