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); + } }