Skip to content

Commit 42266a2

Browse files
authored
feat: add option to animate IME padding (#233)
* feat: add helper for moving views with system insets * feat: make insets optional in FABs * feat: add option to animate IME padding
1 parent c11b825 commit 42266a2

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

commons/src/main/kotlin/org/fossify/commons/activities/EdgeToEdgeActivity.kt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,15 @@ import android.os.Bundle
66
import android.view.View
77
import androidx.appcompat.app.AppCompatActivity
88
import androidx.core.view.ScrollingView
9+
import androidx.core.view.ViewCompat
910
import 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
1014
import androidx.core.view.WindowInsetsCompat.Type
1115
import androidx.core.view.get
1216
import androidx.core.view.size
17+
import androidx.core.view.updatePadding
1318
import androidx.core.widget.NestedScrollView
1419
import androidx.recyclerview.widget.RecyclerView
1520
import 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

commons/src/main/kotlin/org/fossify/commons/extensions/View.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import androidx.core.view.marginRight
1212
import androidx.core.view.marginTop
1313
import androidx.core.view.updateLayoutParams
1414
import androidx.core.view.updatePadding
15-
import androidx.core.view.updatePaddingRelative
1615
import org.fossify.commons.R
1716
import org.fossify.commons.helpers.SHORT_ANIMATION_DURATION
1817

0 commit comments

Comments
 (0)