diff --git a/res/layout-FR/chat.xml b/res/layout-FR/chat.xml
index 550f76634..1f7d9ef4c 100644
--- a/res/layout-FR/chat.xml
+++ b/res/layout-FR/chat.xml
@@ -48,6 +48,14 @@
+
+
+
+
+
+
-
+
+
+
Accepter
Refuser
Vous ne devriez accepter que si vous avez le même code (ci-dessus) que votre contact
+
+ Votre correspondant est en train de taper...
diff --git a/res/values-RU/strings.xml b/res/values-RU/strings.xml
index 5c13eb260..da926fb60 100755
--- a/res/values-RU/strings.xml
+++ b/res/values-RU/strings.xml
@@ -444,4 +444,6 @@
Accept
Deny
You should only accept if you have the same code (see above) as your correspondent
+
+ Remote is writing...
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5b70909ba..b82b00f8d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -444,4 +444,6 @@
Accept
Deny
You should only accept if you have the same code (see above) as your correspondent
+
+ Remote is writing...
diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java
index 36d16e213..68396dc8f 100644
--- a/src/org/linphone/ChatFragment.java
+++ b/src/org/linphone/ChatFragment.java
@@ -33,6 +33,7 @@ import java.util.HashMap;
import java.util.List;
import org.apache.http.util.ByteArrayBuffer;
+import org.linphone.LinphoneSimpleListener.LinphoneOnComposingReceivedListener;
import org.linphone.compatibility.Compatibility;
import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneChatMessage;
@@ -85,7 +86,7 @@ import android.widget.Toast;
/**
* @author Sylvain Berfini
*/
-public class ChatFragment extends Fragment implements OnClickListener, LinphoneChatMessage.StateListener {
+public class ChatFragment extends Fragment implements OnClickListener, LinphoneChatMessage.StateListener, LinphoneOnComposingReceivedListener {
private static final int ADD_PHOTO = 1337;
private static final int MENU_DELETE_MESSAGE = 0;
private static final int MENU_SAVE_PICTURE = 1;
@@ -105,7 +106,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
private String sipUri;
private EditText message;
private ImageView cancelUpload;
- private TextView sendImage, sendMessage, contactName;
+ private TextView sendImage, sendMessage, contactName, remoteComposing;
private AvatarWithShadow contactPicture;
private RelativeLayout messagesLayout, uploadLayout, textLayout;
private LinphoneScrollView messagesScrollView;
@@ -143,6 +144,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
sendMessage = (TextView) view.findViewById(R.id.sendMessage);
sendMessage.setOnClickListener(this);
+ remoteComposing = (TextView) view.findViewById(R.id.remoteComposing);
+ remoteComposing.setVisibility(View.GONE);
+
message = (EditText) view.findViewById(R.id.message);
if (!getActivity().getResources().getBoolean(R.bool.allow_chat_multiline)) {
message.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE);
@@ -208,6 +212,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
if (message.getText().toString().equals("")) {
sendMessage.setEnabled(false);
} else {
+ if (chatRoom != null)
+ chatRoom.compose();
sendMessage.setEnabled(true);
}
}
@@ -555,6 +561,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
LinphoneService.instance().removeMessageNotification();
+ if (LinphoneManager.isInstanciated())
+ LinphoneManager.getInstance().setOnComposingReceivedListener(null);
+
super.onPause();
if (!message.getText().toString().equals("") && LinphoneActivity.isInstanciated()) {
@@ -576,6 +585,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
message.addTextChangedListener(textWatcher);
addVirtualKeyboardVisiblityListener();
+ if (LinphoneManager.isInstanciated())
+ LinphoneManager.getInstance().setOnComposingReceivedListener(this);
+
super.onResume();
if (LinphoneActivity.isInstanciated()) {
@@ -587,6 +599,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
String draft = LinphoneActivity.instance().getChatStorage().getDraft(sipUri);
message.setText(draft);
}
+
+ remoteComposing.setVisibility(chatRoom.isRemoteComposing() ? View.VISIBLE : View.GONE);
}
@Override
@@ -1082,4 +1096,16 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
LARGE,
REAL;
}
+
+ @Override
+ public void onComposingReceived(LinphoneChatRoom room) {
+ if (chatRoom != null && room != null && chatRoom.getPeerAddress().asStringUriOnly().equals(room.getPeerAddress().asStringUriOnly())) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ remoteComposing.setVisibility(chatRoom.isRemoteComposing() ? View.VISIBLE : View.GONE);
+ }
+ });
+ }
+ }
}
diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java
index b32924521..1cd92ce93 100644
--- a/src/org/linphone/LinphoneManager.java
+++ b/src/org/linphone/LinphoneManager.java
@@ -40,6 +40,7 @@ import java.util.TimerTask;
import org.linphone.LinphoneSimpleListener.ConnectivityChangedListener;
import org.linphone.LinphoneSimpleListener.LinphoneOnAudioChangedListener;
import org.linphone.LinphoneSimpleListener.LinphoneOnAudioChangedListener.AudioState;
+import org.linphone.LinphoneSimpleListener.LinphoneOnComposingReceivedListener;
import org.linphone.LinphoneSimpleListener.LinphoneOnDTMFReceivedListener;
import org.linphone.LinphoneSimpleListener.LinphoneOnMessageReceivedListener;
import org.linphone.LinphoneSimpleListener.LinphoneServiceListener;
@@ -1421,9 +1422,15 @@ public class LinphoneManager implements LinphoneCoreListener {
// TODO Auto-generated method stub
}
+
+ private LinphoneOnComposingReceivedListener composingReceivedListener;
+ public void setOnComposingReceivedListener(LinphoneOnComposingReceivedListener listener) {
+ composingReceivedListener = listener;
+ }
@Override
public void isComposingReceived(LinphoneCore lc, LinphoneChatRoom cr) {
- // TODO Auto-generated method stub
-
+ Log.d("Composing received for chatroom " + cr.getPeerAddress().asStringUriOnly());
+ if (composingReceivedListener != null)
+ composingReceivedListener.onComposingReceived(cr);
}
}
diff --git a/src/org/linphone/LinphoneSimpleListener.java b/src/org/linphone/LinphoneSimpleListener.java
index cd503d7af..9064199e3 100644
--- a/src/org/linphone/LinphoneSimpleListener.java
+++ b/src/org/linphone/LinphoneSimpleListener.java
@@ -22,6 +22,7 @@ import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCall.State;
import org.linphone.core.LinphoneChatMessage;
+import org.linphone.core.LinphoneChatRoom;
import org.linphone.core.LinphoneCore.GlobalState;
import org.linphone.core.LinphoneCore.RegistrationState;
@@ -76,4 +77,7 @@ public interface LinphoneSimpleListener {
public static interface LinphoneOnDTMFReceivedListener extends LinphoneSimpleListener {
void onDTMFReceived(LinphoneCall call, int dtmf);
}
+ public static interface LinphoneOnComposingReceivedListener extends LinphoneSimpleListener {
+ void onComposingReceived(LinphoneChatRoom room);
+ }
}