From 1f08219f9e6144ef41a164293d290badac1d2f51 Mon Sep 17 00:00:00 2001 From: William Harris Date: Thu, 22 Jan 2026 02:33:27 +0000 Subject: [PATCH 1/3] fix: unhide status bar everywhere with insets --- .../calnotify/prefs/CalendarsActivity.kt | 2 + .../quarck/calnotify/prefs/CarModeActivity.kt | 2 + .../quarck/calnotify/ui/AboutActivity.kt | 2 + .../calnotify/ui/DismissedEventsActivity.kt | 2 + .../quarck/calnotify/ui/EditEventActivity.kt | 2 + .../quarck/calnotify/ui/MainActivityLegacy.kt | 11 +---- .../quarck/calnotify/ui/MainActivityModern.kt | 12 +---- .../quarck/calnotify/ui/PreActionActivity.kt | 2 + .../calnotify/ui/PrivacyPolicyActivity.kt | 2 + .../quarck/calnotify/ui/ReportABugActivity.kt | 2 + .../quarck/calnotify/ui/SettingsActivityX.kt | 2 + .../quarck/calnotify/ui/SnoozeAllActivity.kt | 2 + .../ui/ViewEventActivityNoRecents.kt | 4 ++ .../quarck/calnotify/utils/StatusBarUtils.kt | 46 +++++++++++++++++++ .../src/main/res/layout/activity_about.xml | 7 +++ .../main/res/layout/activity_calendars.xml | 7 +++ .../src/main/res/layout/activity_car_mode.xml | 7 +++ .../res/layout/activity_dismissed_events.xml | 7 +++ .../main/res/layout/activity_pre_action.xml | 8 ++++ .../res/layout/activity_privacy_policy.xml | 7 +++ .../main/res/layout/activity_report_a_bug.xml | 7 +++ .../main/res/layout/activity_settings_x.xml | 7 +++ .../main/res/layout/activity_snooze_all.xml | 7 +++ .../app/src/main/res/layout/activity_view.xml | 6 ++- .../src/main/res/layout/content_add_event.xml | 9 ++++ 25 files changed, 152 insertions(+), 20 deletions(-) create mode 100644 android/app/src/main/java/com/github/quarck/calnotify/utils/StatusBarUtils.kt diff --git a/android/app/src/main/java/com/github/quarck/calnotify/prefs/CalendarsActivity.kt b/android/app/src/main/java/com/github/quarck/calnotify/prefs/CalendarsActivity.kt index fde34017a..cfc0a95fc 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/prefs/CalendarsActivity.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/prefs/CalendarsActivity.kt @@ -50,6 +50,7 @@ import com.github.quarck.calnotify.logs.DevLog import com.github.quarck.calnotify.utils.background import com.github.quarck.calnotify.utils.find import com.github.quarck.calnotify.utils.findOrThrow +import com.github.quarck.calnotify.utils.setupStatusBarSpacer enum class CalendarListEntryType {Header, Calendar, Divider } @@ -169,6 +170,7 @@ class CalendarsActivity : AppCompatActivity() { DevLog.debug(LOG_TAG, "onCreate") setContentView(R.layout.activity_calendars) + setupStatusBarSpacer() setSupportActionBar(find(R.id.toolbar)) supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true) diff --git a/android/app/src/main/java/com/github/quarck/calnotify/prefs/CarModeActivity.kt b/android/app/src/main/java/com/github/quarck/calnotify/prefs/CarModeActivity.kt index b48552ce8..b93dedeed 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/prefs/CarModeActivity.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/prefs/CarModeActivity.kt @@ -47,6 +47,7 @@ import com.github.quarck.calnotify.permissions.PermissionsManager import com.github.quarck.calnotify.utils.background import com.github.quarck.calnotify.utils.find import com.github.quarck.calnotify.utils.findOrThrow +import com.github.quarck.calnotify.utils.setupStatusBarSpacer class BlueboothDeviceListEntry( @@ -124,6 +125,7 @@ class CarModeActivity : AppCompatActivity() { DevLog.debug(LOG_TAG, "onCreate") setContentView(R.layout.activity_car_mode) + setupStatusBarSpacer() setSupportActionBar(find(R.id.toolbar)) supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true) diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/AboutActivity.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/AboutActivity.kt index df9248ff4..08377e380 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/AboutActivity.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/AboutActivity.kt @@ -28,6 +28,7 @@ import android.widget.TextView import com.github.quarck.calnotify.BuildConfig import com.github.quarck.calnotify.R import com.github.quarck.calnotify.utils.find +import com.github.quarck.calnotify.utils.setupStatusBarSpacer import java.text.SimpleDateFormat import java.util.* @@ -39,6 +40,7 @@ class AboutActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_about) + setupStatusBarSpacer() setSupportActionBar(find(R.id.toolbar)) supportActionBar?.setDisplayHomeAsUpEnabled(true) diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/DismissedEventsActivity.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/DismissedEventsActivity.kt index 3e03e2156..ebc22f217 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/DismissedEventsActivity.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/DismissedEventsActivity.kt @@ -21,6 +21,7 @@ import com.github.quarck.calnotify.logs.DevLog import com.github.quarck.calnotify.utils.background import com.github.quarck.calnotify.utils.find import com.github.quarck.calnotify.utils.findOrThrow +import com.github.quarck.calnotify.utils.setupStatusBarSpacer class DismissedEventsActivity : AppCompatActivity(), DismissedEventListCallback { private val settings: Settings by lazy { Settings(this) } @@ -33,6 +34,7 @@ class DismissedEventsActivity : AppCompatActivity(), DismissedEventListCallback override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_dismissed_events) + setupStatusBarSpacer() setSupportActionBar(find(R.id.toolbar)) supportActionBar?.setDisplayHomeAsUpEnabled(true) diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/EditEventActivity.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/EditEventActivity.kt index bd5a245ee..478c6f90f 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/EditEventActivity.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/EditEventActivity.kt @@ -46,6 +46,7 @@ import com.github.quarck.calnotify.logs.DevLog import com.github.quarck.calnotify.textutils.EventFormatter import com.github.quarck.calnotify.textutils.dateToStr import com.github.quarck.calnotify.utils.* +import com.github.quarck.calnotify.utils.setupStatusBarSpacer import java.util.* // FIXME: on the snooze activity - show all the reminders, not just next @@ -315,6 +316,7 @@ open class EditEventActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_add_event) + setupStatusBarSpacer() val toolbar = find(R.id.toolbar) toolbar?.visibility = View.GONE diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/MainActivityLegacy.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/MainActivityLegacy.kt index f20836f82..39b877c21 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/MainActivityLegacy.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/MainActivityLegacy.kt @@ -57,6 +57,7 @@ import com.github.quarck.calnotify.quiethours.QuietHoursManager import com.github.quarck.calnotify.utils.background import com.github.quarck.calnotify.utils.find import com.github.quarck.calnotify.utils.findOrThrow +import com.github.quarck.calnotify.utils.setupStatusBarSpacer import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.snackbar.Snackbar @@ -112,15 +113,7 @@ class MainActivityLegacy : MainActivityBase(), EventListCallback { window.statusBarColor = getColor(R.color.primary_dark) // Set status bar spacer height - findViewById(R.id.status_bar_spacer)?.let { spacer -> - ViewCompat.setOnApplyWindowInsetsListener(spacer) { view, insets -> - val statusBarInset = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top - view.layoutParams.height = statusBarInset - view.requestLayout() - insets - } - ViewCompat.requestApplyInsets(spacer) - } + setupStatusBarSpacer() // Apply nav bar inset to FAB bottom margin findViewById(R.id.action_btn_add_event)?.let { fab -> diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/MainActivityModern.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/MainActivityModern.kt index 302b2731d..e336a49a6 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/MainActivityModern.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/MainActivityModern.kt @@ -48,6 +48,7 @@ import com.github.quarck.calnotify.globalState import com.github.quarck.calnotify.utils.DateTimeUtils import com.github.quarck.calnotify.utils.find import com.github.quarck.calnotify.utils.findOrThrow +import com.github.quarck.calnotify.utils.setupStatusBarSpacer import com.github.quarck.calnotify.utils.truncateForChip import androidx.appcompat.view.ContextThemeWrapper import com.google.android.material.bottomnavigation.BottomNavigationView @@ -117,16 +118,7 @@ class MainActivityModern : MainActivityBase() { window.statusBarColor = getColor(R.color.primary_dark) // Set status bar spacer height (pinned, doesn't scroll with toolbar) - val statusBarSpacer = findViewById(R.id.status_bar_spacer) - statusBarSpacer?.let { spacer -> - ViewCompat.setOnApplyWindowInsetsListener(spacer) { view, insets -> - val statusBarInset = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top - view.layoutParams.height = statusBarInset - view.requestLayout() - insets - } - ViewCompat.requestApplyInsets(spacer) - } + setupStatusBarSpacer() // Set up navigation val navHostFragment = supportFragmentManager diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/PreActionActivity.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/PreActionActivity.kt index 6b0da587b..b80d90fa3 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/PreActionActivity.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/PreActionActivity.kt @@ -51,6 +51,7 @@ import com.github.quarck.calnotify.textutils.EventFormatterInterface import com.github.quarck.calnotify.utils.CNPlusClockInterface import com.github.quarck.calnotify.utils.CNPlusSystemClock import com.github.quarck.calnotify.utils.background +import com.github.quarck.calnotify.utils.setupStatusBarSpacer /** * Activity for pre-actions on upcoming events. @@ -143,6 +144,7 @@ class PreActionActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_pre_action) + setupStatusBarSpacer() settings = Settings(this) formatter = EventFormatter(this) diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/PrivacyPolicyActivity.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/PrivacyPolicyActivity.kt index 923d0fbb7..da1199ecf 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/PrivacyPolicyActivity.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/PrivacyPolicyActivity.kt @@ -4,12 +4,14 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import com.github.quarck.calnotify.R +import com.github.quarck.calnotify.utils.setupStatusBarSpacer class PrivacyPolicyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_privacy_policy) + setupStatusBarSpacer() val toolbar = findViewById(R.id.toolbar) as Toolbar setSupportActionBar(toolbar) diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/ReportABugActivity.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/ReportABugActivity.kt index a13749458..f4f6243b4 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/ReportABugActivity.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/ReportABugActivity.kt @@ -33,6 +33,7 @@ import com.github.quarck.calnotify.logs.DevLog import com.github.quarck.calnotify.utils.find import com.github.quarck.calnotify.utils.CNPlusClockInterface import com.github.quarck.calnotify.utils.CNPlusSystemClock +import com.github.quarck.calnotify.utils.setupStatusBarSpacer class ReportABugActivity : AppCompatActivity() { private var easterEggCount = 0; @@ -42,6 +43,7 @@ class ReportABugActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_report_a_bug) + setupStatusBarSpacer() setSupportActionBar(find(R.id.toolbar)) supportActionBar?.setDisplayHomeAsUpEnabled(true) diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/SettingsActivityX.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/SettingsActivityX.kt index a39f9e989..873f15793 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/SettingsActivityX.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/SettingsActivityX.kt @@ -26,6 +26,7 @@ import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import com.github.quarck.calnotify.R import com.github.quarck.calnotify.prefs.NavigationSettingsFragmentX +import com.github.quarck.calnotify.utils.setupStatusBarSpacer import com.github.quarck.calnotify.prefs.PreferenceHeadersFragment /** @@ -38,6 +39,7 @@ class SettingsActivityX : AppCompatActivity(), override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_settings_x) + setupStatusBarSpacer() setSupportActionBar(findViewById(R.id.toolbar)) supportActionBar?.setDisplayHomeAsUpEnabled(true) diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/SnoozeAllActivity.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/SnoozeAllActivity.kt index e68d1b94f..89e596f65 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/SnoozeAllActivity.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/SnoozeAllActivity.kt @@ -41,6 +41,7 @@ import com.github.quarck.calnotify.quiethours.QuietHoursManager import com.github.quarck.calnotify.textutils.EventFormatter import com.github.quarck.calnotify.textutils.EventFormatterInterface import com.github.quarck.calnotify.utils.* +import com.github.quarck.calnotify.utils.setupStatusBarSpacer import java.util.* import com.github.quarck.calnotify.* import com.github.quarck.calnotify.logs.DevLog @@ -113,6 +114,7 @@ open class SnoozeAllActivity : AppCompatActivity() { state = ViewEventActivityState.fromBundle(savedInstanceState) setContentView(R.layout.activity_snooze_all) + setupStatusBarSpacer() val currentTime = clock.currentTimeMillis() diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/ViewEventActivityNoRecents.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/ViewEventActivityNoRecents.kt index 7767496c7..e87fc94f9 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/ViewEventActivityNoRecents.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/ViewEventActivityNoRecents.kt @@ -43,6 +43,7 @@ import com.github.quarck.calnotify.quiethours.QuietHoursManager import com.github.quarck.calnotify.textutils.EventFormatter import com.github.quarck.calnotify.textutils.EventFormatterInterface import com.github.quarck.calnotify.utils.* +import com.github.quarck.calnotify.utils.setupStatusBarSpacer import java.util.* import com.github.quarck.calnotify.* import com.github.quarck.calnotify.logs.DevLog @@ -314,6 +315,9 @@ open class ViewEventActivityNoRecents : AppCompatActivity() { window.statusBarColor = color.scaleColor(0.7f) + // Set status bar spacer height (for edge-to-edge displays) + setupStatusBarSpacer() + // val shouldOfferMove = (!event.isRepeating) && (DateTimeUtils.isUTCTodayOrInThePast(event.startTime)) val shouldOfferMove = (DateTimeUtils.isUTCTodayOrInThePast(event.startTime)) if (shouldOfferMove) { diff --git a/android/app/src/main/java/com/github/quarck/calnotify/utils/StatusBarUtils.kt b/android/app/src/main/java/com/github/quarck/calnotify/utils/StatusBarUtils.kt new file mode 100644 index 000000000..e4beee0ed --- /dev/null +++ b/android/app/src/main/java/com/github/quarck/calnotify/utils/StatusBarUtils.kt @@ -0,0 +1,46 @@ +// +// Calendar Notifications Plus +// Copyright (C) 2025 William Harris (wharris+cnplus@upscalews.com) +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +// + +package com.github.quarck.calnotify.utils + +import android.view.View +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import com.github.quarck.calnotify.R + +/** + * Sets up the status bar spacer for edge-to-edge display support. + * Call this after setContentView() in activities that have a status_bar_spacer view. + * + * The spacer view should be positioned at the top of the AppBarLayout or header area, + * with initial height of 0dp. This function sets its height to match the actual + * status bar inset on the device. + */ +fun AppCompatActivity.setupStatusBarSpacer() { + findViewById(R.id.status_bar_spacer)?.let { spacer -> + ViewCompat.setOnApplyWindowInsetsListener(spacer) { view, insets -> + val statusBarInset = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top + view.layoutParams.height = statusBarInset + view.requestLayout() + insets + } + ViewCompat.requestApplyInsets(spacer) + } +} diff --git a/android/app/src/main/res/layout/activity_about.xml b/android/app/src/main/res/layout/activity_about.xml index 75748d009..580a05217 100644 --- a/android/app/src/main/res/layout/activity_about.xml +++ b/android/app/src/main/res/layout/activity_about.xml @@ -14,6 +14,13 @@ android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:layout_height="0dp" + android:layout_alignParentTop="true" /> + + +