Improved text setting

This commit is contained in:
Sylvain Berfini 2021-12-07 13:42:14 +01:00
parent fe9f9cbecc
commit b87cd8ad5b
3 changed files with 77 additions and 2 deletions

View file

@ -19,6 +19,7 @@
*/ */
package org.linphone.utils package org.linphone.utils
import android.app.Activity
import android.content.Context import android.content.Context
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
@ -29,6 +30,8 @@ import android.util.Patterns
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.* import android.widget.*
import android.widget.SeekBar.OnSeekBarChangeListener import android.widget.SeekBar.OnSeekBarChangeListener
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
@ -186,6 +189,23 @@ fun editTextSetting(view: EditText, lambda: () -> Unit) {
}) })
} }
@BindingAdapter("onSettingImeDone")
fun editTextImeDone(view: EditText, lambda: () -> Unit) {
view.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
lambda()
view.clearFocus()
val imm = view.context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
return@setOnEditorActionListener true
}
false
}
}
@BindingAdapter("onFocusChangeVisibilityOf") @BindingAdapter("onFocusChangeVisibilityOf")
fun setEditTextOnFocusChangeVisibilityOf(editText: EditText, view: View) { fun setEditTextOnFocusChangeVisibilityOf(editText: EditText, view: View) {
editText.setOnFocusChangeListener { _, hasFocus -> editText.setOnFocusChangeListener { _, hasFocus ->

View file

@ -0,0 +1,54 @@
/*
* Copyright (c) 2010-2021 Belledonne Communications SARL.
*
* This file is part of linphone-android
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.linphone.views
import android.app.Activity
import android.content.Context
import android.util.AttributeSet
import android.view.inputmethod.InputMethodManager
import com.google.android.material.textfield.TextInputEditText
import org.linphone.activities.main.settings.SettingListener
class SettingTextInputEditText : TextInputEditText {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
fun fakeImeDone(listener: SettingListener) {
listener.onTextValueChanged(text.toString())
// Send IME action DONE to trigger onSettingImeDone binding adapter, but that doesn't work...
// val inputConnection = BaseInputConnection(this, true)
// inputConnection.performEditorAction(EditorInfo.IME_ACTION_DONE)
// Will make check icon to disappear thanks to onFocusChangeVisibilityOf binding adapter
clearFocus()
// Hide keyboard
val imm = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0)
}
}

View file

@ -31,7 +31,7 @@
<ImageView <ImageView
android:id="@+id/settings_commit_input" android:id="@+id/settings_commit_input"
android:onClick="@{() -> listener.onTextValueChanged(settingsInput.getText().toString())}" android:onClick="@{() -> settingsInput.fakeImeDone(listener)}"
android:visibility="invisible" android:visibility="invisible"
android:contentDescription="@string/content_description_confirm_contact_edit" android:contentDescription="@string/content_description_confirm_contact_edit"
android:layout_width="20dp" android:layout_width="20dp"
@ -54,9 +54,10 @@
app:helperText="@{subtitle}" app:helperText="@{subtitle}"
app:helperTextEnabled="@{subtitle.length() > 0}"> app:helperTextEnabled="@{subtitle.length() > 0}">
<com.google.android.material.textfield.TextInputEditText <org.linphone.views.SettingTextInputEditText
android:id="@+id/settings_input" android:id="@+id/settings_input"
onFocusChangeVisibilityOf="@{settingsCommitInput}" onFocusChangeVisibilityOf="@{settingsCommitInput}"
onSettingImeDone="@{() -> listener.onTextValueChanged(settingsInput.getText().toString())}"
android:text="@{defaultValue}" android:text="@{defaultValue}"
android:imeOptions="actionDone" android:imeOptions="actionDone"
android:inputType="@{inputType ?? InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS}" android:inputType="@{inputType ?? InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS}"