1package eu.siacs.conversations.ui;
2
3import android.content.Context;
4import android.os.Handler;
5import android.util.AttributeSet;
6import android.view.KeyEvent;
7import android.widget.EditText;
8
9import eu.siacs.conversations.Config;
10
11public class EditMessage extends EditText {
12
13 public EditMessage(Context context, AttributeSet attrs) {
14 super(context, attrs);
15 }
16
17 public EditMessage(Context context) {
18 super(context);
19 }
20
21 protected Handler mTypingHandler = new Handler();
22
23 protected Runnable mTypingTimeout = new Runnable() {
24 @Override
25 public void run() {
26 if (isUserTyping && keyboardListener != null) {
27 keyboardListener.onTypingStopped();
28 isUserTyping = false;
29 }
30 }
31 };
32
33 private boolean isUserTyping = false;
34
35 protected KeyboardListener keyboardListener;
36
37 @Override
38 public boolean onKeyDown(int keyCode, KeyEvent event) {
39 if (keyCode == KeyEvent.KEYCODE_ENTER) {
40 if (keyboardListener != null && keyboardListener.onEnterPressed()) {
41 return true;
42 }
43 }
44 return super.onKeyDown(keyCode, event);
45 }
46
47 @Override
48 public void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
49 super.onTextChanged(text,start,lengthBefore,lengthAfter);
50 if (this.mTypingHandler != null && this.keyboardListener != null) {
51 this.mTypingHandler.removeCallbacks(mTypingTimeout);
52 this.mTypingHandler.postDelayed(mTypingTimeout, Config.TYPING_TIMEOUT * 1000);
53 final int length = text.length();
54 if (!isUserTyping && length > 0) {
55 this.isUserTyping = true;
56 this.keyboardListener.onTypingStarted();
57 } else if (length == 0) {
58 this.isUserTyping = false;
59 this.keyboardListener.onTextDeleted();
60 }
61 }
62 }
63
64 public void setKeyboardListener(KeyboardListener listener) {
65 this.keyboardListener = listener;
66 if (listener != null) {
67 this.isUserTyping = false;
68 }
69 }
70
71 public interface KeyboardListener {
72 public boolean onEnterPressed();
73 public void onTypingStarted();
74 public void onTypingStopped();
75 public void onTextDeleted();
76 }
77
78}