Work fork of an Android Jabber client for bridge users git.sr.ht/~singpolyma/cheogram-android
sopranica sgx xmpp jabber
0

Configure Feed

Select the types of activity you want to include in your feed.

render contact’s avatar during incoming call

Daniel Gultsch (Apr 20, 2020, 3:57 PM +0200) 23d1ee5e 187dff3d

+53 -6
+5 -5
src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java
··· 207 207 }); 208 208 binding.addContactButton.setOnClickListener(v -> showAddToRosterDialog(contact)); 209 209 210 - mMediaAdapter = new MediaAdapter(this,R.dimen.media_size); 210 + mMediaAdapter = new MediaAdapter(this, R.dimen.media_size); 211 211 this.binding.media.setAdapter(mMediaAdapter); 212 212 GridManager.setupLayoutManager(this, this.binding.media, R.dimen.media_size); 213 213 } ··· 416 416 account = contact.getAccount().getJid().asBareJid().toString(); 417 417 } 418 418 binding.detailsAccount.setText(getString(R.string.using_account, account)); 419 - AvatarWorkerTask.loadAvatar(contact,binding.detailsContactBadge,R.dimen.avatar_on_details_screen_size); 419 + AvatarWorkerTask.loadAvatar(contact, binding.detailsContactBadge, R.dimen.avatar_on_details_screen_size); 420 420 binding.detailsContactBadge.setOnClickListener(this.onBadgeClick); 421 421 422 422 binding.detailsContactKeys.removeAllViews(); ··· 426 426 if (Config.supportOmemo() && axolotlService != null) { 427 427 final Collection<XmppAxolotlSession> sessions = axolotlService.findSessionsForContact(contact); 428 428 boolean anyActive = false; 429 - for(XmppAxolotlSession session : sessions) { 429 + for (XmppAxolotlSession session : sessions) { 430 430 anyActive = session.getTrust().isActive(); 431 431 if (anyActive) { 432 432 break; ··· 434 434 } 435 435 boolean skippedInactive = false; 436 436 boolean showsInactive = false; 437 - for (final XmppAxolotlSession session :sessions) { 437 + for (final XmppAxolotlSession session : sessions) { 438 438 final FingerprintStatus trust = session.getTrust(); 439 439 hasKeys |= !trust.isCompromised(); 440 440 if (!trust.isActive() && anyActive) { ··· 537 537 public void onMediaLoaded(List<Attachment> attachments) { 538 538 runOnUiThread(() -> { 539 539 int limit = GridManager.getCurrentColumnCount(binding.media); 540 - mMediaAdapter.setAttachments(attachments.subList(0, Math.min(limit,attachments.size()))); 540 + mMediaAdapter.setAttachments(attachments.subList(0, Math.min(limit, attachments.size()))); 541 541 binding.mediaWrapper.setVisibility(attachments.size() > 0 ? View.VISIBLE : View.GONE); 542 542 }); 543 543
+19
src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java
··· 37 37 import eu.siacs.conversations.entities.Contact; 38 38 import eu.siacs.conversations.services.AppRTCAudioManager; 39 39 import eu.siacs.conversations.services.XmppConnectionService; 40 + import eu.siacs.conversations.ui.util.AvatarWorkerTask; 40 41 import eu.siacs.conversations.utils.PermissionUtils; 41 42 import eu.siacs.conversations.xmpp.jingle.AbstractJingleConnection; 42 43 import eu.siacs.conversations.xmpp.jingle.JingleRtpConnection; ··· 248 249 RtpEndUserState state = RtpEndUserState.valueOf(extraLastState); 249 250 updateButtonConfiguration(state); 250 251 updateStateDisplay(state); 252 + updateProfilePicture(state); 251 253 } 252 254 binding.with.setText(account.getRoster().getContact(with).getDisplayName()); 253 255 } ··· 361 363 updateVideoViews(currentState); 362 364 updateStateDisplay(currentState); 363 365 updateButtonConfiguration(currentState); 366 + updateProfilePicture(currentState); 364 367 } 365 368 366 369 private void reInitializeActivityWithRunningRapSession(final Account account, Jid with, String sessionId) { ··· 427 430 } 428 431 } 429 432 433 + private void updateProfilePicture(final RtpEndUserState state) { 434 + if (state == RtpEndUserState.INCOMING_CALL || state == RtpEndUserState.ACCEPTING_CALL) { 435 + final boolean show = getResources().getBoolean(R.bool.show_avatar_incoming_call); 436 + if (show) { 437 + binding.contactPhoto.setVisibility(View.VISIBLE); 438 + AvatarWorkerTask.loadAvatar(getWith(), binding.contactPhoto, R.dimen.publish_avatar_size); 439 + } else { 440 + binding.contactPhoto.setVisibility(View.GONE); 441 + } 442 + } else { 443 + binding.contactPhoto.setVisibility(View.GONE); 444 + } 445 + } 446 + 430 447 private Set<Media> getMedia() { 431 448 return requireRtpConnection().getMedia(); 432 449 } ··· 720 737 updateStateDisplay(state); 721 738 updateButtonConfiguration(state); 722 739 updateVideoViews(state); 740 + updateProfilePicture(state); 723 741 }); 724 742 } else { 725 743 Log.d(Config.LOGTAG, "received update for other rtp session"); ··· 762 780 runOnUiThread(() -> { 763 781 updateStateDisplay(state); 764 782 updateButtonConfiguration(state); 783 + updateProfilePicture(state); 765 784 }); 766 785 resetIntent(account, with, state, actionToMedia(currentIntent.getAction())); 767 786 }
+18 -1
src/main/res/layout/activity_rtp_session.xml
··· 62 62 63 63 </android.support.design.widget.AppBarLayout> 64 64 65 + <LinearLayout 66 + android:layout_width="match_parent" 67 + android:layout_height="wrap_content" 68 + android:layout_above="@+id/button_row" 69 + android:layout_below="@id/app_bar_layout" 70 + android:gravity="center" 71 + android:orientation="horizontal"> 72 + 73 + <com.makeramen.roundedimageview.RoundedImageView 74 + android:id="@+id/contact_photo" 75 + android:layout_width="@dimen/publish_avatar_size" 76 + android:layout_height="@dimen/publish_avatar_size" 77 + app:riv_corner_radius="@dimen/incoming_call_radius" /> 78 + 79 + </LinearLayout> 80 + 65 81 66 82 <org.webrtc.SurfaceViewRenderer 67 83 android:id="@+id/local_video" ··· 93 109 android:layout_alignParentEnd="true" 94 110 android:layout_alignParentRight="true" 95 111 android:layout_alignParentBottom="true" 96 - android:alpha="0.7" 97 112 android:layout_margin="8dp" 113 + android:alpha="0.7" 98 114 android:src="@drawable/ic_mic_off_black_24dp" 99 115 android:tint="@color/white" 100 116 android:visibility="gone" /> 101 117 102 118 <RelativeLayout 119 + android:id="@+id/button_row" 103 120 android:layout_width="288dp" 104 121 android:layout_height="wrap_content" 105 122 android:layout_alignParentBottom="true"
+1
src/main/res/values-h360dp/dimens.xml
··· 1 1 <resources> 2 2 <dimen name="publish_avatar_top_margin">16dp</dimen> 3 3 <dimen name="publish_avatar_size">128dp</dimen> 4 + <dimen name="incoming_call_radius">64dp</dimen> 4 5 </resources>
+1
src/main/res/values-h500dp/dimens.xml
··· 1 1 <resources> 2 2 <dimen name="publish_avatar_top_margin">24dp</dimen> 3 3 <dimen name="publish_avatar_size">192dp</dimen> 4 + <dimen name="incoming_call_radius">96dp</dimen> 4 5 </resources>
+4
src/main/res/values-land/bools.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <resources> 3 + <bool name="show_avatar_incoming_call">false</bool> 4 + </resources>
+4
src/main/res/values/bools.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <resources> 3 + <bool name="show_avatar_incoming_call">true</bool> 4 + </resources>
+1
src/main/res/values/dimens.xml
··· 19 19 20 20 <dimen name="publish_avatar_top_margin">8dp</dimen> 21 21 <dimen name="publish_avatar_size">96dp</dimen> 22 + <dimen name="incoming_call_radius">48dp</dimen> 22 23 <dimen name="avatar_on_status_message">32dp</dimen> 23 24 <dimen name="avatar">48dp</dimen> 24 25 <dimen name="avatar_on_details_screen_size">56dp</dimen>