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;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.os.Looper;
import android.text.InputType;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.TextView;
import org.tasks.BuildConfig;
@ -200,33 +196,6 @@ public class AndroidUtilities {
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> {
void put(T object, String key, char type, String value) throws NumberFormatException;

@ -5,11 +5,9 @@
*/
package com.todoroo.astrid.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.view.inputmethod.InputMethodManager
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode
import androidx.lifecycle.lifecycleScope
@ -42,6 +40,7 @@ import org.tasks.data.TagDataDao
import org.tasks.databinding.TaskListActivityBinding
import org.tasks.dialogs.WhatsNewDialog
import org.tasks.extensions.Context.nightMode
import org.tasks.extensions.hideKeyboard
import org.tasks.filters.PlaceFilter
import org.tasks.intents.TaskIntents.getTaskListIntent
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) {
super.onSupportActionModeStarted(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.Behavior.DragCallback
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.Filter
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.setFilterPickerResultListener
import org.tasks.dialogs.Linkify
import org.tasks.extensions.hideKeyboard
import org.tasks.files.FileHelper
import org.tasks.fragments.TaskEditControlSetFragmentManager
import org.tasks.fragments.TaskEditControlSetFragmentManager.Companion.TAG_CREATION
@ -360,7 +360,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
}
override fun onMenuItemClick(item: MenuItem): Boolean {
AndroidUtilities.hideKeyboard(activity)
activity?.hideKeyboard()
if (item.itemId == R.id.menu_delete) {
deleteButtonClick()
return true

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

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

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

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

@ -26,6 +26,7 @@ import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavCalendar
import org.tasks.data.CaldavDao
import org.tasks.databinding.ActivityCaldavCalendarSettingsBinding
import org.tasks.extensions.Context.hideKeyboard
import org.tasks.themes.CustomIcons
import org.tasks.ui.DisplayableException
import java.net.ConnectException
@ -200,8 +201,7 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() {
get() = name.text.toString().trim { it <= ' ' }
override fun finish() {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(name.windowToken, 0)
hideKeyboard(name)
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.res.Configuration
import android.net.Uri
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.Toast
import androidx.annotation.AnyRes
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
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.databinding.FragmentCommentBarBinding
import org.tasks.dialogs.DialogBuilder
import org.tasks.extensions.Context.hideKeyboard
import org.tasks.files.ImageHelper
import org.tasks.preferences.Device
import org.tasks.preferences.Preferences
@ -148,7 +149,7 @@ class CommentBarFragment : Fragment() {
private fun addComment() {
addComment(commentField.text.toString())
AndroidUtilities.hideSoftInputForViews(activity, commentField)
activity.hideKeyboard(commentField)
}
private fun setPictureButtonToPendingPicture() {

@ -1,9 +1,12 @@
package org.tasks.locale.ui.activity;
import static org.tasks.extensions.ActivityExtensionsKt.hideKeyboard;
import android.content.Intent;
import android.os.Bundle;
import com.todoroo.andlib.utility.AndroidUtilities;
import org.tasks.injection.ThemedInjectingAppCompatActivity;
import timber.log.Timber;
public abstract class AbstractFragmentPluginAppCompatActivity
@ -49,7 +52,7 @@ public abstract class AbstractFragmentPluginAppCompatActivity
@Override
public void finish() {
AndroidUtilities.hideKeyboard(this);
hideKeyboard(this);
if (isLocalePluginIntent(getIntent())) {
if (!mIsCancelled) {
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.Behavior.DragCallback
import com.google.android.material.appbar.CollapsingToolbarLayout
import com.todoroo.andlib.utility.AndroidUtilities
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
@ -39,6 +38,7 @@ import org.tasks.data.PlaceUsage
import org.tasks.databinding.ActivityLocationPickerBinding
import org.tasks.dialogs.DialogBuilder
import org.tasks.extensions.Context.toast
import org.tasks.extensions.hideKeyboard
import org.tasks.extensions.setOnQueryTextListener
import org.tasks.location.LocationPickerAdapter.OnLocationPicked
import org.tasks.location.LocationSearchAdapter.OnPredictionPicked
@ -139,7 +139,7 @@ class LocationPickerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListe
appBarLayout.addOnOffsetChangedListener { appBarLayout: AppBarLayout, offset: Int ->
if (offset == 0 && this.offset != 0) {
closeSearch()
AndroidUtilities.hideKeyboard(this)
hideKeyboard()
}
this.offset = offset
toolbar.alpha = abs(offset / appBarLayout.totalScrollRange.toFloat())
@ -267,7 +267,7 @@ class LocationPickerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListe
Timber.e("Place is null")
return
}
AndroidUtilities.hideKeyboard(this)
hideKeyboard()
lifecycleScope.launch {
var place = place
if (place.id <= 0) {

Loading…
Cancel
Save