From bf0067a76cf35e278f5db31357e19acbd1375564 Mon Sep 17 00:00:00 2001 From: Meghna Gupta Date: Sun, 18 Feb 2018 21:09:33 +0530 Subject: [PATCH 1/5] Hide Keypad when EditText out of focus --- .../free/nrw/commons/auth/LoginActivity.java | 23 ++++++++++ .../category/CategorizationFragment.java | 46 +++++++++++++++++++ .../upload/MultipleUploadListFragment.java | 15 ++++++ app/src/main/res/layout/activity_login.xml | 6 ++- .../res/layout/fragment_categorization.xml | 4 ++ .../layout/fragment_multiple_uploads_list.xml | 2 + 6 files changed, 95 insertions(+), 1 deletion(-) 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..45ba353f07 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,14 @@ public void onCreate(Bundle savedInstanceState) { signupButton.setOnClickListener(view -> signUp()); } + + public void hideKeyboard(View view) { + Log.i("hide", "hideKeyboard: "); + 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..37a63dadd2 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,19 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, return rootView; } + public void hideKeyboard(View view) { + Log.i("hide", "hideKeyboard: "); + 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 +380,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..4797299af0 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,22 @@ 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) { + Log.i("hide", "hideKeyboard: "); + 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..760b7a388f 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -19,6 +19,8 @@ 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"> @@ -26,7 +28,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" - android:orientation="vertical"> + android:orientation="vertical" + android:clickable="true" + android:focusableInTouchMode="true"> Date: Sun, 18 Feb 2018 21:58:05 +0530 Subject: [PATCH 2/5] Log statement removed --- app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java | 1 - 1 file changed, 1 deletion(-) 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 45ba353f07..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 @@ -116,7 +116,6 @@ public void onCreate(Bundle savedInstanceState) { public void hideKeyboard(View view) { - Log.i("hide", "hideKeyboard: "); InputMethodManager inputMethodManager =(InputMethodManager)this.getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } From 667591d04e037d1fff749a0ffe6678a3c21b7ab8 Mon Sep 17 00:00:00 2001 From: Meghna Gupta Date: Sun, 18 Feb 2018 21:58:36 +0530 Subject: [PATCH 3/5] Log statement removed --- .../fr/free/nrw/commons/category/CategorizationFragment.java | 1 - 1 file changed, 1 deletion(-) 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 37a63dadd2..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 @@ -127,7 +127,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, } public void hideKeyboard(View view) { - Log.i("hide", "hideKeyboard: "); InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } From dac7a7dc09ea5f80ea7ee4d716511fbfd9adf1af Mon Sep 17 00:00:00 2001 From: Meghna Gupta Date: Sun, 18 Feb 2018 21:59:34 +0530 Subject: [PATCH 4/5] Log statement removed --- .../fr/free/nrw/commons/upload/MultipleUploadListFragment.java | 1 - 1 file changed, 1 deletion(-) 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 4797299af0..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 @@ -190,7 +190,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa } public void hideKeyboard(View view) { - Log.i("hide", "hideKeyboard: "); InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } From 4bb6e9b35e95070f177d35837e1d49710a15ffa0 Mon Sep 17 00:00:00 2001 From: Meghna Gupta Date: Sun, 18 Feb 2018 22:29:15 +0530 Subject: [PATCH 5/5] Hide Keypad when EditText out of focus --- .../free/nrw/commons/auth/LoginActivity.java | 1 - .../category/CategorizationFragment.java | 1 - .../upload/MultipleUploadListFragment.java | 1 - app/src/main/res/layout/activity_login.xml | 20 +++---- .../res/layout/fragment_categorization.xml | 53 ++++++++----------- .../layout/fragment_multiple_uploads_list.xml | 1 + 6 files changed, 34 insertions(+), 43 deletions(-) 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 45ba353f07..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 @@ -116,7 +116,6 @@ public void onCreate(Bundle savedInstanceState) { public void hideKeyboard(View view) { - Log.i("hide", "hideKeyboard: "); InputMethodManager inputMethodManager =(InputMethodManager)this.getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } 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 37a63dadd2..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 @@ -127,7 +127,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, } public void hideKeyboard(View view) { - Log.i("hide", "hideKeyboard: "); InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } 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 4797299af0..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 @@ -190,7 +190,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa } public void hideKeyboard(View view) { - Log.i("hide", "hideKeyboard: "); InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 760b7a388f..15d4c099d7 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -27,10 +27,10 @@ + android:focusableInTouchMode="true" + android:gravity="center" + android:orientation="vertical">