mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-27 20:15:21 +00:00
Make input edit text grow dynamically
This commit is contained in:
parent
e06a3271df
commit
196fc25902
@ -194,7 +194,7 @@ android {
|
|||||||
versionCode canonicalVersionCode * postFixSize
|
versionCode canonicalVersionCode * postFixSize
|
||||||
versionName canonicalVersionName
|
versionName canonicalVersionName
|
||||||
|
|
||||||
minSdkVersion 21
|
minSdkVersion 23
|
||||||
targetSdkVersion 30
|
targetSdkVersion 30
|
||||||
|
|
||||||
multiDexEnabled = true
|
multiDexEnabled = true
|
||||||
|
@ -64,7 +64,6 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity() {
|
|||||||
threadID = intent.getLongExtra(THREAD_ID, -1)
|
threadID = intent.getLongExtra(THREAD_ID, -1)
|
||||||
setUpRecyclerView()
|
setUpRecyclerView()
|
||||||
setUpToolBar()
|
setUpToolBar()
|
||||||
setUpInputBar()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpRecyclerView() {
|
private fun setUpRecyclerView() {
|
||||||
@ -97,10 +96,6 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity() {
|
|||||||
profilePictureView.update(thread, threadID)
|
profilePictureView.update(thread, threadID)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpInputBar() {
|
|
||||||
inputBar.inputBarEditText.imeOptions = inputBar.inputBarEditText.imeOptions or 16777216 // Always use incognito keyboard
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPrepareOptionsMenu(menu: Menu): Boolean {
|
override fun onPrepareOptionsMenu(menu: Menu): Boolean {
|
||||||
ConversationMenuHelper.onPrepareOptionsMenu(menu, menuInflater, thread, this) { onOptionsItemSelected(it) }
|
ConversationMenuHelper.onPrepareOptionsMenu(menu, menuInflater, thread, this) { onOptionsItemSelected(it) }
|
||||||
super.onPrepareOptionsMenu(menu)
|
super.onPrepareOptionsMenu(menu)
|
||||||
|
@ -5,10 +5,13 @@ import android.util.AttributeSet
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.RelativeLayout
|
import android.widget.RelativeLayout
|
||||||
|
import kotlinx.android.synthetic.main.activity_conversation_v2.*
|
||||||
import kotlinx.android.synthetic.main.view_input_bar.view.*
|
import kotlinx.android.synthetic.main.view_input_bar.view.*
|
||||||
import network.loki.messenger.R
|
import network.loki.messenger.R
|
||||||
|
import org.thoughtcrime.securesms.loki.utilities.toDp
|
||||||
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
class InputBar : LinearLayout {
|
class InputBar : LinearLayout, InputBarEditTextDelegate {
|
||||||
|
|
||||||
private val attachmentsButton by lazy { InputBarButton(context, R.drawable.ic_plus_24) }
|
private val attachmentsButton by lazy { InputBarButton(context, R.drawable.ic_plus_24) }
|
||||||
private val microphoneButton by lazy { InputBarButton(context, R.drawable.ic_microphone) }
|
private val microphoneButton by lazy { InputBarButton(context, R.drawable.ic_microphone) }
|
||||||
@ -34,6 +37,16 @@ class InputBar : LinearLayout {
|
|||||||
microphoneButtonContainer.addView(microphoneButton)
|
microphoneButtonContainer.addView(microphoneButton)
|
||||||
microphoneButton.layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT)
|
microphoneButton.layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT)
|
||||||
microphoneButton.setOnClickListener { }
|
microphoneButton.setOnClickListener { }
|
||||||
|
inputBarEditText.imeOptions = inputBarEditText.imeOptions or 16777216 // Always use incognito keyboard
|
||||||
|
inputBarEditText.delegate = this
|
||||||
|
}
|
||||||
|
// endregion
|
||||||
|
|
||||||
|
override fun inputBarEditTextHeightChanged(newValue: Int) {
|
||||||
|
val vMargin = resources.getDimension(R.dimen.small_spacing).roundToInt()
|
||||||
|
val layoutParams = this.layoutParams as RelativeLayout.LayoutParams
|
||||||
|
layoutParams.height = newValue + 2 * vMargin
|
||||||
|
this.layoutParams = layoutParams
|
||||||
}
|
}
|
||||||
// endregion
|
// endregion
|
||||||
}
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
package org.thoughtcrime.securesms.conversation.v2.input_bar
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.text.Layout
|
||||||
|
import android.text.StaticLayout
|
||||||
|
import android.util.AttributeSet
|
||||||
|
import android.widget.RelativeLayout
|
||||||
|
import androidx.appcompat.widget.AppCompatEditText
|
||||||
|
import org.thoughtcrime.securesms.loki.utilities.toPx
|
||||||
|
import kotlin.math.max
|
||||||
|
import kotlin.math.min
|
||||||
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
|
class InputBarEditText : AppCompatEditText {
|
||||||
|
var delegate: InputBarEditTextDelegate? = null
|
||||||
|
|
||||||
|
private val snMinHeight = toPx(40.0f, resources)
|
||||||
|
private val snMaxHeight = toPx(80.0f, resources)
|
||||||
|
|
||||||
|
constructor(context: Context) : super(context)
|
||||||
|
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
|
||||||
|
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
|
||||||
|
|
||||||
|
override fun onTextChanged(text: CharSequence, start: Int, lengthBefore: Int, lengthAfter: Int) {
|
||||||
|
super.onTextChanged(text, start, lengthBefore, lengthAfter)
|
||||||
|
val builder = StaticLayout.Builder.obtain(text, 0, text.length, paint, width)
|
||||||
|
.setAlignment(Layout.Alignment.ALIGN_NORMAL)
|
||||||
|
.setLineSpacing(0.0f, 1.0f)
|
||||||
|
.setIncludePad(false)
|
||||||
|
val layout = builder.build()
|
||||||
|
val height = layout.height.toFloat()
|
||||||
|
val constrainedHeight = min(max(height, snMinHeight), snMaxHeight)
|
||||||
|
if (constrainedHeight.roundToInt() == this.height) { return }
|
||||||
|
val layoutParams = this.layoutParams as? RelativeLayout.LayoutParams ?: return
|
||||||
|
layoutParams.height = constrainedHeight.roundToInt()
|
||||||
|
this.layoutParams = layoutParams
|
||||||
|
delegate?.inputBarEditTextHeightChanged(constrainedHeight.roundToInt())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface InputBarEditTextDelegate {
|
||||||
|
|
||||||
|
fun inputBarEditTextHeightChanged(newValue: Int)
|
||||||
|
}
|
@ -22,7 +22,7 @@
|
|||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_marginStart="@dimen/small_spacing" />
|
android:layout_marginStart="@dimen/small_spacing" />
|
||||||
|
|
||||||
<EditText
|
<org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarEditText
|
||||||
android:id="@+id/inputBarEditText"
|
android:id="@+id/inputBarEditText"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
Loading…
Reference in New Issue
Block a user