@@ -6,10 +6,15 @@ import android.os.Bundle
66import android.view.View
77import androidx.appcompat.app.AppCompatActivity
88import androidx.core.view.ScrollingView
9+ import androidx.core.view.ViewCompat
910import androidx.core.view.WindowCompat
11+ import androidx.core.view.WindowInsetsAnimationCompat
12+ import androidx.core.view.WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_CONTINUE_ON_SUBTREE
13+ import androidx.core.view.WindowInsetsCompat
1014import androidx.core.view.WindowInsetsCompat.Type
1115import androidx.core.view.get
1216import androidx.core.view.size
17+ import androidx.core.view.updatePadding
1318import androidx.core.widget.NestedScrollView
1419import androidx.recyclerview.widget.RecyclerView
1520import org.fossify.commons.R
@@ -48,7 +53,8 @@ abstract class EdgeToEdgeActivity : AppCompatActivity() {
4853 padTopSystem : List <View > = emptyList(),
4954 padBottomSystem : List <View > = emptyList(),
5055 padBottomImeAndSystem : List <View > = emptyList(),
51- moveBottomSystem : List <View > = emptyList()
56+ moveBottomSystem : List <View > = emptyList(),
57+ animateIme : Boolean = false,
5258 ) {
5359 onApplyWindowInsets { insets ->
5460 val system = insets.getInsetsIgnoringVisibility(Type .systemBars())
@@ -65,6 +71,24 @@ abstract class EdgeToEdgeActivity : AppCompatActivity() {
6571 val sideRight = maxOf(system.right, cutout.right)
6672 contentRoot.updatePaddingWithBase(left = sideLeft, right = sideRight)
6773 }
74+
75+ if (animateIme) {
76+ ViewCompat .setWindowInsetsAnimationCallback(
77+ contentRoot,
78+ object : WindowInsetsAnimationCompat .Callback (DISPATCH_MODE_CONTINUE_ON_SUBTREE ) {
79+ override fun onProgress (
80+ insets : WindowInsetsCompat ,
81+ runningAnimations : MutableList <WindowInsetsAnimationCompat >
82+ ): WindowInsetsCompat {
83+ val bottom = insets.getInsets(Type .systemBars() or Type .ime()).bottom
84+ padBottomImeAndSystem.forEach {
85+ it.updatePaddingWithBase(bottom = bottom)
86+ }
87+ return insets
88+ }
89+ }
90+ )
91+ }
6892 }
6993 }
7094
0 commit comments