Commit d6f167a9 authored by Grigory Fedorov's avatar Grigory Fedorov

Chat state (typing) notifications improved. "paused" state is sent when...

Chat state (typing) notifications improved. "paused" state is sent when fragment paused or after delay without typing.
parent 8b03ee05
......@@ -244,8 +244,9 @@ public class ChatStateManager implements OnDisconnectListener,
if (text.length() == 0) {
updateChatState(account, user, ChatState.active);
return;
} else
} else {
updateChatState(account, user, ChatState.composing);
}
Intent intent = ComposingPausedReceiver.createIntent(
Application.getInstance(), account, user);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
......@@ -261,6 +262,10 @@ public class ChatStateManager implements OnDisconnectListener,
public void onPaused(String account, String user) {
if (account == null || user == null)
return;
if (sent.get(account, user) != ChatState.composing) {
return;
}
updateChatState(account, user, ChatState.paused);
pauseIntents.remove(account, user);
}
......
......@@ -56,6 +56,9 @@ import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.ui.helper.ContactTitleInflater;
import com.xabber.android.ui.preferences.ChatContactSettings;
import java.util.Timer;
import java.util.TimerTask;
import github.ankushsachdeva.emojicon.EmojiconGridView;
import github.ankushsachdeva.emojicon.EmojiconsPopup;
import github.ankushsachdeva.emojicon.emoji.Emojicon;
......@@ -86,6 +89,9 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
private MessageItem clickedMessageItem;
private AccountPainter accountPainter;
private Timer stopTypingTimer = new Timer();
private final long STOP_TYPING_DELAY = 4000; // in ms
public static ChatViewerFragment newInstance(String account, String user) {
ChatViewerFragment fragment = new ChatViewerFragment();
......@@ -200,6 +206,9 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!skipOnTextChanges && stopTypingTimer != null) {
stopTypingTimer.cancel();
}
}
@Override
......@@ -210,10 +219,25 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
public void afterTextChanged(Editable text) {
setUpInputViewButtons();
if (!skipOnTextChanges) {
ChatStateManager.getInstance().onComposing(account, user, text);
if (skipOnTextChanges) {
return;
}
ChatStateManager.getInstance().onComposing(account, user, text);
stopTypingTimer = new Timer();
stopTypingTimer.schedule(new TimerTask() {
@Override
public void run() {
Application.getInstance().runOnUiThread(new Runnable() {
@Override
public void run() {
ChatStateManager.getInstance().onPaused(account, user);
}
});
}
}, STOP_TYPING_DELAY);
}
});
......@@ -402,6 +426,9 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
@Override
public void onPause() {
super.onPause();
ChatStateManager.getInstance().onPaused(account, user);
saveInputState();
listener.unregisterChat(this);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment