Skip to content

Commit 286a23c

Browse files
committed
enableEdgeToEdge
1 parent e7df996 commit 286a23c

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed

feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddActivity.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.hoc.flowmvi.ui.add
33
import android.content.Context
44
import android.content.Intent
55
import android.view.MenuItem
6+
import android.view.ViewGroup
67
import androidx.core.view.isInvisible
78
import androidx.transition.AutoTransition
89
import androidx.transition.TransitionManager
@@ -98,6 +99,10 @@ class AddActivity : AbstractMviActivity<ViewIntent, ViewState, SingleEvent, AddV
9899
}
99100
}
100101

102+
override fun rootView(): ViewGroup {
103+
return addBinding.root
104+
}
105+
101106
override fun viewIntents(): Flow<ViewIntent> =
102107
addBinding.run {
103108
merge(

feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainActivity.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.hoc.flowmvi.ui.main
22

33
import android.view.Menu
44
import android.view.MenuItem
5+
import android.view.ViewGroup
56
import androidx.core.view.isVisible
67
import androidx.recyclerview.widget.ItemTouchHelper
78
import androidx.recyclerview.widget.LinearLayoutManager
@@ -78,6 +79,10 @@ class MainActivity : AbstractMviActivity<ViewIntent, ViewState, SingleEvent, Mai
7879
}
7980
}
8081

82+
override fun rootView(): ViewGroup {
83+
return mainBinding.root
84+
}
85+
8186
override fun viewIntents(): Flow<ViewIntent> =
8287
merge(
8388
flowOf(ViewIntent.Initial),

feature-search/src/main/java/com/hoc/flowmvi/ui/search/SearchActivity.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.content.Intent
55
import android.content.res.Configuration
66
import android.view.Menu
77
import android.view.MenuItem
8+
import android.view.ViewGroup
89
import androidx.appcompat.widget.SearchView
910
import androidx.core.view.isInvisible
1011
import androidx.core.view.isVisible
@@ -112,6 +113,10 @@ class SearchActivity : AbstractMviActivity<ViewIntent, ViewState, SingleEvent, S
112113
}
113114
}
114115

116+
override fun rootView(): ViewGroup {
117+
return binding.root
118+
}
119+
115120
override fun onOptionsItemSelected(item: MenuItem): Boolean =
116121
when (item.itemId) {
117122
android.R.id.home -> finish().let { true }

mvi/mvi-base/src/main/java/com/hoc/flowmvi/mvi_base/AbstractMviActivity.kt

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package com.hoc.flowmvi.mvi_base
22

3+
import android.os.Build
34
import android.os.Bundle
5+
import android.view.ViewGroup
6+
import android.view.ViewTreeObserver
7+
import androidx.activity.enableEdgeToEdge
48
import androidx.annotation.CallSuper
59
import androidx.annotation.LayoutRes
610
import androidx.appcompat.app.AppCompatActivity
11+
import androidx.core.view.WindowInsetsCompat
712
import androidx.lifecycle.lifecycleScope
813
import com.hoc.flowmvi.core_ui.collectIn
914
import com.hoc.flowmvi.core_ui.debugCheckImmediateMainDispatcher
@@ -24,9 +29,13 @@ abstract class AbstractMviActivity<
2429
@CallSuper
2530
override fun onCreate(savedInstanceState: Bundle?) {
2631
super.onCreate(savedInstanceState)
27-
32+
//
33+
enableEdgeToEdge()
34+
//
2835
setupViews()
2936
bindVM()
37+
//
38+
adaptFullScreen()
3039
}
3140

3241
private fun bindVM() {
@@ -50,4 +59,33 @@ abstract class AbstractMviActivity<
5059
}
5160

5261
protected abstract fun setupViews()
62+
63+
64+
private fun adaptFullScreen() {
65+
//
66+
window.decorView.viewTreeObserver.addOnGlobalLayoutListener(
67+
object : ViewTreeObserver.OnGlobalLayoutListener {
68+
override fun onGlobalLayout() {
69+
//
70+
window.decorView.viewTreeObserver.removeOnGlobalLayoutListener(this)
71+
//
72+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
73+
//
74+
val systemBarsInsets = WindowInsetsCompat.toWindowInsetsCompat(window.decorView.rootWindowInsets).getInsets(WindowInsetsCompat.Type.systemBars())
75+
//
76+
val actionBarHeight = supportActionBar?.height ?: 0
77+
//
78+
rootView().run {
79+
val newLayoutParams = layoutParams as? ViewGroup.MarginLayoutParams ?: throw IllegalStateException("root view must have MarginLayoutParams")
80+
newLayoutParams.topMargin = systemBarsInsets.top + actionBarHeight
81+
newLayoutParams.bottomMargin = systemBarsInsets.bottom
82+
layoutParams = newLayoutParams
83+
}
84+
}
85+
}
86+
},
87+
)
88+
}
89+
90+
protected abstract fun rootView(): ViewGroup
5391
}

0 commit comments

Comments
 (0)