From 07911b2094696b17c56fbe5ff6afc8dfc8326c88 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 27 Apr 2020 11:53:31 +0200 Subject: [PATCH] indicate ongoing call. fixes #3675 --- .../ui/ConversationFragment.java | 34 ++++++++++++-- .../ui/adapter/ConversationAdapter.java | 44 ++++++++++++------ .../xmpp/jingle/JingleConnectionManager.java | 18 +++++-- .../ic_phone_in_talk_black_18dp.png | Bin 0 -> 374 bytes .../ic_phone_in_talk_white_18dp.png | Bin 0 -> 393 bytes .../ic_phone_in_talk_white_24dp.png | Bin 0 -> 483 bytes .../ic_phone_in_talk_black_18dp.png | Bin 0 -> 253 bytes .../ic_phone_in_talk_white_18dp.png | Bin 0 -> 261 bytes .../ic_phone_in_talk_white_24dp.png | Bin 0 -> 325 bytes .../ic_phone_in_talk_black_18dp.png | Bin 0 -> 477 bytes .../ic_phone_in_talk_white_18dp.png | Bin 0 -> 483 bytes .../ic_phone_in_talk_white_24dp.png | Bin 0 -> 601 bytes .../ic_phone_in_talk_black_18dp.png | Bin 0 -> 685 bytes .../ic_phone_in_talk_white_18dp.png | Bin 0 -> 704 bytes .../ic_phone_in_talk_white_24dp.png | Bin 0 -> 882 bytes .../ic_phone_in_talk_black_18dp.png | Bin 0 -> 868 bytes .../ic_phone_in_talk_white_18dp.png | Bin 0 -> 882 bytes .../ic_phone_in_talk_white_24dp.png | Bin 0 -> 1162 bytes src/main/res/menu/fragment_conversation.xml | 6 +++ src/main/res/values/attrs.xml | 2 + src/main/res/values/strings.xml | 1 + src/main/res/values/themes.xml | 4 ++ 22 files changed, 89 insertions(+), 20 deletions(-) create mode 100644 src/main/res/drawable-hdpi/ic_phone_in_talk_black_18dp.png create mode 100644 src/main/res/drawable-hdpi/ic_phone_in_talk_white_18dp.png create mode 100644 src/main/res/drawable-hdpi/ic_phone_in_talk_white_24dp.png create mode 100644 src/main/res/drawable-mdpi/ic_phone_in_talk_black_18dp.png create mode 100644 src/main/res/drawable-mdpi/ic_phone_in_talk_white_18dp.png create mode 100644 src/main/res/drawable-mdpi/ic_phone_in_talk_white_24dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_phone_in_talk_black_18dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_phone_in_talk_white_18dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_phone_in_talk_white_24dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_phone_in_talk_black_18dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_phone_in_talk_white_18dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_phone_in_talk_white_24dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_phone_in_talk_black_18dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_phone_in_talk_white_18dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_phone_in_talk_white_24dp.png diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 0f47f6936..e8016fc01 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -52,6 +52,8 @@ import android.widget.PopupMenu; import android.widget.TextView.OnEditorActionListener; import android.widget.Toast; +import com.google.common.base.Optional; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -117,6 +119,7 @@ import eu.siacs.conversations.utils.TimeframeUtils; import eu.siacs.conversations.utils.UIHelper; import eu.siacs.conversations.xmpp.XmppConnection; import eu.siacs.conversations.xmpp.chatstate.ChatState; +import eu.siacs.conversations.xmpp.jingle.AbstractJingleConnection; import eu.siacs.conversations.xmpp.jingle.JingleFileTransferConnection; import eu.siacs.conversations.xmpp.jingle.RtpCapability; import rocks.xmpp.addr.Jid; @@ -956,6 +959,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke final MenuItem menuMute = menu.findItem(R.id.action_mute); final MenuItem menuUnmute = menu.findItem(R.id.action_unmute); final MenuItem menuCall = menu.findItem(R.id.action_call); + final MenuItem menuOngoingCall = menu.findItem(R.id.action_ongoing_call); final MenuItem menuVideoCall = menu.findItem(R.id.action_video_call); @@ -965,10 +969,18 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke menuInviteContact.setVisible(conversation.getMucOptions().canInvite()); menuMucDetails.setTitle(conversation.getMucOptions().isPrivateAndNonAnonymous() ? R.string.action_muc_details : R.string.channel_details); menuCall.setVisible(false); + menuOngoingCall.setVisible(false); } else { - final RtpCapability.Capability rtpCapability = RtpCapability.check(conversation.getContact()); - menuCall.setVisible(rtpCapability != RtpCapability.Capability.NONE); - menuVideoCall.setVisible(rtpCapability == RtpCapability.Capability.VIDEO); + final Optional ongoingRtpSession = activity.xmppConnectionService.getJingleConnectionManager().getOngoingRtpConnection(conversation.getContact()); + if (ongoingRtpSession.isPresent()) { + menuOngoingCall.setVisible(true); + menuCall.setVisible(false); + } else { + menuOngoingCall.setVisible(false); + final RtpCapability.Capability rtpCapability = RtpCapability.check(conversation.getContact()); + menuCall.setVisible(rtpCapability != RtpCapability.Capability.NONE); + menuVideoCall.setVisible(rtpCapability == RtpCapability.Capability.VIDEO); + } menuContactDetails.setVisible(!this.conversation.withSelf()); menuMucDetails.setVisible(false); final XmppConnectionService service = activity.xmppConnectionService; @@ -1245,12 +1257,28 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke case R.id.action_video_call: checkPermissionAndTriggerVideoCall(); break; + case R.id.action_ongoing_call: + returnToOngoingCall(); + break; default: break; } return super.onOptionsItemSelected(item); } + private void returnToOngoingCall() { + final Optional ongoingRtpSession = activity.xmppConnectionService.getJingleConnectionManager().getOngoingRtpConnection(conversation.getContact()); + if (ongoingRtpSession.isPresent()) { + final AbstractJingleConnection.Id id = ongoingRtpSession.get(); + final Intent intent = new Intent(getActivity(), RtpSessionActivity.class); + intent.putExtra(RtpSessionActivity.EXTRA_ACCOUNT, id.account.getJid().asBareJid().toEscapedString()); + intent.putExtra(RtpSessionActivity.EXTRA_WITH, id.with.toEscapedString()); + intent.putExtra(RtpSessionActivity.EXTRA_SESSION_ID, id.sessionId); + startActivity(intent); + } + + } + private void checkPermissionAndTriggerAudioCall() { if (activity.mUseTor || conversation.getAccount().isOnion()) { Toast.makeText(activity, R.string.disable_tor_to_make_call, Toast.LENGTH_SHORT).show(); diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java index 3ea451653..dacfc8df0 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java @@ -9,11 +9,14 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import com.google.common.base.Optional; + import java.util.List; import eu.siacs.conversations.R; import eu.siacs.conversations.databinding.ConversationListRowBinding; import eu.siacs.conversations.entities.Conversation; +import eu.siacs.conversations.entities.Conversational; import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.ui.ConversationFragment; import eu.siacs.conversations.ui.XmppActivity; @@ -22,6 +25,7 @@ import eu.siacs.conversations.ui.util.StyledAttributes; import eu.siacs.conversations.utils.EmojiWrapper; import eu.siacs.conversations.utils.IrregularUnicodeDetector; import eu.siacs.conversations.utils.UIHelper; +import eu.siacs.conversations.xmpp.jingle.AbstractJingleConnection; import rocks.xmpp.addr.Jid; public class ConversationAdapter extends RecyclerView.Adapter { @@ -160,21 +164,35 @@ public class ConversationAdapter extends RecyclerView.Adapter= System.currentTimeMillis()) { - viewHolder.binding.notificationStatus.setVisibility(View.VISIBLE); - int ic_notifications_paused = activity.getThemeResource(R.attr.icon_notifications_paused, R.drawable.ic_notifications_paused_black_24dp); - viewHolder.binding.notificationStatus.setImageResource(ic_notifications_paused); - } else if (conversation.alwaysNotify()) { - viewHolder.binding.notificationStatus.setVisibility(View.GONE); + + final Optional ongoingCall; + if (conversation.getMode() == Conversational.MODE_MULTI) { + ongoingCall = Optional.absent(); } else { + ongoingCall = activity.xmppConnectionService.getJingleConnectionManager().getOngoingRtpConnection(conversation.getContact()); + } + + if (ongoingCall.isPresent()) { viewHolder.binding.notificationStatus.setVisibility(View.VISIBLE); - int ic_notifications_none = activity.getThemeResource(R.attr.icon_notifications_none, R.drawable.ic_notifications_none_black_24dp); - viewHolder.binding.notificationStatus.setImageResource(ic_notifications_none); + final int ic_ongoing_call = activity.getThemeResource(R.attr.ic_ongoing_call_hint, R.drawable.ic_phone_in_talk_black_18dp); + viewHolder.binding.notificationStatus.setImageResource(ic_ongoing_call); + } else { + final long muted_till = conversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL, 0); + if (muted_till == Long.MAX_VALUE) { + viewHolder.binding.notificationStatus.setVisibility(View.VISIBLE); + int ic_notifications_off = activity.getThemeResource(R.attr.icon_notifications_off, R.drawable.ic_notifications_off_black_24dp); + viewHolder.binding.notificationStatus.setImageResource(ic_notifications_off); + } else if (muted_till >= System.currentTimeMillis()) { + viewHolder.binding.notificationStatus.setVisibility(View.VISIBLE); + int ic_notifications_paused = activity.getThemeResource(R.attr.icon_notifications_paused, R.drawable.ic_notifications_paused_black_24dp); + viewHolder.binding.notificationStatus.setImageResource(ic_notifications_paused); + } else if (conversation.alwaysNotify()) { + viewHolder.binding.notificationStatus.setVisibility(View.GONE); + } else { + viewHolder.binding.notificationStatus.setVisibility(View.VISIBLE); + int ic_notifications_none = activity.getThemeResource(R.attr.icon_notifications_none, R.drawable.ic_notifications_none_black_24dp); + viewHolder.binding.notificationStatus.setImageResource(ic_notifications_none); + } } long timestamp; diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java index 4c410a5be..a6c14a384 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java @@ -1,19 +1,16 @@ package eu.siacs.conversations.xmpp.jingle; -import android.os.SystemClock; import android.util.Base64; import android.util.Log; -import com.google.common.base.Function; import com.google.common.base.Objects; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableSet; -import org.checkerframework.checker.nullness.compatqual.NullableDecl; - import java.lang.ref.WeakReference; import java.security.SecureRandom; import java.util.Collection; @@ -108,6 +105,7 @@ public class JingleConnectionManager extends AbstractConnectionManager { return; } connections.put(id, connection); + mXmppConnectionService.updateConversationUi(); connection.deliverPacket(packet); } else { Log.d(Config.LOGTAG, "unable to route jingle packet: " + packet); @@ -353,6 +351,18 @@ public class JingleConnectionManager extends AbstractConnectionManager { connection.init(message); } + public Optional getOngoingRtpConnection(final Contact contact) { + for(final Map.Entry entry : this.connections.entrySet()) { + if (entry.getValue() instanceof JingleRtpConnection) { + final AbstractJingleConnection.Id id = entry.getKey(); + if (id.account == contact.getAccount() && id.with.asBareJid().equals(contact.getJid().asBareJid())) { + return Optional.of(id); + } + } + } + return Optional.absent(); + } + void finishConnection(final AbstractJingleConnection connection) { this.connections.remove(connection.getId()); } diff --git a/src/main/res/drawable-hdpi/ic_phone_in_talk_black_18dp.png b/src/main/res/drawable-hdpi/ic_phone_in_talk_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..37bf2abc3fb59959aeb099269243022b827016aa GIT binary patch literal 374 zcmV-+0g3*JP))Z}fTR-}c%~#yzxDuWt-6?Y`@d>98necL0^tTQ_AJeJNW2 z%y{LC)O%u-wp&v68j3UChWYg%5EXdH0Bln-@y7Ly{5YPj5pfW6klTkus}(=hClc&6#1_+uZI#XT*v zV#_2@98{_FFrzZ9WynXdp=Ur7eu-tn1~ez)sS@I_llIW*@$9Er{mV8Y{wZxuGknbE9oWA{gARnJ2v8!SvNhf;E3JhKX!Gk US`J97$N&HU07*qoM6N<$f@&bAcmMzZ literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-hdpi/ic_phone_in_talk_white_18dp.png b/src/main/res/drawable-hdpi/ic_phone_in_talk_white_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ecb24eb76071ee89345a6ae9573eb50f03e83589 GIT binary patch literal 393 zcmV;40e1e0P)ltVm53j+@E@T7t<4Uc5?oU^Sn>zSLaRt(WC8-jod&>%B{NPvV(aJm6s6!u9sZ} znCkwG4FE7KyERXJ0Nl6pPpl7s=h8yQy#TK>4D2ERK9^ln`B2X<+!L8&0H9Ou_R}jT z^Lz!Ij%?Xi0H5qF47T+0X^cr^$zug+m(6ZnZ!$a~Spf$kI~P#Sb`!kJ^G95YY{@%3 zltO3l!w$(NZbp`@W6MfldsHe-$(qWl$TYmgOf$exWJ$+2Y+9<#N*BNbi*TPKwnY}Z z2Apf)QtoHwh>B0cMoF8~Bq5XAP=wGnk)2=WAbF;4100000NkvXXu0mjf@BFOy literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-hdpi/ic_phone_in_talk_white_24dp.png b/src/main/res/drawable-hdpi/ic_phone_in_talk_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f2c89424ef6c4a8fc641b695d15aea61138985b7 GIT binary patch literal 483 zcmV<90UZ8`P)Ky0J#aZ%sZ_et~>HCY{-~XxUHbz0?FOs4oWf$?u~mwAlq;0M}YWdla`( zD7MLCz)&lwOL50VR^2gcv+rf5z=G~_D9p)kRAfQJ4eK)M33#Pe4&9XBnH&V~?8vV5 z6&x;y^5?!HQkOgj%<0PB5$=~m9lis&DhloQ35*G0izXUYltE#t>~T{EKqEW*4A@%^ z?E*h+6Qxaqqe2)5C(EJm2;3H>T?RwamDF27-J0N___IQ>G4S5{s!*p{Fl~7?DC{;5 z?pj(63Il+9g}++jtO>ogwuMsX0WWNj7?S`#d*hi&tJ^{09N>dPiTQPd?V&JW9&pF@ zQihQ>P&)gpv?@^OG^$wktCG`aOc#Dh6f>p4e;zocrr)ss-6x2h0@rkd6{87Rp7>!uAZ?Z z)32u?co!aZl|mnYj&I=zz`C%h@asfoUswddhikmJm6MEL6eTl3DO)~~YZ4-1X+jHsOwu$-&!?jH5c^!n300000NkvXXu0mjf DB1dNb literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-mdpi/ic_phone_in_talk_white_18dp.png b/src/main/res/drawable-mdpi/ic_phone_in_talk_white_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..833386bbcd7d403260e5f4e17ea79de10ae630a8 GIT binary patch literal 261 zcmV+g0s8)lP)5>2 zzb*p-901^-G}VbW;01Is*(9~{5C-W&3`Qx9L?W@_1sKEwkoc2}TudYeiFgBQZNltx zan3bGr+#0=P+5~oC8i?d!oIoa=SprVGH$)$#zgdTBDWP^)HHQHn~ajSToM^)R#eq> zrBTw5Ye&W-u2nVBh=Ph&?8G;VSXT3HFG@Bs9X~udjd15YO2&2E8;!v%;Lu16riCN5 z$k>(I)>Myv)_r&|<3J&a-^_c_D~-Px)6!8$<3B29Z8&ymHHPXFyN1GZ*_DqY00000 LNkvXXu0mjfAe3xu literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-mdpi/ic_phone_in_talk_white_24dp.png b/src/main/res/drawable-mdpi/ic_phone_in_talk_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e6f98af95bf0027481d1c66ab3fc99354458dd8e GIT binary patch literal 325 zcmV-L0lNN)P)Y5a?hDBK78)1nDb?lTJ#_HAxQD2M9OC$xk3SiHJBy*jivDgy5nLNmDe1 zgogHfa?~p~@AY4fo|D{GR-I}ZPQhPW<_+a?4wWWTQ2MMl7ui;tNkO|lZ~VZHft+Vu zX(bgpEn-J+>dY%Ob>^5oA3aI5S;VK*d7<>hog8y&I&s%e45muMp%ZJmQ*h5K`xr@# zV=i^x;j8Xcc#RK<$M}{y1K8G+3SIb<=)iu?^BxPiIgjjOEH~#l4m{02+I8hRCUM|p z3K}-FteQ1tIF~cw#FG0OHl1naDxTTJZ{OAAY93m4L9VCYTP+p&KM#zWv*wqUmE2ZG XfRjN?g6O-M00000NkvXXu0mjfGVqI( literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-xhdpi/ic_phone_in_talk_black_18dp.png b/src/main/res/drawable-xhdpi/ic_phone_in_talk_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0eea8bcb7a6ccbbd600b177752f0f24743a37e07 GIT binary patch literal 477 zcmV<30V4j1P)fwpqNS<5H*1K7T7oEu8tes^2qXxnULg=FAsVV#OC?BXh+3i{ zihdwXW&H=C4K-9y6l8gWXSm4Wpcn4y=UF`WfiK>3Rdp*g^cyZ`P=}Hs=Nz(LCH)GE zXPi4m4v=Z^|kM=S$C7rh4icWWDn@^ zGtS4WT=xwn*Sr=_&FKasae6GP!|yV4Q|hp9u^9t9EX3=slQp&E$2}tMN*9=k(?MDL zV)@T5dDF2!3C82+v+_KP^?iBQ%fBGvmbB$*ihl%0)ixHP&$g(k(`=-styR;0^O1UJ zwVDPLF^`hpYL!bS^x3JhDKy0J#aZ%sZ_et~>HCY{-~XxUHbz0?FOs4oWf$?u~mwAlq;0M}YWdla`( zD7MLCz)&lwOL50VR^2gcv+rf5z=G~_D9p)kRAfQJ4eK)M33#Pe4&9XBnH&V~?8vV5 z6&x;y^5?!HQkOgj%<0PB5$=~m9lis&DhloQ35*G0izXUYltE#t>~T{EKqEW*4A@%^ z?E*h+6Qxaqqe2)5C(EJm2;3H>T?RwamDF27-J0N___IQ>G4S5{s!*p{Fl~7?DC{;5 z?pj(63Il+9g}++jtO>ogwuMsX0WWNj7?S`#d*hi&tJ^{09N>dPiTQPd?V&JW9&pF@ zQihQ>P&)gpv?@^OG^$w2+&ocHoAp8q}GJ>GNwyVJYvJ|C&3rlJ@iiq{JL@?f2x%rnh(4yas2 z$rqIex!!P*29=H!e(IEi%@*lXsrZebX63-o1DaF{zTu}`IcQ`rCm7}hX|mq2N5!## zpHuQh2NR@lEz+i9c#5AJDu^IUxZbi;c8uZYkt}Fo7T0~*aTPx+)N2Fld}fBr1eC!J zW^tX74PE#bmM}ijpu(u*2l@WcrVZp8r(O(aaiI2}1HkHxZ04G|Is%jBB!C5?6vj6~s~E z7?&=A(XDDAL>eQ?5&2?2K^nAGjN*#Xt2~5> z12JY8rjHJGQ?K$chAYmHJP4B{-wORI2V-PS(W(r>B=Hwjc^D;)E5d;OBTSNlR4ziS zk~PN&Ni0-8I{84!v=uaRi*-t(t)i1zN}%oFB+n^A+eMHGRw+o8z%D{OBuc(zRT77| n!X2J4&sTntWSO(7si~-co;IymT`&Bo00000NkvXXu0mjf&bbB- literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-xxhdpi/ic_phone_in_talk_black_18dp.png b/src/main/res/drawable-xxhdpi/ic_phone_in_talk_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ed36763d8b83cd0454587725b217f3d3ab42e2be GIT binary patch literal 685 zcmV;e0#f~nP)j0tpmlCW6Y>F5FbpDq7Vp#Vpc{);+c@qK9P>(xQb# z<)$Eu+J-HxKtjSw7iBqi+gv_A?%dOv2Pa(2@4x%_nBP6;eCG^Hm=Y!GNTHLYhHRSH z!CH#sI(|g@2@%w1c+6=Mg|5nvOooamndB9RiIXQS_=apW$t3S-BQJIvW!ud%l_AQ> znS@c+0%-PekZy+f9O|2(h8$UElpP`(k3HODQFTtUlbne0%OD%H4AwKP%XM`V2H7M2 zjmIe#)Ml20oreb5H{xiTs0me|gCEj=8#@f*8`7LLjdP69iHATZ8R>7uN{3O_i$-7Q zT?q83t&C%#ibaF0%XrV`IU;qBG3x{?UPh{J;h8Tre@GKRy?pLCR?bGg4B;)=&k3IB z)v4QcU#hiOsLfK{G46f~pOCYYweOW$4_01l6?chaW&7X)-mE%e^Y@Mm3 z^gfWMi2(q;@&Q#?xggD#uyaznHvs@$QmMmA6|+I}0tsv! zke_apS=ALQXQcf(F&wj!4|;%I(=M{#G~%3_qMKqpj;Ul)bZ;ofF%8U%Zj3SAKzWe zG^;t!jBA;ujAM+umua@r#|z_RCU8I{tqd^2JANwFH5}uyhHW&^OoAm#i4uPSgM+m> TUhnp>00000NkvXXu0mjfTx~b_ literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-xxhdpi/ic_phone_in_talk_white_18dp.png b/src/main/res/drawable-xxhdpi/ic_phone_in_talk_white_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ec67c6ef906c2a9c5873d795e5190bcfb143ae9a GIT binary patch literal 704 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 + + + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 48ca72cea..f7445bf86 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -919,6 +919,7 @@ Video call Your microphone is unavailable You can only have one call at a time. + Return to ongoing call View %1$d Participant View %1$d Participants diff --git a/src/main/res/values/themes.xml b/src/main/res/values/themes.xml index 2f8ecc434..b9e971cf1 100644 --- a/src/main/res/values/themes.xml +++ b/src/main/res/values/themes.xml @@ -99,6 +99,8 @@ @drawable/ic_attach_file_white_24dp @drawable/ic_lock_open_white_24dp @drawable/ic_call_white_24dp + @drawable/ic_phone_in_talk_white_24dp + @drawable/ic_phone_in_talk_black_18dp @drawable/ic_delete_black_24dp @drawable/ic_search_white_24dp @drawable/ic_lock_open_white_24dp @@ -219,6 +221,8 @@ @drawable/ic_attach_file_white_24dp @drawable/ic_lock_open_white_24dp @drawable/ic_call_white_24dp + @drawable/ic_phone_in_talk_white_24dp + @drawable/ic_phone_in_talk_white_18dp @drawable/ic_delete_white_24dp @drawable/ic_search_white_24dp @drawable/ic_lock_open_white_24dp