Add hideKeyboard extension methods

pull/2533/head
Alex Baker 9 months ago
parent c2a9d21f01
commit f8d3985e97

@ -6,16 +6,12 @@
package com.todoroo.andlib.utility; package com.todoroo.andlib.utility;
import android.app.Activity;
import android.content.Context;
import android.os.Build; import android.os.Build;
import android.os.Build.VERSION; import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES; import android.os.Build.VERSION_CODES;
import android.os.Looper; import android.os.Looper;
import android.text.InputType; import android.text.InputType;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.TextView; import android.widget.TextView;
import org.tasks.BuildConfig; import org.tasks.BuildConfig;
@ -200,33 +196,6 @@ public class AndroidUtilities {
return string.substring(0, 1).toUpperCase() + string.substring(1); return string.substring(0, 1).toUpperCase() + string.substring(1);
} }
public static void hideKeyboard(Activity activity) {
try {
View currentFocus = activity.getCurrentFocus();
if (currentFocus != null) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0);
currentFocus.clearFocus();
}
} catch (Exception e) {
Timber.e(e);
}
}
/**
* Dismiss the keyboard if it is displayed by any of the listed views
*
* @param views - a list of views that might potentially be displaying the keyboard
*/
public static void hideSoftInputForViews(Context context, View... views) {
InputMethodManager imm =
(InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
for (View v : views) {
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
interface SerializedPut<T> { interface SerializedPut<T> {
void put(T object, String key, char type, String value) throws NumberFormatException; void put(T object, String key, char type, String value) throws NumberFormatException;

@ -5,11 +5,9 @@
*/ */
package com.todoroo.astrid.activity package com.todoroo.astrid.activity
import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.inputmethod.InputMethodManager
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
@ -42,6 +40,7 @@ import org.tasks.data.TagDataDao
import org.tasks.databinding.TaskListActivityBinding import org.tasks.databinding.TaskListActivityBinding
import org.tasks.dialogs.WhatsNewDialog import org.tasks.dialogs.WhatsNewDialog
import org.tasks.extensions.Context.nightMode import org.tasks.extensions.Context.nightMode
import org.tasks.extensions.hideKeyboard
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.intents.TaskIntents.getTaskListIntent import org.tasks.intents.TaskIntents.getTaskListIntent
import org.tasks.location.LocationPickerActivity import org.tasks.location.LocationPickerActivity
@ -413,14 +412,6 @@ class MainActivity : AppCompatActivity(), TaskListFragmentCallbackHandler, Timer
} }
} }
private fun hideKeyboard() {
val view = currentFocus
if (view != null) {
val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
}
}
override fun onSupportActionModeStarted(mode: ActionMode) { override fun onSupportActionModeStarted(mode: ActionMode) {
super.onSupportActionModeStarted(mode) super.onSupportActionModeStarted(mode)
actionMode = mode actionMode = mode

@ -43,7 +43,6 @@ import androidx.lifecycle.lifecycleScope
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.AppBarLayout.Behavior.DragCallback import com.google.android.material.appbar.AppBarLayout.Behavior.DragCallback
import com.google.android.material.composethemeadapter.MdcTheme import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
@ -92,6 +91,7 @@ import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener
import org.tasks.dialogs.Linkify import org.tasks.dialogs.Linkify
import org.tasks.extensions.hideKeyboard
import org.tasks.files.FileHelper import org.tasks.files.FileHelper
import org.tasks.fragments.TaskEditControlSetFragmentManager import org.tasks.fragments.TaskEditControlSetFragmentManager
import org.tasks.fragments.TaskEditControlSetFragmentManager.Companion.TAG_CREATION import org.tasks.fragments.TaskEditControlSetFragmentManager.Companion.TAG_CREATION
@ -360,7 +360,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
} }
override fun onMenuItemClick(item: MenuItem): Boolean { override fun onMenuItemClick(item: MenuItem): Boolean {
AndroidUtilities.hideKeyboard(activity) activity?.hideKeyboard()
if (item.itemId == R.id.menu_delete) { if (item.itemId == R.id.menu_delete) {
deleteButtonClick() deleteButtonClick()
return true return true

@ -1,12 +1,10 @@
package org.tasks.activities package org.tasks.activities
import android.app.Activity import android.app.Activity
import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
import android.view.inputmethod.InputMethodManager
import android.widget.EditText import android.widget.EditText
import android.widget.FrameLayout import android.widget.FrameLayout
import androidx.core.widget.addTextChangedListener import androidx.core.widget.addTextChangedListener
@ -44,7 +42,9 @@ import org.tasks.data.FilterDao
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.databinding.FilterSettingsActivityBinding import org.tasks.databinding.FilterSettingsActivityBinding
import org.tasks.db.QueryUtils import org.tasks.db.QueryUtils
import org.tasks.extensions.Context.hideKeyboard
import org.tasks.extensions.Context.openUri import org.tasks.extensions.Context.openUri
import org.tasks.extensions.hideKeyboard
import org.tasks.filters.FilterCriteriaProvider import org.tasks.filters.FilterCriteriaProvider
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
import java.util.Locale import java.util.Locale
@ -164,7 +164,7 @@ class FilterSettingsActivity : BaseListSettingsActivity() {
} }
private fun addCriteria() { private fun addCriteria() {
AndroidUtilities.hideKeyboard(this) hideKeyboard()
fab.shrink() fab.shrink()
lifecycleScope.launch { lifecycleScope.launch {
val all = filterCriteriaProvider.all() val all = filterCriteriaProvider.all()
@ -280,8 +280,7 @@ class FilterSettingsActivity : BaseListSettingsActivity() {
} }
override fun finish() { override fun finish() {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager hideKeyboard(name)
imm.hideSoftInputFromWindow(name.windowToken, 0)
super.finish() super.finish()
} }

@ -25,6 +25,7 @@ import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavCalendar import org.tasks.data.CaldavCalendar
import org.tasks.data.GoogleTaskListDao import org.tasks.data.GoogleTaskListDao
import org.tasks.databinding.ActivityGoogleTaskListSettingsBinding import org.tasks.databinding.ActivityGoogleTaskListSettingsBinding
import org.tasks.extensions.Context.hideKeyboard
import org.tasks.extensions.Context.toast import org.tasks.extensions.Context.toast
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
import timber.log.Timber import timber.log.Timber
@ -125,8 +126,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
} }
override fun finish() { override fun finish() {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager hideKeyboard(name)
imm.hideSoftInputFromWindow(name.windowToken, 0)
super.finish() super.finish()
} }

@ -24,6 +24,7 @@ import org.tasks.data.TagDao
import org.tasks.data.TagData import org.tasks.data.TagData
import org.tasks.data.TagDataDao import org.tasks.data.TagDataDao
import org.tasks.databinding.ActivityTagSettingsBinding import org.tasks.databinding.ActivityTagSettingsBinding
import org.tasks.extensions.Context.hideKeyboard
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
import javax.inject.Inject import javax.inject.Inject
@ -118,8 +119,7 @@ class TagSettingsActivity : BaseListSettingsActivity() {
} }
override fun finish() { override fun finish() {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager hideKeyboard(name)
imm.hideSoftInputFromWindow(name.windowToken, 0)
super.finish() super.finish()
} }

@ -42,6 +42,7 @@ import org.tasks.databinding.ActivityCaldavAccountSettingsBinding
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.Linkify import org.tasks.dialogs.Linkify
import org.tasks.extensions.Context.cookiePersistor import org.tasks.extensions.Context.cookiePersistor
import org.tasks.extensions.Context.hideKeyboard
import org.tasks.extensions.Context.openUri import org.tasks.extensions.Context.openUri
import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.injection.ThemedInjectingAppCompatActivity
import org.tasks.security.KeyStoreEncryption import org.tasks.security.KeyStoreEncryption
@ -327,8 +328,7 @@ abstract class BaseCaldavAccountSettingsActivity : ThemedInjectingAppCompatActiv
override fun finish() { override fun finish() {
if (!requestInProgress()) { if (!requestInProgress()) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager hideKeyboard(binding.name)
imm.hideSoftInputFromWindow(binding.name.windowToken, 0)
super.finish() super.finish()
} }
} }

@ -26,6 +26,7 @@ import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavCalendar import org.tasks.data.CaldavCalendar
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDao
import org.tasks.databinding.ActivityCaldavCalendarSettingsBinding import org.tasks.databinding.ActivityCaldavCalendarSettingsBinding
import org.tasks.extensions.Context.hideKeyboard
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
import org.tasks.ui.DisplayableException import org.tasks.ui.DisplayableException
import java.net.ConnectException import java.net.ConnectException
@ -200,8 +201,7 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() {
get() = name.text.toString().trim { it <= ' ' } get() = name.text.toString().trim { it <= ' ' }
override fun finish() { override fun finish() {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager hideKeyboard(name)
imm.hideSoftInputFromWindow(name.windowToken, 0)
super.finish() super.finish()
} }

@ -0,0 +1,10 @@
package org.tasks.extensions
import android.app.Activity
import org.tasks.extensions.Context.hideKeyboard
fun Activity.hideKeyboard() {
currentFocus?.let {
hideKeyboard(it)
}
}

@ -8,6 +8,8 @@ import android.content.Intent
import android.content.Intent.ACTION_VIEW import android.content.Intent.ACTION_VIEW
import android.content.res.Configuration import android.content.res.Configuration
import android.net.Uri import android.net.Uri
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.Toast import android.widget.Toast
import androidx.annotation.AnyRes import androidx.annotation.AnyRes
import androidx.browser.customtabs.CustomTabsIntent import androidx.browser.customtabs.CustomTabsIntent
@ -26,6 +28,12 @@ object Context {
} }
} }
fun Context.hideKeyboard(view: View) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
view.clearFocus()
}
val Context.nightMode: Int val Context.nightMode: Int
get() = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK get() = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK

@ -24,6 +24,7 @@ import org.tasks.Strings.isNullOrEmpty
import org.tasks.activities.CameraActivity import org.tasks.activities.CameraActivity
import org.tasks.databinding.FragmentCommentBarBinding import org.tasks.databinding.FragmentCommentBarBinding
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.extensions.Context.hideKeyboard
import org.tasks.files.ImageHelper import org.tasks.files.ImageHelper
import org.tasks.preferences.Device import org.tasks.preferences.Device
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -148,7 +149,7 @@ class CommentBarFragment : Fragment() {
private fun addComment() { private fun addComment() {
addComment(commentField.text.toString()) addComment(commentField.text.toString())
AndroidUtilities.hideSoftInputForViews(activity, commentField) activity.hideKeyboard(commentField)
} }
private fun setPictureButtonToPendingPicture() { private fun setPictureButtonToPendingPicture() {

@ -1,9 +1,12 @@
package org.tasks.locale.ui.activity; package org.tasks.locale.ui.activity;
import static org.tasks.extensions.ActivityExtensionsKt.hideKeyboard;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import com.todoroo.andlib.utility.AndroidUtilities;
import org.tasks.injection.ThemedInjectingAppCompatActivity; import org.tasks.injection.ThemedInjectingAppCompatActivity;
import timber.log.Timber; import timber.log.Timber;
public abstract class AbstractFragmentPluginAppCompatActivity public abstract class AbstractFragmentPluginAppCompatActivity
@ -49,7 +52,7 @@ public abstract class AbstractFragmentPluginAppCompatActivity
@Override @Override
public void finish() { public void finish() {
AndroidUtilities.hideKeyboard(this); hideKeyboard(this);
if (isLocalePluginIntent(getIntent())) { if (isLocalePluginIntent(getIntent())) {
if (!mIsCancelled) { if (!mIsCancelled) {
final Bundle resultBundle = getResultBundle(); final Bundle resultBundle = getResultBundle();

@ -20,7 +20,6 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.AppBarLayout.Behavior.DragCallback import com.google.android.material.appbar.AppBarLayout.Behavior.DragCallback
import com.google.android.material.appbar.CollapsingToolbarLayout import com.google.android.material.appbar.CollapsingToolbarLayout
import com.todoroo.andlib.utility.AndroidUtilities
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@ -39,6 +38,7 @@ import org.tasks.data.PlaceUsage
import org.tasks.databinding.ActivityLocationPickerBinding import org.tasks.databinding.ActivityLocationPickerBinding
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.extensions.Context.toast import org.tasks.extensions.Context.toast
import org.tasks.extensions.hideKeyboard
import org.tasks.extensions.setOnQueryTextListener import org.tasks.extensions.setOnQueryTextListener
import org.tasks.location.LocationPickerAdapter.OnLocationPicked import org.tasks.location.LocationPickerAdapter.OnLocationPicked
import org.tasks.location.LocationSearchAdapter.OnPredictionPicked import org.tasks.location.LocationSearchAdapter.OnPredictionPicked
@ -139,7 +139,7 @@ class LocationPickerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListe
appBarLayout.addOnOffsetChangedListener { appBarLayout: AppBarLayout, offset: Int -> appBarLayout.addOnOffsetChangedListener { appBarLayout: AppBarLayout, offset: Int ->
if (offset == 0 && this.offset != 0) { if (offset == 0 && this.offset != 0) {
closeSearch() closeSearch()
AndroidUtilities.hideKeyboard(this) hideKeyboard()
} }
this.offset = offset this.offset = offset
toolbar.alpha = abs(offset / appBarLayout.totalScrollRange.toFloat()) toolbar.alpha = abs(offset / appBarLayout.totalScrollRange.toFloat())
@ -267,7 +267,7 @@ class LocationPickerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListe
Timber.e("Place is null") Timber.e("Place is null")
return return
} }
AndroidUtilities.hideKeyboard(this) hideKeyboard()
lifecycleScope.launch { lifecycleScope.launch {
var place = place var place = place
if (place.id <= 0) { if (place.id <= 0) {

Loading…
Cancel
Save