mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-13 17:51:57 +00:00
Implement chat message limit. Fixes #993
This commit is contained in:
parent
fcc67d05f7
commit
9e7ae94979
3 changed files with 59 additions and 15 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/chatBarContainer"
|
android:id="@+id/chatBarContainer"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
@ -46,17 +47,39 @@
|
||||||
android:paddingLeft="@dimen/spacing_medium"
|
android:paddingLeft="@dimen/spacing_medium"
|
||||||
android:paddingRight="@dimen/spacing_medium"
|
android:paddingRight="@dimen/spacing_medium"
|
||||||
android:paddingTop="4dp"
|
android:paddingTop="4dp"
|
||||||
android:paddingBottom="4dp"/>
|
android:paddingBottom="4dp"
|
||||||
|
tools:height="200dp"/>
|
||||||
</android.support.design.widget.TextInputLayout>
|
</android.support.design.widget.TextInputLayout>
|
||||||
<ImageButton
|
<LinearLayout
|
||||||
android:id="@+id/sendButton"
|
android:layout_width="wrap_content"
|
||||||
android:layout_width="30dp"
|
android:layout_height="match_parent"
|
||||||
android:layout_height="30dp"
|
android:orientation="vertical"
|
||||||
android:layout_gravity="center"
|
android:layout_marginTop="@dimen/spacing_medium"
|
||||||
android:background="@color/transparent"
|
android:layout_marginBottom="@dimen/spacing_medium"
|
||||||
android:tint="@color/gray_400"
|
android:gravity="bottom">
|
||||||
android:src="@drawable/ic_send_grey_600_24dp"
|
<TextView
|
||||||
android:contentDescription="@string/send"/>
|
android:id="@+id/text_indicator"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
tools:text="100/150"
|
||||||
|
android:visibility="gone"
|
||||||
|
/>
|
||||||
|
<View
|
||||||
|
android:id="@+id/indicator_spacing"
|
||||||
|
android:layout_width="1dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/sendButton"
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:background="@color/transparent"
|
||||||
|
android:tint="@color/gray_400"
|
||||||
|
android:src="@drawable/ic_send_grey_600_24dp"
|
||||||
|
android:contentDescription="@string/send"/>
|
||||||
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/communityGuidelinesView"
|
android:id="@+id/communityGuidelinesView"
|
||||||
|
|
|
||||||
|
|
@ -382,7 +382,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
updateWidgets()
|
updateWidgets();
|
||||||
super.onPause();
|
super.onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,12 @@ import android.text.TextWatcher
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.EditText
|
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import android.widget.ImageButton
|
import android.widget.ImageButton
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
|
import android.widget.TextView
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.extensions.bindView
|
import com.habitrpg.android.habitica.extensions.bindView
|
||||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
|
||||||
import com.habitrpg.android.habitica.ui.helpers.NavbarUtils
|
import com.habitrpg.android.habitica.ui.helpers.NavbarUtils
|
||||||
|
|
||||||
class ChatBarView : FrameLayout {
|
class ChatBarView : FrameLayout {
|
||||||
|
|
@ -23,9 +22,13 @@ class ChatBarView : FrameLayout {
|
||||||
private val chatBarContainer: LinearLayout by bindView(R.id.chatBarContainer)
|
private val chatBarContainer: LinearLayout by bindView(R.id.chatBarContainer)
|
||||||
private val sendButton: ImageButton by bindView(R.id.sendButton)
|
private val sendButton: ImageButton by bindView(R.id.sendButton)
|
||||||
private val chatEditText: AppCompatEditText by bindView(R.id.chatEditText)
|
private val chatEditText: AppCompatEditText by bindView(R.id.chatEditText)
|
||||||
|
private val textIndicator: TextView by bindView(R.id.text_indicator)
|
||||||
|
private val indicatorSpacing: View by bindView(R.id.indicator_spacing)
|
||||||
|
|
||||||
private var navBarAccountedHeightCalculated = false
|
private var navBarAccountedHeightCalculated = false
|
||||||
|
|
||||||
|
private var maxChatLength = 200
|
||||||
|
|
||||||
var sendAction: ((String) -> Unit)? = null
|
var sendAction: ((String) -> Unit)? = null
|
||||||
|
|
||||||
constructor(context: Context) : super(context) {
|
constructor(context: Context) : super(context) {
|
||||||
|
|
@ -47,7 +50,8 @@ class ChatBarView : FrameLayout {
|
||||||
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
||||||
|
|
||||||
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
|
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
|
||||||
setSendButtonEnabled(chatEditText.text.isNotEmpty())
|
setSendButtonEnabled(chatEditText.text.isNotEmpty() && chatEditText.text.length <= maxChatLength)
|
||||||
|
updateTextIndicator(chatEditText.text.toString())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -56,6 +60,23 @@ class ChatBarView : FrameLayout {
|
||||||
resizeForDrawingUnderNavbar()
|
resizeForDrawingUnderNavbar()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateTextIndicator(text: String) {
|
||||||
|
if (chatEditText.lineCount >= 3) {
|
||||||
|
textIndicator.visibility = View.VISIBLE
|
||||||
|
indicatorSpacing.visibility = View.VISIBLE
|
||||||
|
textIndicator.text = "${text.length}/${maxChatLength}"
|
||||||
|
val color = when {
|
||||||
|
text.length > maxChatLength -> R.color.red_50
|
||||||
|
text.length > (maxChatLength * 0.95) -> R.color.yellow_5
|
||||||
|
else -> R.color.gray_400
|
||||||
|
}
|
||||||
|
textIndicator.setTextColor(ContextCompat.getColor(context, color))
|
||||||
|
} else {
|
||||||
|
textIndicator.visibility = View.GONE
|
||||||
|
indicatorSpacing.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
||||||
super.onLayout(changed, left, top, right, bottom)
|
super.onLayout(changed, left, top, right, bottom)
|
||||||
if (changed) {
|
if (changed) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue