diff --git a/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddActivity.kt b/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddActivity.kt index eb6f2c6f..915af6cf 100644 --- a/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddActivity.kt +++ b/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddActivity.kt @@ -3,6 +3,7 @@ package com.hoc.flowmvi.ui.add import android.content.Context import android.content.Intent import android.view.MenuItem +import android.view.ViewGroup import androidx.core.view.isInvisible import androidx.transition.AutoTransition import androidx.transition.TransitionManager @@ -98,6 +99,10 @@ class AddActivity : AbstractMviActivity = addBinding.run { merge( diff --git a/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainActivity.kt b/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainActivity.kt index cf7bd6a5..33950918 100644 --- a/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainActivity.kt +++ b/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainActivity.kt @@ -2,6 +2,7 @@ package com.hoc.flowmvi.ui.main import android.view.Menu import android.view.MenuItem +import android.view.ViewGroup import androidx.core.view.isVisible import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager @@ -78,6 +79,10 @@ class MainActivity : AbstractMviActivity = merge( flowOf(ViewIntent.Initial), diff --git a/feature-search/src/main/java/com/hoc/flowmvi/ui/search/SearchActivity.kt b/feature-search/src/main/java/com/hoc/flowmvi/ui/search/SearchActivity.kt index e41ba60f..adc11471 100644 --- a/feature-search/src/main/java/com/hoc/flowmvi/ui/search/SearchActivity.kt +++ b/feature-search/src/main/java/com/hoc/flowmvi/ui/search/SearchActivity.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.content.res.Configuration import android.view.Menu import android.view.MenuItem +import android.view.ViewGroup import androidx.appcompat.widget.SearchView import androidx.core.view.isInvisible import androidx.core.view.isVisible @@ -112,6 +113,10 @@ class SearchActivity : AbstractMviActivity finish().let { true } diff --git a/mvi/mvi-base/src/main/java/com/hoc/flowmvi/mvi_base/AbstractMviActivity.kt b/mvi/mvi-base/src/main/java/com/hoc/flowmvi/mvi_base/AbstractMviActivity.kt index 26de4a12..010a4d25 100644 --- a/mvi/mvi-base/src/main/java/com/hoc/flowmvi/mvi_base/AbstractMviActivity.kt +++ b/mvi/mvi-base/src/main/java/com/hoc/flowmvi/mvi_base/AbstractMviActivity.kt @@ -1,9 +1,14 @@ package com.hoc.flowmvi.mvi_base +import android.os.Build import android.os.Bundle +import android.view.ViewGroup +import android.view.ViewTreeObserver +import androidx.activity.enableEdgeToEdge import androidx.annotation.CallSuper import androidx.annotation.LayoutRes import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.WindowInsetsCompat import androidx.lifecycle.lifecycleScope import com.hoc.flowmvi.core_ui.collectIn import com.hoc.flowmvi.core_ui.debugCheckImmediateMainDispatcher @@ -24,9 +29,13 @@ abstract class AbstractMviActivity< @CallSuper override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - + // + enableEdgeToEdge() + // setupViews() bindVM() + // + adaptFullScreen() } private fun bindVM() { @@ -50,4 +59,33 @@ abstract class AbstractMviActivity< } protected abstract fun setupViews() + + + private fun adaptFullScreen() { + // + window.decorView.viewTreeObserver.addOnGlobalLayoutListener( + object : ViewTreeObserver.OnGlobalLayoutListener { + override fun onGlobalLayout() { + // + window.decorView.viewTreeObserver.removeOnGlobalLayoutListener(this) + // + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + // + val systemBarsInsets = WindowInsetsCompat.toWindowInsetsCompat(window.decorView.rootWindowInsets).getInsets(WindowInsetsCompat.Type.systemBars()) + // + val actionBarHeight = supportActionBar?.height ?: 0 + // + rootView().run { + val newLayoutParams = layoutParams as? ViewGroup.MarginLayoutParams ?: throw IllegalStateException("root view must have MarginLayoutParams") + newLayoutParams.topMargin = systemBarsInsets.top + actionBarHeight + newLayoutParams.bottomMargin = systemBarsInsets.bottom + layoutParams = newLayoutParams + } + } + } + }, + ) + } + + protected abstract fun rootView(): ViewGroup }