diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/about/ui/ChangelogFragment.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/about/ui/ChangelogFragment.kt index 7c8e5140..572963c9 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/about/ui/ChangelogFragment.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/about/ui/ChangelogFragment.kt @@ -8,6 +8,7 @@ import androidx.fragment.app.Fragment import de.christinecoenen.code.zapp.R import de.christinecoenen.code.zapp.databinding.ChangelogFragmentBinding import de.christinecoenen.code.zapp.utils.io.IoUtils.readAllText +import de.christinecoenen.code.zapp.utils.system.SystemUiHelper.applyBottomInsetAsPadding import io.noties.markwon.Markwon import org.koin.android.ext.android.inject @@ -29,6 +30,8 @@ class ChangelogFragment : Fragment() { val markdown = resources.readAllText(R.raw.changelog) markwon.setMarkdown(binding.txtChangelog, markdown) + binding.txtChangelog.applyBottomInsetAsPadding() + return binding.root } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/about/ui/FaqFragment.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/about/ui/FaqFragment.kt index e0180d51..03e12181 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/about/ui/FaqFragment.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/about/ui/FaqFragment.kt @@ -8,6 +8,7 @@ import androidx.fragment.app.Fragment import de.christinecoenen.code.zapp.R import de.christinecoenen.code.zapp.databinding.FaqFragmentBinding import de.christinecoenen.code.zapp.utils.io.IoUtils.readAllText +import de.christinecoenen.code.zapp.utils.system.SystemUiHelper.applyBottomInsetAsPadding import io.noties.markwon.Markwon import org.koin.android.ext.android.inject @@ -29,6 +30,8 @@ class FaqFragment : Fragment() { val markdown = resources.readAllText(R.raw.faq) markwon.setMarkdown(binding.txtFaq, markdown) + binding.txtFaq.applyBottomInsetAsPadding() + return binding.root } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/detail/MediathekDetailFragment.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/detail/MediathekDetailFragment.kt index f3db696b..a8b89a82 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/detail/MediathekDetailFragment.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/detail/MediathekDetailFragment.kt @@ -26,6 +26,7 @@ import de.christinecoenen.code.zapp.repositories.MediathekRepository import de.christinecoenen.code.zapp.utils.system.ImageHelper.loadThumbnailAsync import de.christinecoenen.code.zapp.utils.system.IntentHelper.openUrl import de.christinecoenen.code.zapp.utils.system.LifecycleOwnerHelper.launchOnCreated +import de.christinecoenen.code.zapp.utils.system.SystemUiHelper.applyBottomInsetAsPadding import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.flow.catch @@ -63,6 +64,8 @@ class MediathekDetailFragment : Fragment() { loadOrPersistShowFromArguments() } + binding.root.applyBottomInsetAsPadding() + return binding.root } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/personal/details/DetailsBaseFragment.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/personal/details/DetailsBaseFragment.kt index ce730d79..d5e3c34e 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/personal/details/DetailsBaseFragment.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/personal/details/DetailsBaseFragment.kt @@ -18,6 +18,7 @@ import de.christinecoenen.code.zapp.databinding.PersonalDetailsFragmentBinding import de.christinecoenen.code.zapp.databinding.ViewNoShowsBinding import de.christinecoenen.code.zapp.models.shows.MediathekShow import de.christinecoenen.code.zapp.utils.system.LifecycleOwnerHelper.launchOnCreated +import de.christinecoenen.code.zapp.utils.system.SystemUiHelper.applyBottomInsetAsPadding abstract class DetailsBaseFragment : Fragment(), MediathekShowListItemListener { @@ -80,6 +81,8 @@ abstract class DetailsBaseFragment : Fragment(), MediathekShowListItemListener { } } + binding.root.applyBottomInsetAsPadding() + return binding.root } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/BaseSettingsFragment.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/BaseSettingsFragment.kt index 1a3249a9..9a32e700 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/BaseSettingsFragment.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/BaseSettingsFragment.kt @@ -1,11 +1,25 @@ package de.christinecoenen.code.zapp.app.settings.ui -import androidx.preference.* +import android.os.Bundle +import android.view.View +import androidx.preference.EditTextPreference +import androidx.preference.ListPreference +import androidx.preference.MultiSelectListPreference +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat import com.google.android.material.dialog.MaterialAlertDialogBuilder import de.christinecoenen.code.zapp.app.settings.repository.SettingsRepository import de.christinecoenen.code.zapp.databinding.DialogEditTextPreferenceBinding +import de.christinecoenen.code.zapp.utils.system.SystemUiHelper.applyBottomInsetAsPadding abstract class BaseSettingsFragment : PreferenceFragmentCompat() { + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + listView.applyBottomInsetAsPadding() + } + /** * Show [ListPreference] and [EditTextPreference] dialog by [MaterialAlertDialogBuilder] */ diff --git a/app/src/main/java/de/christinecoenen/code/zapp/utils/system/SystemUiHelper.kt b/app/src/main/java/de/christinecoenen/code/zapp/utils/system/SystemUiHelper.kt index 85b5cc15..acb0ca7e 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/utils/system/SystemUiHelper.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/utils/system/SystemUiHelper.kt @@ -1,7 +1,11 @@ package de.christinecoenen.code.zapp.utils.system +import android.view.View import android.view.Window +import androidx.core.view.ViewCompat import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding object SystemUiHelper { @@ -15,4 +19,18 @@ object SystemUiHelper { windowInsetController.isAppearanceLightStatusBars = lightStatusBar } + /** + * Sets the bottom padding of this view to the bottom system bar inset to avoid overlapping + * with system ui. + */ + fun View.applyBottomInsetAsPadding() { + ViewCompat.setOnApplyWindowInsetsListener(this) { v, insets -> + val systemBars = insets.getInsets( + WindowInsetsCompat.Type.systemBars() or + WindowInsetsCompat.Type.ime() + ) + v.updatePadding(bottom = systemBars.bottom) + insets + } + } }