Fix: enable H/W acceleration for UploadActivity to resolve keyboard not showing on Upload Screen (#6418)
Some checks are pending
Android CI / Run tests and generate APK (push) Waiting to run

* 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
This commit is contained in:
Rohit Verma 2025-09-07 00:35:47 +05:30 committed by GitHub
parent 730f314200
commit 2811b181b7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 51 additions and 33 deletions

View file

@ -101,7 +101,6 @@
android:name=".upload.UploadActivity" android:name=".upload.UploadActivity"
android:configChanges="orientation|screenSize|keyboard" android:configChanges="orientation|screenSize|keyboard"
android:exported="true" android:exported="true"
android:hardwareAccelerated="false"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:windowSoftInputMode="adjustResize"> android:windowSoftInputMode="adjustResize">
<intent-filter android:label="@string/intent_share_upload_label"> <intent-filter android:label="@string/intent_share_upload_label">

View file

@ -13,6 +13,7 @@ import android.os.Build.VERSION_CODES
import android.os.Bundle import android.os.Bundle
import android.provider.Settings import android.provider.Settings
import android.view.View import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.CheckBox import android.widget.CheckBox
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
@ -805,6 +806,19 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C
override fun onNextButtonClicked(index: Int) { override fun onNextButtonClicked(index: Int) {
if (index < fragments!!.size - 1) { 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) binding.vpUpload.setCurrentItem(index + 1, false)
fragments!![index + 1].onBecameVisible() fragments!![index + 1].onBecameVisible()
(binding.rvThumbnails.layoutManager as LinearLayoutManager) (binding.rvThumbnails.layoutManager as LinearLayoutManager)

View file

@ -26,6 +26,7 @@ import fr.free.nrw.commons.media.MediaDetailFragment
import fr.free.nrw.commons.upload.UploadActivity import fr.free.nrw.commons.upload.UploadActivity
import fr.free.nrw.commons.upload.UploadBaseFragment import fr.free.nrw.commons.upload.UploadBaseFragment
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog 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 fr.free.nrw.commons.wikidata.WikidataConstants.SELECTED_NEARBY_PLACE_CATEGORY
import io.reactivex.Notification import io.reactivex.Notification
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -69,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

@ -27,6 +27,7 @@ import fr.free.nrw.commons.upload.UploadActivity
import fr.free.nrw.commons.upload.UploadBaseFragment import fr.free.nrw.commons.upload.UploadBaseFragment
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog 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 fr.free.nrw.commons.wikidata.WikidataConstants.SELECTED_NEARBY_PLACE
import io.reactivex.Notification import io.reactivex.Notification
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -69,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

@ -5,13 +5,13 @@
android:id="@+id/rl_container_categories" android:id="@+id/rl_container_categories"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:padding="@dimen/standard_gap"
android:background="?attr/mainBackground" android:background="?attr/mainBackground"
> >
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_above="@+id/button_divider" android:layout_above="@+id/button_divider"
android:padding="@dimen/medium_padding"
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -110,7 +110,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:padding="@dimen/standard_gap" android:paddingVertical="@dimen/small_padding"
android:paddingHorizontal="@dimen/large_padding"
android:orientation="horizontal" android:orientation="horizontal"
> >

View file

@ -127,35 +127,32 @@
android:id="@+id/button_divider" android:id="@+id/button_divider"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
android:layout_above="@+id/depicts_next" android:layout_above="@+id/navigation_buttons_container"
android:background="@color/divider_grey" /> android:background="@color/divider_grey" />
<Button <LinearLayout
android:id="@+id/depicts_next" android:id="@+id/navigation_buttons_container"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:paddingHorizontal="@dimen/medium_padding"
android:layout_alignParentRight="true" android:paddingVertical="@dimen/small_padding"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:layout_marginEnd="24dp" android:gravity="end">
android:layout_marginRight="24dp"
android:layout_marginBottom="24dp"
android:contentDescription="@string/next"
android:text="@string/next"
android:textColor="@android:color/white" />
<Button <Button
android:id="@+id/depicts_previous" android:id="@+id/depicts_previous"
style="@style/Widget.AppCompat.Button.Borderless" style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginEnd="@dimen/standard_gap" android:layout_marginEnd="@dimen/standard_gap"
android:layout_marginRight="@dimen/standard_gap"
android:layout_marginBottom="24dp"
android:layout_toStartOf="@id/depicts_next"
android:layout_toLeftOf="@id/depicts_next"
android:contentDescription="@string/previous" android:contentDescription="@string/previous"
android:text="@string/previous" /> android:text="@string/previous" />
<Button
android:id="@+id/depicts_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/next"
android:text="@string/next"
android:textColor="@android:color/white" />
</LinearLayout>
</RelativeLayout> </RelativeLayout>

View file

@ -7,6 +7,9 @@
<dimen name="achievements_activity_margin_vertical">8dp</dimen> <dimen name="achievements_activity_margin_vertical">8dp</dimen>
<dimen name="medium_height">12dp</dimen> <dimen name="medium_height">12dp</dimen>
<dimen name="medium_width">12dp</dimen> <dimen name="medium_width">12dp</dimen>
<dimen name="small_padding">8dp</dimen>
<dimen name="medium_padding">16dp</dimen>
<dimen name="large_padding">24dp</dimen>
<!-- Standard margins / padding --> <!-- Standard margins / padding -->
<dimen name="login_padding">30dp</dimen> <dimen name="login_padding">30dp</dimen>