diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt index eb025b50f..688f508ae 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt @@ -89,6 +89,7 @@ class LoginActivity : AccountAuthenticatorActivity() { binding = ActivityLoginBinding.inflate(layoutInflater) applyEdgeToEdgeAllInsets(binding!!.root) + binding?.aboutPrivacyPolicy?.handleKeyboardInsets() with(binding!!) { setContentView(root) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoriesFragment.kt b/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoriesFragment.kt index 722a88b22..ee6af7bb6 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoriesFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoriesFragment.kt @@ -70,6 +70,7 @@ class UploadCategoriesFragment : UploadBaseFragment(), CategoriesContract.View { savedInstanceState: Bundle? ): View? { binding = UploadCategoriesFragmentBinding.inflate(inflater, container, false) + binding!!.llContainerButtons.handleKeyboardInsets() return binding!!.root } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.kt b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.kt index 2c2cf3586..5dcc2bf86 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.kt @@ -70,6 +70,7 @@ class DepictsFragment : UploadBaseFragment(), DepictsContract.View { savedInstanceState: Bundle? ): View { _binding = UploadDepictsFragmentBinding.inflate(inflater, container, false) + _binding!!.navigationButtonsContainer.handleKeyboardInsets() return binding.root } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.kt b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.kt index 331c993c9..b3b067948 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.kt @@ -146,6 +146,7 @@ class UploadMediaDetailFragment : UploadBaseFragment(), UploadMediaDetailsContra inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentUploadMediaDetailFragmentBinding.inflate(inflater, container, false) + _binding!!.mediaDetailCardView.handleKeyboardInsets() // intialise the adapter early to prevent uninitialized access uploadMediaDetailAdapter = UploadMediaDetailAdapter( this, diff --git a/app/src/main/java/fr/free/nrw/commons/utils/EdgeToEdgeUtils.kt b/app/src/main/java/fr/free/nrw/commons/utils/EdgeToEdgeUtils.kt index d0c2b12e8..a5145c24d 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/EdgeToEdgeUtils.kt +++ b/app/src/main/java/fr/free/nrw/commons/utils/EdgeToEdgeUtils.kt @@ -166,46 +166,33 @@ fun applyEdgeToEdgeBottomInsets(view: View) = view.applyEdgeToEdgeInsets { inset * and accounts for navigation bar insets to avoid double offsets. */ fun View.handleKeyboardInsets() { - var existingBottomMargin = 0 - - ViewCompat.setOnApplyWindowInsetsListener(this) { view, windowInsets -> - existingBottomMargin = if (view.getTag(R.id.initial_margin_bottom) != null) { - view.getTag(R.id.initial_margin_bottom) as Int - } else { - view.setTag(R.id.initial_margin_bottom, view.marginBottom) - view.marginBottom - } - - WindowInsetsCompat.CONSUMED + val existingBottomMargin = if (getTag(R.id.initial_margin_bottom) != null) { + getTag(R.id.initial_margin_bottom) as Int + } else { + setTag(R.id.initial_margin_bottom, marginBottom) + marginBottom } - // Animate during IME transition - ViewCompat.setWindowInsetsAnimationCallback( - this, - object : WindowInsetsAnimationCompat.Callback( - DISPATCH_MODE_CONTINUE_ON_SUBTREE - ) { - override fun onProgress( - insets: WindowInsetsCompat, - runningAnimations: MutableList - ): WindowInsetsCompat { - val lp = layoutParams as MarginLayoutParams - val navBarInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars()) - val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime()) - val imeVisible = insets.isVisible(WindowInsetsCompat.Type.ime()) + ViewCompat.setOnApplyWindowInsetsListener(this) { _, insets -> - // Avoid extra space due to system nav bar when the keyboard is shown - val imeBottomMargin = imeInsets.bottom - navBarInsets.bottom + val lp = layoutParams as MarginLayoutParams - lp.bottomMargin = if(imeVisible && imeBottomMargin >= existingBottomMargin) - imeBottomMargin + existingBottomMargin - else existingBottomMargin + val navBarInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars()) + val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime()) + val imeVisible = insets.isVisible(WindowInsetsCompat.Type.ime()) + val imeBottomMargin = imeInsets.bottom - navBarInsets.bottom + + lp.bottomMargin = if (imeVisible && imeBottomMargin >= existingBottomMargin) + imeBottomMargin + existingBottomMargin + else existingBottomMargin + + layoutParams = lp + + insets + } + + ViewCompat.requestApplyInsets(this) - layoutParams = lp - return WindowInsetsCompat.CONSUMED - } - } - ) } /**