Compare commits

...

3 commits

Author SHA1 Message Date
Ritika Pahwa
c09365737f Refactor handleKeyboardInsets()
Some checks are pending
Android CI / Run tests and generate APK (push) Waiting to run
2025-10-22 13:44:34 +05:30
Ritika Pahwa
3f2c75ce11 Refactor handleKeyboardInsets() 2025-10-22 13:43:37 +05:30
Ritika Pahwa
ec9bb3f89b Modify handleKeyboardInsets to handle insets correctly 2025-10-22 13:32:25 +05:30
5 changed files with 19 additions and 32 deletions

View file

@ -89,6 +89,7 @@ class LoginActivity : AccountAuthenticatorActivity() {
binding = ActivityLoginBinding.inflate(layoutInflater) binding = ActivityLoginBinding.inflate(layoutInflater)
applyEdgeToEdgeAllInsets(binding!!.root) applyEdgeToEdgeAllInsets(binding!!.root)
binding?.aboutPrivacyPolicy?.handleKeyboardInsets()
with(binding!!) { with(binding!!) {
setContentView(root) setContentView(root)

View file

@ -70,6 +70,7 @@ class UploadCategoriesFragment : UploadBaseFragment(), CategoriesContract.View {
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
binding = UploadCategoriesFragmentBinding.inflate(inflater, container, false) binding = UploadCategoriesFragmentBinding.inflate(inflater, container, false)
binding!!.llContainerButtons.handleKeyboardInsets()
return binding!!.root return binding!!.root
} }

View file

@ -70,6 +70,7 @@ class DepictsFragment : UploadBaseFragment(), DepictsContract.View {
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
_binding = UploadDepictsFragmentBinding.inflate(inflater, container, false) _binding = UploadDepictsFragmentBinding.inflate(inflater, container, false)
_binding!!.navigationButtonsContainer.handleKeyboardInsets()
return binding.root return binding.root
} }

View file

@ -146,6 +146,7 @@ class UploadMediaDetailFragment : UploadBaseFragment(), UploadMediaDetailsContra
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View { ): View {
_binding = FragmentUploadMediaDetailFragmentBinding.inflate(inflater, container, false) _binding = FragmentUploadMediaDetailFragmentBinding.inflate(inflater, container, false)
_binding!!.mediaDetailCardView.handleKeyboardInsets()
// intialise the adapter early to prevent uninitialized access // intialise the adapter early to prevent uninitialized access
uploadMediaDetailAdapter = UploadMediaDetailAdapter( uploadMediaDetailAdapter = UploadMediaDetailAdapter(
this, this,

View file

@ -166,46 +166,29 @@ fun applyEdgeToEdgeBottomInsets(view: View) = view.applyEdgeToEdgeInsets { inset
* and accounts for navigation bar insets to avoid double offsets. * and accounts for navigation bar insets to avoid double offsets.
*/ */
fun View.handleKeyboardInsets() { fun View.handleKeyboardInsets() {
var existingBottomMargin = 0 ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
val existingBottomMargin = if (view.getTag(R.id.initial_margin_bottom) != null) {
ViewCompat.setOnApplyWindowInsetsListener(this) { view, windowInsets ->
existingBottomMargin = if (view.getTag(R.id.initial_margin_bottom) != null) {
view.getTag(R.id.initial_margin_bottom) as Int view.getTag(R.id.initial_margin_bottom) as Int
} else { } else {
view.setTag(R.id.initial_margin_bottom, view.marginBottom) view.setTag(R.id.initial_margin_bottom, view.marginBottom)
view.marginBottom view.marginBottom
} }
WindowInsetsCompat.CONSUMED
}
// Animate during IME transition
ViewCompat.setWindowInsetsAnimationCallback(
this,
object : WindowInsetsAnimationCompat.Callback(
DISPATCH_MODE_CONTINUE_ON_SUBTREE
) {
override fun onProgress(
insets: WindowInsetsCompat,
runningAnimations: MutableList<WindowInsetsAnimationCompat>
): WindowInsetsCompat {
val lp = layoutParams as MarginLayoutParams val lp = layoutParams as MarginLayoutParams
val navBarInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars()) val navBarInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars())
val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime()) val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime())
val imeVisible = insets.isVisible(WindowInsetsCompat.Type.ime()) val imeVisible = insets.isVisible(WindowInsetsCompat.Type.ime())
// Avoid extra space due to system nav bar when the keyboard is shown
val imeBottomMargin = imeInsets.bottom - navBarInsets.bottom val imeBottomMargin = imeInsets.bottom - navBarInsets.bottom
lp.bottomMargin = if(imeVisible && imeBottomMargin >= existingBottomMargin) lp.bottomMargin = if (imeVisible && imeBottomMargin >= existingBottomMargin)
imeBottomMargin + existingBottomMargin imeBottomMargin + existingBottomMargin
else existingBottomMargin else existingBottomMargin
layoutParams = lp layoutParams = lp
return WindowInsetsCompat.CONSUMED
WindowInsetsCompat.CONSUMED
} }
}
)
} }
/** /**