From 4546ddb3539728f71f2bfcd5f5c42b8127c9d70c Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Wed, 9 Jan 2019 15:31:37 +0100 Subject: [PATCH] Fix some bugs --- AndroidManifest.xml | 4 +- res/layout/call.xml | 9 ++-- res/layout/chat_bubble.xml | 11 ++-- res/layout/chat_imdn.xml | 24 ++++----- res/layout/chatlist_cell.xml | 27 +++++----- res/layout/history_cell.xml | 3 +- res/layout/video.xml | 14 ++--- res/layout/video_no_opengl.xml | 14 ++--- .../org/linphone/call/CallActivity.java | 4 +- .../linphone/chat/ChatBubbleViewHolder.java | 2 + .../org/linphone/chat/ChatEventsAdapter.java | 3 ++ .../org/linphone/chat/ImdnFragment.java | 2 +- .../contacts/SearchContactsListAdapter.java | 54 ++++++++++--------- .../fragments/HistoryDetailFragment.java | 34 ++++++++++++ .../receivers/PhoneStateChangedReceiver.java | 3 +- 15 files changed, 127 insertions(+), 81 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index e8e92d438..625ce983c 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2,8 +2,8 @@ + android:versionCode="2004" + android:versionName="2.0.4"> + android:visibility="visible" /> + android:paddingTop="5dp" /> + android:layout_gravity="center" /> + android:layout_marginTop="2dp" + android:layout_marginBottom="2dp"> + android:textSize="8.3sp" /> + android:textSize="8.3sp" /> + android:src="@drawable/chat_read" /> diff --git a/res/layout/chat_imdn.xml b/res/layout/chat_imdn.xml index 5d32bf5d7..8e7141f3e 100644 --- a/res/layout/chat_imdn.xml +++ b/res/layout/chat_imdn.xml @@ -80,7 +80,7 @@ android:id="@+id/read_layout_header" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/colorH" + android:background="@color/colorF" android:gravity="center" android:orientation="horizontal"> @@ -88,13 +88,13 @@ style="@style/font27" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/displayed"/> + android:text="@string/displayed" /> + android:src="@drawable/message_read" /> @@ -108,7 +108,7 @@ android:id="@+id/delivered_layout_header" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/colorH" + android:background="@color/colorF" android:gravity="center" android:orientation="horizontal"> @@ -116,13 +116,13 @@ style="@style/font28" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/delivered"/> + android:text="@string/delivered" /> + android:src="@drawable/message_delivered" /> @@ -136,7 +136,7 @@ android:id="@+id/sent_layout_header" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/colorH" + android:background="@color/colorF" android:gravity="center" android:orientation="horizontal"> @@ -144,14 +144,14 @@ style="@style/font28" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/sent"/> + android:text="@string/sent" /> + android:visibility="invisible" /> @@ -165,7 +165,7 @@ android:id="@+id/undelivered_layout_header" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/colorH" + android:background="@color/colorF" android:gravity="center" android:orientation="horizontal"> @@ -173,13 +173,13 @@ style="@style/font29" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/error"/> + android:text="@string/error" /> + android:src="@drawable/message_undelivered" /> diff --git a/res/layout/chatlist_cell.xml b/res/layout/chatlist_cell.xml index c3839e99b..0e060f84b 100644 --- a/res/layout/chatlist_cell.xml +++ b/res/layout/chatlist_cell.xml @@ -101,15 +101,15 @@ android:layout_height="25dp" android:layout_alignBottom="@+id/sipUri" android:layout_alignParentEnd="true" + android:layout_marginEnd="89dp" android:layout_marginBottom="4dp" - android:layout_marginEnd="100dp" android:background="@drawable/chat_list_indicator" android:contentDescription="@string/content_description_unread_chat_message" android:gravity="center" android:maxLines="1" android:textAlignment="center" android:textColor="@color/colorH" - android:textSize="15sp"/> + android:textSize="15sp" /> + + - - + android:textSize="16.7sp" /> diff --git a/res/layout/history_cell.xml b/res/layout/history_cell.xml index 4e2c317ff..25fea8798 100644 --- a/res/layout/history_cell.xml +++ b/res/layout/history_cell.xml @@ -105,11 +105,12 @@ android:layout_marginLeft="10dp" android:layout_toRightOf="@id/icon" android:ellipsize="end" + android:gravity="center_vertical" android:lineSpacingExtra="13.3sp" android:lines="1" android:maxLines="1" android:textColor="#000000" - android:textSize="20sp"/> + android:textSize="20sp" /> diff --git a/res/layout/video.xml b/res/layout/video.xml index 86b7465e8..776f513fc 100644 --- a/res/layout/video.xml +++ b/res/layout/video.xml @@ -9,12 +9,14 @@ android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/videoSurface" /> - + + android:id="@+id/videoCaptureSurface" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentRight="true" + android:layout_alignParentBottom="true" + android:layout_marginRight="29dp" + android:layout_marginBottom="189dp" /> \ No newline at end of file diff --git a/res/layout/video_no_opengl.xml b/res/layout/video_no_opengl.xml index d53c33a85..5279895c4 100644 --- a/res/layout/video_no_opengl.xml +++ b/res/layout/video_no_opengl.xml @@ -9,12 +9,14 @@ android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/videoSurface" /> - + + android:id="@+id/videoCaptureSurface" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentRight="true" + android:layout_alignParentBottom="true" + android:layout_marginRight="30dp" + android:layout_marginBottom="189dp" /> diff --git a/src/android/org/linphone/call/CallActivity.java b/src/android/org/linphone/call/CallActivity.java index d384da62c..33fcd6797 100644 --- a/src/android/org/linphone/call/CallActivity.java +++ b/src/android/org/linphone/call/CallActivity.java @@ -1008,6 +1008,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList public void displayVideoCall(boolean display){ if(display) { + if (!isSpeakerEnabled) toggleSpeaker(); showStatusBar(); mControlsLayout.setVisibility(View.VISIBLE); mActiveCallHeader.setVisibility(View.VISIBLE); @@ -1018,11 +1019,12 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList switchCamera.setVisibility(View.VISIBLE); } } else { + if (isSpeakerEnabled) toggleSpeaker(); hideStatusBar(); mControlsLayout.setVisibility(View.GONE); mActiveCallHeader.setVisibility(View.GONE); switchCamera.setVisibility(View.GONE); - callsList.setVisibility(View.GONE); + callsList.setVisibility(View.INVISIBLE); } } diff --git a/src/android/org/linphone/chat/ChatBubbleViewHolder.java b/src/android/org/linphone/chat/ChatBubbleViewHolder.java index a424633a0..b50da3958 100644 --- a/src/android/org/linphone/chat/ChatBubbleViewHolder.java +++ b/src/android/org/linphone/chat/ChatBubbleViewHolder.java @@ -50,6 +50,7 @@ public class ChatBubbleViewHolder { public ImageView imdmIcon; public TextView imdmLabel; + public LinearLayout messageLayout; public TextView messageText; public TextView messageDate; public ImageView messageImage; @@ -81,6 +82,7 @@ public class ChatBubbleViewHolder { imdmIcon = view.findViewById(R.id.imdmIcon); imdmLabel = view.findViewById(R.id.imdmText); + messageLayout = view.findViewById(R.id.messageLayout); messageText = view.findViewById(R.id.message); messageDate = view.findViewById(R.id.message_date); messageImage = view.findViewById(R.id.image); diff --git a/src/android/org/linphone/chat/ChatEventsAdapter.java b/src/android/org/linphone/chat/ChatEventsAdapter.java index a00027b1b..440fbb33d 100644 --- a/src/android/org/linphone/chat/ChatEventsAdapter.java +++ b/src/android/org/linphone/chat/ChatEventsAdapter.java @@ -30,6 +30,7 @@ import android.graphics.Color; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; import android.media.ExifInterface; import android.media.ThumbnailUtils; import android.net.Uri; @@ -39,6 +40,7 @@ import android.provider.MediaStore; import android.support.v4.content.FileProvider; import android.text.Spanned; import android.text.method.LinkMovementMethod; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -307,6 +309,7 @@ public class ChatEventsAdapter extends ListSelectionAdapter { Compatibility.setTextAppearance(holder.fileTransferAction, mContext, R.style.font15); //holder.fileTransferAction.setBackgroundResource(R.drawable.resizable_confirm_delete_button); holder.contactPictureMask.setImageResource(R.drawable.avatar_chat_mask_outgoing); + holder.messageLayout.setGravity(Gravity.LEFT); } else { for (LinphoneContact c : mParticipants) { if (c != null && remoteSender!=null && c.hasAddress(remoteSender.asStringUriOnly())) { diff --git a/src/android/org/linphone/chat/ImdnFragment.java b/src/android/org/linphone/chat/ImdnFragment.java index fdb98bf43..9bdd98c4e 100644 --- a/src/android/org/linphone/chat/ImdnFragment.java +++ b/src/android/org/linphone/chat/ImdnFragment.java @@ -99,7 +99,7 @@ public class ImdnFragment extends Fragment { if (LinphoneActivity.instance().isTablet()) { LinphoneActivity.instance().goToChat(mRoomUri, null); } else { - LinphoneActivity.instance().onBackPressed(); + LinphoneActivity.instance().popBackStack(); } } }); diff --git a/src/android/org/linphone/contacts/SearchContactsListAdapter.java b/src/android/org/linphone/contacts/SearchContactsListAdapter.java index 517f2f1a0..23a9ace5d 100644 --- a/src/android/org/linphone/contacts/SearchContactsListAdapter.java +++ b/src/android/org/linphone/contacts/SearchContactsListAdapter.java @@ -177,34 +177,36 @@ public class SearchContactsListAdapter extends BaseAdapter { String domain = ""; ProxyConfig prx = LinphoneManager.getLc().getDefaultProxyConfig(); if (prx != null) domain = prx.getDomain(); - SearchResult[] results = ContactsManager.getInstance().getMagicSearch().getContactListFromFilter(search, mOnlySipContact ? domain :""); - for (SearchResult sr : results) { - boolean found = false; - LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(sr.getAddress()); - if (contact == null) { - contact = new LinphoneContact(); - if (sr.getFriend() != null) { - contact.setFriend(sr.getFriend()); - contact.refresh(); - } - } - if (sr.getAddress() != null || sr.getPhoneNumber() != null) { - for (ContactAddress ca : result) { - String normalizedPhoneNumber = (ca != null && ca.getPhoneNumber() != null && prx != null) ? prx.normalizePhoneNumber(ca.getPhoneNumber()) : null; - if ((sr.getAddress() != null && ca.getAddress() != null - && ca.getAddress().asStringUriOnly().equals(sr.getAddress().asStringUriOnly())) - || (sr.getPhoneNumber() != null && normalizedPhoneNumber != null - && sr.getPhoneNumber().equals(normalizedPhoneNumber))) { - found = true; - break; + if (ContactsManager.getInstance() != null && ContactsManager.getInstance().getMagicSearch() != null) { + SearchResult[] results = ContactsManager.getInstance().getMagicSearch().getContactListFromFilter(search, mOnlySipContact ? domain : ""); + for (SearchResult sr : results) { + boolean found = false; + LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(sr.getAddress()); + if (contact == null) { + contact = new LinphoneContact(); + if (sr.getFriend() != null) { + contact.setFriend(sr.getFriend()); + contact.refresh(); } } - } - if (!found) { - result.add(new ContactAddress(contact, - (sr.getAddress() != null) ? sr.getAddress().asStringUriOnly() : "", - sr.getPhoneNumber(), - contact.isFriend())); + if (sr.getAddress() != null || sr.getPhoneNumber() != null) { + for (ContactAddress ca : result) { + String normalizedPhoneNumber = (ca != null && ca.getPhoneNumber() != null && prx != null) ? prx.normalizePhoneNumber(ca.getPhoneNumber()) : null; + if ((sr.getAddress() != null && ca.getAddress() != null + && ca.getAddress().asStringUriOnly().equals(sr.getAddress().asStringUriOnly())) + || (sr.getPhoneNumber() != null && normalizedPhoneNumber != null + && sr.getPhoneNumber().equals(normalizedPhoneNumber))) { + found = true; + break; + } + } + } + if (!found) { + result.add(new ContactAddress(contact, + (sr.getAddress() != null) ? sr.getAddress().asStringUriOnly() : "", + sr.getPhoneNumber(), + contact.isFriend())); + } } } diff --git a/src/android/org/linphone/fragments/HistoryDetailFragment.java b/src/android/org/linphone/fragments/HistoryDetailFragment.java index 5bf6988c6..6a0824c67 100644 --- a/src/android/org/linphone/fragments/HistoryDetailFragment.java +++ b/src/android/org/linphone/fragments/HistoryDetailFragment.java @@ -41,11 +41,17 @@ import org.linphone.activities.LinphoneActivity; import org.linphone.core.Address; import org.linphone.core.ChatRoom; import org.linphone.core.ChatRoomListenerStub; +import org.linphone.core.ChatRoomSecurityLevel; import org.linphone.core.Core; import org.linphone.core.Factory; +import org.linphone.core.PresenceModel; import org.linphone.core.ProxyConfig; +import org.linphone.core.ZrtpPeerStatus; import org.linphone.mediastream.Log; +import static org.linphone.LinphoneUtils.getSecurityLevelForSipUri; +import static org.linphone.LinphoneUtils.getZrtpStatus; + public class HistoryDetailFragment extends Fragment implements OnClickListener { private ImageView dialBack, chat, addToContacts, goToContact, back; private View view; @@ -157,6 +163,34 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { if (lAddress != null) { contactAddress.setText(lAddress.asStringUriOnly()); contact = ContactsManager.getInstance().findContactFromAddress(lAddress); + ProxyConfig prx = LinphoneManager.getLc().getDefaultProxyConfig(); + Address ourUri = (prx != null) ? prx.getIdentityAddress() : null; + ChatRoomSecurityLevel securityLevel = getSecurityLevelForSipUri(LinphoneManager.getLc(), ourUri, contact.getFriend().getAddress()); + if (securityLevel == ChatRoomSecurityLevel.Safe) { + contactPicture.setImageResource(R.drawable.avatar_medium_secure2); + } else if (securityLevel == ChatRoomSecurityLevel.Unsafe) { + contactPicture.setImageResource(R.drawable.avatar_medium_unsecure); + } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) { + contactPicture.setImageResource(R.drawable.avatar_medium_secure1); + } else { + ZrtpPeerStatus zrtpStatus = getZrtpStatus(LinphoneManager.getLc(), contact.getFriend().getAddress().asStringUriOnly()); + if (zrtpStatus == ZrtpPeerStatus.Valid) { + contactPicture.setImageResource(R.drawable.avatar_medium_secure2); + } else if (zrtpStatus == ZrtpPeerStatus.Invalid) { + contactPicture.setImageResource(R.drawable.avatar_medium_unsecure); + } else { + if (!ContactsManager.getInstance().isContactPresenceDisabled() && contact != null && contact.getFriend() != null) { + PresenceModel presenceModel = contact.getFriend().getPresenceModel(); + if (presenceModel != null) { + contactPicture.setImageResource(R.drawable.avatar_medium_secure1); + } else { + contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } + } else { + contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } + } + } if (contact != null) { contactName.setText(contact.getFullName()); //LinphoneUtils.setImagePictureFromUri(view.getContext(),contactPicture,contact.getPhotoUri(),contact.getThumbnailUri()); diff --git a/src/android/org/linphone/receivers/PhoneStateChangedReceiver.java b/src/android/org/linphone/receivers/PhoneStateChangedReceiver.java index 27cb24a47..5d07d3398 100644 --- a/src/android/org/linphone/receivers/PhoneStateChangedReceiver.java +++ b/src/android/org/linphone/receivers/PhoneStateChangedReceiver.java @@ -41,8 +41,7 @@ public class PhoneStateChangedReceiver extends BroadcastReceiver { if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(extraState) || TelephonyManager.EXTRA_STATE_RINGING.equals(extraState)) { LinphoneManager.getInstance().setCallGsmON(true); - Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - lc.pauseAllCalls(); + LinphoneManager.getLcIfManagerNotDestroyedOrNull().pauseAllCalls(); } else if (TelephonyManager.EXTRA_STATE_IDLE.equals(extraState)) { LinphoneManager.getInstance().setCallGsmON(false); }