From 2811b181b7c2748020ef4c4d8edd45adec66dd30 Mon Sep 17 00:00:00 2001 From: Rohit Verma <101377978+rohit9625@users.noreply.github.com> Date: Sun, 7 Sep 2025 00:35:47 +0530 Subject: [PATCH] Fix: enable H/W acceleration for UploadActivity to resolve keyboard not showing on Upload Screen (#6418) * fix: enable h/w acceleration for UploadActivity to resolve ime issue * fix(upload): handle keyboard insets for bottom buttons at Depicts step * fix(upload): handle keyboard insets for buttons at select category step * fix(upload): hide keyboard before navigating to Media License screen This solves keyboard opened at the License screen issue, if we proceed by pressing next at the Upload Categories screen when the keyboard is opened --- app/src/main/AndroidManifest.xml | 1 - .../free/nrw/commons/upload/UploadActivity.kt | 14 +++++ .../categories/UploadCategoriesFragment.kt | 2 + .../commons/upload/depicts/DepictsFragment.kt | 2 + .../res/layout/upload_categories_fragment.xml | 5 +- .../res/layout/upload_depicts_fragment.xml | 57 +++++++++---------- app/src/main/res/values/dimens.xml | 3 + 7 files changed, 51 insertions(+), 33 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d56a874b5..e8215bd90 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -101,7 +101,6 @@ android:name=".upload.UploadActivity" android:configChanges="orientation|screenSize|keyboard" android:exported="true" - android:hardwareAccelerated="false" android:icon="@mipmap/ic_launcher" android:windowSoftInputMode="adjustResize"> diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt index 74597bc14..c2bed5fff 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt @@ -13,6 +13,7 @@ import android.os.Build.VERSION_CODES import android.os.Bundle import android.provider.Settings import android.view.View +import android.view.inputmethod.InputMethodManager import android.widget.CheckBox import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AlertDialog @@ -805,6 +806,19 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C override fun onNextButtonClicked(index: Int) { if (index < fragments!!.size - 1) { + // Hide the keyboard before navigating to Media License screen + val isUploadCategoriesFragment = fragments!!.getOrNull(index)?.let { + it is UploadCategoriesFragment + } ?: false + if (isUploadCategoriesFragment) { + val inputMethodManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager + currentFocus?.let { focusedView -> + inputMethodManager.hideSoftInputFromWindow( + focusedView.windowToken, + InputMethodManager.HIDE_NOT_ALWAYS + ) + } + } binding.vpUpload.setCurrentItem(index + 1, false) fragments!![index + 1].onBecameVisible() (binding.rvThumbnails.layoutManager as LinearLayoutManager) 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 262013045..798ab74fe 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 @@ -26,6 +26,7 @@ import fr.free.nrw.commons.media.MediaDetailFragment import fr.free.nrw.commons.upload.UploadActivity import fr.free.nrw.commons.upload.UploadBaseFragment import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog +import fr.free.nrw.commons.utils.handleKeyboardInsets import fr.free.nrw.commons.wikidata.WikidataConstants.SELECTED_NEARBY_PLACE_CATEGORY import io.reactivex.Notification import io.reactivex.android.schedulers.AndroidSchedulers @@ -69,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 39bcabb46..484750410 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 @@ -27,6 +27,7 @@ import fr.free.nrw.commons.upload.UploadActivity import fr.free.nrw.commons.upload.UploadBaseFragment import fr.free.nrw.commons.upload.structure.depictions.DepictedItem import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog +import fr.free.nrw.commons.utils.handleKeyboardInsets import fr.free.nrw.commons.wikidata.WikidataConstants.SELECTED_NEARBY_PLACE import io.reactivex.Notification import io.reactivex.android.schedulers.AndroidSchedulers @@ -69,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/res/layout/upload_categories_fragment.xml b/app/src/main/res/layout/upload_categories_fragment.xml index fb70f39a1..6ded4af87 100644 --- a/app/src/main/res/layout/upload_categories_fragment.xml +++ b/app/src/main/res/layout/upload_categories_fragment.xml @@ -5,13 +5,13 @@ android:id="@+id/rl_container_categories" android:layout_width="match_parent" android:layout_height="match_parent" - android:padding="@dimen/standard_gap" android:background="?attr/mainBackground" > diff --git a/app/src/main/res/layout/upload_depicts_fragment.xml b/app/src/main/res/layout/upload_depicts_fragment.xml index 9fa621396..a1b85666c 100644 --- a/app/src/main/res/layout/upload_depicts_fragment.xml +++ b/app/src/main/res/layout/upload_depicts_fragment.xml @@ -124,38 +124,35 @@ + android:id="@+id/button_divider" + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_above="@+id/navigation_buttons_container" + android:background="@color/divider_grey" /> -