diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java
index 3e90fbf5e3..b771e8c1dd 100644
--- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java
@@ -4,6 +4,7 @@
import android.accounts.AccountAuthenticatorActivity;
import android.accounts.AccountAuthenticatorResponse;
import android.accounts.AccountManager;
+import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -17,10 +18,12 @@
import android.support.v7.app.AppCompatDelegate;
import android.text.Editable;
import android.text.TextWatcher;
+import android.util.Log;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
@@ -91,7 +94,19 @@ public void onCreate(Bundle savedInstanceState) {
ButterKnife.bind(this);
usernameEdit.addTextChangedListener(textWatcher);
+ usernameEdit.setOnFocusChangeListener((v, hasFocus) -> {
+ if (!hasFocus) {
+ hideKeyboard(v);
+ }
+ });
+
passwordEdit.addTextChangedListener(textWatcher);
+ passwordEdit.setOnFocusChangeListener((v, hasFocus) -> {
+ if (!hasFocus) {
+ hideKeyboard(v);
+ }
+ });
+
twoFactorEdit.addTextChangedListener(textWatcher);
passwordEdit.setOnEditorActionListener(newLoginInputActionListener());
@@ -99,6 +114,13 @@ public void onCreate(Bundle savedInstanceState) {
signupButton.setOnClickListener(view -> signUp());
}
+
+ public void hideKeyboard(View view) {
+ InputMethodManager inputMethodManager =(InputMethodManager)this.getSystemService(Activity.INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ }
+
+
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java
index 7c2e910c40..c826013f00 100644
--- a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java
@@ -1,17 +1,22 @@
package fr.free.nrw.commons.category;
+import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
@@ -37,6 +42,7 @@
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.upload.MwVolleyApi;
+import fr.free.nrw.commons.upload.SingleUploadFragment;
import fr.free.nrw.commons.utils.StringSortingUtils;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -72,6 +78,7 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment {
private OnCategoriesSaveHandler onCategoriesSaveHandler;
private HashMap> categoriesCache;
private List selectedCategories = new ArrayList<>();
+ private TitleTextWatcher textWatcher = new TitleTextWatcher();
private final CategoriesAdapterFactory adapterFactory = new CategoriesAdapterFactory(item -> {
if (item.isSelected()) {
@@ -102,6 +109,15 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
categoriesAdapter = adapterFactory.create(items);
categoriesList.setAdapter(categoriesAdapter);
+
+ categoriesFilter.addTextChangedListener(textWatcher);
+
+ categoriesFilter.setOnFocusChangeListener((v, hasFocus) -> {
+ if (!hasFocus) {
+ hideKeyboard(v);
+ }
+ });
+
RxTextView.textChanges(categoriesFilter)
.takeUntil(RxView.detaches(categoriesFilter))
.debounce(500, TimeUnit.MILLISECONDS)
@@ -110,6 +126,18 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
return rootView;
}
+ public void hideKeyboard(View view) {
+ InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ }
+
+ @Override
+ public void onDestroyView() {
+ categoriesFilter.removeTextChangedListener(textWatcher);
+ super.onDestroyView();
+ }
+
+
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
@@ -351,4 +379,21 @@ private void showConfirmationDialog() {
.create()
.show();
}
+
+ private class TitleTextWatcher implements TextWatcher {
+ @Override
+ public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
+ }
+
+ @Override
+ public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
+ }
+
+ @Override
+ public void afterTextChanged(Editable editable) {
+ if (getActivity() != null) {
+ getActivity().invalidateOptionsMenu();
+ }
+ }
+ }
}
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java
index 0b6e527e58..5b39b92f7c 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java
@@ -1,5 +1,6 @@
package fr.free.nrw.commons.upload;
+import android.app.Activity;
import android.content.Context;
import android.graphics.Point;
import android.net.Uri;
@@ -10,6 +11,7 @@
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -177,9 +179,21 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
photosGrid.setColumnWidth(photoSize.x);
baseTitle.addTextChangedListener(textWatcher);
+
+ baseTitle.setOnFocusChangeListener((v, hasFocus) -> {
+ if (!hasFocus) {
+ hideKeyboard(v);
+ }
+ });
+
return view;
}
+ public void hideKeyboard(View view) {
+ InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ }
+
@Override
public void onDestroyView() {
baseTitle.removeTextChangedListener(textWatcher);
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 278e3464f6..15d4c099d7 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -19,12 +19,16 @@
android:layout_marginRight="@dimen/standard_gap"
android:layout_marginStart="@dimen/standard_gap"
android:layout_marginTop="@dimen/large_gap"
+ android:clickable="true"
+ android:focusableInTouchMode="true"
app:cardCornerRadius="4dp"
app:cardElevation="4dp">
@@ -149,8 +153,8 @@