diff --git a/commons/src/main/kotlin/org/fossify/commons/activities/EdgeToEdgeActivity.kt b/commons/src/main/kotlin/org/fossify/commons/activities/EdgeToEdgeActivity.kt index 7200fa0c1..b68499826 100644 --- a/commons/src/main/kotlin/org/fossify/commons/activities/EdgeToEdgeActivity.kt +++ b/commons/src/main/kotlin/org/fossify/commons/activities/EdgeToEdgeActivity.kt @@ -6,10 +6,15 @@ import android.os.Bundle import android.view.View import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ScrollingView +import androidx.core.view.ViewCompat import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsAnimationCompat +import androidx.core.view.WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_CONTINUE_ON_SUBTREE +import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat.Type import androidx.core.view.get import androidx.core.view.size +import androidx.core.view.updatePadding import androidx.core.widget.NestedScrollView import androidx.recyclerview.widget.RecyclerView import org.fossify.commons.R @@ -48,7 +53,8 @@ abstract class EdgeToEdgeActivity : AppCompatActivity() { padTopSystem: List = emptyList(), padBottomSystem: List = emptyList(), padBottomImeAndSystem: List = emptyList(), - moveBottomSystem: List = emptyList() + moveBottomSystem: List = emptyList(), + animateIme: Boolean = false, ) { onApplyWindowInsets { insets -> val system = insets.getInsetsIgnoringVisibility(Type.systemBars()) @@ -65,6 +71,24 @@ abstract class EdgeToEdgeActivity : AppCompatActivity() { val sideRight = maxOf(system.right, cutout.right) contentRoot.updatePaddingWithBase(left = sideLeft, right = sideRight) } + + if (animateIme) { + ViewCompat.setWindowInsetsAnimationCallback( + contentRoot, + object : WindowInsetsAnimationCompat.Callback(DISPATCH_MODE_CONTINUE_ON_SUBTREE) { + override fun onProgress( + insets: WindowInsetsCompat, + runningAnimations: MutableList + ): WindowInsetsCompat { + val bottom = insets.getInsets(Type.systemBars() or Type.ime()).bottom + padBottomImeAndSystem.forEach { + it.updatePaddingWithBase(bottom = bottom) + } + return insets + } + } + ) + } } } diff --git a/commons/src/main/kotlin/org/fossify/commons/extensions/View.kt b/commons/src/main/kotlin/org/fossify/commons/extensions/View.kt index 42904ef00..8fdf51030 100644 --- a/commons/src/main/kotlin/org/fossify/commons/extensions/View.kt +++ b/commons/src/main/kotlin/org/fossify/commons/extensions/View.kt @@ -12,7 +12,6 @@ import androidx.core.view.marginRight import androidx.core.view.marginTop import androidx.core.view.updateLayoutParams import androidx.core.view.updatePadding -import androidx.core.view.updatePaddingRelative import org.fossify.commons.R import org.fossify.commons.helpers.SHORT_ANIMATION_DURATION