From 669fa2fd222a5fc4797bb00371a22897ad02cbfa Mon Sep 17 00:00:00 2001 From: Sean Singh <38306929+Seanathan10@users.noreply.github.com> Date: Tue, 4 Jul 2023 03:17:44 -0700 Subject: [PATCH] Support edge-to-edge rendering on Android Q+ (#146) * Set nav bars transparent in themes.xml files * App renders edge-to-edge; need to handle scroll overlaps * Add fake padding * Begin version separating * Edge-to-edge working everywhere except main page * Finalized * Cleanup Finalized * Cleanup Finalized * Removed redundant values-v29 & optimize imports * Consolidated insets to Fragment2 * Consolidated insets to Fragment2 (file wasn't staged) --- .../java/eu/darken/capod/common/uix/Activity2.kt | 3 +++ .../java/eu/darken/capod/common/uix/Fragment2.kt | 13 +++++++++++++ .../capod/main/ui/overview/OverviewFragment.kt | 3 +++ .../capod/main/ui/settings/SettingsFragment.kt | 4 ++++ app/src/main/res/layout/main_fragment.xml | 2 ++ app/src/main/res/values-night/themes.xml | 5 ++++- app/src/main/res/values/themes.xml | 14 +++++++++++++- app/src/main/res/xml/preferences_general.xml | 4 ++++ 8 files changed, 46 insertions(+), 2 deletions(-) diff --git a/app-common/src/main/java/eu/darken/capod/common/uix/Activity2.kt b/app-common/src/main/java/eu/darken/capod/common/uix/Activity2.kt index 3a7b642f..0f73ed04 100644 --- a/app-common/src/main/java/eu/darken/capod/common/uix/Activity2.kt +++ b/app-common/src/main/java/eu/darken/capod/common/uix/Activity2.kt @@ -3,6 +3,7 @@ package eu.darken.capod.common.uix import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.WindowCompat import androidx.lifecycle.LiveData import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE import eu.darken.capod.common.debug.logging.log @@ -15,6 +16,8 @@ abstract class Activity2 : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { log(tag, VERBOSE) { "onCreate(savedInstanceState=$savedInstanceState)" } super.onCreate(savedInstanceState) + + WindowCompat.setDecorFitsSystemWindows( window, false ) } override fun onResume() { diff --git a/app-common/src/main/java/eu/darken/capod/common/uix/Fragment2.kt b/app-common/src/main/java/eu/darken/capod/common/uix/Fragment2.kt index bb4f8f3b..8eb977ee 100644 --- a/app-common/src/main/java/eu/darken/capod/common/uix/Fragment2.kt +++ b/app-common/src/main/java/eu/darken/capod/common/uix/Fragment2.kt @@ -7,6 +7,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.annotation.LayoutRes +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE import eu.darken.capod.common.debug.logging.log @@ -40,6 +42,17 @@ abstract class Fragment2(@LayoutRes val layoutRes: Int?) : Fragment(layoutRes ?: override fun onViewCreated(view: View, savedInstanceState: Bundle?) { log(tag, VERBOSE) { "onViewCreated(view=$view, savedInstanceState=$savedInstanceState)" } super.onViewCreated(view, savedInstanceState) + + ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets -> + val systemWindowInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding( + v.paddingLeft, + systemWindowInsets.top, + v.paddingRight, + 0 + ) + insets + } } override fun onActivityCreated(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragment.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragment.kt index 3b2df596..d4966bad 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragment.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragment.kt @@ -8,6 +8,8 @@ import android.text.SpannableStringBuilder import android.view.View import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.viewModels import dagger.hilt.android.AndroidEntryPoint import eu.darken.capod.BuildConfig @@ -147,6 +149,7 @@ class OverviewFragment : Fragment3(R.layout.main_fragment) { vm.launchUpgradeFlow.observe2 { it(requireActivity()) } + super.onViewCreated(view, savedInstanceState) } diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/SettingsFragment.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/SettingsFragment.kt index b4361f55..699d5740 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/SettingsFragment.kt @@ -2,7 +2,10 @@ package eu.darken.capod.main.ui.settings import android.os.Bundle import android.os.Parcelable +import android.view.LayoutInflater import android.view.View +import android.view.ViewGroup +import android.widget.ListView import androidx.appcompat.widget.Toolbar import androidx.fragment.app.viewModels import androidx.preference.Preference @@ -15,6 +18,7 @@ import eu.darken.capod.common.viewbinding.viewBinding import eu.darken.capod.databinding.SettingsFragmentBinding import kotlinx.parcelize.Parcelize + @AndroidEntryPoint class SettingsFragment : Fragment2(R.layout.settings_fragment), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { diff --git a/app/src/main/res/layout/main_fragment.xml b/app/src/main/res/layout/main_fragment.xml index f812bf12..ea87905b 100644 --- a/app/src/main/res/layout/main_fragment.xml +++ b/app/src/main/res/layout/main_fragment.xml @@ -22,6 +22,8 @@ android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" + android:paddingBottom="48dp" + android:clipToPadding="false" tools:listitem="@layout/overview_pods_dual_item" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/toolbar" /> diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index d69a4b5b..e15be6da 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index b9adb822..603ee9dc 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/app/src/main/res/xml/preferences_general.xml b/app/src/main/res/xml/preferences_general.xml index 0870e624..69dcad93 100644 --- a/app/src/main/res/xml/preferences_general.xml +++ b/app/src/main/res/xml/preferences_general.xml @@ -77,6 +77,10 @@ android:summary="@string/settings_debug_description" android:title="@string/settings_debug_label" /> + + \ No newline at end of file