Skip to content

Commit 2811b18

Browse files
authored
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
1 parent 730f314 commit 2811b18

File tree

7 files changed

+51
-33
lines changed

7 files changed

+51
-33
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@
101101
android:name=".upload.UploadActivity"
102102
android:configChanges="orientation|screenSize|keyboard"
103103
android:exported="true"
104-
android:hardwareAccelerated="false"
105104
android:icon="@mipmap/ic_launcher"
106105
android:windowSoftInputMode="adjustResize">
107106
<intent-filter android:label="@string/intent_share_upload_label">

app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import android.os.Build.VERSION_CODES
1313
import android.os.Bundle
1414
import android.provider.Settings
1515
import android.view.View
16+
import android.view.inputmethod.InputMethodManager
1617
import android.widget.CheckBox
1718
import androidx.activity.OnBackPressedCallback
1819
import androidx.appcompat.app.AlertDialog
@@ -805,6 +806,19 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C
805806

806807
override fun onNextButtonClicked(index: Int) {
807808
if (index < fragments!!.size - 1) {
809+
// Hide the keyboard before navigating to Media License screen
810+
val isUploadCategoriesFragment = fragments!!.getOrNull(index)?.let {
811+
it is UploadCategoriesFragment
812+
} ?: false
813+
if (isUploadCategoriesFragment) {
814+
val inputMethodManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
815+
currentFocus?.let { focusedView ->
816+
inputMethodManager.hideSoftInputFromWindow(
817+
focusedView.windowToken,
818+
InputMethodManager.HIDE_NOT_ALWAYS
819+
)
820+
}
821+
}
808822
binding.vpUpload.setCurrentItem(index + 1, false)
809823
fragments!![index + 1].onBecameVisible()
810824
(binding.rvThumbnails.layoutManager as LinearLayoutManager)

app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoriesFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import fr.free.nrw.commons.media.MediaDetailFragment
2626
import fr.free.nrw.commons.upload.UploadActivity
2727
import fr.free.nrw.commons.upload.UploadBaseFragment
2828
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
29+
import fr.free.nrw.commons.utils.handleKeyboardInsets
2930
import fr.free.nrw.commons.wikidata.WikidataConstants.SELECTED_NEARBY_PLACE_CATEGORY
3031
import io.reactivex.Notification
3132
import io.reactivex.android.schedulers.AndroidSchedulers
@@ -69,6 +70,7 @@ class UploadCategoriesFragment : UploadBaseFragment(), CategoriesContract.View {
6970
savedInstanceState: Bundle?
7071
): View? {
7172
binding = UploadCategoriesFragmentBinding.inflate(inflater, container, false)
73+
binding!!.llContainerButtons.handleKeyboardInsets()
7274
return binding!!.root
7375
}
7476

app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import fr.free.nrw.commons.upload.UploadActivity
2727
import fr.free.nrw.commons.upload.UploadBaseFragment
2828
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
2929
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
30+
import fr.free.nrw.commons.utils.handleKeyboardInsets
3031
import fr.free.nrw.commons.wikidata.WikidataConstants.SELECTED_NEARBY_PLACE
3132
import io.reactivex.Notification
3233
import io.reactivex.android.schedulers.AndroidSchedulers
@@ -69,6 +70,7 @@ class DepictsFragment : UploadBaseFragment(), DepictsContract.View {
6970
savedInstanceState: Bundle?
7071
): View {
7172
_binding = UploadDepictsFragmentBinding.inflate(inflater, container, false)
73+
_binding!!.navigationButtonsContainer.handleKeyboardInsets()
7274
return binding.root
7375
}
7476

app/src/main/res/layout/upload_categories_fragment.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
android:id="@+id/rl_container_categories"
66
android:layout_width="match_parent"
77
android:layout_height="match_parent"
8-
android:padding="@dimen/standard_gap"
98
android:background="?attr/mainBackground"
109
>
1110
<LinearLayout
1211
android:layout_width="match_parent"
1312
android:layout_height="match_parent"
1413
android:layout_above="@+id/button_divider"
14+
android:padding="@dimen/medium_padding"
1515
android:orientation="vertical">
1616
<LinearLayout
1717
android:layout_width="wrap_content"
@@ -110,7 +110,8 @@
110110
android:layout_width="match_parent"
111111
android:layout_height="wrap_content"
112112
android:layout_alignParentBottom="true"
113-
android:padding="@dimen/standard_gap"
113+
android:paddingVertical="@dimen/small_padding"
114+
android:paddingHorizontal="@dimen/large_padding"
114115
android:orientation="horizontal"
115116
>
116117

app/src/main/res/layout/upload_depicts_fragment.xml

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -124,38 +124,35 @@
124124
</LinearLayout>
125125

126126
<View
127-
android:id="@+id/button_divider"
128-
android:layout_width="match_parent"
129-
android:layout_height="1dp"
130-
android:layout_above="@+id/depicts_next"
131-
android:background="@color/divider_grey" />
127+
android:id="@+id/button_divider"
128+
android:layout_width="match_parent"
129+
android:layout_height="1dp"
130+
android:layout_above="@+id/navigation_buttons_container"
131+
android:background="@color/divider_grey" />
132132

133-
<Button
134-
android:id="@+id/depicts_next"
135-
android:layout_width="wrap_content"
136-
android:layout_height="wrap_content"
137-
android:layout_alignParentEnd="true"
138-
android:layout_alignParentRight="true"
139-
android:layout_alignParentBottom="true"
140-
android:layout_marginEnd="24dp"
141-
android:layout_marginRight="24dp"
142-
android:layout_marginBottom="24dp"
143-
android:contentDescription="@string/next"
144-
android:text="@string/next"
145-
android:textColor="@android:color/white" />
146-
147-
<Button
148-
android:id="@+id/depicts_previous"
149-
style="@style/Widget.AppCompat.Button.Borderless"
150-
android:layout_width="wrap_content"
133+
<LinearLayout
134+
android:id="@+id/navigation_buttons_container"
135+
android:layout_width="match_parent"
151136
android:layout_height="wrap_content"
137+
android:paddingHorizontal="@dimen/medium_padding"
138+
android:paddingVertical="@dimen/small_padding"
152139
android:layout_alignParentBottom="true"
153-
android:layout_marginEnd="@dimen/standard_gap"
154-
android:layout_marginRight="@dimen/standard_gap"
155-
android:layout_marginBottom="24dp"
156-
android:layout_toStartOf="@id/depicts_next"
157-
android:layout_toLeftOf="@id/depicts_next"
158-
android:contentDescription="@string/previous"
159-
android:text="@string/previous" />
140+
android:gravity="end">
141+
<Button
142+
android:id="@+id/depicts_previous"
143+
style="@style/Widget.AppCompat.Button.Borderless"
144+
android:layout_width="wrap_content"
145+
android:layout_height="wrap_content"
146+
android:layout_marginEnd="@dimen/standard_gap"
147+
android:contentDescription="@string/previous"
148+
android:text="@string/previous" />
160149

150+
<Button
151+
android:id="@+id/depicts_next"
152+
android:layout_width="wrap_content"
153+
android:layout_height="wrap_content"
154+
android:contentDescription="@string/next"
155+
android:text="@string/next"
156+
android:textColor="@android:color/white" />
157+
</LinearLayout>
161158
</RelativeLayout>

app/src/main/res/values/dimens.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
<dimen name="achievements_activity_margin_vertical">8dp</dimen>
88
<dimen name="medium_height">12dp</dimen>
99
<dimen name="medium_width">12dp</dimen>
10+
<dimen name="small_padding">8dp</dimen>
11+
<dimen name="medium_padding">16dp</dimen>
12+
<dimen name="large_padding">24dp</dimen>
1013

1114
<!-- Standard margins / padding -->
1215
<dimen name="login_padding">30dp</dimen>

0 commit comments

Comments
 (0)